Esempio n. 1
0
            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);
            }