mirror of
https://github.com/scp-fs2open/fs2open.github.com.git
synced 2026-11-07 08:15:59 -10:00
183 lines
3.8 KiB
C++
183 lines
3.8 KiB
C++
/*
|
|
* Copyright (C) Volition, Inc. 1999. All rights reserved.
|
|
*
|
|
* All source code herein is the property of Volition, Inc. You may not sell
|
|
* or otherwise commercially exploit the source or things you created based on the
|
|
* source.
|
|
*
|
|
*/
|
|
|
|
|
|
|
|
#include "stdafx.h"
|
|
#include "FRED.h"
|
|
#include "Grid.h"
|
|
#include "mission/missiongrid.h"
|
|
|
|
#include "render/3d.h"
|
|
#include "object/object.h"
|
|
|
|
#ifdef _DEBUG
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
/**
|
|
* @brief Creates (or recreates) a grid from the two given unit vectors
|
|
*
|
|
* @param forward Vector that points forward
|
|
* @param right Vector that points to the right
|
|
*/
|
|
void GridOrient(vec3d *forward, vec3d *right);
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(CGrid, CDialog)
|
|
//{{AFX_MSG_MAP(CGrid)
|
|
ON_BN_CLICKED(IDC_GRID_XY_PLANE, OnGridXyPlane)
|
|
ON_BN_CLICKED(IDC_GRID_XZ_PLANE, OnGridXzPlane)
|
|
ON_BN_CLICKED(IDC_GRID_YZ_PLANE, OnGridYzPlane)
|
|
ON_WM_CLOSE()
|
|
ON_WM_DESTROY()
|
|
ON_WM_KILLFOCUS()
|
|
ON_WM_VSCROLL()
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
|
|
BOOL CGrid::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext) {
|
|
return CDialog::Create(IDD, pParentWnd);
|
|
}
|
|
|
|
BOOL CGrid::Create() {
|
|
return CDialog::Create(CGrid::IDD);
|
|
}
|
|
|
|
CGrid::CGrid(CView* pView) {
|
|
m_pGView = pView;
|
|
}
|
|
|
|
CGrid::CGrid(CWnd* pParent /*=NULL*/)
|
|
: CDialog(CGrid::IDD, pParent) {
|
|
//{{AFX_DATA_INIT(CGrid)
|
|
m_GridSize = 0;
|
|
//}}AFX_DATA_INIT
|
|
|
|
m_pGView = NULL;
|
|
|
|
}
|
|
|
|
void CGrid::DoDataExchange(CDataExchange* pDX) {
|
|
CDialog::DoDataExchange(pDX);
|
|
//{{AFX_DATA_MAP(CGrid)
|
|
DDX_Text(pDX, IDC_GRID_SIZE, m_GridSize);
|
|
DDV_MinMaxUInt(pDX, m_GridSize, 2, 20);
|
|
//}}AFX_DATA_MAP
|
|
}
|
|
|
|
void CGrid::OnClose() {
|
|
DestroyWindow();
|
|
}
|
|
|
|
void CGrid::OnDestroy() {
|
|
UpdateData(TRUE);
|
|
|
|
CDialog::OnDestroy();
|
|
|
|
}
|
|
|
|
void CGrid::OnGridXyPlane() {
|
|
vec3d forward, right;
|
|
|
|
vm_vec_make(&forward, 0.0f, 1.0f, 0.0f);
|
|
vm_vec_make(&right, 1.0f, 0.0f, 0.0f);
|
|
|
|
GridOrient(&forward, &right);
|
|
}
|
|
|
|
void CGrid::OnGridXzPlane() {
|
|
vec3d forward, right;
|
|
|
|
vm_vec_make(&forward, 0.0f, 0.0f, 1.0f);
|
|
vm_vec_make(&right, 1.0f, 0.0f, 0.0f);
|
|
|
|
GridOrient(&forward, &right);
|
|
}
|
|
|
|
void CGrid::OnGridYzPlane() {
|
|
vec3d forward, right;
|
|
|
|
vm_vec_make(&forward, 0.0f, 1.0f, 0.0f);
|
|
vm_vec_make(&right, 0.0f, 0.0f, 1.0f);
|
|
|
|
GridOrient(&forward, &right);
|
|
}
|
|
|
|
BOOL CGrid::OnInitDialog() {
|
|
CDialog::OnInitDialog();
|
|
|
|
CSpinButtonCtrl* pSpin = (CSpinButtonCtrl*) GetDlgItem(IDC_SPIN_GRID_SIZE);
|
|
pSpin->SetRange(2, 20);
|
|
if ((m_GridSize < 2) || (m_GridSize > 20))
|
|
m_GridSize = The_grid->ncols / 5;
|
|
pSpin->SetPos(m_GridSize);
|
|
|
|
return TRUE; // return TRUE unless you set the focus to a control
|
|
// EXCEPTION: OCX Property Pages should return FALSE
|
|
}
|
|
|
|
void CGrid::OnKillFocus(CWnd* pNewWnd) {
|
|
CDialog::OnKillFocus(pNewWnd);
|
|
|
|
DestroyWindow();
|
|
|
|
}
|
|
|
|
void CGrid::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) {
|
|
CString strValue;
|
|
|
|
CSpinButtonCtrl* pSpin = (CSpinButtonCtrl*) GetDlgItem(IDC_SPIN_GRID_SIZE);
|
|
strValue.Format("%i", pSpin->GetPos());
|
|
pSpin->GetBuddy()->SetWindowText(strValue);
|
|
|
|
The_grid->nrows = pSpin->GetPos() * 5;
|
|
The_grid->ncols = The_grid->nrows;
|
|
|
|
modify_grid(The_grid);
|
|
|
|
CDialog::OnVScroll(nSBCode, nPos, pScrollBar);
|
|
}
|
|
|
|
BOOL CGrid::DestroyWindow() {
|
|
// TODO: Add your specialized code here and/or call the base class
|
|
|
|
UpdateData(TRUE);
|
|
|
|
return CDialog::DestroyWindow();
|
|
}
|
|
|
|
void GridOrient(vec3d *forward, vec3d *right) {
|
|
vec3d center;
|
|
int nrows, ncols;
|
|
float square_size;
|
|
|
|
if (The_grid != NULL) {
|
|
center = The_grid->center;
|
|
nrows = The_grid->nrows;
|
|
ncols = The_grid->ncols;
|
|
square_size = The_grid->square_size;
|
|
} else {
|
|
vm_vec_make(¢er, 0.0f, 0.0f, 0.0f);
|
|
nrows = 20;
|
|
ncols = 20;
|
|
square_size = 2.0f;
|
|
}
|
|
|
|
The_grid = create_grid(The_grid, forward,
|
|
right,
|
|
¢er,
|
|
nrows, ncols,
|
|
square_size);
|
|
|
|
physics_init(&The_grid->physics);
|
|
}
|