Start of item_ff_goal.

This commit is contained in:
hlstriker 2013-12-03 02:01:09 +00:00 committed by squeek
parent 4e73cc9250
commit 6d0c20febc
8 changed files with 61 additions and 276 deletions

View File

@ -39,7 +39,7 @@ BEGIN_PREDICTION_DATA( CFF_CL_Player )
END_PREDICTION_DATA() END_PREDICTION_DATA()
#define HL2_WALK_SPEED 150 #define HL2_WALK_SPEED 150
#define HL2_NORM_SPEED 190 #define HL2_NORM_SPEED 280
#define HL2_SPRINT_SPEED 320 #define HL2_SPRINT_SPEED 320
static ConVar cl_playermodel( "cl_playermodel", "none", FCVAR_USERINFO | FCVAR_ARCHIVE | FCVAR_SERVER_CAN_EXECUTE, "Default Player Model"); static ConVar cl_playermodel( "cl_playermodel", "none", FCVAR_USERINFO | FCVAR_ARCHIVE | FCVAR_SERVER_CAN_EXECUTE, "Default Player Model");

View File

@ -1,252 +0,0 @@
#include "cbase.h"
#include "ff_sv_goal_manager.h"
#include "ff_sv_item_ff_goal.h"
LINK_ENTITY_TO_CLASS( item_ff_goal, CFF_SV_ItemFFGoal );
BEGIN_DATADESC( CFF_SV_ItemFFGoal )
END_DATADESC()
CFF_SV_ItemFFGoal::CFF_SV_ItemFFGoal()
{
BaseClass::InitGoal( FF_GOALTYPE_ITEM );
}
void CFF_SV_ItemFFGoal::Spawn()
{
// TODO: Check if needs to drop to floor.
if( false )
UTIL_DropToFloor( this, MASK_SOLID );
m_vecSpawnOrigin = GetAbsOrigin();
}
CBasePlayer* CFF_SV_ItemFFGoal::GetCarrier()
{
return m_hItemCarrier;
}
const Vector& CFF_SV_ItemFFGoal::GetSpawnOrigin()
{
return m_vecSpawnOrigin;
}
/*
#include "cbase.h"
#include "ff_sv_teamcheck_target.h"
class CFF_SV_ItemFFGoal : public CBaseAnimating
{
public:
DECLARE_CLASS( CFF_SV_ItemFFGoal, CBaseAnimating );
DECLARE_DATADESC();
CFF_SV_ItemFFGoal()
{
SetThink( NULL );
m_bEnabled = true;
m_bActive = false;
m_fActiveTime = 1.5f;
m_fActiveDelay = 0.0f;
}
void Precache( void );
void Spawn( void );
void OnTouch( CBaseEntity *pOther );
void SetActive( CBasePlayer *pPlayer );
void SetInactive( void );
private:
COutputEvent m_OnStartTouch;
COutputEvent m_OnEndTouch;
void InputEnable( inputdata_t &inputdata );
void InputDisable( inputdata_t &inputdata );
void InputSetActive( inputdata_t &inputdata );
void InputSetInactive( inputdata_t &inputdata );
void ThinkDoActive( void );
void ThinkSetInactive( void );
bool m_bEnabled; // If disabled then the goal will ignore all Inputs (except for Enable).
bool m_bActive; // Is the goal active?
float m_fActiveTime; // How long to stay in the active state.
float m_fActiveDelay; // How long to wait before going in the active state.
// TODO: These probably don't need to be EHANDLEs unless we network them...
EHANDLE m_hGoalActivator; // The player that activated this goal (this is not always the owner).
EHANDLE m_hGoalOwner; // The player that owns this goal (this is not always the activator).
string_t m_iszSoundName;
};
LINK_ENTITY_TO_CLASS( item_ff_goal, CFF_SV_ItemFFGoal );
BEGIN_DATADESC( CFF_SV_ItemFFGoal )
// Goal keyfields.
DEFINE_KEYFIELD_NOT_SAVED( m_bEnabled, FIELD_BOOLEAN, "enabled" ),
DEFINE_KEYFIELD_NOT_SAVED( m_bActive, FIELD_BOOLEAN, "active" ),
DEFINE_KEYFIELD_NOT_SAVED( m_fActiveTime, FIELD_FLOAT, "active_time" ),
DEFINE_KEYFIELD_NOT_SAVED( m_fActiveDelay, FIELD_FLOAT, "active_delay" ),
DEFINE_KEYFIELD_NOT_SAVED( m_iszSoundName, FIELD_SOUNDNAME, "sound" ),
// Goal touch functions.
DEFINE_FUNCTION( OnTouch ),
// Goal think functions.
DEFINE_THINKFUNC( ThinkDoActive ),
DEFINE_THINKFUNC( ThinkSetInactive ),
// Goal inputs.
DEFINE_INPUTFUNC( FIELD_VOID, "Enable", InputEnable ),
DEFINE_INPUTFUNC( FIELD_VOID, "Disable", InputDisable ),
DEFINE_INPUTFUNC( FIELD_VOID, "SetActive", InputSetActive ),
DEFINE_INPUTFUNC( FIELD_VOID, "SetInactive", InputSetInactive ),
END_DATADESC()
void CFF_SV_ItemFFGoal::Precache( void )
{
if( GetModelName().ToCStr()[0] )
PrecacheModel( GetModelName().ToCStr() );
const char *szSound = m_iszSoundName.ToCStr();
if( m_iszSoundName != NULL_STRING )
{
if (*szSound != '!')
PrecacheScriptSound(szSound);
}
BaseClass::Precache();
}
void CFF_SV_ItemFFGoal::Spawn( void )
{
Precache();
if( GetModelName().ToCStr()[0] )
SetModel( GetModelName().ToCStr() );
SetMoveType( MOVETYPE_NONE );
//SetSolid( SOLID_VPHYSICS ); // WARNING: If the entity doesn't have a model then we MUST use SOLID_BBOX or the game will crash.
SetSolid( SOLID_BBOX );
AddSolidFlags( FSOLID_NOT_SOLID | FSOLID_TRIGGER );
SetTouch( &CFF_SV_ItemFFGoal::OnTouch );
}
void CFF_SV_ItemFFGoal::OnTouch( CBaseEntity *pOther )
{
// TODO: Should we just hook this function in StartTouch() instead?
if(!m_bEnabled || m_bActive)
return;
// Make sure pOther is a player.
CBasePlayer *pPlayer = dynamic_cast<CBasePlayer *>(pOther);
if(!pPlayer)
return;
SetActive(pPlayer);
}
void CFF_SV_ItemFFGoal::InputEnable( inputdata_t &inputdata )
{
m_bEnabled = true;
}
void CFF_SV_ItemFFGoal::InputDisable( inputdata_t &inputdata )
{
m_bEnabled = false;
}
void CFF_SV_ItemFFGoal::InputSetActive( inputdata_t &inputdata )
{
if(!m_bEnabled || m_bActive)
return;
SetActive( dynamic_cast<CBasePlayer *>(inputdata.pActivator) );
}
void CFF_SV_ItemFFGoal::InputSetInactive( inputdata_t &inputdata )
{
if(!m_bEnabled || !m_bActive)
return;
SetInactive();
}
void CFF_SV_ItemFFGoal::SetActive( CBasePlayer *pPlayer )
{
if( !IsTeamAllowed( pPlayer->GetTeamNumber() ) )
return;
m_hGoalActivator = pPlayer;
m_bActive = true;
if(m_fActiveDelay)
{
SetThink( &CFF_SV_ItemFFGoal::ThinkDoActive );
SetNextThink( gpGlobals->curtime + m_fActiveDelay );
}
else
{
ThinkDoActive();
}
}
void CFF_SV_ItemFFGoal::SetInactive()
{
RemoveEffects( EF_NODRAW );
m_bActive = false;
SetThink( NULL );
}
void CFF_SV_ItemFFGoal::ThinkDoActive()
{
AddEffects( EF_NODRAW );
if( m_iszSoundName.ToCStr()[0] )
{
CRecipientFilter filter;
filter.AddRecipientsByPVS( GetAbsOrigin() );
filter.MakeReliable();
EmitSound_t params;
params.m_pSoundName = m_iszSoundName.ToCStr();
params.m_SoundLevel = SNDLVL_NORM;
if( filter.GetRecipientCount() )
EmitSound( filter, ENTINDEX(this), params );
}
// Start setting inactive.
if(m_fActiveTime)
{
SetThink( &CFF_SV_ItemFFGoal::ThinkSetInactive );
SetNextThink( gpGlobals->curtime + m_fActiveTime );
}
else
{
ThinkSetInactive();
}
}
void CFF_SV_ItemFFGoal::ThinkSetInactive()
{
SetInactive();
}
*/

