Files
DoomRTX/neo/prey/Prey/prey_projectilegasbagpod.cpp
T
2026-05-05 15:01:01 -07:00

89 lines
3.9 KiB
C++

#include "precompiled.h"
#pragma hdrstop
#include "prey_local.h"
CLASS_DECLARATION(hhProjectile, hhProjectileGasbagPod)
EVENT(EV_Collision_Flesh, hhProjectileGasbagPod::Event_Collision_SpawnPod)
EVENT(EV_Collision_Metal, hhProjectileGasbagPod::Event_Collision_Proj)
EVENT(EV_Collision_AltMetal, hhProjectileGasbagPod::Event_Collision_SpawnPod)
EVENT(EV_Collision_Wood, hhProjectileGasbagPod::Event_Collision_SpawnPod)
EVENT(EV_Collision_Stone, hhProjectileGasbagPod::Event_Collision_SpawnPod)
EVENT(EV_Collision_Glass, hhProjectileGasbagPod::Event_Collision_SpawnPod)
EVENT(EV_Collision_Liquid, hhProjectileGasbagPod::Event_Collision_SpawnPod)
EVENT(EV_Collision_CardBoard, hhProjectileGasbagPod::Event_Collision_SpawnPod)
EVENT(EV_Collision_Tile, hhProjectileGasbagPod::Event_Collision_SpawnPod)
EVENT(EV_Collision_Forcefield, hhProjectileGasbagPod::Event_Collision_SpawnPod)
EVENT(EV_Collision_Chaff, hhProjectileGasbagPod::Event_Collision_SpawnPod)
EVENT(EV_Collision_Wallwalk, hhProjectileGasbagPod::Event_Collision_SpawnPod)
EVENT(EV_Collision_Pipe, hhProjectileGasbagPod::Event_Collision_SpawnPod)
EVENT(EV_AllowCollision_Flesh, hhProjectileGasbagPod::Event_AllowCollision_Collide)
EVENT(EV_AllowCollision_Metal, hhProjectileGasbagPod::Event_AllowCollision_Collide)
EVENT(EV_AllowCollision_AltMetal, hhProjectileGasbagPod::Event_AllowCollision_Collide)
EVENT(EV_AllowCollision_Wood, hhProjectileGasbagPod::Event_AllowCollision_Collide)
EVENT(EV_AllowCollision_Stone, hhProjectileGasbagPod::Event_AllowCollision_Collide)
EVENT(EV_AllowCollision_Glass, hhProjectileGasbagPod::Event_AllowCollision_Collide)
EVENT(EV_AllowCollision_Liquid, hhProjectileGasbagPod::Event_AllowCollision_Collide)
EVENT(EV_AllowCollision_CardBoard, hhProjectileGasbagPod::Event_AllowCollision_Collide)
EVENT(EV_AllowCollision_Tile, hhProjectileGasbagPod::Event_AllowCollision_Collide)
EVENT(EV_AllowCollision_Forcefield, hhProjectileGasbagPod::Event_AllowCollision_Collide)
EVENT(EV_AllowCollision_Pipe, hhProjectileGasbagPod::Event_AllowCollision_Collide)
EVENT(EV_AllowCollision_Wallwalk, hhProjectileGasbagPod::Event_AllowCollision_Collide)
EVENT(EV_AllowCollision_Spirit, hhProjectileGasbagPod::Event_AllowCollision_PassThru)
EVENT(EV_AllowCollision_Chaff, hhProjectileGasbagPod::Event_AllowCollision_Collide) //bjk: shield blocks all
END_CLASS
#ifndef ID_DEMO_BUILD //HUMANHEAD jsh PCF 5/26/06: code removed for demo build
void hhProjectileGasbagPod::Spawn(void) {
BecomeActive(TH_TICKER);
}
void hhProjectileGasbagPod::Ticker(void) {
renderEntity.shaderParms[SHADERPARM_ANY_DEFORM_PARM2] += .1f;
if (renderEntity.shaderParms[SHADERPARM_ANY_DEFORM_PARM2] > 1.0f) {
renderEntity.shaderParms[SHADERPARM_ANY_DEFORM_PARM2] = 1.0f;
BecomeInactive(TH_TICKER);
}
}
void hhProjectileGasbagPod::Event_Collision_SpawnPod(const trace_t* collision, const idVec3 &velocity) {
idVec3 vel = GetPhysics()->GetLinearVelocity();
idVec3 avel = GetPhysics()->GetAngularVelocity();
physicsObj.PutToRest();
physicsObj.SetContents(0);
PostEventMS(&EV_Remove, 0);
idDict args;
args.Clear();
args.Set("origin", (GetPhysics()->GetOrigin()).ToString());
args.Set("axis", (GetPhysics()->GetAxis()).ToString());
args.Set("nodrop", "1");
idEntity *ent = gameLocal.SpawnObject("object_pod", &args);
if (ent) {
ent->GetPhysics()->SetLinearVelocity(vel);
ent->GetPhysics()->SetAngularVelocity(avel);
if (owner.IsValid()) {
owner->PostEventMS(&EV_NewPod, 0, ent);
}
}
idThread::ReturnInt(1);
}
void hhProjectileGasbagPod::Event_Collision_Proj(const trace_t* collision, const idVec3 &velocity) {
idEntity *ent = gameLocal.entities[collision->c.entityNum];
if (ent && ent->IsType(idProjectile::Type)) {
Explode(collision, velocity, 0);
} else {
Event_Collision_SpawnPod(collision, velocity);
}
idThread::ReturnInt(0);
}
#endif //HUMANHEAD jsh PCF 5/26/06: code removed for demo build