62 lines
1.5 KiB
C#
62 lines
1.5 KiB
C#
using System;
|
|
using UnityEngine;
|
|
|
|
namespace UnityEditor.ProBuilder
|
|
{
|
|
[Serializable]
|
|
abstract class ShapeState
|
|
{
|
|
public static ShapeState s_defaultState;
|
|
public ShapeState m_nextState = null;
|
|
public static DrawShapeTool tool;
|
|
|
|
public static ShapeState StartStateMachine()
|
|
{
|
|
if(tool == null)
|
|
{
|
|
Debug.LogError("Cannot start FSM, no tool associated to the FSM");
|
|
return null;
|
|
}
|
|
else if(s_defaultState == null)
|
|
{
|
|
Debug.LogError("Cannot start FSM, default state has not be set");
|
|
return null;
|
|
}
|
|
|
|
s_defaultState.InitState();
|
|
return s_defaultState;
|
|
}
|
|
|
|
protected virtual void InitState()
|
|
{
|
|
}
|
|
|
|
public abstract ShapeState DoState(Event evt);
|
|
|
|
protected virtual void EndState()
|
|
{
|
|
}
|
|
|
|
protected virtual ShapeState NextState()
|
|
{
|
|
EndState();
|
|
if(m_nextState == null)
|
|
return ResetState();
|
|
|
|
m_nextState.InitState();
|
|
SceneView.RepaintAll();
|
|
return m_nextState;
|
|
}
|
|
|
|
public static ShapeState ResetState()
|
|
{
|
|
if (tool.m_ProBuilderShape != null)
|
|
UnityEngine.Object.DestroyImmediate(tool.m_ProBuilderShape.gameObject);
|
|
|
|
s_defaultState.InitState();
|
|
SceneView.RepaintAll();
|
|
return s_defaultState;
|
|
}
|
|
}
|
|
}
|