1,202 modules/Sandbox/1/scripts/toolbox.cs 100644 → 100755
@@ -1,601 +1,601 @@
//-----------------------------------------------------------------------------
// Copyright (c) 2013 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.
//-----------------------------------------------------------------------------

$toyAllCategoryIndex = 1;
$defaultToySelected = false;

//-----------------------------------------------------------------------------

function ToyCategorySelectList::onSelect(%this)
{
// Fetch the index.
%index = %this.currentToyCategory;

$defaultToySelected = false;

ToyListArray.initialize(%index);
ToyListScroller.computeSizes();
ToyListScroller.scrollToTop();

// Unload the active toy.
unloadToy();

// Flag as the default toy selected.
if ($defaultToySelected)
{
loadToy($defaultModuleID);
}
else
{
if ( ToyListArray.getCount() > 0 )
{
%firstToyButton = ToyListArray.getObject(0);
if (isObject(%firstToyButton))
%firstToyButton.performSelect();
}
}
}

//-----------------------------------------------------------------------------

function ToyCategorySelectList::initialize(%this)
{
%this.toyCategories[$toyAllCategoryIndex] = "All";
%this.toyCategories[$toyAllCategoryIndex+1] = "Physics";
%this.toyCategories[$toyAllCategoryIndex+2] = "Features";
%this.toyCategories[$toyAllCategoryIndex+3] = "Stress Testing";
%this.toyCategories[$toyAllCategoryIndex+4] = "Fun and Games";
%this.toyCategories[$toyAllCategoryIndex+5] = "Custom";
%this.maxToyCategories = $toyAllCategoryIndex + 6;

// Set the "All" category as the default.
// NOTE: This is important to use so that the user-configurable default toy
// can be selected at start-up.
%this.currentToyCategory = $toyAllCategoryIndex;

%this.setText("All");
%this.onSelect();
}

//-----------------------------------------------------------------------------

function ToyCategorySelectList::nextCategory(%this)
{
if (%this.currentToyCategory >= %this.maxToyCategories)
return;

%this.currentToyCategory++;

%text = %this.toyCategories[%this.currentToyCategory];
%this.setText(%text);
%this.onSelect();
}

//-----------------------------------------------------------------------------

function ToyCategorySelectList::previousCategory(%this)
{
if (%this.currentToyCategory <= $toyAllCategoryIndex)
return;

%this.currentToyCategory--;

%text = %this.toyCategories[%this.currentToyCategory];
%this.setText(%text);
%this.onSelect();
}

//-----------------------------------------------------------------------------

function initializeToolbox()
{
// Populate the stock colors.
%colorCount = getStockColorCount();
for ( %i = 0; %i < %colorCount; %i++ )
{
// Fetch stock color name.
%colorName = getStockColorName(%i);

// Add to the list.
BackgroundColorSelectList.add( getStockColorName(%i), %i );

// Select the color if it's the default one.
if ( %colorName $= $pref::Sandbox::defaultBackgroundColor )
BackgroundColorSelectList.setSelected( %i );
}
BackgroundColorSelectList.sort();

ToyCategorySelectList.initialize();

// Is this on the desktop?
if ( $platform $= "windows" || $platform $= "macos" )
{
// Yes, so make the controls screen controls visible.
ResolutionSelectLabel.Visible = true;
ResolutionSelectList.Visible = true;
FullscreenOptionLabel.Visible = true;
FullscreenOptionButton.Visible = true;

// Fetch the active resolution.
%activeResolution = getRes();
%activeWidth = getWord(%activeResolution, 0);
%activeHeight = getWord(%activeResolution, 1);
%activeBpp = getWord(%activeResolution, 2);

// Fetch the resolutions.
%resolutionList = getResolutionList( $pref::Video::displayDevice );
%resolutionCount = getWordCount( %resolutionList ) / 3;
%inputIndex = 0;
%outputIndex = 0;
for( %i = 0; %i < %resolutionCount; %i++ )
{
// Fetch the resolution entry.
%width = getWord( %resolutionList, %inputIndex );
%height = getWord( %resolutionList, %inputIndex+1 );
%bpp = getWord( %resolutionList, %inputIndex+2 );
%inputIndex += 3;

// Skip the 16-bit ones.
if ( %bpp == 16 )
continue;

// Store the resolution.
$sandboxResolutions[%outputIndex] = %width SPC %height SPC %bpp;

// Add to the list.
ResolutionSelectList.add( %width @ "x" @ %height SPC "(" @ %bpp @ ")", %outputIndex );

// Select the resolution if it's the default one.
if ( %width == %activeWidth && %height == %activeHeight && %bpp == %activeBpp )
ResolutionSelectList.setSelected( %outputIndex );

%outputIndex++;
}
}

// Configure the main overlay.
SandboxWindow.add(MainOverlay);
%horizPosition = getWord(SandboxWindow.Extent, 0) - getWord(MainOverlay.Extent, 0);
%verticalPosition = getWord(SandboxWindow.Extent, 1) - getWord(MainOverlay.Extent, 1);
MainOverlay.position = %horizPosition SPC %verticalPosition;
}

