public WeaponFSM(string name, BaseWeapon weapon) : base(name, weapon) { if (!weapon) { // TODO: Add log LogHalt("BaseWeapon object null!"); Halt(); } idleState = new IdleState(this, EWeaponState.IDLE, "STATE_IDLE", weapon); windupState = new WindupState(this, EWeaponState.WINDUP, "STATE_WINDUP", weapon); fireState = new FireState(this, EWeaponState.FIRING, "STATE_FIRING", weapon); cooldownState = new CooldownState(this, EWeaponState.COOLDOWN, "STATE_COOLDOWN", weapon); idleState.AddTransition(new Tran_IdleToWindup(windupState, weapon)); windupState.AddTransition(new Tran_WindupToIdle(idleState, weapon)); windupState.AddTransition(new Tran_WindupToFire(fireState, weapon)); fireState.AddTransition(new Tran_FireToCooldown(cooldownState, weapon)); fireState.AddTransition(new Tran_FireToIdle(idleState, weapon)); fireState.AddTransition(new Tran_FireToFire(fireState, weapon)); AddState(idleState); AddState(windupState); AddState(fireState); AddState(cooldownState); }