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; } } }
/*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); //} }