//-----------------------------------------------------------------------------

function toggleToolbox(%make)
{
// Finish if being released.
if ( !%make )
return;

// Finish if the console is awake.
if ( ConsoleDialog.isAwake() )
return;

// Is the toolbox awake?
if ( ToolboxDialog.isAwake() )
{
// Yes, so deactivate it.
if ( $enableDirectInput )
activateKeyboard();
Canvas.popDialog(ToolboxDialog);
MainOverlay.setVisible(1);
return;
}

// Activate it.
if ( $enableDirectInput )
deactivateKeyboard();

MainOverlay.setVisible(0);
Canvas.pushDialog(ToolboxDialog);
}

//-----------------------------------------------------------------------------

function BackgroundColorSelectList::onSelect(%this)
{
// Fetch the index.
$activeBackgroundColor = %this.getSelected();

// Finish if the sandbox scene is not available.
if ( !isObject(SandboxScene) )
return;

// Set the scene color.
Canvas.BackgroundColor = getStockColorName($activeBackgroundColor);
Canvas.UseBackgroundColor = true;
}

//-----------------------------------------------------------------------------

function ResolutionSelectList::onSelect(%this)
{
// Finish if the sandbox scene is not available.
if ( !isObject(SandboxScene) )
return;

// Fetch the index.
%index = %this.getSelected();

// Fetch resolution.
%resolution = $sandboxResolutions[%index];

// Set the screen mode.
setScreenMode( GetWord( %resolution , 0 ), GetWord( %resolution, 1 ), GetWord( %resolution, 2 ), $pref::Video::fullScreen );
}

//-----------------------------------------------------------------------------

function PauseSceneModeButton::onClick(%this)
{
// Sanity!
if ( !isObject(SandboxScene) )
{
error( "Cannot pause/unpause the Sandbox scene as it does not exist." );
return;
}

// Toggle the scene pause.
SandboxScene.setScenePause( !SandboxScene.getScenePause() );
}

//-----------------------------------------------------------------------------

function ReloadToyOverlayButton::onClick(%this)
{
// Finish if no toy is loaded.
if ( !isObject(Sandbox.ActiveToy) )
return;

// Reset custom controls.
resetCustomControls();

// Reload the toy.
loadToy( Sandbox.ActiveToy );
}

//-----------------------------------------------------------------------------

function RestartToyOverlayButton::onClick(%this)
{
// Finish if no toy is loaded.
if ( !isObject(Sandbox.ActiveToy) )
return;

// Reset the toy.
if ( Sandbox.ActiveToy.ScopeSet.isMethod("reset") )
Sandbox.ActiveToy.ScopeSet.reset();
}

//-----------------------------------------------------------------------------

