private void InitializeFSM()
    {
        // Create Minion FSM.
        fsm = new FSM <States>();
        IdleState <States>    idleState    = new IdleState <States>(fsm, this);
        SearchState <States>  searchState  = new SearchState <States>(fsm, this);
        FlockState <States>   flockState   = new FlockState <States>(fsm, this, _flockingEntity);
        PursuitState <States> pursuitState = new PursuitState <States>(fsm, this);
        FleeState <States>    fleeState    = new FleeState <States>(fsm, this);

        // [EVERYONE] Idle Transitions.
        idleState.AddTransition(States.FLOCKING, flockState);
        idleState.AddTransition(States.SEARCHING, searchState);
        idleState.AddTransition(States.PURSUIT, pursuitState);

        pursuitState.AddTransition(States.FLEE, fleeState);
        pursuitState.AddTransition(States.FLOCKING, flockState);
        pursuitState.AddTransition(States.IDLE, idleState);

        fleeState.AddTransition(States.IDLE, idleState);
        fleeState.AddTransition(States.PURSUIT, pursuitState);


        // [BOSS] Search Transitions.
        searchState.AddTransition(States.IDLE, idleState);
        searchState.AddTransition(States.PURSUIT, pursuitState);

        // [MINIONS] Flocking Transitions.
        flockState.AddTransition(States.IDLE, idleState);
        flockState.AddTransition(States.PURSUIT, pursuitState);

        fsm.SetInitState(idleState);
    }
Exemplo n.º 2
0
    private void MakeFSM()
    {
        IdleState idle = new IdleState();

        idle.AddTransition(Transition.Walk, StateID.Walk);
        idle.AddTransition(Transition.Jump, StateID.Jump);
        idle.AddTransition(Transition.Die, StateID.Die);

        WalkState walk = new WalkState(path);

        walk.AddTransition(Transition.Idle, StateID.Idle);
        walk.AddTransition(Transition.Jump, StateID.Jump);
        walk.AddTransition(Transition.Die, StateID.Die);

        JumpState jump = new JumpState();

        jump.AddTransition(Transition.Idle, StateID.Idle);
        jump.AddTransition(Transition.Die, StateID.Die);
        DeadState die = new DeadState();

        fsm = new FSMSystem();
        fsm.AddState(idle);
        fsm.AddState(walk);
        fsm.AddState(jump);
        fsm.AddState(die);
    }
    void Start()
    {
        player_anim = GetComponentInChildren <PlayerAnimation>();
        _rb         = GetComponent <Rigidbody>();
        _player     = GetComponent <Player>();
        _fsm        = new FSM <string>();

        _healthUI = gameObject.GetComponentInChildren <HealthUI>();

        IdleState <string> idle = new IdleState <string>(_fsm, player_anim, "Move", "Punch Attack", "Kick Attack");
        MoveState <string> move = new MoveState <string>(_player, _fsm, player_anim, "Attack", "Idle");
        //JumpState<string> jump = new JumpState<string>(_fsm, "Idle", _rb, _player);
        PunchAttackState <string> punchAttack = new PunchAttackState <string>(_fsm, player_anim, "Idle", "Kick Attack");
        KickAttackState <string>  kickAttack  = new KickAttackState <string>(_fsm, player_anim, "Idle", "Punch Attack");


        idle.AddTransition("Move", move);
        idle.AddTransition("Punch Attack", punchAttack);
        idle.AddTransition("Kick Attack", kickAttack);

        move.AddTransition("Idle", idle);
        move.AddTransition("Punch Attack", punchAttack);
        move.AddTransition("Kick Attack", kickAttack);

        //jump.AddTransition("Idle", idle);

        punchAttack.AddTransition("Idle", idle);
        punchAttack.AddTransition("Kick Attack", kickAttack);

        kickAttack.AddTransition("Idle", idle);
        kickAttack.AddTransition("Punch Attack", punchAttack);

        _fsm.SetInit(idle);
    }
