1
This commit is contained in:
102
game/server/func_breakablesurf.h
Normal file
102
game/server/func_breakablesurf.h
Normal file
@ -0,0 +1,102 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// Purpose:
|
||||
//
|
||||
// $NoKeywords: $
|
||||
//=============================================================================//
|
||||
|
||||
#ifndef FUNC_BREAKABLESURF_H
|
||||
#define FUNC_BREAKABLESURF_H
|
||||
#ifdef _WIN32
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
|
||||
#define MAX_NUM_PANELS 16 //Must match client
|
||||
|
||||
#include "func_break.h"
|
||||
|
||||
//#############################################################################
|
||||
// > CWindowPane
|
||||
//
|
||||
// A piece that falls out of the window
|
||||
//#############################################################################
|
||||
class CWindowPane : public CBaseAnimating
|
||||
{
|
||||
public:
|
||||
DECLARE_CLASS( CWindowPane, CBaseAnimating );
|
||||
|
||||
static CWindowPane* CreateWindowPane( const Vector &vecOrigin, const QAngle &vecAngles );
|
||||
|
||||
void Spawn( void );
|
||||
void Precache( void );
|
||||
void PaneTouch( CBaseEntity *pOther );
|
||||
void Die( void );
|
||||
DECLARE_DATADESC();
|
||||
};
|
||||
|
||||
//#############################################################################
|
||||
// > CBreakableSurface
|
||||
//
|
||||
// A breakable surface
|
||||
//#############################################################################
|
||||
class CBreakableSurface : public CBreakable
|
||||
{
|
||||
DECLARE_CLASS( CBreakableSurface, CBreakable );
|
||||
DECLARE_DATADESC();
|
||||
DECLARE_SERVERCLASS();
|
||||
|
||||
public:
|
||||
CNetworkVar( int, m_nNumWide );
|
||||
CNetworkVar( int, m_nNumHigh );
|
||||
CNetworkVar( float, m_flPanelWidth );
|
||||
CNetworkVar( float, m_flPanelHeight );
|
||||
CNetworkVector( m_vNormal );
|
||||
CNetworkVector( m_vCorner );
|
||||
CNetworkVar( bool, m_bIsBroken );
|
||||
CNetworkVar( ShatterSurface_t, m_nSurfaceType );
|
||||
int m_nNumBrokenPanes;
|
||||
float m_flSupport[MAX_NUM_PANELS][MAX_NUM_PANELS]; //UNDONE: allocate dynamically?
|
||||
|
||||
int m_nFragility;
|
||||
Vector m_vLLVertex;
|
||||
Vector m_vULVertex;
|
||||
Vector m_vLRVertex;
|
||||
Vector m_vURVertex;
|
||||
int m_nQuadError;
|
||||
|
||||
void SurfaceTouch( CBaseEntity *pOther );
|
||||
void PanePos(const Vector &vPos, float *flWidth, float *flHeight);
|
||||
|
||||
bool IsBroken(int nWidth, int nHeight);
|
||||
void SetSupport(int w, int h, float support);
|
||||
|
||||
float GetSupport(int nWidth, int nHeight);
|
||||
float RecalcSupport(int nWidth, int nHeight);
|
||||
|
||||
void BreakPane(int nWidth, int nHeight);
|
||||
void DropPane(int nWidth, int nHeight);
|
||||
bool ShatterPane(int nWidth, int nHeight, const Vector &force, const Vector &vForcePos);
|
||||
void BreakAllPanes(void);
|
||||
|
||||
void CreateShards(const Vector &vBreakPos, const QAngle &vAngles,
|
||||
const Vector &vForce, const Vector &vForcePos,
|
||||
float flWidth, float flHeight,
|
||||
int nShardSize);
|
||||
|
||||
void Spawn(void);
|
||||
void Precache(void);
|
||||
void Die( CBaseEntity *pBreaker, const Vector &vAttackDir );
|
||||
void BreakThink(void);
|
||||
void Event_Killed( CBaseEntity *pInflictor, CBaseEntity *pAttacker, float flDamage, int bitsDamageType );
|
||||
void TraceAttack( const CTakeDamageInfo &info, const Vector &vecDir, trace_t *ptr, CDmgAccumulator *pAccumulator );
|
||||
int OnTakeDamage( const CTakeDamageInfo &info );
|
||||
void InputShatter( inputdata_t &inputdata );
|
||||
void VPhysicsCollision( int index, gamevcollisionevent_t *pEvent );
|
||||
private:
|
||||
// One bit per pane
|
||||
CNetworkArray( bool, m_RawPanelBitVec, MAX_NUM_PANELS * MAX_NUM_PANELS );
|
||||
};
|
||||
|
||||
#endif // FUNC_BREAKABLESURF_H
|
||||
|
Reference in New Issue
Block a user