Initial commit
This commit is contained in:
147
Torque/SDK/example/common/server/missionLoad.cs
Normal file
147
Torque/SDK/example/common/server/missionLoad.cs
Normal file
@@ -0,0 +1,147 @@
|
||||
//-----------------------------------------------------------------------------
|
||||
// Torque Game Engine
|
||||
// Copyright (C) GarageGames.com, Inc.
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Server mission loading
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
// On every mission load except the first, there is a pause after
|
||||
// the initial mission info is downloaded to the client.
|
||||
$MissionLoadPause = 5000;
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
function loadMission( %missionName, %isFirstMission )
|
||||
{
|
||||
endMission();
|
||||
echo("*** LOADING MISSION: " @ %missionName);
|
||||
echo("*** Stage 1 load");
|
||||
|
||||
// Reset all of these
|
||||
clearCenterPrintAll();
|
||||
clearBottomPrintAll();
|
||||
|
||||
// increment the mission sequence (used for ghost sequencing)
|
||||
$missionSequence++;
|
||||
$missionRunning = false;
|
||||
$Server::MissionFile = %missionName;
|
||||
|
||||
// Extract mission info from the mission file,
|
||||
// including the display name and stuff to send
|
||||
// to the client.
|
||||
buildLoadInfo( %missionName );
|
||||
|
||||
// Download mission info to the clients
|
||||
%count = ClientGroup.getCount();
|
||||
for( %cl = 0; %cl < %count; %cl++ ) {
|
||||
%client = ClientGroup.getObject( %cl );
|
||||
if (!%client.isAIControlled())
|
||||
sendLoadInfoToClient(%client);
|
||||
}
|
||||
|
||||
// if this isn't the first mission, allow some time for the server
|
||||
// to transmit information to the clients:
|
||||
if( %isFirstMission || $Server::ServerType $= "SinglePlayer" )
|
||||
loadMissionStage2();
|
||||
else
|
||||
schedule( $MissionLoadPause, ServerGroup, loadMissionStage2 );
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
function loadMissionStage2()
|
||||
{
|
||||
// Create the mission group off the ServerGroup
|
||||
echo("*** Stage 2 load");
|
||||
$instantGroup = ServerGroup;
|
||||
|
||||
// Make sure the mission exists
|
||||
%file = $Server::MissionFile;
|
||||
|
||||
if( !isFile( %file ) ) {
|
||||
error( "Could not find mission " @ %file );
|
||||
return;
|
||||
}
|
||||
|
||||
// Calculate the mission CRC. The CRC is used by the clients
|
||||
// to caching mission lighting.
|
||||
$missionCRC = getFileCRC( %file );
|
||||
|
||||
// Exec the mission, objects are added to the ServerGroup
|
||||
exec(%file);
|
||||
|
||||
// If there was a problem with the load, let's try another mission
|
||||
if( !isObject(MissionGroup) ) {
|
||||
error( "No 'MissionGroup' found in mission \"" @ $missionName @ "\"." );
|
||||
schedule( 3000, ServerGroup, CycleMissions );
|
||||
return;
|
||||
}
|
||||
|
||||
// Mission cleanup group
|
||||
new SimGroup( MissionCleanup );
|
||||
$instantGroup = MissionCleanup;
|
||||
|
||||
// Construct MOD paths
|
||||
pathOnMissionLoadDone();
|
||||
|
||||
// Mission loading done...
|
||||
echo("*** Mission loaded");
|
||||
|
||||
// Start all the clients in the mission
|
||||
$missionRunning = true;
|
||||
for( %clientIndex = 0; %clientIndex < ClientGroup.getCount(); %clientIndex++ )
|
||||
ClientGroup.getObject(%clientIndex).loadMission();
|
||||
|
||||
// Go ahead and launch the game
|
||||
onMissionLoaded();
|
||||
purgeResources();
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
function endMission()
|
||||
{
|
||||
if (!isObject( MissionGroup ))
|
||||
return;
|
||||
|
||||
echo("*** ENDING MISSION");
|
||||
|
||||
// Inform the game code we're done.
|
||||
onMissionEnded();
|
||||
|
||||
// Inform the clients
|
||||
for( %clientIndex = 0; %clientIndex < ClientGroup.getCount(); %clientIndex++ ) {
|
||||
// clear ghosts and paths from all clients
|
||||
%cl = ClientGroup.getObject( %clientIndex );
|
||||
%cl.endMission();
|
||||
%cl.resetGhosting();
|
||||
%cl.clearPaths();
|
||||
}
|
||||
|
||||
// Delete everything
|
||||
MissionGroup.delete();
|
||||
MissionCleanup.delete();
|
||||
|
||||
$ServerGroup.delete();
|
||||
$ServerGroup = new SimGroup(ServerGroup);
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
function resetMission()
|
||||
{
|
||||
echo("*** MISSION RESET");
|
||||
|
||||
// Remove any temporary mission objects
|
||||
MissionCleanup.delete();
|
||||
$instantGroup = ServerGroup;
|
||||
new SimGroup( MissionCleanup );
|
||||
$instantGroup = MissionCleanup;
|
||||
|
||||
//
|
||||
onMissionReset();
|
||||
}
|
||||
Reference in New Issue
Block a user