mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-07-12 23:24:41 +00:00
Moved some scripts and made global flags preferences.
This commit is contained in:
parent
c1419d28d1
commit
2ed175b52c
6 changed files with 684 additions and 718 deletions
|
|
@ -97,8 +97,6 @@ function NavEditorPlugin::onWorldEditorStartup(%this)
|
||||||
// Add items to World Editor Creator
|
// Add items to World Editor Creator
|
||||||
EWCreatorWindow.beginGroup("Navigation");
|
EWCreatorWindow.beginGroup("Navigation");
|
||||||
|
|
||||||
EWCreatorWindow.registerMissionObject("NavMesh", "Navigation mesh");
|
|
||||||
EWCreatorWindow.registerMissionObject("NavPath", "Path");
|
|
||||||
EWCreatorWindow.registerMissionObject("CoverPoint", "Cover point");
|
EWCreatorWindow.registerMissionObject("CoverPoint", "Cover point");
|
||||||
|
|
||||||
EWCreatorWindow.endGroup();
|
EWCreatorWindow.endGroup();
|
||||||
|
|
@ -152,7 +150,7 @@ function NavEditorPlugin::onActivated(%this)
|
||||||
// Always use Object alignment.
|
// Always use Object alignment.
|
||||||
GlobalGizmoProfile.alignment = "Object";
|
GlobalGizmoProfile.alignment = "Object";
|
||||||
|
|
||||||
// Set the status bar here until all tool have been hooked up
|
// Set the status until some other editing mode adds useful information.
|
||||||
EditorGuiStatusBar.setInfo("Navigation editor.");
|
EditorGuiStatusBar.setInfo("Navigation editor.");
|
||||||
EditorGuiStatusBar.setSelection("");
|
EditorGuiStatusBar.setSelection("");
|
||||||
|
|
||||||
|
|
@ -231,8 +229,15 @@ function NavEditorPlugin::readSettings(%this)
|
||||||
{
|
{
|
||||||
EditorSettings.beginGroup("NavEditor", true);
|
EditorSettings.beginGroup("NavEditor", true);
|
||||||
|
|
||||||
NavEditorGui.spawnClass = EditorSettings.value("SpawnClass");
|
// Currently these are globals because of the way they are accessed in navMesh.cpp.
|
||||||
NavEditorGui.spawnDatablock = EditorSettings.value("SpawnDatablock");
|
$Nav::Editor::renderMesh = EditorSettings.value("RenderMesh");
|
||||||
|
$Nav::Editor::renderPortals = EditorSettings.value("RenderPortals");
|
||||||
|
$Nav::Editor::renderBVTree = EditorSettings.value("RenderBVTree");
|
||||||
|
NavEditorGui.spawnClass = EditorSettings.value("SpawnClass");
|
||||||
|
NavEditorGui.spawnDatablock = EditorSettings.value("SpawnDatablock");
|
||||||
|
NavEditorGui.backgroundBuild = EditorSettings.value("BackgroundBuild");
|
||||||
|
NavEditorGui.saveIntermediates = EditorSettings.value("SaveIntermediates");
|
||||||
|
NavEditorGui.playSoundWhenDone = EditorSettings.value("PlaySoundWhenDone");
|
||||||
|
|
||||||
EditorSettings.endGroup();
|
EditorSettings.endGroup();
|
||||||
}
|
}
|
||||||
|
|
@ -241,8 +246,14 @@ function NavEditorPlugin::writeSettings(%this)
|
||||||
{
|
{
|
||||||
EditorSettings.beginGroup("NavEditor", true);
|
EditorSettings.beginGroup("NavEditor", true);
|
||||||
|
|
||||||
EditorSettings.setValue("SpawnClass", NavEditorGui.spawnClass);
|
EditorSettings.setValue("RenderMesh", $Nav::Editor::renderMesh);
|
||||||
EditorSettings.setValue("SpawnDatablock", NavEditorGui.spawnDatablock);
|
EditorSettings.setValue("RenderPortals", $Nav::Editor::renderPortals);
|
||||||
|
EditorSettings.setValue("RenderBVTree", $Nav::Editor::renderBVTree);
|
||||||
|
EditorSettings.setValue("SpawnClass", NavEditorGui.spawnClass);
|
||||||
|
EditorSettings.setValue("SpawnDatablock", NavEditorGui.spawnDatablock);
|
||||||
|
EditorSettings.setValue("BackgroundBuild", NavEditorGui.backgroundBuild);
|
||||||
|
EditorSettings.setValue("SaveIntermediates", NavEditorGui.saveIntermediates);
|
||||||
|
EditorSettings.setValue("PlaySoundWhenDone", NavEditorGui.playSoundWhenDone);
|
||||||
|
|
||||||
EditorSettings.endGroup();
|
EditorSettings.endGroup();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,330 @@
|
||||||
// IN THE SOFTWARE.
|
// IN THE SOFTWARE.
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
$Nav::EditorOpen = false;
|
||||||
|
|
||||||
|
function NavEditorGui::onEditorActivated(%this)
|
||||||
|
{
|
||||||
|
if(%this.selectedObject)
|
||||||
|
%this.selectObject(%this.selectedObject);
|
||||||
|
%this.prepSelectionMode();
|
||||||
|
}
|
||||||
|
|
||||||
|
function NavEditorGui::onEditorDeactivated(%this)
|
||||||
|
{
|
||||||
|
if(%this.getMesh())
|
||||||
|
%this.deselect();
|
||||||
|
}
|
||||||
|
|
||||||
|
function NavEditorGui::onModeSet(%this, %mode)
|
||||||
|
{
|
||||||
|
// Callback when the nav editor changes mode. Set the appropriate dynamic
|
||||||
|
// GUI contents in the properties/actions boxes.
|
||||||
|
NavInspector.setVisible(false);
|
||||||
|
|
||||||
|
%actions = NavEditorOptionsWindow->ActionsBox;
|
||||||
|
%actions->SelectActions.setVisible(false);
|
||||||
|
%actions->LinkActions.setVisible(false);
|
||||||
|
%actions->CoverActions.setVisible(false);
|
||||||
|
%actions->TileActions.setVisible(false);
|
||||||
|
%actions->TestActions.setVisible(false);
|
||||||
|
|
||||||
|
%properties = NavEditorOptionsWindow->PropertiesBox;
|
||||||
|
%properties->LinkProperties.setVisible(false);
|
||||||
|
%properties->TileProperties.setVisible(false);
|
||||||
|
%properties->TestProperties.setVisible(false);
|
||||||
|
|
||||||
|
switch$(%mode)
|
||||||
|
{
|
||||||
|
case "SelectMode":
|
||||||
|
NavInspector.setVisible(true);
|
||||||
|
%actions->SelectActions.setVisible(true);
|
||||||
|
case "LinkMode":
|
||||||
|
%actions->LinkActions.setVisible(true);
|
||||||
|
%properties->LinkProperties.setVisible(true);
|
||||||
|
case "CoverMode":
|
||||||
|
//
|
||||||
|
%actions->CoverActions.setVisible(true);
|
||||||
|
case "TileMode":
|
||||||
|
%actions->TileActions.setVisible(true);
|
||||||
|
%properties->TileProperties.setVisible(true);
|
||||||
|
case "TestMode":
|
||||||
|
%actions->TestActions.setVisible(true);
|
||||||
|
%properties->TestProperties.setVisible(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function NavEditorGui::paletteSync(%this, %mode)
|
||||||
|
{
|
||||||
|
// Synchronise the palette (small buttons on the left) with the actual mode
|
||||||
|
// the nav editor is in.
|
||||||
|
%evalShortcut = "ToolsPaletteArray-->" @ %mode @ ".setStateOn(1);";
|
||||||
|
eval(%evalShortcut);
|
||||||
|
}
|
||||||
|
|
||||||
|
function NavEditorGui::onEscapePressed(%this)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
function NavEditorGui::selectObject(%this, %obj)
|
||||||
|
{
|
||||||
|
NavTreeView.clearSelection();
|
||||||
|
if(isObject(%obj))
|
||||||
|
NavTreeView.selectItem(%obj);
|
||||||
|
%this.onObjectSelected(%obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
function NavEditorGui::onObjectSelected(%this, %obj)
|
||||||
|
{
|
||||||
|
if(isObject(%this.selectedObject))
|
||||||
|
%this.deselect();
|
||||||
|
%this.selectedObject = %obj;
|
||||||
|
if(isObject(%obj))
|
||||||
|
{
|
||||||
|
%this.selectMesh(%obj);
|
||||||
|
NavInspector.inspect(%obj);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function NavEditorGui::deleteMesh(%this)
|
||||||
|
{
|
||||||
|
if(isObject(%this.selectedObject))
|
||||||
|
{
|
||||||
|
%this.selectedObject.delete();
|
||||||
|
%this.selectObject(-1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function NavEditorGui::deleteSelected(%this)
|
||||||
|
{
|
||||||
|
switch$(%this.getMode())
|
||||||
|
{
|
||||||
|
case "SelectMode":
|
||||||
|
// Try to delete the selected NavMesh.
|
||||||
|
if(isObject(NavEditorGui.selectedObject))
|
||||||
|
MessageBoxYesNo("Warning",
|
||||||
|
"Are you sure you want to delete" SPC NavEditorGui.selectedObject.getName(),
|
||||||
|
"NavEditorGui.deleteMesh();");
|
||||||
|
case "TestMode":
|
||||||
|
%this.getPlayer().delete();
|
||||||
|
%this.onPlayerDeselected();
|
||||||
|
case "LinkMode":
|
||||||
|
%this.deleteLink();
|
||||||
|
%this.isDirty = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function NavEditorGui::buildSelectedMeshes(%this)
|
||||||
|
{
|
||||||
|
if(isObject(%this.getMesh()))
|
||||||
|
{
|
||||||
|
%this.getMesh().build(NavEditorGui.backgroundBuild, NavEditorGui.saveIntermediates);
|
||||||
|
%this.isDirty = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function NavEditorGui::buildLinks(%this)
|
||||||
|
{
|
||||||
|
if(isObject(%this.getMesh()))
|
||||||
|
{
|
||||||
|
%this.getMesh().buildLinks();
|
||||||
|
%this.isDirty = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function updateLinkData(%control, %flags)
|
||||||
|
{
|
||||||
|
%control->LinkWalkFlag.setActive(true);
|
||||||
|
%control->LinkJumpFlag.setActive(true);
|
||||||
|
%control->LinkDropFlag.setActive(true);
|
||||||
|
%control->LinkLedgeFlag.setActive(true);
|
||||||
|
%control->LinkClimbFlag.setActive(true);
|
||||||
|
%control->LinkTeleportFlag.setActive(true);
|
||||||
|
|
||||||
|
%control->LinkWalkFlag.setStateOn(%flags & $Nav::WalkFlag);
|
||||||
|
%control->LinkJumpFlag.setStateOn(%flags & $Nav::JumpFlag);
|
||||||
|
%control->LinkDropFlag.setStateOn(%flags & $Nav::DropFlag);
|
||||||
|
%control->LinkLedgeFlag.setStateOn(%flags & $Nav::LedgeFlag);
|
||||||
|
%control->LinkClimbFlag.setStateOn(%flags & $Nav::ClimbFlag);
|
||||||
|
%control->LinkTeleportFlag.setStateOn(%flags & $Nav::TeleportFlag);
|
||||||
|
}
|
||||||
|
|
||||||
|
function getLinkFlags(%control)
|
||||||
|
{
|
||||||
|
return (%control->LinkWalkFlag.isStateOn() ? $Nav::WalkFlag : 0) |
|
||||||
|
(%control->LinkJumpFlag.isStateOn() ? $Nav::JumpFlag : 0) |
|
||||||
|
(%control->LinkDropFlag.isStateOn() ? $Nav::DropFlag : 0) |
|
||||||
|
(%control->LinkLedgeFlag.isStateOn() ? $Nav::LedgeFlag : 0) |
|
||||||
|
(%control->LinkClimbFlag.isStateOn() ? $Nav::ClimbFlag : 0) |
|
||||||
|
(%control->LinkTeleportFlag.isStateOn() ? $Nav::TeleportFlag : 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
function disableLinkData(%control)
|
||||||
|
{
|
||||||
|
%control->LinkWalkFlag.setActive(false);
|
||||||
|
%control->LinkJumpFlag.setActive(false);
|
||||||
|
%control->LinkDropFlag.setActive(false);
|
||||||
|
%control->LinkLedgeFlag.setActive(false);
|
||||||
|
%control->LinkClimbFlag.setActive(false);
|
||||||
|
%control->LinkTeleportFlag.setActive(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
function NavEditorGui::onLinkSelected(%this, %flags)
|
||||||
|
{
|
||||||
|
updateLinkData(NavEditorOptionsWindow-->LinkProperties, %flags);
|
||||||
|
}
|
||||||
|
|
||||||
|
function NavEditorGui::onPlayerSelected(%this, %flags)
|
||||||
|
{
|
||||||
|
updateLinkData(NavEditorOptionsWindow-->TestProperties, %flags);
|
||||||
|
}
|
||||||
|
|
||||||
|
function NavEditorGui::updateLinkFlags(%this)
|
||||||
|
{
|
||||||
|
if(isObject(%this.getMesh()))
|
||||||
|
{
|
||||||
|
%properties = NavEditorOptionsWindow-->LinkProperties;
|
||||||
|
%this.setLinkFlags(getLinkFlags(%properties));
|
||||||
|
%this.isDirty = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function NavEditorGui::updateTestFlags(%this)
|
||||||
|
{
|
||||||
|
if(isObject(%this.getPlayer()))
|
||||||
|
{
|
||||||
|
%properties = NavEditorOptionsWindow-->TestProperties;
|
||||||
|
%player = %this.getPlayer();
|
||||||
|
|
||||||
|
%player.allowWwalk = %properties->LinkWalkFlag.isStateOn();
|
||||||
|
%player.allowJump = %properties->LinkJumpFlag.isStateOn();
|
||||||
|
%player.allowDrop = %properties->LinkDropFlag.isStateOn();
|
||||||
|
%player.allowLedge = %properties->LinkLedgeFlag.isStateOn();
|
||||||
|
%player.allowClimb = %properties->LinkClimbFlag.isStateOn();
|
||||||
|
%player.allowTeleport = %properties->LinkTeleportFlag.isStateOn();
|
||||||
|
|
||||||
|
%this.isDirty = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function NavEditorGui::onLinkDeselected(%this)
|
||||||
|
{
|
||||||
|
disableLinkData(NavEditorOptionsWindow-->LinkProperties);
|
||||||
|
}
|
||||||
|
|
||||||
|
function NavEditorGui::onPlayerDeselected(%this)
|
||||||
|
{
|
||||||
|
disableLinkData(NavEditorOptionsWindow-->TestProperties);
|
||||||
|
}
|
||||||
|
|
||||||
|
function NavEditorGui::createCoverPoints(%this)
|
||||||
|
{
|
||||||
|
if(isObject(%this.getMesh()))
|
||||||
|
{
|
||||||
|
%this.getMesh().createCoverPoints();
|
||||||
|
%this.isDirty = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function NavEditorGui::deleteCoverPoints(%this)
|
||||||
|
{
|
||||||
|
if(isObject(%this.getMesh()))
|
||||||
|
{
|
||||||
|
%this.getMesh().deleteCoverPoints();
|
||||||
|
%this.isDirty = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function NavEditorGui::findCover(%this)
|
||||||
|
{
|
||||||
|
if(%this.getMode() $= "TestMode" && isObject(%this.getPlayer()))
|
||||||
|
{
|
||||||
|
%pos = LocalClientConnection.getControlObject().getPosition();
|
||||||
|
%text = NavEditorOptionsWindow-->TestProperties->CoverPosition.getText();
|
||||||
|
if(%text !$= "")
|
||||||
|
%pos = eval(%text);
|
||||||
|
%this.getPlayer().findCover(%pos, NavEditorOptionsWindow-->TestProperties->CoverRadius.getText());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function NavEditorGui::followObject(%this)
|
||||||
|
{
|
||||||
|
if(%this.getMode() $= "TestMode" && isObject(%this.getPlayer()))
|
||||||
|
{
|
||||||
|
%obj = LocalClientConnection.player;
|
||||||
|
%text = NavEditorOptionsWindow-->TestProperties->FollowObject.getText();
|
||||||
|
if(%text !$= "")
|
||||||
|
{
|
||||||
|
eval("%obj = " @ %text);
|
||||||
|
if(!isObject(%obj))
|
||||||
|
MessageBoxOk("Error", "Cannot find object" SPC %text);
|
||||||
|
}
|
||||||
|
if(isObject(%obj))
|
||||||
|
%this.getPlayer().followObject(%obj, NavEditorOptionsWindow-->TestProperties->FollowRadius.getText());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function NavInspector::inspect(%this, %obj)
|
||||||
|
{
|
||||||
|
%name = "";
|
||||||
|
if(isObject(%obj))
|
||||||
|
%name = %obj.getName();
|
||||||
|
else
|
||||||
|
NavFieldInfoControl.setText("");
|
||||||
|
|
||||||
|
Parent::inspect(%this, %obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
function NavInspector::onInspectorFieldModified(%this, %object, %fieldName, %arrayIndex, %oldValue, %newValue)
|
||||||
|
{
|
||||||
|
// Same work to do as for the regular WorldEditor Inspector.
|
||||||
|
Inspector::onInspectorFieldModified(%this, %object, %fieldName, %arrayIndex, %oldValue, %newValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
function NavInspector::onFieldSelected(%this, %fieldName, %fieldTypeStr, %fieldDoc)
|
||||||
|
{
|
||||||
|
NavFieldInfoControl.setText("<font:ArialBold:14>" @ %fieldName @ "<font:ArialItalic:14> (" @ %fieldTypeStr @ ") " NL "<font:Arial:14>" @ %fieldDoc);
|
||||||
|
}
|
||||||
|
|
||||||
|
function NavTreeView::onInspect(%this, %obj)
|
||||||
|
{
|
||||||
|
NavInspector.inspect(%obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
function NavTreeView::onSelect(%this, %obj)
|
||||||
|
{
|
||||||
|
NavInspector.inspect(%obj);
|
||||||
|
NavEditorGui.onObjectSelected(%obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
function NavEditorGui::prepSelectionMode(%this)
|
||||||
|
{
|
||||||
|
%this.setMode("SelectMode");
|
||||||
|
ToolsPaletteArray-->NavEditorSelectMode.setStateOn(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
function ENavEditorPaletteButton::onClick(%this)
|
||||||
|
{
|
||||||
|
// When clicking on a pelette button, add its description to the bottom of
|
||||||
|
// the editor window.
|
||||||
|
EditorGuiStatusBar.setInfo(%this.DetailedDesc);
|
||||||
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
function NavMeshLinkFlagButton::onClick(%this)
|
||||||
|
{
|
||||||
|
NavEditorGui.updateLinkFlags();
|
||||||
|
}
|
||||||
|
|
||||||
|
function NavMeshTestFlagButton::onClick(%this)
|
||||||
|
{
|
||||||
|
NavEditorGui.updateTestFlags();
|
||||||
|
}
|
||||||
|
|
||||||
singleton GuiControlProfile(NavEditorProfile)
|
singleton GuiControlProfile(NavEditorProfile)
|
||||||
{
|
{
|
||||||
canKeyFocus = true;
|
canKeyFocus = true;
|
||||||
|
|
@ -34,4 +358,3 @@ singleton GuiControlProfile(GuiSimpleBorderProfile)
|
||||||
border = 1;
|
border = 1;
|
||||||
category = "Editor";
|
category = "Editor";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,351 +0,0 @@
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
// Copyright (c) 2014 Daniel Buckmaster
|
|
||||||
//
|
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
// of this software and associated documentation files (the "Software"), to
|
|
||||||
// deal in the Software without restriction, including without limitation the
|
|
||||||
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
|
||||||
// sell copies of the Software, and to permit persons to whom the Software is
|
|
||||||
// furnished to do so, subject to the following conditions:
|
|
||||||
//
|
|
||||||
// The above copyright notice and this permission notice shall be included in
|
|
||||||
// all copies or substantial portions of the Software.
|
|
||||||
//
|
|
||||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
||||||
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
|
||||||
// IN THE SOFTWARE.
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
$Nav::EditorOpen = false;
|
|
||||||
$Nav::Editor::renderMesh = true;
|
|
||||||
$Nav::Editor::renderPortals = false;
|
|
||||||
$Nav::Editor::renderBVTree = false;
|
|
||||||
$Nav::Editor::backgroundBuild = true;
|
|
||||||
$Nav::Editor::saveIntermediates = false;
|
|
||||||
$Nav::Editor::playSoundWhenDone = false;
|
|
||||||
|
|
||||||
function NavEditorGui::onEditorActivated(%this)
|
|
||||||
{
|
|
||||||
if(%this.selectedObject)
|
|
||||||
%this.selectObject(%this.selectedObject);
|
|
||||||
%this.prepSelectionMode();
|
|
||||||
}
|
|
||||||
|
|
||||||
function NavEditorGui::onEditorDeactivated(%this)
|
|
||||||
{
|
|
||||||
if(%this.getMesh())
|
|
||||||
%this.deselect();
|
|
||||||
}
|
|
||||||
|
|
||||||
function NavEditorGui::onModeSet(%this, %mode)
|
|
||||||
{
|
|
||||||
// Callback when the nav editor changes mode. Set the appropriate dynamic
|
|
||||||
// GUI contents in the properties/actions boxes.
|
|
||||||
NavInspector.setVisible(false);
|
|
||||||
|
|
||||||
%actions = NavEditorOptionsWindow->ActionsBox;
|
|
||||||
%actions->SelectActions.setVisible(false);
|
|
||||||
%actions->LinkActions.setVisible(false);
|
|
||||||
%actions->CoverActions.setVisible(false);
|
|
||||||
%actions->TileActions.setVisible(false);
|
|
||||||
%actions->TestActions.setVisible(false);
|
|
||||||
|
|
||||||
%properties = NavEditorOptionsWindow->PropertiesBox;
|
|
||||||
%properties->LinkProperties.setVisible(false);
|
|
||||||
%properties->TileProperties.setVisible(false);
|
|
||||||
%properties->TestProperties.setVisible(false);
|
|
||||||
|
|
||||||
switch$(%mode)
|
|
||||||
{
|
|
||||||
case "SelectMode":
|
|
||||||
NavInspector.setVisible(true);
|
|
||||||
%actions->SelectActions.setVisible(true);
|
|
||||||
case "LinkMode":
|
|
||||||
%actions->LinkActions.setVisible(true);
|
|
||||||
%properties->LinkProperties.setVisible(true);
|
|
||||||
case "CoverMode":
|
|
||||||
//
|
|
||||||
%actions->CoverActions.setVisible(true);
|
|
||||||
case "TileMode":
|
|
||||||
%actions->TileActions.setVisible(true);
|
|
||||||
%properties->TileProperties.setVisible(true);
|
|
||||||
case "TestMode":
|
|
||||||
%actions->TestActions.setVisible(true);
|
|
||||||
%properties->TestProperties.setVisible(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function NavEditorGui::paletteSync(%this, %mode)
|
|
||||||
{
|
|
||||||
// Synchronise the palette (small buttons on the left) with the actual mode
|
|
||||||
// the nav editor is in.
|
|
||||||
%evalShortcut = "ToolsPaletteArray-->" @ %mode @ ".setStateOn(1);";
|
|
||||||
eval(%evalShortcut);
|
|
||||||
}
|
|
||||||
|
|
||||||
function NavEditorGui::onEscapePressed(%this)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
function NavEditorGui::selectObject(%this, %obj)
|
|
||||||
{
|
|
||||||
NavTreeView.clearSelection();
|
|
||||||
if(isObject(%obj))
|
|
||||||
NavTreeView.selectItem(%obj);
|
|
||||||
%this.onObjectSelected(%obj);
|
|
||||||
}
|
|
||||||
|
|
||||||
function NavEditorGui::onObjectSelected(%this, %obj)
|
|
||||||
{
|
|
||||||
if(isObject(%this.selectedObject))
|
|
||||||
%this.deselect();
|
|
||||||
%this.selectedObject = %obj;
|
|
||||||
if(isObject(%obj))
|
|
||||||
{
|
|
||||||
%this.selectMesh(%obj);
|
|
||||||
NavInspector.inspect(%obj);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function NavEditorGui::deleteMesh(%this)
|
|
||||||
{
|
|
||||||
if(isObject(%this.selectedObject))
|
|
||||||
{
|
|
||||||
%this.selectedObject.delete();
|
|
||||||
%this.selectObject(-1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function NavEditorGui::deleteSelected(%this)
|
|
||||||
{
|
|
||||||
switch$(%this.getMode())
|
|
||||||
{
|
|
||||||
case "SelectMode":
|
|
||||||
// Try to delete the selected NavMesh.
|
|
||||||
if(isObject(NavEditorGui.selectedObject))
|
|
||||||
MessageBoxYesNo("Warning",
|
|
||||||
"Are you sure you want to delete" SPC NavEditorGui.selectedObject.getName(),
|
|
||||||
"NavEditorGui.deleteMesh();");
|
|
||||||
case "TestMode":
|
|
||||||
%this.getPlayer().delete();
|
|
||||||
%this.onPlayerDeselected();
|
|
||||||
case "LinkMode":
|
|
||||||
%this.deleteLink();
|
|
||||||
%this.isDirty = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function NavEditorGui::buildSelectedMeshes(%this)
|
|
||||||
{
|
|
||||||
if(isObject(%this.getMesh()))
|
|
||||||
{
|
|
||||||
%this.getMesh().build($Nav::Editor::backgroundBuild, $Nav::Editor::saveIntermediates);
|
|
||||||
%this.isDirty = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function NavEditorGui::buildLinks(%this)
|
|
||||||
{
|
|
||||||
if(isObject(%this.getMesh()))
|
|
||||||
{
|
|
||||||
%this.getMesh().buildLinks();
|
|
||||||
%this.isDirty = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function updateLinkData(%control, %flags)
|
|
||||||
{
|
|
||||||
%control->LinkWalkFlag.setActive(true);
|
|
||||||
%control->LinkJumpFlag.setActive(true);
|
|
||||||
%control->LinkDropFlag.setActive(true);
|
|
||||||
%control->LinkLedgeFlag.setActive(true);
|
|
||||||
%control->LinkClimbFlag.setActive(true);
|
|
||||||
%control->LinkTeleportFlag.setActive(true);
|
|
||||||
|
|
||||||
%control->LinkWalkFlag.setStateOn(%flags & $Nav::WalkFlag);
|
|
||||||
%control->LinkJumpFlag.setStateOn(%flags & $Nav::JumpFlag);
|
|
||||||
%control->LinkDropFlag.setStateOn(%flags & $Nav::DropFlag);
|
|
||||||
%control->LinkLedgeFlag.setStateOn(%flags & $Nav::LedgeFlag);
|
|
||||||
%control->LinkClimbFlag.setStateOn(%flags & $Nav::ClimbFlag);
|
|
||||||
%control->LinkTeleportFlag.setStateOn(%flags & $Nav::TeleportFlag);
|
|
||||||
}
|
|
||||||
|
|
||||||
function getLinkFlags(%control)
|
|
||||||
{
|
|
||||||
return (%control->LinkWalkFlag.isStateOn() ? $Nav::WalkFlag : 0) |
|
|
||||||
(%control->LinkJumpFlag.isStateOn() ? $Nav::JumpFlag : 0) |
|
|
||||||
(%control->LinkDropFlag.isStateOn() ? $Nav::DropFlag : 0) |
|
|
||||||
(%control->LinkLedgeFlag.isStateOn() ? $Nav::LedgeFlag : 0) |
|
|
||||||
(%control->LinkClimbFlag.isStateOn() ? $Nav::ClimbFlag : 0) |
|
|
||||||
(%control->LinkTeleportFlag.isStateOn() ? $Nav::TeleportFlag : 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
function disableLinkData(%control)
|
|
||||||
{
|
|
||||||
%control->LinkWalkFlag.setActive(false);
|
|
||||||
%control->LinkJumpFlag.setActive(false);
|
|
||||||
%control->LinkDropFlag.setActive(false);
|
|
||||||
%control->LinkLedgeFlag.setActive(false);
|
|
||||||
%control->LinkClimbFlag.setActive(false);
|
|
||||||
%control->LinkTeleportFlag.setActive(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
function NavEditorGui::onLinkSelected(%this, %flags)
|
|
||||||
{
|
|
||||||
updateLinkData(NavEditorOptionsWindow-->LinkProperties, %flags);
|
|
||||||
}
|
|
||||||
|
|
||||||
function NavEditorGui::onPlayerSelected(%this, %flags)
|
|
||||||
{
|
|
||||||
updateLinkData(NavEditorOptionsWindow-->TestProperties, %flags);
|
|
||||||
}
|
|
||||||
|
|
||||||
function NavEditorGui::updateLinkFlags(%this)
|
|
||||||
{
|
|
||||||
if(isObject(%this.getMesh()))
|
|
||||||
{
|
|
||||||
%properties = NavEditorOptionsWindow-->LinkProperties;
|
|
||||||
%this.setLinkFlags(getLinkFlags(%properties));
|
|
||||||
%this.isDirty = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function NavEditorGui::updateTestFlags(%this)
|
|
||||||
{
|
|
||||||
if(isObject(%this.getPlayer()))
|
|
||||||
{
|
|
||||||
%properties = NavEditorOptionsWindow-->TestProperties;
|
|
||||||
%player = %this.getPlayer();
|
|
||||||
|
|
||||||
%player.allowWwalk = %properties->LinkWalkFlag.isStateOn();
|
|
||||||
%player.allowJump = %properties->LinkJumpFlag.isStateOn();
|
|
||||||
%player.allowDrop = %properties->LinkDropFlag.isStateOn();
|
|
||||||
%player.allowLedge = %properties->LinkLedgeFlag.isStateOn();
|
|
||||||
%player.allowClimb = %properties->LinkClimbFlag.isStateOn();
|
|
||||||
%player.allowTeleport = %properties->LinkTeleportFlag.isStateOn();
|
|
||||||
|
|
||||||
%this.isDirty = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function NavEditorGui::onLinkDeselected(%this)
|
|
||||||
{
|
|
||||||
disableLinkData(NavEditorOptionsWindow-->LinkProperties);
|
|
||||||
}
|
|
||||||
|
|
||||||
function NavEditorGui::onPlayerDeselected(%this)
|
|
||||||
{
|
|
||||||
disableLinkData(NavEditorOptionsWindow-->TestProperties);
|
|
||||||
}
|
|
||||||
|
|
||||||
function NavEditorGui::createCoverPoints(%this)
|
|
||||||
{
|
|
||||||
if(isObject(%this.getMesh()))
|
|
||||||
{
|
|
||||||
%this.getMesh().createCoverPoints();
|
|
||||||
%this.isDirty = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function NavEditorGui::deleteCoverPoints(%this)
|
|
||||||
{
|
|
||||||
if(isObject(%this.getMesh()))
|
|
||||||
{
|
|
||||||
%this.getMesh().deleteCoverPoints();
|
|
||||||
%this.isDirty = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function NavEditorGui::findCover(%this)
|
|
||||||
{
|
|
||||||
if(%this.getMode() $= "TestMode" && isObject(%this.getPlayer()))
|
|
||||||
{
|
|
||||||
%pos = LocalClientConnection.getControlObject().getPosition();
|
|
||||||
%text = NavEditorOptionsWindow-->TestProperties->CoverPosition.getText();
|
|
||||||
if(%text !$= "")
|
|
||||||
%pos = eval(%text);
|
|
||||||
%this.getPlayer().findCover(%pos, NavEditorOptionsWindow-->TestProperties->CoverRadius.getText());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function NavEditorGui::followObject(%this)
|
|
||||||
{
|
|
||||||
if(%this.getMode() $= "TestMode" && isObject(%this.getPlayer()))
|
|
||||||
{
|
|
||||||
%obj = LocalClientConnection.player;
|
|
||||||
%text = NavEditorOptionsWindow-->TestProperties->FollowObject.getText();
|
|
||||||
if(%text !$= "")
|
|
||||||
{
|
|
||||||
eval("%obj = " @ %text);
|
|
||||||
if(!isObject(%obj))
|
|
||||||
MessageBoxOk("Error", "Cannot find object" SPC %text);
|
|
||||||
}
|
|
||||||
if(isObject(%obj))
|
|
||||||
%this.getPlayer().followObject(%obj, NavEditorOptionsWindow-->TestProperties->FollowRadius.getText());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function NavInspector::inspect(%this, %obj)
|
|
||||||
{
|
|
||||||
%name = "";
|
|
||||||
if(isObject(%obj))
|
|
||||||
%name = %obj.getName();
|
|
||||||
else
|
|
||||||
NavFieldInfoControl.setText("");
|
|
||||||
|
|
||||||
Parent::inspect(%this, %obj);
|
|
||||||
}
|
|
||||||
|
|
||||||
function NavInspector::onInspectorFieldModified(%this, %object, %fieldName, %arrayIndex, %oldValue, %newValue)
|
|
||||||
{
|
|
||||||
// Same work to do as for the regular WorldEditor Inspector.
|
|
||||||
Inspector::onInspectorFieldModified(%this, %object, %fieldName, %arrayIndex, %oldValue, %newValue);
|
|
||||||
}
|
|
||||||
|
|
||||||
function NavInspector::onFieldSelected(%this, %fieldName, %fieldTypeStr, %fieldDoc)
|
|
||||||
{
|
|
||||||
NavFieldInfoControl.setText("<font:ArialBold:14>" @ %fieldName @ "<font:ArialItalic:14> (" @ %fieldTypeStr @ ") " NL "<font:Arial:14>" @ %fieldDoc);
|
|
||||||
}
|
|
||||||
|
|
||||||
function NavTreeView::onInspect(%this, %obj)
|
|
||||||
{
|
|
||||||
NavInspector.inspect(%obj);
|
|
||||||
}
|
|
||||||
|
|
||||||
function NavTreeView::onSelect(%this, %obj)
|
|
||||||
{
|
|
||||||
NavInspector.inspect(%obj);
|
|
||||||
NavEditorGui.onObjectSelected(%obj);
|
|
||||||
}
|
|
||||||
|
|
||||||
function NavEditorGui::prepSelectionMode(%this)
|
|
||||||
{
|
|
||||||
%this.setMode("SelectMode");
|
|
||||||
ToolsPaletteArray-->NavEditorSelectMode.setStateOn(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
function ENavEditorPaletteButton::onClick(%this)
|
|
||||||
{
|
|
||||||
// When clicking on a pelette button, add its description to the bottom of
|
|
||||||
// the editor window.
|
|
||||||
EditorGuiStatusBar.setInfo(%this.DetailedDesc);
|
|
||||||
}
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
function NavMeshLinkFlagButton::onClick(%this)
|
|
||||||
{
|
|
||||||
NavEditorGui.updateLinkFlags();
|
|
||||||
}
|
|
||||||
|
|
||||||
function NavMeshTestFlagButton::onClick(%this)
|
|
||||||
{
|
|
||||||
NavEditorGui.updateTestFlags();
|
|
||||||
}
|
|
||||||
|
|
@ -97,8 +97,6 @@ function NavEditorPlugin::onWorldEditorStartup(%this)
|
||||||
// Add items to World Editor Creator
|
// Add items to World Editor Creator
|
||||||
EWCreatorWindow.beginGroup("Navigation");
|
EWCreatorWindow.beginGroup("Navigation");
|
||||||
|
|
||||||
EWCreatorWindow.registerMissionObject("NavMesh", "Navigation mesh");
|
|
||||||
EWCreatorWindow.registerMissionObject("NavPath", "Path");
|
|
||||||
EWCreatorWindow.registerMissionObject("CoverPoint", "Cover point");
|
EWCreatorWindow.registerMissionObject("CoverPoint", "Cover point");
|
||||||
|
|
||||||
EWCreatorWindow.endGroup();
|
EWCreatorWindow.endGroup();
|
||||||
|
|
@ -152,7 +150,7 @@ function NavEditorPlugin::onActivated(%this)
|
||||||
// Always use Object alignment.
|
// Always use Object alignment.
|
||||||
GlobalGizmoProfile.alignment = "Object";
|
GlobalGizmoProfile.alignment = "Object";
|
||||||
|
|
||||||
// Set the status bar here until all tool have been hooked up
|
// Set the status until some other editing mode adds useful information.
|
||||||
EditorGuiStatusBar.setInfo("Navigation editor.");
|
EditorGuiStatusBar.setInfo("Navigation editor.");
|
||||||
EditorGuiStatusBar.setSelection("");
|
EditorGuiStatusBar.setSelection("");
|
||||||
|
|
||||||
|
|
@ -231,8 +229,15 @@ function NavEditorPlugin::readSettings(%this)
|
||||||
{
|
{
|
||||||
EditorSettings.beginGroup("NavEditor", true);
|
EditorSettings.beginGroup("NavEditor", true);
|
||||||
|
|
||||||
NavEditorGui.spawnClass = EditorSettings.value("SpawnClass");
|
// Currently these are globals because of the way they are accessed in navMesh.cpp.
|
||||||
NavEditorGui.spawnDatablock = EditorSettings.value("SpawnDatablock");
|
$Nav::Editor::renderMesh = EditorSettings.value("RenderMesh");
|
||||||
|
$Nav::Editor::renderPortals = EditorSettings.value("RenderPortals");
|
||||||
|
$Nav::Editor::renderBVTree = EditorSettings.value("RenderBVTree");
|
||||||
|
NavEditorGui.spawnClass = EditorSettings.value("SpawnClass");
|
||||||
|
NavEditorGui.spawnDatablock = EditorSettings.value("SpawnDatablock");
|
||||||
|
NavEditorGui.backgroundBuild = EditorSettings.value("BackgroundBuild");
|
||||||
|
NavEditorGui.saveIntermediates = EditorSettings.value("SaveIntermediates");
|
||||||
|
NavEditorGui.playSoundWhenDone = EditorSettings.value("PlaySoundWhenDone");
|
||||||
|
|
||||||
EditorSettings.endGroup();
|
EditorSettings.endGroup();
|
||||||
}
|
}
|
||||||
|
|
@ -241,8 +246,14 @@ function NavEditorPlugin::writeSettings(%this)
|
||||||
{
|
{
|
||||||
EditorSettings.beginGroup("NavEditor", true);
|
EditorSettings.beginGroup("NavEditor", true);
|
||||||
|
|
||||||
EditorSettings.setValue("SpawnClass", NavEditorGui.spawnClass);
|
EditorSettings.setValue("RenderMesh", $Nav::Editor::renderMesh);
|
||||||
EditorSettings.setValue("SpawnDatablock", NavEditorGui.spawnDatablock);
|
EditorSettings.setValue("RenderPortals", $Nav::Editor::renderPortals);
|
||||||
|
EditorSettings.setValue("RenderBVTree", $Nav::Editor::renderBVTree);
|
||||||
|
EditorSettings.setValue("SpawnClass", NavEditorGui.spawnClass);
|
||||||
|
EditorSettings.setValue("SpawnDatablock", NavEditorGui.spawnDatablock);
|
||||||
|
EditorSettings.setValue("BackgroundBuild", NavEditorGui.backgroundBuild);
|
||||||
|
EditorSettings.setValue("SaveIntermediates", NavEditorGui.saveIntermediates);
|
||||||
|
EditorSettings.setValue("PlaySoundWhenDone", NavEditorGui.playSoundWhenDone);
|
||||||
|
|
||||||
EditorSettings.endGroup();
|
EditorSettings.endGroup();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,330 @@
|
||||||
// IN THE SOFTWARE.
|
// IN THE SOFTWARE.
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
$Nav::EditorOpen = false;
|
||||||
|
|
||||||
|
function NavEditorGui::onEditorActivated(%this)
|
||||||
|
{
|
||||||
|
if(%this.selectedObject)
|
||||||
|
%this.selectObject(%this.selectedObject);
|
||||||
|
%this.prepSelectionMode();
|
||||||
|
}
|
||||||
|
|
||||||
|
function NavEditorGui::onEditorDeactivated(%this)
|
||||||
|
{
|
||||||
|
if(%this.getMesh())
|
||||||
|
%this.deselect();
|
||||||
|
}
|
||||||
|
|
||||||
|
function NavEditorGui::onModeSet(%this, %mode)
|
||||||
|
{
|
||||||
|
// Callback when the nav editor changes mode. Set the appropriate dynamic
|
||||||
|
// GUI contents in the properties/actions boxes.
|
||||||
|
NavInspector.setVisible(false);
|
||||||
|
|
||||||
|
%actions = NavEditorOptionsWindow->ActionsBox;
|
||||||
|
%actions->SelectActions.setVisible(false);
|
||||||
|
%actions->LinkActions.setVisible(false);
|
||||||
|
%actions->CoverActions.setVisible(false);
|
||||||
|
%actions->TileActions.setVisible(false);
|
||||||
|
%actions->TestActions.setVisible(false);
|
||||||
|
|
||||||
|
%properties = NavEditorOptionsWindow->PropertiesBox;
|
||||||
|
%properties->LinkProperties.setVisible(false);
|
||||||
|
%properties->TileProperties.setVisible(false);
|
||||||
|
%properties->TestProperties.setVisible(false);
|
||||||
|
|
||||||
|
switch$(%mode)
|
||||||
|
{
|
||||||
|
case "SelectMode":
|
||||||
|
NavInspector.setVisible(true);
|
||||||
|
%actions->SelectActions.setVisible(true);
|
||||||
|
case "LinkMode":
|
||||||
|
%actions->LinkActions.setVisible(true);
|
||||||
|
%properties->LinkProperties.setVisible(true);
|
||||||
|
case "CoverMode":
|
||||||
|
//
|
||||||
|
%actions->CoverActions.setVisible(true);
|
||||||
|
case "TileMode":
|
||||||
|
%actions->TileActions.setVisible(true);
|
||||||
|
%properties->TileProperties.setVisible(true);
|
||||||
|
case "TestMode":
|
||||||
|
%actions->TestActions.setVisible(true);
|
||||||
|
%properties->TestProperties.setVisible(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function NavEditorGui::paletteSync(%this, %mode)
|
||||||
|
{
|
||||||
|
// Synchronise the palette (small buttons on the left) with the actual mode
|
||||||
|
// the nav editor is in.
|
||||||
|
%evalShortcut = "ToolsPaletteArray-->" @ %mode @ ".setStateOn(1);";
|
||||||
|
eval(%evalShortcut);
|
||||||
|
}
|
||||||
|
|
||||||
|
function NavEditorGui::onEscapePressed(%this)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
function NavEditorGui::selectObject(%this, %obj)
|
||||||
|
{
|
||||||
|
NavTreeView.clearSelection();
|
||||||
|
if(isObject(%obj))
|
||||||
|
NavTreeView.selectItem(%obj);
|
||||||
|
%this.onObjectSelected(%obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
function NavEditorGui::onObjectSelected(%this, %obj)
|
||||||
|
{
|
||||||
|
if(isObject(%this.selectedObject))
|
||||||
|
%this.deselect();
|
||||||
|
%this.selectedObject = %obj;
|
||||||
|
if(isObject(%obj))
|
||||||
|
{
|
||||||
|
%this.selectMesh(%obj);
|
||||||
|
NavInspector.inspect(%obj);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function NavEditorGui::deleteMesh(%this)
|
||||||
|
{
|
||||||
|
if(isObject(%this.selectedObject))
|
||||||
|
{
|
||||||
|
%this.selectedObject.delete();
|
||||||
|
%this.selectObject(-1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function NavEditorGui::deleteSelected(%this)
|
||||||
|
{
|
||||||
|
switch$(%this.getMode())
|
||||||
|
{
|
||||||
|
case "SelectMode":
|
||||||
|
// Try to delete the selected NavMesh.
|
||||||
|
if(isObject(NavEditorGui.selectedObject))
|
||||||
|
MessageBoxYesNo("Warning",
|
||||||
|
"Are you sure you want to delete" SPC NavEditorGui.selectedObject.getName(),
|
||||||
|
"NavEditorGui.deleteMesh();");
|
||||||
|
case "TestMode":
|
||||||
|
%this.getPlayer().delete();
|
||||||
|
%this.onPlayerDeselected();
|
||||||
|
case "LinkMode":
|
||||||
|
%this.deleteLink();
|
||||||
|
%this.isDirty = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function NavEditorGui::buildSelectedMeshes(%this)
|
||||||
|
{
|
||||||
|
if(isObject(%this.getMesh()))
|
||||||
|
{
|
||||||
|
%this.getMesh().build(NavEditorGui.backgroundBuild, NavEditorGui.saveIntermediates);
|
||||||
|
%this.isDirty = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function NavEditorGui::buildLinks(%this)
|
||||||
|
{
|
||||||
|
if(isObject(%this.getMesh()))
|
||||||
|
{
|
||||||
|
%this.getMesh().buildLinks();
|
||||||
|
%this.isDirty = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function updateLinkData(%control, %flags)
|
||||||
|
{
|
||||||
|
%control->LinkWalkFlag.setActive(true);
|
||||||
|
%control->LinkJumpFlag.setActive(true);
|
||||||
|
%control->LinkDropFlag.setActive(true);
|
||||||
|
%control->LinkLedgeFlag.setActive(true);
|
||||||
|
%control->LinkClimbFlag.setActive(true);
|
||||||
|
%control->LinkTeleportFlag.setActive(true);
|
||||||
|
|
||||||
|
%control->LinkWalkFlag.setStateOn(%flags & $Nav::WalkFlag);
|
||||||
|
%control->LinkJumpFlag.setStateOn(%flags & $Nav::JumpFlag);
|
||||||
|
%control->LinkDropFlag.setStateOn(%flags & $Nav::DropFlag);
|
||||||
|
%control->LinkLedgeFlag.setStateOn(%flags & $Nav::LedgeFlag);
|
||||||
|
%control->LinkClimbFlag.setStateOn(%flags & $Nav::ClimbFlag);
|
||||||
|
%control->LinkTeleportFlag.setStateOn(%flags & $Nav::TeleportFlag);
|
||||||
|
}
|
||||||
|
|
||||||
|
function getLinkFlags(%control)
|
||||||
|
{
|
||||||
|
return (%control->LinkWalkFlag.isStateOn() ? $Nav::WalkFlag : 0) |
|
||||||
|
(%control->LinkJumpFlag.isStateOn() ? $Nav::JumpFlag : 0) |
|
||||||
|
(%control->LinkDropFlag.isStateOn() ? $Nav::DropFlag : 0) |
|
||||||
|
(%control->LinkLedgeFlag.isStateOn() ? $Nav::LedgeFlag : 0) |
|
||||||
|
(%control->LinkClimbFlag.isStateOn() ? $Nav::ClimbFlag : 0) |
|
||||||
|
(%control->LinkTeleportFlag.isStateOn() ? $Nav::TeleportFlag : 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
function disableLinkData(%control)
|
||||||
|
{
|
||||||
|
%control->LinkWalkFlag.setActive(false);
|
||||||
|
%control->LinkJumpFlag.setActive(false);
|
||||||
|
%control->LinkDropFlag.setActive(false);
|
||||||
|
%control->LinkLedgeFlag.setActive(false);
|
||||||
|
%control->LinkClimbFlag.setActive(false);
|
||||||
|
%control->LinkTeleportFlag.setActive(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
function NavEditorGui::onLinkSelected(%this, %flags)
|
||||||
|
{
|
||||||
|
updateLinkData(NavEditorOptionsWindow-->LinkProperties, %flags);
|
||||||
|
}
|
||||||
|
|
||||||
|
function NavEditorGui::onPlayerSelected(%this, %flags)
|
||||||
|
{
|
||||||
|
updateLinkData(NavEditorOptionsWindow-->TestProperties, %flags);
|
||||||
|
}
|
||||||
|
|
||||||
|
function NavEditorGui::updateLinkFlags(%this)
|
||||||
|
{
|
||||||
|
if(isObject(%this.getMesh()))
|
||||||
|
{
|
||||||
|
%properties = NavEditorOptionsWindow-->LinkProperties;
|
||||||
|
%this.setLinkFlags(getLinkFlags(%properties));
|
||||||
|
%this.isDirty = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function NavEditorGui::updateTestFlags(%this)
|
||||||
|
{
|
||||||
|
if(isObject(%this.getPlayer()))
|
||||||
|
{
|
||||||
|
%properties = NavEditorOptionsWindow-->TestProperties;
|
||||||
|
%player = %this.getPlayer();
|
||||||
|
|
||||||
|
%player.allowWwalk = %properties->LinkWalkFlag.isStateOn();
|
||||||
|
%player.allowJump = %properties->LinkJumpFlag.isStateOn();
|
||||||
|
%player.allowDrop = %properties->LinkDropFlag.isStateOn();
|
||||||
|
%player.allowLedge = %properties->LinkLedgeFlag.isStateOn();
|
||||||
|
%player.allowClimb = %properties->LinkClimbFlag.isStateOn();
|
||||||
|
%player.allowTeleport = %properties->LinkTeleportFlag.isStateOn();
|
||||||
|
|
||||||
|
%this.isDirty = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function NavEditorGui::onLinkDeselected(%this)
|
||||||
|
{
|
||||||
|
disableLinkData(NavEditorOptionsWindow-->LinkProperties);
|
||||||
|
}
|
||||||
|
|
||||||
|
function NavEditorGui::onPlayerDeselected(%this)
|
||||||
|
{
|
||||||
|
disableLinkData(NavEditorOptionsWindow-->TestProperties);
|
||||||
|
}
|
||||||
|
|
||||||
|
function NavEditorGui::createCoverPoints(%this)
|
||||||
|
{
|
||||||
|
if(isObject(%this.getMesh()))
|
||||||
|
{
|
||||||
|
%this.getMesh().createCoverPoints();
|
||||||
|
%this.isDirty = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function NavEditorGui::deleteCoverPoints(%this)
|
||||||
|
{
|
||||||
|
if(isObject(%this.getMesh()))
|
||||||
|
{
|
||||||
|
%this.getMesh().deleteCoverPoints();
|
||||||
|
%this.isDirty = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function NavEditorGui::findCover(%this)
|
||||||
|
{
|
||||||
|
if(%this.getMode() $= "TestMode" && isObject(%this.getPlayer()))
|
||||||
|
{
|
||||||
|
%pos = LocalClientConnection.getControlObject().getPosition();
|
||||||
|
%text = NavEditorOptionsWindow-->TestProperties->CoverPosition.getText();
|
||||||
|
if(%text !$= "")
|
||||||
|
%pos = eval(%text);
|
||||||
|
%this.getPlayer().findCover(%pos, NavEditorOptionsWindow-->TestProperties->CoverRadius.getText());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function NavEditorGui::followObject(%this)
|
||||||
|
{
|
||||||
|
if(%this.getMode() $= "TestMode" && isObject(%this.getPlayer()))
|
||||||
|
{
|
||||||
|
%obj = LocalClientConnection.player;
|
||||||
|
%text = NavEditorOptionsWindow-->TestProperties->FollowObject.getText();
|
||||||
|
if(%text !$= "")
|
||||||
|
{
|
||||||
|
eval("%obj = " @ %text);
|
||||||
|
if(!isObject(%obj))
|
||||||
|
MessageBoxOk("Error", "Cannot find object" SPC %text);
|
||||||
|
}
|
||||||
|
if(isObject(%obj))
|
||||||
|
%this.getPlayer().followObject(%obj, NavEditorOptionsWindow-->TestProperties->FollowRadius.getText());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function NavInspector::inspect(%this, %obj)
|
||||||
|
{
|
||||||
|
%name = "";
|
||||||
|
if(isObject(%obj))
|
||||||
|
%name = %obj.getName();
|
||||||
|
else
|
||||||
|
NavFieldInfoControl.setText("");
|
||||||
|
|
||||||
|
Parent::inspect(%this, %obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
function NavInspector::onInspectorFieldModified(%this, %object, %fieldName, %arrayIndex, %oldValue, %newValue)
|
||||||
|
{
|
||||||
|
// Same work to do as for the regular WorldEditor Inspector.
|
||||||
|
Inspector::onInspectorFieldModified(%this, %object, %fieldName, %arrayIndex, %oldValue, %newValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
function NavInspector::onFieldSelected(%this, %fieldName, %fieldTypeStr, %fieldDoc)
|
||||||
|
{
|
||||||
|
NavFieldInfoControl.setText("<font:ArialBold:14>" @ %fieldName @ "<font:ArialItalic:14> (" @ %fieldTypeStr @ ") " NL "<font:Arial:14>" @ %fieldDoc);
|
||||||
|
}
|
||||||
|
|
||||||
|
function NavTreeView::onInspect(%this, %obj)
|
||||||
|
{
|
||||||
|
NavInspector.inspect(%obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
function NavTreeView::onSelect(%this, %obj)
|
||||||
|
{
|
||||||
|
NavInspector.inspect(%obj);
|
||||||
|
NavEditorGui.onObjectSelected(%obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
function NavEditorGui::prepSelectionMode(%this)
|
||||||
|
{
|
||||||
|
%this.setMode("SelectMode");
|
||||||
|
ToolsPaletteArray-->NavEditorSelectMode.setStateOn(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
function ENavEditorPaletteButton::onClick(%this)
|
||||||
|
{
|
||||||
|
// When clicking on a pelette button, add its description to the bottom of
|
||||||
|
// the editor window.
|
||||||
|
EditorGuiStatusBar.setInfo(%this.DetailedDesc);
|
||||||
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
function NavMeshLinkFlagButton::onClick(%this)
|
||||||
|
{
|
||||||
|
NavEditorGui.updateLinkFlags();
|
||||||
|
}
|
||||||
|
|
||||||
|
function NavMeshTestFlagButton::onClick(%this)
|
||||||
|
{
|
||||||
|
NavEditorGui.updateTestFlags();
|
||||||
|
}
|
||||||
|
|
||||||
singleton GuiControlProfile(NavEditorProfile)
|
singleton GuiControlProfile(NavEditorProfile)
|
||||||
{
|
{
|
||||||
canKeyFocus = true;
|
canKeyFocus = true;
|
||||||
|
|
@ -34,4 +358,3 @@ singleton GuiControlProfile(GuiSimpleBorderProfile)
|
||||||
border = 1;
|
border = 1;
|
||||||
category = "Editor";
|
category = "Editor";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,351 +0,0 @@
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
// Copyright (c) 2014 Daniel Buckmaster
|
|
||||||
//
|
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
// of this software and associated documentation files (the "Software"), to
|
|
||||||
// deal in the Software without restriction, including without limitation the
|
|
||||||
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
|
||||||
// sell copies of the Software, and to permit persons to whom the Software is
|
|
||||||
// furnished to do so, subject to the following conditions:
|
|
||||||
//
|
|
||||||
// The above copyright notice and this permission notice shall be included in
|
|
||||||
// all copies or substantial portions of the Software.
|
|
||||||
//
|
|
||||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
||||||
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
|
||||||
// IN THE SOFTWARE.
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
$Nav::EditorOpen = false;
|
|
||||||
$Nav::Editor::renderMesh = true;
|
|
||||||
$Nav::Editor::renderPortals = false;
|
|
||||||
$Nav::Editor::renderBVTree = false;
|
|
||||||
$Nav::Editor::backgroundBuild = true;
|
|
||||||
$Nav::Editor::saveIntermediates = false;
|
|
||||||
$Nav::Editor::playSoundWhenDone = false;
|
|
||||||
|
|
||||||
function NavEditorGui::onEditorActivated(%this)
|
|
||||||
{
|
|
||||||
if(%this.selectedObject)
|
|
||||||
%this.selectObject(%this.selectedObject);
|
|
||||||
%this.prepSelectionMode();
|
|
||||||
}
|
|
||||||
|
|
||||||
function NavEditorGui::onEditorDeactivated(%this)
|
|
||||||
{
|
|
||||||
if(%this.getMesh())
|
|
||||||
%this.deselect();
|
|
||||||
}
|
|
||||||
|
|
||||||
function NavEditorGui::onModeSet(%this, %mode)
|
|
||||||
{
|
|
||||||
// Callback when the nav editor changes mode. Set the appropriate dynamic
|
|
||||||
// GUI contents in the properties/actions boxes.
|
|
||||||
NavInspector.setVisible(false);
|
|
||||||
|
|
||||||
%actions = NavEditorOptionsWindow->ActionsBox;
|
|
||||||
%actions->SelectActions.setVisible(false);
|
|
||||||
%actions->LinkActions.setVisible(false);
|
|
||||||
%actions->CoverActions.setVisible(false);
|
|
||||||
%actions->TileActions.setVisible(false);
|
|
||||||
%actions->TestActions.setVisible(false);
|
|
||||||
|
|
||||||
%properties = NavEditorOptionsWindow->PropertiesBox;
|
|
||||||
%properties->LinkProperties.setVisible(false);
|
|
||||||
%properties->TileProperties.setVisible(false);
|
|
||||||
%properties->TestProperties.setVisible(false);
|
|
||||||
|
|
||||||
switch$(%mode)
|
|
||||||
{
|
|
||||||
case "SelectMode":
|
|
||||||
NavInspector.setVisible(true);
|
|
||||||
%actions->SelectActions.setVisible(true);
|
|
||||||
case "LinkMode":
|
|
||||||
%actions->LinkActions.setVisible(true);
|
|
||||||
%properties->LinkProperties.setVisible(true);
|
|
||||||
case "CoverMode":
|
|
||||||
//
|
|
||||||
%actions->CoverActions.setVisible(true);
|
|
||||||
case "TileMode":
|
|
||||||
%actions->TileActions.setVisible(true);
|
|
||||||
%properties->TileProperties.setVisible(true);
|
|
||||||
case "TestMode":
|
|
||||||
%actions->TestActions.setVisible(true);
|
|
||||||
%properties->TestProperties.setVisible(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function NavEditorGui::paletteSync(%this, %mode)
|
|
||||||
{
|
|
||||||
// Synchronise the palette (small buttons on the left) with the actual mode
|
|
||||||
// the nav editor is in.
|
|
||||||
%evalShortcut = "ToolsPaletteArray-->" @ %mode @ ".setStateOn(1);";
|
|
||||||
eval(%evalShortcut);
|
|
||||||
}
|
|
||||||
|
|
||||||
function NavEditorGui::onEscapePressed(%this)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
function NavEditorGui::selectObject(%this, %obj)
|
|
||||||
{
|
|
||||||
NavTreeView.clearSelection();
|
|
||||||
if(isObject(%obj))
|
|
||||||
NavTreeView.selectItem(%obj);
|
|
||||||
%this.onObjectSelected(%obj);
|
|
||||||
}
|
|
||||||
|
|
||||||
function NavEditorGui::onObjectSelected(%this, %obj)
|
|
||||||
{
|
|
||||||
if(isObject(%this.selectedObject))
|
|
||||||
%this.deselect();
|
|
||||||
%this.selectedObject = %obj;
|
|
||||||
if(isObject(%obj))
|
|
||||||
{
|
|
||||||
%this.selectMesh(%obj);
|
|
||||||
NavInspector.inspect(%obj);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function NavEditorGui::deleteMesh(%this)
|
|
||||||
{
|
|
||||||
if(isObject(%this.selectedObject))
|
|
||||||
{
|
|
||||||
%this.selectedObject.delete();
|
|
||||||
%this.selectObject(-1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function NavEditorGui::deleteSelected(%this)
|
|
||||||
{
|
|
||||||
switch$(%this.getMode())
|
|
||||||
{
|
|
||||||
case "SelectMode":
|
|
||||||
// Try to delete the selected NavMesh.
|
|
||||||
if(isObject(NavEditorGui.selectedObject))
|
|
||||||
MessageBoxYesNo("Warning",
|
|
||||||
"Are you sure you want to delete" SPC NavEditorGui.selectedObject.getName(),
|
|
||||||
"NavEditorGui.deleteMesh();");
|
|
||||||
case "TestMode":
|
|
||||||
%this.getPlayer().delete();
|
|
||||||
%this.onPlayerDeselected();
|
|
||||||
case "LinkMode":
|
|
||||||
%this.deleteLink();
|
|
||||||
%this.isDirty = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function NavEditorGui::buildSelectedMeshes(%this)
|
|
||||||
{
|
|
||||||
if(isObject(%this.getMesh()))
|
|
||||||
{
|
|
||||||
%this.getMesh().build($Nav::Editor::backgroundBuild, $Nav::Editor::saveIntermediates);
|
|
||||||
%this.isDirty = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function NavEditorGui::buildLinks(%this)
|
|
||||||
{
|
|
||||||
if(isObject(%this.getMesh()))
|
|
||||||
{
|
|
||||||
%this.getMesh().buildLinks();
|
|
||||||
%this.isDirty = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function updateLinkData(%control, %flags)
|
|
||||||
{
|
|
||||||
%control->LinkWalkFlag.setActive(true);
|
|
||||||
%control->LinkJumpFlag.setActive(true);
|
|
||||||
%control->LinkDropFlag.setActive(true);
|
|
||||||
%control->LinkLedgeFlag.setActive(true);
|
|
||||||
%control->LinkClimbFlag.setActive(true);
|
|
||||||
%control->LinkTeleportFlag.setActive(true);
|
|
||||||
|
|
||||||
%control->LinkWalkFlag.setStateOn(%flags & $Nav::WalkFlag);
|
|
||||||
%control->LinkJumpFlag.setStateOn(%flags & $Nav::JumpFlag);
|
|
||||||
%control->LinkDropFlag.setStateOn(%flags & $Nav::DropFlag);
|
|
||||||
%control->LinkLedgeFlag.setStateOn(%flags & $Nav::LedgeFlag);
|
|
||||||
%control->LinkClimbFlag.setStateOn(%flags & $Nav::ClimbFlag);
|
|
||||||
%control->LinkTeleportFlag.setStateOn(%flags & $Nav::TeleportFlag);
|
|
||||||
}
|
|
||||||
|
|
||||||
function getLinkFlags(%control)
|
|
||||||
{
|
|
||||||
return (%control->LinkWalkFlag.isStateOn() ? $Nav::WalkFlag : 0) |
|
|
||||||
(%control->LinkJumpFlag.isStateOn() ? $Nav::JumpFlag : 0) |
|
|
||||||
(%control->LinkDropFlag.isStateOn() ? $Nav::DropFlag : 0) |
|
|
||||||
(%control->LinkLedgeFlag.isStateOn() ? $Nav::LedgeFlag : 0) |
|
|
||||||
(%control->LinkClimbFlag.isStateOn() ? $Nav::ClimbFlag : 0) |
|
|
||||||
(%control->LinkTeleportFlag.isStateOn() ? $Nav::TeleportFlag : 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
function disableLinkData(%control)
|
|
||||||
{
|
|
||||||
%control->LinkWalkFlag.setActive(false);
|
|
||||||
%control->LinkJumpFlag.setActive(false);
|
|
||||||
%control->LinkDropFlag.setActive(false);
|
|
||||||
%control->LinkLedgeFlag.setActive(false);
|
|
||||||
%control->LinkClimbFlag.setActive(false);
|
|
||||||
%control->LinkTeleportFlag.setActive(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
function NavEditorGui::onLinkSelected(%this, %flags)
|
|
||||||
{
|
|
||||||
updateLinkData(NavEditorOptionsWindow-->LinkProperties, %flags);
|
|
||||||
}
|
|
||||||
|
|
||||||
function NavEditorGui::onPlayerSelected(%this, %flags)
|
|
||||||
{
|
|
||||||
updateLinkData(NavEditorOptionsWindow-->TestProperties, %flags);
|
|
||||||
}
|
|
||||||
|
|
||||||
function NavEditorGui::updateLinkFlags(%this)
|
|
||||||
{
|
|
||||||
if(isObject(%this.getMesh()))
|
|
||||||
{
|
|
||||||
%properties = NavEditorOptionsWindow-->LinkProperties;
|
|
||||||
%this.setLinkFlags(getLinkFlags(%properties));
|
|
||||||
%this.isDirty = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function NavEditorGui::updateTestFlags(%this)
|
|
||||||
{
|
|
||||||
if(isObject(%this.getPlayer()))
|
|
||||||
{
|
|
||||||
%properties = NavEditorOptionsWindow-->TestProperties;
|
|
||||||
%player = %this.getPlayer();
|
|
||||||
|
|
||||||
%player.allowWwalk = %properties->LinkWalkFlag.isStateOn();
|
|
||||||
%player.allowJump = %properties->LinkJumpFlag.isStateOn();
|
|
||||||
%player.allowDrop = %properties->LinkDropFlag.isStateOn();
|
|
||||||
%player.allowLedge = %properties->LinkLedgeFlag.isStateOn();
|
|
||||||
%player.allowClimb = %properties->LinkClimbFlag.isStateOn();
|
|
||||||
%player.allowTeleport = %properties->LinkTeleportFlag.isStateOn();
|
|
||||||
|
|
||||||
%this.isDirty = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function NavEditorGui::onLinkDeselected(%this)
|
|
||||||
{
|
|
||||||
disableLinkData(NavEditorOptionsWindow-->LinkProperties);
|
|
||||||
}
|
|
||||||
|
|
||||||
function NavEditorGui::onPlayerDeselected(%this)
|
|
||||||
{
|
|
||||||
disableLinkData(NavEditorOptionsWindow-->TestProperties);
|
|
||||||
}
|
|
||||||
|
|
||||||
function NavEditorGui::createCoverPoints(%this)
|
|
||||||
{
|
|
||||||
if(isObject(%this.getMesh()))
|
|
||||||
{
|
|
||||||
%this.getMesh().createCoverPoints();
|
|
||||||
%this.isDirty = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function NavEditorGui::deleteCoverPoints(%this)
|
|
||||||
{
|
|
||||||
if(isObject(%this.getMesh()))
|
|
||||||
{
|
|
||||||
%this.getMesh().deleteCoverPoints();
|
|
||||||
%this.isDirty = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function NavEditorGui::findCover(%this)
|
|
||||||
{
|
|
||||||
if(%this.getMode() $= "TestMode" && isObject(%this.getPlayer()))
|
|
||||||
{
|
|
||||||
%pos = LocalClientConnection.getControlObject().getPosition();
|
|
||||||
%text = NavEditorOptionsWindow-->TestProperties->CoverPosition.getText();
|
|
||||||
if(%text !$= "")
|
|
||||||
%pos = eval(%text);
|
|
||||||
%this.getPlayer().findCover(%pos, NavEditorOptionsWindow-->TestProperties->CoverRadius.getText());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function NavEditorGui::followObject(%this)
|
|
||||||
{
|
|
||||||
if(%this.getMode() $= "TestMode" && isObject(%this.getPlayer()))
|
|
||||||
{
|
|
||||||
%obj = LocalClientConnection.player;
|
|
||||||
%text = NavEditorOptionsWindow-->TestProperties->FollowObject.getText();
|
|
||||||
if(%text !$= "")
|
|
||||||
{
|
|
||||||
eval("%obj = " @ %text);
|
|
||||||
if(!isObject(%obj))
|
|
||||||
MessageBoxOk("Error", "Cannot find object" SPC %text);
|
|
||||||
}
|
|
||||||
if(isObject(%obj))
|
|
||||||
%this.getPlayer().followObject(%obj, NavEditorOptionsWindow-->TestProperties->FollowRadius.getText());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function NavInspector::inspect(%this, %obj)
|
|
||||||
{
|
|
||||||
%name = "";
|
|
||||||
if(isObject(%obj))
|
|
||||||
%name = %obj.getName();
|
|
||||||
else
|
|
||||||
NavFieldInfoControl.setText("");
|
|
||||||
|
|
||||||
Parent::inspect(%this, %obj);
|
|
||||||
}
|
|
||||||
|
|
||||||
function NavInspector::onInspectorFieldModified(%this, %object, %fieldName, %arrayIndex, %oldValue, %newValue)
|
|
||||||
{
|
|
||||||
// Same work to do as for the regular WorldEditor Inspector.
|
|
||||||
Inspector::onInspectorFieldModified(%this, %object, %fieldName, %arrayIndex, %oldValue, %newValue);
|
|
||||||
}
|
|
||||||
|
|
||||||
function NavInspector::onFieldSelected(%this, %fieldName, %fieldTypeStr, %fieldDoc)
|
|
||||||
{
|
|
||||||
NavFieldInfoControl.setText("<font:ArialBold:14>" @ %fieldName @ "<font:ArialItalic:14> (" @ %fieldTypeStr @ ") " NL "<font:Arial:14>" @ %fieldDoc);
|
|
||||||
}
|
|
||||||
|
|
||||||
function NavTreeView::onInspect(%this, %obj)
|
|
||||||
{
|
|
||||||
NavInspector.inspect(%obj);
|
|
||||||
}
|
|
||||||
|
|
||||||
function NavTreeView::onSelect(%this, %obj)
|
|
||||||
{
|
|
||||||
NavInspector.inspect(%obj);
|
|
||||||
NavEditorGui.onObjectSelected(%obj);
|
|
||||||
}
|
|
||||||
|
|
||||||
function NavEditorGui::prepSelectionMode(%this)
|
|
||||||
{
|
|
||||||
%this.setMode("SelectMode");
|
|
||||||
ToolsPaletteArray-->NavEditorSelectMode.setStateOn(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
function ENavEditorPaletteButton::onClick(%this)
|
|
||||||
{
|
|
||||||
// When clicking on a pelette button, add its description to the bottom of
|
|
||||||
// the editor window.
|
|
||||||
EditorGuiStatusBar.setInfo(%this.DetailedDesc);
|
|
||||||
}
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
function NavMeshLinkFlagButton::onClick(%this)
|
|
||||||
{
|
|
||||||
NavEditorGui.updateLinkFlags();
|
|
||||||
}
|
|
||||||
|
|
||||||
function NavMeshTestFlagButton::onClick(%this)
|
|
||||||
{
|
|
||||||
NavEditorGui.updateTestFlags();
|
|
||||||
}
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue