public override void Update()
 {
     if (Papuan.TargetEnemy != null)
     {
         Papuan.Move((Papuan.TargetEnemy.transform.position - Papuan.transform.position).normalized);
     }
 }
Beispiel #2
0
 public override void Enter()
 {
     Papuan.Animator.SetFloat("walkSpeed", 0);
     if (Papuan.TargetSlote != null)
     {
         Papuan.RotateTo(-Papuan.TargetSlote.transform.forward);
     }
 }
 public override void Enter()
 {
     if (Papuan.LastDamageSource != null)
     {
         Papuan.SetTargetEnemy(Papuan.LastDamageSource);
         Papuan.LastDamageSource = null;
         Papuan.RotateTo(Papuan.LastDamageSource.transform.position - Papuan.transform.position);
     }
 }
Beispiel #4
0
 public override void Update()
 {
     if (Papuan.TargetSlote == null)
     {
         Papuan.Move((Papuan.TargetSlote.transform.position - Papuan.transform.position).normalized);
     }
     else
     {
         Papuan.Move((Papuan.TargetGate.transform.position - Papuan.transform.position).normalized);
     }
 }
Beispiel #5
0
    public override void Enter()
    {
        Papuan.Animator.SetTrigger("attack");
        if (Papuan.TargetEnemy != null)
        {
            Papuan.RotateTo(Papuan.TargetEnemy.transform.position - Papuan.transform.position);
        }

        _attacked   = false;
        _timePassed = 0;
    }
    public override bool NeedTransit()
    {
        List <Character> enemies = CharacterGroups.main.GetEnemies(Papuan);

        foreach (Character enemy in enemies)
        {
            if (Papuan.CouldSeeCharacter(enemy))
            {
                Papuan.SetTargetEnemy(enemy);
                return(true);
            }
        }

        return(false);
    }
    private void Awake()
    {
        Papuan papuan = GetComponent <Papuan>();

        PapuanState moveState           = new PapuanMoveState(papuan);
        PapuanState searchingState      = new PapuanIdleState(papuan);
        PapuanState standingNearPlayer  = new PapuanLookAtPlayerState(papuan);
        PapuanState attackState         = new AttackState(papuan, 0.3f);
        PapuanState attackBackState     = new AttackBackState(papuan);
        PapuanState attackGateState     = new PapuanAttackGateState(papuan, 0.3f);
        PapuanState moveToGate          = new PapuanMoveToGateState(papuan);
        PapuanState moveToGateSlote     = new PapuanMoveToGateSloteState(papuan);
        PapuanState standingNearGate    = new PapuanLookForEmptySloteState(papuan);
        PapuanState standingInGateSlote = new PapuanStandingInGateSlote(papuan);
        PapuanState exitFromGateState   = new PapuanStopedAttackGateState(papuan);

        PapuanTransition whenChooseTarget            = new PapuanSeePlayerTransition(papuan, moveState);
        PapuanTransition whenCantSeeTarget           = new PapuanLoseTargetFromViewTransition(papuan, moveToGate, 2);
        PapuanTransition whenTargetIsClose           = new PapuanPlayerDistanceTransition(papuan, attackState, 0.5f, false);
        PapuanTransition whenTargetWentAway          = new PapuanPlayerDistanceTransition(papuan, searchingState, 1.5f, true);
        PapuanTransition waitCooldownAfterAttack     = new PapuanWaitingTransition(papuan, searchingState, 1);
        PapuanTransition whenSomeoneHit              = new PapuanAttackedTransition(papuan, attackBackState);
        PapuanTransition waitAfterTurnToAttackBack   = new PapuanWaitingTransition(papuan, moveState, 0.1f);
        PapuanTransition whenCloseToGate             = new PapuanGateSloteDistanceTransition(papuan, standingNearGate, 3);
        PapuanTransition whenFoundEmptySlote         = new PapuanEmptySloteTransition(papuan, moveToGateSlote);
        PapuanTransition whenMovedToGateSlote        = new PapuanGateSloteDistanceTransition(papuan, standingInGateSlote, 0.2f);
        PapuanTransition whenStayInGateSlote         = new PapuanGateSloteDistanceTransition(papuan, attackGateState, 0.2f);
        PapuanTransition waitCooldownAfterAttackGate = new PapuanWaitingTransition(papuan, standingInGateSlote, 1);
        PapuanTransition whenDistractedFromGate      = new PapuanSeePlayerTransition(papuan, exitFromGateState);
        PapuanTransition waitDelayAfterDistraction   = new PapuanWaitingTransition(papuan, moveState, 0.1f);

        searchingState.Transitions     = new PapuanTransition[] { whenChooseTarget, whenSomeoneHit, whenCantSeeTarget };
        moveState.Transitions          = new PapuanTransition[] { whenCantSeeTarget, whenTargetIsClose, whenSomeoneHit };
        standingNearPlayer.Transitions = new PapuanTransition[] { whenTargetWentAway, whenSomeoneHit };
        attackState.Transitions        = new PapuanTransition[] { waitCooldownAfterAttack, whenSomeoneHit };
        attackBackState.Transitions    = new PapuanTransition[] { waitAfterTurnToAttackBack };

        moveToGate.Transitions       = new PapuanTransition[] { whenCloseToGate, whenChooseTarget };
        standingNearGate.Transitions = new PapuanTransition[] { whenFoundEmptySlote, whenChooseTarget };

        moveToGateSlote.Transitions     = new PapuanTransition[] { whenMovedToGateSlote, whenChooseTarget, whenDistractedFromGate };
        standingInGateSlote.Transitions = new PapuanTransition[] { whenStayInGateSlote, whenDistractedFromGate };
        attackGateState.Transitions     = new PapuanTransition[] { waitCooldownAfterAttackGate, whenDistractedFromGate };
        exitFromGateState.Transitions   = new PapuanTransition[] { waitDelayAfterDistraction };

        _currentState = moveToGate;
    }
