Initial implementation of the new Base Game Template and some starting modules.

This makes some tweaks to the engine to support this, specifically, it tweaks the hardcoded shaderpaths to defer to a pref variable, so none of the shader paths are hardcoded.

Also tweaks how post effects read in texture files, removing a bizzare filepath interpretation choice, where if the file path didn't start with "/" it forcefully appended the script's file path. This made it impossible to have images not in the same dir as the script file defining the post effect.

This was changed and the existing template's post effects tweaked for now to just add "./" to those few paths impacted, as well as the perf vars to support the non-hardcoded shader paths in the engine.
This commit is contained in:
Areloch 2017-02-24 02:40:56 -06:00
parent 5c8a82180b
commit 1ed8b05169
1572 changed files with 146699 additions and 85 deletions

View file

@ -0,0 +1,22 @@
//-----------------------------------------------------------------------------
// Copyright (c) 2012 GarageGames, LLC
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
// IN THE SOFTWARE.
//-----------------------------------------------------------------------------

View file

@ -0,0 +1,437 @@
//--- OBJECT WRITE BEGIN ---
%guiContent = new GuiControl(ForestEditToolbar,EditorGuiGroup) {
isContainer = "1";
Profile = "ToolsGuiDefaultProfile";
HorizSizing = "right";
VertSizing = "bottom";
Position = "306 0";
Extent = "800 40";
MinExtent = "8 2";
canSave = "1";
Visible = "1";
tooltipprofile = "ToolsGuiToolTipProfile";
hovertime = "1000";
internalName = "ForestEditToolbar";
canSaveDynamicFields = "1";
enabled = "1";
new GuiTextCtrl() {
text = "Brush Settings";
maxLength = "255";
Margin = "0 0 0 0";
Padding = "0 0 0 0";
AnchorTop = "1";
AnchorBottom = "0";
AnchorLeft = "1";
AnchorRight = "0";
isContainer = "0";
Profile = "ToolsGuiTextProfile";
HorizSizing = "right";
VertSizing = "bottom";
position = "6 7";
Extent = "70 16";
MinExtent = "8 8";
canSave = "1";
Visible = "1";
tooltipprofile = "ToolsGuiToolTipProfile";
hovertime = "1000";
canSaveDynamicFields = "0";
};
new GuiControl() {
isContainer = "1";
Profile = "ToolsGuiDefaultProfile";
HorizSizing = "right";
VertSizing = "bottom";
position = "0 0";
Extent = "760 40";
MinExtent = "8 2";
canSave = "1";
Visible = "1";
tooltipprofile = "ToolsGuiToolTipProfile";
hovertime = "1000";
canSaveDynamicFields = "0";
new GuiControl(ForestBrushSizeTextEditContainer) {
isContainer = "1";
Profile = "ToolsGuiTransparentProfile";
HorizSizing = "right";
VertSizing = "bottom";
position = "72 5";
Extent = "120 50";
MinExtent = "8 2";
canSave = "1";
Visible = "1";
tooltipprofile = "ToolsGuiToolTipProfile";
hovertime = "1000";
canSaveDynamicFields = "0";
new GuiTextCtrl() {
text = "Size";
maxLength = "1024";
Margin = "0 0 0 0";
Padding = "0 0 0 0";
AnchorTop = "1";
AnchorBottom = "0";
AnchorLeft = "1";
AnchorRight = "0";
isContainer = "0";
Profile = "ToolsGuiTextProfile";
HorizSizing = "right";
VertSizing = "bottom";
position = "21 5";
Extent = "47 10";
MinExtent = "8 2";
canSave = "1";
Visible = "1";
tooltipprofile = "ToolsGuiToolTipProfile";
hovertime = "1000";
canSaveDynamicFields = "0";
};
new GuiTextEditCtrl() {
historySize = "0";
password = "0";
tabComplete = "0";
sinkAllKeyEvents = "0";
passwordMask = "*";
text = "9";
maxLength = "4";
Margin = "0 0 0 0";
Padding = "0 0 0 0";
AnchorTop = "1";
AnchorBottom = "0";
AnchorLeft = "1";
AnchorRight = "0";
isContainer = "0";
Profile = "ToolsGuiNumericDropSliderTextProfile";
HorizSizing = "right";
VertSizing = "bottom";
position = "49 2";
Extent = "42 18";
MinExtent = "8 16";
canSave = "1";
Visible = "1";
AltCommand = "ForestTools->BrushTool.size = $ThisControl.getValue();";
validate = "ForestEditorGui.validateBrushSize();";
tooltipprofile = "ToolsGuiToolTipProfile";
hovertime = "1000";
internalName = "textEdit";
canSaveDynamicFields = "0";
};
new GuiBitmapButtonCtrl() {
bitmap = "tools/gui/images/dropslider";
groupNum = "-1";
buttonType = "PushButton";
useMouseEvents = "0";
isContainer = "0";
Profile = "ToolsGuiDefaultProfile";
HorizSizing = "right";
VertSizing = "bottom";
position = "83 2";
Extent = "18 18";
MinExtent = "8 2";
canSave = "1";
Visible = "1";
Command = "Canvas.pushDialog(ForestBrushSizeSliderCtrlContainer);";
tooltipprofile = "ToolsGuiToolTipProfile";
ToolTip = "Changes size of the brush";
hovertime = "750";
canSaveDynamicFields = "0";
};
};
new GuiBitmapCtrl() {
bitmap = "tools/gui/images/separator-h.png";
wrap = "0";
isContainer = "0";
Profile = "ToolsGuiDefaultProfile";
HorizSizing = "right";
VertSizing = "bottom";
position = "200 3";
Extent = "2 26";
MinExtent = "1 1";
canSave = "1";
Visible = "1";
tooltipprofile = "ToolsGuiToolTipProfile";
hovertime = "1000";
canSaveDynamicFields = "0";
};
new GuiControl(ForestBrushPressureTextEditContainer) {
isContainer = "1";
Profile = "ToolsGuiTransparentProfile";
HorizSizing = "right";
VertSizing = "bottom";
position = "208 5";
Extent = "120 50";
MinExtent = "8 2";
canSave = "1";
Visible = "1";
tooltipprofile = "ToolsGuiToolTipProfile";
hovertime = "1000";
canSaveDynamicFields = "0";
new GuiTextCtrl() {
text = "Pressure";
maxLength = "1024";
Margin = "0 0 0 0";
Padding = "0 0 0 0";
AnchorTop = "1";
AnchorBottom = "0";
AnchorLeft = "1";
AnchorRight = "0";
isContainer = "0";
Profile = "ToolsGuiTextProfile";
HorizSizing = "right";
VertSizing = "bottom";
position = "0 5";
Extent = "47 10";
MinExtent = "8 2";
canSave = "1";
Visible = "1";
tooltipprofile = "ToolsGuiToolTipProfile";
hovertime = "1000";
canSaveDynamicFields = "0";
};
new GuiTextEditCtrl() {
historySize = "0";
password = "0";
tabComplete = "0";
sinkAllKeyEvents = "0";
passwordMask = "*";
text = "100";
maxLength = "3";
Margin = "0 0 0 0";
Padding = "0 0 0 0";
AnchorTop = "1";
AnchorBottom = "0";
AnchorLeft = "1";
AnchorRight = "0";
isContainer = "0";
Profile = "ToolsGuiNumericDropSliderTextProfile";
HorizSizing = "right";
VertSizing = "bottom";
position = "49 2";
Extent = "42 18";
MinExtent = "8 16";
canSave = "1";
Visible = "1";
Command = "ForestTools->BrushTool.pressure = $ThisControl.getValue() / 100;";
tooltipprofile = "ToolsGuiToolTipProfile";
hovertime = "1000";
internalName = "textEdit";
canSaveDynamicFields = "0";
};
new GuiBitmapButtonCtrl() {
bitmap = "tools/gui/images/dropslider";
groupNum = "-1";
buttonType = "PushButton";
useMouseEvents = "0";
isContainer = "0";
Profile = "ToolsGuiDefaultProfile";
HorizSizing = "right";
VertSizing = "bottom";
position = "83 2";
Extent = "18 18";
MinExtent = "8 2";
canSave = "1";
Visible = "1";
Command = "Canvas.pushDialog(ForestBrushPressureSliderCtrlContainer);";
tooltipprofile = "ToolsGuiToolTipProfile";
ToolTip = "Changes the pressure";
hovertime = "750";
canSaveDynamicFields = "0";
};
};
new GuiBitmapCtrl() {
bitmap = "tools/gui/images/separator-h.png";
wrap = "0";
isContainer = "0";
Profile = "ToolsGuiDefaultProfile";
HorizSizing = "right";
VertSizing = "bottom";
position = "336 3";
Extent = "2 26";
MinExtent = "1 1";
canSave = "1";
Visible = "0";
tooltipprofile = "ToolsGuiToolTipProfile";
hovertime = "1000";
canSaveDynamicFields = "0";
};
new GuiControl(ForestBrushHardnessTextEditContainer) {
isContainer = "1";
Profile = "ToolsGuiTransparentProfile";
HorizSizing = "right";
VertSizing = "bottom";
position = "352 5";
Extent = "120 50";
MinExtent = "8 2";
canSave = "1";
Visible = "0";
tooltipprofile = "ToolsGuiToolTipProfile";
hovertime = "1000";
canSaveDynamicFields = "0";
new GuiTextCtrl() {
text = "Hardness";
maxLength = "1024";
Margin = "0 0 0 0";
Padding = "0 0 0 0";
AnchorTop = "1";
AnchorBottom = "0";
AnchorLeft = "1";
AnchorRight = "0";
isContainer = "0";
Profile = "ToolsGuiTextProfile";
HorizSizing = "right";
VertSizing = "bottom";
position = "0 5";
Extent = "47 10";
MinExtent = "8 2";
canSave = "1";
Visible = "1";
tooltipprofile = "ToolsGuiToolTipProfile";
hovertime = "1000";
canSaveDynamicFields = "0";
};
new GuiTextEditCtrl() {
historySize = "0";
password = "0";
tabComplete = "0";
sinkAllKeyEvents = "0";
passwordMask = "*";
text = "1";
maxLength = "3";
Margin = "0 0 0 0";
Padding = "0 0 0 0";
AnchorTop = "1";
AnchorBottom = "0";
AnchorLeft = "1";
AnchorRight = "0";
isContainer = "0";
Profile = "ToolsGuiNumericDropSliderTextProfile";
HorizSizing = "right";
VertSizing = "bottom";
position = "49 2";
Extent = "42 18";
MinExtent = "8 16";
canSave = "1";
Visible = "1";
Command = "ForestTools->BrushTool.hardness = $ThisControl.getValue() / 100);";
tooltipprofile = "ToolsGuiToolTipProfile";
hovertime = "1000";
internalName = "textEdit";
canSaveDynamicFields = "0";
};
new GuiBitmapButtonCtrl() {
bitmap = "tools/gui/images/dropslider";
groupNum = "-1";
buttonType = "PushButton";
useMouseEvents = "0";
isContainer = "0";
Profile = "ToolsGuiDefaultProfile";
HorizSizing = "right";
VertSizing = "bottom";
position = "83 2";
Extent = "18 18";
MinExtent = "8 2";
canSave = "1";
Visible = "1";
Command = "Canvas.pushDialog(ForestBrushHardnessSliderCtrlContainer);";
tooltipprofile = "ToolsGuiToolTipProfile";
ToolTip = "Changes the hardness curve.";
hovertime = "750";
canSaveDynamicFields = "0";
};
};
};
};
new GuiMouseEventCtrl(ForestBrushSizeSliderCtrlContainer,EditorGuiGroup) {
horizSizing = "right";
vertSizing = "bottom";
position = "0 0";
extent = "1024 768";
minExtent = "8 8";
visible = "1";
helpTag = "0";
class = "EditorDropdownSliderContainer";
new GuiSliderCtrl() {
canSaveDynamicFields = "0";
internalName = "slider";
isContainer = "0";
Profile = "ToolsGuiSliderBoxProfile";
HorizSizing = "right";
VertSizing = "bottom";
position = firstWord(ForestBrushSizeTextEditContainer.position) + firstWord(ForestEditToolbar.position)+11 SPC
(getWord(ForestBrushSizeTextEditContainer, 1)) + 25;
Extent = "112 20";
MinExtent = "8 2";
canSave = "1";
Visible = "1";
AltCommand = "ForestTools->BrushTool.size = $ThisControl.value;";
range = "1" SPC getWord(ETerrainEditor.maxBrushSize, 0);
ticks = "0";
value = "0";
};
};
new GuiMouseEventCtrl(ForestBrushPressureSliderCtrlContainer,EditorGuiGroup) {
horizSizing = "right";
vertSizing = "bottom";
position = "0 0";
extent = "1024 768";
minExtent = "8 8";
visible = "1";
helpTag = "0";
class = "EditorDropdownSliderContainer";
new GuiSliderCtrl() {
canSaveDynamicFields = "0";
internalName = "slider";
isContainer = "0";
Profile = "ToolsGuiSliderBoxProfile";
HorizSizing = "right";
VertSizing = "bottom";
position = firstWord(ForestBrushPressureTextEditContainer.position) + firstWord(ForestEditToolbar.position) SPC
(getWord(ForestBrushPressureTextEditContainer, 1)) + 25;
Extent = "112 20";
MinExtent = "8 2";
canSave = "1";
Visible = "1";
AltCommand = "ForestTools->BrushTool.pressure = $ThisControl.value;";
range = "0.01 1";
ticks = "0";
value = "0";
};
};
new GuiMouseEventCtrl(ForestBrushHardnessSliderCtrlContainer,EditorGuiGroup) {
horizSizing = "right";
vertSizing = "bottom";
position = "0 0";
extent = "1024 768";
minExtent = "8 8";
visible = "1";
helpTag = "0";
class = "EditorDropdownSliderContainer";
new GuiSliderCtrl() {
canSaveDynamicFields = "0";
internalName = "slider";
isContainer = "0";
Profile = "ToolsGuiSliderBoxProfile";
HorizSizing = "right";
VertSizing = "bottom";
position = firstWord(ForestBrushHardnessTextEditContainer.position) + firstWord(ForestEditToolbar.position) SPC
(getWord(TForestBrushHardnessTextEditContainer, 1)) + 25;
Extent = "112 20";
MinExtent = "8 2";
canSave = "1";
Visible = "1";
AltCommand = "ForestTools->BrushTool.hardness = $ThisControl.value;";
range = "0 1";
ticks = "0";
value = "0";
};
};
//--- OBJECT WRITE END ---