View File

@ -80,14 +80,14 @@ extern int gEvilImpulse101;
ConVar sv_autojump( "sv_autojump", "0" ); ConVar sv_autojump( "sv_autojump", "0" );
ConVar hl2_walkspeed( "hl2_walkspeed", "150" ); ConVar hl2_walkspeed( "hl2_walkspeed", "150" );
ConVar hl2_normspeed( "hl2_normspeed", "190" ); ConVar hl2_normspeed( "hl2_normspeed", "280" );
ConVar hl2_sprintspeed( "hl2_sprintspeed", "320" ); ConVar hl2_sprintspeed( "hl2_sprintspeed", "320" );
ConVar hl2_darkness_flashlight_factor ( "hl2_darkness_flashlight_factor", "1" ); ConVar hl2_darkness_flashlight_factor ( "hl2_darkness_flashlight_factor", "1" );
#ifdef HL2MP #ifdef HL2MP
#define HL2_WALK_SPEED 150 #define HL2_WALK_SPEED 150
#define HL2_NORM_SPEED 190 #define HL2_NORM_SPEED 280
#define HL2_SPRINT_SPEED 320 #define HL2_SPRINT_SPEED 320
#else #else
#define HL2_WALK_SPEED hl2_walkspeed.GetFloat() #define HL2_WALK_SPEED hl2_walkspeed.GetFloat()

