mirror of
https://github.com/jmarshall23/DoomRTX.git
synced 2026-08-22 05:25:44 +02:00
Quake 4 integrated with DoomRTX
This commit is contained in:
@@ -0,0 +1,492 @@
|
||||
// RAVEN BEGIN
|
||||
// bdube: note that this file is no longer merged with Doom3 updates
|
||||
//
|
||||
// MERGE_DATE 9/30/2004
|
||||
|
||||
#ifndef __GAME_WEAPON_H__
|
||||
#define __GAME_WEAPON_H__
|
||||
|
||||
/*
|
||||
===============================================================================
|
||||
|
||||
Player Weapon
|
||||
|
||||
===============================================================================
|
||||
*/
|
||||
|
||||
typedef enum {
|
||||
WP_READY,
|
||||
WP_OUTOFAMMO,
|
||||
WP_RELOAD,
|
||||
WP_HOLSTERED,
|
||||
WP_RISING,
|
||||
WP_LOWERING,
|
||||
WP_FLASHLIGHT,
|
||||
} weaponStatus_t;
|
||||
|
||||
static const int MAX_WEAPONMODS = 4;
|
||||
static const int MAX_AMMOTYPES = 16;
|
||||
|
||||
class idPlayer;
|
||||
class idItem;
|
||||
class idAnimatedEntity;
|
||||
class idProjectile;
|
||||
class rvWeapon;
|
||||
|
||||
class rvViewWeapon : public idAnimatedEntity {
|
||||
public:
|
||||
|
||||
CLASS_PROTOTYPE( rvViewWeapon );
|
||||
|
||||
rvViewWeapon( void );
|
||||
virtual ~rvViewWeapon( void );
|
||||
|
||||
// Init
|
||||
void Spawn ( void );
|
||||
|
||||
// save games
|
||||
void Save ( idSaveGame *savefile ) const; // archives object for save game file
|
||||
void Restore ( idRestoreGame *savefile ); // unarchives object from save game file
|
||||
|
||||
|
||||
// Weapon definition management
|
||||
void Clear ( void );
|
||||
|
||||
// GUIs
|
||||
void PostGUIEvent ( const char* event );
|
||||
|
||||
virtual void SetModel ( const char *modelname, int mods = 0 );
|
||||
void SetPowerUpSkin ( const char *name );
|
||||
void UpdateSkin ( void );
|
||||
|
||||
// State control/player interface
|
||||
void Think ( void );
|
||||
|
||||
// Visual presentation
|
||||
void PresentWeapon ( bool showViewModel );
|
||||
|
||||
// Networking
|
||||
virtual void WriteToSnapshot ( idBitMsgDelta &msg ) const;
|
||||
virtual void ReadFromSnapshot ( const idBitMsgDelta &msg );
|
||||
virtual bool ClientReceiveEvent ( int event, int time, const idBitMsg &msg );
|
||||
virtual void ClientPredictionThink ( void );
|
||||
virtual bool ClientStale ( void );
|
||||
|
||||
virtual void ConvertLocalToWorldTransform( idVec3 &offset, idMat3 &axis );
|
||||
virtual void UpdateModelTransform ( void );
|
||||
|
||||
// Debugging
|
||||
virtual void GetDebugInfo ( debugInfoProc_t proc, void* userData );
|
||||
|
||||
|
||||
void SetSkin ( const char *skinname );
|
||||
void SetSkin ( const idDeclSkin* skin );
|
||||
|
||||
void SetOverlayShader ( const idMaterial* material );
|
||||
|
||||
virtual void GetPosition ( idVec3& origin, idMat3& axis ) const;
|
||||
|
||||
private:
|
||||
|
||||
idStrList pendingGUIEvents;
|
||||
|
||||
// effects
|
||||
const idDeclSkin * saveSkin;
|
||||
const idDeclSkin * invisSkin;
|
||||
const idDeclSkin * saveWorldSkin;
|
||||
const idDeclSkin * worldInvisSkin;
|
||||
const idDeclSkin * saveHandsSkin;
|
||||
const idDeclSkin * handsSkin;
|
||||
|
||||
void Event_CallFunction ( const char* function );
|
||||
|
||||
friend class rvWeapon;
|
||||
rvWeapon* weapon;
|
||||
};
|
||||
|
||||
class rvWeapon : public idClass {
|
||||
public:
|
||||
|
||||
CLASS_PROTOTYPE( rvWeapon );
|
||||
|
||||
rvWeapon( void );
|
||||
virtual ~rvWeapon( void );
|
||||
|
||||
enum {
|
||||
WPLIGHT_MUZZLEFLASH,
|
||||
WPLIGHT_MUZZLEFLASH_WORLD,
|
||||
WPLIGHT_FLASHLIGHT,
|
||||
WPLIGHT_FLASHLIGHT_WORLD,
|
||||
WPLIGHT_GUI,
|
||||
WPLIGHT_MAX
|
||||
};
|
||||
|
||||
enum {
|
||||
EVENT_RELOAD = idEntity::EVENT_MAXEVENTS,
|
||||
EVENT_ENDRELOAD,
|
||||
EVENT_CHANGESKIN,
|
||||
EVENT_MAXEVENTS
|
||||
};
|
||||
|
||||
void Init ( idPlayer* _owner, const idDeclEntityDef* def, int weaponIndex, bool isStrogg = false );
|
||||
|
||||
// Virtual overrides
|
||||
void Spawn ( void );
|
||||
virtual void Think ( void );
|
||||
virtual void CleanupWeapon ( void ) {}
|
||||
virtual void WriteToSnapshot ( idBitMsgDelta &msg ) const;
|
||||
virtual void ReadFromSnapshot ( const idBitMsgDelta &msg );
|
||||
virtual bool ClientReceiveEvent ( int event, int time, const idBitMsg &msg );
|
||||
virtual void ClientStale ( void );
|
||||
virtual void ClientUnstale ( void ) { }
|
||||
virtual void Attack ( bool altFire, int num_attacks, float spread, float fuseOffset, float power );
|
||||
virtual void GetDebugInfo ( debugInfoProc_t proc, void* userData );
|
||||
virtual void SpectatorCycle ( void ) { }
|
||||
virtual bool NoFireWhileSwitching ( void ) const { return false; }
|
||||
|
||||
void Save ( idSaveGame *savefile ) const;
|
||||
void Restore ( idRestoreGame *savefile );
|
||||
virtual void PreSave ( void );
|
||||
virtual void PostSave ( void );
|
||||
|
||||
|
||||
// Visual presentation
|
||||
bool BloodSplat ( float size );
|
||||
void MuzzleFlash ( void );
|
||||
void MuzzleRise ( idVec3 &origin, idMat3 &axis );
|
||||
float GetMuzzleFlashLightParm ( int parm );
|
||||
void SetMuzzleFlashLightParm ( int parm, float value );
|
||||
void GetAngleOffsets ( int *average, float *scale, float *max );
|
||||
void GetTimeOffsets ( float *time, float *scale );
|
||||
bool GetGlobalJointTransform ( bool viewModel, const jointHandle_t jointHandle, idVec3 &origin, idMat3 &axis, const idVec3& offset = vec3_origin );
|
||||
|
||||
// State control/player interface
|
||||
void LowerWeapon ( void );
|
||||
void RaiseWeapon ( void );
|
||||
void Raise ( void );
|
||||
void PutAway ( void );
|
||||
void Hide ( void );
|
||||
void Show ( void );
|
||||
void HideWorldModel ( void );
|
||||
void ShowWorldModel ( void );
|
||||
void SetFlashlight ( bool on = true );
|
||||
void Flashlight ( void );
|
||||
void SetPushVelocity ( const idVec3 &pushVelocity );
|
||||
void Reload ( void );
|
||||
void OwnerDied ( void );
|
||||
void BeginAttack ( void );
|
||||
void EndAttack ( void );
|
||||
bool IsReady ( void ) const;
|
||||
bool IsReloading ( void ) const;
|
||||
bool IsHolstered ( void ) const;
|
||||
bool ShowCrosshair ( void ) const;
|
||||
bool CanDrop ( void ) const;
|
||||
bool CanZoom ( void ) const;
|
||||
void CancelReload ( void );
|
||||
void SetStatus ( weaponStatus_t status );
|
||||
bool AutoReload ( void );
|
||||
bool IsHidden ( void ) const;
|
||||
void EjectBrass ( void );
|
||||
|
||||
// Network helpers
|
||||
void NetReload ( void );
|
||||
void NetEndReload ( void );
|
||||
void NetCatchup ( void );
|
||||
|
||||
// Ammo
|
||||
static int GetAmmoIndexForName ( const char *ammoname );
|
||||
static const char* GetAmmoNameForIndex ( int index );
|
||||
int GetAmmoType ( void ) const;
|
||||
int AmmoAvailable ( void ) const;
|
||||
int AmmoInClip ( void ) const;
|
||||
void ResetAmmoClip ( void );
|
||||
int ClipSize ( void ) const;
|
||||
int LowAmmo ( void ) const;
|
||||
int AmmoRequired ( void ) const;
|
||||
void AddToClip ( int amount );
|
||||
void UseAmmo ( int amount );
|
||||
void SetClip ( int amount );
|
||||
int TotalAmmoCount ( void ) const;
|
||||
|
||||
// Attack
|
||||
bool PerformAttack ( idVec3& muzzleOrigin, idMat3& muzzleAxis, float dmgPower );
|
||||
void LaunchProjectiles ( idDict& dict, const idVec3& muzzleOrigin, const idMat3& muzzleAxis, int num_projectiles, float spread, float fuseOffset, float power );
|
||||
void Hitscan ( const idDict& dict, const idVec3& muzzleOrigin, const idMat3& muzzleAxis, int num_hitscans, float spread, float power );
|
||||
void AlertMonsters ( void );
|
||||
|
||||
// Mods
|
||||
int GetMods ( void ) const;
|
||||
|
||||
// Zoom
|
||||
idUserInterface* GetZoomGui ( void ) const;
|
||||
float GetZoomTime ( void ) const;
|
||||
int GetZoomFov ( void ) const;
|
||||
|
||||
rvViewWeapon* GetViewModel ( void ) const;
|
||||
idAnimatedEntity* GetWorldModel ( void ) const;
|
||||
idPlayer* GetOwner ( void ) const;
|
||||
const char * GetIcon ( void ) const;
|
||||
renderLight_t& GetLight ( int light );
|
||||
const idAngles& GetViewModelAngles ( void ) const;
|
||||
const idVec3& GetViewModelOffset ( void ) const;
|
||||
|
||||
static void CacheWeapon ( const char *weaponName );
|
||||
static void SkipFromSnapshot ( const idBitMsgDelta &msg );
|
||||
|
||||
void EnterCinematic ( void );
|
||||
void ExitCinematic ( void );
|
||||
|
||||
protected:
|
||||
|
||||
virtual void OnLaunchProjectile ( idProjectile* proj );
|
||||
|
||||
void SetState ( const char *statename, int blendFrames );
|
||||
void PostState ( const char *statename, int blendFrames );
|
||||
void ExecuteState ( const char *statename );
|
||||
|
||||
void PlayAnim ( int channel, const char *animname, int blendFrames );
|
||||
void PlayCycle ( int channel, const char *animname, int blendFrames );
|
||||
bool AnimDone ( int channel, int blendFrames );
|
||||
bool StartSound ( const char *soundName, const s_channelType channel, int soundShaderFlags, bool broadcast, int *length );
|
||||
void StopSound ( const s_channelType channel, bool broadcast );
|
||||
rvClientEffect* PlayEffect ( const char* effectName, jointHandle_t joint, bool loop = false, const idVec3& endOrigin = vec3_origin, bool broadcast = false );
|
||||
|
||||
void FindViewModelPositionStyle ( idVec3& viewOffset, idAngles& viewAngles ) const;
|
||||
|
||||
public:
|
||||
|
||||
void InitLights ( void );
|
||||
void InitWorldModel ( void );
|
||||
void InitViewModel ( void );
|
||||
void InitDefs ( void );
|
||||
|
||||
void FreeLight ( int lightID );
|
||||
void UpdateLight ( int lightID );
|
||||
|
||||
void UpdateMuzzleFlash ( void );
|
||||
void UpdateFlashlight ( void );
|
||||
|
||||
void UpdateGUI ( void );
|
||||
void UpdateCrosshairGUI ( idUserInterface* gui ) const;
|
||||
|
||||
idMat3 ForeshortenAxis ( const idMat3& axis ) const;
|
||||
|
||||
// Script state management
|
||||
struct weaponStateFlags_s {
|
||||
bool attack :1;
|
||||
bool reload :1;
|
||||
bool netReload :1;
|
||||
bool netEndReload :1;
|
||||
bool raiseWeapon :1;
|
||||
bool lowerWeapon :1;
|
||||
bool flashlight :1;
|
||||
bool zoom :1;
|
||||
} wsfl;
|
||||
|
||||
// Generic flags
|
||||
struct weaponFlags_s {
|
||||
bool attackAltHitscan :1;
|
||||
bool attackHitscan :1;
|
||||
bool hide :1;
|
||||
bool disabled :1;
|
||||
bool hasBloodSplat :1;
|
||||
bool silent_fire :1;
|
||||
bool zoomHideCrosshair :1;
|
||||
bool flashlightOn :1;
|
||||
bool hasWindupAnim :1;
|
||||
} wfl;
|
||||
|
||||
// joints from models
|
||||
jointHandle_t barrelJointView;
|
||||
jointHandle_t flashJointView;
|
||||
jointHandle_t ejectJointView;
|
||||
jointHandle_t guiLightJointView;
|
||||
jointHandle_t flashlightJointView;
|
||||
|
||||
jointHandle_t flashJointWorld;
|
||||
jointHandle_t ejectJointWorld;
|
||||
jointHandle_t flashlightJointWorld;
|
||||
|
||||
weaponStatus_t status;
|
||||
int lastAttack;
|
||||
|
||||
// hiding weapon
|
||||
int hideTime;
|
||||
float hideDistance;
|
||||
int hideStartTime;
|
||||
float hideStart;
|
||||
float hideEnd;
|
||||
float hideOffset;
|
||||
|
||||
// Attack
|
||||
idVec3 pushVelocity;
|
||||
int kick_endtime;
|
||||
int muzzle_kick_time;
|
||||
int muzzle_kick_maxtime;
|
||||
idAngles muzzle_kick_angles;
|
||||
idVec3 muzzle_kick_offset;
|
||||
idVec3 muzzleOrigin;
|
||||
idMat3 muzzleAxis;
|
||||
float muzzleOffset;
|
||||
idEntityPtr<idEntity> projectileEnt;
|
||||
idVec3 ejectOffset;
|
||||
|
||||
int fireRate;
|
||||
int altFireRate;
|
||||
float spread;
|
||||
int nextAttackTime;
|
||||
|
||||
// we maintain local copies of the projectile and brass dictionaries so they
|
||||
// do not have to be copied across the DLL boundary when entities are spawned
|
||||
idDict attackAltDict;
|
||||
idDict attackDict;
|
||||
idDict brassDict;
|
||||
|
||||
// Melee
|
||||
const idDeclEntityDef * meleeDef;
|
||||
float meleeDistance;
|
||||
|
||||
// zoom
|
||||
int zoomFov; // variable zoom fov per weapon (-1 is no zoom)
|
||||
idUserInterface* zoomGui; // whether or not to overlay a zoom scope
|
||||
float zoomTime; // time it takes to zoom in
|
||||
|
||||
// lights
|
||||
renderLight_t lights[WPLIGHT_MAX];
|
||||
int lightHandles[WPLIGHT_MAX];
|
||||
idVec3 guiLightOffset;
|
||||
int muzzleFlashEnd;
|
||||
int muzzleFlashTime;
|
||||
idVec3 muzzleFlashViewOffset;
|
||||
bool flashlightOn;
|
||||
idVec3 flashlightViewOffset;
|
||||
|
||||
// ammo management
|
||||
int ammoType;
|
||||
int ammoRequired; // amount of ammo to use each shot. 0 means weapon doesn't need ammo.
|
||||
int clipSize; // 0 means no reload
|
||||
int ammoClip;
|
||||
int lowAmmo; // if ammo in clip hits this threshold, snd_
|
||||
int maxAmmo;
|
||||
|
||||
// multiplayer
|
||||
int clipPredictTime;
|
||||
|
||||
// these are the player render view parms, which include bobbing
|
||||
idVec3 playerViewOrigin;
|
||||
idMat3 playerViewAxis;
|
||||
|
||||
|
||||
// View Model
|
||||
idVec3 viewModelOrigin;
|
||||
idMat3 viewModelAxis;
|
||||
idAngles viewModelAngles;
|
||||
idVec3 viewModelOffset;
|
||||
|
||||
// weighting for viewmodel offsets
|
||||
int weaponAngleOffsetAverages;
|
||||
float weaponAngleOffsetScale;
|
||||
float weaponAngleOffsetMax;
|
||||
float weaponOffsetTime;
|
||||
float weaponOffsetScale;
|
||||
|
||||
// General
|
||||
idStr icon;
|
||||
bool isStrogg;
|
||||
|
||||
bool forceGUIReload;
|
||||
|
||||
public:
|
||||
|
||||
idDict spawnArgs;
|
||||
|
||||
protected:
|
||||
|
||||
idEntityPtr<rvViewWeapon> viewModel;
|
||||
idAnimator* viewAnimator;
|
||||
idEntityPtr<idAnimatedEntity> worldModel;
|
||||
idAnimator* worldAnimator;
|
||||
const idDeclEntityDef* weaponDef;
|
||||
idScriptObject* scriptObject;
|
||||
idPlayer * owner;
|
||||
int weaponIndex;
|
||||
int mods;
|
||||
|
||||
float viewModelForeshorten;
|
||||
|
||||
rvStateThread stateThread;
|
||||
int animDoneTime[ANIM_NumAnimChannels];
|
||||
|
||||
private:
|
||||
|
||||
stateResult_t State_Raise ( const stateParms_t& parms );
|
||||
stateResult_t State_Lower ( const stateParms_t& parms );
|
||||
stateResult_t State_ExitCinematic ( const stateParms_t& parms );
|
||||
stateResult_t State_NetCatchup ( const stateParms_t& parms );
|
||||
|
||||
stateResult_t Frame_EjectBrass ( const stateParms_t& parms );
|
||||
|
||||
// store weapon index information for death messages
|
||||
int methodOfDeath;
|
||||
|
||||
// multiplayer hitscans
|
||||
int hitscanAttackDef;
|
||||
|
||||
CLASS_STATES_PROTOTYPE ( rvWeapon );
|
||||
};
|
||||
|
||||
ID_INLINE rvViewWeapon* rvWeapon::GetViewModel ( void ) const {
|
||||
return viewModel.GetEntity();
|
||||
}
|
||||
|
||||
ID_INLINE idAnimatedEntity* rvWeapon::GetWorldModel ( void ) const {
|
||||
return worldModel;
|
||||
}
|
||||
|
||||
ID_INLINE idPlayer* rvWeapon::GetOwner ( void ) const {
|
||||
return owner;
|
||||
}
|
||||
|
||||
ID_INLINE const char* rvWeapon::GetIcon ( void ) const {
|
||||
return icon;
|
||||
}
|
||||
|
||||
ID_INLINE renderLight_t& rvWeapon::GetLight ( int light ) {
|
||||
assert ( light < WPLIGHT_MAX );
|
||||
return lights[light];
|
||||
}
|
||||
|
||||
ID_INLINE const idAngles& rvWeapon::GetViewModelAngles( void ) const {
|
||||
return viewModelAngles;
|
||||
}
|
||||
|
||||
ID_INLINE const idVec3& rvWeapon::GetViewModelOffset ( void ) const {
|
||||
return viewModelOffset;
|
||||
}
|
||||
|
||||
ID_INLINE int rvWeapon::GetZoomFov ( void ) const {
|
||||
return zoomFov;
|
||||
}
|
||||
|
||||
ID_INLINE idUserInterface* rvWeapon::GetZoomGui ( void ) const {
|
||||
return zoomGui;
|
||||
}
|
||||
|
||||
ID_INLINE float rvWeapon::GetZoomTime ( void ) const {
|
||||
return zoomTime;
|
||||
}
|
||||
|
||||
ID_INLINE int rvWeapon::GetMods ( void ) const {
|
||||
return mods;
|
||||
}
|
||||
|
||||
ID_INLINE void rvWeapon::PreSave ( void ) {
|
||||
}
|
||||
|
||||
ID_INLINE void rvWeapon::PostSave ( void ) {
|
||||
}
|
||||
|
||||
|
||||
#endif /* !__GAME_WEAPON_H__ */
|
||||
|
||||
// RAVEN END
|
||||
Reference in New Issue
Block a user