Caught the main modules up to new module script file paradigm

Have initServer only get called when a server is actually started for the first time
Added utility method callGamemodeFunction to streamline exec'ing of gamemode function calls
Added onClientConnect gamemode function, called when the client establishes the connection
Added onInitialControlSet gamemode function, called when the client actively gains control in the game, to allow gamemodes to special override GUI settings or input commands
Cleaned up init'ng of the engine so stock UI module isn't required to trip configuration of the canvas
Added fallback so if nothing set the main content control for the UI after boot, we attempt to set the defined mainMenuGUI, on the chance nothing explicitly sets it on load
This commit is contained in:
Areloch 2019-09-02 16:13:24 -05:00
parent d720eb8ccd
commit 99cee7f32a
21 changed files with 358 additions and 386 deletions

View file

@ -1,7 +1,6 @@
function CoreModule::onCreate(%this)
{
// ----------------------------------------------------------------------------
// Initialize core sub system functionality such as audio, the Canvas, PostFX,
// rendermanager, light managers, etc.

View file

@ -12,17 +12,17 @@
// When a local game is started - a listen server - via calling StartGame() a server is created and then the client is
// connected to it via createAndConnectToLocalServer().
function Core_ClientServer::create( %this )
function Core_ClientServer::onCreate( %this )
{
echo("\n--------- Initializing Directory: scripts ---------");
exec( "./scripts/client/client.cs" );
exec( "./scripts/server/server.cs" );
$Game::MainScene = getScene(0);
initServer();
%dbList = new ArrayObject(DatablockFilesList);
new ArrayObject(DatablockFilesList);
$Game::firstTimeServerRun = true;
// Start up in either client, or dedicated server mode
if ($Server::Dedicated)
@ -35,7 +35,7 @@ function Core_ClientServer::create( %this )
}
}
function Core_ClientServer::destroy( %this )
function Core_ClientServer::onDestroy( %this )
{
// Ensure that we are disconnected and/or the server is destroyed.
// This prevents crashes due to the SceneGraph being deleted before

View file

@ -3,7 +3,7 @@
VersionId="1"
Description="Default module for the game."
ScriptFile="Core_ClientServer.cs"
CreateFunction="create"
DestroyFunction="destroy"
CreateFunction="onCreate"
DestroyFunction="onDestroy"
Group="Core">
</ModuleDefinition>

View file

@ -50,6 +50,9 @@ function GameConnection::initialControlSet(%this)
if (isObject(%playGUIName) && Canvas.getContent() != %playGUIName.getId())
Canvas.setContent(%playGUIName);
//We allow the gamemodes to step in and override the canvas setting, or do any special input overrides here
%hasGameMode = callGamemodeFunction("onInitialControlSet");
}
}

View file

@ -81,6 +81,8 @@ function GameConnection::onConnect( %this, %clientData )
%this.connectData = %clientData;
callGamemodeFunction("onClientConnect", %this);
$Server::PlayerCount++;
}
@ -151,33 +153,7 @@ function GameConnection::onDrop(%client, %reason)
if($missionRunning)
{
%hasGameMode = 0;
for(%i=0; %i < %activeSceneCount; %i++)
{
if(getScene(%i).gameModeName !$= "")
{
//if the scene defines a game mode, go ahead and envoke it here
if(isMethod(getScene(%i).gameModeName, "onClientLeaveGame"))
{
eval(getScene(%i).gameModeName @ "::onClientLeaveGame(" @ %client @ ");" );
%hasGameMode = 1;
}
}
}
//if none of our scenes have gamemodes, we need to kick off a default
if(%hasGameMode == 0)
{
%defaultModeName = ProjectSettings.value("Gameplay/GameModes/defaultModeName");
if(%defaultModeName !$= "")
{
if(isMethod(%defaultModeName, "onClientLeaveGame"))
{
eval(%defaultModeName @ "::onClientLeaveGame(" @ %client @ ");" );
%hasGameMode = 1;
}
}
}
%hasGameMode = callGamemodeFunction("onClientLeaveGame", %client);
}
removeFromServerGuidList( %client.guid );

View file

@ -150,33 +150,7 @@ function serverCmdMissionStartPhase3Ack(%client, %seq)
%activeSceneCount = getSceneCount();
%hasGameMode = 0;
for(%i=0; %i < %activeSceneCount; %i++)
{
if(getScene(%i).gameModeName !$= "")
{
//if the scene defines a game mode, go ahead and envoke it here
if(isMethod(getScene(%i).gameModeName, "onClientEnterGame"))
{
eval(getScene(%i).gameModeName @ "::onClientEnterGame(" @ %client @ ");" );
%hasGameMode = 1;
}
}
}
//if none of our scenes have gamemodes, we need to kick off a default
if(%hasGameMode == 0)
{
%defaultModeName = ProjectSettings.value("Gameplay/GameModes/defaultModeName");
if(%defaultModeName !$= "")
{
if(isMethod(%defaultModeName, "onClientEnterGame"))
{
eval(%defaultModeName @ "::onClientEnterGame(" @ %client @ ");" );
%hasGameMode = 1;
}
}
}
%hasGameMode = callGamemodeFunction("onClientEnterGame", %client);
//if that also failed, just spawn a camera
if(%hasGameMode == 0)

View file

@ -137,33 +137,7 @@ function loadMissionStage2()
// Go ahead and launch the game
%activeSceneCount = getSceneCount();
%hasGameMode = 0;
for(%i=0; %i < %activeSceneCount; %i++)
{
if(getScene(%i).gameModeName !$= "")
{
//if the scene defines a game mode, go ahead and envoke it here
if(isMethod(getScene(%i).gameModeName, "onMissionStart"))
{
eval(getScene(%i).gameModeName @ "::onMissionStart();" );
%hasGameMode = 1;
}
}
}
//if none of our scenes have gamemodes, we need to kick off a default
if(%hasGameMode == 0)
{
%defaultModeName = ProjectSettings.value("Gameplay/GameModes/defaultModeName");
if(%defaultModeName !$= "")
{
if(isMethod(%defaultModeName, "onMissionStart"))
{
eval(%defaultModeName @ "::onMissionStart();" );
%hasGameMode = 1;
}
}
}
%hasGameMode = callGamemodeFunction("onMissionStart");
}
function endMission()
@ -176,33 +150,7 @@ function endMission()
// Inform the game code we're done.
%activeSceneCount = getSceneCount();
%hasGameMode = 0;
for(%i=0; %i < %activeSceneCount; %i++)
{
if(getScene(%i).gameModeName !$= "")
{
//if the scene defines a game mode, go ahead and envoke it here
if(isMethod(getScene(%i).gameModeName, "onMissionEnded"))
{
eval(getScene(%i).gameModeName @ "::onMissionEnded();" );
%hasGameMode = 1;
}
}
}
//if none of our scenes have gamemodes, we need to kick off a default
if(%hasGameMode == 0)
{
%defaultModeName = ProjectSettings.value("Gameplay/GameModes/defaultModeName");
if(%defaultModeName !$= "")
{
if(isMethod(%defaultModeName, "onMissionEnded"))
{
eval(%defaultModeName @ "::onMissionEnded();" );
%hasGameMode = 1;
}
}
}
%hasGameMode = callGamemodeFunction("onMissionEnded");
// Inform the clients
for( %clientIndex = 0; %clientIndex < ClientGroup.getCount(); %clientIndex++ ) {
@ -235,31 +183,5 @@ function resetMission()
// Inform the game code we're resetting.
%activeSceneCount = getSceneCount();
%hasGameMode = 0;
for(%i=0; %i < %activeSceneCount; %i++)
{
if(getScene(%i).gameModeName !$= "")
{
//if the scene defines a game mode, go ahead and envoke it here
if(isMethod(getScene(%i).gameModeName, "onMissionReset"))
{
eval(getScene(%i).gameModeName @ "::onMissionReset(" @ %client @ ");" );
%hasGameMode = 1;
}
}
}
//if none of our scenes have gamemodes, we need to kick off a default
if(%hasGameMode == 0)
{
%defaultModeName = ProjectSettings.value("Gameplay/GameModes/defaultModeName");
if(%defaultModeName !$= "")
{
if(isMethod(%defaultModeName, "onMissionReset"))
{
eval(%defaultModeName @ "::onMissionReset(" @ %client @ ");" );
%hasGameMode = 1;
}
}
}
%hasGameMode = callGamemodeFunction("onMissionReset", %client);
}

View file

@ -126,6 +126,11 @@ function createAndConnectToLocalServer( %serverType, %level )
/// Specify the level to load on the server
function createServer(%serverType, %level)
{
if($Game::firstTimeServerRun == true)
{
initServer();
$Game::firstTimeServerRun = false;
}
// Increase the server session number. This is used to make sure we're
// working with the server session we think we are.
$Server::Session++;
@ -197,12 +202,8 @@ function onServerCreated()
physicsStartSimulation("server");
%cnt = DatablockFilesList.count();
loadDatablockFiles( DatablockFilesList, true );
%cnt = DatablockFilesList.count();
// Keep track of when the game started
$Game::StartTime = $Sim::Time;

View file

@ -20,4 +20,33 @@ function Core_Rendering::onCreate(%this)
function Core_Rendering::onDestroy(%this)
{
}
function Core_Rendering::initClient(%this)
{
// Start rendering and stuff.
initRenderManager();
initLightingSystems("Advanced Lighting");
//load prefs
%prefPath = getPrefpath();
if ( isFile( %prefPath @ "/clientPrefs.cs" ) )
exec( %prefPath @ "/clientPrefs.cs" );
else
exec("data/defaults.cs");
configureCanvas();
//Autodetect settings if it's our first time
if($pref::Video::autoDetect)
GraphicsMenu.Autodetect();
postFXInit();
closeSplashWindow();
// As we know at this point that the initial load is complete,
// we can hide any splash screen we have, and show the canvas.
// This keeps things looking nice, instead of having a blank window
Canvas.showWindow();
}

View file

@ -7,6 +7,7 @@ function Core_Utility::onCreate(%this)
exec("./scripts/gameObjectManagement.cs");
exec("./scripts/persistanceManagement.cs");
exec("./scripts/module.cs");
exec("./scripts/scene.cs");
}
function Core_Utility::onDestroy(%this)

View file

@ -0,0 +1,36 @@
function callGamemodeFunction(%gameModeFuncName, %data)
{
if(%data !$= "")
%data = "\""@%data@"\"";
%hasGameMode = 0;
for(%i=0; %i < %activeSceneCount; %i++)
{
if(getScene(%i).gameModeName !$= "")
{
//if the scene defines a game mode, go ahead and envoke it here
if(isMethod(getScene(%i).gameModeName, %gameModeFuncName))
{
eval(getScene(%i).gameModeName @ "::"@%gameModeFuncName@"("@%data@");" );
%hasGameMode = 1;
}
}
}
//if none of our scenes have gamemodes, we need to kick off a default
if(%hasGameMode == 0)
{
%defaultModeName = ProjectSettings.value("Gameplay/GameModes/defaultModeName");
if(%defaultModeName !$= "")
{
if(isMethod(%defaultModeName, %gameModeFuncName))
{
eval(%defaultModeName @ "::"@%gameModeFuncName@"("@%data@");" );
%hasGameMode = 1;
}
}
}
return %hasGameMode;
}

View file

@ -31,7 +31,7 @@ function ExampleModule::onDestroy(%this)
//Are called during the startup, shut down, and resetting of any and all active gamemodes, as informed by the loaded scenes
//when the game server is processed.
//These callbacks are activated in core/clientServer/scripts/server/levelLoad.cs
function FPSGameplay::initServer(%this)
function ExampleModule::initServer(%this)
{
//This script contains our ExampleGameMode logic
exec("./scripts/ExampleGamemodeScript.cs");

View file

@ -82,14 +82,10 @@ function ExampleGameMode::onGameDurationEnd()
ExampleGameMode::onMissionEnded();
}
//This is called when a client enters the game server. It's used to spawn a player object
//set up any client-specific properties such as saved configs, values, their name, etc
//These callbacks are activated in core/clientServer/scripts/server/levelDownload.cs
function ExampleGameMode::onClientEnterGame(%client)
//This is called to actually spawn a control object for the player to utilize
//A player character, spectator camera, etc.
function ExampleGameMode::spawnControlObject(%client)
{
//Set the player name based on the client's connection data
%client.setPlayerName(%client.connectData);
//In this example, we just spawn a camera
if (!isObject(%client.camera))
{
@ -116,6 +112,25 @@ function ExampleGameMode::onClientEnterGame(%client)
}
}
//This is called when the client has initially established a connection to the game server
//It's used for setting up anything ahead of time for the client, such as loading in client-passed
//config stuffs, saved data or the like that should be handled BEFORE the client has actually entered
//the game itself
function ExampleGameMode::onClientConnect(%client)
{
}
//This is called when a client enters the game server. It's used to spawn a player object
//set up any client-specific properties such as saved configs, values, their name, etc
//These callbacks are activated in core/clientServer/scripts/server/levelDownload.cs
function ExampleGameMode::onClientEnterGame(%client)
{
//Set the player name based on the client's connection data
%client.setPlayerName(%client.connectData);
ExampleGameMode::spawnControlObject(%client);
}
//This is called when the player leaves the game server. It's used to clean up anything that
//was spawned or setup for the client when it connected, in onClientEnterGame
//These callbacks are activated in core/clientServer/scripts/server/levelDownload.cs
@ -124,5 +139,12 @@ function ExampleGameMode::onClientLeaveGame(%client)
// Cleanup the camera
if (isObject(%client.camera))
%client.camera.delete();
}
//This is called when the player has connected and finaly setup is done and control is handed
//over to the client. It allows a point to special-case setting the client's canvas content
//(Such as a gamemode-specific GUI) or setting up gamemode-specific keybinds/control schemes
function ExampleGameMode::onInitialControlSet()
{
}