Exemplo n.º 4
0
    public void MakeFSM()
    {
        IdleState idle = new IdleState();

        idle.AddTransition(Transition.SawPlayer, StateID.AttackingState);
        idle.AddTransition(Transition.LostPlayer, StateID.MovingState);

        MoveState move = new MoveState();

        move.AddTransition(Transition.SawPlayer, StateID.AttackingState);

        AttackState attack = new AttackState();

        attack.AddTransition(Transition.LostPlayer, StateID.MovingState);
        attack.AddTransition(Transition.IdleTransition, StateID.IdleStateID);

        DefendState defend = new DefendState();

        EvadeState evade = new EvadeState();

        WinState win = new WinState();

        DeathState death = new DeathState();



        fsm = new FSMSystem();
        fsm.AddState(move);
        fsm.AddState(attack);
        fsm.AddState(idle);
        fsm.AddState(defend);
        fsm.AddState(evade);
        fsm.AddState(win);
        fsm.AddState(death);
    }
    public override void StartFSM()
    {
        _idleState   = new IdleState <states>(this, flags, _treeStartPoint);
        _followState = new FollowState <states>(this, myLeader, flags, _treeStartPoint, stopDist);
        _attackState = new AttackState <states>(this, flags, _treeStartPoint);
        _escapeState = new EscapeState <states>(this, flags, _treeStartPoint);
        _reloadState = new ReloadState <states>(this, flags, _treeStartPoint);

        fsm = new FSM <states>(_idleState);

        _idleState.AddTransition(states.Follow, _followState);
        _idleState.AddTransition(states.Attack, _attackState);
        _idleState.AddTransition(states.Escape, _escapeState);
        _idleState.AddTransition(states.Reload, _reloadState);

        _followState.AddTransition(states.Idle, _idleState);
        _followState.AddTransition(states.Attack, _attackState);
        _followState.AddTransition(states.Escape, _escapeState);
        _followState.AddTransition(states.Reload, _reloadState);

        _attackState.AddTransition(states.Idle, _idleState);
        _attackState.AddTransition(states.Follow, _followState);
        _attackState.AddTransition(states.Escape, _escapeState);
        _attackState.AddTransition(states.Reload, _reloadState);

        _reloadState.AddTransition(states.Idle, _idleState);
        _reloadState.AddTransition(states.Attack, _attackState);
        _reloadState.AddTransition(states.Follow, _followState);
        _reloadState.AddTransition(states.Escape, _escapeState);

        _escapeState.AddTransition(states.Idle, _idleState);
        _escapeState.AddTransition(states.Follow, _followState);

        fsm.SetState(_idleState);
    }
Exemplo n.º 6
0
    void InitFSM()
    {
        IdleState  idleState  = new IdleState(gameObject);
        RunState   runState   = new RunState(gameObject);
        ThrowState throwState = new ThrowState(gameObject);
        DeadState  deadState  = new DeadState(gameObject);

        // 注册切换条件 对应的 状态
        idleState.AddTransition(FSMTransition.IdleToRun, FSMStateId.Run);
        runState.AddTransition(FSMTransition.RunToIdle, FSMStateId.Idle);

        idleState.AddTransition(FSMTransition.IdleToThrow, FSMStateId.Throw);
        runState.AddTransition(FSMTransition.RunToThrow, FSMStateId.Throw);

        throwState.AddTransition(FSMTransition.ThrowToIdle, FSMStateId.Idle);

        idleState.AddTransition(FSMTransition.IdleToDead, FSMStateId.Dead);
        runState.AddTransition(FSMTransition.RunToDead, FSMStateId.Dead);
        throwState.AddTransition(FSMTransition.ThrowToDead, FSMStateId.Dead);

        system.AddState(idleState);
        system.AddState(runState);
        system.AddState(throwState);
        system.AddState(deadState);

        system.Start(FSMStateId.Idle);
    }
Exemplo n.º 7
0
    void InitFSM()
    {
        fsm = new FSMSystem();
        FSMState sleepState = new SleepState(fsm);

        sleepState.AddTransition(Transition.Open, StateID.Idle);


        FSMState IdleState = new IdleState(fsm);

        IdleState.AddTransition(Transition.Close, StateID.Sleep);
        IdleState.AddTransition(Transition.SeePlayer, StateID.Patrol);
        IdleState.AddTransition(Transition.Shopping, StateID.GoOut);
        IdleState.AddTransition(Transition.StartPlay, StateID.Play);

        FSMState patrolState = new PatrolState(fsm);

        patrolState.AddTransition(Transition.Open, StateID.Idle);
        patrolState.AddTransition(Transition.SeePlayer, StateID.Chase);


        FSMState chaseState = new ChaseState(fsm);

        chaseState.AddTransition(Transition.LostPlayer, StateID.Patrol);
        chaseState.AddTransition(Transition.FindEnemy, StateID.Bark);

        FSMState barkState = new BarkState(fsm);

        barkState.AddTransition(Transition.LostPlayer, StateID.Patrol);

        FSMState gooutState = new GoOutState(fsm);

        gooutState.AddTransition(Transition.Back, StateID.ComeBack);
        gooutState.AddTransition(Transition.SeePlayer, StateID.Patrol);

        FSMState comebackState = new ComeBackState(fsm);

        comebackState.AddTransition(Transition.Open, StateID.Idle);

        FSMState playState = new PlayState(fsm);

        playState.AddTransition(Transition.Open, StateID.Idle);
        playState.AddTransition(Transition.Close, StateID.Sleep);
        playState.AddTransition(Transition.SeePlayer, StateID.Patrol);
        playState.AddTransition(Transition.Shopping, StateID.GoOut);

        fsm.AddState(sleepState);
        fsm.AddState(IdleState);
        fsm.AddState(patrolState);
        fsm.AddState(chaseState);
        fsm.AddState(barkState);
        fsm.AddState(comebackState);
        fsm.AddState(gooutState);
        fsm.AddState(playState);
    }