View File

@ -36,7 +36,7 @@ BEGIN_DATADESC( CFF_SH_BaseFFGoal )
DEFINE_KEYFIELD_NOT_SAVED( m_iszActivationSound, FIELD_SOUNDNAME, "activation_sound" ), DEFINE_KEYFIELD_NOT_SAVED( m_iszActivationSound, FIELD_SOUNDNAME, "activation_sound" ),
DEFINE_KEYFIELD_NOT_SAVED( m_iszResetSound, FIELD_SOUNDNAME, "reset_sound" ), DEFINE_KEYFIELD_NOT_SAVED( m_iszResetSound, FIELD_SOUNDNAME, "reset_sound" ),
DEFINE_KEYFIELD_NOT_SAVED( m_iszFailedCriteriaMessage, FIELD_STRING, "msg_if_activator_fails_criteria" ), DEFINE_KEYFIELD_NOT_SAVED( m_iszFailedCriteriaMessage, FIELD_STRING, "msg_if_ap_fails_criteria" ),
// Criteria check keys. // Criteria check keys.
DEFINE_KEYFIELD_NOT_SAVED( m_iszCriteria_TeamsAllowed, FIELD_STRING, "teams_allowed" ), DEFINE_KEYFIELD_NOT_SAVED( m_iszCriteria_TeamsAllowed, FIELD_STRING, "teams_allowed" ),
@ -428,7 +428,7 @@ void CFF_SH_BaseFFGoal::Spawn()
Precache(); Precache();
ParseCriteriaKeyValues(); ParseCriteriaKeyValues();
BaseClass::Activate(); BaseClass::Spawn();
} }
void CFF_SH_BaseFFGoal::Activate() void CFF_SH_BaseFFGoal::Activate()

