Esempio n. 1
0
 public override void tick(float dt)
 {
     if (SimpleIK.intersection(0, 0, this.radius1, (this.targetAbs.v - this.basisAbs.v).length(), 0, this.radius2))
     {
         if ((SimpleIK.yi > 0))
         {
             this.resultAbs.v = this.calc(new Vector2(SimpleIK.xi, SimpleIK.yi));
         }
         else
         {
             this.resultAbs.v = this.calc(new Vector2(SimpleIK.xi_prime, SimpleIK.yi_prime));
         }
     }
 }
Esempio n. 2
0
        public override void tick(float dt)
        {
            isInError = false;
            float len = (targetAbs.v - basisAbs.v).length();

//            len = Math.Max(len, Math.Abs(radius1 - radius2)*1.01f);
//            len = Math.Min(len, Math.Abs(radius1 + radius2)*0.99f); - must not happen
            if (SimpleIK.intersection(radius1, len, radius2))
            {
//            if (SimpleIK.intersection(0, 0, radius1, len, 0, radius2)) {
                if (SimpleIK.yi > 0)
                {
                    resultAbs.v = calc(new Vector2(SimpleIK.xi, SimpleIK.yi));
                }
                else
                {
                    resultAbs.v = calc(new Vector2(SimpleIK.xi_prime, SimpleIK.yi_prime));
                }
            }
            else
            {
                isInError = true;
                float ratio = radius1 / (radius1 + radius2);
                if (!float.IsInfinity(ratio))
                {
                    resultAbs.v = basisAbs.v.mix(targetAbs.v, ratio);
                }
            }

            if (float.IsNaN(resultAbs.v.x) || float.IsNaN(resultAbs.v.y) || float.IsNaN(resultAbs.v.z))
            {
                isInError = true;
                Debug.Log("!" + resultAbs.v + " " + radius1 + " " + radius2);
                Debug.Log("!!" + targetAbs.v);
            }
        }