IEnumerator MovingHands(bool left, ClimbPoint destination) { AssignIKTarget(left, destination); yield return(new WaitForSeconds(moveHandsWait)); AssignIKTarget(!left, destination); }
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; } }
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); } }
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; } } } } } }
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; }
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); }
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); }
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); }
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; }
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; } }
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; } } } }