private void Awake() { _shooter = GetComponent <Shooter>(); // states IdleState = new ShooterIdleState(this, _shooter); AggroState = new ShooterAggroState(this, _shooter); HitStunState = new ShooterHitStunState(this, _shooter); }
private void BuildFSM() { ShooterIdleState idle = new ShooterIdleState(this); idle.AddTransition(TransitionID.StartRoaming, StateID.Roaming); idle.AddTransition(TransitionID.SawTarget, StateID.ChasingTarget); idle.AddTransition(TransitionID.StartHurt, StateID.Hurt); idle.AddTransition(TransitionID.Dying, StateID.Dead); ShooterRoamState roam = new ShooterRoamState(this); roam.AddTransition(TransitionID.StopRoaming, StateID.Idle); roam.AddTransition(TransitionID.SawTarget, StateID.ChasingTarget); roam.AddTransition(TransitionID.StartHurt, StateID.Hurt); roam.AddTransition(TransitionID.Dying, StateID.Dead); ShooterChaseState chaseTarget = new ShooterChaseState(this); chaseTarget.AddTransition(TransitionID.LostTarget, StateID.Roaming); chaseTarget.AddTransition(TransitionID.InRange, StateID.Attack); chaseTarget.AddTransition(TransitionID.Dying, StateID.Dead); ShooterAttackState attack = new ShooterAttackState(this); attack.AddTransition(TransitionID.OutRange, StateID.ChasingTarget); attack.AddTransition(TransitionID.Unloaded, StateID.Reload); attack.AddTransition(TransitionID.Dying, StateID.Dead); ShooterReloadState reload = new ShooterReloadState(this); reload.AddTransition(TransitionID.Loaded, StateID.ChasingTarget); reload.AddTransition(TransitionID.Dying, StateID.Dead); ShooterHurtState hurt = new ShooterHurtState(this); hurt.AddTransition(TransitionID.StopHurt, StateID.ChasingTarget); hurt.AddTransition(TransitionID.Dying, StateID.Dead); ShooterDeadState dead = new ShooterDeadState(this); dead.AddTransition(TransitionID.Healed, StateID.ChasingTarget); fsm = new FSM(); fsm.AddState(idle); fsm.AddState(roam); fsm.AddState(chaseTarget); fsm.AddState(attack); fsm.AddState(reload); fsm.AddState(hurt); fsm.AddState(dead); }