Torque3D/Templates/Empty/game/scripts/client/missionDownload.cs
2012-09-19 11:29:55 -04:00

216 lines
6.7 KiB
C#

//-----------------------------------------------------------------------------
// Copyright (c) 2012 GarageGames, LLC
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
// IN THE SOFTWARE.
//-----------------------------------------------------------------------------
//----------------------------------------------------------------------------
// Mission Loading & Mission Info
// The mission loading server handshaking is handled by the
// core/scripts/client/missingLoading.cs. This portion handles the interface
// with the game GUI.
//----------------------------------------------------------------------------
//----------------------------------------------------------------------------
// Loading Phases:
// Phase 1: Download Datablocks
// Phase 2: Download Ghost Objects
// Phase 3: Scene Lighting
//----------------------------------------------------------------------------
// Phase 1
//----------------------------------------------------------------------------
function onMissionDownloadPhase1(%missionName, %musicTrack)
{
// Load the post effect presets for this mission.
%path = "levels/" @ fileBase( %missionName ) @ $PostFXManager::fileExtension;
if ( isScriptFile( %path ) )
postFXManager::loadPresetHandler( %path );
else
PostFXManager::settingsApplyDefaultPreset();
// Close and clear the message hud (in case it's open)
if ( isObject( MessageHud ) )
MessageHud.close();
// Reset the loading progress controls:
if ( !isObject( LoadingProgress ) )
return;
LoadingProgress.setValue(0);
LoadingProgressTxt.setValue("LOADING DATABLOCKS");
Canvas.repaint();
}
function onPhase1Progress(%progress)
{
if ( !isObject( LoadingProgress ) )
return;
LoadingProgress.setValue(%progress);
Canvas.repaint(33);
}
function onPhase1Complete()
{
if ( !isObject( LoadingProgress ) )
return;
LoadingProgress.setValue( 1 );
Canvas.repaint();
}
//----------------------------------------------------------------------------
// Phase 2
//----------------------------------------------------------------------------
function onMissionDownloadPhase2()
{
if ( !isObject( LoadingProgress ) )
return;
LoadingProgress.setValue(0);
LoadingProgressTxt.setValue("LOADING OBJECTS");
Canvas.repaint();
}
function onPhase2Progress(%progress)
{
if ( !isObject( LoadingProgress ) )
return;
LoadingProgress.setValue(%progress);
Canvas.repaint(33);
}
function onPhase2Complete()
{
if ( !isObject( LoadingProgress ) )
return;
LoadingProgress.setValue( 1 );
Canvas.repaint();
}
function onFileChunkReceived(%fileName, %ofs, %size)
{
if ( !isObject( LoadingProgress ) )
return;
LoadingProgress.setValue(%ofs / %size);
LoadingProgressTxt.setValue("Downloading " @ %fileName @ "...");
}
//----------------------------------------------------------------------------
// Phase 3
//----------------------------------------------------------------------------
function onMissionDownloadPhase3()
{
if ( !isObject( LoadingProgress ) )
return;
LoadingProgress.setValue(0);
LoadingProgressTxt.setValue("LIGHTING MISSION");
Canvas.repaint();
}
function onPhase3Progress(%progress)
{
if ( !isObject( LoadingProgress ) )
return;
LoadingProgress.setValue(%progress);
Canvas.repaint(33);
}
function onPhase3Complete()
{
$lightingMission = false;
if ( !isObject( LoadingProgress ) )
return;
LoadingProgressTxt.setValue("STARTING MISSION");
LoadingProgress.setValue( 1 );
Canvas.repaint();
}
//----------------------------------------------------------------------------
// Mission loading done!
//----------------------------------------------------------------------------
function onMissionDownloadComplete()
{
// Client will shortly be dropped into the game, so this is
// good place for any last minute gui cleanup.
}
//------------------------------------------------------------------------------
// Before downloading a mission, the server transmits the mission
// information through these messages.
//------------------------------------------------------------------------------
addMessageCallback( 'MsgLoadInfo', handleLoadInfoMessage );
addMessageCallback( 'MsgLoadDescripition', handleLoadDescriptionMessage );
addMessageCallback( 'MsgLoadInfoDone', handleLoadInfoDoneMessage );
addMessageCallback( 'MsgLoadFailed', handleLoadFailedMessage );
//------------------------------------------------------------------------------
function handleLoadInfoMessage( %msgType, %msgString, %mapName )
{
// Clear all of the loading info lines:
for( %line = 0; %line < LoadingGui.qLineCount; %line++ )
LoadingGui.qLine[%line] = "";
LoadingGui.qLineCount = 0;
}
//------------------------------------------------------------------------------
function handleLoadDescriptionMessage( %msgType, %msgString, %line )
{
LoadingGui.qLine[LoadingGui.qLineCount] = %line;
LoadingGui.qLineCount++;
// Gather up all the previous lines, append the current one
// and stuff it into the control
%text = "<spush><font:Arial:16>";
for( %line = 0; %line < LoadingGui.qLineCount - 1; %line++ )
%text = %text @ LoadingGui.qLine[%line] @ " ";
%text = %text @ LoadingGui.qLine[%line] @ "<spop>";
}
//------------------------------------------------------------------------------
function handleLoadInfoDoneMessage( %msgType, %msgString )
{
// This will get called after the last description line is sent.
}
//------------------------------------------------------------------------------
function handleLoadFailedMessage( %msgType, %msgString )
{
MessageBoxOK( "Mission Load Failed", %msgString NL "Press OK to return to the Main Menu", "disconnect();" );
}