using System;
using RootMotion.FinalIK;
using UnityEngine;

[Serializable]
public class HeightIKCtrlData : CCDIKCtrlData
{
	public HeightIKCtrlData(CCDIK ccd_ik, Transform[] chain_bones, FullBodyIKCtrl ik_ctrl, bool weight_fade = true, bool attach_ik = false) : base(ccd_ik, chain_bones, ik_ctrl, weight_fade, attach_ik)
	{
	}

	public void CheckReachTarget()
	{
		if (!base.PointIK.IsIKExec || base.PointIK.BlendType == IKCtrlData.IKBlendType.IK_To_Detach)
		{
			return;
		}
		float num = Vector3.Distance(base.IKTarget.position, base.TargetBone.position);
		if (num <= 0.05f || (num > 1f && base.PointIK.BlendNow))
		{
			return;
		}
		int value = this.MyIKCtrl.TgtMaid.GetProp(MPN.sintyou).value;
		int value2 = base.PointIK.TgtMaid.GetProp(MPN.sintyou).value;
		if (this.m_EachOtherIK && value < value2)
		{
			IKCtrlData ikdata = base.PointIK.TgtMaid.IKCtrl.GetIKData(base.PointIK.Tgt_AttachName);
			if (base.PointIK.TgtMaid.IKCtrl.IsUpdateEnd)
			{
				ikdata.IKTarget.position += (base.TargetBone.position - base.IKTarget.position) * ikdata.PointIK.BlendWeight;
				base.PointIK.TgtMaid.IKCtrl.SolverUpdate();
			}
		}
		else if (!this.MyIKCtrl.DoHeightCover && !base.PointIK.BlendNow)
		{
			Vector3 vector = base.IKTarget.position - base.TargetBone.position;
			this.MyIKCtrl.BodyTarget.position += vector;
			foreach (IKCtrlData ikctrlData in this.MyIKCtrl.strIKDataPair.Values)
			{
				ikctrlData.SetTargetOffset(vector, false);
			}
			this.MyIKCtrl.BodyEffector.positionWeight = 1f;
		}
		this.MyIKCtrl.DoHeightCover = true;
	}

	public override void Update()
	{
		base.Update();
		this.CheckReachTarget();
	}
}