Exemplo n.º 8
0
    void MakeFSM()
    {
        SleepingState sleeping = new SleepingState();

        sleeping.AddTransition("wake_up", "walk_to_mine");

        WalkToMineState walkToMine = new WalkToMineState(mines);

        walkToMine.AddTransition("reached_mine", "mining");
        walkToMine.AddTransition("all_empty_mines", "idle");

        IdleState idle = new IdleState(mines);

        idle.AddTransition("money_in_pocket", "walk_to_bank");
        idle.AddTransition("available_mines", "walk_to_mine");
        idle.AddTransition("nothing_to_do", "walk_to_bar");
        idle.AddTransition("no_energy", "walk_to_house");

        WalkToHouseState walkToHouse = new WalkToHouseState(house);

        walkToHouse.AddTransition("reached_house", "sleeping");

        WalkToBarState walkToBar = new WalkToBarState(bar);

        walkToBar.AddTransition("reached_bar", "drinking");

        DrinkingState drinking = new DrinkingState();

        drinking.AddTransition("finished_drink", "idle");

        MiningState mining = new MiningState();

        mining.AddTransition("empty_mine", "walk_to_mine");
        mining.AddTransition("no_energy", "walk_to_house");

        WalkToBankState walkToBank = new WalkToBankState(bank);

        walkToBank.AddTransition("reached_bank", "depositing");

        DepositingState depositing = new DepositingState();

        depositing.AddTransition("finished_deposit", "idle");

        fsm = new FSM();
        fsm.AddState(walkToHouse);
        fsm.AddState(sleeping);
        fsm.AddState(walkToMine);
        fsm.AddState(mining);
        fsm.AddState(walkToBank);
        fsm.AddState(idle);
        fsm.AddState(walkToBar);
        fsm.AddState(depositing);
        fsm.AddState(drinking);
    }
Exemplo n.º 9
0
    // The tile has 3 states: idle, wrapping and moving
    // If it's on idle and userSwipe transition is fired, it changes to moving
    // If it's on moving and reachedGoal transition is fired, it returns to idle
    // If it's on moving and offGrid is fired, it changes to wrapping
    // If it's on wrapping and finished wrap is fired, it changes to idle
    private void MakeFSM()
    {

        IdleState idle = new IdleState(this);
        idle.AddTransition(Transition.UserSwiped, StateID.Follow);

        FollowState follow = new FollowState(this);
        follow.AddTransition(Transition.FinishedFollow, StateID.Snapping);

        SnappingState snap = new SnappingState(this);
        snap.AddTransition(Transition.FinishedSnapping, StateID.Idle);
        snap.AddTransition(Transition.OffGrid, StateID.Wrapping);

        WrapState wrap = new WrapState(this);
        wrap.AddTransition(Transition.FinishedWrap, StateID.Idle);

        SetupState setup = new SetupState(this);
        setup.AddTransition(Transition.FinishedSetup, StateID.Idle);

        fsm = new FSMSystem();
        fsm.AddState(setup);
        fsm.AddState(idle);
        fsm.AddState(follow);
        fsm.AddState(snap);
        fsm.AddState(wrap);
    }
Exemplo n.º 10
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);
            }
Exemplo n.º 11
0
            public AIFSM(string name, EnemyController controller) : base(name, controller)
            {
                if (!controller)
                {
                    // TODO: Add log
                    LogHalt("EnemyController object null!");
                    Halt();
                }

                                #if UNITY_EDITOR
                LogThis = true;
                                #endif

                idleState       = new IdleState(this, EAIState.IDLE, "STATE_IDLE", controller);
                alertState      = new AlertState(this, EAIState.ALERT, "STATE_ALERT", controller);
                aggressiveState = new AggressiveState(this, EAIState.AGGRESSIVE, "STATE_AGGRESSIVE", controller);

                idleState.AddTransition(new Tran_IdleToAlert(alertState, controller));

                alertState.AddTransition(new Tran_AlertToAggressive(aggressiveState, controller));
                alertState.AddTransition(new Tran_AlertToIdle(idleState, controller));

                aggressiveState.AddTransition(new Tran_AggressiveToAlert(alertState, controller));

                AddState(idleState);
                AddState(alertState);
                AddState(aggressiveState);
            }
