diff options
| author | Joe Ludwig <[email protected]> | 2013-06-26 15:22:04 -0700 |
|---|---|---|
| committer | Joe Ludwig <[email protected]> | 2013-06-26 15:22:04 -0700 |
| commit | 39ed87570bdb2f86969d4be821c94b722dc71179 (patch) | |
| tree | abc53757f75f40c80278e87650ea92808274aa59 /sp/src/game/server/hl2/npc_fisherman.cpp | |
| download | source-sdk-2013-39ed87570bdb2f86969d4be821c94b722dc71179.tar.xz source-sdk-2013-39ed87570bdb2f86969d4be821c94b722dc71179.zip | |
First version of the SOurce SDK 2013
Diffstat (limited to 'sp/src/game/server/hl2/npc_fisherman.cpp')
| -rw-r--r-- | sp/src/game/server/hl2/npc_fisherman.cpp | 245 |
1 files changed, 245 insertions, 0 deletions
diff --git a/sp/src/game/server/hl2/npc_fisherman.cpp b/sp/src/game/server/hl2/npc_fisherman.cpp new file mode 100644 index 00000000..259459a6 --- /dev/null +++ b/sp/src/game/server/hl2/npc_fisherman.cpp @@ -0,0 +1,245 @@ +//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+//=============================================================================//
+
+#include "cbase.h"
+#include "ai_default.h"
+#include "ai_task.h"
+#include "ai_schedule.h"
+#include "ai_node.h"
+#include "ai_hull.h"
+#include "ai_hint.h"
+#include "ai_squad.h"
+#include "ai_senses.h"
+#include "ai_navigator.h"
+#include "ai_motor.h"
+#include "ai_behavior.h"
+#include "ai_baseactor.h"
+#include "ai_behavior_lead.h"
+#include "ai_behavior_follow.h"
+#include "ai_behavior_standoff.h"
+#include "ai_behavior_assault.h"
+#include "npc_playercompanion.h"
+#include "soundent.h"
+#include "game.h"
+#include "npcevent.h"
+#include "entitylist.h"
+#include "activitylist.h"
+#include "vstdlib/random.h"
+#include "engine/IEngineSound.h"
+#include "sceneentity.h"
+
+// memdbgon must be the last include file in a .cpp file!!!
+#include "tier0/memdbgon.h"
+
+#define FISHERMAN_MODEL "models/lostcoast/fisherman/fisherman.mdl"
+
+//=========================================================
+// Fisherman activities
+//=========================================================
+
+Activity ACT_FISHERMAN_HAT_UP;
+Activity ACT_FISHERMAN_HAT_DOWN;
+
+//=========================================================
+// animation events
+//=========================================================
+int AE_FISHERMAN_HAT_UP;
+int AE_FISHERMAN_HAT_DOWN;
+int AE_FISHERMAN_HAT_ON;
+int AE_FISHERMAN_HAT_OFF;
+
+//---------------------------------------------------------
+//
+//---------------------------------------------------------
+
+class CNPC_Fisherman : public CNPC_PlayerCompanion
+{
+public:
+ DECLARE_CLASS( CNPC_Fisherman, CNPC_PlayerCompanion );
+ //DECLARE_SERVERCLASS();
+ DECLARE_DATADESC();
+
+ virtual void Precache()
+ {
+ // Prevents a warning
+ SelectModel( );
+ BaseClass::Precache();
+
+ PrecacheScriptSound( "NPC_Fisherman.FootstepLeft" );
+ PrecacheScriptSound( "NPC_Fisherman.FootstepRight" );
+ PrecacheScriptSound( "NPC_Fisherman.Die" );
+
+ PrecacheInstancedScene( "scenes/Expressions/FishermanIdle.vcd" );
+ PrecacheInstancedScene( "scenes/Expressions/FishermanAlert.vcd" );
+ PrecacheInstancedScene( "scenes/Expressions/FishermanCombat.vcd" );
+ }
+
+ virtual void Activate()
+ {
+ BaseClass::Activate();
+
+ if (m_iHatState == -1)
+ {
+ m_iHatState = ACT_FISHERMAN_HAT_DOWN;
+ }
+
+ // allocate layer, start with the hat down
+ m_iHatLayer = AddGesture( (Activity)m_iHatState, false );
+ }
+
+ void Spawn( void );
+ void SelectModel();
+ Class_T Classify( void );
+
+ void HandleAnimEvent( animevent_t *pEvent );
+
+ bool ShouldLookForBetterWeapon() { return false; }
+ virtual bool IgnorePlayerPushing( void ) { return true; }
+ void DeathSound( const CTakeDamageInfo &info );
+
+ int m_iHatLayer; // overlay layer for hat, don't save/restore.
+ int m_iHatState; // hat state, persistant.
+
+ DEFINE_CUSTOM_AI;
+};
+
+LINK_ENTITY_TO_CLASS( npc_fisherman, CNPC_Fisherman );
+
+//---------------------------------------------------------
+//
+//---------------------------------------------------------
+/*
+IMPLEMENT_SERVERCLASS_ST(CNPC_Fisherman, DT_NPC_Fisherman)
+END_SEND_TABLE()
+*/
+
+//---------------------------------------------------------
+// Save/Restore
+//---------------------------------------------------------
+BEGIN_DATADESC( CNPC_Fisherman )
+
+ // DEFINE_FIELD( m_iHatLayer, FIELD_INT ),
+ DEFINE_FIELD( m_iHatState, FIELD_INTEGER ),
+
+END_DATADESC()
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CNPC_Fisherman::SelectModel()
+{
+ SetModelName( AllocPooledString( FISHERMAN_MODEL ) );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CNPC_Fisherman::Spawn( void )
+{
+ m_iHatLayer = -1;
+ m_iHatState = -1;
+
+ Precache();
+
+ m_iHealth = 80;
+
+// m_iszIdleExpression = MAKE_STRING("scenes/Expressions/FishermanIdle.vcd");
+// m_iszAlertExpression = MAKE_STRING("scenes/Expressions/FishermanAlert.vcd");
+// m_iszCombatExpression = MAKE_STRING("scenes/Expressions/FishermanCombat.vcd");
+
+ BaseClass::Spawn();
+
+ AddEFlags( EFL_NO_DISSOLVE | EFL_NO_MEGAPHYSCANNON_RAGDOLL | EFL_NO_PHYSCANNON_INTERACTION );
+
+ NPCInit();
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+// Output :
+//-----------------------------------------------------------------------------
+Class_T CNPC_Fisherman::Classify( void )
+{
+ return CLASS_PLAYER_ALLY_VITAL;
+}
+
+//---------------------------------------------------------
+//---------------------------------------------------------
+void CNPC_Fisherman::HandleAnimEvent( animevent_t *pEvent )
+{
+ if ( pEvent->event == NPC_EVENT_LEFTFOOT )
+ {
+ EmitSound( "NPC_Fisherman.FootstepLeft", pEvent->eventtime );
+ }
+ else if ( pEvent->event == NPC_EVENT_RIGHTFOOT )
+ {
+ EmitSound( "NPC_Fisherman.FootstepRight", pEvent->eventtime );
+ }
+ else if ( pEvent->event == AE_FISHERMAN_HAT_UP )
+ {
+ if (m_iHatLayer != -1)
+ {
+ RemoveLayer( m_iHatLayer, 0.2, 0.2 );
+ m_iHatLayer = -1;
+ }
+
+ m_iHatState = ACT_FISHERMAN_HAT_UP;
+ m_iHatLayer = AddGesture( (Activity)m_iHatState, false );
+ }
+ else if ( pEvent->event == AE_FISHERMAN_HAT_DOWN )
+ {
+ if (m_iHatLayer != -1)
+ {
+ RemoveLayer( m_iHatLayer, 0.2, 0.2 );
+ m_iHatLayer = -1;
+ }
+
+ m_iHatState = ACT_FISHERMAN_HAT_DOWN;
+ m_iHatLayer = AddGesture( (Activity)m_iHatState, false );
+ }
+ else if ( pEvent->event == AE_FISHERMAN_HAT_ON )
+ {
+ m_iHatLayer = AddGesture( (Activity)m_iHatState, false );
+ }
+ else if ( pEvent->event == AE_FISHERMAN_HAT_OFF )
+ {
+ if (m_iHatLayer != -1)
+ {
+ RemoveLayer( m_iHatLayer, 0.2, 0.2 );
+ m_iHatLayer = -1;
+ }
+ }
+ else
+ {
+ BaseClass::HandleAnimEvent( pEvent );
+ }
+}
+
+//------------------------------------------------------------------------------
+//------------------------------------------------------------------------------
+void CNPC_Fisherman::DeathSound( const CTakeDamageInfo &info )
+{
+ // Sentences don't play on dead NPCs
+ SentenceStop();
+}
+
+//-----------------------------------------------------------------------------
+//
+// Schedules
+//
+//-----------------------------------------------------------------------------
+
+AI_BEGIN_CUSTOM_NPC( npc_fisherman, CNPC_Fisherman )
+
+ DECLARE_ACTIVITY( ACT_FISHERMAN_HAT_UP )
+ DECLARE_ACTIVITY( ACT_FISHERMAN_HAT_DOWN )
+
+ DECLARE_ANIMEVENT( AE_FISHERMAN_HAT_UP )
+ DECLARE_ANIMEVENT( AE_FISHERMAN_HAT_DOWN )
+ DECLARE_ANIMEVENT( AE_FISHERMAN_HAT_ON )
+ DECLARE_ANIMEVENT( AE_FISHERMAN_HAT_OFF )
+
+AI_END_CUSTOM_NPC()
|