View file

@ -0,0 +1,27 @@
//-----------------------------------------------------------------------------
// Copyright (c) 2012 GarageGames, LLC
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
// IN THE SOFTWARE.
//-----------------------------------------------------------------------------
singleton GuiControlProfile (ForestEditorProfile)
{
canKeyFocus = true;
category = "Editor";
};

View file

@ -0,0 +1,502 @@
//-----------------------------------------------------------------------------
// Copyright (c) 2012 GarageGames, LLC
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
// IN THE SOFTWARE.
//-----------------------------------------------------------------------------
// ForestEditorGui Script Methods
function ForestEditorGui::setActiveTool( %this, %tool )
{
if ( %tool == ForestTools->BrushTool )
ForestEditTabBook.selectPage(0);
Parent::setActiveTool( %this, %tool );
}
/// This is called by the editor when the active forest has
/// changed giving us a chance to update the GUI.
function ForestEditorGui::onActiveForestUpdated( %this, %forest, %createNew )
{
%gotForest = isObject( %forest );
// Give the user a chance to add a forest.
if ( !%gotForest && %createNew )
{
MessageBoxYesNo( "Forest",
"There is not a Forest in this mission. Do you want to add one?",
%this @ ".createForest();", "" );
return;
}
}
/// Called from a message box when a forest is not found.
function ForestEditorGui::createForest( %this )
{
%forestObject = parseMissionGroupForIds("Forest", "");
if ( isObject( %forestObject ) )
{
error( "Cannot create a second 'theForest' Forest!" );
return;
}
// Allocate the Forest and make it undoable.
new Forest( theForest )
{
dataFile = "";
parentGroup = "MissionGroup";
};
MECreateUndoAction::submit( theForest );
ForestEditorGui.setActiveForest( theForest );
//Re-initialize the editor settings so we can start using it immediately.
%tool = ForestEditorGui.getActiveTool();
if ( isObject( %tool ) )
%tool.onActivated();
if ( %tool == ForestTools->SelectionTool )
{
%mode = GlobalGizmoProfile.mode;
switch$ (%mode)
{
case "None":
ForestEditorSelectModeBtn.performClick();
case "Move":
ForestEditorMoveModeBtn.performClick();
case "Rotate":
ForestEditorRotateModeBtn.performClick();
case "Scale":
ForestEditorScaleModeBtn.performClick();
}
}
else if ( %tool == ForestTools->BrushTool )
{
%mode = ForestTools->BrushTool.mode;
switch$ (%mode)
{
case "Paint":
ForestEditorPaintModeBtn.performClick();
case "Erase":
ForestEditorEraseModeBtn.performClick();
case "EraseSelected":
ForestEditorEraseSelectedModeBtn.performClick();
}
}
EWorldEditor.isDirty = true;
}
function ForestEditorGui::newBrush( %this )
{
%internalName = getUniqueInternalName( "Brush", ForestBrushGroup, true );
%brush = new ForestBrush()
{
internalName = %internalName;
parentGroup = ForestBrushGroup;
};
MECreateUndoAction::submit( %brush );
ForestEditBrushTree.open( ForestBrushGroup );
ForestEditBrushTree.buildVisibleTree(true);
%item = ForestEditBrushTree.findItemByObjectId( %brush );
ForestEditBrushTree.clearSelection();
ForestEditBrushTree.addSelection( %item );
ForestEditBrushTree.scrollVisible( %item );
ForestEditorPlugin.dirty = true;
}
function ForestEditorGui::newElement( %this )
{
%sel = ForestEditBrushTree.getSelectedObject();
if ( !isObject( %sel ) )
%parentGroup = ForestBrushGroup;
else
{
if ( %sel.getClassName() $= "ForestBrushElement" )
%parentGroup = %sel.parentGroup;
else
%parentGroup = %sel;
}
%internalName = getUniqueInternalName( "Element", ForestBrushGroup, true );
%element = new ForestBrushElement()
{
internalName = %internalName;
parentGroup = %parentGroup;
};
MECreateUndoAction::submit( %element );
ForestEditBrushTree.clearSelection();
ForestEditBrushTree.buildVisibleTree( true );
%item = ForestEditBrushTree.findItemByObjectId( %element.getId() );
ForestEditBrushTree.scrollVisible( %item );
ForestEditBrushTree.addSelection( %item );
ForestEditorPlugin.dirty = true;
}
function ForestEditorGui::deleteBrushOrElement( %this )
{
ForestEditBrushTree.deleteSelection();
ForestEditorPlugin.dirty = true;
}
function ForestEditorGui::newMesh( %this )
{
%spec = "All Mesh Files|*.dts;*.dae|DTS|*.dts|DAE|*.dae";
%dlg = new OpenFileDialog()
{
Filters = %spec;
DefaultPath = $Pref::WorldEditor::LastPath;
DefaultFile = "";
ChangePath = true;
};
%ret = %dlg.Execute();
if ( %ret )
{
$Pref::WorldEditor::LastPath = filePath( %dlg.FileName );
%fullPath = makeRelativePath( %dlg.FileName, getMainDotCSDir() );
%file = fileBase( %fullPath );
}
%dlg.delete();
if ( !%ret )
return;
%name = getUniqueName( %file );
%str = "datablock TSForestItemData( " @ %name @ " ) { shapeFile = \"" @ %fullPath @ "\"; };";
eval( %str );
if ( isObject( %name ) )
{
ForestEditMeshTree.clearSelection();
ForestEditMeshTree.buildVisibleTree( true );
%item = ForestEditMeshTree.findItemByObjectId( %name.getId() );
ForestEditMeshTree.scrollVisible( %item );
ForestEditMeshTree.addSelection( %item );
ForestDataManager.setDirty( %name, "art/forest/managedItemData.cs" );
%element = new ForestBrushElement()
{
internalName = %name;
forestItemData = %name;
parentGroup = ForestBrushGroup;
};
ForestEditBrushTree.clearSelection();
ForestEditBrushTree.buildVisibleTree( true );
%item = ForestEditBrushTree.findItemByObjectId( %element.getId() );
ForestEditBrushTree.scrollVisible( %item );
ForestEditBrushTree.addSelection( %item );
pushInstantGroup();
%action = new MECreateUndoAction()
{
actionName = "Create TSForestItemData";
};
popInstantGroup();
%action.addObject( %name );
%action.addObject( %element );
%action.addToManager( Editor.getUndoManager() );
ForestEditorPlugin.dirty = true;
}
}
function ForestEditorGui::deleteMesh( %this )
{
%obj = ForestEditMeshTree.getSelectedObject();
// Can't delete itemData's that are in use without
// crashing at the moment...
if ( isObject( %obj ) )
{
MessageBoxOKCancel( "Warning",
"Deleting this mesh will also delete BrushesElements and ForestItems referencing it.",
"ForestEditorGui.okDeleteMesh(" @ %obj @ ");",
"" );
}
}
function ForestEditorGui::okDeleteMesh( %this, %mesh )
{
// Remove mesh from file
ForestDataManager.removeObjectFromFile( %mesh, "art/forest/managedItemData.cs" );
// Submitting undo actions is handled in code.
%this.deleteMeshSafe( %mesh );
// Update TreeViews.
ForestEditBrushTree.buildVisibleTree( true );
ForestEditMeshTree.buildVisibleTree( true );
ForestEditorPlugin.dirty = true;
}
function ForestEditorGui::validateBrushSize( %this )
{
%minBrushSize = 1;
%maxBrushSize = getWord(ETerrainEditor.maxBrushSize, 0);
%val = $ThisControl.getText();
if(%val < %minBrushSize)
$ThisControl.setValue(%minBrushSize);
else if(%val > %maxBrushSize)
$ThisControl.setValue(%maxBrushSize);
}
// Child-control Script Methods
function ForestEditMeshTree::onSelect( %this, %obj )
{
ForestEditorInspector.inspect( %obj );
}
function ForestEditBrushTree::onRemoveSelection( %this, %obj )
{
%this.buildVisibleTree( true );
ForestTools->BrushTool.collectElements();
if ( %this.getSelectedItemsCount() == 1 )
ForestEditorInspector.inspect( %obj );
else
ForestEditorInspector.inspect( "" );
}
function ForestEditBrushTree::onAddSelection( %this, %obj )
{
%this.buildVisibleTree( true );
ForestTools->BrushTool.collectElements();
if ( %this.getSelectedItemsCount() == 1 )
ForestEditorInspector.inspect( %obj );
else
ForestEditorInspector.inspect( "" );
}
function ForestEditTabBook::onTabSelected( %this, %text, %idx )
{
%bbg = ForestEditorPalleteWindow.findObjectByInternalName("BrushButtonGroup");
%mbg = ForestEditorPalleteWindow.findObjectByInternalName("MeshButtonGroup");
%bbg.setVisible( false );
%mbg.setVisible( false );
if ( %text $= "Brushes" )
{
%bbg.setVisible( true );
%obj = ForestEditBrushTree.getSelectedObject();
ForestEditorInspector.inspect( %obj );
}
else if ( %text $= "Meshes" )
{
%mbg.setVisible( true );
%obj = ForestEditMeshTree.getSelectedObject();
ForestEditorInspector.inspect( %obj );
}
}
function ForestEditBrushTree::onDeleteSelection( %this )
{
%list = ForestEditBrushTree.getSelectedObjectList();
MEDeleteUndoAction::submit( %list, true );
ForestEditorPlugin.dirty = true;
}
function ForestEditBrushTree::onDragDropped( %this )
{
ForestEditorPlugin.dirty = true;
}
function ForestEditMeshTree::onDragDropped( %this )
{
ForestEditorPlugin.dirty = true;
}
function ForestEditMeshTree::onDeleteObject( %this, %obj )
{
// return true - skip delete.
return true;
}
function ForestEditMeshTree::onDoubleClick( %this )
{
%obj = %this.getSelectedObject();
%name = getUniqueInternalName( %obj.getName(), ForestBrushGroup, true );
%element = new ForestBrushElement()
{
internalName = %name;
forestItemData = %obj.getName();
parentGroup = ForestBrushGroup;
};
//ForestDataManager.setDirty( %element, "art/forest/brushes.cs" );
ForestEditBrushTree.clearSelection();
ForestEditBrushTree.buildVisibleTree( true );
%item = ForestEditBrushTree.findItemByObjectId( %element );
ForestEditBrushTree.scrollVisible( %item );
ForestEditBrushTree.addSelection( %item );
ForestEditorPlugin.dirty = true;
}
function ForestEditBrushTree::handleRenameObject( %this, %name, %obj )
{
if ( %name !$= "" )
{
%found = ForestBrushGroup.findObjectByInternalName( %name );
if ( isObject( %found ) && %found.getId() != %obj.getId() )
{
MessageBoxOK( "Error", "Brush or Element with that name already exists.", "" );
// true as in, we handled it, don't rename the object.
return true;
}
}
// Since we aren't showing any groups whens inspecting a ForestBrushGroup
// we can't push this event off to the inspector to handle.
//return GuiTreeViewCtrl::handleRenameObject( %this, %name, %obj );
// The instant group will try to add our
// UndoAction if we don't disable it.
pushInstantGroup();
%nameOrClass = %obj.getName();
if ( %nameOrClass $= "" )
%nameOrClass = %obj.getClassname();
%action = new InspectorFieldUndoAction()
{
actionName = %nameOrClass @ "." @ "internalName" @ " Change";
objectId = %obj.getId();
fieldName = "internalName";
fieldValue = %obj.internalName;
arrayIndex = 0;
inspectorGui = "";
};
// Restore the instant group.
popInstantGroup();
%action.addToManager( Editor.getUndoManager() );
EWorldEditor.isDirty = true;
return false;
}
function ForestEditorInspector::inspect( %this, %obj )
{
if ( isObject( %obj ) )
%class = %obj.getClassName();
%this.showObjectName = false;
%this.showCustomFields = false;
switch$ ( %class )
{
case "ForestBrush":
%this.groupFilters = "+NOTHING,-Ungrouped";
case "ForestBrushElement":
%this.groupFilters = "+ForestBrushElement,-Ungrouped";
case "TSForestItemData":
%this.groupFilters = "+Media,+Wind";
default:
%this.groupFilters = "";
}
Parent::inspect( %this, %obj );
}
function ForestEditorInspector::onInspectorFieldModified( %this, %object, %fieldName, %oldValue, %newValue )
{
// The instant group will try to add our
// UndoAction if we don't disable it.
%instantGroup = $InstantGroup;
$InstantGroup = 0;
%nameOrClass = %object.getName();
if ( %nameOrClass $= "" )
%nameOrClass = %object.getClassname();
%action = new InspectorFieldUndoAction()
{
actionName = %nameOrClass @ "." @ %fieldName @ " Change";
objectId = %object.getId();
fieldName = %fieldName;
fieldValue = %oldValue;
inspectorGui = %this;
};
// Restore the instant group.
$InstantGroup = %instantGroup;
%action.addToManager( Editor.getUndoManager() );
if ( %object.getClassName() $= "TSForestItemData" )
ForestDataManager.setDirty( %object );
ForestEditorPlugin.dirty = true;
}
function ForestEditorInspector::onFieldSelected( %this, %fieldName, %fieldTypeStr, %fieldDoc )
{
//FieldInfoControl.setText( "<font:ArialBold:14>" @ %fieldName @ "<font:ArialItalic:14> (" @ %fieldTypeStr @ ") " NL "<font:Arial:14>" @ %fieldDoc );
}
function ForestBrushSizeSliderCtrlContainer::onWake(%this)
{
%this-->slider.range = "1" SPC getWord(ETerrainEditor.maxBrushSize, 0);
%this-->slider.setValue(ForestBrushSizeTextEditContainer-->textEdit.getValue());
}

