mirror of
https://github.com/TTimo/doom3.gpl.git
synced 2026-03-20 17:10:16 +01:00
hello world
This commit is contained in:
612
neo/d3xp/AFEntity.h
Normal file
612
neo/d3xp/AFEntity.h
Normal file
@@ -0,0 +1,612 @@
|
||||
/*
|
||||
===========================================================================
|
||||
|
||||
Doom 3 GPL Source Code
|
||||
Copyright (C) 1999-2011 id Software LLC, a ZeniMax Media company.
|
||||
|
||||
This file is part of the Doom 3 GPL Source Code (?Doom 3 Source Code?).
|
||||
|
||||
Doom 3 Source Code is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
Doom 3 Source Code is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with Doom 3 Source Code. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
In addition, the Doom 3 Source Code is also subject to certain additional terms. You should have received a copy of these additional terms immediately following the terms and conditions of the GNU General Public License which accompanied the Doom 3 Source Code. If not, please request a copy in writing from id Software at the address below.
|
||||
|
||||
If you have questions concerning this license or the applicable additional terms, you may contact in writing id Software LLC, c/o ZeniMax Media Inc., Suite 120, Rockville, Maryland 20850 USA.
|
||||
|
||||
===========================================================================
|
||||
*/
|
||||
|
||||
#ifndef __GAME_AFENTITY_H__
|
||||
#define __GAME_AFENTITY_H__
|
||||
|
||||
|
||||
/*
|
||||
===============================================================================
|
||||
|
||||
idMultiModelAF
|
||||
|
||||
Entity using multiple separate visual models animated with a single
|
||||
articulated figure. Only used for debugging!
|
||||
|
||||
===============================================================================
|
||||
*/
|
||||
const int GIB_DELAY = 200; // only gib this often to keep performace hits when blowing up several mobs
|
||||
|
||||
class idMultiModelAF : public idEntity {
|
||||
public:
|
||||
CLASS_PROTOTYPE( idMultiModelAF );
|
||||
|
||||
void Spawn( void );
|
||||
~idMultiModelAF( void );
|
||||
|
||||
virtual void Think( void );
|
||||
virtual void Present( void );
|
||||
|
||||
protected:
|
||||
idPhysics_AF physicsObj;
|
||||
|
||||
void SetModelForId( int id, const idStr &modelName );
|
||||
|
||||
private:
|
||||
idList<idRenderModel *> modelHandles;
|
||||
idList<int> modelDefHandles;
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
===============================================================================
|
||||
|
||||
idChain
|
||||
|
||||
Chain hanging down from the ceiling. Only used for debugging!
|
||||
|
||||
===============================================================================
|
||||
*/
|
||||
|
||||
class idChain : public idMultiModelAF {
|
||||
public:
|
||||
CLASS_PROTOTYPE( idChain );
|
||||
|
||||
void Spawn( void );
|
||||
|
||||
protected:
|
||||
void BuildChain( const idStr &name, const idVec3 &origin, float linkLength, float linkWidth, float density, int numLinks, bool bindToWorld = true );
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
===============================================================================
|
||||
|
||||
idAFAttachment
|
||||
|
||||
===============================================================================
|
||||
*/
|
||||
|
||||
class idAFAttachment : public idAnimatedEntity {
|
||||
public:
|
||||
CLASS_PROTOTYPE( idAFAttachment );
|
||||
|
||||
idAFAttachment( void );
|
||||
virtual ~idAFAttachment( void );
|
||||
|
||||
void Spawn( void );
|
||||
|
||||
void Save( idSaveGame *savefile ) const;
|
||||
void Restore( idRestoreGame *savefile );
|
||||
|
||||
void SetBody( idEntity *bodyEnt, const char *headModel, jointHandle_t attachJoint );
|
||||
void ClearBody( void );
|
||||
idEntity * GetBody( void ) const;
|
||||
|
||||
virtual void Think( void );
|
||||
|
||||
virtual void Hide( void );
|
||||
virtual void Show( void );
|
||||
|
||||
void PlayIdleAnim( int blendTime );
|
||||
|
||||
virtual void GetImpactInfo( idEntity *ent, int id, const idVec3 &point, impactInfo_t *info );
|
||||
virtual void ApplyImpulse( idEntity *ent, int id, const idVec3 &point, const idVec3 &impulse );
|
||||
virtual void AddForce( idEntity *ent, int id, const idVec3 &point, const idVec3 &force );
|
||||
|
||||
virtual void Damage( idEntity *inflictor, idEntity *attacker, const idVec3 &dir, const char *damageDefName, const float damageScale, const int location );
|
||||
virtual void AddDamageEffect( const trace_t &collision, const idVec3 &velocity, const char *damageDefName );
|
||||
|
||||
void SetCombatModel( void );
|
||||
idClipModel * GetCombatModel( void ) const;
|
||||
virtual void LinkCombat( void );
|
||||
virtual void UnlinkCombat( void );
|
||||
|
||||
protected:
|
||||
idEntity * body;
|
||||
idClipModel * combatModel; // render model for hit detection of head
|
||||
int idleAnim;
|
||||
jointHandle_t attachJoint;
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
===============================================================================
|
||||
|
||||
idAFEntity_Base
|
||||
|
||||
===============================================================================
|
||||
*/
|
||||
|
||||
class idAFEntity_Base : public idAnimatedEntity {
|
||||
public:
|
||||
CLASS_PROTOTYPE( idAFEntity_Base );
|
||||
|
||||
idAFEntity_Base( void );
|
||||
virtual ~idAFEntity_Base( void );
|
||||
|
||||
void Spawn( void );
|
||||
|
||||
void Save( idSaveGame *savefile ) const;
|
||||
void Restore( idRestoreGame *savefile );
|
||||
|
||||
virtual void Think( void );
|
||||
virtual void GetImpactInfo( idEntity *ent, int id, const idVec3 &point, impactInfo_t *info );
|
||||
virtual void ApplyImpulse( idEntity *ent, int id, const idVec3 &point, const idVec3 &impulse );
|
||||
virtual void AddForce( idEntity *ent, int id, const idVec3 &point, const idVec3 &force );
|
||||
virtual bool Collide( const trace_t &collision, const idVec3 &velocity );
|
||||
virtual bool GetPhysicsToVisualTransform( idVec3 &origin, idMat3 &axis );
|
||||
virtual bool UpdateAnimationControllers( void );
|
||||
virtual void FreeModelDef( void );
|
||||
|
||||
virtual bool LoadAF( void );
|
||||
bool IsActiveAF( void ) const { return af.IsActive(); }
|
||||
const char * GetAFName( void ) const { return af.GetName(); }
|
||||
idPhysics_AF * GetAFPhysics( void ) { return af.GetPhysics(); }
|
||||
|
||||
void SetCombatModel( void );
|
||||
idClipModel * GetCombatModel( void ) const;
|
||||
// contents of combatModel can be set to 0 or re-enabled (mp)
|
||||
void SetCombatContents( bool enable );
|
||||
virtual void LinkCombat( void );
|
||||
virtual void UnlinkCombat( void );
|
||||
|
||||
int BodyForClipModelId( int id ) const;
|
||||
|
||||
void SaveState( idDict &args ) const;
|
||||
void LoadState( const idDict &args );
|
||||
|
||||
void AddBindConstraints( void );
|
||||
void RemoveBindConstraints( void );
|
||||
|
||||
virtual void ShowEditingDialog( void );
|
||||
|
||||
static void DropAFs( idEntity *ent, const char *type, idList<idEntity *> *list );
|
||||
|
||||
protected:
|
||||
idAF af; // articulated figure
|
||||
idClipModel * combatModel; // render model for hit detection
|
||||
int combatModelContents;
|
||||
idVec3 spawnOrigin; // spawn origin
|
||||
idMat3 spawnAxis; // rotation axis used when spawned
|
||||
int nextSoundTime; // next time this can make a sound
|
||||
|
||||
void Event_SetConstraintPosition( const char *name, const idVec3 &pos );
|
||||
};
|
||||
|
||||
/*
|
||||
===============================================================================
|
||||
|
||||
idAFEntity_Gibbable
|
||||
|
||||
===============================================================================
|
||||
*/
|
||||
|
||||
extern const idEventDef EV_Gib;
|
||||
extern const idEventDef EV_Gibbed;
|
||||
|
||||
class idAFEntity_Gibbable : public idAFEntity_Base {
|
||||
public:
|
||||
CLASS_PROTOTYPE( idAFEntity_Gibbable );
|
||||
|
||||
idAFEntity_Gibbable( void );
|
||||
~idAFEntity_Gibbable( void );
|
||||
|
||||
void Spawn( void );
|
||||
void Save( idSaveGame *savefile ) const;
|
||||
void Restore( idRestoreGame *savefile );
|
||||
virtual void Present( void );
|
||||
virtual void Damage( idEntity *inflictor, idEntity *attacker, const idVec3 &dir, const char *damageDefName, const float damageScale, const int location );
|
||||
#ifdef _D3XP
|
||||
void SetThrown( bool isThrown );
|
||||
virtual bool Collide( const trace_t &collision, const idVec3 &velocity );
|
||||
#endif
|
||||
virtual void SpawnGibs( const idVec3 &dir, const char *damageDefName );
|
||||
|
||||
#ifdef _D3XP
|
||||
bool IsGibbed() { return gibbed; };
|
||||
#endif
|
||||
|
||||
protected:
|
||||
idRenderModel * skeletonModel;
|
||||
int skeletonModelDefHandle;
|
||||
bool gibbed;
|
||||
|
||||
#ifdef _D3XP
|
||||
bool wasThrown;
|
||||
#endif
|
||||
|
||||
virtual void Gib( const idVec3 &dir, const char *damageDefName );
|
||||
void InitSkeletonModel( void );
|
||||
|
||||
void Event_Gib( const char *damageDefName );
|
||||
};
|
||||
|
||||
/*
|
||||
===============================================================================
|
||||
|
||||
idAFEntity_Generic
|
||||
|
||||
===============================================================================
|
||||
*/
|
||||
|
||||
class idAFEntity_Generic : public idAFEntity_Gibbable {
|
||||
public:
|
||||
CLASS_PROTOTYPE( idAFEntity_Generic );
|
||||
|
||||
idAFEntity_Generic( void );
|
||||
~idAFEntity_Generic( void );
|
||||
|
||||
void Spawn( void );
|
||||
|
||||
void Save( idSaveGame *savefile ) const;
|
||||
void Restore( idRestoreGame *savefile );
|
||||
|
||||
virtual void Think( void );
|
||||
void KeepRunningPhysics( void ) { keepRunningPhysics = true; }
|
||||
|
||||
private:
|
||||
void Event_Activate( idEntity *activator );
|
||||
|
||||
bool keepRunningPhysics;
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
===============================================================================
|
||||
|
||||
idAFEntity_WithAttachedHead
|
||||
|
||||
===============================================================================
|
||||
*/
|
||||
|
||||
class idAFEntity_WithAttachedHead : public idAFEntity_Gibbable {
|
||||
public:
|
||||
CLASS_PROTOTYPE( idAFEntity_WithAttachedHead );
|
||||
|
||||
idAFEntity_WithAttachedHead();
|
||||
~idAFEntity_WithAttachedHead();
|
||||
|
||||
void Spawn( void );
|
||||
|
||||
void Save( idSaveGame *savefile ) const;
|
||||
void Restore( idRestoreGame *savefile );
|
||||
|
||||
void SetupHead( void );
|
||||
|
||||
virtual void Think( void );
|
||||
|
||||
virtual void Hide( void );
|
||||
virtual void Show( void );
|
||||
virtual void ProjectOverlay( const idVec3 &origin, const idVec3 &dir, float size, const char *material );
|
||||
|
||||
virtual void LinkCombat( void );
|
||||
virtual void UnlinkCombat( void );
|
||||
|
||||
protected:
|
||||
virtual void Gib( const idVec3 &dir, const char *damageDefName );
|
||||
|
||||
#ifndef _D3XP
|
||||
private:
|
||||
#else
|
||||
public:
|
||||
#endif
|
||||
idEntityPtr<idAFAttachment> head;
|
||||
|
||||
void Event_Gib( const char *damageDefName );
|
||||
void Event_Activate( idEntity *activator );
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
===============================================================================
|
||||
|
||||
idAFEntity_Vehicle
|
||||
|
||||
===============================================================================
|
||||
*/
|
||||
|
||||
class idAFEntity_Vehicle : public idAFEntity_Base {
|
||||
public:
|
||||
CLASS_PROTOTYPE( idAFEntity_Vehicle );
|
||||
|
||||
idAFEntity_Vehicle( void );
|
||||
|
||||
void Spawn( void );
|
||||
void Use( idPlayer *player );
|
||||
|
||||
protected:
|
||||
idPlayer * player;
|
||||
jointHandle_t eyesJoint;
|
||||
jointHandle_t steeringWheelJoint;
|
||||
float wheelRadius;
|
||||
float steerAngle;
|
||||
float steerSpeed;
|
||||
const idDeclParticle * dustSmoke;
|
||||
|
||||
float GetSteerAngle( void );
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
===============================================================================
|
||||
|
||||
idAFEntity_VehicleSimple
|
||||
|
||||
===============================================================================
|
||||
*/
|
||||
|
||||
class idAFEntity_VehicleSimple : public idAFEntity_Vehicle {
|
||||
public:
|
||||
CLASS_PROTOTYPE( idAFEntity_VehicleSimple );
|
||||
|
||||
idAFEntity_VehicleSimple( void );
|
||||
~idAFEntity_VehicleSimple( void );
|
||||
|
||||
void Spawn( void );
|
||||
virtual void Think( void );
|
||||
|
||||
protected:
|
||||
idClipModel * wheelModel;
|
||||
idAFConstraint_Suspension * suspension[4];
|
||||
jointHandle_t wheelJoints[4];
|
||||
float wheelAngles[4];
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
===============================================================================
|
||||
|
||||
idAFEntity_VehicleFourWheels
|
||||
|
||||
===============================================================================
|
||||
*/
|
||||
|
||||
class idAFEntity_VehicleFourWheels : public idAFEntity_Vehicle {
|
||||
public:
|
||||
CLASS_PROTOTYPE( idAFEntity_VehicleFourWheels );
|
||||
|
||||
idAFEntity_VehicleFourWheels( void );
|
||||
|
||||
void Spawn( void );
|
||||
virtual void Think( void );
|
||||
|
||||
protected:
|
||||
idAFBody * wheels[4];
|
||||
idAFConstraint_Hinge * steering[2];
|
||||
jointHandle_t wheelJoints[4];
|
||||
float wheelAngles[4];
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
===============================================================================
|
||||
|
||||
idAFEntity_VehicleSixWheels
|
||||
|
||||
===============================================================================
|
||||
*/
|
||||
|
||||
class idAFEntity_VehicleSixWheels : public idAFEntity_Vehicle {
|
||||
public:
|
||||
CLASS_PROTOTYPE( idAFEntity_VehicleSixWheels );
|
||||
|
||||
idAFEntity_VehicleSixWheels( void );
|
||||
|
||||
void Spawn( void );
|
||||
virtual void Think( void );
|
||||
|
||||
#ifdef _D3XP
|
||||
float force;
|
||||
float velocity;
|
||||
float steerAngle;
|
||||
#endif
|
||||
|
||||
private:
|
||||
idAFBody * wheels[6];
|
||||
idAFConstraint_Hinge * steering[4];
|
||||
jointHandle_t wheelJoints[6];
|
||||
float wheelAngles[6];
|
||||
};
|
||||
|
||||
#ifdef _D3XP
|
||||
/*
|
||||
===============================================================================
|
||||
|
||||
idAFEntity_VehicleAutomated
|
||||
|
||||
===============================================================================
|
||||
*/
|
||||
|
||||
class idAFEntity_VehicleAutomated : public idAFEntity_VehicleSixWheels {
|
||||
public:
|
||||
CLASS_PROTOTYPE( idAFEntity_VehicleAutomated );
|
||||
|
||||
void Spawn( void );
|
||||
void PostSpawn( void );
|
||||
virtual void Think( void );
|
||||
|
||||
private:
|
||||
|
||||
idEntity *waypoint;
|
||||
float steeringSpeed;
|
||||
float currentSteering;
|
||||
float idealSteering;
|
||||
float originHeight;
|
||||
|
||||
void Event_SetVelocity( float _velocity );
|
||||
void Event_SetTorque( float _torque );
|
||||
void Event_SetSteeringSpeed( float _steeringSpeed );
|
||||
void Event_SetWayPoint( idEntity *_waypoint );
|
||||
};
|
||||
#endif
|
||||
|
||||
/*
|
||||
===============================================================================
|
||||
|
||||
idAFEntity_SteamPipe
|
||||
|
||||
===============================================================================
|
||||
*/
|
||||
|
||||
class idAFEntity_SteamPipe : public idAFEntity_Base {
|
||||
public:
|
||||
CLASS_PROTOTYPE( idAFEntity_SteamPipe );
|
||||
|
||||
idAFEntity_SteamPipe( void );
|
||||
~idAFEntity_SteamPipe( void );
|
||||
|
||||
void Spawn( void );
|
||||
void Save( idSaveGame *savefile ) const;
|
||||
void Restore( idRestoreGame *savefile );
|
||||
|
||||
virtual void Think( void );
|
||||
|
||||
private:
|
||||
int steamBody;
|
||||
float steamForce;
|
||||
float steamUpForce;
|
||||
idForce_Constant force;
|
||||
renderEntity_t steamRenderEntity;
|
||||
qhandle_t steamModelDefHandle;
|
||||
|
||||
void InitSteamRenderEntity( void );
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
===============================================================================
|
||||
|
||||
idAFEntity_ClawFourFingers
|
||||
|
||||
===============================================================================
|
||||
*/
|
||||
|
||||
class idAFEntity_ClawFourFingers : public idAFEntity_Base {
|
||||
public:
|
||||
CLASS_PROTOTYPE( idAFEntity_ClawFourFingers );
|
||||
|
||||
idAFEntity_ClawFourFingers( void );
|
||||
|
||||
void Spawn( void );
|
||||
void Save( idSaveGame *savefile ) const;
|
||||
void Restore( idRestoreGame *savefile );
|
||||
|
||||
private:
|
||||
idAFConstraint_Hinge * fingers[4];
|
||||
|
||||
void Event_SetFingerAngle( float angle );
|
||||
void Event_StopFingers( void );
|
||||
};
|
||||
|
||||
#ifdef _D3XP
|
||||
|
||||
/**
|
||||
* idHarvestable contains all of the code required to turn an entity into a harvestable
|
||||
* entity. The entity must create an instance of this class and call the appropriate
|
||||
* interface methods at the correct time.
|
||||
*/
|
||||
class idHarvestable : public idEntity {
|
||||
public:
|
||||
CLASS_PROTOTYPE( idHarvestable );
|
||||
|
||||
idHarvestable();
|
||||
~idHarvestable();
|
||||
|
||||
void Spawn();
|
||||
void Init(idEntity* parent);
|
||||
void Save( idSaveGame *savefile ) const;
|
||||
void Restore( idRestoreGame *savefile );
|
||||
|
||||
void SetParent(idEntity* parent);
|
||||
|
||||
void Think();
|
||||
void Gib();
|
||||
|
||||
protected:
|
||||
idEntityPtr<idEntity> parentEnt;
|
||||
float triggersize;
|
||||
idClipModel * trigger;
|
||||
float giveDelay;
|
||||
float removeDelay;
|
||||
bool given;
|
||||
|
||||
idEntityPtr<idPlayer> player;
|
||||
int startTime;
|
||||
|
||||
bool fxFollowPlayer;
|
||||
idEntityPtr<idEntityFx> fx;
|
||||
idStr fxOrient;
|
||||
|
||||
protected:
|
||||
void BeginBurn();
|
||||
void BeginFX();
|
||||
void CalcTriggerBounds( float size, idBounds &bounds );
|
||||
|
||||
bool GetFxOrientationAxis(idMat3& mat);
|
||||
|
||||
void Event_SpawnHarvestTrigger( void );
|
||||
void Event_Touch( idEntity *other, trace_t *trace );
|
||||
} ;
|
||||
|
||||
|
||||
/*
|
||||
===============================================================================
|
||||
|
||||
idAFEntity_Harvest
|
||||
|
||||
===============================================================================
|
||||
*/
|
||||
|
||||
|
||||
|
||||
class idAFEntity_Harvest : public idAFEntity_WithAttachedHead {
|
||||
public:
|
||||
CLASS_PROTOTYPE( idAFEntity_Harvest );
|
||||
|
||||
idAFEntity_Harvest();
|
||||
~idAFEntity_Harvest();
|
||||
|
||||
void Spawn( void );
|
||||
|
||||
void Save( idSaveGame *savefile ) const;
|
||||
void Restore( idRestoreGame *savefile );
|
||||
|
||||
virtual void Think( void );
|
||||
|
||||
virtual void Gib( const idVec3 &dir, const char *damageDefName );
|
||||
|
||||
protected:
|
||||
idEntityPtr<idHarvestable> harvestEnt;
|
||||
protected:
|
||||
void Event_SpawnHarvestEntity( void );
|
||||
|
||||
};
|
||||
#endif
|
||||
|
||||
#endif /* !__GAME_AFENTITY_H__ */
|
||||
Reference in New Issue
Block a user