1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205
|
/*
===========================================================================
Doom 3 GPL Source Code
Copyright (C) 1999-2011 id Software LLC, a ZeniMax Media company.
This file is part of the Doom 3 GPL Source Code ("Doom 3 Source Code").
Doom 3 Source Code is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Doom 3 Source Code is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Doom 3 Source Code. If not, see <http://www.gnu.org/licenses/>.
In addition, the Doom 3 Source Code is also subject to certain additional terms. You should have received a copy of these additional terms immediately following the terms and conditions of the GNU General Public License which accompanied the Doom 3 Source Code. If not, please request a copy in writing from id Software at the address below.
If you have questions concerning this license or the applicable additional terms, you may contact in writing id Software LLC, c/o ZeniMax Media Inc., Suite 120, Rockville, Maryland 20850 USA.
===========================================================================
*/
#if !defined(AFX_CAMWND_H__44B4BA03_781B_11D1_B53C_00AA00A410FC__INCLUDED_)
#define AFX_CAMWND_H__44B4BA03_781B_11D1_B53C_00AA00A410FC__INCLUDED_
#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000
typedef enum
{
cd_wire,
cd_solid,
cd_texture,
cd_light,
cd_blend
} camera_draw_mode;
typedef struct
{
int width, height;
idVec3 origin;
idAngles angles;
camera_draw_mode draw_mode;
idVec3 color; // background
idVec3 forward, right, up; // move matrix
idVec3 vup, vpn, vright; // view matrix
} camera_t;
/////////////////////////////////////////////////////////////////////////////
// CCamWnd window
class CXYWnd;
class CCamWnd : public CWnd
{
DECLARE_DYNCREATE(CCamWnd);
// Construction
public:
CCamWnd();
// Attributes
public:
// Operations
public:
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CCamWnd)
protected:
virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
//}}AFX_VIRTUAL
// Implementation
public:
void ShiftTexture_BrushPrimit(face_t *f, int x, int y);
CXYWnd* m_pXYFriend;
void SetXYFriend(CXYWnd* pWnd);
virtual ~CCamWnd();
camera_t& Camera(){return m_Camera;};
void Cam_MouseControl(float dtime);
void Cam_ChangeFloor(bool up);
void BuildRendererState();
void ToggleRenderMode();
void ToggleRebuildMode();
void ToggleEntityMode();
void ToggleSelectMode();
void ToggleAnimationMode();
void ToggleSoundMode();
void SetProjectionMatrix();
void UpdateCameraView();
void BuildEntityRenderState( entity_t *ent, bool update );
bool GetRenderMode() {
return renderMode;
}
bool GetRebuildMode() {
return rebuildMode;
}
bool GetEntityMode() {
return entityMode;
}
bool GetAnimationMode() {
return animationMode;
}
bool GetSelectMode() {
return selectMode;
}
bool GetSoundMode() {
return soundMode;
}
bool UpdateRenderEntities();
void MarkWorldDirty();
void SetView( const idVec3 &origin, const idAngles &angles ) {
m_Camera.origin = origin;
m_Camera.angles = angles;
}
protected:
void Cam_Init();
void Cam_BuildMatrix();
void Cam_PositionDrag();
void Cam_MouseLook();
void Cam_MouseDown(int x, int y, int buttons);
void Cam_MouseUp (int x, int y, int buttons);
void Cam_MouseMoved (int x, int y, int buttons);
void InitCull();
bool CullBrush (brush_t *b, bool cubicOnly);
void Cam_Draw();
void Cam_Render();
// game renderer interaction
qhandle_t worldModelDef;
idRenderModel *worldModel; // createRawModel of the brush and patch geometry
bool worldDirty;
bool renderMode;
bool rebuildMode;
bool entityMode;
bool selectMode;
bool animationMode;
bool soundMode;
void FreeRendererState();
void UpdateCaption();
bool BuildBrushRenderData(brush_t *brush);
void DrawEntityData();
camera_t m_Camera;
int m_nCambuttonstate;
CPoint m_ptButton;
CPoint m_ptCursor;
CPoint m_ptLastCursor;
face_t* m_pSide_select;
idVec3 m_vCull1;
idVec3 m_vCull2;
int m_nCullv1[3];
int m_nCullv2[3];
bool m_bClipMode;
idVec3 saveOrg;
idAngles saveAng;
bool saveValid;
// Generated message map functions
protected:
void OriginalMouseDown(UINT nFlags, CPoint point);
void OriginalMouseUp(UINT nFlags, CPoint point);
//{{AFX_MSG(CCamWnd)
afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
afx_msg void OnPaint();
afx_msg void OnDestroy();
afx_msg void OnClose();
afx_msg void OnMouseMove(UINT nFlags, CPoint point);
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
afx_msg void OnMButtonDown(UINT nFlags, CPoint point);
afx_msg void OnMButtonUp(UINT nFlags, CPoint point);
afx_msg void OnRButtonDown(UINT nFlags, CPoint point);
afx_msg void OnRButtonUp(UINT nFlags, CPoint point);
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
afx_msg void OnSize(UINT nType, int cx, int cy);
afx_msg void OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags);
afx_msg void OnTimer(UINT nIDEvent);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
/////////////////////////////////////////////////////////////////////////////
//{{AFX_INSERT_LOCATION}}
// Microsoft Developer Studio will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_CAMWND_H__44B4BA03_781B_11D1_B53C_00AA00A410FC__INCLUDED_)
|