View file

@ -0,0 +1,511 @@
//--- OBJECT WRITE BEGIN ---
%guiContent = new ForestEditorCtrl(ForestEditorGui,EditorGuiGroup) {
renderMissionArea = "0";
missionAreaFillColor = "255 0 0 20";
missionAreaFrameColor = "255 0 0 128";
allowBorderMove = "0";
borderMovePixelSize = "20";
borderMoveSpeed = "0.1";
consoleFrameColor = "255 0 0 255";
consoleFillColor = "255 0 0 120";
consoleSphereLevel = "1";
consoleCircleSegments = "32";
consoleLineWidth = "1";
GizmoProfile = "GlobalGizmoProfile";
cameraZRot = "0";
forceFOV = "0";
reflectPriority = "1";
Margin = "0 0 0 0";
Padding = "0 0 0 0";
AnchorTop = "0";
AnchorBottom = "0";
AnchorLeft = "0";
AnchorRight = "0";
isContainer = "1";
Profile = "ForestEditorProfile";
HorizSizing = "width";
VertSizing = "height";
position = "0 0";
Extent = "800 600";
MinExtent = "8 2";
canSave = "1";
Visible = "1";
tooltipprofile = "ToolsGuiToolTipProfile";
hovertime = "1000";
canSaveDynamicFields = "1";
new GuiWindowCollapseCtrl(ForestEditorPalleteWindow) {
CollapseGroup = "-1";
CollapseGroupNum = "-1";
resizeWidth = "1";
resizeHeight = "1";
canMove = "1";
canClose = "0";
canMinimize = "0";
canMaximize = "0";
minSize = "50 50";
EdgeSnap = "1";
text = "Forest Editor";
Margin = "0 0 0 0";
Padding = "0 0 0 0";
AnchorTop = "1";
AnchorBottom = "0";
AnchorLeft = "1";
AnchorRight = "0";
isContainer = "1";
Profile = "ToolsGuiWindowCollapseProfile";
HorizSizing = "windowRelative";
VertSizing = "windowRelative";
Position = getWord($pref::Video::mode, 0) - 209
SPC getWord(EditorGuiToolbar.extent, 1)-1;
Extent = "210 252";
MinExtent = "210 100";
canSave = "1";
Visible = "1";
tooltipprofile = "ToolsGuiToolTipProfile";
hovertime = "1000";
internalName = "PalleteWindow";
canSaveDynamicFields = "0";
new GuiTabBookCtrl(ForestEditTabBook) {
TabPosition = "Top";
TabMargin = "10";
MinTabWidth = "60";
TabHeight = "20";
AllowReorder = "0";
FrontTabPadding = "0";
Docking = "Client";
Margin = "3 1 3 3";
Padding = "0 0 0 0";
AnchorTop = "1";
AnchorBottom = "0";
AnchorLeft = "1";
AnchorRight = "0";
isContainer = "1";
Profile = "ToolsGuiTabBookProfile";
HorizSizing = "width";
VertSizing = "height";
position = "3 44";
Extent = "210 205";
MinExtent = "8 2";
canSave = "1";
Visible = "1";
tooltipprofile = "ToolsGuiToolTipProfile";
hovertime = "1000";
canSaveDynamicFields = "0";
new GuiTabPageCtrl() {
fitBook = "0";
text = "Brushes";
maxLength = "1024";
Docking = "Client";
Margin = "-1 0 0 0";
Padding = "0 0 0 0";
AnchorTop = "1";
AnchorBottom = "0";
AnchorLeft = "1";
AnchorRight = "0";
isContainer = "1";
Profile = "ToolsGuiTabPageProfile";
HorizSizing = "right";
VertSizing = "bottom";
position = "0 22";
Extent = "210 194";
MinExtent = "8 2";
canSave = "1";
Visible = "0";
tooltipprofile = "ToolsGuiToolTipProfile";
hovertime = "1000";
internalName = "BrushesTab";
canSaveDynamicFields = "0";
new GuiScrollCtrl() {
willFirstRespond = "1";
hScrollBar = "alwaysOff";
vScrollBar = "dynamic";
lockHorizScroll = true;
lockVertScroll = "0";
constantThumbHeight = "0";
childMargin = "0 0";
mouseWheelScrollSpeed = "-1";
Docking = "Client";
Margin = "0 0 0 0";
Padding = "0 0 0 0";
AnchorTop = "1";
AnchorBottom = "0";
AnchorLeft = "1";
AnchorRight = "0";
isContainer = "1";
Profile = "ToolsGuiScrollProfile";
HorizSizing = "right";
VertSizing = "bottom";
position = "0 0";
Extent = "210 194";
MinExtent = "8 2";
canSave = "1";
Visible = "1";
tooltipprofile = "ToolsGuiToolTipProfile";
hovertime = "1000";
canSaveDynamicFields = "0";
new GuiTreeViewCtrl(ForestEditBrushTree) {
tabSize = "16";
textOffset = "2";
fullRowSelect = "0";
itemHeight = "21";
destroyTreeOnSleep = "1";
MouseDragging = "1";
MultipleSelections = "1";
DeleteObjectAllowed = "1";
DragToItemAllowed = "1";
ClearAllOnSingleSelection = "1";
showRoot = "0";
internalNamesOnly = "1";
objectNamesOnly = "0";
useInspectorTooltips = "0";
tooltipOnWidthOnly = "0";
compareToObjectID = "1";
canRenameObjects = "1";
renameInternal = "1";
isContainer = "1";
Profile = "ToolsGuiTreeViewProfile";
HorizSizing = "right";
VertSizing = "bottom";
position = "1 1";
Extent = "208 2";
MinExtent = "8 2";
canSave = "1";
Visible = "1";
tooltipprofile = "ToolsGuiToolTipProfile";
hovertime = "1000";
canSaveDynamicFields = "0";
};
};
};
new GuiTabPageCtrl() {
fitBook = "0";
text = "Meshes";
maxLength = "1024";
Docking = "Client";
Margin = "-1 0 0 0";
Padding = "0 0 0 0";
AnchorTop = "1";
AnchorBottom = "0";
AnchorLeft = "1";
AnchorRight = "0";
isContainer = "1";
Profile = "ToolsGuiTabPageProfile";
HorizSizing = "right";
VertSizing = "bottom";
position = "0 22";
Extent = "210 183";
MinExtent = "8 2";
canSave = "1";
Visible = "1";
tooltipprofile = "ToolsGuiToolTipProfile";
hovertime = "1000";
internalName = "MeshesTab";
canSaveDynamicFields = "0";
new GuiScrollCtrl() {
willFirstRespond = "1";
hScrollBar = "alwaysOff";
vScrollBar = "dynamic";
lockHorizScroll = true;
lockVertScroll = "0";
constantThumbHeight = "0";
childMargin = "0 0";
mouseWheelScrollSpeed = "-1";
Docking = "Client";
Margin = "0 0 0 0";
Padding = "0 0 0 0";
AnchorTop = "1";
AnchorBottom = "0";
AnchorLeft = "1";
AnchorRight = "0";
isContainer = "1";
Profile = "ToolsGuiScrollProfile";
HorizSizing = "right";
VertSizing = "bottom";
position = "0 0";
Extent = "210 194";
MinExtent = "8 2";
canSave = "1";
Visible = "1";
tooltipprofile = "ToolsGuiToolTipProfile";
hovertime = "1000";
canSaveDynamicFields = "0";
new GuiTreeViewCtrl(ForestEditMeshTree) {
tabSize = "16";
textOffset = "2";
fullRowSelect = "0";
itemHeight = "21";
destroyTreeOnSleep = "1";
MouseDragging = "0";
MultipleSelections = "0";
DeleteObjectAllowed = "0";
DragToItemAllowed = "0";
ClearAllOnSingleSelection = "1";
showRoot = "0";
internalNamesOnly = "0";
objectNamesOnly = "1";
useInspectorTooltips = "0";
tooltipOnWidthOnly = "0";
compareToObjectID = "0";
canRenameObjects = "1";
renameInternal = "0";
isContainer = "1";
Profile = "ToolsGuiTreeViewProfile";
HorizSizing = "right";
VertSizing = "bottom";
position = "1 -67";
Extent = "208 2";
MinExtent = "8 2";
canSave = "1";
Visible = "1";
AltCommand = "$ThisControl.onDoubleClick();";
tooltipprofile = "ToolsGuiToolTipProfile";
hovertime = "1000";
canSaveDynamicFields = "0";
};
};
};
};
new GuiStackControl() {
StackingType = "Horizontal";
HorizStacking = "Left to Right";
VertStacking = "Top to Bottom";
Padding = "3";
DynamicSize = "1";
ChangeChildSizeToFit = "0";
ChangeChildPosition = "0";
isContainer = "1";
Profile = "ToolsGuiDefaultProfile";
HorizSizing = "left";
VertSizing = "bottom";
position = "170 25";
Extent = "35 17";
MinExtent = "16 16";
canSave = "1";
Visible = "0";
tooltipprofile = "ToolsGuiToolTipProfile";
hovertime = "1000";
internalName = "MeshButtonGroup";
canSaveDynamicFields = "0";
new GuiBitmapButtonCtrl() {
bitmap = "tools/forestEditor/images/new-mesh";
groupNum = "-1";
buttonType = "PushButton";
useMouseEvents = "0";
isContainer = "0";
Profile = "ToolsGuiDefaultProfile";
HorizSizing = "left";
VertSizing = "bottom";
position = "0 0";
Extent = "16 16";
MinExtent = "8 2";
canSave = "1";
Visible = "1";
Command = "ForestEditorGui.newMesh();";
tooltipprofile = "ToolsGuiToolTipProfile";
ToolTip = "Add New Mesh";
hovertime = "1000";
canSaveDynamicFields = "0";
};
new GuiBitmapButtonCtrl() {
bitmap = "tools/gui/images/delete";
groupNum = "-1";
buttonType = "PushButton";
useMouseEvents = "0";
isContainer = "0";
Profile = "ToolsGuiDefaultProfile";
HorizSizing = "left";
VertSizing = "bottom";
position = "19 0";
Extent = "16 16";
MinExtent = "8 2";
canSave = "1";
Visible = "1";
Command = "ForestEditorGui.deleteMesh();";
tooltip = "Delete Selected";
tooltipprofile = "ToolsGuiToolTipProfile";
hovertime = "1000";
canSaveDynamicFields = "0";
};
};
new GuiStackControl() {
StackingType = "Horizontal";
HorizStacking = "Left to Right";
VertStacking = "Top to Bottom";
Padding = "3";
DynamicSize = "1";
ChangeChildSizeToFit = "0";
ChangeChildPosition = "0";
isContainer = "1";
Profile = "ToolsGuiDefaultProfile";
HorizSizing = "left";
VertSizing = "bottom";
position = "151 25";
Extent = "54 17";
MinExtent = "16 16";
canSave = "1";
Visible = "1";
tooltipprofile = "ToolsGuiToolTipProfile";
hovertime = "1000";
internalName = "BrushButtonGroup";
canSaveDynamicFields = "0";
new GuiBitmapButtonCtrl() {
bitmap = "tools/forestEditor/images/new-brush";
groupNum = "-1";
buttonType = "PushButton";
useMouseEvents = "0";
isContainer = "0";
Profile = "ToolsGuiDefaultProfile";
HorizSizing = "left";
VertSizing = "bottom";
position = "0 0";
Extent = "16 16";
MinExtent = "8 2";
canSave = "1";
Visible = "1";
Command = "ForestEditorGui.newBrush();";
tooltipprofile = "ToolsGuiToolTipProfile";
ToolTip = "Add New Brush Group";
hovertime = "1000";
canSaveDynamicFields = "0";
};
new GuiBitmapButtonCtrl() {
bitmap = "tools/forestEditor/images/new-element";
groupNum = "-1";
buttonType = "PushButton";
useMouseEvents = "0";
isContainer = "0";
Profile = "ToolsGuiDefaultProfile";
HorizSizing = "left";
VertSizing = "bottom";
position = "19 0";
Extent = "16 16";
MinExtent = "8 2";
canSave = "1";
Visible = "1";
Command = "ForestEditorGui.newElement();";
tooltip = "Add New Brush Element";
tooltipprofile = "ToolsGuiToolTipProfile";
hovertime = "1000";
canSaveDynamicFields = "0";
};
new GuiBitmapButtonCtrl() {
bitmap = "tools/gui/images/delete";
groupNum = "-1";
buttonType = "PushButton";
useMouseEvents = "0";
isContainer = "0";
Profile = "ToolsGuiDefaultProfile";
HorizSizing = "left";
VertSizing = "bottom";
position = "38 0";
Extent = "16 16";
MinExtent = "8 2";
canSave = "1";
Visible = "1";
Command = "ForestEditorGui.deleteBrushOrElement();";
tooltip = "Delete Selected";
tooltipprofile = "ToolsGuiToolTipProfile";
hovertime = "1000";
canSaveDynamicFields = "0";
};
};
};
new GuiWindowCollapseCtrl(ForestEditorPropertiesWindow) {
CollapseGroup = "-1";
CollapseGroupNum = "-1";
resizeWidth = "1";
resizeHeight = "1";
canMove = "1";
canClose = "0";
canMinimize = "0";
canMaximize = "0";
minSize = "50 50";
EdgeSnap = "1";
text = "Properties";
Margin = "0 0 0 0";
Padding = "0 0 0 0";
AnchorTop = "1";
AnchorBottom = "0";
AnchorLeft = "1";
AnchorRight = "0";
isContainer = "1";
Profile = "ToolsGuiWindowCollapseProfile";
HorizSizing = "windowRelative";
VertSizing = "windowRelative";
Position = getWord($pref::Video::mode, 0) - 209
SPC getWord(EditorGuiToolbar.extent, 1) + getWord(ForestEditorPalleteWindow.extent, 1) - 2;
Extent = "210 460";
MinExtent = "210 50";
canSave = "1";
Visible = "1";
tooltipprofile = "ToolsGuiToolTipProfile";
hovertime = "1000";
internalName = "PropertiesWindow";
canSaveDynamicFields = "0";
new GuiScrollCtrl() {
willFirstRespond = "1";
hScrollBar = "alwaysOff";
vScrollBar = "dynamic";
lockHorizScroll = true;
lockVertScroll = "0";
constantThumbHeight = "0";
childMargin = "0 0";
mouseWheelScrollSpeed = "-1";
Docking = "Client";
Margin = "3 1 3 3";
Padding = "0 0 0 0";
AnchorTop = "1";
AnchorBottom = "0";
AnchorLeft = "1";
AnchorRight = "0";
isContainer = "1";
Profile = "ToolsGuiScrollProfile";
HorizSizing = "right";
VertSizing = "bottom";
position = "3 23";
Extent = "210 263";
MinExtent = "8 2";
canSave = "1";
Visible = "1";
tooltipprofile = "ToolsGuiToolTipProfile";
hovertime = "1000";
canSaveDynamicFields = "0";
new GuiInspector(ForestEditorInspector) {
dividerMargin = "5";
showCustomFields = "0";
StackingType = "Vertical";
HorizStacking = "Left to Right";
VertStacking = "Top to Bottom";
Padding = "1";
DynamicSize = "1";
ChangeChildSizeToFit = "1";
ChangeChildPosition = "1";
isContainer = "1";
Profile = "GuiInspectorProfile";
HorizSizing = "width";
VertSizing = "height";
position = "1 1";
Extent = "193 16";
MinExtent = "16 16";
canSave = "1";
Visible = "1";
tooltipprofile = "ToolsGuiToolTipProfile";
hovertime = "1000";
internalName = "Inspector";
canSaveDynamicFields = "0";
};
};
};
};
//--- OBJECT WRITE END ---

