This repository has been archived on 2025-02-27. You can view files and clone it, but cannot push or open issues or pull requests.
CnC_Renegade/Code/Tools/LevelEdit/CameraMgr.h

221 lines
7.7 KiB
C
Raw Permalink Normal View History

/*
** 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/>.
*/
/***********************************************************************************************
*** C O N F I D E N T I A L --- W E S T W O O D S T U D I O S ***
***********************************************************************************************
* *
* Project Name : LevelEdit *
* *
* $Archive:: /Commando/Code/Tools/LevelEdit/CameraMgr.h $*
* *
* Author:: Patrick Smith *
* *
* $Modtime:: 11/02/00 5:57p $*
* *
* $Revision:: 11 $*
* *
*---------------------------------------------------------------------------------------------*
* Functions: *
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
#if defined(_MSC_VER)
#pragma once
#endif
#ifndef __CAMERAMGR_H
#define __CAMERAMGR_H
#include "refcount.h"
#include "utils.h"
#include "rendobj.h"
#include "assetmgr.h"
#include "camera.h"
#include "physcontrol.h"
#include "hermitespline.h"
// Forward declarations
class NodeClass;
class SoldierGameObj;
class SoldierGameObjDef;
/*class CamaraCharPhys : public CharPhysClass
{
public:
CamaraCharPhys (void);
virtual ~CamaraCharPhys (void);
protected:
RenderObjClass * m_pRenderObj;
};*/
///////////////////////////////////////////////////////////////
//
// CameraMgr
//
///////////////////////////////////////////////////////////////
class CameraMgr
{
public:
///////////////////////////////////////////////////
// Public constructors/destructors
///////////////////////////////////////////////////
CameraMgr (void);
virtual ~CameraMgr (void);
///////////////////////////////////////////////////
// Public data types
///////////////////////////////////////////////////
typedef enum
{
MODE_MOVE_PLANE = 0,
MODE_MOVE_UPDOWN = 1,
MODE_FLY_THROUGH = 2,
MODE_WALK_THROUGH = 3,
MODE_ROTATE_FREE = 4,
MODE_ROTATE_X = 5,
MODE_ROTATE_Y = 6,
MODE_ROTATE_Z = 7,
MODE_ORBIT = 8,
MODE_FLYTO = 9,
MODE_COUNT
} CAMERA_MODE;
typedef enum
{
CAMERA_FRONT = 1,
CAMERA_BACK,
CAMERA_TOP,
CAMERA_BOTTOM,
CAMERA_LEFT,
CAMERA_RIGHT,
CAMERA_COUNT
} CAMERA_POS;
///////////////////////////////////////////////////
// Public methods
///////////////////////////////////////////////////
CameraMgr::CAMERA_MODE Get_Camera_Mode (void) const { return m_CameraMode; }
void Set_Camera_Mode (CAMERA_MODE new_mode);
void Update_Camera (float deltax, float deltay);
void Update_Camera_Animation (void);
void On_Frame (void);
Matrix3D Get_Character_TM (void);
//
// Position methods
//
void Set_Camera_Pos (CAMERA_POS position);
void Set_Transform (const Matrix3D &transform);
void Set_Position (const Vector3 &position);
void Move_Fwd (void) {}
void Move_Bkwd (void) {}
void Turn_Left (void) {}
void Turn_Right (void) {}
void Look_Up (void) {}
void Look_Dn (void) {}
void Look_Center (void) {}
void Increase_Speed (void);
void Decrease_Speed (void);
void Level_Camera (void);
void Goto_Node (NodeClass *node);
void Goto_Group (GroupMgrClass *pgroup);
void Fly_To_Transform (const Matrix3D &transform);
//
// Inline accessors
//
CameraClass * Get_Camera (void) const { return m_pCamera; }
//CamaraCharPhys * Get_Walkthru_Character (void) const { return m_pWalkThroughPhys; }
float Get_Speed_Modifier (void) const { return m_SpeedModifier; }
protected:
///////////////////////////////////////////////////
// Friends
///////////////////////////////////////////////////
friend LRESULT CALLBACK fnCameraKeyboardHook (int code, WPARAM wParam, LPARAM lParam);
friend class CLevelEditView;
///////////////////////////////////////////////////
// Protected methods
///////////////////////////////////////////////////
void Init_Camera (void);
void Auto_Level (void);
void Update_Fly_To (void);
static void Update_Camera_MOVE_ZOOM (CameraClass &camera, float deltax, float deltay);
static void Update_Camera_MOVE_PLANE (CameraClass &camera, float deltax, float deltay);
static void Update_Camera_FLY_THROUGH (CameraClass &camera, float deltax, float deltay);
static void Update_Camera_WALK_THROUGH (CameraClass &camera, float deltax, float deltay);
static void Update_Camera_ROTATE_FREE (CameraClass &camera, float deltax, float deltay);
static void Update_Camera_ROTATE_X (CameraClass &camera, float deltax, float deltay);
static void Update_Camera_ROTATE_Y (CameraClass &camera, float deltax, float deltay);
static void Update_Camera_ROTATE_Z (CameraClass &camera, float deltax, float deltay);
static void Update_Camera_ORBIT (CameraClass &camera, float deltax, float deltay);
static void Update_Camera_FLY_TO (CameraClass &camera, float deltax, float deltay);
///////////////////////////////////////////////////
// Protected data types
///////////////////////////////////////////////////
typedef void (*UPDATE_CAMERA_FN) (CameraClass &camera, float deltax, float deltay);
///////////////////////////////////////////////////
// Static member data
///////////////////////////////////////////////////
static bool _pKeyboardState[256];
static UPDATE_CAMERA_FN _pfnUpdateMethods[CAMERA_MODE::MODE_COUNT];
static HHOOK _hHook;
private:
///////////////////////////////////////////////////
// Private member data
///////////////////////////////////////////////////
bool m_bAutoLevel;
CameraClass * m_pCamera;
CAMERA_MODE m_CameraMode;
Matrix3D m_AutoLevelInitalMatrix;
Matrix3D m_AutoLevelEndMatrix;
double m_AutoLevelPercent;
//CamaraCharPhys * m_pWalkThroughPhys;
PhysControllerClass m_VJoystick;
float m_SpeedModifier;
HermiteSpline3DClass m_FlyToSpline;
Matrix3D m_FlyToStartTransform;
Matrix3D m_FlyToEndTransform;
DWORD m_FlyToStartTime;
SoldierGameObj * m_WalkThruObj;
SoldierGameObjDef * m_WalkThruDef;
};
#endif //__CAMERAMGR_H