mirror of
https://github.com/electronicarts/CnC_Renegade.git
synced 2025-12-16 23:51:41 -05:00
Initial commit of Command & Conquer Renegade source code.
This commit is contained in:
263
Code/Tools/W3DView/GraphicView.h
Normal file
263
Code/Tools/W3DView/GraphicView.h
Normal file
@@ -0,0 +1,263 @@
|
||||
/*
|
||||
** Command & Conquer Renegade(tm)
|
||||
** Copyright 2025 Electronic Arts Inc.
|
||||
**
|
||||
** This program 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.
|
||||
**
|
||||
** This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#if !defined(AFX_GRAPHICVIEW_H__2BB39E41_5D3A_11D2_9FC6_00104B791122__INCLUDED_)
|
||||
#define AFX_GRAPHICVIEW_H__2BB39E41_5D3A_11D2_9FC6_00104B791122__INCLUDED_
|
||||
|
||||
#if _MSC_VER >= 1000
|
||||
#pragma once
|
||||
#endif // _MSC_VER >= 1000
|
||||
// GraphicView.h : header file
|
||||
//
|
||||
|
||||
/////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Constants
|
||||
//
|
||||
#define ROTATION_X 0x01
|
||||
#define ROTATION_Y 0x02
|
||||
#define ROTATION_Z 0x04
|
||||
#define ROTATION_X_BACK 0x08
|
||||
#define ROTATION_Y_BACK 0x10
|
||||
#define ROTATION_Z_BACK 0x20
|
||||
|
||||
|
||||
// Forward declarations
|
||||
class ParticleEmitterClass;
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// CGraphicView view
|
||||
|
||||
#include "Camera.H"
|
||||
|
||||
class CGraphicView : public CView
|
||||
{
|
||||
protected:
|
||||
CGraphicView(); // protected constructor used by dynamic creation
|
||||
DECLARE_DYNCREATE(CGraphicView)
|
||||
|
||||
// Attributes
|
||||
public:
|
||||
|
||||
// Operations
|
||||
public:
|
||||
|
||||
// Overrides
|
||||
// ClassWizard generated virtual function overrides
|
||||
//{{AFX_VIRTUAL(CGraphicView)
|
||||
public:
|
||||
virtual void OnInitialUpdate();
|
||||
protected:
|
||||
virtual void OnDraw(CDC* pDC); // overridden to draw this view
|
||||
virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam);
|
||||
//}}AFX_VIRTUAL
|
||||
|
||||
// Implementation
|
||||
protected:
|
||||
virtual ~CGraphicView();
|
||||
#ifdef _DEBUG
|
||||
virtual void AssertValid() const;
|
||||
virtual void Dump(CDumpContext& dc) const;
|
||||
#endif
|
||||
|
||||
// Generated message map functions
|
||||
protected:
|
||||
//{{AFX_MSG(CGraphicView)
|
||||
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
|
||||
afx_msg void OnSize(UINT nType, int cx, int cy);
|
||||
afx_msg void OnDestroy();
|
||||
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
|
||||
afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
|
||||
afx_msg void OnMouseMove(UINT nFlags, CPoint point);
|
||||
afx_msg void OnRButtonUp(UINT nFlags, CPoint point);
|
||||
afx_msg void OnRButtonDown(UINT nFlags, CPoint point);
|
||||
afx_msg void OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI);
|
||||
//}}AFX_MSG
|
||||
DECLARE_MESSAGE_MAP()
|
||||
|
||||
public:
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
//
|
||||
// Public Data Types
|
||||
//
|
||||
typedef enum
|
||||
{
|
||||
AnimInvalid = -1,
|
||||
AnimPlaying = 0,
|
||||
AnimStopped = 1,
|
||||
AnimPaused = 2
|
||||
} ANIMATION_STATE;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
CameraFront = -1,
|
||||
CameraBack = 0,
|
||||
CameraTop = 1,
|
||||
CameraBottom = 2,
|
||||
CameraLeft = 3,
|
||||
CameraRight = 4
|
||||
} CAMERA_POS;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
NoRotation = 0,
|
||||
RotateX = ROTATION_X,
|
||||
RotateY = ROTATION_Y,
|
||||
RotateZ = ROTATION_Z,
|
||||
RotateXBack = ROTATION_X_BACK,
|
||||
RotateYBack = ROTATION_Y_BACK,
|
||||
RotateZBack = ROTATION_Z_BACK
|
||||
} OBJECT_ROTATION;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
FreeRotation = 0,
|
||||
OnlyRotateX = ROTATION_X,
|
||||
OnlyRotateY = ROTATION_Y,
|
||||
OnlyRotateZ = ROTATION_Z
|
||||
} CAMERA_ROTATION;
|
||||
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
//
|
||||
// Public Methods
|
||||
//
|
||||
|
||||
BOOL InitializeGraphicView (void);
|
||||
|
||||
//
|
||||
// Initial display methods
|
||||
//
|
||||
void Reset_Camera_To_Display_Sphere (SphereClass &sphere);
|
||||
void Reset_Camera_To_Display_Object (RenderObjClass &physObject);
|
||||
void Reset_Camera_To_Display_Emitter (ParticleEmitterClass &emitter);
|
||||
void Load_Default_Dat (void);
|
||||
|
||||
void UpdateDisplay (void);
|
||||
void RepaintView (BOOL bUpdateAnimation = TRUE, DWORD ticks_to_use = 0);
|
||||
void SetActiveUpdate (BOOL bActive)
|
||||
{ m_bActive = bActive;
|
||||
if (!m_bActive) { ::SetProp (m_hWnd, "Inactive", (HANDLE)1); }
|
||||
else { RemoveProp (m_hWnd, "Inactive"); m_dwLastFrameUpdate = ::GetTickCount (); }
|
||||
}
|
||||
|
||||
void Allow_Update (bool onoff);
|
||||
|
||||
//
|
||||
// Animation methods
|
||||
//
|
||||
float GetAnimationSpeed (void) const { return m_animationSpeed; }
|
||||
void SetAnimationSpeed (float animationSpeed) { m_animationSpeed = animationSpeed; }
|
||||
ANIMATION_STATE GetAnimationState (void) const { return m_animationState; }
|
||||
void SetAnimationState (ANIMATION_STATE animationState);
|
||||
|
||||
//
|
||||
// Camera Methods
|
||||
//
|
||||
void SetAllowedCameraRotation (CAMERA_ROTATION cameraRotation);
|
||||
CAMERA_ROTATION GetAllowedCameraRotation () const { return m_allowedCameraRotation; }
|
||||
void SetCameraPos (CAMERA_POS cameraPos);
|
||||
class CameraClass *GetCamera (void) const { return m_pCamera; }
|
||||
|
||||
float Get_Camera_Distance (void) const { return m_CameraDistance; }
|
||||
void Set_Camera_Distance (float dist);
|
||||
|
||||
void Set_Camera_Bone_Pos_X (bool onoff) { m_CameraBonePosX = onoff; }
|
||||
BOOL Is_Camera_Bone_Pos_X (void) const { return m_CameraBonePosX; }
|
||||
|
||||
//
|
||||
// Object rotation methods
|
||||
//
|
||||
void ResetObject (void);
|
||||
void RotateObject (OBJECT_ROTATION rotation);
|
||||
OBJECT_ROTATION GetObjectRotation (void) const { return m_objectRotation; }
|
||||
|
||||
//
|
||||
// Light rotation methods
|
||||
//
|
||||
void Rotate_Light (OBJECT_ROTATION rotation) { m_LightRotation = rotation; }
|
||||
OBJECT_ROTATION Get_Light_Rotation (void) const { return m_LightRotation; }
|
||||
|
||||
//
|
||||
// Fullscreen mode
|
||||
//
|
||||
BOOL Is_Fullscreen (void) const { return !(BOOL)m_iWindowed; }
|
||||
void Set_Fullscreen (bool fullscreen) { m_iWindowed = fullscreen ? 0 : 1; InitializeGraphicView (); }
|
||||
|
||||
//
|
||||
// Misc
|
||||
//
|
||||
RenderObjClass * Get_Light_Mesh (void) const { return m_pLightMesh; }
|
||||
Vector3 & Get_Object_Center (void) { return m_ObjectCenter; }
|
||||
|
||||
//
|
||||
// FOV methods
|
||||
//
|
||||
void Set_FOV (double hfov, double vfov, bool force = false);
|
||||
void Reset_FOV (void);
|
||||
|
||||
protected:
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
//
|
||||
// Protected methods
|
||||
//
|
||||
void Rotate_Object (void);
|
||||
void Rotate_Light (void);
|
||||
|
||||
private:
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
//
|
||||
// Private Member Data
|
||||
//
|
||||
BOOL m_bInitialized;
|
||||
BOOL m_bActive;
|
||||
UINT m_TimerID;
|
||||
CameraClass * m_pCamera;
|
||||
RenderObjClass * m_pLightMesh;
|
||||
bool m_bLightMeshInScene;
|
||||
Vector3 m_ObjectCenter;
|
||||
SphereClass m_ViewedSphere;
|
||||
|
||||
BOOL m_bMouseDown;
|
||||
BOOL m_bRMouseDown;
|
||||
POINT m_lastPoint;
|
||||
int m_iWindowed;
|
||||
int m_UpdateCounter;
|
||||
float m_CameraDistance;
|
||||
DWORD m_ParticleCountUpdate;
|
||||
BOOL m_CameraBonePosX;
|
||||
|
||||
// Animation data
|
||||
DWORD m_dwLastFrameUpdate;
|
||||
float m_animationSpeed;
|
||||
ANIMATION_STATE m_animationState;
|
||||
OBJECT_ROTATION m_objectRotation;
|
||||
OBJECT_ROTATION m_LightRotation;
|
||||
CAMERA_ROTATION m_allowedCameraRotation;
|
||||
};
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
//{{AFX_INSERT_LOCATION}}
|
||||
// Microsoft Developer Studio will insert additional declarations immediately before the previous line.
|
||||
|
||||
#endif // !defined(AFX_GRAPHICVIEW_H__2BB39E41_5D3A_11D2_9FC6_00104B791122__INCLUDED_)
|
||||
Reference in New Issue
Block a user