1
This commit is contained in:
74
Assets/BITKit/Unity/Scripts/Mono/StateBasedMonoBehaviour.cs
Normal file
74
Assets/BITKit/Unity/Scripts/Mono/StateBasedMonoBehaviour.cs
Normal file
@@ -0,0 +1,74 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using BITKit.StateMachine;
|
||||
using UnityEngine;
|
||||
|
||||
namespace BITKit
|
||||
{
|
||||
public abstract class StateBasedMonoBehaviour<T> : MonoBehaviour, IStateMachine<T> where T : IState
|
||||
{
|
||||
[SerializeField] private MonoStateMachine<T> stateMachine;
|
||||
protected Transform Transform => _transform ? _transform : _transform = transform;
|
||||
private Transform _transform;
|
||||
public bool Enabled
|
||||
{
|
||||
get => stateMachine.Enabled;
|
||||
set => stateMachine.Enabled = value;
|
||||
}
|
||||
|
||||
public T CurrentState
|
||||
{
|
||||
get => stateMachine.CurrentState;
|
||||
set => stateMachine.CurrentState = value;
|
||||
}
|
||||
|
||||
public event Action<T, T> OnStateChanged
|
||||
{
|
||||
add => stateMachine.OnStateChanged += value;
|
||||
remove => stateMachine.OnStateChanged -= value;
|
||||
}
|
||||
|
||||
public event Action<T> OnStateRegistered;
|
||||
public event Action<T> OnStateUnRegistered;
|
||||
|
||||
public IDictionary<Type, T> StateDictionary => stateMachine.StateDictionary;
|
||||
|
||||
public virtual void Initialize()
|
||||
{
|
||||
stateMachine.Initialize();
|
||||
}
|
||||
|
||||
public virtual void UpdateState(float deltaTime)
|
||||
{
|
||||
stateMachine.UpdateState(deltaTime);
|
||||
}
|
||||
|
||||
public virtual void DisposeState()
|
||||
{
|
||||
stateMachine.DisposeState();
|
||||
}
|
||||
|
||||
public virtual void TransitionState<State>() where State : T
|
||||
{
|
||||
stateMachine.TransitionState<State>();
|
||||
}
|
||||
|
||||
public virtual void TransitionState(T state)
|
||||
{
|
||||
stateMachine.TransitionState(state);
|
||||
}
|
||||
|
||||
public virtual void Register(T newState) => StateMachineUtils.Register(this,newState);
|
||||
public virtual void UnRegister(T newState)=>StateMachineUtils.UnRegister(this,newState);
|
||||
void IStateMachine<T>.InvokeOnStateRegistered(T state)
|
||||
{
|
||||
OnStateRegistered?.Invoke(state);
|
||||
}
|
||||
|
||||
void IStateMachine<T>.InvokeOnStateUnRegistered(T state)
|
||||
{
|
||||
OnStateUnRegistered?.Invoke(state);
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user