BITFALL/Assets/GSpawn - Level Designer/Scripts/Level Design/Object Spawn/ObjectSpawnUI.cs

545 lines
40 KiB
C#

#if UNITY_EDITOR
using UnityEngine;
using UnityEditor.UIElements;
using UnityEngine.UIElements;
namespace GSpawn
{
public class ObjectSpawnUI : PluginUI
{
private ToolbarButton _modularSnapBtn;
private ToolbarButton _modularWallsBtn;
private ToolbarButton _segmentsBtn;
private ToolbarButton _boxBtn;
private ToolbarButton _propsBtn;
private ToolbarButton _scatterBrushBtn;
private ToolbarButton _tileRulesBtn;
private ToolbarButton _curveBtn;
private ToolbarButton _physicsBtn;
private Toolbar _curveSpawnGizmoSelectToolbar;
private ToolbarButton _curveSpawnMoveGimzoBtn;
private ToolbarButton _curveSpawnRotationGizmoBtn;
private ToolbarButton _curveSpawnScaleGizmoBtn;
private Toolbar _trSpawnToolSelectToolbar;
private ToolbarButton _trSpawnPaintBtn;
private ToolbarButton _trSpawnRampPaintBtn;
private ToolbarButton _trSpawnEraseBtn;
private ToolbarButton _trSpawnConnectBtn;
private Toolbar _trSpawnBrushSelectToolbar;
private ToolbarButton _trSpawnBoxBrushBtn;
private ToolbarButton _trSpawnFlexiBoxBrushBtn;
private ToolbarButton _trSpawnSegmentsBrushBtn;
[SerializeField]
private UISection _modularSnapSpawnSettingsSection;
[SerializeField]
private UISection _modularSnapSpawnGuideSettingsSection;
[SerializeField]
private UISection _modularSnapSpawnMirrorGizmoSettingsSection;
[SerializeField]
private UISection _segmentsSpawnModularSnapSettingsSection;
[SerializeField]
private UISection _segmentsSpawnSettingsProfileSection;
[SerializeField]
private UISection _segmentsSpawnMirrorGizmoSettingsSection;
[SerializeField]
private UISection _boxSpawnModularSnapSettingsSection;
[SerializeField]
private UISection _boxSpawnSettingsProfileSection;
[SerializeField]
private UISection _boxSpawnMirrorGizmoSettingsSection;
[SerializeField]
private UISection _propsSpawnSurfaceSnapSettingsSection;
[SerializeField]
private UISection _propsSpawnDragSpawnSettingsSection;
[SerializeField]
private UISection _propsSpawnTerrainFlattenSettingsSection;
[SerializeField]
private UISection _propsSpawnGuideSettingsSection;
[SerializeField]
private UISection _propsSpawnMirrorGizmoSettingsSection;
[SerializeField]
private UISection _scatterBrushSpawnSettingsSection;
[SerializeField]
private UISection _physicsSimulationSettingsSection;
private UISection modularSnapSpawnSettingsSection { get { if (_modularSnapSpawnSettingsSection == null) _modularSnapSpawnSettingsSection = ScriptableObject.CreateInstance<UISection>(); return _modularSnapSpawnSettingsSection; } }
private UISection modularSnapSpawnGuideSettingsSection { get { if (_modularSnapSpawnGuideSettingsSection == null) _modularSnapSpawnGuideSettingsSection = ScriptableObject.CreateInstance<UISection>(); return _modularSnapSpawnGuideSettingsSection; } }
private UISection modularSnapSpawnMirrorGizmoSettingsSection { get { if (_modularSnapSpawnMirrorGizmoSettingsSection == null) _modularSnapSpawnMirrorGizmoSettingsSection = ScriptableObject.CreateInstance<UISection>(); return _modularSnapSpawnMirrorGizmoSettingsSection; } }
private UISection segmentsSpawnModularSnapSettingsSection { get { if (_segmentsSpawnModularSnapSettingsSection == null) _segmentsSpawnModularSnapSettingsSection = ScriptableObject.CreateInstance<UISection>(); return _segmentsSpawnModularSnapSettingsSection; } }
private UISection segmentsSpawnSettingsProfileSection { get { if (_segmentsSpawnSettingsProfileSection == null) _segmentsSpawnSettingsProfileSection = ScriptableObject.CreateInstance<UISection>(); return _segmentsSpawnSettingsProfileSection; } }
private UISection segmentsSpawnMirrorGizmoSettingsSection { get { if (_segmentsSpawnMirrorGizmoSettingsSection == null) _segmentsSpawnMirrorGizmoSettingsSection = ScriptableObject.CreateInstance<UISection>(); return _segmentsSpawnMirrorGizmoSettingsSection; } }
private UISection boxSpawnModularSnapSettingsSection { get { if (_boxSpawnModularSnapSettingsSection == null) _boxSpawnModularSnapSettingsSection = ScriptableObject.CreateInstance<UISection>(); return _boxSpawnModularSnapSettingsSection; } }
private UISection boxSpawnSettingsProfileSection { get { if (_boxSpawnSettingsProfileSection == null) _boxSpawnSettingsProfileSection = ScriptableObject.CreateInstance<UISection>(); return _boxSpawnSettingsProfileSection; } }
private UISection boxSpawnMirrorGizmoSettingsSection { get { if (_boxSpawnMirrorGizmoSettingsSection == null) _boxSpawnMirrorGizmoSettingsSection = ScriptableObject.CreateInstance<UISection>(); return _boxSpawnMirrorGizmoSettingsSection; } }
private UISection propsSpawnSurfaceSnapSettingsSection { get { if (_propsSpawnSurfaceSnapSettingsSection == null) _propsSpawnSurfaceSnapSettingsSection = ScriptableObject.CreateInstance<UISection>(); return _propsSpawnSurfaceSnapSettingsSection; } }
private UISection propsSpawnDragSpawnSettingsSection { get { if (_propsSpawnDragSpawnSettingsSection == null) _propsSpawnDragSpawnSettingsSection = ScriptableObject.CreateInstance<UISection>(); return _propsSpawnDragSpawnSettingsSection; } }
private UISection propsSpawnTerrainFlattenSettingsSection { get { if (_propsSpawnTerrainFlattenSettingsSection == null) _propsSpawnTerrainFlattenSettingsSection = ScriptableObject.CreateInstance<UISection>(); return _propsSpawnTerrainFlattenSettingsSection; } }
private UISection propsSpawnGuideSettingsSection { get { if (_propsSpawnGuideSettingsSection == null) _propsSpawnGuideSettingsSection = ScriptableObject.CreateInstance<UISection>(); return _propsSpawnGuideSettingsSection; } }
private UISection propsSpawnMirrorGizmoSettingsSection { get { if (_propsSpawnMirrorGizmoSettingsSection == null) _propsSpawnMirrorGizmoSettingsSection = ScriptableObject.CreateInstance<UISection>(); return _propsSpawnMirrorGizmoSettingsSection; } }
private UISection scatterBrushSpawnSettingsSection { get { if (_scatterBrushSpawnSettingsSection == null) _scatterBrushSpawnSettingsSection = ScriptableObject.CreateInstance<UISection>(); return _scatterBrushSpawnSettingsSection; } }
private UISection physicsSimulationSettingsSection { get { if (_physicsSimulationSettingsSection == null) _physicsSimulationSettingsSection = ScriptableObject.CreateInstance<UISection>(); return _physicsSimulationSettingsSection; } }
private static string uiSectionRowSeparator_ModularSnapSpawnName { get { return "A"; } }
private static string uiSectionRowSeparator_SegmentsSpawnName { get { return "B"; } }
private static string uiSectionRowSeparator_BoxSpawnName { get { return "C"; } }
private static string uiSectionRowSeparator_PropsSpawnName { get { return "D"; } }
private static string uiSectionRowSeparator_ScatterBrushSpawnName { get { return "E"; } }
private static string uiSectionRowSeparator_PhysicsSpawnName { get { return "F"; } }
public static ObjectSpawnUI instance { get { return GSpawn.active.objectSpawnUI; } }
public void onTileRuleSpawnActiveToolIdChanged()
{
refreshToolButtons();
updateVisibility();
}
public void onTileRuleSpawnActiveBrushIdChanged()
{
refreshToolButtons();
}
protected override void onRefresh()
{
refreshSpawnModeButtons();
refreshToolButtons();
refreshToolTips();
updateVisibility();
}
protected override void onBuild()
{
Toolbar modularSpawnToolsToolbar = UI.createToolSelectionToolbar(contentContainer);
modularSpawnToolsToolbar.style.height = UIValues.mediumToolbarButtonSize + 3.0f;
Toolbar otherSpawnToolsToolbar = UI.createToolSelectionToolbar(contentContainer);
otherSpawnToolsToolbar.style.height = UIValues.mediumToolbarButtonSize + 3.0f;
_modularSnapBtn = UI.createToolbarButton(TexturePool.instance.modularSnapSpawn, UI.ButtonStyle.Push, UIValues.mediumToolbarButtonSize, modularSpawnToolsToolbar);
UI.useDefaultMargins(_modularSnapBtn);
_modularSnapBtn.clicked += () => { ObjectSpawn.instance.activeToolId = ObjectSpawnToolId.ModularSnap; SceneViewEx.focus(); };
_modularWallsBtn = UI.createToolbarButton(TexturePool.instance.modularWallSpawn, UI.ButtonStyle.Push, UIValues.mediumToolbarButtonSize, modularSpawnToolsToolbar);
UI.useDefaultMargins(_modularWallsBtn);
_modularWallsBtn.clicked += () => { ObjectSpawn.instance.activeToolId = ObjectSpawnToolId.ModularWalls; SceneViewEx.focus(); };
_segmentsBtn = UI.createToolbarButton(TexturePool.instance.segmentsSpawn, UI.ButtonStyle.Push, UIValues.mediumToolbarButtonSize, modularSpawnToolsToolbar);
UI.useDefaultMargins(_segmentsBtn);
_segmentsBtn.clicked += () => { ObjectSpawn.instance.activeToolId = ObjectSpawnToolId.Segments; SceneViewEx.focus(); };
_boxBtn = UI.createToolbarButton(TexturePool.instance.boxSpawn, UI.ButtonStyle.Push, UIValues.mediumToolbarButtonSize, modularSpawnToolsToolbar);
UI.useDefaultMargins(_boxBtn);
_boxBtn.clicked += () => { ObjectSpawn.instance.activeToolId = ObjectSpawnToolId.Box; SceneViewEx.focus(); };
_tileRulesBtn = UI.createToolbarButton(TexturePool.instance.tileRuleBrushSpawn, UI.ButtonStyle.Push, UIValues.mediumToolbarButtonSize, modularSpawnToolsToolbar);
UI.useDefaultMargins(_tileRulesBtn);
_tileRulesBtn.clicked += () => { ObjectSpawn.instance.activeToolId = ObjectSpawnToolId.TileRules; SceneViewEx.focus(); };
_propsBtn = UI.createToolbarButton(TexturePool.instance.propsSpawn, UI.ButtonStyle.Push, UIValues.mediumToolbarButtonSize, otherSpawnToolsToolbar);
UI.useDefaultMargins(_propsBtn);
_propsBtn.clicked += () => { ObjectSpawn.instance.activeToolId = ObjectSpawnToolId.Props; SceneViewEx.focus(); };
_scatterBrushBtn = UI.createToolbarButton(TexturePool.instance.scatterBrushSpawn, UI.ButtonStyle.Push, UIValues.mediumToolbarButtonSize, otherSpawnToolsToolbar);
UI.useDefaultMargins(_scatterBrushBtn);
_scatterBrushBtn.clicked += () => { ObjectSpawn.instance.activeToolId = ObjectSpawnToolId.ScatterBrush; SceneViewEx.focus(); };
_curveBtn = UI.createToolbarButton(TexturePool.instance.curveSpawn, UI.ButtonStyle.Push, UIValues.mediumToolbarButtonSize, otherSpawnToolsToolbar);
UI.useDefaultMargins(_curveBtn);
_curveBtn.clicked += () => { ObjectSpawn.instance.activeToolId = ObjectSpawnToolId.Curve; SceneViewEx.focus(); };
_physicsBtn = UI.createToolbarButton(TexturePool.instance.physicsSimulation, UI.ButtonStyle.Push, UIValues.mediumToolbarButtonSize, otherSpawnToolsToolbar);
UI.useDefaultMargins(_physicsBtn);
_physicsBtn.clicked += () => { ObjectSpawn.instance.activeToolId = ObjectSpawnToolId.Physics; SceneViewEx.focus(); };
// Create the toolbar for curve spawn gizmo buttons
_curveSpawnGizmoSelectToolbar = UI.createToolSelectionToolbar(contentContainer);
_curveSpawnMoveGimzoBtn = UI.createSmallToolSelectionToolbarButton(TexturePool.instance.moveGizmo, "Move", _curveSpawnGizmoSelectToolbar);
_curveSpawnMoveGimzoBtn.clicked += () =>
{
ObjectSpawn.instance.curveObjectSpawn.activeGizmoId = ObjectSpawnCurveGizmoId.Move;
SceneViewEx.focus();
};
_curveSpawnRotationGizmoBtn = UI.createSmallToolSelectionToolbarButton(TexturePool.instance.rotationGizmo, "Rotate", _curveSpawnGizmoSelectToolbar);
_curveSpawnRotationGizmoBtn.clicked += () =>
{
ObjectSpawn.instance.curveObjectSpawn.activeGizmoId = ObjectSpawnCurveGizmoId.Rotate;
SceneViewEx.focus();
};
_curveSpawnScaleGizmoBtn = UI.createSmallToolSelectionToolbarButton(TexturePool.instance.scaleGizmo, "Scale", _curveSpawnGizmoSelectToolbar);
_curveSpawnScaleGizmoBtn.clicked += () =>
{
ObjectSpawn.instance.curveObjectSpawn.activeGizmoId = ObjectSpawnCurveGizmoId.Scale;
SceneViewEx.focus();
};
// Create the toolbar for the tile rule spawn tool selection buttons
_trSpawnToolSelectToolbar = UI.createToolSelectionToolbar(contentContainer);
_trSpawnPaintBtn = UI.createSmallToolSelectionToolbarButton(TexturePool.instance.brush, "Paint", _trSpawnToolSelectToolbar);
_trSpawnPaintBtn.clicked += () =>
{
ObjectSpawn.instance.tileRuleObjectSpawn.activeToolId = TileRuleSpawnToolId.Paint;
SceneViewEx.focus();
};
_trSpawnRampPaintBtn = UI.createSmallToolSelectionToolbarButton(TexturePool.instance.ramp, "Ramp Paint", _trSpawnToolSelectToolbar);
_trSpawnRampPaintBtn.clicked += () =>
{
ObjectSpawn.instance.tileRuleObjectSpawn.activeToolId = TileRuleSpawnToolId.RampPaint;
SceneViewEx.focus();
};
_trSpawnEraseBtn = UI.createSmallToolSelectionToolbarButton(TexturePool.instance.eraser_gray, "Erase", _trSpawnToolSelectToolbar);
_trSpawnEraseBtn.clicked += () =>
{
ObjectSpawn.instance.tileRuleObjectSpawn.activeToolId = TileRuleSpawnToolId.Erase;
SceneViewEx.focus();
};
_trSpawnConnectBtn = UI.createSmallToolSelectionToolbarButton(TexturePool.instance.tileRuleSpawnConnect, "Connect", _trSpawnToolSelectToolbar);
_trSpawnConnectBtn.clicked += () =>
{
ObjectSpawn.instance.tileRuleObjectSpawn.activeToolId = TileRuleSpawnToolId.Connect;
SceneViewEx.focus();
};
// Create the toolbar for the tile rule spawn brush type selection buttons
_trSpawnBrushSelectToolbar = UI.createToolSelectionToolbar(contentContainer);
_trSpawnBoxBrushBtn = UI.createMediumToolSelectionToolbarButton(TexturePool.instance.tileRuleSpawnBoxBrush, "Box Brush", _trSpawnBrushSelectToolbar);
_trSpawnBoxBrushBtn.clicked += () =>
{
ObjectSpawn.instance.tileRuleObjectSpawn.activeBrushId = TileRuleSpawnBrushId.Box;
SceneViewEx.focus();
};
_trSpawnBoxBrushBtn.style.marginTop = -0.5f;
_trSpawnFlexiBoxBrushBtn = UI.createMediumToolSelectionToolbarButton(TexturePool.instance.tileRuleSpawnFlexiBoxBrush, "Flexi Box Brush", _trSpawnBrushSelectToolbar);
_trSpawnFlexiBoxBrushBtn.clicked += () =>
{
ObjectSpawn.instance.tileRuleObjectSpawn.activeBrushId = TileRuleSpawnBrushId.FlexiBox;
SceneViewEx.focus();
};
_trSpawnFlexiBoxBrushBtn.style.marginTop = -0.5f;
_trSpawnSegmentsBrushBtn = UI.createMediumToolSelectionToolbarButton(TexturePool.instance.tileRuleSpawnSegmentBrush, "Segments Brush", _trSpawnBrushSelectToolbar);
_trSpawnSegmentsBrushBtn.clicked += () =>
{
ObjectSpawn.instance.tileRuleObjectSpawn.activeBrushId = TileRuleSpawnBrushId.Segments;
SceneViewEx.focus();
};
_trSpawnSegmentsBrushBtn.style.marginTop = -0.5f;
// Modular snap spawn
modularSnapSpawnSettingsSection.build("Modular Snap", TexturePool.instance.modularSnapSpawn, true, contentContainer);
ObjectSpawn.instance.modularSnapObjectSpawn.modularSnapSettings.buildUI(modularSnapSpawnSettingsSection.contentContainer);
UI.createUISectionRowSeparator(contentContainer, uiSectionRowSeparator_ModularSnapSpawnName);
modularSnapSpawnGuideSettingsSection.build("Spawn Guide", TexturePool.instance.location, true, contentContainer);
ObjectSpawn.instance.modularSnapObjectSpawn.spawnGuideSettings.buildUI(modularSnapSpawnGuideSettingsSection.contentContainer, ObjectSpawnGuideSettingsUsage.Other);
UI.createUISectionRowSeparator(contentContainer, uiSectionRowSeparator_ModularSnapSpawnName);
modularSnapSpawnMirrorGizmoSettingsSection.build("Mirror Gizmo", TexturePool.instance.mirrorGizmo, true, contentContainer);
UI.createPositionField(PluginGizmo.positionPropertyName, ObjectSpawn.instance.modularSnapObjectSpawn.mirrorGizmo.serializedObject, "Mirror gizmo position", modularSnapSpawnMirrorGizmoSettingsSection.contentContainer);
UI.createRotationField(PluginGizmo.rotationPropertyName, ObjectSpawn.instance.modularSnapObjectSpawn.mirrorGizmo.serializedObject, "Mirror gizmo rotation", modularSnapSpawnMirrorGizmoSettingsSection.contentContainer);
ObjectSpawn.instance.modularSnapObjectSpawn.mirrorGizmoSettings.buildUI(modularSnapSpawnMirrorGizmoSettingsSection.contentContainer);
/*var replicateBtn = createMirrorGizmoSettingsReplicateButton(modularSnapSpawnMirrorGizmoSettingsSection.contentContainer);
replicateBtn.clicked += () =>
{
var srcSettings = ObjectSpawn.instance.modularSnapObjectSpawn.mirrorGizmoSettings;
ObjectSpawn.instance.segmentsObjectSpawn.mirrorGizmoSettings.copy(srcSettings);
ObjectSpawn.instance.boxObjectSpawn.mirrorGizmoSettings.copy(srcSettings);
ObjectSpawn.instance.propsObjectSpawn.mirrorGizmoSettings.copy(srcSettings);
};*/
// Modular walls spawn
ModularWallsObjectSpawnUI.instance.build(contentContainer, PluginInspectorUI.instance.targetEditor);
// Segments spawn
segmentsSpawnModularSnapSettingsSection.build("Modular Snap", TexturePool.instance.modularSnapSpawn, true, contentContainer);
ObjectSpawn.instance.segmentsObjectSpawn.modularSnapSettings.buildUI(segmentsSpawnModularSnapSettingsSection.contentContainer);
UI.createUISectionRowSeparator(contentContainer, uiSectionRowSeparator_SegmentsSpawnName);
segmentsSpawnSettingsProfileSection.build("Segments", TexturePool.instance.segmentsSpawn, true, contentContainer);
SegmentsObjectSpawnSettingsProfileDbUI.instance.build(segmentsSpawnSettingsProfileSection.contentContainer, GSpawn.active.inspectorUI.targetEditor);
UI.createUISectionRowSeparator(contentContainer, uiSectionRowSeparator_SegmentsSpawnName);
segmentsSpawnMirrorGizmoSettingsSection.build("Mirror Gizmo", TexturePool.instance.mirrorGizmo, true, contentContainer);
UI.createPositionField(PluginGizmo.positionPropertyName, ObjectSpawn.instance.segmentsObjectSpawn.mirrorGizmo.serializedObject, "Mirror gizmo position", segmentsSpawnMirrorGizmoSettingsSection.contentContainer);
UI.createRotationField(PluginGizmo.rotationPropertyName, ObjectSpawn.instance.segmentsObjectSpawn.mirrorGizmo.serializedObject, "Mirror gizmo rotation", segmentsSpawnMirrorGizmoSettingsSection.contentContainer);
ObjectSpawn.instance.segmentsObjectSpawn.mirrorGizmoSettings.buildUI(segmentsSpawnMirrorGizmoSettingsSection.contentContainer);
/*replicateBtn = createMirrorGizmoSettingsReplicateButton(segmentsSpawnMirrorGizmoSettingsSection.contentContainer);
replicateBtn.clicked += () =>
{
var srcSettings = ObjectSpawn.instance.segmentsObjectSpawn.mirrorGizmoSettings;
ObjectSpawn.instance.modularSnapObjectSpawn.mirrorGizmoSettings.copy(srcSettings);
ObjectSpawn.instance.boxObjectSpawn.mirrorGizmoSettings.copy(srcSettings);
ObjectSpawn.instance.propsObjectSpawn.mirrorGizmoSettings.copy(srcSettings);
};*/
// Box spawn
boxSpawnModularSnapSettingsSection.build("Modular Snap", TexturePool.instance.modularSnapSpawn, true, contentContainer);
ObjectSpawn.instance.boxObjectSpawn.modularSnapSettings.buildUI(boxSpawnModularSnapSettingsSection.contentContainer);
UI.createUISectionRowSeparator(contentContainer, uiSectionRowSeparator_BoxSpawnName);
boxSpawnSettingsProfileSection.build("Box", TexturePool.instance.boxSpawn, true, contentContainer);
BoxObjectSpawnSettingsProfileDbUI.instance.build(boxSpawnSettingsProfileSection.contentContainer, GSpawn.active.inspectorUI.targetEditor);
UI.createUISectionRowSeparator(contentContainer, uiSectionRowSeparator_BoxSpawnName);
boxSpawnMirrorGizmoSettingsSection.build("Mirror Gizmo", TexturePool.instance.mirrorGizmo, true, contentContainer);
UI.createPositionField(PluginGizmo.positionPropertyName, ObjectSpawn.instance.boxObjectSpawn.mirrorGizmo.serializedObject, "Mirror gizmo position", boxSpawnMirrorGizmoSettingsSection.contentContainer);
UI.createRotationField(PluginGizmo.rotationPropertyName, ObjectSpawn.instance.boxObjectSpawn.mirrorGizmo.serializedObject, "Mirror gizmo rotation", boxSpawnMirrorGizmoSettingsSection.contentContainer);
ObjectSpawn.instance.boxObjectSpawn.mirrorGizmoSettings.buildUI(boxSpawnMirrorGizmoSettingsSection.contentContainer);
/*replicateBtn = createMirrorGizmoSettingsReplicateButton(boxSpawnMirrorGizmoSettingsSection.contentContainer);
replicateBtn.clicked += () =>
{
var srcSettings = ObjectSpawn.instance.boxObjectSpawn.mirrorGizmoSettings;
ObjectSpawn.instance.modularSnapObjectSpawn.mirrorGizmoSettings.copy(srcSettings);
ObjectSpawn.instance.segmentsObjectSpawn.mirrorGizmoSettings.copy(srcSettings);
ObjectSpawn.instance.propsObjectSpawn.mirrorGizmoSettings.copy(srcSettings);
};*/
// Props spawn
propsSpawnSurfaceSnapSettingsSection.build("Surface Snap", TexturePool.instance.objectSurfaceSnap, true, contentContainer);
ObjectSpawn.instance.propsObjectSpawn.surfaceSnapSettings.buildUI(propsSpawnSurfaceSnapSettingsSection.contentContainer);
UI.createUISectionRowSeparator(contentContainer, uiSectionRowSeparator_PropsSpawnName);
propsSpawnDragSpawnSettingsSection.build("Drag Spawn", TexturePool.instance.dragArrow, true, contentContainer);
ObjectSpawn.instance.propsObjectSpawn.dragSpawnSettings.buildUI(propsSpawnDragSpawnSettingsSection.contentContainer);
UI.createUISectionRowSeparator(contentContainer, uiSectionRowSeparator_PropsSpawnName);
propsSpawnTerrainFlattenSettingsSection.build("Terrain Flatten", TexturePool.instance.terrainFlatten, true, contentContainer);
ObjectSpawn.instance.propsObjectSpawn.terrainFlattenSettings.buildUI(propsSpawnTerrainFlattenSettingsSection.contentContainer);
UI.createUISectionRowSeparator(contentContainer, uiSectionRowSeparator_PropsSpawnName);
propsSpawnGuideSettingsSection.build("Spawn Guide", TexturePool.instance.location, true, contentContainer);
ObjectSpawn.instance.propsObjectSpawn.spawnGuideSettings.buildUI(propsSpawnGuideSettingsSection.contentContainer, ObjectSpawnGuideSettingsUsage.PropsSpawn);
UI.createUISectionRowSeparator(contentContainer, uiSectionRowSeparator_PropsSpawnName);
propsSpawnMirrorGizmoSettingsSection.build("Mirror Gizmo", TexturePool.instance.mirrorGizmo, true, contentContainer);
UI.createPositionField(PluginGizmo.positionPropertyName, ObjectSpawn.instance.propsObjectSpawn.mirrorGizmo.serializedObject, "Mirror gizmo position", propsSpawnMirrorGizmoSettingsSection.contentContainer);
UI.createRotationField(PluginGizmo.rotationPropertyName, ObjectSpawn.instance.propsObjectSpawn.mirrorGizmo.serializedObject, "Mirror gizmo rotation", propsSpawnMirrorGizmoSettingsSection.contentContainer);
ObjectSpawn.instance.propsObjectSpawn.mirrorGizmoSettings.buildUI(propsSpawnMirrorGizmoSettingsSection.contentContainer);
/*replicateBtn = createMirrorGizmoSettingsReplicateButton(propsSpawnMirrorGizmoSettingsSection.contentContainer);
replicateBtn.clicked += () =>
{
var srcSettings = ObjectSpawn.instance.propsObjectSpawn.mirrorGizmoSettings;
ObjectSpawn.instance.modularSnapObjectSpawn.mirrorGizmoSettings.copy(srcSettings);
ObjectSpawn.instance.segmentsObjectSpawn.mirrorGizmoSettings.copy(srcSettings);
ObjectSpawn.instance.boxObjectSpawn.mirrorGizmoSettings.copy(srcSettings);
};*/
// Scatter brush spawn
scatterBrushSpawnSettingsSection.build("Scatter Brush", TexturePool.instance.scatterBrushSpawn, true, contentContainer);
ObjectSpawn.instance.scatterBrushObjectSpawn.settings.buildUI(scatterBrushSpawnSettingsSection.contentContainer);
// Tile rule brush spawn
TileRuleObjectSpawnUI.instance.build(contentContainer, PluginInspectorUI.instance.targetEditor);
// Curve spawn
CurveObjectSpawnUI.instance.build(contentContainer, PluginInspectorUI.instance.targetEditor);
// Physics spawn
physicsSimulationSettingsSection.build("Physics", TexturePool.instance.physicsSimulation, true, contentContainer);
ObjectSpawn.instance.physicsObjectSpawn.settings.buildUI(physicsSimulationSettingsSection.contentContainer);
var stopSimluBtn = new Button();
physicsSimulationSettingsSection.contentContainer.Add(stopSimluBtn);
stopSimluBtn.style.width = UIValues.useDefaultsButtonWidth;
stopSimluBtn.text = "Stop simulation";
stopSimluBtn.tooltip = "Stop the physics simulation.";
stopSimluBtn.clicked += () => { PhysicsSimulation.instance.stop(); };
refreshSpawnModeButtons();
refreshToolButtons();
refreshToolTips();
updateVisibility();
}
private Button createMirrorGizmoSettingsReplicateButton(VisualElement parent)
{
var btn = new Button();
btn.text = "Replicate";
btn.tooltip = "Replicates the settings across all mirror gizmo settings associated with different spawn modes (except Tile Rule Spawn). Note: " +
"Mirror gizmo position and rotation are not affected.";
btn.style.width = UIValues.useDefaultsButtonWidth;
parent.Add(btn);
return btn;
}
private void refreshSpawnModeButtons()
{
_modularSnapBtn.tooltip = "Modular Snap";
_modularSnapBtn.style.backgroundColor = UIValues.inactiveButtonColor;
_modularWallsBtn.tooltip = "Modular Walls";
_modularWallsBtn.style.backgroundColor = UIValues.inactiveButtonColor;
_segmentsBtn.tooltip = "Segments";
_segmentsBtn.style.backgroundColor = UIValues.inactiveButtonColor;
_boxBtn.tooltip = "Box";
_boxBtn.style.backgroundColor = UIValues.inactiveButtonColor;
_propsBtn.tooltip = "Props";
_propsBtn.style.backgroundColor = UIValues.inactiveButtonColor;
_scatterBrushBtn.tooltip = "Scatter Brush";
_scatterBrushBtn.style.backgroundColor = UIValues.inactiveButtonColor;
_tileRulesBtn.tooltip = "Tile Rules";
_tileRulesBtn.style.backgroundColor = UIValues.inactiveButtonColor;
_curveBtn.tooltip = "Curve";
_curveBtn.style.backgroundColor = UIValues.inactiveButtonColor;
_physicsBtn.tooltip = "Physics";
_physicsBtn.style.backgroundColor = UIValues.inactiveButtonColor;
var objectSpawnToolId = ObjectSpawn.instance.activeToolId;
if (objectSpawnToolId == ObjectSpawnToolId.ModularSnap) _modularSnapBtn.style.backgroundColor = UIValues.activeButtonColor;
else if (objectSpawnToolId == ObjectSpawnToolId.ModularWalls) _modularWallsBtn.style.backgroundColor = UIValues.activeButtonColor;
else if (objectSpawnToolId == ObjectSpawnToolId.Segments) _segmentsBtn.style.backgroundColor = UIValues.activeButtonColor;
else if (objectSpawnToolId == ObjectSpawnToolId.Box) _boxBtn.style.backgroundColor = UIValues.activeButtonColor;
else if (objectSpawnToolId == ObjectSpawnToolId.Props) _propsBtn.style.backgroundColor = UIValues.activeButtonColor;
else if (objectSpawnToolId == ObjectSpawnToolId.ScatterBrush) _scatterBrushBtn.style.backgroundColor = UIValues.activeButtonColor;
else if (objectSpawnToolId == ObjectSpawnToolId.TileRules) _tileRulesBtn.style.backgroundColor = UIValues.activeButtonColor;
else if (objectSpawnToolId == ObjectSpawnToolId.Curve) _curveBtn.style.backgroundColor = UIValues.activeButtonColor;
else if (objectSpawnToolId == ObjectSpawnToolId.Physics) _physicsBtn.style.backgroundColor = UIValues.activeButtonColor;
}
private void refreshToolTips()
{
ObjectSpawn.instance.tileRuleObjectSpawn.settings.refreshTooltips();
}
private void refreshToolButtons()
{
if (ObjectSpawn.instance.activeToolId == ObjectSpawnToolId.TileRules)
{
_trSpawnPaintBtn.tooltip = "Paint" + ShortcutProfileDb.instance.activeProfile.getShortcutUITooltip(ObjectSpawnShortcutNames.tileRuleSpawn_Paint);
_trSpawnPaintBtn.style.unityBackgroundImageTintColor = UIValues.inactiveButtonTintColor;
_trSpawnRampPaintBtn.tooltip = "Ramp Paint" + ShortcutProfileDb.instance.activeProfile.getShortcutUITooltip(ObjectSpawnShortcutNames.tileRuleSpawn_Ramp);
_trSpawnRampPaintBtn.style.unityBackgroundImageTintColor = UIValues.inactiveButtonTintColor;
_trSpawnEraseBtn.tooltip = "Erase" + ShortcutProfileDb.instance.activeProfile.getShortcutUITooltip(ObjectSpawnShortcutNames.tileRuleSpawn_Erase);
_trSpawnEraseBtn.style.unityBackgroundImageTintColor = UIValues.inactiveButtonTintColor;
_trSpawnConnectBtn.tooltip = "Connect" + ShortcutProfileDb.instance.activeProfile.getShortcutUITooltip(ObjectSpawnShortcutNames.tileRuleSpawn_Connect);
_trSpawnConnectBtn.style.unityBackgroundImageTintColor = UIValues.inactiveButtonTintColor;
var activeToolId = ObjectSpawn.instance.tileRuleObjectSpawn.activeToolId;
if (activeToolId == TileRuleSpawnToolId.Paint) _trSpawnPaintBtn.style.unityBackgroundImageTintColor = UIValues.activeButtonColor;
else if (activeToolId == TileRuleSpawnToolId.RampPaint) _trSpawnRampPaintBtn.style.unityBackgroundImageTintColor = UIValues.activeButtonColor;
else if (activeToolId == TileRuleSpawnToolId.Erase) _trSpawnEraseBtn.style.unityBackgroundImageTintColor = UIValues.activeButtonColor;
else if (activeToolId == TileRuleSpawnToolId.Connect) _trSpawnConnectBtn.style.unityBackgroundImageTintColor = UIValues.activeButtonColor;
_trSpawnBoxBrushBtn.tooltip = "Box Brush" + ShortcutProfileDb.instance.activeProfile.getShortcutUITooltip(ObjectSpawnShortcutNames.tileRuleSpawn_BoxBrush);
_trSpawnBoxBrushBtn.style.unityBackgroundImageTintColor = UIValues.inactiveButtonTintColor;
_trSpawnFlexiBoxBrushBtn.tooltip = "Flexi Box Brush" + ShortcutProfileDb.instance.activeProfile.getShortcutUITooltip(ObjectSpawnShortcutNames.tileRuleSpawn_FlexiBoxBrush);
_trSpawnFlexiBoxBrushBtn.style.unityBackgroundImageTintColor = UIValues.inactiveButtonTintColor;
_trSpawnSegmentsBrushBtn.tooltip = "Segments Brush" + ShortcutProfileDb.instance.activeProfile.getShortcutUITooltip(ObjectSpawnShortcutNames.tileRuleSpawn_SegmentsBrush);
_trSpawnSegmentsBrushBtn.style.unityBackgroundImageTintColor = UIValues.inactiveButtonTintColor;
var activeBrushId = ObjectSpawn.instance.tileRuleObjectSpawn.activeBrushId;
if (activeBrushId == TileRuleSpawnBrushId.Box) _trSpawnBoxBrushBtn.style.unityBackgroundImageTintColor = UIValues.activeButtonColor;
else if (activeBrushId == TileRuleSpawnBrushId.FlexiBox) _trSpawnFlexiBoxBrushBtn.style.unityBackgroundImageTintColor = UIValues.activeButtonColor;
else if (activeBrushId == TileRuleSpawnBrushId.Segments) _trSpawnSegmentsBrushBtn.style.unityBackgroundImageTintColor = UIValues.activeButtonColor;
}
else if (ObjectSpawn.instance.activeToolId == ObjectSpawnToolId.Curve)
{
_curveSpawnMoveGimzoBtn.tooltip = "Move" + ShortcutProfileDb.instance.activeProfile.getShortcutUITooltip(ObjectSpawnShortcutNames.curveSpawn_MoveGizmo);
_curveSpawnMoveGimzoBtn.style.unityBackgroundImageTintColor = UIValues.inactiveButtonTintColor;
_curveSpawnRotationGizmoBtn.tooltip = "Rotate" + ShortcutProfileDb.instance.activeProfile.getShortcutUITooltip(ObjectSpawnShortcutNames.curveSpawn_RotationGizmo);
_curveSpawnRotationGizmoBtn.style.unityBackgroundImageTintColor = UIValues.inactiveButtonTintColor;
_curveSpawnScaleGizmoBtn.tooltip = "Scale" + ShortcutProfileDb.instance.activeProfile.getShortcutUITooltip(ObjectSpawnShortcutNames.curveSpawn_ScaleGizmo);
_curveSpawnScaleGizmoBtn.style.unityBackgroundImageTintColor = UIValues.inactiveButtonTintColor;
var actveGizmoId = ObjectSpawn.instance.curveObjectSpawn.activeGizmoId;
if (actveGizmoId == ObjectSpawnCurveGizmoId.Move) _curveSpawnMoveGimzoBtn.style.unityBackgroundImageTintColor = UIValues.activeButtonColor;
else if (actveGizmoId == ObjectSpawnCurveGizmoId.Rotate) _curveSpawnRotationGizmoBtn.style.unityBackgroundImageTintColor = UIValues.activeButtonColor;
else if (actveGizmoId == ObjectSpawnCurveGizmoId.Scale) _curveSpawnScaleGizmoBtn.style.unityBackgroundImageTintColor = UIValues.activeButtonColor;
}
}
private void updateVisibility()
{
var objectSpawnToolId = ObjectSpawn.instance.activeToolId;
bool visible = (objectSpawnToolId == ObjectSpawnToolId.ModularSnap);
contentContainer.setChildrenDisplayVisible(uiSectionRowSeparator_ModularSnapSpawnName, visible);
modularSnapSpawnSettingsSection.setVisible(visible);
modularSnapSpawnGuideSettingsSection.setVisible(visible);
modularSnapSpawnMirrorGizmoSettingsSection.setVisible(visible);
visible = (objectSpawnToolId == ObjectSpawnToolId.ModularWalls);
ModularWallsObjectSpawnUI.instance.setVisible(visible);
visible = (objectSpawnToolId == ObjectSpawnToolId.Segments);
contentContainer.setChildrenDisplayVisible(uiSectionRowSeparator_SegmentsSpawnName, visible);
segmentsSpawnModularSnapSettingsSection.setVisible(visible);
segmentsSpawnSettingsProfileSection.setVisible(visible);
segmentsSpawnMirrorGizmoSettingsSection.setVisible(visible);
visible = (objectSpawnToolId == ObjectSpawnToolId.Box);
contentContainer.setChildrenDisplayVisible(uiSectionRowSeparator_BoxSpawnName, visible);
boxSpawnModularSnapSettingsSection.setVisible(visible);
boxSpawnSettingsProfileSection.setVisible(visible);
boxSpawnMirrorGizmoSettingsSection.setVisible(visible);
visible = (objectSpawnToolId == ObjectSpawnToolId.Props);
contentContainer.setChildrenDisplayVisible(uiSectionRowSeparator_PropsSpawnName, visible);
propsSpawnSurfaceSnapSettingsSection.setVisible(visible);
propsSpawnDragSpawnSettingsSection.setVisible(visible);
propsSpawnTerrainFlattenSettingsSection.setVisible(visible);
propsSpawnGuideSettingsSection.setVisible(visible);
propsSpawnMirrorGizmoSettingsSection.setVisible(visible);
visible = (objectSpawnToolId == ObjectSpawnToolId.TileRules);
_trSpawnToolSelectToolbar.setDisplayVisible(visible);
_trSpawnBrushSelectToolbar.setDisplayVisible(visible);
TileRuleObjectSpawnUI.instance.setVisible(visible);
visible = (objectSpawnToolId == ObjectSpawnToolId.ScatterBrush);
contentContainer.setChildrenDisplayVisible(uiSectionRowSeparator_ScatterBrushSpawnName, visible);
scatterBrushSpawnSettingsSection.setVisible(visible);
visible = (objectSpawnToolId == ObjectSpawnToolId.Curve);
_curveSpawnGizmoSelectToolbar.setDisplayVisible(visible);
CurveObjectSpawnUI.instance.setVisible(visible);
visible = (objectSpawnToolId == ObjectSpawnToolId.Physics);
contentContainer.setChildrenDisplayVisible(uiSectionRowSeparator_PhysicsSpawnName, visible);
physicsSimulationSettingsSection.setVisible(visible);
if (ObjectSpawn.instance.activeToolId == ObjectSpawnToolId.TileRules)
{
var activeToolId = ObjectSpawn.instance.tileRuleObjectSpawn.activeToolId;
if (activeToolId == TileRuleSpawnToolId.Connect || activeToolId == TileRuleSpawnToolId.RampPaint) _trSpawnBrushSelectToolbar.setDisplayVisible(false);
else _trSpawnBrushSelectToolbar.setDisplayVisible(true);
}
}
protected override void onDestroy()
{
ScriptableObjectEx.destroyImmediate(_modularSnapSpawnSettingsSection);
ScriptableObjectEx.destroyImmediate(_modularSnapSpawnGuideSettingsSection);
ScriptableObjectEx.destroyImmediate(_modularSnapSpawnMirrorGizmoSettingsSection);
ScriptableObjectEx.destroyImmediate(_segmentsSpawnModularSnapSettingsSection);
ScriptableObjectEx.destroyImmediate(_segmentsSpawnSettingsProfileSection);
ScriptableObjectEx.destroyImmediate(_segmentsSpawnMirrorGizmoSettingsSection);
ScriptableObjectEx.destroyImmediate(_boxSpawnModularSnapSettingsSection);
ScriptableObjectEx.destroyImmediate(_boxSpawnSettingsProfileSection);
ScriptableObjectEx.destroyImmediate(_boxSpawnMirrorGizmoSettingsSection);
ScriptableObjectEx.destroyImmediate(_propsSpawnSurfaceSnapSettingsSection);
ScriptableObjectEx.destroyImmediate(_propsSpawnDragSpawnSettingsSection);
ScriptableObjectEx.destroyImmediate(_propsSpawnTerrainFlattenSettingsSection);
ScriptableObjectEx.destroyImmediate(_propsSpawnGuideSettingsSection);
ScriptableObjectEx.destroyImmediate(_propsSpawnMirrorGizmoSettingsSection);
ScriptableObjectEx.destroyImmediate(_scatterBrushSpawnSettingsSection);
ScriptableObjectEx.destroyImmediate(_physicsSimulationSettingsSection);
}
}
}
#endif