Beispiel #1
0
            IEnumerator MovingHands(bool left, ClimbPoint destination)
            {
                AssignIKTarget(left, destination);
                yield return(new WaitForSeconds(moveHandsWait));

                AssignIKTarget(!left, destination);
            }
Beispiel #2
0
 void AssignTarget(ClimbDirection direction)
 {
     canMove     = false;
     targetPoint = GetDestination(direction);
     if (targetPoint != null)
     {
         //General Movement
         AssignMovePoints(this.transform, targetPoint);
         //IK
         if (direction == ClimbDirection.Down || direction == ClimbDirection.Left)
         {
             StartCoroutine(MovingHands(true, targetPoint.GetComponent <ClimbPoint>()));
         }
         else
         {
             StartCoroutine(MovingHands(false, targetPoint.GetComponent <ClimbPoint>()));
         }
         if (GetTransition(direction) == ClimbTransitionType.dismount)
         {
             autoDismount = true;
         }
         current = targetPoint.GetComponent <ClimbPoint>();
     }
     else
     {
         canMove = true;
     }
 }
Beispiel #3
0
 public void InitClimbing()
 {
     if (enableWhenClimbing != null)
     {
         foreach (GameObject targetObj in enableWhenClimbing)
         {
             targetObj.SetActive(true);
         }
     }
     if (disableWhenClimbing != null)
     {
         foreach (GameObject targetObj in disableWhenClimbing)
         {
             targetObj.SetActive(false);
         }
     }
     current = GetClosestClimbPoint();
     if (current != null)
     {
         climbSpeed = initClimbSpeed;
         AssignInitialIKTarget(current.GetComponent <ClimbPoint>());
         AssignMovePoints(this.transform, current.transform);
         SetCameraRotationPoints(true, current.transform);
         StartCoroutine(EnableClimbing());
         moveController.enabled = false;
         swimController.enabled = false;
         SetClimbAnimation(true);
         enableIK = true;
         weaponManager.canEquipWeapons = false;
         weaponManager.SelectWeapon(0);
     }
 }
Beispiel #4
0
 private void OnTriggerStay(Collider other)
 {
     if (!characterStatus.onWall)
     {
         if (other.tag.Equals("Helper"))
         {
             if (!characterStatus.isGround && !fall)
             {
                 ClimbStarter starter;
                 if (MyGetComponent(other.gameObject, out starter))
                 {
                     Vector3 dir = starter.point.transform.position - transform.position;
                     dir.y = 0;
                     if (Vector3.Angle(transform.forward, dir) < 100)
                     {
                         key = true;
                         characterInventory.DestroyWeapon();
                         characterInventory.SelectWeaponAction(3);
                         currentPoint           = starter.point;
                         transform.parent       = currentPoint.transform;
                         characterStatus.onWall = true;
                         currentSpeed           = speed;
                         move = 1;
                         anim.SetFloat("JumpLeg", 0);
                         anim.SetBool("OnGround", false);
                         anim.SetBool("OnWall", true);
                         transform.rotation = currentPoint.transform.rotation;
                     }
                 }
             }
         }
     }
 }
