Beispiel #1
0
        public static bool Prefix(PlayerManager __instance, ref Collider __result)
        {
            BetterPlacing.AddNpcToPhysicalCollisionMask();

            var gameObject = __instance.GetObjectToPlace();

            if (!BetterPlacing.IsPlaceableFurniture(gameObject))
            {
                return(true);
            }

            Collider[] colliders = gameObject.GetComponentsInChildren <Collider>();
            foreach (var eachCollider in colliders)
            {
                Collider[] otherColliders = Physics.OverlapSphere(eachCollider.bounds.center, eachCollider.bounds.size.magnitude / 2, 918016);
                foreach (var eachOtherCollider in otherColliders)
                {
                    if (!eachOtherCollider.gameObject.activeInHierarchy)
                    {
                        continue;
                    }

                    if (eachOtherCollider.transform.IsChildOf(gameObject.transform))
                    {
                        continue;
                    }

                    Vector3 direction;
                    float   distance;

                    if (Physics.ComputePenetration(eachCollider, eachCollider.transform.position, eachCollider.transform.rotation, eachOtherCollider, eachOtherCollider.transform.position, eachOtherCollider.transform.rotation, out direction, out distance))
                    {
                        __result = eachOtherCollider;
                        return(false);
                    }
                }
            }

            __result = null;
            return(false);
        }