public TreeStateMachine( TreeBehaviour owner, TreeState.Writer inTree, Health.Writer health, FlammableBehaviour flammableInterface, Flammable.Writer flammable ) { tree = inTree; var healthyState = new TreeHealthyState(this, flammable, health); var burningState = new TreeBurningState(this, flammable, health); var burntState = new TreeBurntState(this, owner, flammable, flammableInterface); var stumpState = new TreeStumpState(this, owner, flammable); var stateList = new Dictionary <TreeFSMState, IFsmState>(); stateList.Add(TreeFSMState.HEALTHY, healthyState); stateList.Add(TreeFSMState.BURNING, burningState); stateList.Add(TreeFSMState.BURNT, burntState); stateList.Add(TreeFSMState.STUMP, stumpState); SetStates(stateList); var allowedTransitions = new Dictionary <TreeFSMState, IList <TreeFSMState> >(); allowedTransitions.Add(TreeFSMState.HEALTHY, new List <TreeFSMState>() { TreeFSMState.BURNING, TreeFSMState.STUMP }); allowedTransitions.Add(TreeFSMState.BURNING, new List <TreeFSMState>() { TreeFSMState.HEALTHY, TreeFSMState.BURNT }); allowedTransitions.Add(TreeFSMState.BURNT, new List <TreeFSMState>() { TreeFSMState.HEALTHY }); allowedTransitions.Add(TreeFSMState.STUMP, new List <TreeFSMState>() { TreeFSMState.HEALTHY }); SetTransitions(allowedTransitions); }