function updateToolboxOptions()
{
// Finish if the sandbox scene is not available.
if ( !isObject(SandboxScene) )
return;

// Set the scene color.
Canvas.BackgroundColor = getStockColorName($activeBackgroundColor);
Canvas.UseBackgroundColor = true;

// Set option.
if ( $pref::Sandbox::metricsOption )
SandboxScene.setDebugOn( "metrics" );
else
SandboxScene.setDebugOff( "metrics" );

// Set option.
if ( $pref::Sandbox::fpsmetricsOption )
SandboxScene.setDebugOn( "fps" );
else
SandboxScene.setDebugOff( "fps" );

// Set option.
if ( $pref::Sandbox::controllersOption )
SandboxScene.setDebugOn( "controllers" );
else
SandboxScene.setDebugOff( "controllers" );

// Set option.
if ( $pref::Sandbox::jointsOption )
SandboxScene.setDebugOn( "joints" );
else
SandboxScene.setDebugOff( "joints" );

// Set option.
if ( $pref::Sandbox::wireframeOption )
SandboxScene.setDebugOn( "wireframe" );
else
SandboxScene.setDebugOff( "wireframe" );

// Set option.
if ( $pref::Sandbox::aabbOption )
SandboxScene.setDebugOn( "aabb" );
else
SandboxScene.setDebugOff( "aabb" );

// Set option.
if ( $pref::Sandbox::oobbOption )
SandboxScene.setDebugOn( "oobb" );
else
SandboxScene.setDebugOff( "oobb" );

// Set option.
if ( $pref::Sandbox::sleepOption )
SandboxScene.setDebugOn( "sleep" );
else
SandboxScene.setDebugOff( "sleep" );

// Set option.
if ( $pref::Sandbox::collisionOption )
SandboxScene.setDebugOn( "collision" );
else
SandboxScene.setDebugOff( "collision" );

// Set option.
if ( $pref::Sandbox::positionOption )
SandboxScene.setDebugOn( "position" );
else
SandboxScene.setDebugOff( "position" );

// Set option.
if ( $pref::Sandbox::sortOption )
SandboxScene.setDebugOn( "sort" );
else
SandboxScene.setDebugOff( "sort" );

// Set the options check-boxe.
MetricsOptionCheckBox.setStateOn( $pref::Sandbox::metricsOption );
FpsMetricsOptionCheckBox.setStateOn( $pref::Sandbox::fpsmetricsOption );
ControllersOptionCheckBox.setStateOn( $pref::Sandbox::controllersOption );
JointsOptionCheckBox.setStateOn( $pref::Sandbox::jointsOption );
WireframeOptionCheckBox.setStateOn( $pref::Sandbox::wireframeOption );
AABBOptionCheckBox.setStateOn( $pref::Sandbox::aabbOption );
OOBBOptionCheckBox.setStateOn( $pref::Sandbox::oobbOption );
SleepOptionCheckBox.setStateOn( $pref::Sandbox::sleepOption );
CollisionOptionCheckBox.setStateOn( $pref::Sandbox::collisionOption );
PositionOptionCheckBox.setStateOn( $pref::Sandbox::positionOption );
SortOptionCheckBox.setStateOn( $pref::Sandbox::sortOption );
BatchOptionCheckBox.setStateOn( SandboxScene.getBatchingEnabled() );

// Is this on the desktop?
//if ( $platform $= "windows" || $platform $= "macos" )
if ( $platform !$= "iOS" )
{
// Set the fullscreen check-box.
FullscreenOptionButton.setStateOn( $pref::Video::fullScreen );

// Set the full-screen mode appropriately.
if ( isFullScreen() != $pref::Video::fullScreen )
toggleFullScreen();
}
}

//-----------------------------------------------------------------------------

function setFullscreenOption( %flag )
{
$pref::Video::fullScreen = %flag;
updateToolboxOptions();
}

//-----------------------------------------------------------------------------

function setMetricsOption( %flag )
{
$pref::Sandbox::metricsOption = %flag;
updateToolboxOptions();
}

//-----------------------------------------------------------------------------

function setFPSMetricsOption( %flag )
{
$pref::Sandbox::fpsmetricsOption = %flag;
updateToolboxOptions();
}

//-----------------------------------------------------------------------------

function setMetricsOption( %flag )
{
$pref::Sandbox::metricsOption = %flag;
updateToolboxOptions();
}

//-----------------------------------------------------------------------------

function setControllersOption( %flag )
{
$pref::Sandbox::controllersOption = %flag;
updateToolboxOptions();
}

//-----------------------------------------------------------------------------

function setJointsOption( %flag )
{
$pref::Sandbox::jointsOption = %flag;
updateToolboxOptions();
}

