mirror of
https://github.com/jmarshall23/DoomRTX.git
synced 2026-08-18 11:44:51 +02:00
Initial Prey Game integration support.
This commit is contained in:
@@ -0,0 +1,225 @@
|
||||
|
||||
#include "precompiled.h"
|
||||
#pragma hdrstop
|
||||
|
||||
#include "prey_local.h"
|
||||
|
||||
CLASS_DECLARATION( hhFireController, hhVehicleFireController )
|
||||
END_CLASS
|
||||
|
||||
/*
|
||||
================
|
||||
hhVehicleFireController::Init
|
||||
================
|
||||
*/
|
||||
void hhVehicleFireController::Init( const idDict* viewDict, hhVehicle* self, idActor* owner ) {
|
||||
hhFireController::Init( viewDict );
|
||||
|
||||
this->owner = owner;
|
||||
this->self = self;
|
||||
|
||||
recoil = dict->GetFloat( "recoil" );
|
||||
|
||||
if ( owner && owner->IsType( idAI::Type ) ) {
|
||||
spread = dict->GetFloat( "monster_spread" );
|
||||
}
|
||||
|
||||
SetBarrelOffsetList( "muzzleOffset", barrelOffsets );
|
||||
}
|
||||
|
||||
/*
|
||||
================
|
||||
hhVehicleFireController::UsesCrosshair
|
||||
================
|
||||
*/
|
||||
bool hhVehicleFireController::UsesCrosshair() const {
|
||||
return bCrosshair;
|
||||
}
|
||||
|
||||
/*
|
||||
================
|
||||
hhVehicleFireController::Clear
|
||||
================
|
||||
*/
|
||||
void hhVehicleFireController::Clear() {
|
||||
hhFireController::Clear();
|
||||
|
||||
nextFireTime = gameLocal.GetTime();
|
||||
barrelOffsets.Clear();
|
||||
|
||||
owner = NULL;
|
||||
self = NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
================
|
||||
hhVehicleFireController::Save
|
||||
================
|
||||
*/
|
||||
void hhVehicleFireController::Save( idSaveGame *savefile ) const {
|
||||
self.Save( savefile );
|
||||
owner.Save( savefile );
|
||||
savefile->WriteFloat( recoil );
|
||||
|
||||
int num = barrelOffsets.Num();
|
||||
savefile->WriteInt( num );
|
||||
for( int i = 0; i < num; i++ ) {
|
||||
savefile->WriteVec3( barrelOffsets[i] );
|
||||
}
|
||||
|
||||
savefile->WriteInt( nextFireTime );
|
||||
}
|
||||
|
||||
/*
|
||||
================
|
||||
hhVehicleFireController::Restore
|
||||
================
|
||||
*/
|
||||
void hhVehicleFireController::Restore( idRestoreGame *savefile ) {
|
||||
self.Restore( savefile );
|
||||
owner.Restore( savefile );
|
||||
savefile->ReadFloat( recoil );
|
||||
|
||||
int num;
|
||||
savefile->ReadInt( num );
|
||||
idVec3 tmp;
|
||||
for( int i = 0; i < num; i++ ) {
|
||||
savefile->ReadVec3( tmp );
|
||||
barrelOffsets.Append( tmp );
|
||||
}
|
||||
|
||||
savefile->ReadInt( nextFireTime );
|
||||
}
|
||||
|
||||
/*
|
||||
================
|
||||
hhVehicleFireController::WeaponFeedback
|
||||
================
|
||||
*/
|
||||
void hhVehicleFireController::WeaponFeedback() {
|
||||
if( self.IsValid() && self->GetPhysics() ) {
|
||||
hhPhysics_Vehicle* selfPhysics = static_cast<hhPhysics_Vehicle*>( self->GetPhysics() );
|
||||
self->ApplyImpulse( gameLocal.world, 0, self->GetOrigin() + selfPhysics->GetCenterOfMass(), -self->GetAxis()[0] * GetRecoil() * selfPhysics->GetMass() );
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
================
|
||||
hhVehicleFireController::SetBarrelOffsetList
|
||||
================
|
||||
*/
|
||||
void hhVehicleFireController::SetBarrelOffsetList( const char* keyPrefix, hhCycleList<idVec3>& offsetList ) {
|
||||
const idKeyValue* kv = dict->MatchPrefix( keyPrefix );
|
||||
while( kv ) {
|
||||
offsetList.Append( dict->GetVector(kv->GetKey().c_str()) );
|
||||
kv = dict->MatchPrefix( keyPrefix, kv );
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
=================
|
||||
hhVehicleFireController::DetermineAimAxis
|
||||
=================
|
||||
*/
|
||||
idMat3 hhVehicleFireController::DetermineAimAxis( const idVec3& muzzlePos, const idMat3& weaponAxis ) {
|
||||
idAngles aimAngles;
|
||||
idVec3 aimPos;
|
||||
|
||||
aimPos = idVec3( 0.0f, 0.0f, owner->EyeHeight() ) + dict->GetVector( "offset_gunTarget" );
|
||||
aimPos *= self->GetFireAxis();
|
||||
aimPos += self->GetFireOrigin();
|
||||
|
||||
aimAngles = (aimPos - muzzlePos).ToAngles();
|
||||
aimAngles[2] = weaponAxis.ToAngles()[2];
|
||||
return aimAngles.ToMat3();
|
||||
}
|
||||
|
||||
/*
|
||||
================
|
||||
hhVehicleFireController::LaunchProjectiles
|
||||
================
|
||||
*/
|
||||
bool hhVehicleFireController::LaunchProjectiles( const idVec3& pushVelocity ) {
|
||||
if( nextFireTime > gameLocal.GetTime() ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if( !hhFireController::LaunchProjectiles(pushVelocity) ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
gameLocal.AlertAI( owner.GetEntity() );
|
||||
nextFireTime = gameLocal.GetTime() + SEC2MS( GetFireDelay() );
|
||||
return true;
|
||||
}
|
||||
|
||||
/*
|
||||
================
|
||||
hhFireController::AmmoAvailable
|
||||
================
|
||||
*/
|
||||
int hhVehicleFireController::AmmoAvailable() const {
|
||||
if ( self.IsValid() ) {
|
||||
return self->HasPower( AmmoRequired() );
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
================
|
||||
hhFireController::UseAmmo
|
||||
================
|
||||
*/
|
||||
void hhVehicleFireController::UseAmmo() {
|
||||
if( self.IsValid() ) {
|
||||
self->ConsumePower( AmmoRequired() );
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
================
|
||||
hhVehicleFireController::GetCollisionBBox
|
||||
================
|
||||
*/
|
||||
const idBounds& hhVehicleFireController::GetCollisionBBox() {
|
||||
return self->GetPhysics()->GetAbsBounds();
|
||||
}
|
||||
|
||||
/*
|
||||
================
|
||||
hhVehicleFireController::CalculateMuzzlePosition
|
||||
================
|
||||
*/
|
||||
void hhVehicleFireController::CalculateMuzzlePosition( idVec3& origin, idMat3& axis ) {
|
||||
axis = self->GetFireAxis();
|
||||
origin = barrelOffsets.Next() * axis + self->GetFireOrigin();
|
||||
}
|
||||
|
||||
/*
|
||||
================
|
||||
hhVehicleFireController::GetProjectileOwner
|
||||
================
|
||||
*/
|
||||
idEntity *hhVehicleFireController::GetProjectileOwner() const {
|
||||
return self.GetEntity();
|
||||
}
|
||||
|
||||
/*
|
||||
================
|
||||
hhVehicleFireController::GetSelf
|
||||
================
|
||||
*/
|
||||
hhRenderEntity *hhVehicleFireController::GetSelf() {
|
||||
return self.GetEntity();
|
||||
}
|
||||
|
||||
/*
|
||||
================
|
||||
hhVehicleFireController::GetSelfConst
|
||||
================
|
||||
*/
|
||||
const hhRenderEntity *hhVehicleFireController::GetSelfConst() const {
|
||||
return self.GetEntity();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user