mirror of
https://github.com/nillerusr/source-engine.git
synced 2026-08-31 14:39:19 +00:00
upload "kind" alien swarm
This commit is contained in:
@@ -0,0 +1,141 @@
|
||||
#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();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user