You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
102 lines
3.1 KiB
102 lines
3.1 KiB
//========= 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 |
|
|
|
|