192 lines
8.8 KiB
C#
192 lines
8.8 KiB
C#
#if UNITY_EDITOR
|
|
using UnityEngine;
|
|
using UnityEditor;
|
|
using System;
|
|
|
|
namespace GSpawn
|
|
{
|
|
public class ObjectSpawn : ScriptableObject
|
|
{
|
|
[SerializeField]
|
|
private ObjectSpawnToolId _activeToolId = ObjectSpawnToolId.ModularSnap;
|
|
|
|
// Note: Maps to ObjectSpawnToolId
|
|
[SerializeField]
|
|
private ObjectSpawnTool[] _tools = new ObjectSpawnTool[Enum.GetValues(typeof(ObjectSpawnToolId)).Length];
|
|
|
|
public bool isSpawnGuideTransformSessionActive { get { return activeTool.isSpawnGuidePresentInScene; } }
|
|
public bool isSpawnGuidePresentInScene { get { return activeTool.isSpawnGuidePresentInScene; } }
|
|
public bool isMirrorGizmoEnabled { get { return activeTool.mirrorGizmo != null && activeTool.mirrorGizmo.enabled; } }
|
|
|
|
public ObjectMirrorGizmo mirrorGizmo { get { return activeTool.mirrorGizmo; } }
|
|
public ModularSnapObjectSpawn modularSnapObjectSpawn { get { return _tools[(int)ObjectSpawnToolId.ModularSnap] as ModularSnapObjectSpawn; } }
|
|
public ModularWallsObjectSpawn modularWallObjectSpawn { get { return _tools[(int)ObjectSpawnToolId.ModularWalls] as ModularWallsObjectSpawn;} }
|
|
public SegmentsObjectSpawn segmentsObjectSpawn { get { return _tools[(int)ObjectSpawnToolId.Segments] as SegmentsObjectSpawn; } }
|
|
public BoxObjectSpawn boxObjectSpawn { get { return _tools[(int)ObjectSpawnToolId.Box] as BoxObjectSpawn; } }
|
|
public PropsObjectSpawn propsObjectSpawn { get { return _tools[(int)ObjectSpawnToolId.Props] as PropsObjectSpawn; } }
|
|
public ScatterBrushObjectSpawn scatterBrushObjectSpawn { get { return _tools[(int)ObjectSpawnToolId.ScatterBrush] as ScatterBrushObjectSpawn; } }
|
|
public TileRuleObjectSpawn tileRuleObjectSpawn { get { return _tools[(int)ObjectSpawnToolId.TileRules] as TileRuleObjectSpawn; } }
|
|
public CurveObjectSpawn curveObjectSpawn { get { return _tools[(int)ObjectSpawnToolId.Curve] as CurveObjectSpawn; } }
|
|
public PhysicsObjectSpawn physicsObjectSpawn { get { return _tools[(int)ObjectSpawnToolId.Physics] as PhysicsObjectSpawn; } }
|
|
public ObjectSpawnGuide spawnGuide { get { return activeTool.spawnGuide; } }
|
|
public ObjectSpawnTool activeTool { get { return _tools[(int)activeToolId]; } }
|
|
public ObjectSpawnToolId activeToolId
|
|
{
|
|
get { return _activeToolId; }
|
|
set
|
|
{
|
|
if (value != _activeToolId)
|
|
{
|
|
PluginPrefab spawnGuidePrefab = activeTool.spawnGuidePrefab;
|
|
activeTool.onNoLongerActive();
|
|
_activeToolId = value;
|
|
|
|
if (activeTool.requiresSpawnGuide && spawnGuidePrefab != null)
|
|
activeTool.setSpawnGuidePrefab(spawnGuidePrefab);
|
|
|
|
PluginInspectorUI.instance.refresh();
|
|
SceneView.RepaintAll();
|
|
}
|
|
}
|
|
}
|
|
|
|
public static ObjectSpawn instance { get { return GSpawn.active.objectSpawn; } }
|
|
|
|
public void onSceneGUI()
|
|
{
|
|
activeTool.onSceneGUI();
|
|
}
|
|
|
|
public void setMirrorGizmoEnabled(bool enabled)
|
|
{
|
|
var mirrorGizmo = activeTool.mirrorGizmo;
|
|
if (mirrorGizmo != null) mirrorGizmo.enabled = enabled;
|
|
}
|
|
|
|
public void snapMirrorGizmoToView(bool enableGizmo)
|
|
{
|
|
var mirrorGizmo = activeTool.mirrorGizmo;
|
|
if (mirrorGizmo != null)
|
|
{
|
|
if (enableGizmo && !mirrorGizmo.enabled) mirrorGizmo.enabled = true;
|
|
if (mirrorGizmo.enabled) mirrorGizmo.snapToView();
|
|
}
|
|
}
|
|
|
|
public void usePrefab(PluginPrefab prefab)
|
|
{
|
|
activeTool.setSpawnGuidePrefab(prefab);
|
|
}
|
|
|
|
public void onLevelDesignToolChanged()
|
|
{
|
|
if (GSpawn.active.levelDesignToolId != LevelDesignToolId.ObjectSpawn)
|
|
activeTool.onNoLongerActive();
|
|
}
|
|
|
|
public void executeModularSnapSessionCommand(ObjectModularSnapSessionCommand command)
|
|
{
|
|
if (_activeToolId == ObjectSpawnToolId.ModularSnap) modularSnapObjectSpawn.executeModularSnapSessionCommand(command);
|
|
else if (activeToolId == ObjectSpawnToolId.ModularWalls) modularWallObjectSpawn.executeModularSnapSessionCommand(command);
|
|
else if (_activeToolId == ObjectSpawnToolId.Box) boxObjectSpawn.executeModularSnapSessionCommand(command);
|
|
else if (_activeToolId == ObjectSpawnToolId.Segments) segmentsObjectSpawn.executeModularSnapSessionCommand(command);
|
|
}
|
|
|
|
public void executeSurfaceSnapSessionCommand(ObjectSurfaceSnapSessionCommand command)
|
|
{
|
|
if (_activeToolId == ObjectSpawnToolId.Props)
|
|
propsObjectSpawn.executeSurfaceSnapSessionCommand(command);
|
|
}
|
|
|
|
public void matchGridCellSizeToSpawnGuideSize()
|
|
{
|
|
if (!activeTool.requiresSpawnGuide) return;
|
|
|
|
OBB spawnGuideOBB = activeTool.calcSpawnGuideWorldOBB();
|
|
PluginScene.instance.grid.matchCellSizeToOBBSize(spawnGuideOBB);
|
|
}
|
|
|
|
public OBB calcSpawnGuideWorldOBB()
|
|
{
|
|
return activeTool.calcSpawnGuideWorldOBB();
|
|
}
|
|
|
|
public void resetSpawnGuideRotationToOriginal()
|
|
{
|
|
activeTool.resetSpawnGuideRotationToOriginal();
|
|
}
|
|
|
|
public void resetSpawnGuideScaleToOriginal()
|
|
{
|
|
activeTool.resetSpawnGuideScaleToOriginal();
|
|
}
|
|
|
|
public void rotateSpawnGuide(Vector3 axis, float degrees)
|
|
{
|
|
activeTool.rotateSpawnGuide(axis, degrees);
|
|
}
|
|
|
|
public void rotateSpawnGuide(Vector3 point, Vector3 axis, float degrees)
|
|
{
|
|
activeTool.rotateSpawnGuide(point, axis, degrees);
|
|
}
|
|
|
|
public void setSpawnGuideRotation(Quaternion rotation)
|
|
{
|
|
activeTool.setSpawnGuideRotation(rotation);
|
|
}
|
|
|
|
private void OnEnable()
|
|
{
|
|
int numSpawnTools = Enum.GetValues(typeof(ObjectSpawnToolId)).Length;
|
|
if (_tools.Length != numSpawnTools)
|
|
{
|
|
for (int i = 0; i < _tools.Length; ++i)
|
|
{
|
|
ScriptableObjectEx.destroyImmediate(_tools[i]);
|
|
_tools[i] = null;
|
|
}
|
|
|
|
_tools = new ObjectSpawnTool[numSpawnTools];
|
|
}
|
|
|
|
if (_tools[(int)ObjectSpawnToolId.ModularSnap] == null)
|
|
_tools[(int)ObjectSpawnToolId.ModularSnap] = ScriptableObject.CreateInstance<ModularSnapObjectSpawn>();
|
|
|
|
if (_tools[(int)ObjectSpawnToolId.ModularWalls] == null)
|
|
_tools[(int)ObjectSpawnToolId.ModularWalls] = ScriptableObject.CreateInstance<ModularWallsObjectSpawn>();
|
|
|
|
if (_tools[(int)ObjectSpawnToolId.Segments] == null)
|
|
_tools[(int)ObjectSpawnToolId.Segments] = ScriptableObject.CreateInstance<SegmentsObjectSpawn>();
|
|
|
|
if (_tools[(int)ObjectSpawnToolId.Box] == null)
|
|
_tools[(int)ObjectSpawnToolId.Box] = ScriptableObject.CreateInstance<BoxObjectSpawn>();
|
|
|
|
if (_tools[(int)ObjectSpawnToolId.Props] == null)
|
|
_tools[(int)ObjectSpawnToolId.Props] = ScriptableObject.CreateInstance<PropsObjectSpawn>();
|
|
|
|
if (_tools[(int)ObjectSpawnToolId.ScatterBrush] == null)
|
|
_tools[(int)ObjectSpawnToolId.ScatterBrush] = ScriptableObject.CreateInstance<ScatterBrushObjectSpawn>();
|
|
|
|
if (_tools[(int)ObjectSpawnToolId.TileRules] == null)
|
|
_tools[(int)ObjectSpawnToolId.TileRules] = ScriptableObject.CreateInstance<TileRuleObjectSpawn>();
|
|
|
|
if (_tools[(int)ObjectSpawnToolId.Curve] == null)
|
|
_tools[(int)ObjectSpawnToolId.Curve] = ScriptableObject.CreateInstance<CurveObjectSpawn>();
|
|
|
|
if (_tools[(int)ObjectSpawnToolId.Physics] == null)
|
|
_tools[(int)ObjectSpawnToolId.Physics] = ScriptableObject.CreateInstance<PhysicsObjectSpawn>();
|
|
}
|
|
|
|
private void OnDestroy()
|
|
{
|
|
int numTools = _tools.Length;
|
|
for (int i = 0; i < numTools; ++i)
|
|
{
|
|
ScriptableObjectEx.destroyImmediate(_tools[i]);
|
|
_tools[i] = null;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
#endif |