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