#ifndef __GAME_CAMERA_H__ #define __GAME_CAMERA_H__ /* =============================================================================== Camera providing an alternative view of the level. =============================================================================== */ class idCamera : public idEntity { public: ABSTRACT_PROTOTYPE( idCamera ); void Spawn( void ); virtual void GetViewParms( renderView_t *view ) = 0; virtual renderView_t * GetRenderView(); virtual void Stop( void ){} ; }; /* =============================================================================== idCameraView =============================================================================== */ extern const idEventDef EV_SetFOV; extern const idEventDef EV_Camera_Start; extern const idEventDef EV_Camera_Stop; class idCameraView : public idCamera { public: CLASS_PROTOTYPE( idCameraView ); idCameraView(); // save games void Save( idSaveGame *savefile ) const; // archives object for save game file void Restore( idRestoreGame *savefile ); // unarchives object from save game file void Spawn( ); virtual void GetViewParms( renderView_t *view ); virtual void Stop( void ); protected: void Event_Activate( idEntity *activator ); void Event_SetAttachments(); void SetAttachment( idEntity **e, const char *p ); // RAVEN BEGIN // bdube: changed fov to interpolated value idInterpolate fov; // RAVEN END idEntity *attachedTo; idEntity *attachedView; // RAVEN BEGIN // bdube: added setfov event void Event_SetFOV ( float fov ); void Event_BlendFOV ( float beginFOV, float endFOV, float blendTime ); void Event_GetFOV ( void ); // RAVEN END }; /* =============================================================================== A camera which follows a path defined by an animation. =============================================================================== */ // RAVEN BEGIN // rjohnson: camera is now contained in a def for frame commands /* ============================================================================================== rvCameraAnimation ============================================================================================== */ class idDeclCameraDef; typedef struct { idCQuat q; idVec3 t; float fov; } cameraFrame_t; class rvCameraAnimation { private: idList cameraCuts; idList camera; idList frameLookup; idList frameCommands; int frameRate; idStr name; idStr realname; public: rvCameraAnimation(); rvCameraAnimation( const idDeclCameraDef *cameraDef, const rvCameraAnimation *anim ); ~rvCameraAnimation(); void SetAnim( const idDeclCameraDef *cameraDef, const char *sourcename, const char *animname, idStr filename ); const char *Name( void ) const; const char *FullName( void ) const; int NumFrames( void ) const; const cameraFrame_t * GetAnim( int index ) const; int NumCuts( void ) const; const int GetCut( int index ) const; const int GetFrameRate( void ) const; const char *AddFrameCommand( const class idDeclCameraDef *cameraDef, const idList& frames, idLexer &src, const idDict *def ); void CallFrameCommands( idEntity *ent, int from, int to ) const; void CallFrameCommandSound ( const frameCommand_t& command, idEntity* ent, const s_channelType channel ) const; }; ID_INLINE const cameraFrame_t *rvCameraAnimation::GetAnim( int index ) const { return &camera[ index ]; } ID_INLINE const int rvCameraAnimation::GetCut( int index ) const { return cameraCuts[ index ]; } ID_INLINE const int rvCameraAnimation::GetFrameRate( void ) const { return frameRate; } /* ============================================================================================== idDeclCameraDef ============================================================================================== */ // RAVEN BEGIN // jsinger: added to support serialization/deserialization of binary decls #ifdef RV_BINARYDECLS class idDeclCameraDef : public idDecl, public Serializable<'IDCD'> { public: idDeclCameraDef( SerialInputStream &stream ); virtual void Write( SerialOutputStream &stream ) const; virtual void AddReferences() const; #else class idDeclCameraDef : public idDecl { #endif // RAVEN END public: idDeclCameraDef(); ~idDeclCameraDef(); virtual size_t Size( void ) const; virtual const char * DefaultDefinition( void ) const; virtual bool Parse( const char *text, const int textLength, bool noCaching ); virtual void FreeData( void ); // RAVEN BEGIN // jscott: to prevent a recursive crash virtual bool RebuildTextSource( void ) { return( false ); } // scork: for detailed error-reporting virtual bool Validate( const char *psText, int iTextLength, idStr &strReportTo ) const; // RAVEN END void Touch( void ) const; int NumAnims( void ) const; const rvCameraAnimation * GetAnim( int index ) const; int GetSpecificAnim( const char *name ) const; int GetAnim( const char *name ) const; bool HasAnim( const char *name ) const; private: void CopyDecl( const idDeclCameraDef *decl ); bool ParseAnim( idLexer &src, int numDefaultAnims ); private: idList anims; }; ID_INLINE const rvCameraAnimation *idDeclCameraDef::GetAnim( int index ) const { if ( ( index < 1 ) || ( index > anims.Num() ) ) { return NULL; } return anims[ index - 1 ]; } /* ============================================================================================== idCameraAnim ============================================================================================== */ class idCameraAnim : public idCamera { public: CLASS_PROTOTYPE( idCameraAnim ); idCameraAnim(); ~idCameraAnim(); // save games void Save( idSaveGame *savefile ) const; // archives object for save game file void Restore( idRestoreGame *savefile ); // unarchives object from save game file void Spawn( void ); virtual void GetViewParms( renderView_t *view ); private: int threadNum; idVec3 offset; int starttime; int cycle; const idDeclCameraDef *cameraDef; int lastFrame; idEntityPtr activator; void Start( void ); void Stop( void ); void Think( void ); void LoadAnim( void ); void Event_Start( void ); void Event_Stop( void ); void Event_SetCallback( void ); void Event_Activate( idEntity *activator ); // RAVEN BEGIN // mekberg: wait support void Event_IsActive( ); idList imageTable; idList imageCmds; // RAVEN END }; // RAVEN END // RAVEN BEGIN /* =============================================================================== rvCameraPortalSky =============================================================================== */ // jscott: for portal skies class rvCameraPortalSky : public idCamera { public: CLASS_PROTOTYPE( rvCameraPortalSky ); rvCameraPortalSky( void ) {} ~rvCameraPortalSky( void ) {} // save games void Save( idSaveGame *savefile ) const; // archives object for save game file void Restore( idRestoreGame *savefile ); // unarchives object from save game file void Spawn( void ); virtual void GetViewParms( renderView_t *view ); }; /* =============================================================================== rvCameraPlayback =============================================================================== */ class rvCameraPlayback : public idCamera { public: CLASS_PROTOTYPE( rvCameraPlayback ); rvCameraPlayback( void ) {} ~rvCameraPlayback( void ) {} // save games void Save( idSaveGame *savefile ) const; // archives object for save game file void Restore( idRestoreGame *savefile ); // unarchives object from save game file void Spawn( void ); virtual void GetViewParms( renderView_t *view ); private: int startTime; const rvDeclPlayback *playback; }; // RAVEN END #endif /* !__GAME_CAMERA_H__ */