protected virtual void CreateStates()
{
states = new Dictionary<string, TreeState>();
TreeState inactive = new TreeStateInactive();
TreeState inactiveDead = new TreeStateInactiveDead();
TreeState active = new TreeStateActive();
TreeState eatingMinigameWrangle = new TreeStateEatingMinigameWrangle();
TreeState eatingMinigameMash = new TreeStateEatingMinigameMash();
TreeState eatingMinigameMashInstant = new TreeStateEatingMinigameMashInstant();
TreeState eating = new TreeStateEating();
// Axe man minigame states
TreeState axeManMinigameDead = new TreeStateAxeManMinigameDead();
TreeState axeManMinigameWaitForChop = new TreeStateAxeManMinigameWaitForChop();
TreeState axeManMinigameGroan = new TreeStateAxeManMinigameGroan();
TreeState axeManMinigamePanToAxe = new TreeStateAxeManMinigamePanToAxe();
TreeState axeManMinigameWrangleAxe = new TreeStateAxeManMinigameWrangleAxe();
TreeState axeManMinigameGrabAxe = new TreeStateAxeManMinigameGrabAxe();
TreeState axeManMinigameRemoveAxe = new TreeStateAxeManMinigameRemoveAxe();
TreeState axeManMinigameRaiseAxe = new TreeStateAxeManMinigameRaiseAxe();
TreeState axeManMinigameDropAxe = new TreeStateAxeManMinigameDropAxe();
TreeState axeManMinigameLowerToAxeMan = new TreeStateAxeManMinigameLowerToAxeMan();
TreeState axeManMinigameRaiseAxeMan = new TreeStateAxeManMinigameRaiseAxeMan();
TreeState axeManMinigameWrangleAxeMan = new TreeStateAxeManMinigameWrangleAxeMan();
TreeState axeManMinigameMash = new TreeStateAxeManMinigameMash();
TreeState axeManMinigameEatingFirstHalf = new TreeStateAxeManMinigameEatingFirstHalf();
TreeState axeManMinigameEatingLastWords = new TreeStateAxeManMinigameEatingLastWords();
TreeState axeManMinigameEatingLastHalf = new TreeStateAxeManMinigameEatingLastHalf();
states.Add("Inactive", inactive);
states.Add("InactiveDead", inactiveDead);
states.Add("Active", active);
states.Add("EatingMinigameWrangle", eatingMinigameWrangle);
states.Add("EatingMinigameMash", eatingMinigameMash);
states.Add("EatingMinigameMashInstant", eatingMinigameMashInstant);
states.Add("Eating", eating);
// Axe man minigame state
states.Add("AxeManMinigameDead", axeManMinigameDead);
states.Add("AxeManMinigameWaitForChop", axeManMinigameWaitForChop);
states.Add("AxeManMinigameGroan", axeManMinigameGroan);
states.Add("AxeManMinigamePanToAxe", axeManMinigamePanToAxe);
states.Add("AxeManMinigameWrangleAxe", axeManMinigameWrangleAxe);
states.Add("AxeManMinigameGrabAxe", axeManMinigameGrabAxe);
states.Add("AxeManMinigameRemoveAxe", axeManMinigameRemoveAxe);
states.Add("AxeManMinigameRaiseAxe", axeManMinigameRaiseAxe);
states.Add("AxeManMinigameDropAxe", axeManMinigameDropAxe);
states.Add("AxeManMinigameLowerToAxeMan", axeManMinigameLowerToAxeMan);
states.Add("AxeManMinigameRaiseAxeMan", axeManMinigameRaiseAxeMan);
states.Add("AxeManMinigameWrangleAxeMan", axeManMinigameWrangleAxeMan);
states.Add("AxeManMinigameMash", axeManMinigameMash);
states.Add("AxeManMinigameEatingFirstHalf", axeManMinigameEatingFirstHalf);
states.Add("AxeManMinigameEatingLastWords", axeManMinigameEatingLastWords);
states.Add("AxeManMinigameEatingLastHalf", axeManMinigameEatingLastHalf);
foreach (TreeState state in states.Values) state.Tree = this;
currentState = (Active) ? states["Active"] : states["Inactive"];
if (Active) MessageCenter.Instance.Broadcast(new CameraChangeFollowedMessage(transform, Vector3.zero));
currentState.Enter(null);
}