The-Simpsons-Hit-and-Run/game/code/camera/conversationcam.h

146 lines
4.5 KiB
C++

//=============================================================================
// Copyright (C) 2002 Radical Entertainment Ltd. All rights reserved.
//
// File: ConversationCam.h
//
// Description: Camera used for outdoor conversation. Based of Cary's Bumper Cam
//
// History: 24/04/2002 + Created -- Cary Brisebois, Chuck Chow
//
//=============================================================================
#ifndef ConversationCam_H
#define ConversationCam_H
//========================================
// Nested Includes
//========================================
#include <camera/supercam.h>
#include <camera/ConversationCamdata.h>
//========================================
// Forward References
//========================================
class Character;
class ISuperCamTarget;
#define CONV_CAM_MAX_CHARACTERS 2
//=============================================================================
//
// Synopsis: Blahblahblah
//
//=============================================================================
class ConversationCam : public SuperCam
{
public:
enum ConversationFlag
{
READY = SUPERCAM_END //This is to carry on from the supercam flags
};
ConversationCam();
virtual ~ConversationCam();
//Update: Called when you want the super cam to update its state.
virtual void Update( unsigned int milliseconds);
//Returns the name of the super cam.
//This can be used in the FE or debug info
virtual const char* const GetName() const;
//This loads the off-line created settings for the camera.
//It is passed in as a byte stream of some data of known size.
virtual void LoadSettings( unsigned char* settings );
virtual Type GetType();
//These are for favourable support of this command
virtual void SetTarget( ISuperCamTarget* target );
virtual void AddTarget( ISuperCamTarget* target );
void LockCharacterPositions();
void SetCharacter( const int index, Character* character );
virtual void OnInit();
virtual void OnShutdown();
unsigned int GetNumTargets() const;
static void SetCameraByName( const tName& name );
static void SetCameraDistanceByName( const tName& name, const float distance );
static void SetPcCameraByName( const tName& name );
static void SetNpcCameraByName( const tName& name );
static void UsePcCam();
static void UseNpcCam();
static void SetNpcIsChild( const bool isChild );
static void SetPcIsChild( const bool isChild );
static void SetCamBestSide( const tName& name );
private:
static void SetCameraByIndex( const unsigned int index );
static void SetCameraDistanceByIndex( const unsigned int index, const float distance );
//These functions are to allow real-time control of the settings of
//the supercam.
virtual void OnRegisterDebugControls();
virtual void OnUnregisterDebugControls();
void CopyDefaultsToCameraPerLineOfDialog();
ConversationCamData mData;
ISuperCamTarget* mTargets[2];
rmt::Vector mPositionOriginal;
rmt::Vector mTargetOriginal;
rmt::Vector mPosition;
rmt::Vector mTarget;
float mTargetHeight;
float mPositionHeight;
Character* mCharacters[ CONV_CAM_MAX_CHARACTERS ];
static int sInstCount;
//Prevent wasteful constructor creation.
ConversationCam( const ConversationCam& ConversationCam );
ConversationCam& operator=( const ConversationCam& ConversationCam );
};
//*****************************************************************************
//
// Inline Public Member Functions
//
//*****************************************************************************
//=============================================================================
// ConversationCam::GetName
//=============================================================================
// Description: Comment
//
// Parameters: ()
//
// Return: const char* const
//
//=============================================================================
inline const char* const ConversationCam::GetName() const
{
return "CONVERSATION_CAM";
}
//=============================================================================
// ConversationCam::GetType
//=============================================================================
// Description: Comment
//
// Parameters: ()
//
// Return: Type
//
//=============================================================================
inline SuperCam::Type ConversationCam::GetType()
{
return CONVERSATION_CAM;
}
#endif //ConversationCam_H