Exemplo n.º 12
0
    public override void StartFSM()
    {
        _leadState   = new LeadState <states>(this, flags, leadStopDistance, _treeStartPoint);
        _attackState = new AttackState <states>(this, flags, _treeStartPoint);
        _buffState   = new BuffState <states>(this, flags, _treeStartPoint);
        _escapeState = new EscapeState <states>(this, flags, _treeStartPoint);
        _idleState   = new IdleState <states>(this, flags, _treeStartPoint);
        _reloadState = new ReloadState <states>(this, flags, _treeStartPoint);

        fsm = new FSM <states>(_idleState);

        _idleState.AddTransition(states.Attack, _attackState);
        _idleState.AddTransition(states.Buff, _buffState);
        _idleState.AddTransition(states.Lead, _leadState);
        _idleState.AddTransition(states.Escape, _escapeState);
        _idleState.AddTransition(states.Reload, _reloadState);

        _leadState.AddTransition(states.Attack, _attackState);
        _leadState.AddTransition(states.Buff, _buffState);
        _leadState.AddTransition(states.Escape, _escapeState);
        _leadState.AddTransition(states.Idle, _idleState);
        _leadState.AddTransition(states.Reload, _reloadState);

        _attackState.AddTransition(states.Lead, _leadState);
        _attackState.AddTransition(states.Buff, _buffState);
        _attackState.AddTransition(states.Escape, _escapeState);
        _attackState.AddTransition(states.Idle, _idleState);
        _attackState.AddTransition(states.Reload, _reloadState);

        _reloadState.AddTransition(states.Idle, _idleState);
        _reloadState.AddTransition(states.Attack, _attackState);
        _reloadState.AddTransition(states.Buff, _buffState);
        _reloadState.AddTransition(states.Lead, _leadState);
        _reloadState.AddTransition(states.Escape, _escapeState);

        _buffState.AddTransition(states.Lead, _leadState);
        _buffState.AddTransition(states.Attack, _attackState);
        _buffState.AddTransition(states.Escape, _escapeState);
        _buffState.AddTransition(states.Idle, _idleState);
        _buffState.AddTransition(states.Reload, _reloadState);

        _escapeState.AddTransition(states.Idle, _idleState);
        _escapeState.AddTransition(states.Lead, _leadState);

        fsm.SetState(_idleState);
    }
Exemplo n.º 13
0
    private void BuildFSM() //Crea los estados, y las trancisiones que llevan a otros estados.
    {
        IdleState idle = new IdleState(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);

        RoamState roam = new RoamState(this);

        roam.AddTransition(TransitionID.SawTarget, StateID.ChasingTarget);
        roam.AddTransition(TransitionID.StopRoaming, StateID.Idle);
        roam.AddTransition(TransitionID.StartHurt, StateID.Hurt);
        roam.AddTransition(TransitionID.Dying, StateID.Dead);

        ChaseTargetState chaseTarget = new ChaseTargetState(this);

        chaseTarget.AddTransition(TransitionID.LostTarget, StateID.Roaming);
        chaseTarget.AddTransition(TransitionID.StartHurt, StateID.Hurt);
        chaseTarget.AddTransition(TransitionID.InRange, StateID.Attack);
        chaseTarget.AddTransition(TransitionID.Dying, StateID.Dead);

        AttackState attack = new AttackState(this);

        attack.AddTransition(TransitionID.OutRange, StateID.ChasingTarget);
        attack.AddTransition(TransitionID.Dying, StateID.Dead);

        HurtState hurt = new HurtState(this);

        hurt.AddTransition(TransitionID.StopHurt, StateID.ChasingTarget);
        hurt.AddTransition(TransitionID.Dying, StateID.Dead);

        DeadState dead = new DeadState(this);

        dead.AddTransition(TransitionID.Healed, StateID.ChasingTarget);

        fsm = new FSM();
        fsm.AddState(roam);
        fsm.AddState(idle);
        fsm.AddState(chaseTarget);
        fsm.AddState(attack);
        fsm.AddState(hurt);
        fsm.AddState(dead);
    }
Exemplo n.º 14
0
    protected override IEnemyState InitializeStates()
    {
        var idle         = new IdleState(this);
        var claimForward = new ClaimForwardState(this, claimerPrefab);
        var stepForward  = new MoveForwardState(this, stepTime);

        idle.AddTransition(() => { return(true); }, claimForward);
        claimForward.AddTransition(() => { return(claimForward.IsDone()); }, stepForward);
        stepForward.AddTransition(() => { return(stepForward.IsDone()); }, idle);

        return(idle);
    }
Exemplo n.º 15
0
    private void ConstructFSM()
    {
        IdleState idle = new IdleState();

        idle.AddTransition(Transition.SawPlayer, FSMStateID.Attacking);

        AttackState attack = new AttackState();

        attack.AddTransition(Transition.LostPlayer, FSMStateID.Idling);

        AddFSMState(idle);
        AddFSMState(attack);
    }
Exemplo n.º 16
0
    // The NPC has 3 states: Idle and ChasingPlayer
    // If it's on the first state and SawPlayer transition is fired, it changes to ChasePlayer
    // If it's on ChasePlayerState and LostPlayer transition is fired, it returns to FollowPath
    protected void MakeFSM()
    {
        fsm = new FSMSystem ();

        IdleState idleState = new IdleState (detectionRange, initialPosition);
        idleState.AddTransition (Transition.PlayerDetected, StateID.ChasingPlayer);

        ChasingPlayerState chasingState = new ChasingPlayerState (this.detectionRange, this.attackRange);
        chasingState.AddTransition (Transition.PlayerConcealed, StateID.Idle);

        fsm.AddState (idleState);
        fsm.AddState (chasingState);
    }
Exemplo n.º 17
0
    public void InitStateSystem()         //初始化管理员
    {
        IdleState idle = new IdleState(this.gameObject, this);

        idle.AddTransition(Transition.eTransiton_Object_Walk, StateID.eStateID_Object_Walk);

        WalkState walk = new WalkState(this.gameObject, this);

        walk.AddTransition(Transition.eTransiton_Object_Idle, StateID.eStateID_Object_Idle);

        m_StateSystem = new StateSystem();
        m_StateSystem.AddState(idle);
        m_StateSystem.AddState(walk);
    }
Exemplo n.º 18
0
    protected override void MakeFSM()
    {
        fsm = new FSMSystem();

        IdleState idle = new IdleState(gameObject);

        idle.AddTransition(Transition.PlayerVisible, StateID.Chase);
        fsm.AddState(idle);

        ChaseState chase = new ChaseState(gameObject);

        chase.AddTransition(Transition.PlayerNotVisible, StateID.Idle);
        fsm.AddState(chase);
    }
Exemplo n.º 19
0
    private void MakeFSM()
    {
        IdleState idleState = new IdleState(this, StateID.IdleState);
        WalkState walkState = new WalkState(this, StateID.PatrolState, walkSpeed);

        //IdleState
        idleState.AddTransition(new TimeTransition(walkState, idleTime));

        //WalkState
        walkState.AddTransition(new TimeTransition(idleState, walkTime));

        _fsm.AddState(idleState);
        _fsm.AddState(walkState);
    }
Exemplo n.º 20
0
    void Start()
    {
        var idle = new IdleState <Feed>();

        shooting = new ShootingState <Feed>(this.transform, target, this);
        var cooldown = new CooldownState <Feed>();

        idle.AddTransition(Feed.EnemigoEntraEnLOS, shooting);

        shooting.AddTransition(Feed.EnemigoSaleDeLOS, idle);
        shooting.AddTransition(Feed.ArmaRecalentada, cooldown);

        cooldown.AddTransition(Feed.ArmaEnfriada, shooting);
        cooldown.AddTransition(Feed.EnemigoSaleDeLOS, idle);

        stateMachine = new FSM <Feed>(idle);

        shootState = true;
    }
Exemplo n.º 21
0
    protected override IEnemyState InitializeStates()
    {
        var idle         = new IdleState(this);
        var claimForward = new ClaimForwardState(this, claimerPrefab);
        var chanceRoller = new ChanceRollerState(this);
        var stepForward  = new MoveForwardState(this, stepTime);
        var jumpForward  = new JumpForwardState(this, jumpHeight, jumpTime);

        chanceRoller.AddEntry(jumpForward, Mathf.FloorToInt(jumpChance * 10));
        chanceRoller.AddEntry(stepForward, Mathf.FloorToInt((1 - jumpChance) * 10));

        idle.AddTransition(() => { return(true); }, claimForward);
        claimForward.AddTransition(() => { return(claimForward.IsDone()); }, chanceRoller);
        chanceRoller.AddTransition(() => { return(chanceRoller.PickedState == stepForward); }, stepForward);
        chanceRoller.AddTransition(() => { return(chanceRoller.PickedState == jumpForward); }, jumpForward);
        stepForward.AddTransition(() => { return(stepForward.IsDone()); }, idle);
        jumpForward.AddTransition(() => { return(jumpForward.IsDone()); }, idle);

        return(idle);
    }
Exemplo n.º 22
0
    protected override IEnemyState InitializeStates()
    {
        var idle           = new IdleState(this);
        var claimForward   = new ClaimForwardState(this, claimerPrefab);
        var moveForward    = new MoveForwardState(this, stepTime);
        var forwardCounter = new CounterState(this, forwardSteps);
        var switchState    = new SwitchState(this);
        var claimRight     = new ClaimRightState(this, claimerPrefab);
        var moveRight      = new MoveRightState(this, stepTime);
        var rightCounter   = new CounterState(this, rightSteps);
        var claimLeft      = new ClaimLeftState(this, claimerPrefab);
        var moveLeft       = new MoveLeftState(this, stepTime);
        var leftCounter    = new CounterState(this, leftSteps);


        idle.AddTransition(() => { return(true); }, claimForward);

        claimForward.AddTransition(() => { return(claimForward.IsDone()); }, moveForward);
        moveForward.AddTransition(() => { return(moveForward.IsDone()); }, forwardCounter);
        forwardCounter.AddTransition(() => { return(forwardCounter.IsAmountReached()); }, switchState);
        forwardCounter.AddTransition(() => { return(forwardCounter.IsAmountReached() == false); }, claimForward);

        switchState.AddTransition(() => { return(switchState.Value == true); }, claimRight);
        switchState.AddTransition(() => { return(switchState.Value == false); }, claimLeft);

        claimRight.AddTransition(() => { return(claimRight.IsDone()); }, moveRight);
        moveRight.AddTransition(() => { return(moveRight.IsDone()); }, rightCounter);
        rightCounter.AddTransition(() => { return(rightCounter.IsAmountReached()); }, idle);
        rightCounter.AddTransition(() => { return(rightCounter.IsAmountReached() == false); }, claimRight);

        claimLeft.AddTransition(() => { return(claimLeft.IsDone()); }, moveLeft);
        moveLeft.AddTransition(() => { return(moveLeft.IsDone()); }, leftCounter);
        leftCounter.AddTransition(() => { return(leftCounter.IsAmountReached()); }, idle);
        leftCounter.AddTransition(() => { return(leftCounter.IsAmountReached() == false); }, claimLeft);

        return(idle);
    }
Exemplo n.º 23
0
    void Start()
    {
        anim = GetComponent <Animator>();

        StateIDToActionID = new Dictionary <StateID, Action>()
        {
            { StateID.BattleFireBall, Action.FireBall },
            { StateID.BattleFallingBall, Action.FallingBall }
        };

        DragonHealth      = 20;
        PeriodSufferDamge = 0;
        player            = GameObject.FindGameObjectsWithTag("CurPlayer")[0];

        GameObject controller_object = GameObject.FindGameObjectsWithTag("GameController")[0];

        gamecontroller = controller_object.GetComponent <gamecontrol>();

        DragonKnowledge = new KnowledgeSystem();

        IdleState idle = new IdleState(player, gameObject);

        idle.AddTransition(Transition.SawPlayer, StateID.BattleRoar);
        idle.AddTransition(Transition.IdleEnd, StateID.RandomWalk);

        RandomWalkState walk = new RandomWalkState(player, gameObject);

        walk.AddTransition(Transition.SawPlayer, StateID.BattleRoar);
        walk.AddTransition(Transition.WalkEnd, StateID.Idle);

        BattleRoarState roar = new BattleRoarState(player, gameObject);

        roar.AddTransition(Transition.Falling, StateID.BattleFallingBall);
        roar.AddTransition(Transition.Beaten, StateID.BattleBeaten);
        roar.AddTransition(Transition.FireBall, StateID.BattleFireBall);
        roar.AddTransition(Transition.FarAway, StateID.BattleRun);

        BattleFireBallState fireball = new BattleFireBallState(player, gameObject);

        fireball.AddTransition(Transition.FireBall, StateID.BattleFireBall);
        fireball.AddTransition(Transition.FarAway, StateID.BattleRun);
        fireball.AddTransition(Transition.LowHealth, StateID.BattleRetreat);
        fireball.AddTransition(Transition.Beaten, StateID.BattleBeaten);
        fireball.AddTransition(Transition.Falling, StateID.BattleFallingBall);

        BattleRunState run = new BattleRunState(player, gameObject);

        run.AddTransition(Transition.FireBall, StateID.BattleFireBall);
        run.AddTransition(Transition.LowHealth, StateID.BattleRetreat);
        run.AddTransition(Transition.Falling, StateID.BattleFallingBall);

        BattleRetreatState retreat = new BattleRetreatState(player, gameObject);

        retreat.AddTransition(Transition.Beaten, StateID.BattleBeaten);

        BattleBeatenState beaten = new BattleBeatenState(player, gameObject);

        beaten.AddTransition(Transition.FireBall, StateID.BattleFireBall);
        beaten.AddTransition(Transition.LowHealth, StateID.BattleRetreat);
        beaten.AddTransition(Transition.FlyBack, StateID.BattleFlyBack);

        BattleFlyBackState flyback = new BattleFlyBackState(player, gameObject);

        flyback.AddTransition(Transition.FireBall, StateID.BattleFireBall);
        flyback.AddTransition(Transition.Falling, StateID.BattleFallingBall);
        flyback.AddTransition(Transition.FarAway, StateID.BattleRun);
        flyback.AddTransition(Transition.Beaten, StateID.BattleBeaten);

        BattleFallingBall fallingball = new BattleFallingBall(player, gameObject);

        fallingball.AddTransition(Transition.FireBall, StateID.BattleFireBall);
        fallingball.AddTransition(Transition.FarAway, StateID.BattleRun);
        fallingball.AddTransition(Transition.LowHealth, StateID.BattleRetreat);
        fallingball.AddTransition(Transition.Beaten, StateID.BattleBeaten);
        fallingball.AddTransition(Transition.Falling, StateID.BattleFallingBall);


        fsm = new FSMSystem();
        fsm.AddState(idle);
        fsm.AddState(walk);
        fsm.AddState(roar);
        fsm.AddState(fireball);
        fsm.AddState(run);
        fsm.AddState(retreat);
        fsm.AddState(beaten);
        fsm.AddState(flyback);
        fsm.AddState(fallingball);
    }
Exemplo n.º 24
0
    private void Start()
    {
        //Agarro el model
        _model = GetComponent <Model>();

        //Creo la FSM
        _fsm = new FSM <string>();

        //Creo los estados
        IdleState <string>   idle   = new IdleState <string>(this);
        PatrolState <string> patrol = new PatrolState <string>(Waypoints, transform, this);
        ShootState <string>  shoot  = new ShootState <string>(this);
        AlertState <string>  alert  = new AlertState <string>(this, Sight, ExclamationMark);
        SearchState <string> search = new SearchState <string>(this);

        //Creo las transiciones
        idle.AddTransition(_patrolKey, patrol);
        idle.AddTransition(_shootKey, shoot);
        idle.AddTransition(_alertKey, alert);
        idle.AddTransition(_searchKey, search);
        idle.AddTransition(_idleKey, idle); //se tienen a si mismos por si llega a tener que volverse a ejecutar con el random

        patrol.AddTransition(_idleKey, idle);
        patrol.AddTransition(_shootKey, shoot);
        patrol.AddTransition(_alertKey, alert);
        patrol.AddTransition(_searchKey, search);

        alert.AddTransition(_idleKey, idle);
        alert.AddTransition(_shootKey, shoot);
        alert.AddTransition(_patrolKey, patrol);
        alert.AddTransition(_alertKey, alert);
        alert.AddTransition(_searchKey, search);

        search.AddTransition(_searchKey, search);
        search.AddTransition(_idleKey, idle);
        search.AddTransition(_shootKey, shoot);
        search.AddTransition(_patrolKey, patrol);
        search.AddTransition(_alertKey, alert);

        //diccionario de todos los estados de idle para la roulette
        _statesRoulette = new Dictionary <string, int>();
        _statesRoulette.Add(_idleKey, 30);
        _statesRoulette.Add(_patrolKey, 70);
        _statesRoulette.Add(_searchKey, 50);

        //inicializo la FSM
        _fsm.SetInitialState(idle);

        //Inicializo los nodos del Desicion Tree
        ActionNode _shootActionNode       = new ActionNode(ChangeToShootState); //Aca pasarle función
        ActionNode _alertActionNode       = new ActionNode(ChangeToAlertState);
        ActionNode _randomStateActionNode = new ActionNode(ChangeToRandomState);

        _isFirstTimeQuestionNode    = new QuestionNode(Sight.SawTargetOnce, _shootActionNode, _alertActionNode);
        _isSeeingPlayerQuestionNode = new QuestionNode(Sight.IsSeeingTarget, _isFirstTimeQuestionNode, _randomStateActionNode);

        Sight.SawTarget.AddListener(ExecuteTree);

        // Roulette
        _actionRoulette = new Roulette <string>();
    }
Exemplo n.º 25
0
    private void ConstructFSM()
    {
        IdleState idle = new IdleState();

        idle.AddTransition(FSMTransitionType.CanBeMove, FSMStateType.Move);
        idle.AddTransition(FSMTransitionType.AttackWithSingleWield, FSMStateType.SingleWieldAttack);
        idle.AddTransition(FSMTransitionType.AttackWithDoubleHands, FSMStateType.DoubleHandsAttack);
        idle.AddTransition(FSMTransitionType.UsingRipple, FSMStateType.RippleAttack);
        idle.AddTransition(FSMTransitionType.UsingHeartAttack, FSMStateType.HeartAttack);
        idle.AddTransition(FSMTransitionType.UsingStygianDesolator, FSMStateType.StygianDesolator);
        idle.AddTransition(FSMTransitionType.UsingIceArrow, FSMStateType.IceArrow);
        idle.AddTransition(FSMTransitionType.UsingChoshimArrow, FSMStateType.ChoshimArrow);
        idle.AddTransition(FSMTransitionType.CanPickUp, FSMStateType.PickUp);
        idle.AddTransition(FSMTransitionType.UsingThunderBolt, FSMStateType.ThunderBolt);
        idle.AddTransition(FSMTransitionType.AttackWithSpear, FSMStateType.SpearAttack);
        idle.AddTransition(FSMTransitionType.CanDefend, FSMStateType.Defend);
        idle.AddTransition(FSMTransitionType.Falling, FSMStateType.Fall);

        MoveState move = new MoveState();

        move.AddTransition(FSMTransitionType.IsIdle, FSMStateType.Idle);
        move.AddTransition(FSMTransitionType.AttackWithSingleWield, FSMStateType.SingleWieldAttack);
        move.AddTransition(FSMTransitionType.AttackWithDoubleHands, FSMStateType.DoubleHandsAttack);
        move.AddTransition(FSMTransitionType.AttackWithSpear, FSMStateType.SpearAttack);



        DefendState defend = new DefendState();

        defend.AddTransition(FSMTransitionType.IsIdle, FSMStateType.Idle);

        SingleWieldAttackState singleWieldAttack = new SingleWieldAttackState();

        singleWieldAttack.AddTransition(FSMTransitionType.IsIdle, FSMStateType.Idle);
        singleWieldAttack.AddTransition(FSMTransitionType.AttackWithSingleWield, FSMStateType.SingleWieldAttack);
        singleWieldAttack.AddTransition(FSMTransitionType.CanBeMove, FSMStateType.Move);

        DoubleHandsAttackState dualWieldAttack = new DoubleHandsAttackState();

        dualWieldAttack.AddTransition(FSMTransitionType.IsIdle, FSMStateType.Idle);
        dualWieldAttack.AddTransition(FSMTransitionType.AttackWithDoubleHands, FSMStateType.DoubleHandsAttack);
        dualWieldAttack.AddTransition(FSMTransitionType.CanBeMove, FSMStateType.Move);


        SpearAttackState spearAttack = new SpearAttackState();

        spearAttack.AddTransition(FSMTransitionType.IsIdle, FSMStateType.Idle);
        spearAttack.AddTransition(FSMTransitionType.CanBeMove, FSMStateType.Move);

        RippleAttackState rippleAttack = new RippleAttackState();

        rippleAttack.AddTransition(FSMTransitionType.IsIdle, FSMStateType.Idle);

        HeartAttackState heartAttack = new HeartAttackState();

        heartAttack.AddTransition(FSMTransitionType.IsIdle, FSMStateType.Idle);

        StygianDesolatorState stygianDesolator = new StygianDesolatorState();

        stygianDesolator.AddTransition(FSMTransitionType.IsIdle, FSMStateType.Idle);

        IceArrowState iceArrow = new IceArrowState();

        iceArrow.AddTransition(FSMTransitionType.IsIdle, FSMStateType.Idle);

        ChoshimArrowState choshimArrow = new ChoshimArrowState();

        choshimArrow.AddTransition(FSMTransitionType.IsIdle, FSMStateType.Idle);

        ThunderBoltState thunderBolt = new ThunderBoltState();

        thunderBolt.AddTransition(FSMTransitionType.IsIdle, FSMStateType.Idle);

        PickUpState pickUp = new PickUpState();

        pickUp.AddTransition(FSMTransitionType.IsIdle, FSMStateType.Idle);

        FallState fall = new FallState();

        fall.AddTransition(FSMTransitionType.IsIdle, FSMStateType.Idle);



        AddFSMState(idle);
        AddFSMState(move);
        AddFSMState(defend);
        AddFSMState(singleWieldAttack);
        AddFSMState(dualWieldAttack);
        AddFSMState(rippleAttack);
        AddFSMState(heartAttack);
        AddFSMState(stygianDesolator);
        AddFSMState(iceArrow);
        AddFSMState(choshimArrow);
        AddFSMState(thunderBolt);
        AddFSMState(pickUp);
        AddFSMState(spearAttack);
        AddFSMState(fall);
    }