示例#1
0
    protected void SetAnimation(Enums.ManStates state)
    {
        switch (state)
        {
        case Enums.ManStates.Idle:
            if (!_Animator.GetCurrentAnimatorStateInfo(0).IsName("Idle"))
            {
                _Animator.SetTrigger("IdleTrigger");
            }
            break;

        case Enums.ManStates.RotatingToPlayer:
            if (!_Animator.GetCurrentAnimatorStateInfo(0).IsName("Idle"))
            {
                _Animator.SetTrigger("IdleTrigger");
            }
            break;

        case Enums.ManStates.Running:
            if (!_Animator.GetCurrentAnimatorStateInfo(0).IsName("Running"))
            {
                _Animator.SetTrigger("RunningTrigger");
            }
            break;

        case Enums.ManStates.Waiting:
            if (!_Animator.GetCurrentAnimatorStateInfo(0).IsName("Idle"))
            {
                _Animator.SetTrigger("IdleTrigger");
            }
            break;
        }
    }
示例#2
0
    private IEnumerator WaitForSeconds(float seconds)
    {
        _State = Enums.ManStates.Waiting;
        SetAnimation(_State);
        yield return(new WaitForSeconds(seconds));

        _State = Enums.ManStates.None; // Will trigger next action
    }
示例#3
0
    private void RotateToOrientation()
    {
        transform.rotation = Quaternion.Slerp(transform.rotation, _TargetRot, 0.10f);

        if (Mathf.Abs(transform.rotation.eulerAngles.y - _TargetRot.eulerAngles.y) < 1.0f)
        {
            transform.rotation = _TargetRot;
            _State             = Enums.ManStates.None; // Will trigger next action
        }
    }
示例#4
0
    private void FaceTowardsPlayer()
    {
        Quaternion TargetRotation = Quaternion.Euler(0, 180, 0);

        transform.rotation = Quaternion.Slerp(transform.rotation, TargetRotation, 0.10f);

        if (Mathf.Abs(transform.rotation.eulerAngles.y - TargetRotation.eulerAngles.y) < 1.0f)
        {
            transform.rotation = TargetRotation;
            _State             = Enums.ManStates.None; // Will trigger next action
        }
    }
示例#5
0
    private void DoMovement(float movementSpeed)
    {
        float Distance = Vector3.Distance(transform.position, _TargetPos);
        float Travel   = movementSpeed * Time.deltaTime;

        if (Travel > Distance) // Target reached
        {
            transform.position = _TargetPos;
            _State             = Enums.ManStates.None; // Will trigger next action
            return;
        }
        else // Regular movement
        {
            Vector3 DeltaPos = (_TargetPos - transform.position);
            DeltaPos.Normalize();
            transform.position += (DeltaPos * Travel);
            FaceTowardsWaypoint(DeltaPos);
        }
    }
示例#6
0
 private void SetFaceTowardsPlayer()
 {
     _State = Enums.ManStates.RotatingToPlayer;
     SetAnimation(_State);
 }
示例#7
0
 protected void SetRotateToOrientation(Enums.ManStates state, Quaternion rotation)
 {
     _State     = state;
     _TargetRot = rotation;
     //SetAnimation(_State);
 }
示例#8
0
 protected void SetMoveToPosition(Enums.ManStates state, Vector3 position)
 {
     _State     = state;
     _TargetPos = position;
     SetAnimation(_State);
 }
示例#9
0
 // The working state can be of different animations, dependent on room (idle, working, ...)
 public void Add_WorkingAction_ToList(Enums.ManStates manState)
 {
     _ActionList.Enqueue(new ActionData(() => SetAnimation(manState)));
 }