mirror of
https://github.com/jmarshall23/DoomRTX.git
synced 2026-08-21 05:02:28 +02:00
Quake 4 integrated with DoomRTX
This commit is contained in:
@@ -0,0 +1,163 @@
|
||||
//----------------------------------------------------------------
|
||||
// Vehicle.cpp
|
||||
//
|
||||
// Copyright 2002-2004 Raven Software
|
||||
//----------------------------------------------------------------
|
||||
|
||||
#include "precompiled.h"
|
||||
#pragma hdrstop
|
||||
|
||||
#include "../Game_local.h"
|
||||
#include "VehicleRigid.h"
|
||||
|
||||
CLASS_DECLARATION( rvVehicle, rvVehicleRigid )
|
||||
END_CLASS
|
||||
|
||||
rvVehicleRigid::rvVehicleRigid ( void ) {
|
||||
}
|
||||
|
||||
rvVehicleRigid::~rvVehicleRigid ( void ) {
|
||||
SetPhysics( NULL );
|
||||
}
|
||||
|
||||
/*
|
||||
================
|
||||
rvVehicleRigid::Spawn
|
||||
================
|
||||
*/
|
||||
void rvVehicleRigid::Spawn( void ) {
|
||||
physicsObj.SetSelf( this );
|
||||
|
||||
SetClipModel ( );
|
||||
|
||||
physicsObj.SetOrigin( GetPhysics()->GetOrigin ( ) );
|
||||
physicsObj.SetAxis ( GetPhysics()->GetAxis ( ) );
|
||||
physicsObj.SetContents( CONTENTS_BODY );
|
||||
physicsObj.SetClipMask( MASK_PLAYERSOLID|CONTENTS_VEHICLECLIP );
|
||||
physicsObj.SetFriction ( spawnArgs.GetFloat ( "friction_linear", "1" ), spawnArgs.GetFloat ( "friction_angular", "1" ), spawnArgs.GetFloat ( "friction_contact", "1" ) );
|
||||
physicsObj.SetBouncyness ( spawnArgs.GetFloat ( "bouncyness", "0.6" ) );
|
||||
physicsObj.SetGravity( gameLocal.GetGravity() );
|
||||
SetPhysics( &physicsObj );
|
||||
|
||||
animator.CycleAnim ( ANIMCHANNEL_ALL, animator.GetAnim( spawnArgs.GetString( "anim", "idle" ) ), gameLocal.time, 0 );
|
||||
|
||||
BecomeActive( TH_THINK );
|
||||
}
|
||||
|
||||
/*
|
||||
================
|
||||
rvVehicleRigid::SetClipModel
|
||||
================
|
||||
*/
|
||||
void rvVehicleRigid::SetClipModel ( void ) {
|
||||
idStr clipModelName;
|
||||
idTraceModel trm;
|
||||
float mass;
|
||||
|
||||
// rebuild clipmodel
|
||||
spawnArgs.GetString( "clipmodel", "", clipModelName );
|
||||
|
||||
// load the trace model
|
||||
if ( clipModelName.Length() ) {
|
||||
if ( !collisionModelManager->TrmFromModel( gameLocal.GetMapName(), clipModelName, trm ) ) {
|
||||
gameLocal.Error( "rvVehicleRigid '%s': cannot load collision model %s", name.c_str(), clipModelName.c_str() );
|
||||
return;
|
||||
}
|
||||
|
||||
physicsObj.SetClipModel( new idClipModel( trm ), spawnArgs.GetFloat ( "density", "1" ) );
|
||||
} else {
|
||||
physicsObj.SetClipModel( new idClipModel( GetPhysics()->GetClipModel() ), spawnArgs.GetFloat ( "density", "1" ) );
|
||||
}
|
||||
|
||||
if ( spawnArgs.GetFloat ( "mass", "0", mass ) && mass > 0 ) {
|
||||
physicsObj.SetMass ( mass );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
================
|
||||
rvVehicleRigid::RunPrePhysics
|
||||
================
|
||||
*/
|
||||
void rvVehicleRigid::RunPrePhysics ( void ) {
|
||||
storedVelocity = physicsObj.GetLinearVelocity();
|
||||
}
|
||||
|
||||
/*
|
||||
================
|
||||
rvVehicleRigid::RunPostPhysics
|
||||
================
|
||||
*/
|
||||
void rvVehicleRigid::RunPostPhysics ( void ) {
|
||||
|
||||
if ( autoCorrectionBegin + 1250 > static_cast<unsigned>( gameLocal.time )) {
|
||||
autoCorrectionBegin = 0;
|
||||
|
||||
float lengthSq = physicsObj.GetLinearVelocity().LengthSqr();
|
||||
if ( !autoCorrectionBegin && ( ( storedVelocity * 0.4f ).LengthSqr() >= lengthSq ) || ( lengthSq < 0.01f ) ) {
|
||||
autoCorrectionBegin = gameLocal.time;
|
||||
}
|
||||
}
|
||||
|
||||
if ( g_debugVehicle.GetInteger() == 10 ) {
|
||||
gameLocal.Printf( "Speed: %f\n", physicsObj.GetLinearVelocity().Length() );
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
================
|
||||
rvVehicleRigid::WriteToSnapshot
|
||||
================
|
||||
*/
|
||||
void rvVehicleRigid::WriteToSnapshot( idBitMsgDelta &msg ) const {
|
||||
rvVehicle::WriteToSnapshot( msg );
|
||||
physicsObj.WriteToSnapshot( msg );
|
||||
}
|
||||
|
||||
/*
|
||||
================
|
||||
rvVehicleRigid::ReadFromSnapshot
|
||||
================
|
||||
*/
|
||||
void rvVehicleRigid::ReadFromSnapshot( const idBitMsgDelta &msg ) {
|
||||
rvVehicle::ReadFromSnapshot( msg );
|
||||
physicsObj.ReadFromSnapshot( msg );
|
||||
}
|
||||
|
||||
/*
|
||||
================
|
||||
rvVehicleRigid::Save
|
||||
================
|
||||
*/
|
||||
void rvVehicleRigid::Save ( idSaveGame *savefile ) const {
|
||||
|
||||
savefile->WriteVec3 ( storedVelocity ); // cnicholson: Added unsaved var
|
||||
savefile->WriteStaticObject ( physicsObj );
|
||||
}
|
||||
|
||||
/*
|
||||
================
|
||||
rvVehicleRigid::Restore
|
||||
================
|
||||
*/
|
||||
void rvVehicleRigid::Restore ( idRestoreGame *savefile ) {
|
||||
|
||||
savefile->ReadVec3 ( storedVelocity ); // cnicholson: Added unrestored var
|
||||
|
||||
physicsObj.SetSelf( this );
|
||||
|
||||
SetClipModel ( );
|
||||
|
||||
savefile->ReadStaticObject ( physicsObj );
|
||||
RestorePhysics( &physicsObj );
|
||||
}
|
||||
|
||||
/*
|
||||
=====================
|
||||
rvVehicleRigid::SkipImpulse
|
||||
=====================
|
||||
*/
|
||||
bool rvVehicleRigid::SkipImpulse( idEntity* ent, int id ) {
|
||||
return false;
|
||||
}
|
||||
Reference in New Issue
Block a user