mirror of
https://github.com/jmarshall23/DoomRTX.git
synced 2026-08-19 20:19:50 +02:00
Quake 4 integrated with DoomRTX
This commit is contained in:
@@ -0,0 +1,301 @@
|
||||
//----------------------------------------------------------------
|
||||
// VehicleController.cpp
|
||||
//
|
||||
// Copyright 2002-2004 Raven Software
|
||||
//----------------------------------------------------------------
|
||||
|
||||
#include "precompiled.h"
|
||||
#pragma hdrstop
|
||||
|
||||
#include "../Game_local.h"
|
||||
#include "VehicleController.h"
|
||||
#include "Vehicle.h"
|
||||
|
||||
/*
|
||||
=====================
|
||||
rvVehicleController::rvVehicleController
|
||||
=====================
|
||||
*/
|
||||
rvVehicleController::rvVehicleController ( void ) {
|
||||
mVehicle = NULL;
|
||||
//mDriver = NULL;
|
||||
mPosition = 0;
|
||||
}
|
||||
|
||||
/*
|
||||
=====================
|
||||
rvVehicleController::Save
|
||||
=====================
|
||||
*/
|
||||
void rvVehicleController::Save ( idSaveGame *savefile ) const {
|
||||
mVehicle.Save ( savefile );
|
||||
savefile->WriteInt ( mPosition );
|
||||
}
|
||||
|
||||
/*
|
||||
=====================
|
||||
rvVehicleController::Restore
|
||||
=====================
|
||||
*/
|
||||
void rvVehicleController::Restore ( idRestoreGame *savefile ) {
|
||||
mVehicle.Restore ( savefile );
|
||||
savefile->ReadInt ( mPosition );
|
||||
}
|
||||
|
||||
/*
|
||||
=====================
|
||||
rvVehicleController::Drive
|
||||
=====================
|
||||
*/
|
||||
bool rvVehicleController::Drive ( rvVehicle* vehicle, idActor* driver ) {
|
||||
assert ( vehicle && driver );
|
||||
|
||||
// Flip the vehicle back over?
|
||||
if ( vehicle->IsFlipped ( ) ) {
|
||||
vehicle->AutoRight ( vehicle );
|
||||
return false;
|
||||
}
|
||||
|
||||
// Add the driver to the vehicle and cache the position it was added.
|
||||
if ( -1 == (mPosition = vehicle->AddDriver ( 0, driver ) ) ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
mVehicle = vehicle;
|
||||
|
||||
//twhitaker: for scripted callback events
|
||||
vehicle->OnEnter();
|
||||
|
||||
if ( driver->IsType( idPlayer::GetClassType() ) ) {
|
||||
idPlayer * player = static_cast< idPlayer *>( driver );
|
||||
|
||||
if ( player->GetHud() ) {
|
||||
GetHud()->Activate( true, gameLocal.time );
|
||||
GetHud()->HandleNamedEvent( "showExitmessage" );
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/*
|
||||
=====================
|
||||
rvVehicleController::Eject
|
||||
=====================
|
||||
*/
|
||||
bool rvVehicleController::Eject ( bool force ) {
|
||||
if ( !GetVehicle() ) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if ( GetDriver()->IsType( idPlayer::GetClassType() ) ) {
|
||||
idPlayer * player = static_cast< idPlayer *>( GetDriver() );
|
||||
|
||||
if ( player->GetHud() ) {
|
||||
GetHud()->HandleNamedEvent( "hideExitmessage" );
|
||||
}
|
||||
}
|
||||
|
||||
if ( mVehicle->RemoveDriver ( GetPosition(), force ) ) {
|
||||
mVehicle->OnExit();
|
||||
mVehicle = NULL;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/*
|
||||
=====================
|
||||
rvVehicleController::FindClearExitPoint
|
||||
=====================
|
||||
*/
|
||||
bool rvVehicleController::FindClearExitPoint( idVec3& origin, idMat3& axis ) const {
|
||||
return GetVehicle()->FindClearExitPoint( mPosition, origin, axis );
|
||||
}
|
||||
|
||||
/*
|
||||
=====================
|
||||
rvVehicleController::KillVehicles
|
||||
=====================
|
||||
*/
|
||||
void rvVehicleController::KillVehicles ( void ) {
|
||||
KillEntities( idCmdArgs(), rvVehicle::GetClassType() );
|
||||
}
|
||||
|
||||
/*
|
||||
=====================
|
||||
rvVehicleController::DrawHUD
|
||||
=====================
|
||||
*/
|
||||
void rvVehicleController::DrawHUD ( void ) {
|
||||
assert ( mVehicle );
|
||||
|
||||
if ( GetDriver() && GetDriver()->IsType( idPlayer::GetClassType() ) ) {
|
||||
idPlayer * player = static_cast<idPlayer*>( GetDriver() );
|
||||
rvVehicleWeapon * weapon = mVehicle->GetPosition( mPosition )->GetActiveWeapon();
|
||||
if ( weapon ) {
|
||||
if ( weapon->CanZoom() && player->IsZoomed() && player == gameLocal.GetLocalPlayer() ) {
|
||||
weapon->GetZoomGui()->Redraw( gameLocal.time );
|
||||
}
|
||||
// if ( mVehicle->GetHud() ) {
|
||||
// mVehicle->GetHud()->SetStateFloat( "tram_heatpct", weapon->GetOverheatPercent());
|
||||
// mVehicle->GetHud()->SetStateFloat( "tram_overheat", weapon->GetOverheatState());
|
||||
// }
|
||||
}
|
||||
}
|
||||
|
||||
mVehicle->DrawHUD ( mPosition );
|
||||
}
|
||||
|
||||
/*
|
||||
=====================
|
||||
rvVehicleController::StartRadioChatter
|
||||
=====================
|
||||
*/
|
||||
void rvVehicleController::StartRadioChatter ( void ) {
|
||||
assert ( mVehicle );
|
||||
if ( mVehicle->GetHud () ) {
|
||||
mVehicle->GetHud ()->HandleNamedEvent( "radioChatterUp" );
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
=====================
|
||||
rvVehicleController::StopRadioChatter
|
||||
=====================
|
||||
*/
|
||||
void rvVehicleController::StopRadioChatter ( void ) {
|
||||
assert ( mVehicle );
|
||||
if ( mVehicle->GetHud () ) {
|
||||
mVehicle->GetHud ()->HandleNamedEvent( "radioChatterDown" );
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
=====================
|
||||
rvVehicleController::Give
|
||||
=====================
|
||||
*/
|
||||
void rvVehicleController::Give ( const char* statname, const char* value ) {
|
||||
if( mVehicle.IsValid() ) {
|
||||
mVehicle->Give ( statname, value );
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
=====================
|
||||
rvVehicleController::GetEyePosition
|
||||
=====================
|
||||
*/
|
||||
void rvVehicleController::GetEyePosition ( idVec3& origin, idMat3& axis ) const {
|
||||
if( mVehicle.IsValid() ) {
|
||||
mVehicle->GetEyePosition ( mPosition, origin, axis );
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
=====================
|
||||
rvVehicleController::GetDriverPosition
|
||||
=====================
|
||||
*/
|
||||
void rvVehicleController::GetDriverPosition ( idVec3& origin, idMat3& axis ) const {
|
||||
if( mVehicle.IsValid() ) {
|
||||
mVehicle->GetDriverPosition ( mPosition, origin, axis );
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
=====================
|
||||
rvVehicleController::GetVehicle
|
||||
=====================
|
||||
*/
|
||||
rvVehicle* rvVehicleController::GetVehicle ( void ) const {
|
||||
return mVehicle;
|
||||
}
|
||||
|
||||
idActor* rvVehicleController::GetDriver ( void ) const {
|
||||
return (GetVehicle()) ? GetVehicle()->GetPosition(GetPosition())->GetDriver() : NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
=====================
|
||||
rvVehicleController::SetInput
|
||||
=====================
|
||||
*/
|
||||
void rvVehicleController::SetInput ( const usercmd_t& cmd, const idAngles &angles ) {
|
||||
if( mVehicle.IsValid() ) {
|
||||
mVehicle->SetInput ( mPosition, cmd, angles );
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
=====================
|
||||
rvVehicleController::GetInput
|
||||
=====================
|
||||
*/
|
||||
void rvVehicleController::GetInput( usercmd_t& cmd, idAngles &newAngles ) const {
|
||||
if( mVehicle.IsValid() ) {
|
||||
mVehicle->GetInput( mPosition, cmd, newAngles );
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
================
|
||||
rvVehicleController::GetHud
|
||||
================
|
||||
*/
|
||||
idUserInterface* rvVehicleController::GetHud( void ) {
|
||||
return (IsDriving()) ? mVehicle->GetHud() : NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
================
|
||||
rvVehicleController::GetHud
|
||||
================
|
||||
*/
|
||||
const idUserInterface* rvVehicleController::GetHud( void ) const {
|
||||
return (IsDriving()) ? mVehicle->GetHud() : NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
================
|
||||
rvVehicleController::WriteToSnapshot
|
||||
================
|
||||
*/
|
||||
void rvVehicleController::WriteToSnapshot ( idBitMsgDelta &msg ) const {
|
||||
msg.WriteLong ( mPosition );
|
||||
msg.WriteLong ( mVehicle.GetSpawnId ( ) );
|
||||
}
|
||||
|
||||
/*
|
||||
================
|
||||
rvVehicleController::ReadFromSnapshot
|
||||
================
|
||||
*/
|
||||
void rvVehicleController::ReadFromSnapshot ( const idBitMsgDelta &msg ) {
|
||||
mPosition = msg.ReadLong ( );
|
||||
mVehicle.SetSpawnId ( msg.ReadLong ( ) );
|
||||
}
|
||||
|
||||
/*
|
||||
================
|
||||
rvVehicleController::UpdateCursorGUI
|
||||
================
|
||||
*/
|
||||
void rvVehicleController::UpdateCursorGUI ( idUserInterface* ui ) {
|
||||
assert ( mVehicle );
|
||||
mVehicle->UpdateCursorGUI ( mPosition, ui );
|
||||
}
|
||||
|
||||
/*
|
||||
================
|
||||
rvVehicleController::SelectWeapon
|
||||
================
|
||||
*/
|
||||
void rvVehicleController::SelectWeapon ( int weapon ) {
|
||||
if( mVehicle.IsValid() ) {
|
||||
mVehicle->GetPosition( mPosition )->SelectWeapon( weapon );
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user