mirror of
https://github.com/jmarshall23/DoomRTX.git
synced 2026-08-17 11:00:38 +02:00
Initial Prey Game integration support.
This commit is contained in:
@@ -0,0 +1,105 @@
|
||||
#include "precompiled.h"
|
||||
#pragma hdrstop
|
||||
|
||||
#include "prey_local.h"
|
||||
|
||||
/***********************************************************************
|
||||
|
||||
hhProjectileSpiritArrow
|
||||
|
||||
***********************************************************************/
|
||||
CLASS_DECLARATION( hhProjectile, hhProjectileSpiritArrow )
|
||||
EVENT( EV_AllowCollision_Spirit, hhProjectile::Event_AllowCollision_Collide )
|
||||
EVENT( EV_AllowCollision_Chaff, hhProjectile::Event_AllowCollision_PassThru )
|
||||
|
||||
EVENT( EV_AllowCollision_Flesh, hhProjectileSpiritArrow::Event_AllowCollision_Collide )
|
||||
EVENT( EV_AllowCollision_Metal, hhProjectileSpiritArrow::Event_AllowCollision_Collide )
|
||||
EVENT( EV_AllowCollision_AltMetal, hhProjectileSpiritArrow::Event_AllowCollision_Collide )
|
||||
EVENT( EV_AllowCollision_Wood, hhProjectileSpiritArrow::Event_AllowCollision_Collide )
|
||||
EVENT( EV_AllowCollision_Stone, hhProjectileSpiritArrow::Event_AllowCollision_Collide )
|
||||
EVENT( EV_AllowCollision_Glass, hhProjectileSpiritArrow::Event_AllowCollision_Collide )
|
||||
EVENT( EV_AllowCollision_Pipe, hhProjectileSpiritArrow::Event_AllowCollision_Collide )
|
||||
EVENT( EV_AllowCollision_Tile, hhProjectileSpiritArrow::Event_AllowCollision_Collide )
|
||||
EVENT( EV_AllowCollision_CardBoard, hhProjectileSpiritArrow::Event_AllowCollision_Collide )
|
||||
|
||||
EVENT( EV_Collision_Flesh, hhProjectileSpiritArrow::Event_Collision_Stick )
|
||||
EVENT( EV_Collision_Metal, hhProjectileSpiritArrow::Event_Collision_Stick )
|
||||
EVENT( EV_Collision_AltMetal, hhProjectileSpiritArrow::Event_Collision_Stick )
|
||||
EVENT( EV_Collision_Wood, hhProjectileSpiritArrow::Event_Collision_Stick )
|
||||
EVENT( EV_Collision_Stone, hhProjectileSpiritArrow::Event_Collision_Stick )
|
||||
EVENT( EV_Collision_Glass, hhProjectileSpiritArrow::Event_Collision_Stick )
|
||||
EVENT( EV_Collision_Wallwalk, hhProjectileSpiritArrow::Event_Collision_Stick )
|
||||
EVENT( EV_Collision_Pipe, hhProjectileSpiritArrow::Event_Collision_Stick )
|
||||
EVENT( EV_Collision_CardBoard, hhProjectileSpiritArrow::Event_Collision_Stick )
|
||||
EVENT( EV_Collision_Spirit, hhProjectileSpiritArrow::Event_Collision_Impact )
|
||||
EVENT( EV_Collision_Chaff, hhProjectileSpiritArrow::Event_Collision_Impact )
|
||||
END_CLASS
|
||||
|
||||
|
||||
int hhProjectileSpiritArrow::DetermineClipmask() {
|
||||
return MASK_SPIRITARROW;
|
||||
}
|
||||
|
||||
/*
|
||||
=================
|
||||
hhProjectileSpiritArrow::BindToCollisionObject
|
||||
=================
|
||||
*/
|
||||
void hhProjectileSpiritArrow::BindToCollisionObject( const trace_t* collision ) {
|
||||
if( !collision || collision->fraction == 1.0f ) {
|
||||
return;
|
||||
}
|
||||
|
||||
idEntity* pEntity = gameLocal.entities[collision->c.entityNum];
|
||||
HH_ASSERT( pEntity );
|
||||
|
||||
if( !pEntity->fl.applyDamageEffects ) {
|
||||
PostEventMS( &EV_Fizzle, 0 );
|
||||
return;
|
||||
}
|
||||
|
||||
if ( pEntity->spawnArgs.GetBool( "no_arrow_stick" ) ) {
|
||||
RemoveProjectile( 0 );
|
||||
return;
|
||||
}
|
||||
|
||||
jointHandle_t jointHandle = CLIPMODEL_ID_TO_JOINT_HANDLE( collision->c.id );
|
||||
idVec3 penetrationVector( collision->endAxis[0] * spawnArgs.GetFloat("penetrationDepth", "10") ); // Push the arrow into the hit object a bit
|
||||
if ( jointHandle != INVALID_JOINT ) {
|
||||
SetOrigin( collision->endpos + penetrationVector );
|
||||
BindToJoint( pEntity, jointHandle, true );
|
||||
} else {
|
||||
SetOrigin( collision->endpos + penetrationVector );
|
||||
Bind( pEntity, true );
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
=================
|
||||
hhProjectileSpiritArrow::Event_Collision_Stick
|
||||
=================
|
||||
*/
|
||||
void hhProjectileSpiritArrow::Event_Collision_Stick( const trace_t* collision, const idVec3 &velocity ) {
|
||||
|
||||
ProcessCollision( collision, velocity );//Assuming that EV_Fizzle is canceled in ProcessCollision
|
||||
|
||||
if (gameLocal.isMultiplayer) { //rww - in mp we don't stick to players.
|
||||
idEntity *pEntity = gameLocal.entities[collision->c.entityNum];
|
||||
if (pEntity && pEntity->IsType(hhPlayer::Type)) {
|
||||
PostEventMS( &EV_Fizzle, 0 );
|
||||
|
||||
idThread::ReturnInt( 1 );
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
PostEventMS( &EV_Fizzle, spawnArgs.GetInt("remove_time") );
|
||||
|
||||
BindToCollisionObject( collision );
|
||||
|
||||
fl.ignoreGravityZones = true;
|
||||
SetGravity( idVec3(0.f, 0.f, 0.f) );
|
||||
spawnArgs.SetVector("gravity", idVec3(0.f, 0.f, 0.f) );
|
||||
|
||||
idThread::ReturnInt( 1 );
|
||||
}
|
||||
Reference in New Issue
Block a user