mirror of
https://github.com/jmarshall23/DoomRTX.git
synced 2026-08-12 08:11:10 +02:00
136 lines
2.9 KiB
C++
136 lines
2.9 KiB
C++
#include "precompiled.h"
|
|
#pragma hdrstop
|
|
|
|
#include "prey_local.h"
|
|
|
|
//-----------------------------------------------------------------------
|
|
//
|
|
// hhSafeResurrectionVolume
|
|
//
|
|
//-----------------------------------------------------------------------
|
|
|
|
CLASS_DECLARATION( idEntity, hhSafeResurrectionVolume )
|
|
EVENT( EV_Enable, hhSafeResurrectionVolume::Event_Enable )
|
|
EVENT( EV_Disable, hhSafeResurrectionVolume::Event_Disable )
|
|
END_CLASS
|
|
|
|
/*
|
|
===============
|
|
hhSafeResurrectionVolume::Spawn
|
|
===============
|
|
*/
|
|
void hhSafeResurrectionVolume::Spawn() {
|
|
PostEventMS( (spawnArgs.GetBool("enabled", "1")) ? &EV_Enable : &EV_Disable, 0);
|
|
}
|
|
|
|
/*
|
|
===============
|
|
hhSafeResurrectionVolume::PickRandomPoint
|
|
===============
|
|
*/
|
|
void hhSafeResurrectionVolume::PickRandomPoint( idVec3& origin, idMat3& axis ) {
|
|
idEntity* entity = PickRandomTarget();
|
|
|
|
if ( !entity ) { // Error message that means something to the designers - cjr
|
|
gameLocal.Error( "hhSafeResurrectionZone::PickRandomPoint: No targets found within resurrection zone.\n" );
|
|
}
|
|
|
|
origin = entity->GetOrigin();
|
|
axis = entity->GetAxis();
|
|
}
|
|
|
|
/*
|
|
===============
|
|
hhSafeResurrectionVolume::DetermineContents
|
|
===============
|
|
*/
|
|
int hhSafeResurrectionVolume::DetermineContents() const {
|
|
return CONTENTS_DEATHVOLUME;
|
|
}
|
|
|
|
/*
|
|
===============
|
|
hhSafeResurrectionVolume::Event_Enable
|
|
===============
|
|
*/
|
|
void hhSafeResurrectionVolume::Event_Enable() {
|
|
GetPhysics()->EnableClip();
|
|
GetPhysics()->SetContents( DetermineContents() );
|
|
}
|
|
|
|
/*
|
|
===============
|
|
hhSafeResurrectionVolume::Event_Disable
|
|
===============
|
|
*/
|
|
void hhSafeResurrectionVolume::Event_Disable() {
|
|
GetPhysics()->DisableClip();
|
|
GetPhysics()->SetContents( 0 );
|
|
}
|
|
|
|
//-----------------------------------------------------------------------
|
|
//
|
|
// hhSafeDeathVolume
|
|
//
|
|
//-----------------------------------------------------------------------
|
|
|
|
CLASS_DECLARATION( hhSafeResurrectionVolume, hhSafeDeathVolume )
|
|
EVENT( EV_Touch, hhSafeDeathVolume::Event_Touch )
|
|
END_CLASS
|
|
|
|
/*
|
|
===============
|
|
hhSafeDeathVolume::Spawn
|
|
===============
|
|
*/
|
|
void hhSafeDeathVolume::Spawn() {
|
|
GetPhysics()->SetContents( DetermineContents() );
|
|
}
|
|
|
|
/*
|
|
===============
|
|
hhSafeDeathVolume::DetermineContents
|
|
===============
|
|
*/
|
|
int hhSafeDeathVolume::DetermineContents() const {
|
|
return CONTENTS_DEATHVOLUME | CONTENTS_TRIGGER;
|
|
}
|
|
|
|
/*
|
|
===============
|
|
hhSafeDeathVolume::IsValid
|
|
===============
|
|
*/
|
|
bool hhSafeDeathVolume::IsValid( const hhPlayer* player ) {
|
|
if( !player || player->IsDeathWalking() || player->InVehicle() ) {
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
/*
|
|
===============
|
|
hhSafeDeathVolume::Event_Touch
|
|
===============
|
|
*/
|
|
void hhSafeDeathVolume::Event_Touch( idEntity *other, trace_t *trace ) {
|
|
if( !other ) {
|
|
return;
|
|
}
|
|
|
|
if( !other->IsType(hhPlayer::Type) ) {
|
|
return;
|
|
}
|
|
|
|
hhPlayer* player = static_cast<hhPlayer*>( other );
|
|
if( !IsValid(player) ) {
|
|
return;
|
|
}
|
|
|
|
if( player->IsSpiritOrDeathwalking() ) {
|
|
player->StopSpiritWalk();
|
|
} else {
|
|
player->Kill( false, false );
|
|
}
|
|
} |