コード例 #1
0
        private void RotateToAngle(NeckTypeStateVer2 param, int boneNum, NeckObjectVer2 bone)
        {
            var delta = new Vector2();

            delta.x = Mathf.DeltaAngle(0f, bone.neckBone.localEulerAngles.x);
            delta.y = Mathf.DeltaAngle(0f, bone.neckBone.localEulerAngles.y);
            angle  += delta;

            float x, y;

            if (TogglePOV.ClampRotation.Value)
            {
                var neckParam = param.aParam[boneNum];
                y = Mathf.Clamp(angle.y, neckParam.minBendingAngle, neckParam.maxBendingAngle);
                x = Mathf.Clamp(angle.x, neckParam.upBendingAngle, neckParam.downBendingAngle);
            }
            else
            {
                y = angle.y;
                x = angle.x;
            }

            angle -= new Vector2(x, y);
            float z = bone.neckBone.localEulerAngles.z;

            bone.neckBone.localRotation = Quaternion.Euler(x, y, z);
        }
コード例 #2
0
        private void RotateToAngle(NeckTypeStateVer2 param, int boneNum, NeckObjectVer2 bone)
        {
            Vector2 b = default(Vector2);

            b.x    = Mathf.DeltaAngle(0f, bone.neckBone.localEulerAngles.x);
            b.y    = Mathf.DeltaAngle(0f, bone.neckBone.localEulerAngles.y);
            angle += b;

            float x, y;

            if (clampRotation)
            {
                y = Mathf.Clamp(angle.y, param.aParam[boneNum].minBendingAngle, param.aParam[boneNum].maxBendingAngle);
                x = Mathf.Clamp(angle.x, param.aParam[boneNum].upBendingAngle, param.aParam[boneNum].downBendingAngle);
            }
            else
            {
                y = angle.y;
                x = angle.x;
            }

            angle -= new Vector2(x, y);
            float z = bone.neckBone.localEulerAngles.z;

            bone.neckBone.localRotation = Quaternion.Euler(x, y, z);
        }
コード例 #3
0
        private void UpdateCamera()
        {
            if (leftEye == null || rightEye == null)
            {
                Restore();
                return;
            }

            if (!CameraEnabled)
            {
                if (Input.GetMouseButton(1))
                {
                    GameCursor.Instance.SetCursorLock(true);
                    currentfov = Mathf.Clamp(currentfov + Input.GetAxis("Mouse X") * Time.deltaTime * 30f, 1f, MAXFOV);
                }
                else if (Input.GetMouseButton(0) && DragManager.allowCamera)
                {
                    GameCursor.Instance.SetCursorLock(true);
                    float rateaddspeed = 2.5f;
                    float num          = Input.GetAxis("Mouse X") * rateaddspeed;
                    float num2         = Input.GetAxis("Mouse Y") * rateaddspeed;
                    rot += new Vector2(-num2, num) * new Vector2(sensitivityX, sensitivityY).magnitude;
                }
                else
                {
                    GameCursor.Instance.SetCursorLock(false);
                }
            }

            if (Input.GetKeyDown(KeyCode.Semicolon))
            {
                currentfov = TogglePOV.DefaultFov.Value;
            }

            if (Input.GetKey(KeyCode.Equals))
            {
                currentfov = Mathf.Max(currentfov - Time.deltaTime * 15f, 1f);
            }
            else if (Input.GetKey(KeyCode.RightBracket))
            {
                currentfov = Mathf.Min(currentfov + Time.deltaTime * 15f, 100f);
            }

            if (Input.GetKeyDown(KeyCode.UpArrow))
            {
                offset = Mathf.Min(offset + 0.0005f, 2f);

                if (currentBody.sex == 0)
                {
                    MALE_OFFSET = offset;
                }
                else
                {
                    FEMALE_OFFSET = offset;
                }
            }
            else if (Input.GetKeyDown(KeyCode.DownArrow))
            {
                offset = Mathf.Max(offset - 0.0005f, -2f);

                if (currentBody.sex == 0)
                {
                    MALE_OFFSET = offset;
                }
                else
                {
                    FEMALE_OFFSET = offset;
                }
            }

            Camera.main.fieldOfView   = currentfov;
            Camera.main.nearClipPlane = nearClip;
            DepthOfField = false;
            Shield       = false;

            NeckLookControllerVer2 neckLookCtrl   = currentBody.neckLookCtrl;
            NeckLookCalcVer2       neckLookScript = neckLookCtrl.neckLookScript;
            NeckTypeStateVer2      param          = neckLookScript.neckTypeStates[neckLookCtrl.ptnNo];

            angle = new Vector2(rot.x, rot.y);
            for (int i = neckLookScript.aBones.Length - 1; i > -1; i--)
            {
                NeckObjectVer2 bone = neckLookScript.aBones[i];
                RotateToAngle(param, i, bone);
            }
        }