//-----------------------------------------------------------------------------

function setWireframeOption( %flag )
{
$pref::Sandbox::wireframeOption = %flag;
updateToolboxOptions();
}

//-----------------------------------------------------------------------------

function setAABBOption( %flag )
{
$pref::Sandbox::aabbOption = %flag;
updateToolboxOptions();
}

//-----------------------------------------------------------------------------

function setOOBBOption( %flag )
{
$pref::Sandbox::oobbOption = %flag;
updateToolboxOptions();
}

//-----------------------------------------------------------------------------

function setSleepOption( %flag )
{
$pref::Sandbox::sleepOption = %flag;
updateToolboxOptions();
}

//-----------------------------------------------------------------------------

function setCollisionOption( %flag )
{
$pref::Sandbox::collisionOption = %flag;
updateToolboxOptions();
}

//-----------------------------------------------------------------------------

function setPositionOption( %flag )
{
$pref::Sandbox::positionOption = %flag;
updateToolboxOptions();
}

//-----------------------------------------------------------------------------

function setSortOption( %flag )
{
$pref::Sandbox::sortOption = %flag;
updateToolboxOptions();
}

//-----------------------------------------------------------------------------

function ToyListScroller::scrollToNext(%this)
{
%currentScroll = %this.getScrollPositionY();
%currentScroll += 85;
%this.setScrollPosition(0, %currentScroll);
}

//-----------------------------------------------------------------------------

function ToyListScroller::scrollToPrevious(%this)
{
%currentScroll = %this.getScrollPositionY();
%currentScroll -= 85;
%this.setScrollPosition(0, %currentScroll);
}

//-----------------------------------------------------------------------------

function ToyListArray::initialize(%this, %index)
{
%this.clear();
%currentExtent = %this.extent;
%newExtent = getWord(%currentExtent, 0) SPC "20";
%this.Extent = %newExtent;

// Fetch the toy count.
%toyCount = SandboxToys.getCount();

// Populate toys in the selected category.
for ( %toyIndex = 0; %toyIndex < %toyCount; %toyIndex++ )
{
// Fetch the toy module.
%moduleDefinition = SandboxToys.getObject( %toyIndex );

// Skip the toy module if the "all" category is not selected and if the toy is not in the selected category.
if ( %index != $toyAllCategoryIndex && %moduleDefinition.ToyCategoryIndex != %index )
continue;

// Fetch the module version.
%versionId = %moduleDefinition.versionId;

// Format module title so that version#1 doesn't show version but all other versions do.
if ( %versionId == 1 )
%moduleTitle = %moduleDefinition.moduleId;
else
%moduleTitle = %moduleDefinition.moduleId SPC "(v" @ %moduleDefinition.versionId @ ")";

// Add the toy GUI list.
%this.addToyButton(%moduleTitle, %moduleDefinition);

// Select the toy if it's the default and we've not selected a toy yet.
if (!$defaultToySelected && %moduleDefinition.moduleId $= $pref::Sandbox::defaultToyId && %moduleDefinition.versionId == $pref::Sandbox::defaultToyVersionId )
{
$defaultToySelected = true;
$defaultModuleID = %moduleDefinition.getId();
}
}
}

//-----------------------------------------------------------------------------

function ToyListArray::addToyButton(%this, %moduleTitle, %moduleDefintion)
{
%button = new GuiButtonCtrl()
{
canSaveDynamicFields = "0";
HorizSizing = "relative";
class = "ToySelectButton";
VertSizing = "relative";
isContainer = "0";
Profile = "BlueButtonProfile";
toolTipProfile = "GuiToolTipProfile";
toolTip = %moduleDefintion.Description;
Position = "0 0";
Extent = "160 80";
Visible = "1";
toy = %moduleDefintion.getId();
isContainer = "0";
Active = "1";
text = %moduleTitle;
groupNum = "-1";
buttonType = "PushButton";
useMouseEvents = "0";
};

%button.command = %button @ ".performSelect();";

%this.add(%button);
}

//-----------------------------------------------------------------------------

function ToySelectButton::performSelect(%this)
{
// Finish if already selected.
if ( %this.toy == Sandbox.ActiveToy )
return;

// Load the selected toy.
loadToy( %this.toy );
}
//-----------------------------------------------------------------------------
// Copyright (c) 2013 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.
//-----------------------------------------------------------------------------

$toyAllCategoryIndex = 1;
$defaultToySelected = false;

//-----------------------------------------------------------------------------

function ToyCategorySelectList::onSelect(%this)
{
// Fetch the index.
%index = %this.currentToyCategory;

$defaultToySelected = false;

ToyListArray.initialize(%index);
ToyListScroller.computeSizes();
ToyListScroller.scrollToTop();

// Unload the active toy.
unloadToy();

// Flag as the default toy selected.
if ($defaultToySelected)
{
loadToy($defaultModuleID);
}
else
{
if ( ToyListArray.getCount() > 0 )
{
%firstToyButton = ToyListArray.getObject(0);
if (isObject(%firstToyButton))
%firstToyButton.performSelect();
}
}
}

//-----------------------------------------------------------------------------

function ToyCategorySelectList::initialize(%this)
{
%this.toyCategories[$toyAllCategoryIndex] = "All";
%this.toyCategories[$toyAllCategoryIndex+1] = "Physics";
%this.toyCategories[$toyAllCategoryIndex+2] = "Features";
%this.toyCategories[$toyAllCategoryIndex+3] = "Stress Testing";
%this.toyCategories[$toyAllCategoryIndex+4] = "Fun and Games";
%this.toyCategories[$toyAllCategoryIndex+5] = "Custom";
%this.maxToyCategories = $toyAllCategoryIndex + 6;

// Set the "All" category as the default.
// NOTE: This is important to use so that the user-configurable default toy
// can be selected at start-up.
%this.currentToyCategory = $toyAllCategoryIndex;

%this.setText("All");
%this.onSelect();
}

//-----------------------------------------------------------------------------

function ToyCategorySelectList::nextCategory(%this)
{
if (%this.currentToyCategory >= %this.maxToyCategories)
return;

%this.currentToyCategory++;

%text = %this.toyCategories[%this.currentToyCategory];
%this.setText(%text);
%this.onSelect();
}

//-----------------------------------------------------------------------------

function ToyCategorySelectList::previousCategory(%this)
{
if (%this.currentToyCategory <= $toyAllCategoryIndex)
return;

%this.currentToyCategory--;

%text = %this.toyCategories[%this.currentToyCategory];
%this.setText(%text);
%this.onSelect();
}

//-----------------------------------------------------------------------------

function initializeToolbox()
{
// Populate the stock colors.
%colorCount = getStockColorCount();
for ( %i = 0; %i < %colorCount; %i++ )
{
// Fetch stock color name.
%colorName = getStockColorName(%i);

// Add to the list.
BackgroundColorSelectList.add( getStockColorName(%i), %i );

// Select the color if it's the default one.
if ( %colorName $= $pref::Sandbox::defaultBackgroundColor )
BackgroundColorSelectList.setSelected( %i );
}
BackgroundColorSelectList.sort();

ToyCategorySelectList.initialize();

// Is this on the desktop?
if ( $platform $= "windows" || $platform $= "macos" )
{
// Yes, so make the controls screen controls visible.
ResolutionSelectLabel.Visible = true;
ResolutionSelectList.Visible = true;
FullscreenOptionLabel.Visible = true;
FullscreenOptionButton.Visible = true;

// Fetch the active resolution.
%activeResolution = getRes();
%activeWidth = getWord(%activeResolution, 0);
%activeHeight = getWord(%activeResolution, 1);
%activeBpp = getWord(%activeResolution, 2);

// Fetch the resolutions.
%resolutionList = getResolutionList( $pref::Video::displayDevice );
%resolutionCount = getWordCount( %resolutionList ) / 3;
%inputIndex = 0;
%outputIndex = 0;
for( %i = 0; %i < %resolutionCount; %i++ )
{
// Fetch the resolution entry.
%width = getWord( %resolutionList, %inputIndex );
%height = getWord( %resolutionList, %inputIndex+1 );
%bpp = getWord( %resolutionList, %inputIndex+2 );
%inputIndex += 3;

// Skip the 16-bit ones.
if ( %bpp == 16 )
continue;

// Store the resolution.
$sandboxResolutions[%outputIndex] = %width SPC %height SPC %bpp;

// Add to the list.
ResolutionSelectList.add( %width @ "x" @ %height SPC "(" @ %bpp @ ")", %outputIndex );

// Select the resolution if it's the default one.
if ( %width == %activeWidth && %height == %activeHeight && %bpp == %activeBpp )
ResolutionSelectList.setSelected( %outputIndex );

%outputIndex++;
}
}

// Configure the main overlay.
SandboxWindow.add(MainOverlay);
%horizPosition = getWord(SandboxWindow.Extent, 0) - getWord(MainOverlay.Extent, 0);
%verticalPosition = getWord(SandboxWindow.Extent, 1) - getWord(MainOverlay.Extent, 1);
MainOverlay.position = %horizPosition SPC %verticalPosition;
}

