Files
Cyd 2b8ca921cb Initial full mirror of c:\VWE (source + assets + toolchain + outputs) via Git LFS
Complete disaster-recovery snapshot: engine/game source, game data assets,
VC6 toolchain + DX SDKs, build outputs, deployed game, and _UNUSED archive.
Large binaries in Git LFS; text preserved byte-for-byte (core.autocrlf=false,
no eol attributes). See RECOVERY.md for the one-clone rebuild procedure.
2026-06-24 21:28:16 -05:00

85 lines
3.6 KiB
C++

// CameraStateEngine.h **********************************************//
// Created Owner Modification //
// Copyright Microsoft Corporation, 2002 //
// -------- ------ ------------- //
// 3/7/2002 sdemar provides FSM for spectator camera mgt //
//*******************************************************************//
#if !defined(MSR_CAMERA_STATE_ENGINE_)
#define MSR_CAMERA_STATE_ENGINE_
#include "SpectatorTimer.hpp"
#include "MW4\MW4Headers.hpp"
#include "Adept\GlobalPointerManager.hpp"
using namespace Adept;
#include <GameOS\GameOS.hpp>
//**************************************************
namespace MSRSpectator
{
class CCameraStateEngine
{
public:
// public methods
CCameraStateEngine(); // ctor
~CCameraStateEngine(); // dtor
int GetCameraStateToExecute(bool& stateChanged, int& cameraDist); // returns camera shot specific state to game engine
void StateTransitionExecute(bool fIsSamePairing, float distanceBetween); // fIsSamePairing is an overide condition for overShoulder stuff
bool GetIsTimeToSelectNewShot(); // gets boolean if new shot initialized
void ForceStateChange(); // triggers an overidden state change for special cases
void BumpStateTimer(double addAmt); // when transitioning in overshoulder shots, may need to add time to complete transition
double GetDampTimerRemaining(); // returns the amount of time remaining for current camera transition
void InitDampTimer(double); // initializes the current camera transition timer
void ExpireDampTimer(); // expires the current camera transition timer
bool fIsValidSideDistance(float dist) const; // true if distance value legal for side camera aspect view
void NullSpectatorState(); // shifts camera state to std observermode when no enemy of interest
static CCameraStateEngine* GetInstance() // required to support MW4's global pointer manager
{
return reinterpret_cast<CCameraStateEngine*>( GlobalPointers::GetGlobalPointer(CameraStateEnginePointerIndex));
};
void TestInstance(void) const; // required to support MW4'S Check_Object()
// public data
enum // exposed state constants
{
STATE_FRONT_SHOT,
STATE_OVERSHOULDER_SHOT,
STATE_FIXED_TRACKING_SHOT,
STATE_SIDE_SHOT,
STATE_STD_OBSERVERMODE,
STATE_DEATH_SEQUENCE_START,
STATE_DEATH_SEQUENCE_TRANS,
STATE_DEATH_SEQUENCE_SHOT,
};
enum
{
NO_RANGE = -1,
CLOSESHOT = 0,
MEDIUMSHOT = 1,
LONGSHOT = 2,
};
private:
// private data
CSpectatorTimer m_stateTimer; // determines when to transition to new camera state
CSpectatorTimer m_dampTimer; // used for camera damping transitions in overshoulder shots
int m_cameraState; // current camera state
int m_cameraDist;
bool m_fSelectState; // true if need to get new state
bool m_fNewShot; // true only when shot is first initialized
bool m_fPrevWasOverShoulder; // true if last camera was an over shoulder shot type
float m_distanceBetween; // distance between entities, used to determine camera shots
enum {MAX_SIDE_DIST = 90}; // maximum distance between hero and enemy for side shots
char bigThing[256]; // MW4 memory allocation doesn't like small things
};
}
#endif // !defined(MSR_CAMERA_STATE_ENGINE_)