Beispiel #1
0
        public static void Prefix(PlayerManager __instance)
        {
            var gameObject = __instance.GetObjectToPlace();

            if (BetterPlacing.IsStackableGearItem(gameObject))
            {
                BetterPlacing.AddGearItemsToPhysicalCollisionMask();
            }
            else if (BetterPlacing.IsPlaceableFurniture(gameObject))
            {
                BetterPlacing.RemoveFurnitureFromPhysicalCollisionMask();
            }
        }
Beispiel #2
0
        private static void Postfix(PlayerManager __instance, GameObject objectToPlace, bool __result)
        {
            if (__result)
            {
                BetterPlacing.InitializeRotation(__instance);

                if (BetterPlacing.IsStackableGearItem(objectToPlace))
                {
                    objectToPlace.layer = vp_Layer.NPC;
                }
                else if (BetterPlacing.IsPlaceableFurniture(objectToPlace))
                {
                    vp_Layer.Set(objectToPlace, vp_Layer.NPC, true);
                }
            }
        }
Beispiel #3
0
        public static bool Prefix(PlayerManager __instance)
        {
            var gameObject = __instance.m_InteractiveObjectUnderCrosshair;

            if (BetterPlacing.IsPlaceableFurniture(gameObject))
            {
                BetterPlacing.PreparePlacableFurniture(gameObject);

                GameObject root = BetterPlacing.getFurnitureRoot(gameObject);
                __instance.StartPlaceMesh(root, 5f, PlaceMeshFlags.None);

                return(false);
            }

            return(true);
        }
Beispiel #4
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);
        }
Beispiel #5
0
        private static void Prefix(PlayerManager __instance)
        {
            var gameObject = __instance.GetObjectToPlace();

            if (BetterPlacing.IsStackableGearItem(gameObject))
            {
                BetterPlacing.RemoveGearItemsFromPhysicalCollisionMask();
            }
            else if (BetterPlacing.IsPlaceableFurniture(gameObject))
            {
                BetterPlacing.AddFurnitureToPhysicalCollisionMask();
                BetterPlacing.RestoreFurnitureLayers(gameObject);
            }

            CookingPotItem[] items = Object.FindObjectsOfType <CookingPotItem>();
            foreach (var eachItem in items)
            {
                vp_Layer.Set(eachItem.gameObject, vp_Layer.Gear, true);
            }

            InterfaceManager.m_Panel_ActionsRadial.DisableRadial(false);
        }