29 #include "../idlib/precompiled.h"
43 static const int BFG_DAMAGE_FREQUENCY = 333;
44 static const float BOUNCE_SOUND_MIN_VELOCITY = 200.0f;
45 static const float BOUNCE_SOUND_MAX_VELOCITY = 400.0f;
53 const idEventDef EV_CreateProjectile(
"projectileCreateProjectile",
"evv" );
54 const idEventDef EV_LaunchProjectile(
"projectileLaunchProjectile",
"vvv" );
55 const idEventDef EV_SetGravity(
"setGravity",
"f" );
65 EVENT( EV_CreateProjectile, idProjectile::Event_CreateProjectile )
124 savefile->
Write( &flags,
sizeof( flags ) );
140 savefile->
WriteInt( originalTimeGroup );
177 savefile->
ReadInt( originalTimeGroup );
198 if ( lightDefHandle >= 0 ) {
243 if ( *(
const char *)shaderName ) {
312 float linear_friction;
313 float angular_friction;
314 float contact_friction;
339 speed = velocity.
Length() * launchPower;
408 if ( contact_friction == 0.0
f ) {
428 fuse -= timeSinceFire;
434 fuse -= timeSinceFire;
450 if ( *smokeName !=
'\0' ) {
456 originalTimeGroup = timeGroup;
496 SetTimeState ts(originalTimeGroup);
533 const char *damageDefName;
566 if ( ent->
IsType( idPlayer::Type ) &&
static_cast<idPlayer *
>( ent )->noclip ) {
585 if ( ent->
IsType( idActor::Type ) || ( ent->
IsType( idAFAttachment::Type ) &&
static_cast<const idAFAttachment*
>(ent)->GetBody()->
IsType( idActor::Type ) ) ) {
593 if ( len > BOUNCE_SOUND_MIN_VELOCITY ) {
623 if ( ent->
IsType( idActor::Type ) ) {
630 if ( damageDefName[0] !=
'\0' ) {
657 const char *decal, *sound, *typeName;
670 sound = projectileDef.
GetString(
va(
"snd_%s", typeName ) );
671 if ( *sound ==
'\0' ) {
672 sound = projectileDef.
GetString(
"snd_metal" );
674 if ( *sound ==
'\0' ) {
675 sound = projectileDef.
GetString(
"snd_impact" );
677 if ( *sound !=
'\0' ) {
682 decal = projectileDef.
GetString(
va(
"mtr_detonate_%s", typeName ) );
683 if ( *decal ==
'\0' ) {
684 decal = projectileDef.
GetString(
"mtr_detonate" );
686 if ( *decal !=
'\0' ) {
711 msg.
Init( msgBuf,
sizeof( msgBuf ) );
734 memset( &collision, 0,
sizeof( collision ) );
763 if ( psystem && *psystem ) {
798 if ( splash_damage[0] !=
'\0' ) {
818 const char *fxname, *light_shader, *sndExplode;
819 float light_fadetime;
832 case 2: sndExplode =
"snd_explode2";
break;
833 case 3: sndExplode =
"snd_explode3";
break;
834 case 4: sndExplode =
"snd_explode4";
break;
835 default: sndExplode =
"snd_explode";
break;
865 if ( !( fxname && *fxname ) ) {
883 splashArgs.
Set(
"model",
"sludgebulletimpact.prt" );
884 splashArgs.
Set(
"start_off",
"1" );
898 if ( fxname && *fxname ) {
907 removeTime = ( removeTime > 3000 ) ? removeTime : 3000;
916 light_shader =
"lights/midnight_grenade";
920 if ( *light_shader ) {
949 light_fadetime = 3.0f;
981 if ( removeTime < delay * 1000 ) {
982 removeTime = ( delay + 0.10 ) * 1000;
996 for (
int i = 0;
i < amount;
i++ ) {
1005 if ( !ent || !ent->
IsType( idDebris::Type ) ) {
1017 for (
int i = 0;
i < amount;
i++ ) {
1026 if ( !ent || !ent->
IsType( idDebris::Type ) ) {
1049 projectile->
GetVector(
"velocity",
"0 0 0", velocity );
1061 gravity = projectile->
GetFloat(
"gravity" );
1062 return idVec3( 0, 0, -gravity );
1073 memset( &collision, 0,
sizeof( collision ) );
1104 if ( other->
IsType( idItemTeam::Type ) )
1111 memset( &collision, 0,
sizeof( collision ) );
1127 void idProjectile::CatchProjectile(
idEntity* o,
const char* reflectName ) {
1133 if ( this->
IsType( idGuidedProjectile::Type ) ) {
1136 proj->SetEnemy( prevowner );
1153 int idProjectile::GetProjectileState(
void ) {
1164 Create(owner, start, dir);
1172 void idProjectile::Event_LaunchProjectile(
const idVec3 &
start,
const idVec3 &dir,
const idVec3 &pushVelocity ) {
1173 Launch(start, dir, pushVelocity);
1181 void idProjectile::Event_SetGravity(
float gravity ) {
1205 if ( ent ==
NULL ) {
1210 if ( ent->
IsType( idPlayer::Type ) &&
static_cast<idPlayer *
>( ent )->noclip ) {
1214 if ( ent->
IsType( idActor::Type ) || ( ent->
IsType( idAFAttachment::Type ) &&
static_cast<const idAFAttachment*
>(ent)->GetBody()->
IsType( idActor::Type ) ) ) {
1215 if ( !projectileDef.
GetBool(
"detonate_on_actor" ) ) {
1219 if ( !projectileDef.
GetBool(
"detonate_on_world" ) ) {
1225 if ( addDamageEffect && projectileDef.
GetBool(
"impact_damage_effect" ) ) {
1290 while(
state != newState ) {
1306 memset( &collision, 0,
sizeof( collision ) );
1346 axis = velocity.
ToMat3();
1369 memset( &collision, 0,
sizeof( collision ) );
1398 const idEventDef EV_SetEnemy(
"setEnemy",
"E" );
1403 EVENT( EV_SetEnemy, idGuidedProjectile::Event_SetEnemy )
1492 if ( enemyEnt->
IsType( idActor::Type ) ) {
1493 out =
static_cast<idActor *
>(enemyEnt)->GetEyePosition();
1534 dir = seekPos - nose;
1540 if ( frac > 1.0
f ) {
1548 for( i = 0; i < 3; i++ ) {
1551 }
else if ( diff[ i ] < -
turn_max ) {
1559 velocity = dir *
speed;
1619 void idGuidedProjectile::SetEnemy(
idEntity *ent ) {
1622 void idGuidedProjectile::Event_SetEnemy(
idEntity *ent) {
1644 startingVelocity.Zero();
1645 endingVelocity.Zero();
1649 returnPhase =
false;
1707 const char *smokeName;
1718 if ( *smokeName !=
'\0' ) {
1724 static_cast<idPlayer *
>( ownerEnt )->GiveHealthPool( act->
health );
1766 if ( ownerEnt && ownerEnt->
IsType( idPlayer::Type ) ) {
1767 static_cast<idPlayer *
>( ownerEnt )->SetSoulCubeProjectile(
NULL );
1826 destOrg = start + dir * 256.0f;
1840 if ( ownerEnt && ownerEnt->
IsType( idPlayer::Type ) ) {
1841 static_cast<idPlayer *
>( ownerEnt )->SetSoulCubeProjectile(
this );
1867 memset( &secondModel, 0,
sizeof( secondModel ) );
1868 secondModelDefHandle = -1;
1896 if ( temp && *temp ) {
1941 for ( i = 0; i <
num; i++ ) {
1998 bool forceDamage =
false;
2002 SetTimeState ts( beamEnt->timeGroup );
2014 idVec3 org =
beamTargets[
i].target.GetEntity()->GetPhysics()->GetAbsBounds().GetCenter();
2025 bool bfgVision =
true;
2088 int numListedEntities;
2102 if ( temp && *temp ) {
2121 for (
int e = 0; e < numListedEntities; e++ ) {
2122 ent = entityList[ e ];
2133 if ( ent->
IsType( idPlayer::Type ) ) {
2164 SetTimeState ts( maledict->timeGroup );
2176 if ( dist < radius ) {
2197 numListedEntities++;
2202 if ( numListedEntities ) {
2236 if ( ownerEnt && ownerEnt->
IsType( idPlayer::Type ) ) {
2237 player =
static_cast< idPlayer *
>( ownerEnt );
2266 if (
beamTargets[i].target.GetEntity()->IsType( idActor::Type ) ) {
2285 if ( ignore ==
NULL ) {
2290 if ( ignore !=
NULL ) {
2335 this->owner =
owner;
2405 float linear_friction;
2406 float angular_friction;
2407 float contact_friction;
2412 bool randomVelocity;
2433 if ( randomVelocity ) {
2452 const char *clipModelName;
2455 if ( !clipModelName[0] ) {
2470 if ( contact_friction == 0.0
f ) {
2489 if ( fuse < 0.0
f ) {
2495 if ( fuse < 0.0
f ) {
2507 if ( *smokeName !=
'\0' ) {
2514 if ( *sndName !=
'\0' ) {
2558 if ( sndBounce !=
NULL ) {
2582 if ( *smokeName !=
'\0' ) {
2622 if ( *smokeName !=
'\0' ) {
virtual const idVec3 & GetOrigin(int id=0) const =0
idPlayer * GetLocalPlayer() const
void AddDefaultDamageEffect(const trace_t &collision, const idVec3 &velocity)
void SetAngularVelocity(const idVec3 &newAngularVelocity, int id=0)
void SetClipModel(idClipModel *model, float density, int id=0, bool freeOld=true)
renderEntity_t renderEntity
bool TracePoint(trace_t &results, const idVec3 &start, const idVec3 &end, int contentMask, const idEntity *passEntity)
float GetFloat(const char *key, const char *defaultString="0") const
idMat3 ToMat3(void) const
virtual bool TrmFromModel(const char *modelName, idTraceModel &trm)=0
static void DefaultDamageEffect(idEntity *soundEnt, const idDict &projectileDef, const trace_t &collision, const idVec3 &velocity)
virtual void ReadFromSnapshot(const idBitMsgDelta &msg)
void WriteString(const char *string)
bool EmitSmoke(const idDeclParticle *smoke, const int startTime, const float diversity, const idVec3 &origin, const idMat3 &axis, int timeGroup)
int GetInt(const char *key, const char *defaultString="0") const
void SetLinearVelocity(const idVec3 &newLinearVelocity, int id=0)
bool PostEventSec(const idEventDef *ev, float time)
virtual void WriteToSnapshot(idBitMsgDelta &msg) const
void ReadSoundShader(const idSoundShader *&shader)
assert(prefInfo.fullscreenBtn)
virtual const idSoundShader * FindSound(const char *name, bool makeDefault=true)=0
const idDict * FindEntityDefDict(const char *name, bool makeDefault=true) const
void ReadParticle(const idDeclParticle *&particle)
void Restore(idRestoreGame *savefile)
#define CLIPMODEL_ID_TO_JOINT_HANDLE(id)
const int SHADERPARM_DIVERSITY
int Cmp(const char *text) const
virtual void FreeLightDef(qhandle_t lightHandle)=0
idMat3 mat3_identity(idVec3(1, 0, 0), idVec3(0, 1, 0), idVec3(0, 0, 1))
virtual void SetContents(int contents, int id=-1)=0
void Event_Touch(idEntity *other, trace_t *trace)
idVec3 GetCenter(void) const
static bool ClientPredictionCollide(idEntity *soundEnt, const idDict &projectileDef, const trace_t &collision, const idVec3 &velocity, bool addDamageEffect)
virtual void Launch(const idVec3 &start, const idVec3 &dir, const idVec3 &pushVelocity, const float timeSinceFire=0.0f, const float launchPower=1.0f, const float dmgPower=1.0f)
struct idEntity::entityFlags_s fl
void Bind(idEntity *master, bool orientated)
type * GetEntity(void) const
const int MAX_EVENT_PARAM_SIZE
virtual void SetClipBox(const idBounds &bounds, float density)
idSmokeParticles * smokeParticles
const int SHADERPARM_BEAM_END_Z
virtual bool ClientReceiveEvent(int event, int time, const idBitMsg &msg)
void SetNum(int newnum, bool resize=true)
const idEventDef EV_Activate("activate","e")
virtual qhandle_t AddEntityDef(const renderEntity_t *re)=0
void SetAxis(const idMat3 &axis)
renderEntity_t secondModel
void void void void void Error(const char *fmt,...) const id_attribute((format(printf
const idDeclParticle * smokeFly
idPhysics_RigidBody physicsObj
idAngles GetAngles(const char *key, const char *defaultString=NULL) const
bool IsType(const idTypeInfo &c) const
void Set(const float x, const float y, const float z)
int ClientRemapDecl(declType_t type, int index)
void Write(const void *buffer, int len)
void SetAngles(const idAngles &ang)
idEntity * FindEntity(const char *name) const
virtual void UnlinkClip(void)=0
idVec3 GetEyePosition(void) const
float PowerUpModifier(int type)
bool ProcessEvent(const idEventDef *ev)
renderLight_t renderLight
void WriteBits(int value, int numBits)
const int RB_VELOCITY_MANTISSA_BITS
void RadiusDamage(const idVec3 &origin, idEntity *inflictor, idEntity *attacker, idEntity *ignoreDamage, idEntity *ignorePush, const char *damageDefName, float dmgPower=1.0f)
jointHandle_t GetJointHandle(const char *name) const
virtual void GetSeekPos(idVec3 &out)
idEntityPtr< idEntity > owner
virtual void Explode(const trace_t &collision, idEntity *ignore)
void ReadBool(bool &value)
idAngles ang_zero(0.0f, 0.0f, 0.0f)
virtual const idVec3 & GetLinearVelocity(int id=0) const =0
const int SHADERPARM_BEAM_END_Y
void WriteStaticObject(const idClass &obj)
static float Sqrt(float x)
const idEventDef EV_RadiusDamage("<radiusdmg>","e")
const idVec3 & GetOrigin(int id=0) const
const int SHADERPARM_GREEN
void Killed(idEntity *inflictor, idEntity *attacker, int damage, const idVec3 &dir, int location)
idAngles & Normalize180(void)
virtual void GetSeekPos(idVec3 &out)
void KillTarget(const idVec3 &dir)
void Create(idEntity *owner, const idVec3 &start, const idVec3 &dir)
virtual qhandle_t AddLightDef(const renderLight_t *rlight)=0
virtual const idMaterial * FindMaterial(const char *name, bool makeDefault=true)=0
void ReadFromSnapshot(const idBitMsgDelta &msg)
void SetSoundVolume(float volume)
const int SHADERPARM_BEAM_END_X
void Set(const char *key, const char *value)
struct idProjectile::projectileFlags_s projectileFlags
virtual void ApplyImpulse(idEntity *ent, int id, const idVec3 &point, const idVec3 &impulse)
int ReadBits(int numBits) const
const int SHADERPARM_BEAM_WIDTH
const int RB_VELOCITY_EXPONENT_BITS
idEntityPtr< idEntity > target
void LittleBitField(void *bp, int elsize)
void SetLastHitTime(int time)
idForce_Constant thruster
deferredEntityCallback_t callback
void WriteVec3(const idVec3 &vec)
bool HasChanged(void) const
void ReadRenderEntity(renderEntity_t &renderEntity)
virtual void SetModel(const char *modelname)
void Restore(idRestoreGame *savefile)
void WriteSoundShader(const idSoundShader *shader)
idCVar g_testParticleName("g_testParticleName","", CVAR_GAME,"name of the particle being tested by the particle editor")
const int SHADERPARM_ALPHA
#define EVENT(event, function)
const idEventDef EV_Explode("<explode>", NULL)
void Init(byte *data, int length)
int EntitiesTouchingBounds(const idBounds &bounds, int contentMask, idEntity **entityList, int maxCount) const
void WriteBool(const bool value)
float shaderParms[MAX_ENTITY_SHADER_PARMS]
virtual void Launch(const idVec3 &start, const idVec3 &dir, const idVec3 &pushVelocity, const float timeSinceFire=0.0f, const float power=1.0f, const float dmgPower=1.0f)
bool IsHidden(void) const
idEntity * SpawnEntityType(const idTypeInfo &classdef, const idDict *args=NULL, bool bIsClientReadSnapshot=false)
qhandle_t secondModelDefHandle
bool StartSoundShader(const idSoundShader *shader, const s_channelType channel, int soundShaderFlags, bool broadcast, int *length)
const int SHADERPARM_BLUE
class idPlayerView playerView
int ServerRemapDecl(int clientNum, declType_t type, int index)
idVec3 GetEyePosition(void) const
idEntityPtr< idEntity > enemy
void SetSelf(idEntity *e)
virtual void FreeEntityDef(qhandle_t entityHandle)=0
virtual void AddDamageEffect(const trace_t &collision, const idVec3 &velocity, const char *damageDefName)
void SetTimeScale(const float ts)
void SetOwner(idEntity *newOwner)
idPhysics * GetPhysics(void) const
idAngles ToAngles(void) const
const char * GetString(const char *key, const char *defaultString="") const
bool SpawnEntityDef(const idDict &args, idEntity **ent=NULL, bool setDefaults=true)
void ReadFloat(float &value)
idVec3 ToForward(void) const
void WriteDeltaFloat(float oldValue, float newValue)
bool StartSound(const char *soundName, const s_channelType channel, int soundShaderFlags, bool broadcast, int *length)
idVec3 vec3_origin(0.0f, 0.0f, 0.0f)
void ReadRenderLight(renderLight_t &renderLight)
void void Read(void *buffer, int len)
void SetPhysics(idPhysics *phys)
void Restore(idRestoreGame *savefile)
void WriteToSnapshot(idBitMsgDelta &msg) const
const idVec3 & GetLinearVelocity(int id=0) const
void WriteFloat(const float value)
idPhysics_AF * GetAFPhysics(void)
static const char * sufaceTypeNames[MAX_SURFACE_TYPES]
bool GetBool(const char *key, const char *defaultString="0") const
const idDeclSkin * customSkin
virtual idRenderModel * FindModel(const char *modelName)=0
virtual const idDecl * FindType(declType_t type, const char *name, bool makeDefault=true)=0
int GetSpawnId(void) const
int GetInteger(void) const
idVec3 GetVector(const char *key, const char *defaultString=NULL) const
void ServerSendEvent(int eventId, const idBitMsg *msg, bool saveEvent, int excludeClient) const
void Save(idSaveGame *savefile) const
float ReadFloat(void) const
virtual void SetOrigin(const idVec3 &newOrigin, int id=-1)=0
void CancelEvents(const idEventDef *ev)
const idEventDef EV_Fizzle("<fizzle>", NULL)
const idVec3 & GetGravity(void) const
~idGuidedProjectile(void)
const int GetSurfaceFlags(void) const
float ReadDeltaFloat(float oldValue) const
virtual const idMat3 & GetAxis(int id=0) const =0
virtual void ClientPredictionThink(void)
virtual idAnimator * GetAnimator(void)
virtual void UpdateEntityDef(qhandle_t entityHandle, const renderEntity_t *re)=0
void SetFriction(const float linear, const float angular, const float contact)
float NormalizeFast(void)
#define MASK_SHOT_RENDERMODEL
idVec3 ReadDir(int numBits) const
void Event_GetProjectileState(void)
const int SHADERPARM_TIMEOFFSET
void WriteRenderEntity(const renderEntity_t &renderEntity)
void AlertAI(idEntity *ent)
virtual void Damage(idEntity *inflictor, idEntity *attacker, const idVec3 &dir, const char *damageDefName, const float damageScale, const int location)
void Restore(idRestoreGame *savefile)
virtual void UpdateLightDef(qhandle_t lightHandle, const renderLight_t *rlight)=0
idBounds Expand(const float d) const
void Event_RadiusDamage(idEntity *ignore)
virtual idBounds Bounds(const struct renderEntity_s *ent=NULL) const =0
void SetPosition(idPhysics *physics, int id, const idVec3 &point)
void Save(idSaveGame *savefile) const
const surfTypes_t GetSurfaceType(void) const
void SetAxis(const idMat3 &newAxis, int id=-1)
virtual bool Collide(const trace_t &collision, const idVec3 &velocity)
renderEntity_t renderEntity
void WriteInt(const int value)
virtual void Launch(const idVec3 &start, const idVec3 &dir, const idVec3 &pushVelocity, const float timeSinceFire=0.0f, const float launchPower=1.0f, const float dmgPower=1.0f)
virtual void Present(void)
idActor * EnemyWithMostHealth()
idDeclManager * declManager
virtual bool Collide(const trace_t &collision, const idVec3 &velocity)
idEntity * entities[MAX_GENTITIES]
virtual bool ClientReceiveEvent(int event, int time, const idBitMsg &msg)
const char * GetString(void) const
idEntity * GetTraceEntity(const trace_t &trace) const
void SetContents(int contents, int id=-1)
void ReadStaticObject(idClass &obj)
int Append(const type &obj)
idRenderModelManager * renderModelManager
idCVar g_projectileLights("g_projectileLights","1", CVAR_GAME|CVAR_ARCHIVE|CVAR_BOOL,"show dynamic lights on projectiles")
void WriteAngles(const idAngles &angles)
void SetForce(const idVec3 &force)
void SetClipMask(int mask, int id=-1)
idList< beamTarget_t > beamTargets
virtual const idDecl * DeclByIndex(declType_t type, int index, bool forceParse=true)=0
void ProjectDecal(const idVec3 &origin, const idVec3 &dir, float depth, bool parallel, float size, const char *material, float angle=0)
static idVec3 GetGravity(const idDict *projectile)
bool IsGametypeFlagBased(void)
const idEventDef EV_GetProjectileState("getProjectileState", NULL, 'd')
idMat3 ToMat3(void) const
virtual const idBounds & GetAbsBounds(int id=-1) const =0
void Create(idEntity *owner, const idVec3 &start, const idMat3 &axis)
bool GetJointWorldTransform(jointHandle_t jointHandle, int currentTime, idVec3 &offset, idMat3 &axis)
int Contents(const idVec3 &start, const idClipModel *mdl, const idMat3 &trmAxis, int contentMask, const idEntity *passEntity)
virtual void Evaluate(int time)
virtual void Damage(idEntity *inflictor, idEntity *attacker, const idVec3 &dir, const char *damageDefName, const float damageScale, const int location)
#define CLASS_DECLARATION(nameofsuperclass, nameofclass)
void Save(idSaveGame *savefile) const
idVec3 ToAngularVelocity(void) const
void AddProjectileHits(int count)
int GetEntityNum(void) const
void Save(idSaveGame *savefile) const
void ReadVec3(idVec3 &vec)
static idVec3 GetVelocity(const idDict *projectile)
virtual void Launch(const idVec3 &start, const idVec3 &dir, const idVec3 &pushVelocity, const float timeSinceFire=0.0f, const float launchPower=1.0f, const float dmgPower=1.0f)
virtual void ParseSpawnArgsToRenderEntity(const idDict *args, renderEntity_t *renderEntity)
void ReadAngles(idAngles &angles)
void RestorePhysics(idPhysics *phys)
void BecomeActive(int flags)
const idEventDef EV_Remove("<immediateremove>", NULL)
bool IsActive(void) const
float ReadFloat(void) const
virtual void Explode(const trace_t &collision, idEntity *ignore)
void Restore(idRestoreGame *savefile)
virtual bool CanDamage(const idVec3 &origin, idVec3 &damagePoint) const
virtual const idDeclSkin * FindSkin(const char *name, bool makeDefault=true)=0
idCVar g_testParticle("g_testParticle","0", CVAR_GAME|CVAR_INTEGER,"test particle visualation, set by the particle editor")
void Lerp(const idVec3 &v1, const idVec3 &v2, const float l)
void SetGravity(const idVec3 &newGravity)
const char * GetEntityDefName(void) const
idRenderWorld * gameRenderWorld
void EnableBFGVision(bool b)
char * va(const char *fmt,...)
void SetOrigin(const idVec3 &org)
bool PostEventMS(const idEventDef *ev, int time)
virtual void DPrintf(const char *fmt,...) id_attribute((format(printf
void WriteDir(const idVec3 &dir, int numBits)
const idMaterial * shader
virtual void Killed(idEntity *inflictor, idEntity *attacker, int damage, const idVec3 &dir, int location)
const idEventDef EV_RemoveBeams("<removeBeams>", NULL)
const idEventDef EV_Touch("<touch>","et")
void WriteParticle(const idDeclParticle *particle)
void SetBouncyness(const float b)
void Save(idSaveGame *savefile) const
float shaderParms[MAX_ENTITY_SHADER_PARMS]
void ReadString(idStr &string)
const idDeclParticle * smokeKill
void WriteRenderLight(const renderLight_t &renderLight)
static void ReturnInt(int value)
virtual void FreeLightDef(void)
void SetPhysics(idPhysics *physics)
const idMat3 & GetAxis(int id=0) const
idClipModel * GetClipModel(int id=0) const
idCollisionModelManager * collisionModelManager
void StopSound(const s_channelType channel, bool broadcast)
void Save(idSaveGame *savefile) const
void Restore(idRestoreGame *savefile)
void SetOrigin(const idVec3 &newOrigin, int id=-1)
idEntity * GetOwner(void) const
virtual void SetAxis(const idMat3 &newAxis, int id=-1)=0
void SetMass(float mass, int id=-1)