整理武器配置和重构
This commit is contained in:
@@ -0,0 +1,17 @@
|
||||
using SepCore.Definition;
|
||||
|
||||
namespace SepCore.Entity
|
||||
{
|
||||
/// <summary>
|
||||
/// 武器状态基类。
|
||||
/// </summary>
|
||||
public abstract class WeaponStateBase
|
||||
{
|
||||
public abstract WeaponStateType State { get; }
|
||||
public abstract void OnInit(WeaponBase weapon);
|
||||
public abstract void OnEnter();
|
||||
public abstract void OnUpdate(float elapseSeconds, float realElapseSeconds);
|
||||
public abstract void OnLeave();
|
||||
public override string ToString() => State.ToString();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 64f43677dac08f744848382cab8588fb
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,52 @@
|
||||
using System.Collections.Generic;
|
||||
using SepCore.Definition;
|
||||
|
||||
namespace SepCore.Entity
|
||||
{
|
||||
/// <summary>
|
||||
/// 武器状态机。负责状态注册、切换与驱动。
|
||||
/// </summary>
|
||||
public class WeaponStateMachine
|
||||
{
|
||||
private readonly WeaponBase _weapon;
|
||||
private readonly Dictionary<WeaponStateType, WeaponStateBase> _states = new();
|
||||
|
||||
private WeaponStateBase _currentState;
|
||||
|
||||
public WeaponStateMachine(WeaponBase weapon)
|
||||
{
|
||||
_weapon = weapon;
|
||||
}
|
||||
|
||||
public bool IsBuilt => _states.Count > 0;
|
||||
|
||||
public bool Contains(WeaponStateType stateType)
|
||||
{
|
||||
return _states.ContainsKey(stateType);
|
||||
}
|
||||
|
||||
public void Register(WeaponStateBase state)
|
||||
{
|
||||
state.OnInit(_weapon);
|
||||
_states[state.State] = state;
|
||||
}
|
||||
|
||||
public void Update(float elapseSeconds, float realElapseSeconds)
|
||||
{
|
||||
_currentState?.OnUpdate(elapseSeconds, realElapseSeconds);
|
||||
}
|
||||
|
||||
public bool TryTransition(WeaponStateType stateType)
|
||||
{
|
||||
if (!_states.TryGetValue(stateType, out WeaponStateBase nextState))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
_currentState?.OnLeave();
|
||||
_currentState = nextState;
|
||||
_currentState.OnEnter();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: d29897e3011246748bb0c939e54a0ca5
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Reference in New Issue
Block a user