Beispiel #5
0
            void AssignInitialIKTarget(ClimbPoint destination)
            {
                ClearIKTargets();
                ClearIKStarts();
                ClearIKFinals();
                ClearIKLengths();
                ClearIKStartTimes();
                AssignInitialTransforms();

                //Assign Starts
                lhTarget_start = current.transform.FindChild("Hands").transform;
                leTarget_start = current.transform.FindChild("Hands").transform;
                lkTarget_start = current.transform.FindChild("Feet").transform;
                lfTarget_start = current.transform.FindChild("Feet").transform;

                rhTarget_start = current.transform.FindChild("Hands").transform;
                reTarget_start = current.transform.FindChild("Hands").transform;
                rkTarget_start = current.transform.FindChild("Feet").transform;
                rfTarget_start = current.transform.FindChild("Feet").transform;

                //Assign the start value at the start point
                lhTarget.position = lhTarget_start.position;
                leTarget.position = leTarget_start.position;
                lkTarget.position = lkTarget_start.position;
                lfTarget.position = lfTarget_start.position;

                rhTarget.position = rhTarget_start.position;
                reTarget.position = reTarget_start.position;
                rkTarget.position = rkTarget_start.position;
                rfTarget.position = rfTarget_start.position;

                //Assign Finals
                lhTarget_final = GetIKGoalTransform(AvatarIKGoal.LeftHand, destination);
                lfTarget_final = GetIKGoalTransform(AvatarIKGoal.LeftFoot, destination);
                leTarget_final = GetIKHintTransform(AvatarIKHint.LeftElbow, destination);
                lkTarget_final = GetIKHintTransform(AvatarIKHint.LeftKnee, destination);

                rhTarget_final = GetIKGoalTransform(AvatarIKGoal.RightHand, destination);
                rfTarget_final = GetIKGoalTransform(AvatarIKGoal.RightFoot, destination);
                reTarget_final = GetIKHintTransform(AvatarIKHint.RightElbow, destination);
                rkTarget_final = GetIKHintTransform(AvatarIKHint.RightKnee, destination);

                //Assign Lengths
                lhLength = Vector3.Distance(lhTarget_start.position, lhTarget_final.position);
                rhLength = Vector3.Distance(rhTarget_start.position, rhTarget_final.position);
                lfLength = Vector3.Distance(lfTarget_start.position, lfTarget_final.position);
                rfLength = Vector3.Distance(rfTarget_start.position, rfTarget_final.position);

                leLength = Vector3.Distance(leTarget_start.position, leTarget_final.position);
                reLength = Vector3.Distance(reTarget_start.position, reTarget_final.position);
                lkLength = Vector3.Distance(lkTarget_start.position, lkTarget_final.position);
                rkLength = Vector3.Distance(rkTarget_start.position, rkTarget_final.position);

                //Set Start Times
                left_ikstartTime  = Time.time;
                right_ikstartTime = Time.time;
            }
Beispiel #6
0
 public void ResetAll()
 {
     characterStatus.onWall   = false;
     characterStatus.isGround = true;
     fall             = false;
     currentPoint     = null;
     transform.parent = null;
     move             = 0;
     anim.SetBool("OnWall", false);
     anim.SetBool("OnGround", true);
 }
Beispiel #7
0
            Transform GetIKHintTransform(AvatarIKHint ik, ClimbPoint target)
            {
                Transform retVal = null;

                foreach (ClimbHintIKPositions point in target.hints)
                {
                    if (point.hintType == ik)
                    {
                        retVal = point.target;
                        break;
                    }
                }
                return(retVal);
            }
Beispiel #8
0
            Transform GetIKGoalTransform(AvatarIKGoal ik, ClimbPoint target)
            {
                Transform retVal = null;

                foreach (ClimbIKPositions point in target.iks)
                {
                    if (point.ikType == ik)
                    {
                        retVal = point.target;
                        break;
                    }
                }
                return(retVal);
            }
Beispiel #9
0
 public void Dismount()
 {
     canMove      = false;
     dismountWait = 0.0f;
     autoDismount = false;
     SetCameraRotationPoints(false);
     SetClimbAnimation(false);
     current  = null;
     enableIK = false;
     DestroyAllTempObjects();
     moveController.enabled        = true;
     swimController.enabled        = true;
     weaponManager.canEquipWeapons = true;
 }