Beispiel #8
0
    public void Spawn()
    {
        Papuan papuan = Instantiate(_papuanPrefab, _spawnPoints[_currentSpawnIndex].position, Quaternion.LookRotation(Vector3.back));

        _currentSpawnIndex = (_currentSpawnIndex + 1) % _spawnPoints.Length;

        papuan.Init(_gate, FindObjectOfType <Player>());

        papuan.Destroyed   += OnPapuanDestroyed;
        papuan.Killed      += OnPapuanKilled;
        papuan.Disappeared += OnPapuanDisappeared;

        _papuans.Add(papuan);

        CharacterGroups.main.AddItemToGroupB(papuan);

        PapuansCountChanged?.Invoke(_papuans.Count);
    }
Beispiel #9
0
 public PapuanLookForEmptySloteState(Papuan papuan) : base(papuan)
 {
 }
Beispiel #10
0
 public PapuanGateSloteDistanceTransition(Papuan papuan, PapuanState papuanState, float distance) : base(papuan, papuanState)
 {
     _distance = distance;
 }
Beispiel #11
0
 public PapuanLookAtPlayerState(Papuan papuan) : base(papuan)
 {
 }
 public PapuanMoveToGateSloteState(Papuan papuan) : base(papuan)
 {
 }
 public PapuanEmptySloteTransition(Papuan papuan, PapuanState targetState) : base(papuan, targetState)
 {
 }
Beispiel #14
0
 public PapuanAttackedTransition(Papuan papuan, PapuanState targetState) : base(papuan, targetState)
 {
 }
Beispiel #15
0
 public PapuanAttackGateState(Papuan papuan, float attackDelay) : base(papuan, attackDelay)
 {
 }
Beispiel #16
0
 public PapuanPlayerDistanceTransition(Papuan papuan, PapuanState targetState, float distance, bool more) : base(papuan, targetState)
 {
     _distance = distance;
     _more     = more;
 }
 public PapuanLoseTargetFromViewTransition(Papuan papuan, PapuanState targetState, float delay) : base(papuan, targetState)
 {
     _delay = delay;
 }
 public override bool NeedTransit()
 {
     _timePassed += Time.deltaTime;
     return(Papuan.TargetEnemy == null ||
            (_timePassed >= _delay && Papuan.CouldSeeCharacter(Papuan.TargetEnemy) == false));
 }
Beispiel #19
0
 public AttackState(Papuan papuan, float attackDelay) : base(papuan)
 {
     _attackDelay = attackDelay;
 }
 public AttackBackState(Papuan papuan) : base(papuan)
 {
 }
Beispiel #21
0
 public PapuanTransition(Papuan papuan, PapuanState targetState)
 {
     Papuan      = papuan;
     TargetState = targetState;
 }
 public PapuanIdleState(Papuan papuan) : base(papuan)
 {
 }
 public PapuanStopedAttackGateState(Papuan papuan) : base(papuan)
 {
 }
Beispiel #24
0
 public override void Enter()
 {
     Papuan.Animator.SetFloat("walkSpeed", Papuan.Speed);
     Papuan.TargetSlote = Papuan.TargetGate.GetSlote();
     Papuan.SetTargetEnemy(null);
 }
 public override void Update()
 {
     Papuan.Move((Papuan.TargetSlote.transform.position - Papuan.transform.position).normalized);
 }
Beispiel #26
0
 public PapuanState(Papuan papuan)
 {
     Papuan = papuan;
 }
 public PapuanWaitingTransition(Papuan papuan, PapuanState targetState, float delay) : base(papuan, targetState)
 {
     _delay = delay;
 }
Beispiel #28
0
 public PapuanStandingInGateSlote(Papuan papuan) : base(papuan)
 {
 }
 public PapuanSeePlayerTransition(Papuan papuan, PapuanState targetState) : base(papuan, targetState)
 {
 }
Beispiel #30
0
 public override void Update()
 {
     Papuan.RotateTo(Papuan.TargetEnemy.transform.position - Papuan.transform.position);
 }