This repository has been archived on 2024-06-13. You can view files and clone it, but cannot push or open issues or pull requests.
2020-08-04 13:13:01 -04:00

114 lines
4.0 KiB
C++

//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
// $NoKeywords: $
//=============================================================================//
#ifndef IMOVEHELPER_H
#define IMOVEHELPER_H
#ifdef _WIN32
#pragma once
#endif
#include "shareddefs.h"
//-----------------------------------------------------------------------------
// Forward declarations
//-----------------------------------------------------------------------------
enum PLAYER_ANIM;
class IPhysicsSurfaceProps;
class Vector;
struct model_t;
struct cmodel_t;
struct vcollide_t;
class CGameTrace;
enum soundlevel_t;
//-----------------------------------------------------------------------------
// Purpose: Identifies how submerged in water a player is.
//-----------------------------------------------------------------------------
enum { WL_NotInWater = 0, WL_Feet, WL_Waist, WL_Eyes };
//-----------------------------------------------------------------------------
// An entity identifier that works in both game + client dlls
//-----------------------------------------------------------------------------
typedef CBaseHandle EntityHandle_t;
#define INVALID_ENTITY_HANDLE INVALID_EHANDLE_INDEX
//-----------------------------------------------------------------------------
// Functions the engine provides to IGameMovement to assist in its movement.
//-----------------------------------------------------------------------------
abstract_class IMoveHelper {
public:
// Call this to set the singleton
static IMoveHelper* GetSingleton() { return sm_pSingleton; }
// Methods associated with a particular entity
virtual char const* GetName(EntityHandle_t handle) const = 0;
// Adds the trace result to touch list, if contact is not already in list.
virtual void ResetTouchList(void) = 0;
virtual bool AddToTouched(const CGameTrace& tr,
const Vector& impactvelocity) = 0;
virtual void ProcessImpacts(void) = 0;
// Numbered line printf
virtual void Con_NPrintf(int idx, PRINTF_FORMAT_STRING char const* fmt,
...) = 0;
// These have separate server vs client impementations
virtual void StartSound(const Vector& origin, int channel,
char const* sample, float volume,
soundlevel_t soundlevel, int fFlags, int pitch) = 0;
virtual void StartSound(const Vector& origin, const char* soundname) = 0;
virtual void PlaybackEventFull(
int flags, int clientindex, unsigned short eventindex, float delay,
Vector& origin, Vector& angles, float fparam1, float fparam2,
int iparam1, int iparam2, int bparam1, int bparam2) = 0;
// Apply falling damage to m_pHostPlayer based on
// m_pHostPlayer->m_flFallVelocity.
virtual bool PlayerFallingDamage(void) = 0;
// Apply falling damage to m_pHostPlayer based on
// m_pHostPlayer->m_flFallVelocity.
virtual void PlayerSetAnimation(PLAYER_ANIM playerAnim) = 0;
virtual IPhysicsSurfaceProps* GetSurfaceProps(void) = 0;
virtual bool IsWorldEntity(const CBaseHandle& handle) = 0;
protected:
// Inherited classes can call this to set the singleton
static void SetSingleton(IMoveHelper * pMoveHelper) {
sm_pSingleton = pMoveHelper;
}
// Clients shouldn't call delete directly
virtual ~IMoveHelper() {}
// The global instance
static IMoveHelper* sm_pSingleton;
};
//-----------------------------------------------------------------------------
// Add this to the CPP file that implements the IMoveHelper
//-----------------------------------------------------------------------------
#define IMPLEMENT_MOVEHELPER() IMoveHelper* IMoveHelper::sm_pSingleton = 0
//-----------------------------------------------------------------------------
// Call this to set the singleton
//-----------------------------------------------------------------------------
inline IMoveHelper* MoveHelper() { return IMoveHelper::GetSingleton(); }
#endif // IMOVEHELPER_H