public override void Update() { if (Papuan.TargetEnemy != null) { Papuan.Move((Papuan.TargetEnemy.transform.position - Papuan.transform.position).normalized); } }
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); } }
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); } }
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; }
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); }
public PapuanLookForEmptySloteState(Papuan papuan) : base(papuan) { }
public PapuanGateSloteDistanceTransition(Papuan papuan, PapuanState papuanState, float distance) : base(papuan, papuanState) { _distance = distance; }
public PapuanLookAtPlayerState(Papuan papuan) : base(papuan) { }
public PapuanMoveToGateSloteState(Papuan papuan) : base(papuan) { }
public PapuanEmptySloteTransition(Papuan papuan, PapuanState targetState) : base(papuan, targetState) { }
public PapuanAttackedTransition(Papuan papuan, PapuanState targetState) : base(papuan, targetState) { }
public PapuanAttackGateState(Papuan papuan, float attackDelay) : base(papuan, attackDelay) { }
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)); }
public AttackState(Papuan papuan, float attackDelay) : base(papuan) { _attackDelay = attackDelay; }
public AttackBackState(Papuan papuan) : base(papuan) { }
public PapuanTransition(Papuan papuan, PapuanState targetState) { Papuan = papuan; TargetState = targetState; }
public PapuanIdleState(Papuan papuan) : base(papuan) { }
public PapuanStopedAttackGateState(Papuan papuan) : base(papuan) { }
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); }
public PapuanState(Papuan papuan) { Papuan = papuan; }
public PapuanWaitingTransition(Papuan papuan, PapuanState targetState, float delay) : base(papuan, targetState) { _delay = delay; }
public PapuanStandingInGateSlote(Papuan papuan) : base(papuan) { }
public PapuanSeePlayerTransition(Papuan papuan, PapuanState targetState) : base(papuan, targetState) { }
public override void Update() { Papuan.RotateTo(Papuan.TargetEnemy.transform.position - Papuan.transform.position); }