Initial commit
This commit is contained in:
599
engines/hpl1/penumbra-overture/PlayerHelper.h
Normal file
599
engines/hpl1/penumbra-overture/PlayerHelper.h
Normal file
@@ -0,0 +1,599 @@
|
||||
/* ScummVM - Graphic Adventure Engine
|
||||
*
|
||||
* ScummVM is the legal property of its developers, whose names
|
||||
* are too numerous to list here. Please refer to the COPYRIGHT
|
||||
* file distributed with this source distribution.
|
||||
*
|
||||
* This program 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.
|
||||
*
|
||||
* This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (C) 2006-2010 - Frictional Games
|
||||
*
|
||||
* This file is part of Penumbra Overture.
|
||||
*/
|
||||
|
||||
#ifndef GAME_PLAYER_HELPER_H
|
||||
#define GAME_PLAYER_HELPER_H
|
||||
|
||||
#include "hpl1/engine/engine.h"
|
||||
|
||||
using namespace hpl;
|
||||
|
||||
#include "hpl1/penumbra-overture/GameTypes.h"
|
||||
|
||||
class cInit;
|
||||
class cPlayer;
|
||||
|
||||
//---------------------------------------------
|
||||
|
||||
class iPlayerWeaponCallback {
|
||||
public:
|
||||
virtual ~iPlayerWeaponCallback() = default;
|
||||
virtual tString GetModelFile() = 0;
|
||||
virtual cMatrixf GetOffsetMatrix() = 0;
|
||||
|
||||
virtual void OnAttackDown() = 0;
|
||||
virtual void OnAttackUp() = 0;
|
||||
};
|
||||
|
||||
//---------------------------------------------
|
||||
|
||||
class cPlayerGroundRayCallback : public iPhysicsRayCallback {
|
||||
public:
|
||||
cPlayerGroundRayCallback();
|
||||
|
||||
void Clear();
|
||||
void Reset();
|
||||
|
||||
void OnWorldExit();
|
||||
|
||||
bool OnIntersect(iPhysicsBody *pBody, cPhysicsRayParams *apParams);
|
||||
|
||||
bool mbOnGround;
|
||||
iPhysicsMaterial *mpMaterial;
|
||||
float mfMinDist;
|
||||
};
|
||||
|
||||
//---------------------------------------------
|
||||
|
||||
class cPlayerPickRayCallback : public iPhysicsRayCallback {
|
||||
public:
|
||||
cPlayerPickRayCallback();
|
||||
|
||||
void OnWorldExit();
|
||||
|
||||
void Clear();
|
||||
|
||||
bool OnIntersect(iPhysicsBody *pBody, cPhysicsRayParams *apParams);
|
||||
|
||||
void CalculateResults();
|
||||
|
||||
iPhysicsBody *mpPickedBody;
|
||||
iPhysicsBody *mpPickedAreaBody;
|
||||
|
||||
float mfMaxDistance;
|
||||
|
||||
float mfPickedDist;
|
||||
float mfPickedAreaDist;
|
||||
|
||||
eGameEntityType mLastEntityType;
|
||||
|
||||
cVector3f mvPickedPos;
|
||||
cVector3f mvPickedAreaPos;
|
||||
|
||||
float mfMinStaticDist;
|
||||
};
|
||||
|
||||
//---------------------------------------------
|
||||
|
||||
class cPlayerHeadMove {
|
||||
public:
|
||||
cPlayerHeadMove(cPlayer *apPlayer);
|
||||
|
||||
void Update(float afTimeStep);
|
||||
|
||||
void Start();
|
||||
void Stop();
|
||||
|
||||
float GetPos();
|
||||
|
||||
bool IsActive() { return mbActive; }
|
||||
float GetPosition() { return mfPos; }
|
||||
float GetClimbPosition() { return mfClimbPos; }
|
||||
float GetClimbCount() { return mfClimbCount; }
|
||||
|
||||
float mfMaxHeadMove;
|
||||
float mfMinHeadMove;
|
||||
float mfHeadMoveSpeed;
|
||||
float mfHeadMoveBackSpeed;
|
||||
|
||||
float mfFootStepMul;
|
||||
|
||||
private:
|
||||
float mfAdd;
|
||||
float mfPos;
|
||||
bool mbActive;
|
||||
bool mbFootStepped;
|
||||
bool mbWasActive;
|
||||
|
||||
float mfClimbCount;
|
||||
float mfClimbPos;
|
||||
|
||||
cPlayer *mpPlayer;
|
||||
};
|
||||
|
||||
//---------------------------------------------
|
||||
|
||||
class cPlayerHealth {
|
||||
public:
|
||||
cPlayerHealth(cInit *apInit);
|
||||
|
||||
void Reset();
|
||||
|
||||
void Update(float afTimeStep);
|
||||
|
||||
void Draw();
|
||||
|
||||
private:
|
||||
cInit *mpInit;
|
||||
cGraphicsDrawer *mpDrawer;
|
||||
|
||||
float mfTimeCount;
|
||||
float mfGfxAlpha;
|
||||
float mfGfxAlphaAdd;
|
||||
float mfGfxGlobalAlpha;
|
||||
|
||||
cSoundEntry *mpSoundEntry;
|
||||
float mfTerrorCheckCount;
|
||||
int mlTerrorLevel;
|
||||
|
||||
cGfxObject *mpDamageGfx;
|
||||
};
|
||||
|
||||
//---------------------------------------------
|
||||
|
||||
class cPlayerEarRing {
|
||||
public:
|
||||
cPlayerEarRing(cInit *apInit, cPlayer *apPlayer);
|
||||
|
||||
void Update(float afTimeStep);
|
||||
|
||||
void Start(float afTime);
|
||||
void Stop(bool abStopDirectly);
|
||||
|
||||
void Reset();
|
||||
|
||||
private:
|
||||
cInit *mpInit;
|
||||
cPlayer *mpPlayer;
|
||||
|
||||
cSoundEntry *mpSoundEntry;
|
||||
|
||||
float mfTimeCount;
|
||||
float mfDeafTime;
|
||||
bool mbDeaf;
|
||||
};
|
||||
|
||||
//---------------------------------------------
|
||||
|
||||
class cPlayerLean : public iPhysicsRayCallback {
|
||||
public:
|
||||
cPlayerLean(cInit *apInit, cPlayer *apPlayer);
|
||||
|
||||
void OnWorldLoad();
|
||||
|
||||
void Update(float afTimeStep);
|
||||
|
||||
void Lean(float afMul, float afTimeStep);
|
||||
|
||||
bool OnIntersect(iPhysicsBody *pBody, cPhysicsRayParams *apParams);
|
||||
|
||||
void Reset();
|
||||
|
||||
float mfDir;
|
||||
float mfMovement;
|
||||
float mfRotation;
|
||||
|
||||
private:
|
||||
cPlayer *mpPlayer;
|
||||
cInit *mpInit;
|
||||
|
||||
iCollideShape *mpHeadShape;
|
||||
|
||||
float mfMaxMovement;
|
||||
float mfMaxRotation;
|
||||
float mfMaxTime;
|
||||
|
||||
float mfMoveSpeed;
|
||||
|
||||
bool mbIntersect;
|
||||
|
||||
bool mbPressed;
|
||||
};
|
||||
|
||||
//---------------------------------------------
|
||||
|
||||
class cPlayerDamage {
|
||||
public:
|
||||
cPlayerDamage(cInit *apInit);
|
||||
~cPlayerDamage();
|
||||
|
||||
void Start(float afSize, ePlayerDamageType aType);
|
||||
|
||||
void Update(float afTimeStep);
|
||||
|
||||
void Draw();
|
||||
|
||||
private:
|
||||
bool mbActive;
|
||||
|
||||
float mfAlpha;
|
||||
float mfAlphaAdd;
|
||||
|
||||
cVector2f mvHeadSwingAcc;
|
||||
cVector2f mvHeadSwingSpeed;
|
||||
|
||||
float mfSize;
|
||||
|
||||
cGfxObject *mvHitGfx[ePlayerDamageType_LastEnum];
|
||||
|
||||
ePlayerDamageType mType;
|
||||
|
||||
cInit *mpInit;
|
||||
cGraphicsDrawer *mpDrawer;
|
||||
cRendererPostEffects *mpPostEffects;
|
||||
};
|
||||
|
||||
//---------------------------------------------
|
||||
|
||||
class cPlayerDeath {
|
||||
public:
|
||||
cPlayerDeath(cInit *apInit);
|
||||
~cPlayerDeath();
|
||||
|
||||
void Reset();
|
||||
|
||||
void Start();
|
||||
|
||||
void Update(float afTimeStep);
|
||||
|
||||
void Draw();
|
||||
|
||||
bool IsActive() { return mbActive; }
|
||||
|
||||
float GetHeighAdd() { return mfHeightAdd; }
|
||||
|
||||
private:
|
||||
bool mbActive;
|
||||
|
||||
float mfHeightAdd;
|
||||
float mfRoll;
|
||||
|
||||
float mfMinHeightAdd;
|
||||
|
||||
cGfxObject *mpFadeGfx;
|
||||
cGfxObject *mpBlackGfx;
|
||||
|
||||
bool mbStartFade;
|
||||
float mfFadeAlpha;
|
||||
float mfBlackAlpha;
|
||||
|
||||
cInit *mpInit;
|
||||
cGraphicsDrawer *mpDrawer;
|
||||
cRendererPostEffects *mpPostEffects;
|
||||
};
|
||||
|
||||
//---------------------------------------------
|
||||
|
||||
class cPlayerFlashLight : iPhysicsRayCallback {
|
||||
public:
|
||||
cPlayerFlashLight(cInit *apInit);
|
||||
~cPlayerFlashLight();
|
||||
|
||||
void Reset();
|
||||
|
||||
bool OnIntersect(iPhysicsBody *pBody, cPhysicsRayParams *apParams);
|
||||
|
||||
void OnWorldLoad();
|
||||
|
||||
void Update(float afTimeStep);
|
||||
|
||||
void SetActive(bool abX);
|
||||
bool IsActive() { return mbActive; }
|
||||
|
||||
void SetDisabled(bool abX);
|
||||
bool IsDisabled() { return mbDisabled; }
|
||||
|
||||
void OnPostSceneDraw();
|
||||
|
||||
private:
|
||||
bool mbActive;
|
||||
|
||||
bool mbDisabled;
|
||||
|
||||
float mfAlpha;
|
||||
|
||||
float mfFlickerTime;
|
||||
|
||||
float mfRayCastTime;
|
||||
float mfClosestDist;
|
||||
iPhysicsBody *mpClosestBody;
|
||||
|
||||
// iTexture *mpTextureCache;
|
||||
|
||||
cInit *mpInit;
|
||||
|
||||
cVector3f mvStart;
|
||||
cVector3f mvEnd;
|
||||
};
|
||||
|
||||
//---------------------------------------------
|
||||
|
||||
class cPlayerGlowStick {
|
||||
public:
|
||||
cPlayerGlowStick(cInit *apInit);
|
||||
~cPlayerGlowStick();
|
||||
|
||||
void Reset();
|
||||
|
||||
void OnWorldLoad();
|
||||
void Destroy();
|
||||
|
||||
void Update(float afTimeStep);
|
||||
|
||||
void SetActive(bool abX);
|
||||
bool IsActive() { return mbActive; }
|
||||
|
||||
private:
|
||||
bool mbActive;
|
||||
|
||||
cInit *mpInit;
|
||||
};
|
||||
|
||||
//---------------------------------------------
|
||||
|
||||
class iHudModel;
|
||||
class cPlayerFlare {
|
||||
public:
|
||||
cPlayerFlare(cInit *apInit);
|
||||
~cPlayerFlare();
|
||||
|
||||
void Reset();
|
||||
|
||||
void OnWorldLoad();
|
||||
|
||||
void Update(float afTimeStep);
|
||||
|
||||
void SetActive(bool abX);
|
||||
bool IsActive() { return mbActive; }
|
||||
|
||||
float GetTime() { return mfTime; }
|
||||
void SetTime(float afX) { mfTime = afX; }
|
||||
|
||||
private:
|
||||
bool mbActive;
|
||||
|
||||
float mfTime;
|
||||
|
||||
iLight3D *mpLight;
|
||||
iHudModel *mpModel;
|
||||
|
||||
float mfMaxLightRadius;
|
||||
float mfLightRadius;
|
||||
float mfLightPulse;
|
||||
float mfLightPulseAdd;
|
||||
|
||||
cInit *mpInit;
|
||||
};
|
||||
|
||||
//---------------------------------------------
|
||||
|
||||
class cPlayerNoiseFilter {
|
||||
public:
|
||||
cPlayerNoiseFilter(cInit *apInit);
|
||||
~cPlayerNoiseFilter();
|
||||
|
||||
void Draw();
|
||||
|
||||
void Update(float afTimeStep);
|
||||
|
||||
void SetActive(bool abX);
|
||||
bool IsActive() { return mbActive; }
|
||||
|
||||
private:
|
||||
bool mbActive;
|
||||
|
||||
float mfAlpha;
|
||||
float mfTimeCount;
|
||||
|
||||
int mlAmount;
|
||||
|
||||
// cLight3DPoint *mpLight;
|
||||
// cMeshEntity *mpMeshEntity;
|
||||
|
||||
cInit *mpInit;
|
||||
cGraphicsDrawer *mpDrawer;
|
||||
|
||||
Common::Array<cGfxObject *> mvGfxNoise;
|
||||
tIntVec mvCurrentGfx;
|
||||
};
|
||||
|
||||
//---------------------------------------------
|
||||
|
||||
class cPlayerFearFilter {
|
||||
public:
|
||||
cPlayerFearFilter(cInit *apInit);
|
||||
~cPlayerFearFilter();
|
||||
|
||||
void Draw();
|
||||
|
||||
void Update(float afTimeStep);
|
||||
|
||||
void Reset();
|
||||
|
||||
void SetActive(bool abX);
|
||||
bool IsActive() { return mbActive; }
|
||||
|
||||
private:
|
||||
bool mbActive;
|
||||
|
||||
float mfAlpha;
|
||||
float mfMaxAlpha;
|
||||
|
||||
cInit *mpInit;
|
||||
};
|
||||
|
||||
//---------------------------------------------
|
||||
|
||||
class cPlayerLookAt {
|
||||
public:
|
||||
cPlayerLookAt(cPlayer *apPlayer);
|
||||
~cPlayerLookAt();
|
||||
|
||||
void Update(float afTimeStep);
|
||||
|
||||
void Reset();
|
||||
|
||||
void SetTarget(const cVector3f &avTargetPos, float afSpeedMul, float afMaxSpeed);
|
||||
|
||||
void SetActive(bool abX);
|
||||
bool IsActive() { return mbActive; }
|
||||
|
||||
private:
|
||||
bool mbActive;
|
||||
cVector3f mvTargetPos;
|
||||
|
||||
float mfSpeedMul;
|
||||
float mfMaxSpeed;
|
||||
|
||||
cPlayer *mpPlayer;
|
||||
};
|
||||
|
||||
//---------------------------------------------
|
||||
|
||||
class cPlayerHidden : public iPhysicsRayCallback {
|
||||
public:
|
||||
cPlayerHidden(cInit *apInit);
|
||||
~cPlayerHidden();
|
||||
|
||||
void Draw();
|
||||
|
||||
void Update(float afTimeStep);
|
||||
|
||||
void Reset();
|
||||
|
||||
void OnWorldLoad();
|
||||
void OnWorldExit();
|
||||
|
||||
bool InShadows();
|
||||
bool IsHidden() { return mbHidden; }
|
||||
void UnHide();
|
||||
|
||||
bool OnIntersect(iPhysicsBody *pBody, cPhysicsRayParams *apParams);
|
||||
|
||||
bool HasLineOfSight(iLight3D *pLight, iPhysicsWorld *pPhysicsWorld);
|
||||
|
||||
private:
|
||||
void UpdateEnemyTooClose(float afTimeStep);
|
||||
|
||||
cInit *mpInit;
|
||||
cRenderer3D *mpRenderer;
|
||||
cGraphicsDrawer *mpDrawer;
|
||||
cSoundHandler *mpSoundHandler;
|
||||
|
||||
cGfxObject *mpInShadowGfx;
|
||||
|
||||
iLight3D *mpLight;
|
||||
|
||||
float mfInShadowAlpha;
|
||||
float mfInShadowPulse;
|
||||
float mfInShadowPulseAdd;
|
||||
|
||||
float mfStartAspect;
|
||||
float mfHiddenAspect;
|
||||
float mfAspect;
|
||||
float mfAspectAdd;
|
||||
|
||||
float mfStartFov;
|
||||
float mfHiddenFov;
|
||||
float mfFov;
|
||||
float mfFovAdd;
|
||||
|
||||
float mfStartEffectOffset;
|
||||
float mfHiddenEffectOffset;
|
||||
float mfEffectOffset;
|
||||
float mfEffectOffsetAdd;
|
||||
|
||||
float mfHiddenOnTime;
|
||||
float mfHiddenOffTime;
|
||||
|
||||
float mfCheckEnemyCloseCount;
|
||||
float mfEnemyTooCloseCount;
|
||||
float mfEnemyTooCloseMax;
|
||||
bool mbEnemyTooClose;
|
||||
|
||||
float mfCloseEffectFov;
|
||||
float mfCloseEffectFovAdd;
|
||||
float mfCloseEffectFovMax;
|
||||
float mfCloseEffectFovMin;
|
||||
|
||||
float mbInShadows;
|
||||
|
||||
float mfUpdateCount;
|
||||
|
||||
float mfLight;
|
||||
float mfMaxLight;
|
||||
|
||||
float mfHiddenCount;
|
||||
float mfHiddenTime;
|
||||
bool mbHidden;
|
||||
float mfHiddenOnCount;
|
||||
|
||||
bool mbIntersected;
|
||||
|
||||
FontData *mpFont;
|
||||
};
|
||||
|
||||
//---------------------------------------------
|
||||
|
||||
class cPlayerBodyCallback : public iCharacterBodyCallback {
|
||||
public:
|
||||
cPlayerBodyCallback(cPlayer *apPlayer);
|
||||
virtual ~cPlayerBodyCallback() = default;
|
||||
|
||||
void OnHitGround(iCharacterBody *apCharBody, const cVector3f &avVel);
|
||||
void OnGravityCollide(iCharacterBody *apCharBody, iPhysicsBody *apCollideBody,
|
||||
cCollideData *apCollideData) {}
|
||||
|
||||
private:
|
||||
cPlayer *mpPlayer;
|
||||
|
||||
float mfFallSpeed_Min;
|
||||
float mfFallDamage_Min;
|
||||
tString msFallSound_Min;
|
||||
|
||||
float mfFallSpeed_Med;
|
||||
float mfFallDamage_Med;
|
||||
tString msFallSound_Med;
|
||||
|
||||
float mfFallSpeed_Max;
|
||||
float mfFallDamage_Max;
|
||||
tString msFallSound_Max;
|
||||
};
|
||||
|
||||
//---------------------------------------------
|
||||
|
||||
#endif // GAME_PLAYER_HELPER_H
|
||||
Reference in New Issue
Block a user