home *** CD-ROM | disk | FTP | other *** search
/ GameStar 2006 March / Gamestar_82_2006-03_dvd.iso / DVDStar / Editace / quake4_sdkv10.exe / source / game / vehicle / VehicleController.cpp < prev    next >
C/C++ Source or Header  |  2005-11-14  |  7KB  |  301 lines

  1. //----------------------------------------------------------------
  2. // VehicleController.cpp
  3. //
  4. // Copyright 2002-2004 Raven Software
  5. //----------------------------------------------------------------
  6.  
  7. #include "../../idlib/precompiled.h"
  8. #pragma hdrstop
  9.  
  10. #include "../Game_local.h"
  11. #include "VehicleController.h"
  12. #include "Vehicle.h"
  13.  
  14. /*
  15. =====================
  16. rvVehicleController::rvVehicleController
  17. =====================
  18. */
  19. rvVehicleController::rvVehicleController ( void ) {
  20.     mVehicle  = NULL;
  21.     //mDriver   = NULL;
  22.     mPosition = 0;
  23. }
  24.  
  25. /*
  26. =====================
  27. rvVehicleController::Save
  28. =====================
  29. */
  30. void rvVehicleController::Save ( idSaveGame *savefile ) const {
  31.     mVehicle.Save ( savefile );
  32.     savefile->WriteInt ( mPosition );
  33. }
  34.  
  35. /*
  36. =====================
  37. rvVehicleController::Restore
  38. =====================
  39. */
  40. void rvVehicleController::Restore ( idRestoreGame *savefile ) {
  41.     mVehicle.Restore ( savefile );
  42.     savefile->ReadInt ( mPosition );
  43. }
  44.  
  45. /*
  46. =====================
  47. rvVehicleController::Drive
  48. =====================
  49. */
  50. bool rvVehicleController::Drive ( rvVehicle* vehicle, idActor* driver ) {
  51.     assert ( vehicle && driver );
  52.  
  53.     // Flip the vehicle back over?
  54.     if ( vehicle->IsFlipped ( ) ) {
  55.         vehicle->AutoRight ( vehicle );
  56.         return false;
  57.     }
  58.         
  59.     // Add the driver to the vehicle and cache the position it was added.
  60.     if ( -1 == (mPosition = vehicle->AddDriver ( 0, driver ) ) ) {
  61.         return false;
  62.     }
  63.     
  64.     mVehicle = vehicle;    
  65.  
  66.     //twhitaker: for scripted callback events
  67.     vehicle->OnEnter();
  68.     
  69.     if ( driver->IsType( idPlayer::GetClassType() ) ) {
  70.         idPlayer * player = static_cast< idPlayer *>( driver );
  71.  
  72.         if ( player->GetHud() ) {
  73.             GetHud()->Activate( true, gameLocal.time );
  74.             GetHud()->HandleNamedEvent( "showExitmessage" );
  75.         }
  76.     }
  77.  
  78.     return true;
  79. }
  80.  
  81. /*
  82. =====================
  83. rvVehicleController::Eject
  84. =====================
  85. */
  86. bool rvVehicleController::Eject ( bool force ) {
  87.     if ( !GetVehicle() ) {
  88.         return true;
  89.     }
  90.     
  91.     if ( GetDriver()->IsType( idPlayer::GetClassType() ) ) {
  92.         idPlayer * player = static_cast< idPlayer *>( GetDriver() );
  93.  
  94.         if ( player->GetHud() ) {
  95.             GetHud()->HandleNamedEvent( "hideExitmessage" );
  96.         }
  97.     }
  98.  
  99.     if ( mVehicle->RemoveDriver ( GetPosition(), force ) ) {
  100.         mVehicle->OnExit();
  101.         mVehicle = NULL;
  102.  
  103.         return true;
  104.     }
  105.     
  106.     return false;
  107. }
  108.  
  109. /*
  110. =====================
  111. rvVehicleController::FindClearExitPoint
  112. =====================
  113. */
  114. bool rvVehicleController::FindClearExitPoint( idVec3& origin, idMat3& axis ) const {
  115.     return GetVehicle()->FindClearExitPoint( mPosition, origin, axis );
  116. }
  117.  
  118. /*
  119. =====================
  120. rvVehicleController::KillVehicles
  121. =====================
  122. */
  123. void rvVehicleController::KillVehicles ( void ) {
  124.     KillEntities( idCmdArgs(), rvVehicle::GetClassType() );
  125. }
  126.  
  127. /*
  128. =====================
  129. rvVehicleController::DrawHUD
  130. =====================
  131. */
  132. void rvVehicleController::DrawHUD ( void ) {
  133.     assert ( mVehicle );
  134.     mVehicle->DrawHUD ( mPosition );
  135.  
  136.     if ( GetDriver() && GetDriver()->IsType( idPlayer::GetClassType() ) ) {
  137.         idPlayer * player = static_cast<idPlayer*>( GetDriver() );
  138.         rvVehicleWeapon * weapon = mVehicle->GetPosition( mPosition )->GetActiveWeapon();
  139.         if ( weapon ) {
  140.             if ( weapon->CanZoom() && player->IsZoomed() && player == gameLocal.GetLocalPlayer() ) {
  141.                 weapon->GetZoomGui()->Redraw( gameLocal.time );            
  142.             }
  143. //            if ( mVehicle->GetHud() ) {
  144. //                mVehicle->GetHud()->SetStateFloat( "tram_heatpct", weapon->GetOverheatPercent());
  145. //                 mVehicle->GetHud()->SetStateFloat( "tram_overheat", weapon->GetOverheatState());
  146. //            }
  147.         }
  148.     }
  149. }
  150.  
  151. /*
  152. =====================
  153. rvVehicleController::StartRadioChatter
  154. =====================
  155. */
  156. void rvVehicleController::StartRadioChatter    ( void ) {
  157.     assert ( mVehicle );
  158.     if ( mVehicle->GetHud () ) {
  159.         mVehicle->GetHud ()->HandleNamedEvent( "radioChatterUp" );
  160.     }
  161. }
  162.  
  163. /*
  164. =====================
  165. rvVehicleController::StopRadioChatter
  166. =====================
  167. */
  168. void rvVehicleController::StopRadioChatter ( void ) {
  169.     assert ( mVehicle );
  170.     if ( mVehicle->GetHud () ) {
  171.         mVehicle->GetHud ()->HandleNamedEvent( "radioChatterDown" );
  172.     }
  173. }
  174.  
  175. /*
  176. =====================
  177. rvVehicleController::Give
  178. =====================
  179. */
  180. void rvVehicleController::Give ( const char* statname, const char* value ) {
  181.     if( mVehicle.IsValid() ) {
  182.         mVehicle->Give ( statname, value );
  183.     }
  184. }
  185.  
  186. /*
  187. =====================
  188. rvVehicleController::GetEyePosition
  189. =====================
  190. */
  191. void rvVehicleController::GetEyePosition ( idVec3& origin, idMat3& axis ) const {
  192.     if( mVehicle.IsValid() ) {
  193.         mVehicle->GetEyePosition ( mPosition, origin, axis );
  194.     }
  195. }
  196.  
  197. /*
  198. =====================
  199. rvVehicleController::GetDriverPosition
  200. =====================
  201. */
  202. void rvVehicleController::GetDriverPosition ( idVec3& origin, idMat3& axis ) const {
  203.     if( mVehicle.IsValid() ) {
  204.         mVehicle->GetDriverPosition ( mPosition, origin, axis );
  205.     }
  206. }
  207.  
  208. /*
  209. =====================
  210. rvVehicleController::GetVehicle
  211. =====================
  212. */
  213. rvVehicle* rvVehicleController::GetVehicle ( void ) const {
  214.     return mVehicle;
  215. }
  216.  
  217. idActor* rvVehicleController::GetDriver ( void ) const {
  218.     return (GetVehicle()) ? GetVehicle()->GetPosition(GetPosition())->GetDriver() : NULL;
  219. }
  220.  
  221. /*
  222. =====================
  223. rvVehicleController::SetInput
  224. =====================
  225. */
  226. void rvVehicleController::SetInput ( const usercmd_t& cmd, const idAngles &angles ) {
  227.     if( mVehicle.IsValid() ) {
  228.         mVehicle->SetInput ( mPosition, cmd, angles );
  229.     }
  230. }
  231.  
  232. /*
  233. =====================
  234. rvVehicleController::GetInput
  235. =====================
  236. */
  237. void rvVehicleController::GetInput( usercmd_t& cmd, idAngles &newAngles ) const {
  238.     if( mVehicle.IsValid() ) {
  239.         mVehicle->GetInput( mPosition, cmd, newAngles );
  240.     }
  241. }
  242.  
  243. /*
  244. ================
  245. rvVehicleController::GetHud
  246. ================
  247. */
  248. idUserInterface* rvVehicleController::GetHud( void ) {
  249.     return (IsDriving()) ? mVehicle->GetHud() : NULL;
  250. }
  251.  
  252. /*
  253. ================
  254. rvVehicleController::GetHud
  255. ================
  256. */
  257. const idUserInterface* rvVehicleController::GetHud( void ) const {
  258.     return (IsDriving()) ? mVehicle->GetHud() : NULL;
  259. }
  260.  
  261. /*
  262. ================
  263. rvVehicleController::WriteToSnapshot
  264. ================
  265. */
  266. void rvVehicleController::WriteToSnapshot ( idBitMsgDelta &msg ) const {
  267.     msg.WriteLong ( mPosition );
  268.     msg.WriteLong ( mVehicle.GetSpawnId ( ) );
  269. }
  270.  
  271. /*
  272. ================
  273. rvVehicleController::ReadFromSnapshot
  274. ================
  275. */
  276. void rvVehicleController::ReadFromSnapshot ( const idBitMsgDelta &msg ) {
  277.     mPosition = msg.ReadLong ( );
  278.     mVehicle.SetSpawnId ( msg.ReadLong ( ) );
  279. }
  280.  
  281. /*
  282. ================
  283. rvVehicleController::UpdateCursorGUI
  284. ================
  285. */
  286. void rvVehicleController::UpdateCursorGUI ( idUserInterface* ui ) {
  287.     assert ( mVehicle );
  288.     mVehicle->UpdateCursorGUI ( mPosition, ui );
  289. }
  290.  
  291. /*
  292. ================
  293. rvVehicleController::SelectWeapon
  294. ================
  295. */
  296. void rvVehicleController::SelectWeapon ( int weapon ) {
  297.     if( mVehicle.IsValid() ) {
  298.         mVehicle->GetPosition( mPosition )->SelectWeapon( weapon );
  299.     }
  300. }
  301.