FS2_Open
Open source remastering of the Freespace 2 engine
grid.cpp
Go to the documentation of this file.
1 /*
2  * Copyright (C) Volition, Inc. 1999. All rights reserved.
3  *
4  * All source code herein is the property of Volition, Inc. You may not sell
5  * or otherwise commercially exploit the source or things you created based on the
6  * source.
7  *
8 */
9 
10 
11 
12 #include "stdafx.h"
13 #include "FRED.h"
14 #include "Grid.h"
15 
16 #include "render/3d.h"
17 #include "object/object.h"
18 #include "editor.h"
19 
20 #ifdef _DEBUG
21 #undef THIS_FILE
22 static char THIS_FILE[] = __FILE__;
23 #endif
24 
25 extern int double_fine_gridlines;
26 
28 // CGrid dialog
29 
30 // Modeless constructor, MK
31 CGrid::CGrid(CView* pView)
32 {
33  m_pGView = pView;
34 }
35 
36 
37 CGrid::CGrid(CWnd* pParent /*=NULL*/)
38  : CDialog(CGrid::IDD, pParent)
39 {
40  //{{AFX_DATA_INIT(CGrid)
41  m_GridSize = 0;
42  //}}AFX_DATA_INIT
43 
44  m_pGView = NULL;
45 
46 }
47 
48 
49 void CGrid::DoDataExchange(CDataExchange* pDX)
50 {
51  CDialog::DoDataExchange(pDX);
52  //{{AFX_DATA_MAP(CGrid)
53  DDX_Text(pDX, IDC_GRID_SIZE, m_GridSize);
54  DDV_MinMaxUInt(pDX, m_GridSize, 2, 20);
55  //}}AFX_DATA_MAP
56 }
57 
58 
59 BEGIN_MESSAGE_MAP(CGrid, CDialog)
60  //{{AFX_MSG_MAP(CGrid)
61  ON_BN_CLICKED(IDC_GRID_XY_PLANE, OnGridXyPlane)
62  ON_BN_CLICKED(IDC_GRID_XZ_PLANE, OnGridXzPlane)
63  ON_BN_CLICKED(IDC_GRID_YZ_PLANE, OnGridYzPlane)
64  ON_WM_CLOSE()
65  ON_WM_DESTROY()
66  ON_WM_KILLFOCUS()
67  ON_WM_VSCROLL()
68  //}}AFX_MSG_MAP
69 END_MESSAGE_MAP()
70 
72 // CGrid message handlers
73 
74 extern grid *The_grid;
75 
76 void GridOrient(vec3d *forward, vec3d *right)
77 {
78  vec3d center;
79  int nrows, ncols;
80  float square_size;
81 
82  if (The_grid != NULL){
83  center = The_grid->center;
84  nrows = The_grid->nrows;
85  ncols = The_grid->ncols;
86  square_size = The_grid->square_size;
87  } else {
88  vm_vec_make(&center, 0.0f, 0.0f, 0.0f);
89  nrows = 20;
90  ncols = 20;
91  square_size = 2.0f;
92  }
93 
94  The_grid = create_grid(The_grid, forward,
95  right,
96  &center,
97  nrows, ncols,
98  square_size);
99 
100  physics_init(&The_grid->physics);
101 }
102 
104 {
105  vec3d forward, right;
106 
107  vm_vec_make(&forward, 0.0f, 1.0f, 0.0f);
108  vm_vec_make(&right, 1.0f, 0.0f, 0.0f);
109 
110  GridOrient(&forward, &right);
111 }
112 
114 {
115  vec3d forward, right;
116 
117  vm_vec_make(&forward, 0.0f, 0.0f, 1.0f);
118  vm_vec_make(&right, 1.0f, 0.0f, 0.0f);
119 
120  GridOrient(&forward, &right);
121 }
122 
124 {
125  vec3d forward, right;
126 
127  vm_vec_make(&forward, 0.0f, 1.0f, 0.0f);
128  vm_vec_make(&right, 0.0f, 0.0f, 1.0f);
129 
130  GridOrient(&forward, &right);
131 }
132 
133 BOOL CGrid::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext)
134 {
135  return CDialog::Create(IDD, pParentWnd);
136 }
137 
139 {
140  return CDialog::Create(CGrid::IDD);
141 }
142 
143 
145 {
146  DestroyWindow();
147 }
148 
150 {
151  UpdateData(TRUE);
152 
153  CDialog::OnDestroy();
154 
155 }
156 
157 void CGrid::OnKillFocus(CWnd* pNewWnd)
158 {
159  CDialog::OnKillFocus(pNewWnd);
160 
161  DestroyWindow();
162 
163 }
164 
166 {
167  // TODO: Add your specialized code here and/or call the base class
168 
169  UpdateData(TRUE);
170 
171  return CDialog::DestroyWindow();
172 }
173 
175 {
176  CDialog::OnInitDialog();
177 
178  CSpinButtonCtrl* pSpin = (CSpinButtonCtrl*) GetDlgItem(IDC_SPIN_GRID_SIZE);
179  pSpin->SetRange(2, 20);
180  if ((m_GridSize < 2) || (m_GridSize > 20))
182  pSpin->SetPos(m_GridSize);
183 
184  return TRUE; // return TRUE unless you set the focus to a control
185  // EXCEPTION: OCX Property Pages should return FALSE
186 }
187 
188 void CGrid::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
189 {
190  CString strValue;
191 
192  CSpinButtonCtrl* pSpin = (CSpinButtonCtrl*) GetDlgItem(IDC_SPIN_GRID_SIZE);
193  strValue.Format("%i", pSpin->GetPos());
194  pSpin->GetBuddy()->SetWindowText(strValue);
195 
196  The_grid->nrows = pSpin->GetPos()*5;
198 
200 
201  CDialog::OnVScroll(nSBCode, nPos, pScrollBar);
202 }
#define IDC_SPIN_GRID_SIZE
Definition: resource.h:507
grid * create_grid(grid *gridp, vec3d *forward, vec3d *right, vec3d *center, int nrows, int ncols, float square_size)
#define IDC_GRID_YZ_PLANE
Definition: resource.h:505
UINT m_GridSize
Definition: grid.h:30
void modify_grid(grid *gridp)
afx_msg void OnGridXzPlane()
Definition: grid.cpp:113
afx_msg void OnGridYzPlane()
Definition: grid.cpp:123
virtual BOOL DestroyWindow()
Definition: grid.cpp:165
Definition: pstypes.h:88
afx_msg void OnGridXyPlane()
Definition: grid.cpp:103
GLclampf f
Definition: Glext.h:7097
#define TRUE
Definition: pstypes.h:399
#define IDC_GRID_XZ_PLANE
Definition: resource.h:503
void GridOrient(vec3d *forward, vec3d *right)
Definition: grid.cpp:76
unsigned int UINT
Definition: config.h:82
int nrows
Definition: missiongrid.h:22
int double_fine_gridlines
Definition: missiongrid.cpp:21
int ncols
Definition: missiongrid.h:22
virtual void DoDataExchange(CDataExchange *pDX)
Definition: grid.cpp:49
void physics_init(physics_info *pi)
Definition: physics.cpp:49
virtual BOOL OnInitDialog()
Definition: grid.cpp:174
unsigned long DWORD
Definition: config.h:90
BOOL Create()
Definition: grid.cpp:138
#define vm_vec_make(v, _x, _y, _z)
Definition: vecmat.h:48
#define IDC_GRID_XY_PLANE
Definition: resource.h:504
GLdouble GLdouble right
Definition: Glext.h:10330
int BOOL
Definition: config.h:80
afx_msg void OnKillFocus(CWnd *pNewWnd)
Definition: grid.cpp:157
afx_msg void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar *pScrollBar)
Definition: grid.cpp:188
#define IDC_GRID_SIZE
Definition: resource.h:506
CGrid(CWnd *pParent=NULL)
Definition: grid.cpp:37
Definition: grid.h:15
grid * The_grid
Definition: missiongrid.cpp:20
afx_msg void OnClose()
Definition: grid.cpp:144
afx_msg void OnDestroy()
Definition: grid.cpp:149