private void Update() { for (int index = this.mStates.Count - 1; index >= 0; --index) { YuremonoInstance.TargetState mState = this.mStates[index]; if (mState.IsValid) { mState.Transform.set_localRotation(mState.BaseRotation); } } }
private void LateUpdate() { this.SkirtLateUpdate(); Vector3 lossyScale = ((Component)this).get_transform().get_lossyScale(); float scale = (float)(((double)Mathf.Abs((float)lossyScale.x) + (double)Mathf.Abs((float)lossyScale.y) + (double)Mathf.Abs((float)lossyScale.z)) / 3.0); Vector3 vector3_1 = Vector3.op_Multiply(Physics.get_gravity(), Time.get_deltaTime()); for (int index = this.mStates.Count - 1; index >= 0; --index) { YuremonoInstance.TargetState mState = this.mStates[index]; if (mState.IsValid) { Vector3 vector3_2 = Vector3.op_Addition(mState.Transform.get_position(), Vector3.op_Multiply(Vector3.op_Multiply(Vector3.get_down(), mState.Param.Length), scale)); Vector3 vector3_3 = mState.CalcScaledBaseTailPos(scale); mState.DesiredTailPos = Vector3.Lerp(vector3_3, vector3_2, mState.Param.Kinematic); YuremonoInstance.TargetState targetState1 = mState; targetState1.Velocity = Vector3.op_Multiply(targetState1.Velocity, (float)(1.0 - (double)mState.Param.Damping * (double)Time.get_deltaTime())); Vector3 vector3_4 = YuremonoInstance.CalcConstrainedPos(mState.TailPos, mState.Transform.get_position(), mState.Param.Length * scale); Vector3 vector3_5 = Vector3.op_Subtraction(mState.DesiredTailPos, vector3_4); Vector3 vector3_6 = Vector3.op_Addition(mState.Velocity, Vector3.op_Multiply(Vector3.op_Multiply(vector3_5, Time.get_deltaTime()), mState.Param.Acceleration)); mState.Velocity = vector3_6; YuremonoInstance.TargetState targetState2 = mState; targetState2.TailPos = Vector3.op_Addition(targetState2.TailPos, Vector3.op_Addition(Vector3.op_Multiply(mState.Velocity, Time.get_deltaTime()), Vector3.op_Multiply(vector3_1, mState.Param.Gravity))); mState.TailPos = YuremonoInstance.CalcConstrainedPos(mState.TailPos, mState.Transform.get_position(), mState.Param.Length * scale); if ((double)mState.Param.AngularLimit > 0.0) { Vector3 vector3_7 = Vector3.op_Subtraction(mState.CalcScaledBaseTailPos(scale), mState.Transform.get_position()); Vector3 vector3_8 = Vector3.op_Subtraction(mState.TailPos, mState.Transform.get_position()); if ((double)Vector3.Angle(vector3_7, vector3_8) >= (double)mState.Param.AngularLimit) { Vector3 vector3_9 = Vector3.Cross(vector3_7, vector3_8); // ISSUE: explicit reference operation Vector3 normalized = ((Vector3)@vector3_9).get_normalized(); Vector3 vector3_10 = Vector3.Cross(normalized, vector3_7); // ISSUE: explicit reference operation float num = (double)Vector3.Dot(((Vector3)@vector3_10).get_normalized(), vector3_8) < 0.0 ? -mState.Param.AngularLimit : mState.Param.AngularLimit; // ISSUE: explicit reference operation // ISSUE: explicit reference operation mState.TailPos = Vector3.op_Addition(Vector3.op_Multiply(Quaternion.op_Multiply(Quaternion.AngleAxis(num, normalized), ((Vector3)@vector3_7).get_normalized()), ((Vector3)@vector3_8).get_magnitude()), mState.Transform.get_position()); mState.Velocity = Vector3.op_Subtraction(mState.DesiredTailPos, mState.TailPos); } } Quaternion rotation = Quaternion.FromToRotation(Vector3.op_Subtraction(mState.CurrentTailPos, mState.Transform.get_position()), Vector3.op_Subtraction(mState.TailPos, mState.Transform.get_position())); mState.Transform.set_rotation(Quaternion.op_Multiply(rotation, mState.Transform.get_rotation())); } } }
public void Setup() { this.Reset(); this.mStates.Clear(); if (Object.op_Equality((Object)this.Param, (Object)null)) { return; } Transform transform = ((Component)this).get_transform(); for (int index = this.Param.Targets.Length - 1; index >= 0; --index) { Transform childRecursively = GameUtility.findChildRecursively(transform, this.Param.Targets[index].TargetName); if (Object.op_Equality((Object)childRecursively, (Object)null)) { Debug.LogWarning((object)("Target '" + this.Param.Targets[index].TargetName + "' not found.")); } else { YuremonoInstance.TargetState targetState = new YuremonoInstance.TargetState(); targetState.Transform = childRecursively; targetState.Param = this.Param.Targets[index]; targetState.BaseRotation = targetState.Transform.get_localRotation(); targetState.Forward = YuremonoInstance.mAxisToVector[(int)targetState.Param.ForwardAxis]; targetState.TailPos = targetState.CurrentTailPos; targetState.DesiredTailPos = targetState.TailPos; this.mStates.Add(targetState); } } for (int index1 = 0; index1 < this.mStates.Count; ++index1) { for (int index2 = 0; index2 < this.mStates.Count; ++index2) { if (index1 != index2 && this.mStates[index1].Transform.IsChildOf(this.mStates[index2].Transform)) { YuremonoInstance.TargetState mState = this.mStates[index2]; this.mStates[index2] = this.mStates[index1]; this.mStates[index1] = mState; } } } }