예제 #1
0
    public override void UpdateState()
    {
        if (EnteredState)
        {
            _totalTime += Time.deltaTime;

            if (FairyCharacter.PlayerNearby())
            {
                Fsm.EnterState(FsmStateType.Chase);
            }

            if (_totalTime >= _idleDuration)
            {
                Fsm.EnterState(FsmStateType.Patrol);
            }
        }
    }
예제 #2
0
    public override void UpdateState()
    {
        if (EnteredState)
        {
            if (FairyCharacter.PlayerNearby())
            {
                Fsm.EnterState(FsmStateType.Chase);
            }

            if (_cornerIndex <= _pathCorners.Length - 1)
            {
                // Get the next movement vector, and if true then the corner will be reached
                if (FairyOperations.GetNextPosition(_pathCorners[_cornerIndex], FairyCharacter.GroundCheck.transform.position, FairyCharacter.MovementSpeed, out Vector3 nextMovement))
                {
                    // Prepare to move to next corner on next update
                    if (_cornerIndex <= _pathCorners.Length - 1)
                    {
                        _cornerIndex += 1;
                    }
                }

                // Move towards the new position and look towards it too
                FairyCharacter.transform.position += nextMovement;

                Vector3 nextLook = new Vector3(nextMovement.x, 0, nextMovement.z);
                if (!nextLook.Equals(new Vector3(0, 0, 0)))
                {
                    FairyCharacter.transform.rotation = Quaternion.LookRotation(nextLook);
                }
            }

            // Check if the enemy should stop
            if (_cornerIndex >= _pathCorners.Length)
            {
                Fsm.EnterState(FsmStateType.Idle);
            }
        }
    }
예제 #3
0
    public override void UpdateState()
    {
        if (EnteredState)
        {
            if (FairyCharacter.PlayerVisible())
            {
                _fireTimer += Time.deltaTime;

                FairyCharacter.transform.rotation = FairyOperations.TurnTowardPlayer(FairyCharacter.transform, FairyCharacter.Player.transform);

                if ((_fireTimer >= _firingRate) && (FairyCharacter.Fire()))
                {
                    FairyCharacter.ChargeAnimationControl.StopChargeAnimation();
                    Fsm.EnterState(FsmStateType.Chase);
                }
            }
            else
            {
                FairyCharacter.ChargeAnimationControl.StopChargeAnimation();
                Fsm.EnterState(FsmStateType.Chase);
            }
        }
    }