Esempio n. 1
0
    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);
    }
Esempio n. 2
0
    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);
                    }
                }
            }
        }
    }
Esempio n. 3
0
 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;
    }
Esempio n. 5
0
    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);
    }
Esempio n. 6
0
    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);
    }
Esempio n. 7
0
    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;
    }
Esempio n. 9
0
    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);
    }
Esempio n. 10
0
    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);
        }
    }
Esempio n. 11
0
    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);
    }
Esempio n. 12
0
    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);
    }
Esempio n. 13
0
    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);
                    }
                }
            }
        }
    }
Esempio n. 14
0
    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);
            }
        }
    }
Esempio n. 16
0
    public virtual IKData IK()
    {
        IKData data = new IKData();

        return(data);
    }
Esempio n. 17
0
 internal DbIkConstraint(IKData ik)
 {
     this.ik = ik;
 }
Esempio n. 18
0
 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);
 }
Esempio n. 19
0
    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;
        }
    }