Binary file not shown.

After

Width:  |  Height:  |  Size: 751 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1,012 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 671 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 653 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 945 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 619 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 908 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 677 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 694 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 693 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 636 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 437 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 440 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 412 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 709 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 722 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 633 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 940 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 754 B

View file

@ -0,0 +1,311 @@
//-----------------------------------------------------------------------------
// Copyright (c) 2012 GarageGames, LLC
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
// IN THE SOFTWARE.
//-----------------------------------------------------------------------------
function initializeForestEditor()
{
echo(" % - Initializing Forest Editor");
exec( "./forestEditor.cs" );
exec( "./forestEditorGui.gui" );
exec( "./forestEditToolbar.ed.gui" );
exec( "./forestEditorGui.cs" );
exec( "./tools.cs" );
ForestEditorGui.setVisible( false );
ForestEditorPalleteWindow.setVisible( false );
ForestEditorPropertiesWindow.setVisible( false );
ForestEditToolbar.setVisible( false );
EditorGui.add( ForestEditorGui );
EditorGui.add( ForestEditorPalleteWindow );
EditorGui.add( ForestEditorPropertiesWindow );
EditorGui.add( ForestEditToolbar );
new ScriptObject( ForestEditorPlugin )
{
superClass = "EditorPlugin";
editorGui = ForestEditorGui;
};
new SimSet(ForestTools)
{
new ForestBrushTool()
{
internalName = "BrushTool";
toolTip = "Paint Tool";
buttonImage = "tools/forest/images/brushTool";
};
new ForestSelectionTool()
{
internalName = "SelectionTool";
toolTip = "Selection Tool";
buttonImage = "tools/forest/images/selectionTool";
};
};
%map = new ActionMap();
%map.bindCmd( keyboard, "1", "ForestEditorSelectModeBtn.performClick();", "" ); // Select
%map.bindCmd( keyboard, "2", "ForestEditorMoveModeBtn.performClick();", "" ); // Move
%map.bindCmd( keyboard, "3", "ForestEditorRotateModeBtn.performClick();", "" ); // Rotate
%map.bindCmd( keyboard, "4", "ForestEditorScaleModeBtn.performClick();", "" ); // Scale
%map.bindCmd( keyboard, "5", "ForestEditorPaintModeBtn.performClick();", "" ); // Paint
%map.bindCmd( keyboard, "6", "ForestEditorEraseModeBtn.performClick();", "" ); // Erase
%map.bindCmd( keyboard, "7", "ForestEditorEraseSelectedModeBtn.performClick();", "" ); // EraseSelected
//%map.bindCmd( keyboard, "backspace", "ForestEditorGui.onDeleteKey();", "" );
//%map.bindCmd( keyboard, "delete", "ForestEditorGui.onDeleteKey();", "" );
ForestEditorPlugin.map = %map;
}
function destroyForestEditor()
{
}
// NOTE: debugging helper.
function reinitForest()
{
exec( "./main.cs" );
exec( "./forestEditorGui.cs" );
exec( "./tools.cs" );
}
function ForestEditorPlugin::onWorldEditorStartup( %this )
{
new PersistenceManager( ForestDataManager );
%brushPath = "tools/forestEditor/brushes.cs";
if ( !isFile( %brushPath ) )
%successfulFile = createPath( %brushPath );
// This creates the ForestBrushGroup, all brushes, and elements.
exec( %brushpath );
if ( !isObject( ForestBrushGroup ) )
{
new SimGroup( ForestBrushGroup );
%this.showError = true;
}
ForestEditBrushTree.open( ForestBrushGroup );
if ( !isObject( ForestItemDataSet ) )
new SimSet( ForestItemDataSet );
ForestEditMeshTree.open( ForestItemDataSet );
// Add ourselves to the window menu.
%accel = EditorGui.addToEditorsMenu( "Forest Editor", "", ForestEditorPlugin );
// Add ourselves to the tools menu.
%tooltip = "Forest Editor (" @ %accel @ ")";
EditorGui.addToToolsToolbar( "ForestEditorPlugin", "ForestEditorPalette", expandFilename("tools/forestEditor/images/forest-editor-btn"), %tooltip );
//connect editor windows
GuiWindowCtrl::attach( ForestEditorPropertiesWindow, ForestEditorPalleteWindow );
ForestEditTabBook.selectPage(0);
}
function ForestEditorPlugin::onWorldEditorShutdown( %this )
{
if ( isObject( ForestBrushGroup ) )
ForestBrushGroup.delete();
if ( isObject( ForestDataManager ) )
ForestDataManager.delete();
}
function ForestEditorPlugin::onActivated( %this )
{
EditorGui.bringToFront( ForestEditorGui );
ForestEditorGui.setVisible( true );
ForestEditorPalleteWindow.setVisible( true );
ForestEditorPropertiesWindow.setVisible( true );
ForestEditorGui.makeFirstResponder( true );
//ForestEditToolbar.setVisible( true );
//Get our existing forest object in our current mission if we have one
%forestObject = parseMissionGroupForIds("Forest", "");
if(isObject(%forestObject))
{
ForestEditorGui.setActiveForest(%forestObject.getName());
}
%this.map.push();
Parent::onActivated(%this);
ForestEditBrushTree.open( ForestBrushGroup );
ForestEditMeshTree.open( ForestItemDataSet );
// Open the Brush tab.
ForestEditTabBook.selectPage(0);
// Sync the pallete button state
// And toolbar.
%tool = ForestEditorGui.getActiveTool();
if ( isObject( %tool ) )
%tool.onActivated();
if ( !isObject( %tool ) )
{
ForestEditorPaintModeBtn.performClick();
if ( ForestEditBrushTree.getItemCount() > 0 )
{
ForestEditBrushTree.selectItem( 0, true );
}
}
else if ( %tool == ForestTools->SelectionTool )
{
%mode = GlobalGizmoProfile.mode;
switch$ (%mode)
{
case "None":
ForestEditorSelectModeBtn.performClick();
case "Move":
ForestEditorMoveModeBtn.performClick();
case "Rotate":
ForestEditorRotateModeBtn.performClick();
case "Scale":
ForestEditorScaleModeBtn.performClick();
}
}
else if ( %tool == ForestTools->BrushTool )
{
%mode = ForestTools->BrushTool.mode;
switch$ (%mode)
{
case "Paint":
ForestEditorPaintModeBtn.performClick();
case "Erase":
ForestEditorEraseModeBtn.performClick();
case "EraseSelected":
ForestEditorEraseSelectedModeBtn.performClick();
}
}
if ( %this.showError )
MessageBoxOK( "Error", "Your tools/forestEditor folder does not contain a valid brushes.cs. Brushes you create will not be saved!" );
}
function ForestEditorPlugin::onDeactivated( %this )
{
ForestEditorGui.setVisible( false );
ForestEditorPalleteWindow.setVisible( false );
ForestEditorPropertiesWindow.setVisible( false );
%tool = ForestEditorGui.getActiveTool();
if ( isObject( %tool ) )
%tool.onDeactivated();
// Also take this opportunity to save.
ForestDataManager.saveDirty();
%this.map.pop();
Parent::onDeactivated(%this);
}
function ForestEditorPlugin::isDirty( %this )
{
%dirty = %this.dirty || ForestEditorGui.isDirty();
return %dirty;
}
function ForestEditorPlugin::clearDirty( %this )
{
%this.dirty = false;
}
function ForestEditorPlugin::onSaveMission( %this, %missionFile )
{
ForestDataManager.saveDirty();
//First, find out if we have an existing forest object
%forestObject = parseMissionGroupForIds("Forest", "");
if ( isObject( %forestObject ) )
{
//We do. Next, see if we have a file already by polling the datafield.
if(%forestObject.dataFile !$= "")
{
//If we do, just save to the provided file.
%forestObject.saveDataFile(%forestObject.dataFile);
}
else
{
//We don't, so we'll save in the same place as the mission file and give it the missionpath\missionName.forest
//naming convention.
%path = filePath(%missionFile);
%missionName = fileBase(%missionFile);
%forestObject.saveDataFile(%path @ "/" @ %missionName @ ".forest");
}
}
ForestBrushGroup.save( "tools/forestEditor/brushes.cs" );
}
function ForestEditorPlugin::onEditorSleep( %this )
{
}
function ForestEditorPlugin::onEditMenuSelect( %this, %editMenu )
{
%hasSelection = false;
%selTool = ForestTools->SelectionTool;
if ( ForestEditorGui.getActiveTool() == %selTool )
if ( %selTool.getSelectionCount() > 0 )
%hasSelection = true;
%editMenu.enableItem( 3, %hasSelection ); // Cut
%editMenu.enableItem( 4, %hasSelection ); // Copy
%editMenu.enableItem( 5, %hasSelection ); // Paste
%editMenu.enableItem( 6, %hasSelection ); // Delete
%editMenu.enableItem( 8, %hasSelection ); // Deselect
}
function ForestEditorPlugin::handleDelete( %this )
{
ForestTools->SelectionTool.deleteSelection();
}
function ForestEditorPlugin::handleDeselect( %this )
{
ForestTools->SelectionTool.clearSelection();
}
function ForestEditorPlugin::handleCut( %this )
{
ForestTools->SelectionTool.cutSelection();
}
function ForestEditorPlugin::handleCopy( %this )
{
ForestTools->SelectionTool.copySelection();
}
function ForestEditorPlugin::handlePaste( %this )
{
ForestTools->SelectionTool.pasteSelection();
}

