mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-07-16 00:54:54 +00:00
Relocates several game specific GUIs (with relevant art and scripts) out of the "core".
This commit is contained in:
parent
5094eb5930
commit
c1831e4bd8
34 changed files with 26 additions and 32 deletions
350
Templates/Full/game/scripts/gui/chooseLevelDlg.cs
Normal file
350
Templates/Full/game/scripts/gui/chooseLevelDlg.cs
Normal file
|
|
@ -0,0 +1,350 @@
|
|||
//-----------------------------------------------------------------------------
|
||||
// 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.
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
function StartLevel( %mission, %hostingType )
|
||||
{
|
||||
if( %mission $= "" )
|
||||
{
|
||||
%id = CL_levelList.getSelectedId();
|
||||
%mission = getField(CL_levelList.getRowTextById(%id), 1);
|
||||
}
|
||||
|
||||
if (%hostingType !$= "")
|
||||
{
|
||||
%serverType = %hostingType;
|
||||
}
|
||||
else
|
||||
{
|
||||
if ($pref::HostMultiPlayer)
|
||||
%serverType = "MultiPlayer";
|
||||
else
|
||||
%serverType = "SinglePlayer";
|
||||
}
|
||||
|
||||
// Show the loading screen immediately.
|
||||
if ( isObject( LoadingGui ) )
|
||||
{
|
||||
Canvas.setContent("LoadingGui");
|
||||
LoadingProgress.setValue(1);
|
||||
LoadingProgressTxt.setValue("LOADING MISSION FILE");
|
||||
Canvas.repaint();
|
||||
}
|
||||
|
||||
createAndConnectToLocalServer( %serverType, %mission );
|
||||
}
|
||||
|
||||
|
||||
//----------------------------------------
|
||||
function ChooseLevelDlg::onWake( %this )
|
||||
{
|
||||
CL_levelList.clear();
|
||||
ChooseLevelWindow->SmallPreviews.clear();
|
||||
|
||||
%i = 0;
|
||||
for(%file = findFirstFile($Server::MissionFileSpec); %file !$= ""; %file = findNextFile($Server::MissionFileSpec))
|
||||
{
|
||||
// Skip our new level/mission if we arent choosing a level
|
||||
// to launch in the editor.
|
||||
if ( !%this.launchInEditor )
|
||||
{
|
||||
if (strstr(%file, "newMission.mis") > -1)
|
||||
continue;
|
||||
if (strstr(%file, "newLevel.mis") > -1)
|
||||
continue;
|
||||
}
|
||||
|
||||
%this.addMissionFile( %file );
|
||||
}
|
||||
|
||||
// Also add the new level mission as defined in the world editor settings
|
||||
// if we are choosing a level to launch in the editor.
|
||||
if ( %this.launchInEditor )
|
||||
{
|
||||
%file = EditorSettings.value( "WorldEditor/newLevelFile" );
|
||||
if ( %file !$= "" )
|
||||
%this.addMissionFile( %file );
|
||||
}
|
||||
|
||||
// Sort our list
|
||||
CL_levelList.sort(0);
|
||||
|
||||
// Set the first row as the selected row
|
||||
CL_levelList.setSelectedRow(0);
|
||||
|
||||
for (%i = 0; %i < CL_levelList.rowCount(); %i++)
|
||||
{
|
||||
%preview = new GuiBitmapButtonCtrl() {
|
||||
internalName = "SmallPreview" @ %i;
|
||||
Extent = "108 81";
|
||||
bitmap = "art/gui/no-preview";
|
||||
command = "ChooseLevelWindow.previewSelected(ChooseLevelWindow->SmallPreviews->SmallPreview" @ %i @ ");";
|
||||
};
|
||||
|
||||
ChooseLevelWindow->SmallPreviews.add(%preview);
|
||||
|
||||
// Set this small preview visible
|
||||
if (%i >= 5)
|
||||
%preview.setVisible(false);
|
||||
|
||||
// Set the level index
|
||||
%preview.levelIndex = %i;
|
||||
|
||||
// Get the name
|
||||
%name = getField(CL_levelList.getRowText(%i), 0);
|
||||
|
||||
%preview.levelName = %name;
|
||||
|
||||
%file = getField(CL_levelList.getRowText(%i), 1);
|
||||
|
||||
// Find the preview image
|
||||
%levelPreview = filePath(%file) @ "/" @ fileBase(%file) @ "_preview";
|
||||
|
||||
// Test against all of the different image formats
|
||||
// This should probably be moved into an engine function
|
||||
if (isFile(%levelPreview @ ".png") ||
|
||||
isFile(%levelPreview @ ".jpg") ||
|
||||
isFile(%levelPreview @ ".bmp") ||
|
||||
isFile(%levelPreview @ ".gif") ||
|
||||
isFile(%levelPreview @ ".jng") ||
|
||||
isFile(%levelPreview @ ".mng") ||
|
||||
isFile(%levelPreview @ ".tga"))
|
||||
{
|
||||
%preview.setBitmap(%levelPreview);
|
||||
}
|
||||
|
||||
// Get the description
|
||||
%desc = getField(CL_levelList.getRowText(%i), 2);
|
||||
|
||||
%preview.levelDesc = %desc;
|
||||
}
|
||||
|
||||
ChooseLevelWindow->SmallPreviews.firstVisible = -1;
|
||||
ChooseLevelWindow->SmallPreviews.lastVisible = -1;
|
||||
|
||||
if (ChooseLevelWindow->SmallPreviews.getCount() > 0)
|
||||
{
|
||||
ChooseLevelWindow->SmallPreviews.firstVisible = 0;
|
||||
|
||||
if (ChooseLevelWindow->SmallPreviews.getCount() < 6)
|
||||
ChooseLevelWindow->SmallPreviews.lastVisible = ChooseLevelWindow->SmallPreviews.getCount() - 1;
|
||||
else
|
||||
ChooseLevelWindow->SmallPreviews.lastVisible = 4;
|
||||
}
|
||||
|
||||
if (ChooseLevelWindow->SmallPreviews.getCount() > 0)
|
||||
ChooseLevelWindow.previewSelected(ChooseLevelWindow->SmallPreviews.getObject(0));
|
||||
|
||||
// If we have 5 or less previews then hide our next/previous buttons
|
||||
// and resize to fill their positions
|
||||
if (ChooseLevelWindow->SmallPreviews.getCount() < 6)
|
||||
{
|
||||
ChooseLevelWindow->PreviousSmallPreviews.setVisible(false);
|
||||
ChooseLevelWindow->NextSmallPreviews.setVisible(false);
|
||||
|
||||
%previewPos = ChooseLevelWindow->SmallPreviews.getPosition();
|
||||
%previousPos = ChooseLevelWindow->PreviousSmallPreviews.getPosition();
|
||||
|
||||
%previewPosX = getWord(%previousPos, 0);
|
||||
%previewPosY = getWord(%previewPos, 1);
|
||||
|
||||
ChooseLevelWindow->SmallPreviews.setPosition(%previewPosX, %previewPosY);
|
||||
|
||||
ChooseLevelWindow->SmallPreviews.colSpacing = 10;//((getWord(NextSmallPreviews.getPosition(), 0)+11)-getWord(PreviousSmallPreviews.getPosition(), 0))/4;
|
||||
ChooseLevelWindow->SmallPreviews.refresh();
|
||||
}
|
||||
|
||||
if (ChooseLevelWindow->SmallPreviews.getCount() <= 1)
|
||||
{
|
||||
// Hide the small previews
|
||||
ChooseLevelWindow->SmallPreviews.setVisible(false);
|
||||
|
||||
// Shrink the ChooseLevelWindow so that we don't have a large blank space
|
||||
%extentX = getWord(ChooseLevelWindow.getExtent(), 0);
|
||||
%extentY = getWord(ChooseLevelWindow->SmallPreviews.getPosition(), 1);
|
||||
|
||||
ChooseLevelWIndow.setExtent(%extentX, %extentY);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Make sure the small previews are visible
|
||||
ChooseLevelWindow->SmallPreviews.setVisible(true);
|
||||
|
||||
%extentX = getWord(ChooseLevelWindow.getExtent(), 0);
|
||||
|
||||
%extentY = getWord(ChooseLevelWindow->SmallPreviews.getPosition(), 1);
|
||||
%extentY = %extentY + getWord(ChooseLevelWindow->SmallPreviews.getExtent(), 1);
|
||||
%extentY = %extentY + 9;
|
||||
|
||||
ChooseLevelWIndow.setExtent(%extentX, %extentY);
|
||||
}
|
||||
}
|
||||
|
||||
function ChooseLevelDlg::addMissionFile( %this, %file )
|
||||
{
|
||||
%levelName = fileBase(%file);
|
||||
%levelDesc = "A Torque level";
|
||||
|
||||
%LevelInfoObject = getLevelInfo(%file);
|
||||
|
||||
if (%LevelInfoObject != 0)
|
||||
{
|
||||
if(%LevelInfoObject.levelName !$= "")
|
||||
%levelName = %LevelInfoObject.levelName;
|
||||
else if(%LevelInfoObject.name !$= "")
|
||||
%levelName = %LevelInfoObject.name;
|
||||
|
||||
if (%LevelInfoObject.desc0 !$= "")
|
||||
%levelDesc = %LevelInfoObject.desc0;
|
||||
|
||||
%LevelInfoObject.delete();
|
||||
}
|
||||
|
||||
CL_levelList.addRow( CL_levelList.rowCount(), %levelName TAB %file TAB %levelDesc );
|
||||
}
|
||||
|
||||
function ChooseLevelDlg::onSleep( %this )
|
||||
{
|
||||
// This is set from the outside, only stays true for a single wake/sleep
|
||||
// cycle.
|
||||
%this.launchInEditor = false;
|
||||
}
|
||||
|
||||
function ChooseLevelWindow::previewSelected(%this, %preview)
|
||||
{
|
||||
// Set the selected level
|
||||
if (isObject(%preview) && %preview.levelIndex !$= "")
|
||||
CL_levelList.setSelectedRow(%preview.levelIndex);
|
||||
else
|
||||
CL_levelList.setSelectedRow(-1);
|
||||
|
||||
// Set the large preview image
|
||||
if (isObject(%preview) && %preview.bitmap !$= "")
|
||||
%this->CurrentPreview.setBitmap(%preview.bitmap);
|
||||
else
|
||||
%this->CurrentPreview.setBitmap("art/gui/no-preview");
|
||||
|
||||
// Set the current level name
|
||||
if (isObject(%preview) && %preview.levelName !$= "")
|
||||
%this->LevelName.setText(%preview.levelName);
|
||||
else
|
||||
%this->LevelName.setText("Level");
|
||||
|
||||
// Set the current level description
|
||||
if (isObject(%preview) && %preview.levelDesc !$= "")
|
||||
%this->LevelDescription.setText(%preview.levelDesc);
|
||||
else
|
||||
%this->LevelDescription.setText("A Torque Level");
|
||||
}
|
||||
|
||||
function ChooseLevelWindow::previousPreviews(%this)
|
||||
{
|
||||
%prevHiddenIdx = %this->SmallPreviews.firstVisible - 1;
|
||||
|
||||
if (%prevHiddenIdx < 0)
|
||||
return;
|
||||
|
||||
%lastVisibleIdx = %this->SmallPreviews.lastVisible;
|
||||
|
||||
if (%lastVisibleIdx >= %this->SmallPreviews.getCount())
|
||||
return;
|
||||
|
||||
%prevHiddenObj = %this->SmallPreviews.getObject(%prevHiddenIdx);
|
||||
%lastVisibleObj = %this->SmallPreviews.getObject(%lastVisibleIdx);
|
||||
|
||||
if (isObject(%prevHiddenObj) && isObject(%lastVisibleObj))
|
||||
{
|
||||
%this->SmallPreviews.firstVisible--;
|
||||
%this->SmallPreviews.lastVisible--;
|
||||
|
||||
%prevHiddenObj.setVisible(true);
|
||||
%lastVisibleObj.setVisible(false);
|
||||
}
|
||||
}
|
||||
|
||||
function ChooseLevelWindow::nextPreviews(%this)
|
||||
{
|
||||
%firstVisibleIdx = %this->SmallPreviews.firstVisible;
|
||||
|
||||
if (%firstVisibleIdx < 0)
|
||||
return;
|
||||
|
||||
%firstHiddenIdx = %this->SmallPreviews.lastVisible + 1;
|
||||
|
||||
if (%firstHiddenIdx >= %this->SmallPreviews.getCount())
|
||||
return;
|
||||
|
||||
%firstVisibleObj = %this->SmallPreviews.getObject(%firstVisibleIdx);
|
||||
%firstHiddenObj = %this->SmallPreviews.getObject(%firstHiddenIdx);
|
||||
|
||||
if (isObject(%firstVisibleObj) && isObject(%firstHiddenObj))
|
||||
{
|
||||
%this->SmallPreviews.firstVisible++;
|
||||
%this->SmallPreviews.lastVisible++;
|
||||
|
||||
%firstVisibleObj.setVisible(false);
|
||||
%firstHiddenObj.setVisible(true);
|
||||
}
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
function getLevelInfo( %missionFile )
|
||||
{
|
||||
%file = new FileObject();
|
||||
|
||||
%LevelInfoObject = "";
|
||||
|
||||
if ( %file.openForRead( %missionFile ) ) {
|
||||
%inInfoBlock = false;
|
||||
|
||||
while ( !%file.isEOF() ) {
|
||||
%line = %file.readLine();
|
||||
%line = trim( %line );
|
||||
|
||||
if( %line $= "new ScriptObject(LevelInfo) {" )
|
||||
%inInfoBlock = true;
|
||||
else if( %line $= "new LevelInfo(theLevelInfo) {" )
|
||||
%inInfoBlock = true;
|
||||
else if( %inInfoBlock && %line $= "};" ) {
|
||||
%inInfoBlock = false;
|
||||
%LevelInfoObject = %LevelInfoObject @ %line;
|
||||
break;
|
||||
}
|
||||
|
||||
if( %inInfoBlock )
|
||||
%LevelInfoObject = %LevelInfoObject @ %line @ " ";
|
||||
}
|
||||
|
||||
%file.close();
|
||||
}
|
||||
%file.delete();
|
||||
|
||||
if( %LevelInfoObject !$= "" )
|
||||
{
|
||||
%LevelInfoObject = "%LevelInfoObject = " @ %LevelInfoObject;
|
||||
eval( %LevelInfoObject );
|
||||
|
||||
return %LevelInfoObject;
|
||||
}
|
||||
|
||||
// Didn't find our LevelInfo
|
||||
return 0;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue