Implemented initial pass at proper client/server separation handling for module initialization

Added GameModeName to Scene
Added function to get number of active scenes
Added logic to level/client loading to enact gameplay mode logic driven by either Scene's GameModeName or project setting's default game mode
Added template module.cs file for module creation and adjusted new module logic in AssetBrowser to create off template
Updated FPSGameplay code to have deathmatchGame mode work with new GameMode logic
Updated EmptyLevel scene to define deathMatchGame as gamemode
Updated FPSGameplay module script to properly client/server initialize
This commit is contained in:
Areloch 2019-08-04 23:21:28 -05:00
parent d97c05b411
commit 7dc03ae17a
32 changed files with 774 additions and 294 deletions

View file

@ -12,7 +12,7 @@ Scene::Scene() :
mIsEditing(false), mIsEditing(false),
mIsDirty(false) mIsDirty(false)
{ {
mGameModeName = StringTable->EmptyString();
} }
Scene::~Scene() Scene::~Scene()
@ -29,6 +29,10 @@ void Scene::initPersistFields()
addField("isEditing", TypeBool, Offset(mIsEditing, Scene), "", AbstractClassRep::FIELD_HideInInspectors); addField("isEditing", TypeBool, Offset(mIsEditing, Scene), "", AbstractClassRep::FIELD_HideInInspectors);
addField("isDirty", TypeBool, Offset(mIsDirty, Scene), "", AbstractClassRep::FIELD_HideInInspectors); addField("isDirty", TypeBool, Offset(mIsDirty, Scene), "", AbstractClassRep::FIELD_HideInInspectors);
endGroup("Internal"); endGroup("Internal");
addGroup("Gameplay");
addField("gameModeName", TypeString, Offset(mGameModeName, Scene), "The name of the gamemode that this scene utilizes");
endGroup("Gameplay");
} }
bool Scene::onAdd() bool Scene::onAdd()
@ -186,6 +190,13 @@ DefineEngineFunction(getScene, Scene*, (U32 sceneId), (0),
return Scene::smSceneList[sceneId]; return Scene::smSceneList[sceneId];
} }
DefineEngineFunction(getSceneCount, S32, (),,
"Get the number of active Scene objects that are loaded.\n"
"@return The number of active scenes")
{
return Scene::smSceneList.size();
}
DefineEngineFunction(getRootScene, S32, (), , DefineEngineFunction(getRootScene, S32, (), ,
"Get the root Scene object that is loaded.\n" "Get the root Scene object that is loaded.\n"
"@return The id of the Root Scene. Will be 0 if no root scene is loaded") "@return The id of the Root Scene. Will be 0 if no root scene is loaded")

View file

@ -35,6 +35,8 @@ class Scene : public NetObject, public virtual ITickable
bool mIsDirty; bool mIsDirty;
StringTableEntry mGameModeName;
protected: protected:
static Scene * smRootScene; static Scene * smRootScene;
@ -76,4 +78,4 @@ public:
} }
static Vector<Scene*> smSceneList; static Vector<Scene*> smSceneList;
}; };

View file

@ -25,7 +25,6 @@ function CoreModule::onCreate(%this)
ModuleDatabase.LoadExplicit( "Core_PostFX" ); ModuleDatabase.LoadExplicit( "Core_PostFX" );
ModuleDatabase.LoadExplicit( "Core_Components" ); ModuleDatabase.LoadExplicit( "Core_Components" );
ModuleDatabase.LoadExplicit( "Core_GameObjects" ); ModuleDatabase.LoadExplicit( "Core_GameObjects" );
ModuleDatabase.LoadExplicit( "Core_ClientServer" );
new Settings(ProjectSettings) { file = "core/settings.xml"; }; new Settings(ProjectSettings) { file = "core/settings.xml"; };
ProjectSettings.read(); ProjectSettings.read();

View file

@ -20,6 +20,8 @@ function initClient()
exec( %prefPath @ "/clientPrefs.cs" ); exec( %prefPath @ "/clientPrefs.cs" );
else else
exec( "data/defaults.cs" ); exec( "data/defaults.cs" );
callOnModules("initClient");
loadMaterials(); loadMaterials();

View file

@ -32,18 +32,7 @@ function GameConnection::onConnectionAccepted(%this)
// datablocks and objects are ghosted over. // datablocks and objects are ghosted over.
physicsInitWorld( "client" ); physicsInitWorld( "client" );
//Get our modules so we can exec any specific client-side loading/handling callOnModules("onCreateClient", "Game");
%modulesList = ModuleDatabase.findModules(true);
for(%i=0; %i < getWordCount(%modulesList); %i++)
{
%module = getWord(%modulesList, %i);
%moduleID = %module.ModuleId;
if(%module.scopeSet.isMethod("onCreateClient"))
{
eval(%module.scopeSet @ ".onCreateClient();");
}
}
} }
function GameConnection::initialControlSet(%this) function GameConnection::initialControlSet(%this)
@ -141,14 +130,5 @@ function disconnectedCleanup()
// We can now delete the client physics simulation. // We can now delete the client physics simulation.
physicsDestroyWorld( "client" ); physicsDestroyWorld( "client" );
//Get our modules so we can exec any specific client-side loading/handling callOnModules("onDestroyClient", "Game");
%modulesList = ModuleDatabase.findModules(true);
for(%i=0; %i < getWordCount(%modulesList); %i++)
{
%module = getWord(%modulesList, %i);
if(%module.scopeSet.isMethod("onDestroyClient"))
{
eval(%module.scopeSet @ ".onDestroyClient();");
}
}
} }

View file

@ -150,7 +150,35 @@ function GameConnection::onDrop(%client, %reason)
} }
if($missionRunning) if($missionRunning)
theLevelInfo.onClientLeaveGame(); {
%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;
}
}
}
}
removeFromServerGuidList( %client.guid ); removeFromServerGuidList( %client.guid );

View file

@ -148,12 +148,38 @@ function serverCmdMissionStartPhase3Ack(%client, %seq)
%entity.notify("onClientConnect", %client); %entity.notify("onClientConnect", %client);
} }
//Have any special game-play handling here %activeSceneCount = getSceneCount();
if(theLevelInfo.isMethod("onClientEnterGame"))
%hasGameMode = 0;
for(%i=0; %i < %activeSceneCount; %i++)
{ {
theLevelInfo.onClientEnterGame(%client); 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;
}
}
} }
else
//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;
}
}
}
//if that also failed, just spawn a camera
if(%hasGameMode == 0)
{ {
//No Game mode class for the level info, so just spawn a default camera //No Game mode class for the level info, so just spawn a default camera
// Set the control object to the default camera // Set the control object to the default camera

View file

@ -135,8 +135,35 @@ function loadMissionStage2()
ClientGroup.getObject(%clientIndex).loadMission(); ClientGroup.getObject(%clientIndex).loadMission();
// Go ahead and launch the game // Go ahead and launch the game
if(TheLevelInfo.isMethod("onMissionStart")) %activeSceneCount = getSceneCount();
TheLevelInfo.onMissionStart();
%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;
}
}
}
} }
function endMission() function endMission()
@ -147,7 +174,35 @@ function endMission()
echo("*** ENDING MISSION"); echo("*** ENDING MISSION");
// Inform the game code we're done. // Inform the game code we're done.
TheLevelInfo.onMissionEnded(); %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;
}
}
}
// Inform the clients // Inform the clients
for( %clientIndex = 0; %clientIndex < ClientGroup.getCount(); %clientIndex++ ) { for( %clientIndex = 0; %clientIndex < ClientGroup.getCount(); %clientIndex++ ) {
@ -176,6 +231,35 @@ function resetMission()
$instantGroup = MissionCleanup; $instantGroup = MissionCleanup;
clearServerPaths(); clearServerPaths();
//
TheLevelInfo.onMissionReset(); // 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;
}
}
}
} }

View file

@ -52,6 +52,8 @@ function initServer()
// Specify where the mission files are. // Specify where the mission files are.
$Server::MissionFileSpec = "data/levels/*.mis"; $Server::MissionFileSpec = "data/levels/*.mis";
callOnModules("initServer");
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
@ -156,17 +158,8 @@ function createServer(%serverType, %level)
schedule(0,0,startHeartbeat); schedule(0,0,startHeartbeat);
} }
//Get our modules so we can exec any specific server-side loading/handling callOnModules("onCreateServer", "Game");
%modulesList = ModuleDatabase.findModules(true);
for(%i=0; %i < getWordCount(%modulesList); %i++)
{
%module = getWord(%modulesList, %i);
if(%module.scopeSet.isMethod("onCreateServer"))
{
eval(%module.scopeSet @ ".onCreateServer();");
}
}
// Let the game initialize some things now that the // Let the game initialize some things now that the
// the server has been created // the server has been created
onServerCreated(); onServerCreated();
@ -241,15 +234,7 @@ function destroyServer()
deleteDataBlocks(); deleteDataBlocks();
//Get our modules so we can exec any specific server-side loading/handling //Get our modules so we can exec any specific server-side loading/handling
%modulesList = ModuleDatabase.findModules(true); callOnModules("onDestroyServer", "Game");
for(%i=0; %i < getWordCount(%modulesList); %i++)
{
%module = getWord(%modulesList, %i);
if(%module.scopeSet.isMethod("onDestroyServer"))
{
eval(%module.scopeSet @ ".onDestroyServer();");
}
}
// Save any server settings // Save any server settings
%prefPath = getPrefpath(); %prefPath = getPrefpath();
@ -273,8 +258,35 @@ function onServerDestroyed()
echo("*** ENDING MISSION"); echo("*** ENDING MISSION");
// Inform the game code we're done. // Inform the game code we're done.
if(TheLevelInfo.isMethod("onMissionEnded")) %activeSceneCount = getSceneCount();
TheLevelInfo.onMissionEnded();
%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;
}
}
}
// Inform the clients // Inform the clients
for( %clientIndex = 0; %clientIndex < ClientGroup.getCount(); %clientIndex++ ) { for( %clientIndex = 0; %clientIndex < ClientGroup.getCount(); %clientIndex++ ) {

View file

@ -5,9 +5,4 @@
<Setting name="coreModulePath">core/</Setting> <Setting name="coreModulePath">core/</Setting>
</Group> </Group>
</Group> </Group>
<Group name="Gameplay">
<Group name="GameModes">
<Setting name="defaultModeName">a</Setting>
</Group>
</Group>
</ProjectSettings> </ProjectSettings>

View file

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

View file

@ -0,0 +1,20 @@
function callOnModules(%functionName, %moduleGroup)
{
//Get our modules so we can exec any specific client-side loading/handling
%modulesList = ModuleDatabase.findModules(false);
for(%i=0; %i < getWordCount(%modulesList); %i++)
{
%module = getWord(%modulesList, %i);
if(%moduleGroup !$= "")
{
if(%module.group !$= %moduleGroup)
continue;
}
if(isObject(%module.scopeSet) && %module.scopeSet.isMethod(%functionName))
{
eval(%module.scopeSet @ "." @ %functionName @ "();");
}
}
}

View file

@ -0,0 +1,14 @@
function SimObject::notify(%this, %signalName)
{
}
function SimObject::removeNotify(%this, %signalName)
{
}
function SimObject::removeNotify(%this, %signalName)
{
}

View file

@ -1,3 +1,55 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?> <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<AssetImportSettings> <AssetImportSettings>
<Group name="TestConfig">
<Group name="Collision">
<Setting name="LOSCollisionMeshPrefix">LOS</Setting>
<Setting name="GenerateCollisions">1</Setting>
<Setting name="GenLOSCollisionType">CollisionMesh</Setting>
<Setting name="GenerateLOSCollisions">1</Setting>
<Setting name="CollisionMeshPrefix">Col</Setting>
<Setting name="GenCollisionType">CollisionMesh</Setting>
</Group>
<Group name="Meshes">
<Setting name="AdjustFloor">0</Setting>
<Setting name="ScaleOverride">1</Setting>
<Setting name="LODType">TrailingNumber</Setting>
<Setting name="AdjustCenter">0</Setting>
<Setting name="UpAxisOverride">Z_AXIS</Setting>
<Setting name="CollapseSubmeshes">0</Setting>
<Setting name="IgnoreNodeScale">0</Setting>
<Setting name="DoUpAxisOverride">0</Setting>
</Group>
<Group name="Sounds">
<Setting name="VolumeAdjust">1.0</Setting>
<Setting name="Compressed">0</Setting>
<Setting name="PitchAdjust">1.0</Setting>
</Group>
<Group name="Images">
<Setting name="AOTypeSuffixes">_AO,_AMBIENT,_AMBIENTOCCLUSION</Setting>
<Setting name="NormalTypeSuffixes">_NORMAL,_NORM</Setting>
<Setting name="UseMips">1</Setting>
<Setting name="SmoothnessTypeSuffixes">_SMOOTH,_SMOOTHNESS</Setting>
<Setting name="PopulateMaterialMaps">1</Setting>
<Setting name="Scaling">1.0</Setting>
<Setting name="DiffuseTypeSuffixes">_ALBEDO,_DIFFUSE,_ALB,_DIF,_COLOR,_COL</Setting>
<Setting name="TextureFilteringMode">Bilinear</Setting>
<Setting name="GenerateMaterialOnImport">1</Setting>
<Setting name="RoughnessTypeSuffixes">_ROUGH,_ROUGHNESS</Setting>
<Setting name="CompositeTypeSuffixes">_COMP,_COMPOSITE</Setting>
<Setting name="ImageType">N/A</Setting>
<Setting name="IsHDR">0</Setting>
<Setting name="MetalnessTypeSuffixes">_METAL,_MET,_METALNESS,_METALLIC</Setting>
<Setting name="Compressed">1</Setting>
</Group>
<Group name="Materials">
<Setting name="UseExistingMaterials">1</Setting>
<Setting name="UseDiffuseSuffixOnOriginImage">1</Setting>
<Setting name="CreateComposites">1</Setting>
<Setting name="ImportMaterials">1</Setting>
</Group>
<Group name="Animations">
<Setting name="SeparateAnimations">1</Setting>
<Setting name="ImportAnimations">1</Setting>
</Group>
</Group>
</AssetImportSettings> </AssetImportSettings>

View file

@ -1,7 +1,7 @@
//--- OBJECT WRITE BEGIN --- //--- OBJECT WRITE BEGIN ---
%guiContent = new GuiControl(AssetImportCtrl) { %guiContent = new GuiControl(AssetImportCtrl) {
position = "0 0"; position = "0 0";
extent = "1440 900"; extent = "1024 768";
minExtent = "8 2"; minExtent = "8 2";
horizSizing = "right"; horizSizing = "right";
vertSizing = "bottom"; vertSizing = "bottom";
@ -296,7 +296,7 @@
anchorBottom = "0"; anchorBottom = "0";
anchorLeft = "1"; anchorLeft = "1";
anchorRight = "0"; anchorRight = "0";
position = "140 98"; position = "145 133";
extent = "733 502"; extent = "733 502";
minExtent = "48 92"; minExtent = "48 92";
horizSizing = "center"; horizSizing = "center";
@ -625,9 +625,9 @@
anchorBottom = "0"; anchorBottom = "0";
anchorLeft = "1"; anchorLeft = "1";
anchorRight = "0"; anchorRight = "0";
position = "524 332"; position = "348 332";
extent = "376 50"; extent = "376 70";
minExtent = "48 92"; minExtent = "48 70";
horizSizing = "center"; horizSizing = "center";
vertSizing = "center"; vertSizing = "center";
profile = "ToolsGuiWindowProfile"; profile = "ToolsGuiWindowProfile";
@ -695,7 +695,7 @@
groupNum = "-1"; groupNum = "-1";
buttonType = "PushButton"; buttonType = "PushButton";
useMouseEvents = "0"; useMouseEvents = "0";
position = "301 27"; position = "301 45";
extent = "64 22"; extent = "64 22";
minExtent = "8 2"; minExtent = "8 2";
horizSizing = "left"; horizSizing = "left";
@ -703,7 +703,7 @@
profile = "ToolsGuiButtonProfile"; profile = "ToolsGuiButtonProfile";
visible = "1"; visible = "1";
active = "1"; active = "1";
command = "ImportAssetConfigEditorWindow.saveAssetOptionsConfig();"; command = "ImportAssetConfigEditorWindow.createNewImportConfig();";
tooltipProfile = "ToolsGuiToolTipProfile"; tooltipProfile = "ToolsGuiToolTipProfile";
hovertime = "1000"; hovertime = "1000";
isContainer = "0"; isContainer = "0";

View file

@ -75,6 +75,31 @@ function AssetBrowser_addModuleWindow::CreateNewModule(%this)
//Now generate the script file for it //Now generate the script file for it
%file = new FileObject(); %file = new FileObject();
%templateFile = new FileObject();
%moduleTemplateCodeFilePath = AssetBrowser.templateFilesPath @ "module.cs.template";
if(%file.openForWrite(%moduleScriptFilePath) && %templateFile.openForRead(%moduleTemplateCodeFilePath))
{
while( !%templateFile.isEOF() )
{
%line = %templateFile.readline();
%line = strreplace( %line, "@@", %newModuleName );
%file.writeline(%line);
echo(%line);
}
%file.close();
%templateFile.close();
}
else
{
%file.close();
%templateFile.close();
warnf("CreateNewModule - Something went wrong and we couldn't write the script file!");
}
if(%file.openForWrite(%moduleScriptFilePath)) if(%file.openForWrite(%moduleScriptFilePath))
{ {

View file

@ -513,7 +513,7 @@ function ImportAssetWindow::reloadImportOptionConfigs(%this)
if(%xmlDoc.loadFile($AssetBrowser::importConfigsFile)) if(%xmlDoc.loadFile($AssetBrowser::importConfigsFile))
{ {
//StateMachine element //StateMachine element
if(!%xmlDoc.pushFirstChildElement("AssetImportConfigs")) if(!%xmlDoc.pushFirstChildElement("AssetImportSettings"))
{ {
error("Invalid Import Configs file"); error("Invalid Import Configs file");
return; return;
@ -521,26 +521,21 @@ function ImportAssetWindow::reloadImportOptionConfigs(%this)
//Config Groups //Config Groups
%configCount = 0; %configCount = 0;
while(%xmlDoc.pushChildElement(%configCount)) %hasGroup = %xmlDoc.pushFirstChildElement("Group");
while(%hasGroup)
{ {
%configName = %xmlDoc.attribute("Name"); %configName = %xmlDoc.attribute("name");
%xmlDoc.popElement();
%configCount++;
ImportAssetWindow.importConfigsList.add(%configName); ImportAssetWindow.importConfigsList.add(%configName);
ImportAssetConfigList.add(%configName);
%hasGroup = %xmlDoc.nextSiblingElement("Group");
} }
%xmlDoc.popElement(); %xmlDoc.popElement();
} }
ImportAssetWindow.importConfigsList.add(%configName); %xmlDoc.delete();
for(%i = 0; %i < ImportAssetWindow.importConfigsList.count(); %i++)
{
%configName = ImportAssetWindow.importConfigsList.getKey(%i);
ImportAssetConfigList.add(%configName);
}
%importConfigIdx = ImportAssetWindow.activeImportConfigIndex; %importConfigIdx = ImportAssetWindow.activeImportConfigIndex;
if(%importConfigIdx $= "") if(%importConfigIdx $= "")
@ -620,14 +615,14 @@ function ImportAssetWindow::processNewImportAssets(%this, %id)
if(isObject(%assetItem) && %assetItem.processed == false) if(isObject(%assetItem) && %assetItem.processed == false)
{ {
%assetConfigObj = ImportAssetWindow.activeImportConfig.clone(); //%assetConfigObj = ImportAssetWindow.activeImportConfig.clone();
%assetConfigObj.assetIndex = %i; //%assetConfigObj.assetIndex = %i;
//sanetize before modifying our asset name(suffix additions, etc) //sanetize before modifying our asset name(suffix additions, etc)
if(%assetItem.assetName !$= %assetItem.cleanAssetName) if(%assetItem.assetName !$= %assetItem.cleanAssetName)
%assetItem.assetName = %assetItem.cleanAssetName; %assetItem.assetName = %assetItem.cleanAssetName;
%assetConfigObj.assetName = %assetItem.assetName; //%assetConfigObj.assetName = %assetItem.assetName;
if(%assetItem.assetType $= "Model") if(%assetItem.assetType $= "Model")
{ {

View file

@ -12,6 +12,79 @@ function ImportAssetConfigList::onSelect( %this, %id, %text )
AssetBrowser.reloadImportingFiles(); AssetBrowser.reloadImportingFiles();
} }
function setupImportConfigSettingsList()
{
if(!isObject(ImportAssetConfigSettingsList))
{
new ArrayObject(ImportAssetConfigSettingsList);
ImportAssetConfigSettingsList.addNewConfigSetting("Mesh/ImportMesh", "Import Mesh", "bool", "", "1", "", "ToggleImportMesh");
ImportAssetConfigSettingsList.addNewConfigSetting("Meshes/DoUpAxisOverride", "Do Up-axis Override", "bool", "", "0", "");
ImportAssetConfigSettingsList.addNewConfigSetting("Meshes/UpAxisOverride", "Up-axis Override", "list", "", "Z_AXIS", "X_AXIS,Y_AXIS,Z_AXIS");
ImportAssetConfigSettingsList.addNewConfigSetting("Meshes/ScaleOverride", "Do Scale Override", "bool", "", "0", "");
ImportAssetConfigSettingsList.addNewConfigSetting("Meshes/ScaleOverride", "Scale Override", "float", "", "1", "");
ImportAssetConfigSettingsList.addNewConfigSetting("Meshes/IgnoreNodeScale", "Ignore Node Scale", "bool", "", "0", "");
ImportAssetConfigSettingsList.addNewConfigSetting("Meshes/AdjustCenter", "Adjust Center", "bool", "", "0", "");
ImportAssetConfigSettingsList.addNewConfigSetting("Meshes/AdjustFloor", "Adjust Floor", "bool", "", "0", "");
ImportAssetConfigSettingsList.addNewConfigSetting("Meshes/CollapseSubmeshes", "Collapse Submeshes", "bool", "", "0", "");
ImportAssetConfigSettingsList.addNewConfigSetting("Meshes/LODType", "LOD Type", "list", "", "TrailingNumber", "TrailingNumber,DetectDTS");
//ImportAssetConfigSettingsList.addNewConfigSetting("TrailingNumber", "Trailing Number", "float", "", "2", "", "Mesh");
ImportAssetConfigSettingsList.addNewConfigSetting("Meshes/ImportedNodes", "Imported Nodes", "command", "", "", "");
ImportAssetConfigSettingsList.addNewConfigSetting("Meshes/IgnoreNodes", "Ignore Nodes", "command", "", "", "");
ImportAssetConfigSettingsList.addNewConfigSetting("Meshes/ImportMeshes", "Import Meshes", "command", "", "", "");
ImportAssetConfigSettingsList.addNewConfigSetting("Meshes/IgnoreMeshes", "Imported Meshes", "command", "", "", "");
//Materials
ImportAssetConfigSettingsList.addNewConfigSetting("Materials/ImportMaterials", "Import Materials", "bool", "", "1", "");
ImportAssetConfigSettingsList.addNewConfigSetting("Materials/CreateComposites", "Create Composites", "bool", "", "1", "");
ImportAssetConfigSettingsList.addNewConfigSetting("Materials/UseDiffuseSuffixOnOriginImage", "Use Diffuse Suffix for Origin Image", "bool", "", "1", "");
ImportAssetConfigSettingsList.addNewConfigSetting("Materials/UseExistingMaterials", "Use Existing Materials", "bool", "", "1", "");
ImportAssetConfigSettingsList.addNewConfigSetting("Materials/IgnoreMaterials", "Ignore Materials", "command", "", "", "");
//Animations
ImportAssetConfigSettingsList.addNewConfigSetting("Animations/ImportAnimations", "Import Animations", "bool", "", "1", "");
ImportAssetConfigSettingsList.addNewConfigSetting("Animations/SeparateAnimations", "Separate Animations", "bool", "", "1", "");
ImportAssetConfigSettingsList.addNewConfigSetting("Animations/SeparateAnimationPrefix", "Separate Animation Prefix", "string", "", "", "");
//Collision
ImportAssetConfigSettingsList.addNewConfigSetting("Collision/GenerateCollisions", "Generate Collisions", "bool", "", "1", "");
ImportAssetConfigSettingsList.addNewConfigSetting("Collision/GenCollisionType", "Generate Collision Type", "list", "", "CollisionMesh", "CollisionMesh,ConvexHull");
ImportAssetConfigSettingsList.addNewConfigSetting("Collision/CollisionMeshPrefix", "CollisionMesh Prefix", "string", "", "Col", "");
ImportAssetConfigSettingsList.addNewConfigSetting("Collision/GenerateLOSCollisions", "Generate LOS Collisions", "bool", "", "1", "");
ImportAssetConfigSettingsList.addNewConfigSetting("Collision/GenLOSCollisionType", "Generate LOS Collision Type", "list", "", "CollisionMesh", "CollisionMesh,ConvexHull");
ImportAssetConfigSettingsList.addNewConfigSetting("Collision/LOSCollisionMeshPrefix", "LOS CollisionMesh Prefix", "string", "", "LOS", "");
//Images
ImportAssetConfigSettingsList.addNewConfigSetting("Images/ImageType", "Image Type", "list", "", "N/A", "N/A,Diffuse,Normal,Specular,Metalness,Roughness,AO,Composite,GUI");
ImportAssetConfigSettingsList.addNewConfigSetting("Images/DiffuseTypeSuffixes", "Diffuse Type Suffixes", "command", "", "_ALBEDO,_DIFFUSE,_ALB,_DIF,_COLOR,_COL", "");
ImportAssetConfigSettingsList.addNewConfigSetting("Images/NormalTypeSuffixes", "Normal Type Suffixes", "command", "", "_NORMAL,_NORM", "");
ImportAssetConfigSettingsList.addNewConfigSetting("Images/MetalnessTypeSuffixes", "Metalness Type Suffixes", "command", "", "_METAL,_MET,_METALNESS,_METALLIC", "");
ImportAssetConfigSettingsList.addNewConfigSetting("Images/RoughnessTypeSuffixes", "Roughness Type Suffixes", "command", "", "_ROUGH,_ROUGHNESS", "");
ImportAssetConfigSettingsList.addNewConfigSetting("Images/SmoothnessTypeSuffixes", "Smoothness Type Suffixes", "command", "", "_SMOOTH,_SMOOTHNESS", "");
ImportAssetConfigSettingsList.addNewConfigSetting("Images/AOTypeSuffixes", "AO Type Suffixes", "command", "", "_AO,_AMBIENT,_AMBIENTOCCLUSION", "");
ImportAssetConfigSettingsList.addNewConfigSetting("Images/CompositeTypeSuffixes", "Composite Type Suffixes", "command", "", "_COMP,_COMPOSITE", "");
ImportAssetConfigSettingsList.addNewConfigSetting("Images/TextureFilteringMode", "Texture Filtering Mode", "list", "", "Bilinear", "None,Bilinear,Trilinear");
ImportAssetConfigSettingsList.addNewConfigSetting("Images/UseMips", "Use Mipmaps", "bool", "", "1", "");
ImportAssetConfigSettingsList.addNewConfigSetting("Images/IsHDR", "Is HDR", "bool", "", "0", "");
ImportAssetConfigSettingsList.addNewConfigSetting("Images/Scaling", "Scaling", "float", "", "1.0", "");
ImportAssetConfigSettingsList.addNewConfigSetting("Images/Compressed", "Is Compressed", "bool", "", "1", "");
ImportAssetConfigSettingsList.addNewConfigSetting("Images/GenerateMaterialOnImport", "Generate Material On Import", "bool", "", "1", "");
ImportAssetConfigSettingsList.addNewConfigSetting("Images/PopulateMaterialMaps", "Populate Material Maps", "bool", "", "1", "");
//Sounds
ImportAssetConfigSettingsList.addNewConfigSetting("Sounds/VolumeAdjust", "Volume Adjustment", "float", "", "1.0", "");
ImportAssetConfigSettingsList.addNewConfigSetting("Sounds/PitchAdjust", "Pitch Adjustment", "float", "", "1.0", "");
ImportAssetConfigSettingsList.addNewConfigSetting("Sounds/Compressed", "Is Compressed", "bool", "", "0", "");
}
}
function ImportAssetConfigSettingsList::addNewConfigSetting(%this, %settingName, %settingFieldLabel, %type, %tooltip, %defaultValue, %fieldData)
{
%this.add(%settingName TAB %settingFieldLabel TAB %type TAB %tooltip, %defaultValue TAB %fieldData);
}
function ImportAssetOptionsWindow::findMissingFile(%this, %assetItem) function ImportAssetOptionsWindow::findMissingFile(%this, %assetItem)
{ {
if(%assetItem.assetType $= "Model") if(%assetItem.assetType $= "Model")
@ -99,6 +172,7 @@ function ImportAssetOptionsWindow::editImportSettings(%this, %assetItem)
if(%meshCount > 0) if(%meshCount > 0)
{ {
ImportOptionsList.startGroup("Mesh"); ImportOptionsList.startGroup("Mesh");
ImportOptionsList.addField("AutogenCollisions", "Auto-gen Collisions", "bool", "", "0", "", %assetConfigObj); ImportOptionsList.addField("AutogenCollisions", "Auto-gen Collisions", "bool", "", "0", "", %assetConfigObj);
ImportOptionsList.addField("CollapseSubmeshes", "Collapse Submeshes", "bool", "", "0", "", %assetConfigObj); ImportOptionsList.addField("CollapseSubmeshes", "Collapse Submeshes", "bool", "", "0", "", %assetConfigObj);
ImportOptionsList.addField("UpAxisOverride", "Up-Axis Override", "list", "", "Z_AXIS", "Z_AXIS,Y_AXIS,X_AXIS", %assetConfigObj); ImportOptionsList.addField("UpAxisOverride", "Up-Axis Override", "list", "", "Z_AXIS", "Z_AXIS,Y_AXIS,X_AXIS", %assetConfigObj);
@ -194,15 +268,21 @@ function getAssetImportConfigValue(%fieldName, %defaultValue)
return AssetImportSettings.value(ImportAssetWindow.activeImportConfig @ "/" @ %fieldName, %defaultValue); return AssetImportSettings.value(ImportAssetWindow.activeImportConfig @ "/" @ %fieldName, %defaultValue);
} }
function ImportAssetConfigEditorWindow::populateConfigList(%this, %optionsObj) function ImportAssetConfigEditorWindow::populateConfigList(%this, %configName)
{ {
AssetImportConfigName.setText(%optionsObj.Name); //Ensure our config list is set up
setupImportConfigSettingsList();
AssetImportConfigName.setText(%configName);
ImportOptionsConfigList.clearFields(); ImportOptionsConfigList.clearFields();
ImportOptionsConfigList.startGroup("Mesh"); %this.populateConfigListByGroup("Meshes");
ImportOptionsConfigList.addSettingsField("Mesh/ImportMesh", "Import Mesh", "bool", "Should meshes be imported", ""); %this.populateConfigListByGroup("Materials");
ImportOptionsConfigList.endGroup(); %this.populateConfigListByGroup("Animations");
%this.populateConfigListByGroup("Images");
%this.populateConfigListByGroup("Collision");
%this.populateConfigListByGroup("Sound");
/*ImportOptionsConfigList.addCallbackField("ImportMesh", "Import Mesh", "bool", "", "1", "", "ToggleImportMesh", %optionsObj); /*ImportOptionsConfigList.addCallbackField("ImportMesh", "Import Mesh", "bool", "", "1", "", "ToggleImportMesh", %optionsObj);
ImportOptionsConfigList.addField("DoUpAxisOverride", "Do Up-axis Override", "bool", "", "0", "", %optionsObj); ImportOptionsConfigList.addField("DoUpAxisOverride", "Do Up-axis Override", "bool", "", "0", "", %optionsObj);
@ -283,8 +363,31 @@ function ImportAssetConfigEditorWindow::populateConfigList(%this, %optionsObj)
ImportOptionsConfigList.endGroup();*/ ImportOptionsConfigList.endGroup();*/
} }
function ImportAssetConfigEditorWindow::populateConfigListByGroup(%this, %groupName)
{
ImportOptionsConfigList.startGroup(%groupName);
for(%i=0; %i < ImportAssetConfigSettingsList.count(); %i++)
{
%settingName = getField(ImportAssetConfigSettingsList.getKey(%i),0);
if(startsWith(%settingName, %groupName@"/"))
{
%labelName = getField(ImportAssetConfigSettingsList.getKey(%i), 1);
%type = getField(ImportAssetConfigSettingsList.getKey(%i), 2);
%tooltip = getField(ImportAssetConfigSettingsList.getKey(%i), 3);
%defaultValue = getField(ImportAssetConfigSettingsList.getValue(%i), 0);
%dataValues = getField(ImportAssetConfigSettingsList.getValue(%i), 1);
ImportOptionsConfigList.addSettingsField(%settingName, %labelName, %type, %tooltip, %defaultValue, %dataValues);
}
}
ImportOptionsConfigList.endGroup();
}
function ImportAssetConfigEditorWindow::addNewConfig(%this) function ImportAssetConfigEditorWindow::addNewConfig(%this)
{ {
//Ensure our list is set up
setupImportConfigSettingsList();
ImportAssetNewConfigEditorWindow.setVisible(1); ImportAssetNewConfigEditorWindow.setVisible(1);
ImportAssetNewConfigEditorWindow.selectWindow(); ImportAssetNewConfigEditorWindow.selectWindow();
@ -358,6 +461,7 @@ function ImportAssetConfigEditorWindow::addNewConfig(%this)
function ImportAssetConfigEditorWindow::editConfig(%this) function ImportAssetConfigEditorWindow::editConfig(%this)
{ {
//Ensure our list is set up
ImportAssetConfigEditorWindow.setVisible(1); ImportAssetConfigEditorWindow.setVisible(1);
ImportAssetConfigEditorWindow.selectWindow(); ImportAssetConfigEditorWindow.selectWindow();
@ -366,6 +470,10 @@ function ImportAssetConfigEditorWindow::editConfig(%this)
function ImportAssetConfigEditorWindow::deleteConfig(%this) function ImportAssetConfigEditorWindow::deleteConfig(%this)
{ {
for(%i=0; %i < %configList.count(); %i++)
{
}
ImportAssetWindow.importConfigsList.erase(ImportAssetWindow.activeImportConfigIndex); ImportAssetWindow.importConfigsList.erase(ImportAssetWindow.activeImportConfigIndex);
ImportAssetConfigList.setSelected(0); //update it ImportAssetConfigList.setSelected(0); //update it
@ -380,11 +488,89 @@ function ImportAssetConfigEditorWindow::saveAssetOptionsConfig(%this)
ImportAssetWindow.reloadImportOptionConfigs(); ImportAssetWindow.reloadImportOptionConfigs();
} }
function ImportOptionsConfigList::addSettingsField(%this, %settingsFieldName, %labelText, %fieldType, %tooltip, %fieldData) function ImportAssetConfigEditorWindow::createNewImportConfig(%this)
{
%configName = AssetImportNewConfigName.getText();
%configList = ImportAssetConfigSettingsList;
AssetImportSettings.beginGroup(%configName);
for(%i=0; %i < %configList.count(); %i++)
{
%settingName = getField(%configList.getKey(%i),0);
if(startsWith(%settingName, "Meshes/"))
{
%defaultValue = getField(%configList.getValue(%i), 0);
AssetImportSettings.setValue(%settingName, %defaultValue);
}
}
for(%i=0; %i < %configList.count(); %i++)
{
%settingName = getField(%configList.getKey(%i),0);
if(startsWith(%settingName, "Materials/"))
{
%defaultValue = getField(%configList.getValue(%i), 0);
AssetImportSettings.setValue(%settingName, %defaultValue);
}
}
for(%i=0; %i < %configList.count(); %i++)
{
%settingName = getField(%configList.getKey(%i),0);
if(startsWith(%settingName, "Animations/"))
{
%defaultValue = getField(%configList.getValue(%i), 0);
AssetImportSettings.setValue(%settingName, %defaultValue);
}
}
for(%i=0; %i < %configList.count(); %i++)
{
%settingName = getField(%configList.getKey(%i),0);
if(startsWith(%settingName, "Collision/"))
{
%defaultValue = getField(%configList.getValue(%i), 0);
AssetImportSettings.setValue(%settingName, %defaultValue);
}
}
for(%i=0; %i < %configList.count(); %i++)
{
%settingName = getField(%configList.getKey(%i),0);
if(startsWith(%settingName, "Images/"))
{
%defaultValue = getField(%configList.getValue(%i), 0);
AssetImportSettings.setValue(%settingName, %defaultValue);
}
}
for(%i=0; %i < %configList.count(); %i++)
{
%settingName = getField(%configList.getKey(%i),0);
if(startsWith(%settingName, "Sounds/"))
{
%defaultValue = getField(%configList.getValue(%i), 0);
AssetImportSettings.setValue(%settingName, %defaultValue);
}
}
AssetImportSettings.endGroup();
%success = AssetImportSettings.write();
ImportAssetNewConfigEditorWindow.setVisible(0);
}
function ImportOptionsConfigList::addSettingsField(%this, %settingsFieldName, %labelText, %fieldType, %tooltip, %fieldValue, %fieldData)
{ {
%moddedSettingsFieldName = strreplace(%settingsFieldName, "/", "-"); %moddedSettingsFieldName = strreplace(%settingsFieldName, "/", "-");
%this.addCallbackField(%moddedSettingsFieldName, %labelText, %fieldType, "", AssetImportSettings.value(%settingsFieldName), %fieldData, "changeEditorSetting"); %value = AssetImportSettings.value(%settingsFieldName);
if(%value $= "")
%value = %fieldValue;
%this.addCallbackField(%moddedSettingsFieldName, %labelText, %fieldType, "", %value, %fieldData, "changeEditorSetting");
} }
function ImportOptionsConfigList::changeEditorSetting(%this, %varName, %value) function ImportOptionsConfigList::changeEditorSetting(%this, %varName, %value)

View file

@ -90,7 +90,7 @@ function GuiInspectorVariableGroup::buildListField(%this, %fieldName, %fieldLabe
if(%fieldName $= "") if(%fieldName $= "")
%editControl.setText(%fieldName); %editControl.setText(%fieldName);
} }
else else if(isObject(%ownerObj))
{ {
//regular variable //regular variable
%setCommand = %editControl @ ".setText(" @ %ownerObj @ "." @ %fieldName @ ");"; %setCommand = %editControl @ ".setText(" @ %ownerObj @ "." @ %fieldName @ ");";

View file

@ -0,0 +1,37 @@
function @@::onCreate(%this)
{
}
function @@::onDestroy(%this)
{
}
//This is called when the server is initially set up by the game application
function @@::initServer(%this)
{
}
//This is called when the server is created for an actual game/map to be played
function @@::onCreateServer(%this)
{
}
//This is called when the server is shut down due to the game/map being exited
function @@::onDestroyServer(%this)
{
}
//This is called when the client is initially set up by the game application
function @@::initClient(%this)
{
}
//This is called when a client connects to a server
function @@::onCreateClient(%this)
{
}
//This is called when a client disconnects from a server
function @@::onDestroyClient(%this)
{
}

View file

@ -107,15 +107,15 @@ function GuiEditorTreeView::onRightMouseDown( %this, %item, %pts, %obj )
object = %obj; object = %obj;
}; };
%popup.item[ 0 ] = "Rename" TAB "" TAB "GuiEditorTreeView.showItemRenameCtrl( GuiEditorTreeView.findItemByObjectId(" @ %popup.object @ ") );"; %popup.item[ 0 ] = "Rename" TAB "" TAB "GuiEditorTreeView.showItemRenameCtrl( GuiEditorTreeView.findItemByObjectId(" @ %obj @ ") );";
%popup.item[ 1 ] = "Delete" TAB "" TAB "GuiEditor.deleteControl(" @ %popup.object @ ");"; %popup.item[ 1 ] = "Delete" TAB "" TAB "GuiEditor.deleteControl(" @ %obj @ ");";
%popup.item[ 2 ] = "-"; %popup.item[ 2 ] = "-";
%popup.item[ 3 ] = "Locked" TAB "" TAB "%this.object.setLocked( !" @ %popup.object @ ".locked); GuiEditorTreeView.update();"; %popup.item[ 3 ] = "Locked" TAB "" TAB %obj @ ".setLocked( !" @ %obj @ ".locked); GuiEditorTreeView.update();";
%popup.item[ 4 ] = "Hidden" TAB "" TAB "%this.object.setVisible( !" @ %popup.object @ ".isVisible() ); GuiEditorTreeView.update();"; %popup.item[ 4 ] = "Hidden" TAB "" TAB %obj @ ".setVisible( !" @ %obj @ ".isVisible() ); GuiEditorTreeView.update();";
%popup.item[ 5 ] = "-"; %popup.item[ 5 ] = "-";
%popup.item[ 6 ] = "Add New Controls Here" TAB "" TAB "GuiEditor.setCurrentAddSet( " @ %popup.object @ ");"; %popup.item[ 6 ] = "Add New Controls Here" TAB "" TAB "GuiEditor.setCurrentAddSet( " @ %obj @ ");";
%popup.item[ 7 ] = "Add Child Controls to Selection" TAB "" TAB "GuiEditor.selectAllControlsInSet( " @ %popup.object @ ", false );"; %popup.item[ 7 ] = "Add Child Controls to Selection" TAB "" TAB "GuiEditor.selectAllControlsInSet( " @ %obj @ ", false );";
%popup.item[ 8 ] = "Remove Child Controls from Selection" TAB "" TAB "GuiEditor.selectAllControlsInSet( " @ %popup.object @ ", true );"; %popup.item[ 8 ] = "Remove Child Controls from Selection" TAB "" TAB "GuiEditor.selectAllControlsInSet( " @ %obj @ ", true );";
%popup.checkItem( 3, %obj.locked ); %popup.checkItem( 3, %obj.locked );
%popup.checkItem( 4, !%obj.isVisible() ); %popup.checkItem( 4, !%obj.isVisible() );

View file

@ -1,142 +1,145 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?> <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<EditorSettings> <EditorSettings>
<Group name="WorldEditor"> <Group name="WorldEditor">
<Setting name="orthoFOV">50</Setting>
<Setting name="currentEditor">WorldEditorInspectorPlugin</Setting>
<Setting name="torsionPath">AssetWork_Debug.exe</Setting>
<Setting name="displayType">6</Setting> <Setting name="displayType">6</Setting>
<Setting name="orthoFOV">50</Setting>
<Setting name="torsionPath">AssetWork_Debug.exe</Setting>
<Setting name="dropType">screenCenter</Setting> <Setting name="dropType">screenCenter</Setting>
<Setting name="undoLimit">40</Setting>
<Setting name="forceLoadDAE">0</Setting> <Setting name="forceLoadDAE">0</Setting>
<Setting name="currentEditor">WorldEditorInspectorPlugin</Setting>
<Setting name="orthoShowGrid">1</Setting> <Setting name="orthoShowGrid">1</Setting>
<Group name="Docs"> <Setting name="undoLimit">40</Setting>
<Setting name="documentationLocal">../../../Documentation/Official Documentation.html</Setting>
<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="documentationReference">../../../Documentation/Torque 3D - Script Manual.chm</Setting>
</Group>
<Group name="Theme">
<Setting name="windowTitleBGNAColor">180 180 180 255</Setting>
<Setting name="windowTitleFontHLColor">255 255 255 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="fadeIconsEndAlpha">0</Setting>
<Setting name="fadeIconsStartAlpha">255</Setting>
<Setting name="fadeIconsEndDist">20</Setting>
<Setting name="fadeIconsStartDist">8</Setting>
<Setting name="fadeIcons">1</Setting>
</Group>
<Group name="Color">
<Setting name="objMouseOverSelectColor">0 0 255 255</Setting>
<Setting name="objectTextColor">255 255 255 255</Setting>
<Setting name="popupBackgroundColor">100 100 100 255</Setting>
<Setting name="objSelectColor">255 0 0 255</Setting>
<Setting name="selectionBoxColor">255 255 0 255</Setting>
<Setting name="objMouseOverColor">0 255 0 255</Setting>
<Setting name="dragRectColor">255 255 0 255</Setting>
</Group>
<Group name="Tools">
<Setting name="snapSoftSize">2</Setting>
<Setting name="snapGround">0</Setting>
<Setting name="objectsUseBoxCenter">1</Setting>
<Setting name="snapSoft">0</Setting>
<Setting name="dropAtScreenCenterMax">100</Setting>
<Setting name="dropAtScreenCenterScalar">1</Setting>
<Setting name="boundingBoxCollision">0</Setting>
</Group>
<Group name="Render"> <Group name="Render">
<Setting name="renderObjText">1</Setting>
<Setting name="showMousePopupInfo">1</Setting> <Setting name="showMousePopupInfo">1</Setting>
<Setting name="renderObjHandle">1</Setting> <Setting name="renderObjText">1</Setting>
<Setting name="renderSelectionBox">1</Setting>
<Setting name="renderPopupBackground">1</Setting> <Setting name="renderPopupBackground">1</Setting>
<Setting name="renderSelectionBox">1</Setting>
<Setting name="renderObjHandle">1</Setting>
</Group> </Group>
<Group name="Grid"> <Group name="Grid">
<Setting name="gridSize">1</Setting>
<Setting name="gridOriginColor">255 255 255 100</Setting> <Setting name="gridOriginColor">255 255 255 100</Setting>
<Setting name="gridSnap">0</Setting> <Setting name="gridSnap">0</Setting>
<Setting name="gridMinorColor">51 51 51 100</Setting> <Setting name="gridMinorColor">51 51 51 100</Setting>
<Setting name="gridColor">102 102 102 100</Setting> <Setting name="gridColor">102 102 102 100</Setting>
<Setting name="gridSize">1</Setting> </Group>
<Group name="Color">
<Setting name="selectionBoxColor">255 255 0 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="objectTextColor">255 255 255 255</Setting>
<Setting name="popupBackgroundColor">100 100 100 255</Setting>
<Setting name="objSelectColor">255 0 0 255</Setting>
</Group>
<Group name="Tools">
<Setting name="objectsUseBoxCenter">1</Setting>
<Setting name="snapGround">0</Setting>
<Setting name="dropAtScreenCenterMax">100</Setting>
<Setting name="dropAtScreenCenterScalar">1</Setting>
<Setting name="snapSoft">0</Setting>
<Setting name="snapSoftSize">2</Setting>
<Setting name="boundingBoxCollision">0</Setting>
</Group>
<Group name="ObjectIcons">
<Setting name="fadeIcons">1</Setting>
<Setting name="fadeIconsEndAlpha">0</Setting>
<Setting name="fadeIconsStartAlpha">255</Setting>
<Setting name="fadeIconsEndDist">20</Setting>
<Setting name="fadeIconsStartDist">8</Setting>
</Group>
<Group name="Theme">
<Setting name="windowTitleFontColor">215 215 215 255</Setting>
<Setting name="windowTitleBGNAColor">180 180 180 255</Setting>
<Setting name="windowTitleFontHLColor">255 255 255 255</Setting>
<Setting name="windowTitleBGColor">50 50 50 255</Setting>
<Setting name="windowTitleBGHLColor">48 48 48 255</Setting>
</Group> </Group>
<Group name="Images"> <Group name="Images">
<Setting name="lockedHandle">tools/worldEditor/images/LockedHandle</Setting> <Setting name="lockedHandle">tools/worldEditor/images/LockedHandle</Setting>
<Setting name="defaultHandle">tools/worldEditor/images/DefaultHandle</Setting> <Setting name="defaultHandle">tools/worldEditor/images/DefaultHandle</Setting>
<Setting name="selectHandle">tools/worldEditor/images/SelectHandle</Setting> <Setting name="selectHandle">tools/worldEditor/images/SelectHandle</Setting>
</Group> </Group>
<Group name="Docs">
<Setting name="documentationLocal">../../../Documentation/Official Documentation.html</Setting>
<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="documentationReference">../../../Documentation/Torque 3D - Script Manual.chm</Setting>
</Group>
</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="planeDim">500</Setting>
<Setting name="renderPlane">0</Setting>
<Setting name="renderPlaneHashes">0</Setting>
<Setting name="snapToGrid">0</Setting>
<Setting name="gridColor">255 255 255 20</Setting>
<Setting name="gridSize">10 10 10</Setting>
</Group>
</Group> </Group>
<Group name="Theme"> <Group name="Theme">
<Setting name="fieldTextColor">178 175 172 255</Setting> <Setting name="dividerLightColor">96 94 92 255</Setting>
<Setting name="fieldTextSELColor">240 240 240 255</Setting>
<Setting name="windowBackgroundColor">32 31 30 255</Setting> <Setting name="windowBackgroundColor">32 31 30 255</Setting>
<Setting name="tooltipTextColor">255 255 255 255</Setting> <Setting name="tooltipTextColor">255 255 255 255</Setting>
<Setting name="tabsSELColor">59 58 57 255</Setting> <Setting name="fieldTextColor">178 175 172 255</Setting>
<Setting name="headerColor">50 49 48 255</Setting>
<Setting name="tabsHLColor">50 49 48 255</Setting>
<Setting name="tooltipBGColor">43 43 43 255</Setting>
<Setting name="dividerDarkColor">17 16 15 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="dividerMidColor">50 49 48 255</Setting>
<Setting name="fieldTextHLColor">234 232 230 255</Setting>
<Setting name="fieldBGSELColor">100 98 96 255</Setting>
<Setting name="headerTextColor">236 234 232 255</Setting> <Setting name="headerTextColor">236 234 232 255</Setting>
<Setting name="dividerLightColor">96 94 92 255</Setting> <Setting name="tabsSELColor">59 58 57 255</Setting>
<Setting name="tabsColor">37 36 35 255</Setting> <Setting name="fieldBGSELColor">100 98 96 255</Setting>
<Setting name="fieldBGHLColor">72 70 68 255</Setting>
<Setting name="tooltipDividerColor">72 70 68 255</Setting>
<Setting name="fieldTextSELColor">240 240 240 255</Setting>
<Setting name="fieldBGColor">59 58 57 255</Setting> <Setting name="fieldBGColor">59 58 57 255</Setting>
<Setting name="fieldTextHLColor">234 232 230 255</Setting>
<Setting name="dividerMidColor">50 49 48 255</Setting>
<Setting name="tabsColor">37 36 35 255</Setting>
<Setting name="tabsHLColor">50 49 48 255</Setting>
<Setting name="headerColor">50 49 48 255</Setting>
<Setting name="tooltipBGColor">43 43 43 255</Setting>
</Group> </Group>
<Group name="GuiEditor"> <Group name="GuiEditor">
<Setting name="lastPath">tools/gui</Setting>
<Setting name="previewResolution">1024 768</Setting> <Setting name="previewResolution">1024 768</Setting>
<Setting name="lastPath">tools/gui</Setting>
<Group name="EngineDevelopment"> <Group name="EngineDevelopment">
<Setting name="showEditorGuis">0</Setting>
<Setting name="showEditorProfiles">0</Setting> <Setting name="showEditorProfiles">0</Setting>
<Setting name="toggleIntoEditor">0</Setting> <Setting name="toggleIntoEditor">0</Setting>
<Setting name="showEditorGuis">0</Setting>
</Group> </Group>
<Group name="Snapping"> <Group name="Snapping">
<Setting name="snap2Grid">0</Setting>
<Setting name="snapToControls">1</Setting> <Setting name="snapToControls">1</Setting>
<Setting name="snap2GridSize">8</Setting> <Setting name="snap2GridSize">8</Setting>
<Setting name="snapToCenters">1</Setting> <Setting name="snapToCenters">1</Setting>
<Setting name="snap2Grid">0</Setting>
<Setting name="snapToCanvas">1</Setting> <Setting name="snapToCanvas">1</Setting>
<Setting name="snapToGuides">1</Setting> <Setting name="snapToGuides">1</Setting>
<Setting name="sensitivity">2</Setting> <Setting name="sensitivity">2</Setting>
<Setting name="snapToEdges">1</Setting> <Setting name="snapToEdges">1</Setting>
</Group> </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="Rendering"> <Group name="Rendering">
<Setting name="drawBorderLines">1</Setting> <Setting name="drawBorderLines">1</Setting>
<Setting name="drawGuides">1</Setting> <Setting name="drawGuides">1</Setting>
</Group> </Group>
<Group name="Help">
<Setting name="documentationReference">../../../Documentation/Torque 3D - Script Manual.chm</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="Selection">
<Setting name="fullBox">0</Setting>
</Group>
<Group name="Library"> <Group name="Library">
<Setting name="viewType">Categorized</Setting> <Setting name="viewType">Categorized</Setting>
</Group> </Group>
</Group> </Group>
<Group name="AxisGizmo"> <Group name="ConvexEditor">
<Setting name="snapRotations">0</Setting> <Setting name="materialName">Grid_512_Orange</Setting>
<Setting name="mouseRotateScalar">0.8</Setting>
<Setting name="renderInfoText">1</Setting>
<Setting name="axisGizmoMaxScreenLen">100</Setting>
<Setting name="rotationSnap">15</Setting>
<Setting name="mouseScaleScalar">0.8</Setting>
<Setting name="renderWhenUsed">0</Setting>
<Group name="Grid">
<Setting name="gridSize">10 10 10</Setting>
<Setting name="snapToGrid">0</Setting>
<Setting name="gridColor">255 255 255 20</Setting>
<Setting name="planeDim">500</Setting>
<Setting name="renderPlaneHashes">0</Setting>
<Setting name="renderPlane">0</Setting>
</Group>
</Group> </Group>
<Group name="NavEditor"> <Group name="NavEditor">
<Setting name="SpawnClass">AIPlayer</Setting> <Setting name="SpawnClass">AIPlayer</Setting>
@ -144,15 +147,12 @@
<Group name="LevelInformation"> <Group name="LevelInformation">
<Setting name="levelsDirectory">data/FPSGameplay/levels</Setting> <Setting name="levelsDirectory">data/FPSGameplay/levels</Setting>
<Group name="levels"> <Group name="levels">
<Group name="PbrMatTest.mis">
<Setting name="cameraSpeed">5</Setting>
</Group>
<Group name="BlankRoom.mis"> <Group name="BlankRoom.mis">
<Setting name="cameraSpeed">25</Setting> <Setting name="cameraSpeed">25</Setting>
</Group> </Group>
<Group name="PbrMatTest.mis">
<Setting name="cameraSpeed">5</Setting>
</Group>
</Group> </Group>
</Group> </Group>
<Group name="ConvexEditor">
<Setting name="materialName">Grid_512_Orange</Setting>
</Group>
</EditorSettings> </EditorSettings>

View file

@ -12,7 +12,17 @@
// When a local game is started - a listen server - via calling StartGame() a server is created and then the client is // 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(). // connected to it via createAndConnectToLocalServer().
function FPSGameplay::create( %this ) function FPSGameplay::onCreate( %this )
{
echo("Made it");
}
function FPSGameplay::onDestroy( %this )
{
}
function FPSGameplay::initServer(%this)
{ {
//server scripts //server scripts
exec("./scripts/server/aiPlayer.cs"); exec("./scripts/server/aiPlayer.cs");
@ -39,8 +49,10 @@ function FPSGameplay::create( %this )
exec("./scripts/server/VolumetricFog.cs"); exec("./scripts/server/VolumetricFog.cs");
exec("./scripts/server/weapon.cs"); exec("./scripts/server/weapon.cs");
exec("./scripts/server/physicsShape.cs"); exec("./scripts/server/physicsShape.cs");
}
//add DBs
function FPSGameplay::onCreateServer(%this)
{
if(isObject(DatablockFilesList)) if(isObject(DatablockFilesList))
{ {
for( %file = findFirstFile( "data/FPSGameplay/scripts/datablocks/*.cs.dso" ); for( %file = findFirstFile( "data/FPSGameplay/scripts/datablocks/*.cs.dso" );
@ -61,53 +73,50 @@ function FPSGameplay::create( %this )
DatablockFilesList.add(%file); DatablockFilesList.add(%file);
} }
} }
if(isObject(LevelFilesList))
{
for( %file = findFirstFile( "data/FPSGameplay/levels/*.mis" );
%file !$= "";
%file = findNextFile( "data/FPSGameplay/levels/*.mis" ))
{
LevelFilesList.add(%file);
}
}
if (!$Server::Dedicated)
{
exec("data/FPSGameplay/scripts/client/gameProfiles.cs");
//client scripts
$KeybindPath = "data/FPSGameplay/scripts/client/default.keybinds.cs";
exec($KeybindPath);
%prefPath = getPrefpath();
if(isFile(%prefPath @ "/keybinds.cs"))
exec(%prefPath @ "/keybinds.cs");
exec("data/FPSGameplay/scripts/client/inputCommands.cs");
//guis
exec("./scripts/gui/chatHud.gui");
exec("./scripts/gui/playerList.gui");
exec("./scripts/gui/playGui.gui");
exec("./scripts/gui/hudlessGui.gui");
exec("data/FPSGameplay/scripts/client/playGui.cs");
exec("data/FPSGameplay/scripts/client/hudlessGui.cs");
exec("data/FPSGameplay/scripts/client/message.cs");
exec("data/FPSGameplay/scripts/client/chatHud.cs");
exec("data/FPSGameplay/scripts/client/clientCommands.cs");
exec("data/FPSGameplay/scripts/client/messageHud.cs");
exec("data/FPSGameplay/scripts/client/playerList.cs");
exec("data/FPSGameplay/scripts/client/centerPrint.cs");
exec("data/FPSGameplay/scripts/client/recordings.cs");
exec("data/FPSGameplay/scripts/client/screenshot.cs");
}
} }
function FPSGameplay::destroy( %this ) function FPSGameplay::onDestroyServer(%this)
{ {
}
function FPSGameplay::initClient(%this)
{
exec("data/FPSGameplay/scripts/client/gameProfiles.cs");
//client scripts
$KeybindPath = "data/FPSGameplay/scripts/client/default.keybinds.cs";
exec($KeybindPath);
%prefPath = getPrefpath();
if(isFile(%prefPath @ "/keybinds.cs"))
exec(%prefPath @ "/keybinds.cs");
exec("data/FPSGameplay/scripts/client/inputCommands.cs");
//guis
exec("./scripts/gui/chatHud.gui");
exec("./scripts/gui/playerList.gui");
exec("./scripts/gui/playGui.gui");
exec("./scripts/gui/hudlessGui.gui");
exec("data/FPSGameplay/scripts/client/playGui.cs");
exec("data/FPSGameplay/scripts/client/hudlessGui.cs");
exec("data/FPSGameplay/scripts/client/message.cs");
exec("data/FPSGameplay/scripts/client/chatHud.cs");
exec("data/FPSGameplay/scripts/client/clientCommands.cs");
exec("data/FPSGameplay/scripts/client/messageHud.cs");
exec("data/FPSGameplay/scripts/client/playerList.cs");
exec("data/FPSGameplay/scripts/client/centerPrint.cs");
exec("data/FPSGameplay/scripts/client/recordings.cs");
exec("data/FPSGameplay/scripts/client/screenshot.cs");
}
function FPSGameplay::onCreateClient(%this)
{
}
function FPSGameplay::onDestroyClient(%this)
{
} }

View file

@ -3,8 +3,8 @@
VersionId="1" VersionId="1"
Description="Starter module for FPS gameplay." Description="Starter module for FPS gameplay."
ScriptFile="FPSGameplay.cs" ScriptFile="FPSGameplay.cs"
CreateFunction="create" CreateFunction="onCreate"
DestroyFunction="destroy" DestroyFunction="onDestroy"
Group="Game" Group="Game"
Dependencies="UI=1"> Dependencies="UI=1">
<DeclaredAssets <DeclaredAssets

View file

@ -2,7 +2,7 @@
canSave="true" canSave="true"
canSaveDynamicFields="true" canSaveDynamicFields="true"
AssetName="EmptyLevel" AssetName="EmptyLevel"
FriendlyName="EmptyLevel" LevelName="EmptyLevel"
LevelFile="data/FPSGameplay/levels/EmptyLevel.mis" LevelFile="EmptyLevel.mis"
Description="An empty room" LevelDescription="An empty room"
VersionId="1" /> VersionId="1" />

View file

@ -2,6 +2,7 @@
new Scene(EmptyLevel) { new Scene(EmptyLevel) {
canSave = "1"; canSave = "1";
canSaveDynamicFields = "1"; canSaveDynamicFields = "1";
gameModeName="DeathMatchGame";
cdTrack = "2"; cdTrack = "2";
CTF_scoreLimit = "5"; CTF_scoreLimit = "5";
enabled = "1"; enabled = "1";

View file

@ -2,7 +2,7 @@
canSave="true" canSave="true"
canSaveDynamicFields="true" canSaveDynamicFields="true"
AssetName="EmptyTerrain" AssetName="EmptyTerrain"
FriendlyName="Empty Terrain" LevelName="Empty Terrain"
LevelFile="data/FPSGameplay/levels/Empty Terrain.mis" LevelFile="Empty Terrain.mis"
Description="A Empty level with terrain." LevelDescription="A Empty level with terrain."
VersionId="1" /> VersionId="1" />

View file

@ -2,7 +2,7 @@
canSave="true" canSave="true"
canSaveDynamicFields="true" canSaveDynamicFields="true"
AssetName="Outpost" AssetName="Outpost"
FriendlyName="Outpost" LevelName="Outpost"
LevelFile="data/FPSGameplay/levels/Outpost.mis" LevelFile="Outpost.mis"
Description="Outpost level" LevelDescription="Outpost level"
VersionId="1" /> VersionId="1" />

View file

@ -30,7 +30,7 @@
// - gameType = "Deathmatch"; // - gameType = "Deathmatch";
// If this information is missing then the GameCore will default to Deathmatch. // If this information is missing then the GameCore will default to Deathmatch.
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
function DeathMatchGame::initGameVars(%game) function DeathMatchGame::initGameVars()
{ {
//echo (%game @"\c4 -> "@ %game.class @" -> DeathMatchGame::initGameVars"); //echo (%game @"\c4 -> "@ %game.class @" -> DeathMatchGame::initGameVars");
@ -60,23 +60,23 @@ function DeathMatchGame::initGameVars(%game)
$Game::defaultCameraSpawnGroups = "CameraSpawnPoints PlayerSpawnPoints PlayerDropPoints"; $Game::defaultCameraSpawnGroups = "CameraSpawnPoints PlayerSpawnPoints PlayerDropPoints";
// Set the gameplay parameters // Set the gameplay parameters
%game.duration = 30 * 60; $Game::Duration = 30 * 60;
%game.endgameScore = 20; $Game::EndGameScore = 20;
%game.endgamePause = 10; $Game::EndGamePause = 10;
%game.allowCycling = false; // Is mission cycling allowed? $Game::AllowCycling = false; // Is mission cycling allowed?
} }
function DeathMatchGame::onGameDurationEnd(%game) function DeathMatchGame::onGameDurationEnd()
{ {
// This "redirect" is here so that we can abort the game cycle if // This "redirect" is here so that we can abort the game cycle if
// the $Game::Duration variable has been cleared, without having // the $Game::Duration variable has been cleared, without having
// to have a function to cancel the schedule. // to have a function to cancel the schedule.
if ($Game::Duration && !(EditorIsActive() && GuiEditorIsActive())) if ($Game::Duration && !(EditorIsActive() && GuiEditorIsActive()))
Game.onGameDurationEnd(); DeathMatchGame::onGameDurationEnd();
} }
function DeathMatchGame::onClientEnterGame(%this, %client) function DeathMatchGame::onClientEnterGame(%client)
{ {
// This function currently relies on some helper functions defined in // This function currently relies on some helper functions defined in
// core/scripts/spawn.cs. For custom spawn behaviors one can either // core/scripts/spawn.cs. For custom spawn behaviors one can either
@ -110,7 +110,7 @@ function DeathMatchGame::onClientEnterGame(%this, %client)
%client.RefreshWeaponHud(0, "", ""); %client.RefreshWeaponHud(0, "", "");
// Prepare the player object. // Prepare the player object.
%this.preparePlayer(%client); DeathMatchGame::preparePlayer(%client);
// Inform the client of all the other clients // Inform the client of all the other clients
%count = ClientGroup.getCount(); %count = ClientGroup.getCount();
@ -162,25 +162,26 @@ function DeathMatchGame::onClientEnterGame(%this, %client)
%client.isSuperAdmin); %client.isSuperAdmin);
} }
function DeathMatchGame::onClientLeaveGame(%this, %client) function DeathMatchGame::onClientLeaveGame(%client)
{ {
// Cleanup the camera // Cleanup the camera
if (isObject(%this.camera)) if (isObject(%client.camera))
%this.camera.delete(); %client.camera.delete();
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// The server has started up so do some game start up // The server has started up so do some game start up
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
function DeathMatchGame::onMissionStart(%this) function DeathMatchGame::onMissionStart()
{ {
//set up the game and game variables //set up the game and game variables
%this.initGameVars(); DeathMatchGame::initGameVars();
$Game::Duration = %this.duration; $Game::Duration = 30 * 60;
$Game::EndGameScore = %this.endgameScore; $Game::EndGameScore = 20;
$Game::EndGamePause = %this.endgamePause; $Game::EndGamePause = 10;
$Game::AllowCycling = false; // Is mission cycling allowed?
//echo (%game @"\c4 -> "@ %game.class @" -> GameCore::onStartGame"); //echo (%game @"\c4 -> "@ %game.class @" -> GameCore::onStartGame");
if ($Game::Running) if ($Game::Running)
@ -203,14 +204,14 @@ function DeathMatchGame::onMissionStart(%this)
// Start the game timer // Start the game timer
if ($Game::Duration) if ($Game::Duration)
$Game::Schedule = %this.schedule($Game::Duration * 1000, "onGameDurationEnd"); $Game::Schedule = schedule($Game::Duration * 1000, "onGameDurationEnd");
$Game::Running = true; $Game::Running = true;
$Game = %this; $Game = DeathMatchGame;
} }
function DeathMatchGame::onMissionEnded(%this) function DeathMatchGame::onMissionEnded()
{ {
if (!$Game::Running) if (!$Game::Running)
{ {
@ -232,11 +233,11 @@ function DeathMatchGame::onMissionEnded(%this)
$Game = ""; $Game = "";
} }
function DeathMatchGame::onMissionReset(%this) function DeathMatchGame::onMissionReset()
{ {
// Called by resetMission(), after all the temporary mission objects // Called by resetMission(), after all the temporary mission objects
// have been deleted. // have been deleted.
%this.initGameVars(); DeathMatchGame::initGameVars();
$Game::Duration = %this.duration; $Game::Duration = %this.duration;
$Game::EndGameScore = %this.endgameScore; $Game::EndGameScore = %this.endgameScore;
@ -251,7 +252,7 @@ function DeathMatchGame::onMissionReset(%this)
// Added this stage to creating a player so game types can override it easily. // Added this stage to creating a player so game types can override it easily.
// This is a good place to initiate team selection. // This is a good place to initiate team selection.
function DeathMatchGame::preparePlayer(%this, %client) function DeathMatchGame::preparePlayer(%client)
{ {
//echo (%game @"\c4 -> "@ %game.class @" -> GameCore::preparePlayer"); //echo (%game @"\c4 -> "@ %game.class @" -> GameCore::preparePlayer");
@ -263,13 +264,13 @@ function DeathMatchGame::preparePlayer(%this, %client)
%playerSpawnPoint = pickPlayerSpawnPoint($Game::DefaultPlayerSpawnGroups); %playerSpawnPoint = pickPlayerSpawnPoint($Game::DefaultPlayerSpawnGroups);
// Spawn a camera for this client using the found %spawnPoint // Spawn a camera for this client using the found %spawnPoint
//%client.spawnPlayer(%playerSpawnPoint); //%client.spawnPlayer(%playerSpawnPoint);
%this.spawnPlayer(%client, %playerSpawnPoint); DeathMatchGame::spawnPlayer(%client, %playerSpawnPoint);
// Starting equipment // Starting equipment
%this.loadOut(%client.player); DeathMatchGame::loadOut(%client.player);
} }
function DeathMatchGame::loadOut(%game, %player) function DeathMatchGame::loadOut(%player)
{ {
//echo (%game @"\c4 -> "@ %game.class @" -> GameCore::loadOut"); //echo (%game @"\c4 -> "@ %game.class @" -> GameCore::loadOut");
@ -328,7 +329,7 @@ function sendMsgClientKilled_Default( %msgType, %client, %sourceClient, %damLoc
messageAll( %msgType, '%1 gets nailed by %2!', %client.playerName, %sourceClient.playerName ); messageAll( %msgType, '%1 gets nailed by %2!', %client.playerName, %sourceClient.playerName );
} }
function DeathMatchGame::onDeath(%game, %client, %sourceObject, %sourceClient, %damageType, %damLoc) function DeathMatchGame::onDeath(%client, %sourceObject, %sourceClient, %damageType, %damLoc)
{ {
//echo (%game @"\c4 -> "@ %game.class @" -> GameCore::onDeath"); //echo (%game @"\c4 -> "@ %game.class @" -> GameCore::onDeath");
@ -355,18 +356,18 @@ function DeathMatchGame::onDeath(%game, %client, %sourceObject, %sourceClient, %
// Dole out points and check for win // Dole out points and check for win
if (( %damageType $= "Suicide" || %sourceClient == %client ) && isObject(%sourceClient)) if (( %damageType $= "Suicide" || %sourceClient == %client ) && isObject(%sourceClient))
{ {
%game.incDeaths( %client, 1, true ); DeathMatchGame::incDeaths( %client, 1, true );
%game.incScore( %client, -1, false ); DeathMatchGame::incScore( %client, -1, false );
} }
else else
{ {
%game.incDeaths( %client, 1, false ); DeathMatchGame::incDeaths( %client, 1, false );
%game.incScore( %sourceClient, 1, true ); DeathMatchGame::incScore( %sourceClient, 1, true );
%game.incKills( %sourceClient, 1, false ); DeathMatchGame::incKills( %sourceClient, 1, false );
// If the game may be ended by a client getting a particular score, check that now. // If the game may be ended by a client getting a particular score, check that now.
if ( $Game::EndGameScore > 0 && %sourceClient.kills >= $Game::EndGameScore ) if ( $Game::EndGameScore > 0 && %sourceClient.kills >= $Game::EndGameScore )
%game.cycleGame(); DeathMatchGame::cycleGame();
} }
} }
@ -374,7 +375,7 @@ function DeathMatchGame::onDeath(%game, %client, %sourceObject, %sourceClient, %
// Scoring // Scoring
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
function DeathMatchGame::incKills(%game, %client, %kill, %dontMessageAll) function DeathMatchGame::incKills(%client, %kill, %dontMessageAll)
{ {
%client.kills += %kill; %client.kills += %kill;
@ -382,7 +383,7 @@ function DeathMatchGame::incKills(%game, %client, %kill, %dontMessageAll)
messageAll('MsgClientScoreChanged', "", %client.score, %client.kills, %client.deaths, %client); messageAll('MsgClientScoreChanged', "", %client.score, %client.kills, %client.deaths, %client);
} }
function DeathMatchGame::incDeaths(%game, %client, %death, %dontMessageAll) function DeathMatchGame::incDeaths(%client, %death, %dontMessageAll)
{ {
%client.deaths += %death; %client.deaths += %death;
@ -390,7 +391,7 @@ function DeathMatchGame::incDeaths(%game, %client, %death, %dontMessageAll)
messageAll('MsgClientScoreChanged', "", %client.score, %client.kills, %client.deaths, %client); messageAll('MsgClientScoreChanged', "", %client.score, %client.kills, %client.deaths, %client);
} }
function DeathMatchGame::incScore(%game, %client, %score, %dontMessageAll) function DeathMatchGame::incScore(%client, %score, %dontMessageAll)
{ {
%client.score += %score; %client.score += %score;
@ -422,7 +423,7 @@ function DeathMatchGame::getTeamScore(%client)
// Spawning // Spawning
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
function DeathMatchGame::spawnPlayer(%game, %client, %spawnPoint, %noControl) function DeathMatchGame::spawnPlayer(%client, %spawnPoint, %noControl)
{ {
//echo (%game @"\c4 -> "@ %game.class @" -> GameCore::spawnPlayer"); //echo (%game @"\c4 -> "@ %game.class @" -> GameCore::spawnPlayer");
@ -465,7 +466,7 @@ function DeathMatchGame::spawnPlayer(%game, %client, %spawnPoint, %noControl)
if (isObject(%player)) if (isObject(%player))
{ {
// Pick a location within the spawn sphere. // Pick a location within the spawn sphere.
%spawnLocation = %game.pickPointInSpawnSphere(%player, %spawnPoint); %spawnLocation = DeathMatchGame::pickPointInSpawnSphere(%player, %spawnPoint);
%player.setTransform(%spawnLocation); %player.setTransform(%spawnLocation);
} }
else else
@ -588,7 +589,7 @@ function DeathMatchGame::spawnPlayer(%game, %client, %spawnPoint, %noControl)
%client.setControlObject(%control); %client.setControlObject(%control);
} }
function DeathMatchGame::pickPointInSpawnSphere(%this, %objectToSpawn, %spawnSphere) function DeathMatchGame::pickPointInSpawnSphere(%objectToSpawn, %spawnSphere)
{ {
%SpawnLocationFound = false; %SpawnLocationFound = false;
%attemptsToSpawn = 0; %attemptsToSpawn = 0;
@ -647,18 +648,18 @@ function DeathMatchGame::pickPointInSpawnSphere(%this, %objectToSpawn, %spawnSph
// Observer // Observer
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
function DeathMatchGame::spawnObserver(%game, %client) function DeathMatchGame::spawnObserver(%client)
{ {
//echo (%game @"\c4 -> "@ %game.class @" -> GameCore::spawnObserver"); //echo (%game @"\c4 -> "@ %game.class @" -> GameCore::spawnObserver");
// Position the camera on one of our observer spawn points // Position the camera on one of our observer spawn points
%client.camera.setTransform(%game.pickObserverSpawnPoint()); %client.camera.setTransform(DeathMatchGame::pickObserverSpawnPoint());
// Set control to the camera // Set control to the camera
%client.setControlObject(%client.camera); %client.setControlObject(%client.camera);
} }
function DeathMatchGame::pickObserverSpawnPoint(%game) function DeathMatchGame::pickObserverSpawnPoint()
{ {
//echo (%game @"\c4 -> "@ %game.class @" -> GameCore::pickObserverSpawnPoint"); //echo (%game @"\c4 -> "@ %game.class @" -> GameCore::pickObserverSpawnPoint");