//-----------------------------------------------------------------------------

function toggleToolbox(%make)
{
// Finish if being released.
if ( !%make )
return;

// Finish if the console is awake.
if ( ConsoleDialog.isAwake() )
return;

// Is the toolbox awake?
if ( ToolboxDialog.isAwake() )
{
// Yes, so deactivate it.
if ( $enableDirectInput )
activateKeyboard();
Canvas.popDialog(ToolboxDialog);
MainOverlay.setVisible(1);
return;
}

// Activate it.
if ( $enableDirectInput )
deactivateKeyboard();

MainOverlay.setVisible(0);
Canvas.pushDialog(ToolboxDialog);
}

//-----------------------------------------------------------------------------

function BackgroundColorSelectList::onSelect(%this)
{
// Fetch the index.
$activeBackgroundColor = %this.getSelected();

// Finish if the sandbox scene is not available.
if ( !isObject(SandboxScene) )
return;

// Set the scene color.
SandboxScene.BackgroundColor = getStockColorName($activeBackgroundColor);
SandboxScene.UseBackgroundColor = true;
}

//-----------------------------------------------------------------------------

function ResolutionSelectList::onSelect(%this)
{
// Finish if the sandbox scene is not available.
if ( !isObject(SandboxScene) )
return;

// Fetch the index.
%index = %this.getSelected();

// Fetch resolution.
%resolution = $sandboxResolutions[%index];

// Set the screen mode.
setScreenMode( GetWord( %resolution , 0 ), GetWord( %resolution, 1 ), GetWord( %resolution, 2 ), $pref::Video::fullScreen );
}

//-----------------------------------------------------------------------------

function PauseSceneModeButton::onClick(%this)
{
// Sanity!
if ( !isObject(SandboxScene) )
{
error( "Cannot pause/unpause the Sandbox scene as it does not exist." );
return;
}

// Toggle the scene pause.
SandboxScene.setScenePause( !SandboxScene.getScenePause() );
}

//-----------------------------------------------------------------------------

function ReloadToyOverlayButton::onClick(%this)
{
// Finish if no toy is loaded.
if ( !isObject(Sandbox.ActiveToy) )
return;

// Reset custom controls.
resetCustomControls();

// Reload the toy.
loadToy( Sandbox.ActiveToy );
}

//-----------------------------------------------------------------------------

function RestartToyOverlayButton::onClick(%this)
{
// Finish if no toy is loaded.
if ( !isObject(Sandbox.ActiveToy) )
return;

// Reset the toy.
if ( Sandbox.ActiveToy.ScopeSet.isMethod("reset") )
Sandbox.ActiveToy.ScopeSet.reset();
}

//-----------------------------------------------------------------------------

