예제 #1
0
        public void CheckCollision(Collider collider)
        {
            if (!isActiveAndEnabled || arousal < 0.8f)
            {
                return;
            }
            //if (!grabbed) {
            //return;
            //}
            Kobold k = collider.gameObject.GetComponentInParent <Kobold>();

            if (k == null || k == kobold)
            {
                return;
            }
            // Don't penetrate kobolds that are penetrating us!
            if (k.activeDicks.Count > 0 && k.activeDicks[0].dick.holeTarget != null && kobold == k.activeDicks[0].dick.holeTarget.transform.root.GetComponent <Kobold>())
            {
                return;
            }
            // Don't penetrate a kobold that's already penetrating us
            if (k.activeDicks.Count > 0 && k.activeDicks[0].dick.holeTarget != null && k.activeDicks[0].dick.holeTarget.transform.root.GetComponent <Kobold>() == kobold)
            {
                return;
            }
            if (holeTarget != null)
            {
                return;
            }
            Naelstrof.Penetratable closestPenetratable = collider.GetComponent <Naelstrof.Penetratable>();
            if (closestPenetratable != null)
            {
                float dist      = Vector3.Distance(transform.position, closestPenetratable.transform.position);
                float angleDiff = Vector3.Dot(-closestPenetratable.fakeHoleGameObject.transform.TransformDirection(closestPenetratable.holeForwardAxis), dickTransform.TransformDirection(dickForwardAxis));
                if (closestPenetratable.dickTarget == null && angleDiff > -0.25f)
                {
                    if (dist > GetWorldLength())
                    {
                        return;
                    }
                    IgnoreCollision(k);
                    //dick.body.maxAngularVelocity = 64f;
                    holeTarget = closestPenetratable;
                    closestPenetratable.aimWeight = 0.0001f;
                    holeTarget.dickTarget         = this;
                }
            }
        }
예제 #2
0
 /*public void OnGrab() {
  *  grabbed = true;
  * }
  * public void OnRelease() {
  *  foreach(Collider c in IgnoringCollisions) {
  *      foreach (Collider d in selfColliders) {
  *          Physics.IgnoreCollision(c, d, false);
  *      }
  *  }
  *  IgnoringCollisions.Clear();
  *  if (dick.holeTarget != null) {
  *      dick.holeTarget.dickTarget = null;
  *  }
  *  dick.holeTarget = null;
  *  grabbed = false;
  * }*/
 //public IEnumerable WaitAndThenStopPenetrating() {
 //yield return new WaitForSeconds(1f);
 //waiting = false;
 //}
 public void FixedUpdate()
 {
     if (holeTarget == null)
     {
         return;
     }
     if (holeTarget == null ||
         holeTarget.dickTarget != this ||
         (holeTarget.aimWeight == 0)
         //|| Vector3.Distance(dick.dickTransform.position, dick.holeTarget.GetComponent<Naelstrof.Penetratable>().fakeHoleGameObject.transform.position) > dick.GetMaxLength()*dick.dickTransform.lossyScale.x*1.1f
         || !isActiveAndEnabled
         )
     {
         // Give it a second, just in case we're getting thrusted right back in.
         holeTarget.dickTarget = null;
         holeTarget            = null;
         //dick.body.maxAngularVelocity = 7f;
         UnignoreAll();
     }
     //  Kobold k = dick.holeTarget.GetComponentInParent<Kobold>();
     // IgnoreCollision(k);
     //}
 }