Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion sp/src/game/client/view.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -745,7 +745,7 @@ void CViewRender::SetUpViews()

//Adjust the viewmodel's FOV to move with any FOV offsets on the viewer's end
#ifdef MAPBASE
view.fovViewmodel = fabs(g_pClientMode->GetViewModelFOV()) - flFOVOffset;
view.fovViewmodel = max(0.001f, g_pClientMode->GetViewModelFOV() - flFOVOffset);
#else
view.fovViewmodel = g_pClientMode->GetViewModelFOV() - flFOVOffset;
#endif
Expand Down
92 changes: 89 additions & 3 deletions sp/src/game/server/env_instructor_hint.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,15 @@ class CEnvInstructorHint : public CPointEntity
DECLARE_CLASS( CEnvInstructorHint, CPointEntity );
DECLARE_DATADESC();

#ifdef MAPBASE
CEnvInstructorHint( void );
#endif
virtual ~CEnvInstructorHint( void ) {}

#ifdef MAPBASE
virtual void OnRestore( void );
#endif

private:
void InputShowHint( inputdata_t &inputdata );
void InputEndHint( inputdata_t &inputdata );
Expand Down Expand Up @@ -56,6 +65,10 @@ class CEnvInstructorHint : public CPointEntity
#ifdef MAPBASE
string_t m_iszStartSound;
int m_iHintTargetPos;
float m_flActiveUntil;
CHandle<CBasePlayer> m_hActivator;
EHANDLE m_hTarget;
bool m_bFilterByActivator;
#endif
};

Expand Down Expand Up @@ -85,8 +98,13 @@ BEGIN_DATADESC( CEnvInstructorHint )
#ifdef MAPBASE
DEFINE_KEYFIELD( m_iszStartSound, FIELD_STRING, "hint_start_sound" ),
DEFINE_KEYFIELD( m_iHintTargetPos, FIELD_INTEGER, "hint_target_pos" ),

DEFINE_FIELD( m_flActiveUntil, FIELD_TIME ),
DEFINE_FIELD( m_hActivator, FIELD_EHANDLE ),
DEFINE_FIELD( m_hTarget, FIELD_EHANDLE ),
DEFINE_FIELD( m_bFilterByActivator, FIELD_BOOLEAN ),
#endif

DEFINE_INPUTFUNC( FIELD_STRING, "ShowHint", InputShowHint ),
DEFINE_INPUTFUNC( FIELD_VOID, "EndHint", InputEndHint ),

Expand All @@ -102,6 +120,43 @@ END_DATADESC()
#define LOCATOR_ICON_FX_SHAKE_NARROW 0x00000040
#define LOCATOR_ICON_FX_STATIC 0x00000100 // This icon draws at a fixed location on the HUD.

#ifdef MAPBASE
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
CEnvInstructorHint::CEnvInstructorHint( void )
{
m_hActivator = NULL;
m_hTarget = NULL;
m_bFilterByActivator = false;
m_flActiveUntil = -1.0f;
}

//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
void CEnvInstructorHint::OnRestore( void )
{
int iTimeLeft = 0;
if ( m_flActiveUntil < 0.0f )
{
return;
}
if ( m_iTimeout != 0 )
{
iTimeLeft = static_cast<int>( m_flActiveUntil - gpGlobals->curtime );
if ( iTimeLeft <= 0 )
{
return;
}
}

int iOriginalTimeout = m_iTimeout;
m_iTimeout = iTimeLeft;
inputdata_t inputdata;
InputShowHint( inputdata );
m_iTimeout = iOriginalTimeout;
}
#endif

//-----------------------------------------------------------------------------
// Purpose: Input handler for showing the message and/or playing the sound.
//-----------------------------------------------------------------------------
Expand All @@ -110,7 +165,15 @@ void CEnvInstructorHint::InputShowHint( inputdata_t &inputdata )
IGameEvent * event = gameeventmanager->CreateEvent( "instructor_server_hint_create", false );
if ( event )
{
CBaseEntity *pTargetEntity = gEntList.FindEntityByName( NULL, m_iszHintTargetEntity );
CBaseEntity *pTargetEntity = NULL;

#ifdef MAPBASE
pTargetEntity = m_hTarget;

if ( pTargetEntity == NULL )
#endif
pTargetEntity = gEntList.FindEntityByName( NULL, m_iszHintTargetEntity );

if( pTargetEntity == NULL && !m_bStatic )
pTargetEntity = inputdata.pActivator;

Expand All @@ -137,6 +200,15 @@ void CEnvInstructorHint::InputShowHint( inputdata_t &inputdata )
pActivator = pMarine->GetCommander();
}
#else
#ifdef MAPBASE
if ( m_hActivator )
{
pActivator = m_hActivator;
bFilterByActivator = m_bFilterByActivator;
}
else
#endif

if ( inputdata.value.StringID() != NULL_STRING )
{
CBaseEntity *pTarget = gEntList.FindEntityByName( NULL, inputdata.value.String() );
Expand All @@ -150,7 +222,7 @@ void CEnvInstructorHint::InputShowHint( inputdata_t &inputdata )
{
if ( GameRules()->IsMultiplayer() == false )
{
pActivator = UTIL_GetLocalPlayer();
pActivator = UTIL_GetLocalPlayer();
}
else
{
Expand Down Expand Up @@ -190,6 +262,13 @@ void CEnvInstructorHint::InputShowHint( inputdata_t &inputdata )
#endif

gameeventmanager->FireEvent( event );

#ifdef MAPBASE
m_flActiveUntil = gpGlobals->curtime + m_iTimeout;
m_hTarget = pTargetEntity;
m_hActivator = pActivator;
m_bFilterByActivator = bFilterByActivator;
#endif
}
}

Expand All @@ -203,6 +282,13 @@ void CEnvInstructorHint::InputEndHint( inputdata_t &inputdata )
event->SetString( "hint_name", GetEntityName().ToCStr() );

gameeventmanager->FireEvent( event );

#ifdef MAPBASE
m_flActiveUntil = -1.0f;
m_hActivator = NULL;
m_hTarget = NULL;
m_bFilterByActivator = false;
#endif
}
}

Expand Down