function updateToolboxOptions()
{
// Finish if the sandbox scene is not available.
if ( !isObject(SandboxScene) )
return;

// Set the scene color.
SandboxScene.BackgroundColor = getStockColorName($activeBackgroundColor);
SandboxScene.UseBackgroundColor = true;

// Set option.
if ( $pref::Sandbox::metricsOption )
SandboxScene.setDebugOn( "metrics" );
else
SandboxScene.setDebugOff( "metrics" );

// Set option.
if ( $pref::Sandbox::fpsmetricsOption )
SandboxScene.setDebugOn( "fps" );
else
SandboxScene.setDebugOff( "fps" );

// Set option.
if ( $pref::Sandbox::controllersOption )
SandboxScene.setDebugOn( "controllers" );
else
SandboxScene.setDebugOff( "controllers" );

// Set option.
if ( $pref::Sandbox::jointsOption )
SandboxScene.setDebugOn( "joints" );
else
SandboxScene.setDebugOff( "joints" );

// Set option.
if ( $pref::Sandbox::wireframeOption )
SandboxScene.setDebugOn( "wireframe" );
else
SandboxScene.setDebugOff( "wireframe" );

// Set option.
if ( $pref::Sandbox::aabbOption )
SandboxScene.setDebugOn( "aabb" );
else
SandboxScene.setDebugOff( "aabb" );

// Set option.
if ( $pref::Sandbox::oobbOption )
SandboxScene.setDebugOn( "oobb" );
else
SandboxScene.setDebugOff( "oobb" );

// Set option.
if ( $pref::Sandbox::sleepOption )
SandboxScene.setDebugOn( "sleep" );
else
SandboxScene.setDebugOff( "sleep" );

// Set option.
if ( $pref::Sandbox::collisionOption )
SandboxScene.setDebugOn( "collision" );
else
SandboxScene.setDebugOff( "collision" );

// Set option.
if ( $pref::Sandbox::positionOption )
SandboxScene.setDebugOn( "position" );
else
SandboxScene.setDebugOff( "position" );

// Set option.
if ( $pref::Sandbox::sortOption )
SandboxScene.setDebugOn( "sort" );
else
SandboxScene.setDebugOff( "sort" );

// Set the options check-boxe.
MetricsOptionCheckBox.setStateOn( $pref::Sandbox::metricsOption );
FpsMetricsOptionCheckBox.setStateOn( $pref::Sandbox::fpsmetricsOption );
ControllersOptionCheckBox.setStateOn( $pref::Sandbox::controllersOption );
JointsOptionCheckBox.setStateOn( $pref::Sandbox::jointsOption );
WireframeOptionCheckBox.setStateOn( $pref::Sandbox::wireframeOption );
AABBOptionCheckBox.setStateOn( $pref::Sandbox::aabbOption );
OOBBOptionCheckBox.setStateOn( $pref::Sandbox::oobbOption );
SleepOptionCheckBox.setStateOn( $pref::Sandbox::sleepOption );
CollisionOptionCheckBox.setStateOn( $pref::Sandbox::collisionOption );
PositionOptionCheckBox.setStateOn( $pref::Sandbox::positionOption );
SortOptionCheckBox.setStateOn( $pref::Sandbox::sortOption );
BatchOptionCheckBox.setStateOn( SandboxScene.getBatchingEnabled() );

// Is this on the desktop?
//if ( $platform $= "windows" || $platform $= "macos" )
if ( $platform !$= "iOS" )
{
// Set the fullscreen check-box.
FullscreenOptionButton.setStateOn( $pref::Video::fullScreen );

// Set the full-screen mode appropriately.
if ( isFullScreen() != $pref::Video::fullScreen )
toggleFullScreen();
}
}

//-----------------------------------------------------------------------------

function setFullscreenOption( %flag )
{
$pref::Video::fullScreen = %flag;
updateToolboxOptions();
}

//-----------------------------------------------------------------------------

function setMetricsOption( %flag )
{
$pref::Sandbox::metricsOption = %flag;
updateToolboxOptions();
}

//-----------------------------------------------------------------------------

function setFPSMetricsOption( %flag )
{
$pref::Sandbox::fpsmetricsOption = %flag;
updateToolboxOptions();
}

//-----------------------------------------------------------------------------

function setMetricsOption( %flag )
{
$pref::Sandbox::metricsOption = %flag;
updateToolboxOptions();
}

//-----------------------------------------------------------------------------

function setControllersOption( %flag )
{
$pref::Sandbox::controllersOption = %flag;
updateToolboxOptions();
}

//-----------------------------------------------------------------------------

function setJointsOption( %flag )
{
$pref::Sandbox::jointsOption = %flag;
updateToolboxOptions();
}

//-----------------------------------------------------------------------------

