public override IKData IK() { IKData data = new IKData(); bool left = (wallDir == -1); if (Physics.Raycast(transform.position + (transform.right * wallDir * player.info.radius), transform.right * wallDir, out var hit, player.info.halfradius, wallrunLayer)) { data.handPos = hit.point; } if (left) { data.armLocalPos.x = -0.35f; data.armLocalPos.z = -0.55f; data.handPos += (Vector3.up + wallNormal) * player.info.radius * 2f; data.handEulerAngles = Quaternion.LookRotation(wallNormal, wallDir * Vector3.Cross(wallNormal, Vector3.up)).eulerAngles; data.armElbowPos = data.handPos - wallNormal; } else { data.armElbowPos = data.handPos; data.armLocalPos.x = 0; data.armLocalPos.z = -0.325f; data.handPos += (2 * Vector3.up + wallNormal) * player.info.radius; data.handEulerAngles = Quaternion.LookRotation(Vector3.up, wallDir * Vector3.Cross(wallNormal, Vector3.up)).eulerAngles; } data.armLocalPos.y = 0; return(data); }
void ActivateCombatIK(string data) { string[] args = PEUtil.ToArrayString(data, '|'); string[] datas = PETools.PEUtil.ToArrayString(args[1], ','); foreach (string item in datas) { Transform tr = PETools.PEUtil.GetChild(transform, item); if (tr != null) { CCDIK ik = tr.GetComponent <CCDIK>(); if (ik != null) { IKData ikData = m_IKDataList.Find(ret => ret.ik == ik); if (ikData == null) { IKData newIKData = new IKData(); newIKData.ik = ik; newIKData.limit = newIKData.ik.GetComponent <IKCombatLimit>(); newIKData.target = GetIKTransform(); newIKData.curve = args[0]; //newIKData.ik.solver.target = GetIKTransform(GetTarget()); //newIKData.ik.solver.SetIKPosition(GetIKPosition(newIKData)); m_IKDataList.Add(newIKData); } } } } }
public override IKData IK() { IKData data = new IKData(); data.handPos = vaultOver + (Vector3.up * player.info.radius); data.handEulerAngles = Quaternion.LookRotation(vaultDir - Vector3.up).eulerAngles; data.armElbowPos = vaultOver; data.armElbowPos.y = transform.position.y; data.armElbowPos += Vector3.Cross(vaultDir, Vector3.up) * player.info.radius; return data; }
private void Start() { if (instance != null) { return; } iks = JsonUtility.FromJson <data>(Resources.Load <TextAsset>("ikdata").text); instance = this; }
IKData VaultIK() { IKData data = new IKData(); data.handPos = vaultOver + (Vector3.up * radius); data.handEulerAngles = Quaternion.LookRotation(vaultDir - Vector3.up).eulerAngles; data.armElbowPos = vaultOver; data.armElbowPos.y = transform.position.y; data.armElbowPos += Vector3.Cross(vaultDir, Vector3.up) * radius; return(data); }
IKData ClimbingLedgeIK() { IKData data = new IKData(); Vector3 dir = (pushFrom - transform.position).normalized; data.handPos = pushFrom; data.handEulerAngles = Quaternion.LookRotation(dir).eulerAngles; data.armElbowPos = transform.position; data.armElbowPos += Vector3.Cross(dir, Vector3.up) * radius; data.armElbowPos.z = transform.position.z; return(data); }
IKData SlideIK() { IKData data = new IKData(); Vector3 dir = Vector3.Cross(slideDir, Vector3.up); if (Physics.Raycast(transform.position + ((slideDir + dir) * radius), -Vector3.up, out var hit, 1f)) { groundPos = hit.point; } data.handPos = groundPos; data.handEulerAngles = Quaternion.LookRotation(dir, Vector3.up).eulerAngles; data.armElbowPos = transform.position - ((transform.right - Vector3.up) * radius); data.armLocalPos.x = -0.35f; return(data); }
public void Attach(bool disparentHands = true, IKFixer optional = null) { if (optional == null) { optional = transform.root.GetComponent <IKFixer>(); } if (optional == null) { return; } lastIK = optional; /* * DISPARENT HANDS, USED FOR WEAPONS * */ if (disparentHands) { IKData.IK getIK = IKData.GetItemIK(lastIK.PlayerClass, gameObject.name); transform.localPosition = getIK.objLocalPosition; transform.localEulerAngles = getIK.objLocalEulerAngles; transform.localScale = getIK.objLocalScale; if (IKLeft != null) { IKLeft.localPosition = getIK.leftHandPosition; IKLeft.localEulerAngles = getIK.leftHandEulerAngles; IKLeft.SetParent(transform.parent); } if (IKRight != null) { IKRight.localPosition = getIK.rightHandPosition; IKRight.localEulerAngles = getIK.rightHandEulerAngles; IKRight.SetParent(transform.parent); } handsDisparented = true; } /* * */ optional.attachLeft = IKLeft; optional.attachRight = IKRight; }
public override IKData IK() { IKData data = new IKData(); if (grabLedge == null) { return(data); } Vector3 dir = (grabLedge.pushFrom - transform.position).normalized; data.handPos = grabLedge.pushFrom; data.handEulerAngles = Quaternion.LookRotation(dir).eulerAngles; data.armElbowPos = transform.position; data.armElbowPos += Vector3.Cross(dir, Vector3.up) * player.info.radius; data.armElbowPos.z = transform.position.z; return(data); }
Vector3 GetIKPosition(IKData ikData) { Vector3 dir = ikData.target.position - ikData.ik.transform.position; //Vector3 axis = ikData.limit.transform.TransformDirection(ikData.limit.axis); Vector3 axis = ikData.limit.pivot; float angle = Vector3.Angle(axis, dir); if (angle > ikData.limit.limit) { Vector3 tmpAxis = Vector3.Cross(axis, dir); Vector3 tmpDir = Quaternion.AngleAxis(ikData.limit.limit, tmpAxis) * axis; return(ikData.limit.transform.position + tmpDir.normalized * ikData.limit.distance); } else { return(ikData.target.position); } }
IKData GrabbedLedgeIK() { IKData data = new IKData(); Vector3 dir = (pushFrom - transform.position); dir.y = 0; dir = dir.normalized; float handRadius = 0.125f; data.handPos = transform.position; data.handPos.y = pushFrom.y; data.handPos += dir * (radius + handRadius); Vector3 handDir = -Vector3.Cross(dir, Vector3.up); data.armElbowPos = (data.handPos - (handDir * radius)); data.handEulerAngles = Quaternion.LookRotation(handDir).eulerAngles; data.armLocalPos.y = 0.075f; data.armLocalPos.z = -0.5f; return(data); }
IKData LadderIK() { IKData data = new IKData(); Vector3 upOffset = Vector3.up * radius * 2f; Vector3 handUp = Vector3.Cross(ladderNormal, Vector3.up); if (Physics.SphereCast(transform.position + upOffset, radius, ladderNormal, out var hit, 0.125f, ladderLayer)) { if (Physics.SphereCast(hit.point + handUp, 0.125f, -handUp, out var hit2, 1.125f, ladderLayer)) { lastTouch = hit2.point - (ladderNormal * 0.125f); } } lastTouch.y = (int)(lastTouch.y * 2f) / 2f; data.handPos = lastTouch; data.handEulerAngles = Quaternion.LookRotation(ladderNormal, handUp).eulerAngles; data.armElbowPos = transform.position + handUp * radius; data.armLocalPos.x = -0.35f; return(data); }
void DeactivateCombatIK(string data) { string[] args = PEUtil.ToArrayString(data, '|'); string[] datas = PETools.PEUtil.ToArrayString(args[1], ','); foreach (string item in datas) { Transform tr = PETools.PEUtil.GetChild(transform, item); if (tr != null) { CCDIK ik = tr.GetComponent <CCDIK>(); if (ik != null) { IKData ikData = m_IKDataList.Find(ret => ret.ik == ik); if (ikData != null) { ikData.ik.solver.target = null; m_IKDataList.Remove(ikData); } } } } }
public override IKData IK() { IKData data = new IKData(); float onWater = getWaterLevel() + (player.info.halfheight / 2f); Vector3 adjust = (transform.forward - transform.right) * player.info.radius; data.handPos = transform.position + adjust; data.handPos.y = onWater; float time = Mathf.Repeat(Time.time * Mathf.PI, Mathf.PI * 2); Vector3 animate = (new Vector3(Mathf.Sin(time), 0, -Mathf.Cos(time)) * player.info.radius) / Mathf.PI; data.handPos += animate; data.handEulerAngles = transform.eulerAngles; adjust = (-transform.forward - transform.right) * player.info.radius; data.armElbowPos = transform.position + adjust * 2f; data.armElbowPos.y = onWater - player.info.radius; data.armLocalPos.x -= player.info.radius; return(data); }
private void Update() { if (SaveIKSetting) { SaveIKSetting = false; if (IKLeft != null) { IKLeft.SetParent(transform); } if (IKRight != null) { IKRight.SetParent(transform); } IKData.SaveItemIK(transform.root.GetComponent <IKFixer>().PlayerClass, gameObject.name, transform.localPosition, transform.localEulerAngles, transform.localScale, (IKLeft == null) ? Vector3.zero : IKLeft.localPosition, (IKLeft == null) ? Vector3.zero : IKLeft.localEulerAngles, (IKRight == null) ? Vector3.zero : IKRight.localPosition, (IKRight == null) ? Vector3.zero : IKRight.localEulerAngles ); if (IKLeft != null) { IKLeft.SetParent(transform.parent); } if (IKRight != null) { IKRight.SetParent(transform.parent); } } }
public virtual IKData IK() { IKData data = new IKData(); return(data); }
internal DbIkConstraint(IKData ik) { this.ik = ik; }
public void ComputeKinematic(IKData ik) { ik.weight = Mathf.Clamp01(ik.weight); ComputeKinematic(ik.bones, ik.buffer, ik.boneAngleLimit, ik.target, ik.weight, ik.lastComputed, ik.speed, ik.lookAtFix); }
private void Update() { if (guns == null) { return; } currentGun = guns.SelectedGun(); int gunControllerStatus = (int)guns.status; //If we are Reloading, Aiming, Swapping, or Taking Out a gun if ((currentGun != null && currentGun.status == GunHandler.GunStatus.reloading) || (gunControllerStatus >= 1 && gunControllerStatus <= 3)) { UpdateStatus(IKStatus.weaponIK); } else { int playerControllerStatus = (int)playerStatus; if (playerControllerStatus == 11) //underwater swimming { UpdateStatus(IKStatus.animatedIK); } else if (playerControllerStatus >= 4 && playerControllerStatus <= 10) //sliding, climbingLadder, wallRunning, vaulting, grabbedLedge, climbingLedge, or surface swimming { UpdateStatus(IKStatus.lockedIK); } else { UpdateStatus(IKStatus.weaponIK); } } IKData lockedIK = null; TransformData data = new TransformData(player.transform); if (IKStatus == IKStatus.lockedIK && lockedData != null) { data = (lockedIK = lockedData.Invoke()).HandData(); } TransformHelper.LerpTransform(lockedIKTarget, data, 16f); switch (IKStatus) { case IKStatus.weaponIK: if (currentGun != null && guns.status != GunController.GunControlStatus.swapping) { UpdateTarget(currentGun.handIKTarget); } Vector3 armAimPos = defaultArmPos; armAimPos.z = guns.isAiming() ? aimArmZ : defaultArmPos.z; armIK.transform.localPosition = Vector3.Lerp(armIK.transform.localPosition, armAimPos, Time.deltaTime * 12f); armIK.elbow.localPosition = Vector3.Lerp(armIK.elbow.localPosition, defaultElbowPos, Time.deltaTime * 12f); break; case IKStatus.animatedIK: UpdateTarget(animatedIKTarget.transform); animatedIKTarget.SetInteger("playerStatus", (int)playerStatus); armIK.transform.localPosition = Vector3.Lerp(armIK.transform.localPosition, defaultArmPos, Time.deltaTime * 12f); armIK.elbow.localPosition = Vector3.Lerp(armIK.elbow.localPosition, defaultElbowPos, Time.deltaTime * 12f); break; case IKStatus.lockedIK: UpdateTarget(lockedIKTarget); if (lockedIK != null) { armIK.transform.localPosition = Vector3.Lerp(armIK.transform.localPosition, lockedIK.armLocalPos, Time.deltaTime * 12f); armIK.elbow.position = Vector3.Lerp(armIK.elbow.position, lockedIK.armElbowPos, Time.deltaTime * 12f); } break; } }