View file

@ -0,0 +1,61 @@
//-----------------------------------------------------------------------------
// Copyright (c) 2012 GarageGames, LLC
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
// IN THE SOFTWARE.
//-----------------------------------------------------------------------------
function ForestBrushTool::onActivated( %this )
{
ForestEditToolbar.setVisible( true );
%this.syncBrushToolbar();
}
function ForestBrushTool::onDeactivated( %this )
{
ForestEditToolbar.setVisible( false );
}
function ForestBrushTool::syncBrushToolbar( %this )
{
%size = %this.size;
ForestBrushSizeSliderCtrlContainer->slider.setValue( %size );
ForestBrushSizeTextEditContainer-->textEdit.setValue( %size );
%pres = %this.pressure;
ForestBrushPressureSliderCtrlContainer->slider.setValue( %pres );
ForestBrushPressureTextEditContainer-->textEdit.setValue( mCeil(100 * %pres) @ "%" );
%hard = %this.hardness;
ForestBrushHardnessSliderCtrlContainer->slider.setValue( %hard );
ForestBrushHardnessTextEditContainer-->textEdit.setValue( mCeil(100 * %hard) @ "%");
}
function ForestBrushTool::onMouseDown( %this )
{
ForestEditTabBook.selectPage( 0 );
}
function ForestSelectionTool::onActivated( %this )
{
}
function ForestSelectionTool::onDeactivated( %this )
{
%this.clearSelection();
}