function setWireframeOption( %flag )
{
$pref::Sandbox::wireframeOption = %flag;
updateToolboxOptions();
}

//-----------------------------------------------------------------------------

function setAABBOption( %flag )
{
$pref::Sandbox::aabbOption = %flag;
updateToolboxOptions();
}

//-----------------------------------------------------------------------------

function setOOBBOption( %flag )
{
$pref::Sandbox::oobbOption = %flag;
updateToolboxOptions();
}

//-----------------------------------------------------------------------------

function setSleepOption( %flag )
{
$pref::Sandbox::sleepOption = %flag;
updateToolboxOptions();
}

//-----------------------------------------------------------------------------

function setCollisionOption( %flag )
{
$pref::Sandbox::collisionOption = %flag;
updateToolboxOptions();
}

//-----------------------------------------------------------------------------

function setPositionOption( %flag )
{
$pref::Sandbox::positionOption = %flag;
updateToolboxOptions();
}

//-----------------------------------------------------------------------------

function setSortOption( %flag )
{
$pref::Sandbox::sortOption = %flag;
updateToolboxOptions();
}

//-----------------------------------------------------------------------------

function ToyListScroller::scrollToNext(%this)
{
%currentScroll = %this.getScrollPositionY();
%currentScroll += 85;
%this.setScrollPosition(0, %currentScroll);
}

//-----------------------------------------------------------------------------

function ToyListScroller::scrollToPrevious(%this)
{
%currentScroll = %this.getScrollPositionY();
%currentScroll -= 85;
%this.setScrollPosition(0, %currentScroll);
}

//-----------------------------------------------------------------------------

function ToyListArray::initialize(%this, %index)
{
%this.clear();
%currentExtent = %this.extent;
%newExtent = getWord(%currentExtent, 0) SPC "20";
%this.Extent = %newExtent;

// Fetch the toy count.
%toyCount = SandboxToys.getCount();

// Populate toys in the selected category.
for ( %toyIndex = 0; %toyIndex < %toyCount; %toyIndex++ )
{
// Fetch the toy module.
%moduleDefinition = SandboxToys.getObject( %toyIndex );

// Skip the toy module if the "all" category is not selected and if the toy is not in the selected category.
if ( %index != $toyAllCategoryIndex && %moduleDefinition.ToyCategoryIndex != %index )
continue;

// Fetch the module version.
%versionId = %moduleDefinition.versionId;

// Format module title so that version#1 doesn't show version but all other versions do.
if ( %versionId == 1 )
%moduleTitle = %moduleDefinition.moduleId;
else
%moduleTitle = %moduleDefinition.moduleId SPC "(v" @ %moduleDefinition.versionId @ ")";

// Add the toy GUI list.
%this.addToyButton(%moduleTitle, %moduleDefinition);

// Select the toy if it's the default and we've not selected a toy yet.
if (!$defaultToySelected && %moduleDefinition.moduleId $= $pref::Sandbox::defaultToyId && %moduleDefinition.versionId == $pref::Sandbox::defaultToyVersionId )
{
$defaultToySelected = true;
$defaultModuleID = %moduleDefinition.getId();
}
}
}

//-----------------------------------------------------------------------------

function ToyListArray::addToyButton(%this, %moduleTitle, %moduleDefintion)
{
%button = new GuiButtonCtrl()
{
canSaveDynamicFields = "0";
HorizSizing = "relative";
class = "ToySelectButton";
VertSizing = "relative";
isContainer = "0";
Profile = "BlueButtonProfile";
toolTipProfile = "GuiToolTipProfile";
toolTip = %moduleDefintion.Description;
Position = "0 0";
Extent = "160 80";
Visible = "1";
toy = %moduleDefintion.getId();
isContainer = "0";
Active = "1";
text = %moduleTitle;
groupNum = "-1";
buttonType = "PushButton";
useMouseEvents = "0";
};

%button.command = %button @ ".performSelect();";

%this.add(%button);
}

//-----------------------------------------------------------------------------

function ToySelectButton::performSelect(%this)
{
// Finish if already selected.
if ( %this.toy == Sandbox.ActiveToy )
return;

// Load the selected toy.
loadToy( %this.toy );
}