Colin McMillen
4 years ago
3 changed files with 88 additions and 15 deletions
@ -0,0 +1,40 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
|
|||
namespace SemiColinGames { |
|||
public interface IState { |
|||
public void Enter(); |
|||
public string? Update(NPC npc, float modelTime, AABB[] collisionTargets); |
|||
} |
|||
|
|||
public class FSM { |
|||
float timeInState = 0f; |
|||
Dictionary<string, IState> states; |
|||
IState state; |
|||
|
|||
public FSM(Dictionary<string, IState> states, string initial) { |
|||
this.states = states; |
|||
StateName = initial; |
|||
Transition(StateName); |
|||
} |
|||
|
|||
public string StateName { get; private set; } |
|||
|
|||
public void Update(NPC npc, float modelTime, AABB[] collisionTargets) { |
|||
timeInState += modelTime; |
|||
string? newState = state.Update(npc, modelTime, collisionTargets); |
|||
if (newState != null) { |
|||
Transition(newState); |
|||
} |
|||
} |
|||
|
|||
void Transition(string state) { |
|||
Debug.WriteLine("{0} -> {1} @ {2}", StateName, state, timeInState); |
|||
timeInState = 0f; |
|||
StateName = state; |
|||
IState newState = states[state]; |
|||
this.state = newState; |
|||
this.state.Enter(); |
|||
} |
|||
} |
|||
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue