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.
141 lines
3.7 KiB
141 lines
3.7 KiB
#include "cbase.h" |
|
#include "asw_intro_control.h" |
|
#include "util_shared.h" |
|
#include "asw_gamerules.h" |
|
#include "asw_player.h" |
|
|
|
// memdbgon must be the last include file in a .cpp file!!! |
|
#include "tier0/memdbgon.h" |
|
|
|
LINK_ENTITY_TO_CLASS( asw_intro_control, CASW_Intro_Control ); |
|
|
|
BEGIN_DATADESC( CASW_Intro_Control ) |
|
DEFINE_INPUTFUNC( FIELD_VOID, "LaunchCampaignMap", InputLaunchCampaignMap ), |
|
DEFINE_INPUTFUNC( FIELD_VOID, "ShowCredits", InputShowCredits ), |
|
DEFINE_INPUTFUNC( FIELD_VOID, "ShowCainMail", InputShowCainMail ), |
|
DEFINE_INPUTFUNC( FIELD_VOID, "CheckReconnect", InputCheckReconnect ), |
|
DEFINE_OUTPUT( m_IntroStarted, "IntroStarted" ), |
|
DEFINE_THINKFUNC(OnIntroStarted), |
|
DEFINE_FIELD(m_bLaunchedCampaignMap, FIELD_BOOLEAN), |
|
DEFINE_FIELD(m_bShownCredits, FIELD_BOOLEAN), |
|
END_DATADESC() |
|
|
|
extern ConVar asw_default_mission; |
|
|
|
void CASW_Intro_Control::Spawn() |
|
{ |
|
m_bLaunchedCampaignMap = false; |
|
BaseClass::Spawn(); |
|
SetThink(&CASW_Intro_Control::OnIntroStarted); |
|
SetNextThink(gpGlobals->curtime + 1.0f); |
|
} |
|
|
|
void CASW_Intro_Control::InputLaunchCampaignMap( inputdata_t &inputdata ) |
|
{ |
|
LaunchCampaignMap(); |
|
} |
|
|
|
void CASW_Intro_Control::LaunchCampaignMap() |
|
{ |
|
if (m_bLaunchedCampaignMap || !ASWGameRules()) |
|
return; |
|
|
|
ASWGameRules()->SetGameState(ASW_GS_CAMPAIGNMAP); |
|
|
|
CReliableBroadcastRecipientFilter filter; |
|
UserMessageBegin( filter, "LaunchCampaignMap" ); |
|
|
|
MessageEnd(); |
|
|
|
m_bLaunchedCampaignMap = true; |
|
} |
|
|
|
void CASW_Intro_Control::InputShowCredits( inputdata_t &inputdata ) |
|
{ |
|
m_bShownCredits = true; |
|
CReliableBroadcastRecipientFilter filter; |
|
UserMessageBegin( filter, "LaunchCredits" ); |
|
|
|
MessageEnd(); |
|
} |
|
|
|
void CASW_Intro_Control::InputShowCainMail( inputdata_t &inputdata ) |
|
{ |
|
// listen server goes back to the default mission |
|
if ( !engine->IsDedicatedServer() && ASWGameRules() && gpGlobals->maxClients > 1 ) |
|
{ |
|
CBasePlayer *pPlayer = UTIL_GetListenServerHost(); |
|
if (pPlayer) |
|
{ |
|
CSingleUserRecipientFilter filter(pPlayer); |
|
filter.MakeReliable(); |
|
UserMessageBegin( filter, "LaunchCainMail" ); |
|
|
|
MessageEnd(); |
|
} |
|
} |
|
else |
|
{ |
|
CReliableBroadcastRecipientFilter filter; |
|
UserMessageBegin( filter, "LaunchCainMail" ); |
|
MessageEnd(); |
|
} |
|
} |
|
|
|
|
|
void CASW_Intro_Control::OnIntroStarted() |
|
{ |
|
CBasePlayer *pPlayer = UTIL_PlayerByIndex( 1 ); |
|
if (pPlayer == NULL) |
|
{ |
|
SetThink(&CASW_Intro_Control::OnIntroStarted); |
|
SetNextThink(gpGlobals->curtime + 1.0f); |
|
} |
|
else |
|
{ |
|
m_IntroStarted.FireOutput(pPlayer, this); |
|
SetThink(NULL); |
|
} |
|
} |
|
|
|
// tell clients to check for reconnecting to the previous server after finishing the outro |
|
void CASW_Intro_Control::InputCheckReconnect( inputdata_t &inputdata ) |
|
{ |
|
CheckReconnect(); |
|
} |
|
|
|
void CASW_Intro_Control::CheckReconnect() |
|
{ |
|
// reconnect to the last server we were on (used when we're watching the outro as a singleplayer map after a multiplayer game) |
|
CReliableBroadcastRecipientFilter users; |
|
users.MakeReliable(); |
|
UserMessageBegin( users, "ASWReconnectAfterOutro" ); |
|
MessageEnd(); |
|
|
|
if (!engine->IsDedicatedServer() && ASWGameRules()) |
|
{ |
|
// listen server goes back to the default mission |
|
if ( gpGlobals->maxClients > 1 ) |
|
{ |
|
CBasePlayer *pPlayer = UTIL_GetListenServerHost(); |
|
if (pPlayer) |
|
{ |
|
//engine->ChangeLevel(asw_default_mission.GetString(), NULL); |
|
} |
|
} |
|
} |
|
} |
|
|
|
// if we've already started showing the credits and another player has joined up, show him them too |
|
void CASW_Intro_Control::PlayerSpawned(CASW_Player *pPlayer) |
|
{ |
|
Msg("CASW_Intro_Control::PlayerSpawned, showncredits = %d\n", m_bShownCredits); |
|
if (m_bShownCredits && pPlayer) |
|
{ |
|
Msg("Sending user message to this player telling him to show the credits\n"); |
|
CRecipientFilter filter; |
|
filter.AddRecipient(pPlayer); |
|
UserMessageBegin( filter, "LaunchCredits" ); |
|
MessageEnd(); |
|
} |
|
} |