quake4-sdk/source/mpgame/PlayerView.h

143 lines
4.1 KiB
C++

// RAVEN BEGIN
// bdube: note that this file is no longer merged with Doom3 updates
//
// MERGE_DATE 07/07/2004
#ifndef __GAME_PLAYERVIEW_H__
#define __GAME_PLAYERVIEW_H__
/*
===============================================================================
Player view.
===============================================================================
*/
// screenBlob_t are for the on-screen damage claw marks, etc
typedef struct {
const idMaterial * material;
float x, y, w, h;
float s1, t1, s2, t2;
int finishTime;
int startFadeTime;
float driftAmount;
} screenBlob_t;
#define MAX_SCREEN_BLOBS 8
class idPlayerView {
public:
idPlayerView();
void Save( idSaveGame *savefile ) const;
void Restore( idRestoreGame *savefile );
void SetPlayerEntity( class idPlayer *playerEnt );
void ClearEffects( void );
// RAVEN BEGIN
// jnewquist: Controller rumble
void DamageImpulse( idVec3 localKickDir, const idDict *damageDef, int damage );
// RAVEN END
void WeaponFireFeedback( const idDict *weaponDef );
idAngles AngleOffset( void ) const; // returns the current kick angle
// RAVEN BEGIN
// jnewquist: Controller rumble
float CalculateShake( idAngles &shakeAngleOffset ) const;
// RAVEN END
// RAVEN BEGIN
// jscott: for screen shake
void ShakeOffsets( idVec3 &shakeOffset, idAngles &shakeAngleOffset, const idBounds bounds ) const;
// RAVEN END
// adds little entities to the renderer for local blood blobs, etc
// this may involve rendering to a texture and displaying
// that with a warp model or in double vision mode
void RenderPlayerView( idUserInterface *hud );
void Fade( idVec4 color, int time );
void Flash( idVec4 color, int time );
void AddBloodSpray( float duration );
// temp for view testing
void EnableBFGVision( bool b ) { bfgVision = b; };
// RAVEN BEGIN
// jscott: accessors required for the fx system
void SetDoubleVisionParms( float time, float scale ) { dvFinishTime = SEC2MS( time ); dvScale = scale; }
void SetShakeParms( float time, float scale ) { shakeFinishTime = SEC2MS( time ); shakeScale = scale; }
void SetTunnelParms( float time, float scale ) { tvStartTime = gameLocal.time; tvFinishTime = tvStartTime + time; tvScale = 1.0f / scale; }
// RAVEN END
private:
// RAVEN BEGIN
// AReis: Modified SingleView() signature to include renderFlags variable.
void SingleView( idUserInterface *hud, const renderView_t *view, int renderFlags = RF_NORMAL );
// RAVEN END
void DoubleVision( idUserInterface *hud, const renderView_t *view, int offset );
void BerserkVision( idUserInterface *hud, const renderView_t *view );
void InfluenceVision( idUserInterface *hud, const renderView_t *view );
void ScreenFade();
screenBlob_t * GetScreenBlob();
screenBlob_t screenBlobs[MAX_SCREEN_BLOBS];
int dvFinishTime; // double vision will be stopped at this time
const idMaterial * dvMaterial; // material to take the double vision screen shot
// RAVEN BEGIN
// jscott: to make double vision work with alpha components
const idMaterial * dvMaterialBlend;
// jscott: for effects
float dvScale;
// RAVEN END
int kickFinishTime; // view kick will be stopped at this time
idAngles kickAngles;
bool bfgVision; //
const idMaterial * tunnelMaterial; // health tunnel vision
const idMaterial * armorMaterial; // armor damage view effect
// RAVEN BEGIN
// bdube: not using these
// const idMaterial * berserkMaterial; // berserk effect
// const idMaterial * irGogglesMaterial; // ir effect
const idMaterial * bloodSprayMaterial; // blood spray
// const idMaterial * bfgMaterial; // when targeted with BFG
// RAVEN END
float lastDamageTime; // accentuate the tunnel effect for a while
// RAVEN BEGIN
// jscott: for effects
float shakeFinishTime;
float shakeScale;
float tvScale;
int tvFinishTime;
int tvStartTime;
// RAVEN END
idVec4 fadeColor; // fade color
idVec4 fadeToColor; // color to fade to
idVec4 fadeFromColor; // color to fade from
float fadeRate; // fade rate
int fadeTime; // fade time
idPlayer * player;
renderView_t view;
};
#endif /* !__GAME_PLAYERVIEW_H__ */
// RAVEN END