mirror of
https://github.com/nillerusr/source-engine.git
synced 2026-08-17 22:11:58 +00:00
1
This commit is contained in:
@@ -0,0 +1,179 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// Purpose:
|
||||
//
|
||||
// $NoKeywords: $
|
||||
//=============================================================================//
|
||||
|
||||
#ifndef NPC_HYDRA_H
|
||||
#define NPC_HYDRA_H
|
||||
|
||||
#if defined( _WIN32 )
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
#include "ai_basenpc.h"
|
||||
#include "soundenvelope.h"
|
||||
|
||||
class CNPC_Hydra;
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// CNPC_Hydra
|
||||
//
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
class HydraBone
|
||||
{
|
||||
public:
|
||||
HydraBone( void )
|
||||
{
|
||||
vecPos = Vector( 0, 0, 0 );
|
||||
vecDelta = Vector( 0, 0, 0 );
|
||||
//vecBendDelta = Vector( 0, 0, 0 );
|
||||
//vecGoalDelta = Vector( 0, 0, 0 );
|
||||
//flBendTension = 0.0;
|
||||
flIdealLength = 1.0;
|
||||
flGoalInfluence = 0.0;
|
||||
bStuck = false;
|
||||
bOnFire = false;
|
||||
};
|
||||
|
||||
Vector vecPos;
|
||||
Vector vecDelta;
|
||||
//float flBendTension;
|
||||
float flIdealLength;
|
||||
bool bStuck;
|
||||
bool bOnFire;
|
||||
|
||||
float flActualLength;
|
||||
//Vector vecBendDelta;
|
||||
//Vector vecGoalDelta;
|
||||
// float flAccumLength;
|
||||
|
||||
Vector vecGoalPos;
|
||||
float flGoalInfluence;
|
||||
|
||||
DECLARE_SIMPLE_DATADESC();
|
||||
};
|
||||
|
||||
class CNPC_Hydra : public CAI_BaseNPC
|
||||
{
|
||||
DECLARE_CLASS( CNPC_Hydra, CAI_BaseNPC );
|
||||
DECLARE_SERVERCLASS();
|
||||
DECLARE_DATADESC();
|
||||
|
||||
public:
|
||||
CNPC_Hydra()
|
||||
{
|
||||
}
|
||||
|
||||
void Spawn( void );
|
||||
void Precache( void );
|
||||
void Activate( void );
|
||||
|
||||
Class_T Classify( void );
|
||||
|
||||
void RunAI( void );
|
||||
|
||||
float MaxYawSpeed( void );
|
||||
int TranslateSchedule( int scheduleType );
|
||||
int SelectSchedule( void );
|
||||
|
||||
void PrescheduleThink( void );
|
||||
|
||||
void HandleAnimEvent( animevent_t *pEvent );
|
||||
|
||||
void StartTask( const Task_t *pTask );
|
||||
void RunTask( const Task_t *pTask );
|
||||
|
||||
#define CHAIN_LINKS 32
|
||||
|
||||
CNetworkArray( Vector, m_vecChain, CHAIN_LINKS );
|
||||
int m_activeChain;
|
||||
|
||||
bool m_bHasStuckSegments;
|
||||
float m_flCurrentLength;
|
||||
|
||||
Vector m_vecHeadGoal;
|
||||
float m_flHeadGoalInfluence;
|
||||
CNetworkVector( m_vecHeadDir );
|
||||
|
||||
CNetworkVar( float, m_flRelaxedLength );
|
||||
|
||||
Vector m_vecOutward;
|
||||
|
||||
CUtlVector < HydraBone > m_body;
|
||||
|
||||
float m_idealLength;
|
||||
float m_idealSegmentLength;
|
||||
|
||||
Vector TestPosition( float t );
|
||||
|
||||
void CalcGoalForces( void );
|
||||
void MoveBody( void );
|
||||
|
||||
void AdjustLength( void );
|
||||
void CheckLength( void );
|
||||
|
||||
bool m_bExtendSoundActive;
|
||||
CSoundPatch *m_pExtendTentacleSound;
|
||||
|
||||
void Nudge( CBaseEntity *pHitEntity, const Vector &vecContact, const Vector &vecSpeed );
|
||||
void Stab( CBaseEntity *pHitEntity, const Vector &vecSpeed, trace_t &ptr );
|
||||
void Kick( CBaseEntity *pHitEntity, const Vector &vecContact, const Vector &vecSpeed );
|
||||
void Splash( const Vector &vecSplashPos );
|
||||
|
||||
// float FreeNeckLength( void );
|
||||
|
||||
virtual Vector EyePosition( void );
|
||||
virtual const QAngle &EyeAngles( void );
|
||||
|
||||
virtual Vector BodyTarget( const Vector &posSrc, bool bNoisy) ;
|
||||
|
||||
void AimHeadInTravelDirection( float flInfluence );
|
||||
|
||||
float m_seed;
|
||||
|
||||
// --------------------------------
|
||||
Vector m_vecTarget;
|
||||
Vector m_vecTargetDir;
|
||||
|
||||
float m_flLastAdjustmentTime;
|
||||
float m_flTaskStartTime;
|
||||
float m_flTaskEndTime;
|
||||
|
||||
float m_flLengthTime; // time of last successful length adjustment time
|
||||
|
||||
// --------------------------------
|
||||
|
||||
bool ContractFromHead( void );
|
||||
bool ContractBetweenStuckSegments( void );
|
||||
bool ContractFromRoot( void );
|
||||
|
||||
int VirtualRoot( void );
|
||||
|
||||
bool AddNodeBefore( int iNode );
|
||||
bool AddNodeAfter( int iNode );
|
||||
|
||||
bool GrowFromVirtualRoot( void );
|
||||
bool GrowFromMostStretched( void );
|
||||
|
||||
void CalcRelaxedLength( void );
|
||||
|
||||
bool IsValidConnection( int iNode0, int iNode1 );
|
||||
|
||||
void AttachStabbedEntity( CBaseAnimating *pAnimating, Vector vecForce, trace_t &tr );
|
||||
void UpdateStabbedEntity( void );
|
||||
void DetachStabbedEntity( bool playSound );
|
||||
void GetDesiredImpaledPosition( Vector *vecOrigin, QAngle *vecAngles );
|
||||
|
||||
bool m_bStabbedEntity;
|
||||
|
||||
DEFINE_CUSTOM_AI;
|
||||
|
||||
private:
|
||||
};
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
#endif // NPC_HYDRA_H
|
||||
Reference in New Issue
Block a user