Beispiel #10
0
 void AssignIKTarget(bool left, ClimbPoint destination)
 {
     if (left == true)
     {
         //Assign Left Initial Positions
         lhTarget_start = current.transform.FindChild("Hands").transform; //lhTarget[i];
         leTarget_start = current.transform.FindChild("Hands").transform; //leTarget[i];
         lfTarget_start = current.transform.FindChild("Feet").transform;  //lfTarget[i];
         lkTarget_start = current.transform.FindChild("Feet").transform;  //lkTarget[i];
         //Assign Left Final Positions
         lhTarget_final = GetIKGoalTransform(AvatarIKGoal.LeftHand, destination);
         lfTarget_final = GetIKGoalTransform(AvatarIKGoal.LeftFoot, destination);
         leTarget_final = GetIKHintTransform(AvatarIKHint.LeftElbow, destination);
         lkTarget_final = GetIKHintTransform(AvatarIKHint.LeftKnee, destination);
         //Assign travel length
         lhLength = Vector3.Distance(lhTarget_start.position, lhTarget_final.position);
         lfLength = Vector3.Distance(lfTarget_start.position, lfTarget_final.position);
         leLength = Vector3.Distance(leTarget_start.position, leTarget_final.position);
         lkLength = Vector3.Distance(lkTarget_start.position, lkTarget_final.position);
         //Set the start times
         left_ikstartTime = Time.time;
     }
     else
     {
         //Assign Right Initial Positions
         rhTarget_start = rhTarget;
         rfTarget_start = rfTarget;
         reTarget_start = reTarget;
         rkTarget_start = rkTarget;
         //Assign Right Final Positions
         rhTarget_final = GetIKGoalTransform(AvatarIKGoal.RightHand, destination);
         rfTarget_final = GetIKGoalTransform(AvatarIKGoal.RightFoot, destination);
         reTarget_final = GetIKHintTransform(AvatarIKHint.RightElbow, destination);
         rkTarget_final = GetIKHintTransform(AvatarIKHint.RightKnee, destination);
         //Assign travel length
         rhLength = Vector3.Distance(rhTarget_start.position, rhTarget_final.position);
         rfLength = Vector3.Distance(rfTarget_start.position, rfTarget_final.position);
         reLength = Vector3.Distance(reTarget_start.position, reTarget_final.position);
         rkLength = Vector3.Distance(rkTarget_start.position, rkTarget_final.position);
         //Set the start times
         right_ikstartTime = Time.time;
     }
 }
Beispiel #11
0
    void Update()
    {
        if (fall)
        {
            if (characterStatus.isGround)
            {
                fall = false;
                anim.SetTrigger("ChangeWeapon");
            }
        }
        if (characterStatus.onWall)
        {
            if (debug)
            {
                transform.localPosition = animPosError;
                transform.rotation      = currentPoint.transform.rotation;
                return;
            }

            if (Input.GetKeyDown(KeyCode.Space))
            {
                fall = true;
                characterStatus.onWall = false;
                currentPoint           = null;
                transform.parent       = null;
                move = 0;
                anim.SetBool("OnWall", false);
                cameraHandler.StaticCam = false;
            }

            if (move == 1)
            {
                MoveToSimplePoint();
            }
            else if (move == 2)
            {
                MoveToFinalePoint();
            }
            else if (key)
            {
                if (Input.GetKeyDown(KeyCode.W))
                {
                    if (currentPoint.up != null)
                    {
                        currentPoint     = currentPoint.up;
                        transform.parent = currentPoint.transform;
                        if (currentPoint.climbType == ClimbType.Final)
                        {
                            anim.SetBool("FinalClimb", true);
                            anim.SetBool("OnWall", false);
                            anim.SetFloat("JumpLeg", -1);
                            fall         = true;
                            currentSpeed = speed / 10;
                            move         = 2;
                        }
                        else
                        {
                            anim.SetInteger("ClimbJump", 1);
                            currentSpeed = speed * 0.7f;
                            move         = 1;
                        }
                    }
                    key = false;
                    Invoke("Return", 0.7f);
                    return;
                }
                if (Input.GetKeyDown(KeyCode.S))
                {
                    if (currentPoint.down != null)
                    {
                        currentPoint     = currentPoint.down;
                        transform.parent = currentPoint.transform;
                        anim.SetInteger("ClimbJump", -1);
                        currentSpeed = speed * 0.7f;
                        move         = 1;
                    }
                    key = false;
                    Invoke("Return", 0.7f);
                    return;
                }
                if (Input.GetKeyDown(KeyCode.D))
                {
                    if (currentPoint.right != null)
                    {
                        anim.SetFloat("Xstate", 1);
                        currentPoint     = currentPoint.right;
                        transform.parent = currentPoint.transform;
                        currentSpeed     = speed;
                        move             = 1;
                    }
                    key = false;
                    Invoke("Return", 0.7f);
                    return;
                }
                if (Input.GetKeyDown(KeyCode.A))
                {
                    if (currentPoint.left != null)
                    {
                        anim.SetFloat("Xstate", -1);
                        currentPoint     = currentPoint.left;
                        transform.parent = currentPoint.transform;
                        currentSpeed     = speed;
                        move             = 1;
                    }
                    key = false;
                    Invoke("Return", 0.7f);
                    return;
                }
            }
        }
    }