#include "../../idlib/precompiled.h" #pragma hdrstop #include "../Game_local.h" #include "VehicleStatic.h" class rvVehicleDropPod : public rvVehicleStatic { public: CLASS_PROTOTYPE( rvVehicleDropPod ); rvVehicleDropPod ( void ); void Spawn ( void ); virtual bool GetPhysicsToVisualTransform ( idVec3 &origin, idMat3 &axis ); private: stateResult_t State_Idle ( const stateParms_t& parms ); stateResult_t State_IdleThink ( const stateParms_t& parms ); stateResult_t State_IdleOffline ( const stateParms_t& parms ); stateResult_t State_ScriptedAnim ( const stateParms_t& parms ); void Event_ScriptedAnim ( const char* animname, int blendFrames, bool loop, bool endWithIdle ); void Event_ScriptedDone ( void ); void Event_ScriptedStop ( void ); CLASS_STATES_PROTOTYPE ( rvVehicleDropPod ); }; CLASS_DECLARATION( rvVehicleStatic, rvVehicleDropPod ) EVENT( AI_ScriptedAnim, rvVehicleDropPod::Event_ScriptedAnim ) EVENT( AI_ScriptedDone, rvVehicleDropPod::Event_ScriptedDone ) EVENT( AI_ScriptedStop, rvVehicleDropPod::Event_ScriptedStop ) END_CLASS /* ================ rvVehicleDropPod::rvVehicleDropPod ================ */ rvVehicleDropPod::rvVehicleDropPod ( void ) { } /* ================ rvVehicleDropPod::Spawn ================ */ void rvVehicleDropPod::Spawn ( void ) { SetAnimState ( ANIMCHANNEL_LEGS, "State_IdleOffline", 0 ); } /* =============================================================================== States =============================================================================== */ CLASS_STATES_DECLARATION ( rvVehicleDropPod ) STATE ( "State_Idle", rvVehicleDropPod::State_Idle ) STATE ( "State_IdleThink", rvVehicleDropPod::State_IdleThink ) STATE ( "State_IdleOffline", rvVehicleDropPod::State_IdleOffline ) STATE ( "State_ScriptedAnim", rvVehicleDropPod::State_ScriptedAnim ) END_CLASS_STATES /* ================ rvVehicleDropPod::State_IdleOffline ================ */ stateResult_t rvVehicleDropPod::State_IdleOffline ( const stateParms_t& parms ) { vfl.frozen = true; PlayCycle ( ANIMCHANNEL_LEGS, "idle", parms.blendFrames ); PostAnimState ( ANIMCHANNEL_LEGS, "Wait_Driver", 0 ); PostAnimState ( ANIMCHANNEL_LEGS, "State_Idle", 0 ); return SRESULT_DONE; } /* ================ rvVehicleDropPod::State_Idle ================ */ stateResult_t rvVehicleDropPod::State_Idle ( const stateParms_t& parms ) { if ( SRESULT_WAIT != State_IdleThink ( parms ) ) { return SRESULT_DONE; } return SRESULT_DONE; } /* ================ rvVehicleDropPod::State_IdleThink ================ */ stateResult_t rvVehicleDropPod::State_IdleThink ( const stateParms_t& parms ) { if ( !vfl.driver ) { PostAnimState ( ANIMCHANNEL_LEGS, "State_IdleOffline", parms.blendFrames ); return SRESULT_DONE; } return SRESULT_WAIT; } /* ================ rvVehicleDropPod::State_ScriptedAnim ================ */ stateResult_t rvVehicleDropPod::State_ScriptedAnim ( const stateParms_t& parms ) { if ( !AnimDone ( ANIMCHANNEL_LEGS, parms.blendFrames ) ) { return SRESULT_WAIT; } Event_ScriptedStop(); return SRESULT_DONE; } /* ================ rvVehicleDropPod::Event_ScriptedAnim ================ */ void rvVehicleDropPod::Event_ScriptedAnim( const char* animname, int blendFrames, bool loop, bool endWithIdle ) { vfl.endWithIdle = endWithIdle; if ( loop ) { PlayCycle ( ANIMCHANNEL_LEGS, animname, blendFrames ); } else { PlayAnim ( ANIMCHANNEL_LEGS, animname, blendFrames ); } SetAnimState ( ANIMCHANNEL_LEGS, "State_ScriptedAnim", blendFrames ); vfl.scripted = true; } /* ================ rvVehicleDropPod::Event_ScriptedDone ================ */ void rvVehicleDropPod::Event_ScriptedDone( void ) { idThread::ReturnInt( !vfl.scripted ); } /* ================ rvVehicleDropPod::Event_ScriptedStop ================ */ void rvVehicleDropPod::Event_ScriptedStop( void ) { vfl.scripted = false; if ( vfl.endWithIdle ) { SetAnimState ( ANIMCHANNEL_LEGS, "State_Idle", 1 ); } } /* ================ rvVehicleDropPod::GetPhysicsToVisualTransform ================ */ bool rvVehicleDropPod::GetPhysicsToVisualTransform ( idVec3 &origin, idMat3 &axis ) { // if ( GetBindMaster() ) { // axis = viewAxis; // origin.Zero(); // return true; // } return false; }