View file

@ -1,10 +1,19 @@
function Kork::onCreate(%this)
{
}
function Kork::onDestroy(%this)
{
}
function Kork::initServer(%this){}
function Kork::onCreateGameServer(%this){}
function Kork::onDestroyGameServer(%this){}
function Kork::initClient(%this){}
function Kork::onCreateClientConnection(%this){}
function Kork::onDestroyClientConnection(%this){}

View file

@ -1,10 +1,19 @@
function SpaceOrc::onCreate(%this)
{
}
function SpaceOrc::onDestroy(%this)
{
}
function SpaceOrc::initServer(%this){}
function SpaceOrc::onCreateGameServer(%this){}
function SpaceOrc::onDestroyGameServer(%this){}
function SpaceOrc::initClient(%this){}
function SpaceOrc::onCreateClientConnection(%this){}
function SpaceOrc::onDestroyClientConnection(%this){}

View file

@ -1,10 +1,19 @@
function StaticShapeTest::onCreate(%this)
{
}
function StaticShapeTest::onDestroy(%this)
{
}
function StaticShapeTest::initServer(%this){}
function StaticShapeTest::onCreateGameServer(%this){}
function StaticShapeTest::onDestroyGameServer(%this){}
function StaticShapeTest::initClient(%this){}
function StaticShapeTest::onCreateClientConnection(%this){}
function StaticShapeTest::onDestroyClientConnection(%this){}

View file

@ -1,14 +1,24 @@
function gameUI::create( %this )
function gameUI::onCreate(%this)
{
if (!$Server::Dedicated)
{
//guis
exec("./GUIs/playGui.gui");
exec("./GUIs/playGui.cs");
}
}
function gameUI::destroy( %this )
function gameUI::onDestroy(%this)
{
}
}
function gameUI::initServer(%this){}
function gameUI::onCreateGameServer(%this){}
function gameUI::onDestroyGameServer(%this){}
function gameUI::initClient(%this)
{
//guis
exec("./GUIs/playGui.gui");
exec("./GUIs/playGui.cs");
}
function gameUI::onCreateClientConnection(%this){}
function gameUI::onDestroyClientConnection(%this){}

View file

