
V
Publisher
Visnicio
Simple C# FSM
Tools
C# FSM finite state machine
A Simple FSM implementation in C# for Godot Games

Installing
- Download the .zip file and extract the addons folder to your root project folder
res:// - Enable the addon by ticking the enable checkbox at Project -> Project Settings -> addons
About
This is a simple rework from my past fsm implementation for gdscript purists, no dedicated editors, just create the script and use it. I intend to keep adding functionality to this addon but its not supposed to evolve firthuer than just being a "fuck, I need a FSM" solution. In almost every game I game I need a FSM for something and this always save my butt from having to code it from scratch.
Here's a basic example
public partial class IdleState : SimpleFSMState {
[Export] private AnimationPlayer animPlayer;
[Export] private CharacterBody2D node;
public override void OnEnter() {
animPlayer.Play("idle");
node.Velocity = Vector2.Zero;
}
public override void OnPhysicsProcess(double delta) {
if (Input.IsActionPressed("down") || Input.IsActionPressed("up") || Input.IsActionPressed("left") ||
Input.IsActionPressed("right")) {
EmitSignal(SignalName.ChangeState, nameof(WalkingState));
}
}
}
Known issues
- When you add a
SimpleFSMStateto the scene and extend the script, Godot will not understant that its supposed to inherit fromSimpleFSMState, it will try to inherit fromSimpleFsmState, just fix the class name and dont forget to add the namespace.
Changing States
To change states you have a signal on the State class (I need to fucking change this, this is not scalable) that you can emit.
EmitSignal(SignalName.ChangeState, nameof(WalkingState));
State class
Heres the virtual methods you can implement at the moment
public virtual void OnEnter(){}
public virtual void OnExit(){}
public virtual void OnProcess(double delta){}
public virtual void OnPhysicsProcess(double delta){}