public static IEnumerator SpawnHammer(PlayerController user, float spawnDelay = 0)
        {
            if (spawnDelay > 0)
            {
                yield return(new WaitForSeconds(spawnDelay));
            }

            // Tools.Print("Spawning A Friendly Hammer!", "FFFFFF", false);
            RoomHandler room          = user.CurrentRoom;
            IntVector2? spawnPosition = room.GetRandomVisibleClearSpot(2, 2);

            yield return(new WaitForSeconds(1f));

            if (!spawnPosition.HasValue)
            {
                spawnPosition = (user.CenterPosition.ToIntVector2() - user.CurrentRoom.area.basePosition);
            }
            if (spawnPosition.HasValue)
            {
                RoomHandler currentRoom = user.CurrentRoom;
                GameObject  ForgeHammer = DungeonPlaceableUtility.InstantiateDungeonPlaceable(ExpandPrefabs.EXFriendlyForgeHammer, currentRoom, spawnPosition.Value, true);
                yield return(null);

                if (ForgeHammer)
                {
                    ForgeHammer.AddComponent <ExpandForgeHammerComponent>();
                    ExpandForgeHammerComponent expandForgeHammer = ForgeHammer.GetComponent <ExpandForgeHammerComponent>();
                    expandForgeHammer.m_Owner = user;
                    expandForgeHammer.ConfigureOnPlacement(currentRoom);
                }

                yield return(null);
            }
            yield break;
        }
        private void HandleRatBossSetup()
        {
            GameObject SpecialRatBoss = DungeonPlaceableUtility.InstantiateDungeonPlaceable(EnemyDatabase.GetOrLoadByGuid("6868795625bd46f3ae3e4377adce288b").gameObject, m_ParentRoom, new IntVector2(17, 28), true, AIActor.AwakenAnimationType.Awaken, true);
            AIActor    RatBossAIActor = SpecialRatBoss.GetComponent <AIActor>();

            if (RatBossAIActor != null)
            {
                PickupObject.ItemQuality targetQuality = (UnityEngine.Random.value >= 0.2f) ? ((!BraveUtility.RandomBool()) ? PickupObject.ItemQuality.C : PickupObject.ItemQuality.D) : PickupObject.ItemQuality.B;
                GenericLootTable         lootTable     = (!BraveUtility.RandomBool()) ? GameManager.Instance.RewardManager.GunsLootTable : GameManager.Instance.RewardManager.ItemsLootTable;
                PickupObject             item          = LootEngine.GetItemOfTypeAndQuality <PickupObject>(targetQuality, lootTable, false);
                PickupObject             item2         = LootEngine.GetItemOfTypeAndQuality <PickupObject>(targetQuality, lootTable, false);
                Destroy(RatBossAIActor.gameObject.GetComponent <ResourcefulRatDeathController>());
                Destroy(RatBossAIActor.gameObject.GetComponent <ResourcefulRatRewardRoomController>());
                RatBossAIActor.State        = AIActor.ActorState.Awakening;
                RatBossAIActor.StealthDeath = true;
                RatBossAIActor.healthHaver.gameObject.AddComponent <ExpandSpawnGlitchObjectOnDeath>();
                ExpandSpawnGlitchObjectOnDeath ObjectSpawnerComponent = RatBossAIActor.healthHaver.gameObject.GetComponent <ExpandSpawnGlitchObjectOnDeath>();
                ObjectSpawnerComponent.spawnRatCorpse     = true;
                ObjectSpawnerComponent.ratCorpseSpawnsKey = true;
                ObjectSpawnerComponent.parentEnemyWasRat  = true;
                if (item && item2)
                {
                    RatBossAIActor.AdditionalSafeItemDrops = new List <PickupObject> {
                        item, item2
                    };
                }
                RatBossAIActor.healthHaver.enabled = true;
                RatBossAIActor.healthHaver.forcePreventVictoryMusic = true;
                RatBossAIActor.ConfigureOnPlacement(m_ParentRoom);
                RatBossAIActor.specRigidbody.CollideWithOthers = true;
            }
        }
        public static void AddRainStormToRoom(RoomHandler targetRoom, IntVector2 targetLocation, float RainIntensity = 1f, bool useCustomIntensity = false)
        {
            if (targetRoom == null | targetLocation == null)
            {
                return;
            }
            GameObject m_RainObject = new GameObject("RainFXObject");

            m_RainObject.AddComponent <ChaosWeatherPlacable>();
            GameObject           m_Rain          = DungeonPlaceableUtility.InstantiateDungeonPlaceable(m_RainObject, targetRoom, targetLocation, true);
            ChaosWeatherPlacable m_RainComponent = m_Rain.GetComponent <ChaosWeatherPlacable>();

            if (useCustomIntensity)
            {
                m_RainComponent.useCustomIntensity = true;
                m_RainComponent.RainIntensity      = RainIntensity;
            }
            m_RainComponent.ConfigureOnPlacement(targetRoom);
            return;
        }