コード例 #4
0
 private void OnDrawGizmos()
 {
     if (Object.op_Implicit((Object)this.boneCalcAngle))
     {
         Gizmos.set_color(new Color(1f, 1f, 1f, 0.3f));
         if (this.neckTypeStates.Length > this.ptnDraw)
         {
             NeckTypeStateVer2 neckTypeState = this.neckTypeStates[this.ptnDraw];
             Gizmos.set_color(new Color(0.0f, 1f, 1f, 0.3f));
             Vector3 vector3_1 = Vector3.op_Addition(this.boneCalcAngle.TransformDirection(Vector3.op_Multiply(Quaternion.op_Multiply(Quaternion.Euler(0.0f, neckTypeState.hAngleLimit, 0.0f), Vector3.get_forward()), this.drawLineLength)), this.boneCalcAngle.get_position());
             Gizmos.DrawLine(this.boneCalcAngle.get_position(), vector3_1);
             Vector3 vector3_2 = Vector3.op_Addition(this.boneCalcAngle.TransformDirection(Vector3.op_Multiply(Quaternion.op_Multiply(Quaternion.Euler(0.0f, -neckTypeState.hAngleLimit, 0.0f), Vector3.get_forward()), this.drawLineLength)), this.boneCalcAngle.get_position());
             Gizmos.DrawLine(this.boneCalcAngle.get_position(), vector3_2);
             Vector3 vector3_3 = Vector3.op_Addition(this.boneCalcAngle.TransformDirection(Vector3.op_Multiply(Quaternion.op_Multiply(Quaternion.Euler(neckTypeState.vAngleLimit, 0.0f, 0.0f), Vector3.get_forward()), this.drawLineLength)), this.boneCalcAngle.get_position());
             Gizmos.DrawLine(this.boneCalcAngle.get_position(), vector3_3);
             Vector3 vector3_4 = Vector3.op_Addition(this.boneCalcAngle.TransformDirection(Vector3.op_Multiply(Quaternion.op_Multiply(Quaternion.Euler(-neckTypeState.vAngleLimit, 0.0f, 0.0f), Vector3.get_forward()), this.drawLineLength)), this.boneCalcAngle.get_position());
             Gizmos.DrawLine(this.boneCalcAngle.get_position(), vector3_4);
             Gizmos.DrawLine(vector3_1, vector3_4);
             Gizmos.DrawLine(vector3_4, vector3_2);
             Gizmos.DrawLine(vector3_2, vector3_3);
             Gizmos.DrawLine(vector3_3, vector3_1);
             if ((double)neckTypeState.limitBreakCorrectionValue != 0.0)
             {
                 Gizmos.set_color(new Color(1f, 1f, 0.0f, 0.3f));
                 Vector3 vector3_5 = Vector3.op_Addition(this.boneCalcAngle.TransformDirection(Vector3.op_Multiply(Quaternion.op_Multiply(Quaternion.Euler(0.0f, neckTypeState.hAngleLimit + neckTypeState.limitBreakCorrectionValue, 0.0f), Vector3.get_forward()), this.drawLineLength)), this.boneCalcAngle.get_position());
                 Gizmos.DrawLine(this.boneCalcAngle.get_position(), vector3_5);
                 Vector3 vector3_6 = Vector3.op_Addition(this.boneCalcAngle.TransformDirection(Vector3.op_Multiply(Quaternion.op_Multiply(Quaternion.Euler(0.0f, -neckTypeState.hAngleLimit - neckTypeState.limitBreakCorrectionValue, 0.0f), Vector3.get_forward()), this.drawLineLength)), this.boneCalcAngle.get_position());
                 Gizmos.DrawLine(this.boneCalcAngle.get_position(), vector3_6);
                 Vector3 vector3_7 = Vector3.op_Addition(this.boneCalcAngle.TransformDirection(Vector3.op_Multiply(Quaternion.op_Multiply(Quaternion.Euler(neckTypeState.vAngleLimit + neckTypeState.limitBreakCorrectionValue, 0.0f, 0.0f), Vector3.get_forward()), this.drawLineLength)), this.boneCalcAngle.get_position());
                 Gizmos.DrawLine(this.boneCalcAngle.get_position(), vector3_7);
                 Vector3 vector3_8 = Vector3.op_Addition(this.boneCalcAngle.TransformDirection(Vector3.op_Multiply(Quaternion.op_Multiply(Quaternion.Euler(-neckTypeState.vAngleLimit - neckTypeState.limitBreakCorrectionValue, 0.0f, 0.0f), Vector3.get_forward()), this.drawLineLength)), this.boneCalcAngle.get_position());
                 Gizmos.DrawLine(this.boneCalcAngle.get_position(), vector3_8);
                 Gizmos.DrawLine(vector3_5, vector3_8);
                 Gizmos.DrawLine(vector3_8, vector3_6);
                 Gizmos.DrawLine(vector3_6, vector3_7);
                 Gizmos.DrawLine(vector3_7, vector3_5);
             }
             Gizmos.set_color(new Color(1f, 0.0f, 1f, 0.8f));
             float num1 = 0.0f;
             for (int index = 0; index < neckTypeState.aParam.Length; ++index)
             {
                 num1 += neckTypeState.aParam[index].maxBendingAngle;
             }
             Vector3 vector3_9 = Vector3.op_Addition(this.boneCalcAngle.TransformDirection(Vector3.op_Multiply(Quaternion.op_Multiply(Quaternion.Euler(0.0f, num1, 0.0f), Vector3.get_forward()), this.drawLineLength)), this.boneCalcAngle.get_position());
             Gizmos.DrawLine(this.boneCalcAngle.get_position(), vector3_9);
             Vector3 vector3_10 = Vector3.op_Addition(this.boneCalcAngle.TransformDirection(Vector3.op_Multiply(Quaternion.op_Multiply(Quaternion.Euler(0.0f, num1 - neckTypeState.limitAway, 0.0f), Vector3.get_forward()), this.drawLineLength)), this.boneCalcAngle.get_position());
             Gizmos.DrawLine(this.boneCalcAngle.get_position(), vector3_10);
             Gizmos.DrawLine(vector3_9, vector3_10);
             float num2 = 0.0f;
             for (int index = 0; index < neckTypeState.aParam.Length; ++index)
             {
                 num2 += neckTypeState.aParam[index].minBendingAngle;
             }
             Vector3 vector3_11 = Vector3.op_Addition(this.boneCalcAngle.TransformDirection(Vector3.op_Multiply(Quaternion.op_Multiply(Quaternion.Euler(0.0f, num2, 0.0f), Vector3.get_forward()), this.drawLineLength)), this.boneCalcAngle.get_position());
             Gizmos.DrawLine(this.boneCalcAngle.get_position(), vector3_11);
             Vector3 vector3_12 = Vector3.op_Addition(this.boneCalcAngle.TransformDirection(Vector3.op_Multiply(Quaternion.op_Multiply(Quaternion.Euler(0.0f, num2 + neckTypeState.limitAway, 0.0f), Vector3.get_forward()), this.drawLineLength)), this.boneCalcAngle.get_position());
             Gizmos.DrawLine(this.boneCalcAngle.get_position(), vector3_12);
             Gizmos.DrawLine(vector3_11, vector3_12);
         }
     }
     Gizmos.set_color(Color.get_white());
 }