@ -12,24 +12,19 @@
// When a local game is started - a listen server - via calling StartGame() a server is created and then the client is
// connected to it via createAndConnectToLocalServer().
function UI::create( %this )
function UI::onCreate( %this )
{
if ($Server::Dedicated)
return;
// Use our prefs to configure our Canvas/Window
configureCanvas();
}
function UI::destroy( %this )
function UI::onDestroy( %this )
{
}
function UI::initServer(%this){}
function UI::onCreateServer(%this){}
function UI::onCreateGameServer(%this){}
function UI::onDestroyServer(%this){}
function UI::onDestroyGameServer(%this){}
function UI::initClient(%this)
{

View file

@ -3,7 +3,7 @@
VersionId="1"
Description="Module that implements the menus for the game."
ScriptFile="UI.cs"
CreateFunction="create"
DestroyFunction="destroy"
CreateFunction="onCreate"
DestroyFunction="onDestroy"
Group="Game">
</ModuleDefinition>

View file

@ -28,37 +28,14 @@ ModuleDatabase.LoadGroup( "Game" );
//Finally, initialize the client/server structure
ModuleDatabase.LoadExplicit( "Core_ClientServer" );
if( !$isDedicated )
//If nothing else set a main menu, try to do so now
if(!isObject(Canvas.getContent()))
{
// Start rendering and stuff.
initRenderManager();
initLightingSystems("Advanced Lighting");
//load prefs
%prefPath = getPrefpath();
if ( isFile( %prefPath @ "/clientPrefs.cs" ) )
exec( %prefPath @ "/clientPrefs.cs" );
else
exec("data/defaults.cs");
configureCanvas();
//Autodetect settings if it's our first time
if($pref::Video::autoDetect)
GraphicsMenu.Autodetect();
postFXInit();
closeSplashWindow();
// As we know at this point that the initial load is complete,
// we can hide any splash screen we have, and show the canvas.
// This keeps things looking nice, instead of having a blank window
Canvas.showWindow();
}
else
{
closeSplashWindow();
%mainMenuGUI = ProjectSettings.value("UI/mainMenuName");
if (isObject( %mainMenuGUI ))
Canvas.setContent( %mainMenuGUI );
}
closeSplashWindow();
echo("Engine initialized...");

View file

@ -1,5 +1,179 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<EditorSettings>
<Group name="Theme">
<Setting name="fieldTextSELColor">240 240 240 255</Setting>
<Setting name="fieldBGSELColor">100 98 96 255</Setting>
<Setting name="dividerLightColor">96 94 92 255</Setting>
<Setting name="headerColor">50 49 48 255</Setting>
<Setting name="tabsSELColor">59 58 57 255</Setting>
<Setting name="tabsHLColor">50 49 48 255</Setting>
<Setting name="fieldTextHLColor">234 232 230 255</Setting>
<Setting name="windowBackgroundColor">32 31 30 255</Setting>
<Setting name="headerTextColor">236 234 232 255</Setting>
<Setting name="fieldBGColor">59 58 57 255</Setting>
<Setting name="tooltipBGColor">43 43 43 255</Setting>
<Setting name="fieldTextColor">178 175 172 255</Setting>
<Setting name="dividerMidColor">50 49 48 255</Setting>
<Setting name="dividerDarkColor">17 16 15 255</Setting>
<Setting name="tooltipDividerColor">72 70 68 255</Setting>
<Setting name="fieldBGHLColor">72 70 68 255</Setting>
<Setting name="tooltipTextColor">255 255 255 255</Setting>
<Setting name="tabsColor">37 36 35 255</Setting>
</Group>
<Group name="AxisGizmo">
<Setting name="axisGizmoMaxScreenLen">100</Setting>
<Setting name="snapRotations">0</Setting>
<Setting name="rotationSnap">15</Setting>
<Setting name="mouseRotateScalar">0.8</Setting>
<Setting name="mouseScaleScalar">0.8</Setting>
<Setting name="renderInfoText">1</Setting>
<Setting name="renderWhenUsed">0</Setting>
<Group name="Grid">
<Setting name="renderPlane">0</Setting>
<Setting name="gridColor">255 255 255 20</Setting>
<Setting name="planeDim">500</Setting>
<Setting name="renderPlaneHashes">0</Setting>
<Setting name="snapToGrid">0</Setting>
<Setting name="gridSize">10 10 10</Setting>
</Group>
</Group>
<Group name="WorldEditor">
<Setting name="undoLimit">40</Setting>
<Setting name="orthoFOV">50</Setting>
<Setting name="displayType">6</Setting>
<Setting name="forceLoadDAE">0</Setting>
<Setting name="orthoShowGrid">1</Setting>
<Setting name="torsionPath">AssetWork_Debug.exe</Setting>
<Setting name="dropType">screenCenter</Setting>
<Setting name="currentEditor">WorldEditorInspectorPlugin</Setting>
<Group name="Grid">
<Setting name="gridOriginColor">255 255 255 100</Setting>
<Setting name="gridColor">102 102 102 100</Setting>
<Setting name="gridSnap">0</Setting>
<Setting name="gridSize">1</Setting>
<Setting name="gridMinorColor">51 51 51 100</Setting>
</Group>
<Group name="Docs">
<Setting name="documentationURL">http://www.garagegames.com/products/torque-3d/documentation/user</Setting>
<Setting name="forumURL">http://www.garagegames.com/products/torque-3d/forums</Setting>
<Setting name="documentationLocal">../../../Documentation/Official Documentation.html</Setting>
<Setting name="documentationReference">../../../Documentation/Torque 3D - Script Manual.chm</Setting>
</Group>
<Group name="Color">
<Setting name="popupBackgroundColor">100 100 100 255</Setting>
<Setting name="objMouseOverColor">0 255 0 255</Setting>
<Setting name="objMouseOverSelectColor">0 0 255 255</Setting>
<Setting name="dragRectColor">255 255 0 255</Setting>
<Setting name="selectionBoxColor">255 255 0 255</Setting>
<Setting name="objSelectColor">255 0 0 255</Setting>
<Setting name="objectTextColor">255 255 255 255</Setting>
</Group>
<Group name="Theme">
<Setting name="windowTitleFontHLColor">255 255 255 255</Setting>
<Setting name="windowTitleBGNAColor">180 180 180 255</Setting>
<Setting name="windowTitleBGHLColor">48 48 48 255</Setting>
<Setting name="windowTitleFontColor">215 215 215 255</Setting>
<Setting name="windowTitleBGColor">50 50 50 255</Setting>
</Group>
<Group name="ObjectIcons">
<Setting name="fadeIconsEndDist">20</Setting>
<Setting name="fadeIconsStartAlpha">255</Setting>
<Setting name="fadeIconsEndAlpha">0</Setting>
<Setting name="fadeIcons">1</Setting>
<Setting name="fadeIconsStartDist">8</Setting>
</Group>
<Group name="Render">
<Setting name="showMousePopupInfo">1</Setting>
<Setting name="renderPopupBackground">1</Setting>
<Setting name="renderSelectionBox">1</Setting>
<Setting name="renderObjHandle">1</Setting>
<Setting name="renderObjText">1</Setting>
</Group>
<Group name="Tools">
<Setting name="snapGround">0</Setting>
<Setting name="snapSoft">0</Setting>
<Setting name="dropAtScreenCenterScalar">1</Setting>
<Setting name="boundingBoxCollision">0</Setting>
<Setting name="objectsUseBoxCenter">1</Setting>
<Setting name="dropAtScreenCenterMax">100</Setting>
<Setting name="snapSoftSize">2</Setting>
</Group>
<Group name="Images">
<Setting name="lockedHandle">tools/worldEditor/images/LockedHandle</Setting>
<Setting name="selectHandle">tools/worldEditor/images/SelectHandle</Setting>
<Setting name="defaultHandle">tools/worldEditor/images/DefaultHandle</Setting>
</Group>
</Group>
<Group name="GuiEditor">
<Setting name="lastPath">tools/gui</Setting>
<Setting name="previewResolution">1024 768</Setting>
<Group name="Rendering">
<Setting name="drawBorderLines">1</Setting>
<Setting name="drawGuides">1</Setting>
</Group>
<Group name="Help">
<Setting name="documentationLocal">../../../Documentation/Official Documentation.html</Setting>
<Setting name="documentationReference">../../../Documentation/Torque 3D - Script Manual.chm</Setting>
<Setting name="documentationURL">http://www.garagegames.com/products/torque-3d/documentation/user</Setting>
</Group>
<Group name="Snapping">
<Setting name="snapToGuides">1</Setting>
<Setting name="snapToControls">1</Setting>
<Setting name="snapToEdges">1</Setting>
<Setting name="snapToCanvas">1</Setting>
<Setting name="snapToCenters">1</Setting>
<Setting name="sensitivity">2</Setting>
<Setting name="snap2Grid">0</Setting>
<Setting name="snap2GridSize">8</Setting>
</Group>
<Group name="Selection">
<Setting name="fullBox">0</Setting>
</Group>
<Group name="EngineDevelopment">
<Setting name="toggleIntoEditor">0</Setting>
<Setting name="showEditorProfiles">0</Setting>
<Setting name="showEditorGuis">0</Setting>
</Group>
<Group name="Library">
<Setting name="viewType">Categorized</Setting>
</Group>
</Group>
<Group name="TerrainEditor">
<Setting name="currentAction">lowerHeight</Setting>
<Group name="ActionValues">
<Setting name="SlopeMinAngle">0</Setting>
<Setting name="noiseFactor">1</Setting>
<Setting name="setHeightVal">100</Setting>
<Setting name="softSelectFilter">1.000000 0.833333 0.666667 0.500000 0.333333 0.166667 0.000000</Setting>
<Setting name="scaleVal">1</Setting>
<Setting name="softSelectRadius">50</Setting>
<Setting name="smoothFactor">0.1</Setting>
<Setting name="softSelectDefaultFilter">1.000000 0.833333 0.666667 0.500000 0.333333 0.166667 0.000000</Setting>
<Setting name="adjustHeightVal">10</Setting>
<Setting name="SlopeMaxAngle">90</Setting>
</Group>
<Group name="Brush">
<Setting name="maxBrushSize">40 40</Setting>
<Setting name="brushSize">40 40</Setting>
<Setting name="brushType">ellipse</Setting>
<Setting name="brushPressure">1</Setting>
<Setting name="brushSoftness">1</Setting>
</Group>
</Group>
<Group name="RiverEditor">
<Setting name="DefaultNormal">0 0 1</Setting>
<Setting name="DefaultWidth">10</Setting>
<Setting name="HoverNodeColor">255 255 255 255</Setting>
<Setting name="SelectedSplineColor">0 255 0 255</Setting>
<Setting name="DefaultDepth">5</Setting>
<Setting name="HoverSplineColor">255 0 0 255</Setting>
</Group>
<Group name="ConvexEditor">
<Setting name="materialName">Grid_512_Orange</Setting>
</Group>
<Group name="NavEditor">
<Setting name="SpawnClass">AIPlayer</Setting>
</Group>
<Group name="LevelInformation">
<Setting name="levelsDirectory">data/FPSGameplay/levels</Setting>
<Group name="levels">
@ -11,178 +185,4 @@
</Group>
</Group>
</Group>
<Group name="AxisGizmo">
<Setting name="rotationSnap">15</Setting>
<Setting name="mouseScaleScalar">0.8</Setting>
<Setting name="renderWhenUsed">0</Setting>
<Setting name="snapRotations">0</Setting>
<Setting name="mouseRotateScalar">0.8</Setting>
<Setting name="renderInfoText">1</Setting>
<Setting name="axisGizmoMaxScreenLen">100</Setting>
<Group name="Grid">
<Setting name="gridColor">255 255 255 20</Setting>
<Setting name="snapToGrid">0</Setting>
<Setting name="planeDim">500</Setting>
<Setting name="renderPlane">0</Setting>
<Setting name="gridSize">10 10 10</Setting>
<Setting name="renderPlaneHashes">0</Setting>
</Group>
</Group>
<Group name="TerrainEditor">
<Setting name="currentAction">lowerHeight</Setting>
<Group name="Brush">
<Setting name="brushSoftness">1</Setting>
<Setting name="brushType">ellipse</Setting>
<Setting name="maxBrushSize">40 40</Setting>
<Setting name="brushPressure">1</Setting>
<Setting name="brushSize">40 40</Setting>
</Group>
<Group name="ActionValues">
<Setting name="noiseFactor">1</Setting>
<Setting name="adjustHeightVal">10</Setting>
<Setting name="SlopeMinAngle">0</Setting>
<Setting name="SlopeMaxAngle">90</Setting>
<Setting name="softSelectDefaultFilter">1.000000 0.833333 0.666667 0.500000 0.333333 0.166667 0.000000</Setting>
<Setting name="softSelectFilter">1.000000 0.833333 0.666667 0.500000 0.333333 0.166667 0.000000</Setting>
<Setting name="smoothFactor">0.1</Setting>
<Setting name="scaleVal">1</Setting>
<Setting name="softSelectRadius">50</Setting>
<Setting name="setHeightVal">100</Setting>
</Group>
</Group>
<Group name="WorldEditor">
<Setting name="displayType">6</Setting>
<Setting name="orthoShowGrid">1</Setting>
<Setting name="undoLimit">40</Setting>
<Setting name="dropType">screenCenter</Setting>
<Setting name="torsionPath">AssetWork_Debug.exe</Setting>
<Setting name="forceLoadDAE">0</Setting>
<Setting name="orthoFOV">50</Setting>
<Setting name="currentEditor">WorldEditorInspectorPlugin</Setting>
<Group name="Docs">
<Setting name="documentationReference">../../../Documentation/Torque 3D - Script Manual.chm</Setting>
<Setting name="forumURL">http://www.garagegames.com/products/torque-3d/forums</Setting>
<Setting name="documentationLocal">../../../Documentation/Official Documentation.html</Setting>
<Setting name="documentationURL">http://www.garagegames.com/products/torque-3d/documentation/user</Setting>
</Group>
<Group name="Color">
<Setting name="objSelectColor">255 0 0 255</Setting>
<Setting name="popupBackgroundColor">100 100 100 255</Setting>
<Setting name="dragRectColor">255 255 0 255</Setting>
<Setting name="selectionBoxColor">255 255 0 255</Setting>
<Setting name="objectTextColor">255 255 255 255</Setting>
<Setting name="objMouseOverColor">0 255 0 255</Setting>
<Setting name="objMouseOverSelectColor">0 0 255 255</Setting>
</Group>
<Group name="Render">
<Setting name="renderSelectionBox">1</Setting>
<Setting name="showMousePopupInfo">1</Setting>
<Setting name="renderObjText">1</Setting>
<Setting name="renderObjHandle">1</Setting>
<Setting name="renderPopupBackground">1</Setting>
</Group>
<Group name="Grid">
<Setting name="gridOriginColor">255 255 255 100</Setting>
<Setting name="gridSize">1</Setting>
<Setting name="gridColor">102 102 102 100</Setting>
<Setting name="gridMinorColor">51 51 51 100</Setting>
<Setting name="gridSnap">0</Setting>
</Group>
<Group name="Tools">
<Setting name="dropAtScreenCenterMax">100</Setting>
<Setting name="dropAtScreenCenterScalar">1</Setting>
<Setting name="snapGround">0</Setting>
<Setting name="boundingBoxCollision">0</Setting>
<Setting name="snapSoftSize">2</Setting>
<Setting name="snapSoft">0</Setting>
<Setting name="objectsUseBoxCenter">1</Setting>
</Group>
<Group name="Theme">
<Setting name="windowTitleBGColor">50 50 50 255</Setting>
<Setting name="windowTitleBGNAColor">180 180 180 255</Setting>
<Setting name="windowTitleFontColor">215 215 215 255</Setting>
<Setting name="windowTitleFontHLColor">255 255 255 255</Setting>
<Setting name="windowTitleBGHLColor">48 48 48 255</Setting>
</Group>
<Group name="Images">
<Setting name="defaultHandle">tools/worldEditor/images/DefaultHandle</Setting>
<Setting name="selectHandle">tools/worldEditor/images/SelectHandle</Setting>
<Setting name="lockedHandle">tools/worldEditor/images/LockedHandle</Setting>
</Group>
<Group name="ObjectIcons">
<Setting name="fadeIconsEndDist">20</Setting>
<Setting name="fadeIconsStartDist">8</Setting>
<Setting name="fadeIcons">1</Setting>
<Setting name="fadeIconsEndAlpha">0</Setting>
<Setting name="fadeIconsStartAlpha">255</Setting>
</Group>
</Group>
<Group name="GuiEditor">
<Setting name="previewResolution">1024 768</Setting>
<Setting name="lastPath">tools/gui</Setting>
<Group name="Snapping">
<Setting name="snap2Grid">0</Setting>
<Setting name="snapToCanvas">1</Setting>
<Setting name="snapToGuides">1</Setting>
<Setting name="snapToCenters">1</Setting>
<Setting name="snapToControls">1</Setting>
<Setting name="snap2GridSize">8</Setting>
<Setting name="sensitivity">2</Setting>
<Setting name="snapToEdges">1</Setting>
</Group>
<Group name="Rendering">
<Setting name="drawGuides">1</Setting>
<Setting name="drawBorderLines">1</Setting>
</Group>
<Group name="Help">
<Setting name="documentationURL">http://www.garagegames.com/products/torque-3d/documentation/user</Setting>
<Setting name="documentationReference">../../../Documentation/Torque 3D - Script Manual.chm</Setting>
<Setting name="documentationLocal">../../../Documentation/Official Documentation.html</Setting>
</Group>
<Group name="Selection">
<Setting name="fullBox">0</Setting>
</Group>
<Group name="EngineDevelopment">
<Setting name="toggleIntoEditor">0</Setting>
<Setting name="showEditorGuis">0</Setting>
<Setting name="showEditorProfiles">0</Setting>
</Group>
<Group name="Library">
<Setting name="viewType">Categorized</Setting>
</Group>
</Group>
<Group name="RiverEditor">
<Setting name="DefaultNormal">0 0 1</Setting>
<Setting name="DefaultWidth">10</Setting>
<Setting name="SelectedSplineColor">0 255 0 255</Setting>
<Setting name="HoverSplineColor">255 0 0 255</Setting>
<Setting name="HoverNodeColor">255 255 255 255</Setting>
<Setting name="DefaultDepth">5</Setting>
</Group>
<Group name="Theme">
<Setting name="tooltipBGColor">43 43 43 255</Setting>
<Setting name="tooltipTextColor">255 255 255 255</Setting>
<Setting name="fieldTextSELColor">240 240 240 255</Setting>
<Setting name="fieldBGHLColor">72 70 68 255</Setting>
<Setting name="fieldBGColor">59 58 57 255</Setting>
<Setting name="fieldTextHLColor">234 232 230 255</Setting>
<Setting name="tabsColor">37 36 35 255</Setting>
<Setting name="dividerMidColor">50 49 48 255</Setting>
<Setting name="headerColor">50 49 48 255</Setting>
<Setting name="fieldBGSELColor">100 98 96 255</Setting>
<Setting name="windowBackgroundColor">32 31 30 255</Setting>
<Setting name="dividerLightColor">96 94 92 255</Setting>
<Setting name="dividerDarkColor">17 16 15 255</Setting>
<Setting name="fieldTextColor">178 175 172 255</Setting>
<Setting name="tooltipDividerColor">72 70 68 255</Setting>
<Setting name="headerTextColor">236 234 232 255</Setting>
<Setting name="tabsHLColor">50 49 48 255</Setting>
<Setting name="tabsSELColor">59 58 57 255</Setting>
</Group>
<Group name="ConvexEditor">
<Setting name="materialName">Grid_512_Orange</Setting>
</Group>
<Group name="NavEditor">
<Setting name="SpawnClass">AIPlayer</Setting>
</Group>
</EditorSettings>