void CreateState(eAnimationStateName name) { CharacterState state = null; switch (name) { case eAnimationStateName.Idle: state = new Idle_State((int)name); break; case eAnimationStateName.Run: state = new Run_State((int)name); break; case eAnimationStateName.Attack: state = new Attack_State((int)name); break; case eAnimationStateName.Jump: state = new Jump_State((int)name); break; case eAnimationStateName.Crouch: state = new Crouch_State((int)name); break; case eAnimationStateName.Crouch_Attack: state = new CrouchAttack_State((int)name); break; case eAnimationStateName.Jump_Attack: state = new JumpAttack_State((int)name); break; case eAnimationStateName.Hurt: state = new Hurt_State((int)name); break; case eAnimationStateName.Hide: state = new Hide_State((int)name); break; case eAnimationStateName.Die: state = new DIe_State((int)name); break; case eAnimationStateName.Rise: state = new Rise_State((int)name); break; default: break; } if (state == null) { return; } state.Init(_char); _aniDic.Add(name, state); }
void Awake() { instance = this; idleState = new Idle_State(this); chaseState = new Chase_State(this); attackState = new Attack_State(this); hurtState = new Hurt_State(this); dieState = new Die_State(this); specialState = new Special_State(this); }
private void Start() { //IA2-P2 SetTeamData(); rb = this.gameObject.GetComponent <Rigidbody>(); _initialSpeed = 10; _navMeshAgent = GetComponent <NavMeshAgent>(); initPos = transform.position; sm = new StateMachine(); //Creo los estados var idle = new Idle_State(this); var move = new Move_State(this); var stunned = new Stunned_State(this); var searchFlag = new SearchForFlag_State(this); var chaseFlag = new ChaseFlag_State(this); var carryFlag = new CarryFlagToBase_State(this); var protectFlagCarrier = new ProtectFlagCarrier_State(this); //Los registro para hacer cambios forzados de estados statesRegistry.Add(Enums.SM_STATES.Idle, idle); statesRegistry.Add(Enums.SM_STATES.Move, move); statesRegistry.Add(Enums.SM_STATES.Stunned, stunned); statesRegistry.Add(Enums.SM_STATES.SearchFlag, searchFlag); statesRegistry.Add(Enums.SM_STATES.ChaseFlag, chaseFlag); statesRegistry.Add(Enums.SM_STATES.CarryFlagToBase, carryFlag); statesRegistry.Add(Enums.SM_STATES.ProtectFlagCarrier, protectFlagCarrier); //Agrego transiciones At(searchFlag, move, ImStillSearching()); At(move, searchFlag, FinishMomevent()); At(chaseFlag, carryFlag, HasFlag()); At(carryFlag, searchFlag, ImStillSearching()); At(stunned, searchFlag, ImStillSearching()); At(protectFlagCarrier, searchFlag, ImStillSearching()); //Shortcut para agregar transiciones void At(IState from, IState to, Func <bool> condition) => sm.AddTransition(from, to, condition); //Condiciones Func <bool> IsStunned() => () => isStunned; Func <bool> ImStillSearching() => () => knowsWhereFlagIs == false && hasFlag == false && isStunned == false; Func <bool> FinishMomevent() => () => GetComponent <NavMeshAgent>().velocity == Vector3.zero; Func <bool> FindFlag() => () => knowsWhereFlagIs && hasFlag == false && isStunned == false && sm.CurrentState != protectFlagCarrier; Func <bool> HasFlag() => () => hasFlag; //Desde cualquier estado sm.AddAnyTransition(stunned, IsStunned()); sm.AddAnyTransition(chaseFlag, FindFlag()); //Arranco la maquina en un estado sm.SetState(searchFlag); }
//global variables void Awake() { //first, reference all of the state scripts idleState = GetComponent <Idle_State> (); moveState = GetComponent <Move_State> (); deadState = GetComponent <Dead_State> (); emptyState = GetComponent <Empty_State> (); //get prepping currentState = Player_State.Idle_State; //ready to go ChangeState(); }
// Start is called before the first frame update void Start() { currState = StateName.IDLE_WANDER; // add move script moveComp = gameObject.AddComponent <EnemyMoveScript>(); // update its values moveComp.walkSpeed = wanderSpeed; // add enemy perception script percComp = gameObject.AddComponent <EnemyPerceptionScript>(); // Add new states idleState = gameObject.AddComponent <Idle_State>(); }
public void SetState(State newState) { State currentState = aiState; aiState = newState; if (newState == State.IDLE) { idleState = Idle_State.STAND_GROUND; } if (currentState == State.MOVE) { // TODO // attacker SelectTarget } }