コード例 #5
0
    public void NeckUpdateCalc(Vector3 target, int ptnNo, bool _isUseBackUpPos = false)
    {
        if (!this.initEnd)
        {
            return;
        }
        this.nowPtnNo = ptnNo;
        if (!this.isEnabled || !this.skipCalc && (double)Time.get_deltaTime() == 0.0)
        {
            return;
        }
        NeckTypeStateVer2 neckTypeState = this.neckTypeStates[this.nowPtnNo];

        if (!_isUseBackUpPos)
        {
            this.backupPos = target;
        }
        if (neckTypeState.aParam.Length != this.aBones.Length)
        {
            Debug.LogWarning((object)"パラメーターの個数と骨の個数が合っていない");
        }
        else
        {
            if (this.skipCalc)
            {
                this.changeTypeTimer = this.changeTypeLeapTime;
            }
            this.changeTypeTimer = Mathf.Clamp(this.changeTypeTimer + Time.get_deltaTime(), 0.0f, this.changeTypeLeapTime);
            float num1 = Mathf.InverseLerp(0.0f, this.changeTypeLeapTime, this.changeTypeTimer);
            if (this.changeTypeLerpCurve != null)
            {
                num1 = this.changeTypeLerpCurve.Evaluate(num1);
            }
            if (neckTypeState.lookType == NECK_LOOK_TYPE_VER2.ANIMATION)
            {
                for (int index = 0; index < this.aBones.Length; ++index)
                {
                    this.aBones[index].fixAngle = this.aBones[index].neckBone.get_localRotation();
                    this.aBones[index].neckBone.set_localRotation(Quaternion.Slerp(this.aBones[index].fixAngleBackup, this.aBones[index].fixAngle, num1));
                    if (Object.op_Inequality((Object)this.aBones[index].controlBone, (Object)null))
                    {
                        this.aBones[index].controlBone.set_localRotation(this.aBones[index].fixAngle);
                        if (((Component)this.aBones[index].controlBone).get_gameObject().get_activeSelf())
                        {
                            ((Component)this.aBones[index].controlBone).get_gameObject().SetActive(false);
                        }
                    }
                }
            }
            else
            {
                bool flag1 = false;
                if (neckTypeState.lookType == NECK_LOOK_TYPE_VER2.CONTROL)
                {
                    for (int index = 0; index < this.aBones.Length; ++index)
                    {
                        if (!Object.op_Inequality((Object)this.aBones[index].controlBone, (Object)null))
                        {
                            flag1 = true;
                            break;
                        }
                    }
                }
                if (neckTypeState.lookType == NECK_LOOK_TYPE_VER2.CONTROL && !flag1)
                {
                    for (int index = 0; index < this.aBones.Length; ++index)
                    {
                        if (index != 0)
                        {
                            ((Component)this.aBones[index].controlBone).get_gameObject().SetActive(!((Component)this.aBones[0].controlBone).get_gameObject().get_activeSelf());
                        }
                        this.aBones[index].fixAngle = this.aBones[index].controlBone.get_localRotation();
                        float num2 = Mathf.InverseLerp(0.0f, this.changeTypeLeapTime, this.changeTypeTimer);
                        this.aBones[index].neckBone.set_localRotation(Quaternion.Lerp(this.aBones[index].fixAngleBackup, this.aBones[index].fixAngle, num2));
                    }
                }
                else
                {
                    for (int index = 0; index < this.aBones.Length; ++index)
                    {
                        if (!Object.op_Equality((Object)this.aBones[index].controlBone, (Object)null) && ((Component)this.aBones[index].controlBone).get_gameObject().get_activeSelf())
                        {
                            ((Component)this.aBones[index].controlBone).get_gameObject().SetActive(false);
                        }
                    }
                    if (neckTypeState.lookType == NECK_LOOK_TYPE_VER2.FORWARD || flag1)
                    {
                        for (int index = 0; index < this.aBones.Length; ++index)
                        {
                            this.aBones[index].fixAngle = Quaternion.get_identity();
                            Quaternion quaternion = Quaternion.Slerp(this.aBones[index].neckBone.get_localRotation(), this.aBones[index].fixAngle, this.calcLerp);
                            this.aBones[index].neckBone.set_localRotation(Quaternion.Slerp(this.aBones[index].fixAngleBackup, quaternion, num1));
                            if (Object.op_Inequality((Object)this.aBones[index].controlBone, (Object)null))
                            {
                                this.aBones[index].controlBone.set_localRotation(this.aBones[index].fixAngle);
                            }
                        }
                    }
                    else if (neckTypeState.lookType == NECK_LOOK_TYPE_VER2.FIX)
                    {
                        for (int index = 0; index < this.aBones.Length; ++index)
                        {
                            Quaternion quaternion = Quaternion.Slerp(this.aBones[index].neckBone.get_localRotation(), this.aBones[index].fixAngle, this.calcLerp);
                            this.aBones[index].neckBone.set_localRotation(Quaternion.Slerp(this.aBones[index].fixAngleBackup, quaternion, num1));
                            if (Object.op_Inequality((Object)this.aBones[index].controlBone, (Object)null))
                            {
                                this.aBones[index].controlBone.set_localRotation(this.aBones[index].fixAngle);
                            }
                        }
                    }
                    else
                    {
                        Vector3 dirB  = Vector3.op_Subtraction(target, this.boneCalcAngle.get_position());
                        float   num2  = this.AngleAroundAxis(this.boneCalcAngle.get_forward(), dirB, this.boneCalcAngle.get_up());
                        float   num3  = this.AngleAroundAxis(this.boneCalcAngle.get_forward(), dirB, this.boneCalcAngle.get_right());
                        bool    flag2 = false;
                        float   num4  = !neckTypeState.isLimitBreakBackup ? this.neckTypeStates[ptnNo].limitBreakCorrectionValue : 0.0f;
                        if ((double)Mathf.Abs(num2) > (double)this.neckTypeStates[ptnNo].hAngleLimit + (double)num4 || (double)Mathf.Abs(num3) > (double)this.neckTypeStates[ptnNo].vAngleLimit + (double)num4)
                        {
                            flag2 = true;
                        }
                        neckTypeState.isLimitBreakBackup = flag2;
                        if (flag2)
                        {
                            this.nowAngle = Vector2.get_zero();
                        }
                        else
                        {
                            if (_isUseBackUpPos)
                            {
                                target = this.backupPos;
                            }
                            this.nowAngle = this.GetAngleToTarget(target, this.aBones[this.aBones.Length - 1], 1f);
                            if (neckTypeState.lookType == NECK_LOOK_TYPE_VER2.TARGET)
                            {
                                Matrix4x4 matrix4x4 = Matrix4x4.TRS(this.transformAim.get_position(), this.boneCalcAngle.get_rotation(), this.transformAim.get_lossyScale());
                                Matrix4x4 inverse1  = ((Matrix4x4) ref matrix4x4).get_inverse();
                                Vector3   vector3_1 = ((Matrix4x4) ref inverse1).MultiplyPoint3x4(target);
                                Matrix4x4 inverse2  = ((Matrix4x4) ref matrix4x4).get_inverse();
                                Vector3   vector3_2 = ((Matrix4x4) ref inverse2).MultiplyPoint3x4(this.boneCalcAngle.get_position());
                                if (vector3_1.z < 0.0 && vector3_1.y < 0.0)
                                {
                                    if (vector3_2.x < 0.0)
                                    {
                                        if (vector3_2.x < vector3_1.x && vector3_1.x < 0.0)
                                        {
                                            target = this.transformAim.get_position();
                                        }
                                    }
                                    else if (vector3_2.x > vector3_1.x && vector3_1.x > 0.0)
                                    {
                                        target = this.transformAim.get_position();
                                    }
                                }
                                Vector3 vector3_3 = Vector3.op_Subtraction(this.transformAim.get_position(), target);
                                if ((double)((Vector3) ref vector3_3).get_magnitude() == 0.0)
                                {
                                    for (int index = 0; index < this.aBones.Length; ++index)
                                    {
                                        this.CalcNeckBone(this.aBones[index]);
                                        this.aBones[index].neckBone.set_localRotation(Quaternion.Slerp(this.aBones[index].fixAngleBackup, this.aBones[index].fixAngle, num1));
                                    }
                                    return;
                                }
                            }
                            else if (neckTypeState.lookType == NECK_LOOK_TYPE_VER2.AWAY)
                            {
                                float num5 = 0.0f;
                                float num6 = 0.0f;
                                for (int index = 0; index < this.aBones.Length; ++index)
                                {
                                    num5 += this.aBones[index].angleH;
                                }
                                if (this.nowAngle.y <= (double)num5)
                                {
                                    for (int index = 0; index < this.aBones.Length; ++index)
                                    {
                                        num6 += neckTypeState.aParam[index].maxBendingAngle;
                                    }
                                    if (this.nowAngle.y <= (double)num6 - (double)neckTypeState.limitAway || this.nowAngle.y < 0.0)
                                    {
                                        this.nowAngle.y = (__Null)(double)num6;
                                    }
                                    else
                                    {
                                        this.nowAngle.y = (__Null)0.0;
                                        for (int index = 0; index < this.aBones.Length; ++index)
                                        {
                                            ref Vector2 local = ref this.nowAngle;
                                            local.y = (__Null)(local.y + (double)neckTypeState.aParam[index].minBendingAngle);
                                        }
                                    }
                                }
                                else if (this.nowAngle.y > (double)num5)
                                {
                                    for (int index = 0; index < this.aBones.Length; ++index)
                                    {
                                        num6 += neckTypeState.aParam[index].minBendingAngle;
                                    }
                                    if (this.nowAngle.y >= (double)num6 + (double)neckTypeState.limitAway || this.nowAngle.y > 0.0)
                                    {
                                        this.nowAngle.y = (__Null)(double)num6;
                                    }
                                    else
                                    {
                                        this.nowAngle.y = (__Null)0.0;
                                        for (int index = 0; index < this.aBones.Length; ++index)
                                        {
                                            ref Vector2 local = ref this.nowAngle;
                                            local.y = (__Null)(local.y + (double)neckTypeState.aParam[index].maxBendingAngle);
                                        }
                                    }
                                }
                                this.nowAngle.x = -this.nowAngle.x;
                            }
                        }
                        Vector2 nowAngle = this.nowAngle;
                        for (int _boneNum = this.aBones.Length - 1; _boneNum > -1; --_boneNum)
                        {
                            this.RotateToAngle(this.aBones[_boneNum], neckTypeState, _boneNum, ref nowAngle);
                        }
                        for (int index = 0; index < this.aBones.Length; ++index)
                        {
                            Quaternion quaternion = Quaternion.Slerp(this.aBones[index].backupLocalRotaionByTarget, this.aBones[index].fixAngle, this.calcLerp);
                            this.aBones[index].neckBone.set_localRotation(Quaternion.Slerp(this.aBones[index].fixAngleBackup, quaternion, num1));
                            if (Object.op_Inequality((Object)this.aBones[index].controlBone, (Object)null))
                            {
                                this.aBones[index].controlBone.set_localRotation(this.aBones[index].fixAngle);
                            }
                        }
                    }
                }
            }