View File

@ -43,7 +43,7 @@ public:
virtual void OnTouching( CBaseEntity *pOther ); // NOTE: This function is called from its derived classes SetTouch() function (BaseClass::OnTouching()). virtual void OnTouching( CBaseEntity *pOther ); // NOTE: This function is called from its derived classes SetTouch() function (BaseClass::OnTouching()).
void TryActivateGoal( CBaseEntity *pActivator ); void TryActivateGoal( CBaseEntity *pActivator );
void ActivateGoalStart( CBaseEntity *pActivator ); virtual void ActivateGoalStart( CBaseEntity *pActivator );
virtual void ActivateGoal( void ); virtual void ActivateGoal( void );
virtual void DeactivateGoal( void ); virtual void DeactivateGoal( void );
#endif #endif

View File

@ -5,26 +5,28 @@
LINK_ENTITY_TO_CLASS( item_ff_goal, CFF_SH_ItemFFGoal ); LINK_ENTITY_TO_CLASS( item_ff_goal, CFF_SH_ItemFFGoal );
#ifdef GAME_DLL #ifdef GAME_DLL
BEGIN_DATADESC( CFF_SH_ItemFFGoal )
// Goal touch functions.
DEFINE_FUNCTION( OnTouching ),
END_DATADESC()
IMPLEMENT_SERVERCLASS_ST( CFF_SH_ItemFFGoal, DT_FF_ItemFFGoal ) IMPLEMENT_SERVERCLASS_ST( CFF_SH_ItemFFGoal, DT_FF_ItemFFGoal )
SendPropEHandle( SENDINFO( m_hItemCarrier ) ),
SendPropVector( SENDINFO( m_vecSpawnOrigin ) ),
END_SEND_TABLE() END_SEND_TABLE()
#else #else
IMPLEMENT_CLIENTCLASS_DT( CFF_SH_ItemFFGoal, DT_FF_ItemFFGoal, CFF_SH_ItemFFGoal ) IMPLEMENT_CLIENTCLASS_DT( CFF_SH_ItemFFGoal, DT_FF_ItemFFGoal, CFF_SH_ItemFFGoal )
RecvPropEHandle( RECVINFO( m_hItemCarrier ) ),
RecvPropVector( RECVINFO( m_vecSpawnOrigin ) ),
END_RECV_TABLE() END_RECV_TABLE()
#endif #endif
#ifdef GAME_DLL
void CFF_SH_ItemFFGoal::Spawn() void CFF_SH_ItemFFGoal::Spawn()
{ {
BaseClass::Spawn(); BaseClass::Spawn();
// TODO: Check if needs to drop to floor. Note: This should be done in the info_ versions spawn
if( false )
UTIL_DropToFloor( this, MASK_SOLID );
m_vecSpawnOrigin = GetAbsOrigin(); m_vecSpawnOrigin = GetAbsOrigin();
} }
#endif
CBasePlayer* CFF_SH_ItemFFGoal::GetCarrier() CBasePlayer* CFF_SH_ItemFFGoal::GetCarrier()
{ {
@ -35,3 +37,36 @@ const Vector& CFF_SH_ItemFFGoal::GetSpawnOrigin()
{ {
return m_vecSpawnOrigin; return m_vecSpawnOrigin;
} }
#ifdef GAME_DLL
void CFF_SH_ItemFFGoal::OnTouching( CBaseEntity *pOther )
{
BaseClass::OnTouching( pOther );
}
void CFF_SH_ItemFFGoal::ActivateGoalStart( CBaseEntity *pActivator )
{
BaseClass::ActivateGoalStart( pActivator );
CBasePlayer *pPlayer = dynamic_cast<CBasePlayer *>(pActivator);
if( !pPlayer )
return;
// Parent this item to the activator.
SetSolid( SOLID_NONE );
SetParent( pPlayer );
m_hItemCarrier = pPlayer;
}
void CFF_SH_ItemFFGoal::ActivateGoal()
{
BaseClass::ActivateGoal();
RemoveEffects( EF_NODRAW );
}
void CFF_SH_ItemFFGoal::DeactivateGoal()
{
BaseClass::DeactivateGoal();
}
#endif

View File

@ -4,19 +4,16 @@
#define FF_SH_ITEM_FF_GOAL_H #define FF_SH_ITEM_FF_GOAL_H
#ifdef GAME_DLL #include "ff_sh_info_ff_goal.h"
#include "baseanimating.h"
#else
#include "c_baseanimating.h"
#endif
class CFF_SH_ItemFFGoal : public CBaseAnimating // TODO: Derive from info_ version. Note: info_ should still derive from CBaseAnimating. class CFF_SH_ItemFFGoal : public CFF_SH_InfoFFGoal
{ {
public: public:
DECLARE_CLASS( CFF_SH_ItemFFGoal, CBaseAnimating ); // TODO: Derive from info_ version. Note: info_ should still derive from CBaseAnimating. DECLARE_CLASS( CFF_SH_ItemFFGoal, CFF_SH_InfoFFGoal );
#ifdef GAME_DLL #ifdef GAME_DLL
DECLARE_DATADESC();
DECLARE_SERVERCLASS(); DECLARE_SERVERCLASS();
#else #else
DECLARE_CLIENTCLASS(); DECLARE_CLIENTCLASS();
@ -27,9 +24,14 @@ public:
CBasePlayer* GetCarrier( void ); CBasePlayer* GetCarrier( void );
const Vector& GetSpawnOrigin( void ); const Vector& GetSpawnOrigin( void );
#ifdef GAME_DLL
void Spawn( void ); void Spawn( void );
#ifdef GAME_DLL
virtual void OnTouching( CBaseEntity *pOther );
virtual void ActivateGoalStart( CBaseEntity *pActivator );
virtual void ActivateGoal( void );
virtual void DeactivateGoal( void );
int UpdateTransmitState( void ) int UpdateTransmitState( void )
{ {
// The goal must always be transmitted because client side relys on knowing about each goal. // The goal must always be transmitted because client side relys on knowing about each goal.
@ -39,8 +41,8 @@ public:
#endif #endif
private: private:
CHandle<CBasePlayer> m_hItemCarrier; // TODO: network this. CNetworkHandle( CBasePlayer, m_hItemCarrier );
Vector m_vecSpawnOrigin; // TODO: network this. CNetworkVector( m_vecSpawnOrigin );
}; };

View File

@ -61,7 +61,7 @@ ConVar sv_maxspeed ( "sv_maxspeed", "600", FCVAR_NOTIFY | FCVAR_REPLICATED | FC
#if defined( CSTRIKE_DLL ) #if defined( CSTRIKE_DLL )
ConVar sv_accelerate ( "sv_accelerate", "10", FCVAR_NOTIFY | FCVAR_REPLICATED); ConVar sv_accelerate ( "sv_accelerate", "10", FCVAR_NOTIFY | FCVAR_REPLICATED);
#else #else
ConVar sv_accelerate ( "sv_accelerate", "14", FCVAR_NOTIFY | FCVAR_REPLICATED | FCVAR_DEVELOPMENTONLY); ConVar sv_accelerate ( "sv_accelerate", "9", FCVAR_NOTIFY | FCVAR_REPLICATED | FCVAR_DEVELOPMENTONLY);
#endif // CSTRIKE_DLL #endif // CSTRIKE_DLL
#endif//_XBOX #endif//_XBOX