private IEnumerator SpwanEnemyAirDrop(float delay = 0.4f) { Vector3 RoomOffset = m_room.area.basePosition.ToVector3(); string EnemyGUID1 = "88b6b6a93d4b4234a67844ef4728382c"; // bandana_bullet_kin string EnemyGUID2 = "4d37ce3d666b4ddda8039929225b7ede"; // grenade_kin string EnemyGUID3 = "01972dee89fc4404a5c408d50007dad5"; // bullet_kin string EnemyGUID4 = "128db2f0781141bcb505d8f00f9e4d47"; // red_shotgun_kin if (UnityEngine.Random.value <= 0.5f) { EnemyGUID1 = ExpandCustomEnemyDatabase.BootlegBulletManBandanaGUID; } if (UnityEngine.Random.value <= 0.1f) { EnemyGUID2 = ExpandCustomEnemyDatabase.BootlegShotgunManBlueGUID; } if (UnityEngine.Random.value <= 0.5f) { EnemyGUID3 = ExpandCustomEnemyDatabase.BootlegBulletManGUID; } if (UnityEngine.Random.value <= 0.5f) { EnemyGUID4 = ExpandCustomEnemyDatabase.BootlegShotgunManRedGUID; } yield return(new WaitForSeconds(delay)); GameObject eCrateInstance1 = ExpandUtility.SpawnAirDrop(m_room, (RoomOffset + new Vector3(4, 3, 0)), null, ExpandUtility.GenerateDungeonPlacable(null, true, EnemyGUID: EnemyGUID1)); GameObject eCrateInstance2 = ExpandUtility.SpawnAirDrop(m_room, (RoomOffset + new Vector3(4, 9, 0)), null, ExpandUtility.GenerateDungeonPlacable(null, true, EnemyGUID: EnemyGUID2), 0.2f); GameObject eCrateInstance3 = ExpandUtility.SpawnAirDrop(m_room, (RoomOffset + new Vector3(13, 3, 0)), null, ExpandUtility.GenerateDungeonPlacable(null, true, EnemyGUID: EnemyGUID3)); GameObject eCrateInstance4 = ExpandUtility.SpawnAirDrop(m_room, (RoomOffset + new Vector3(13, 9, 0)), null, ExpandUtility.GenerateDungeonPlacable(null, true, EnemyGUID: EnemyGUID4), 0.2f); /*List<GameObject> eCrateList = new List<GameObject>(); * * if (eCrateInstance1) { eCrateList.Add(eCrateInstance1); } * if (eCrateInstance2) { eCrateList.Add(eCrateInstance1); } * if (eCrateInstance3) { eCrateList.Add(eCrateInstance1); } * if (eCrateInstance4) { eCrateList.Add(eCrateInstance1); } * * GameObject SelectedCrate = null; * * if (eCrateList.Count > 0) { SelectedCrate = BraveUtility.RandomElement(eCrateList); } * * if (SelectedCrate && SelectedCrate.GetComponent<EmergencyCrateController>()) { * yield return new WaitForSeconds(2.25f); * while (ReflectionHelpers.ReflectGetField<bool?>(typeof(EmergencyCrateController), "m_hasBeenTriggered", SelectedCrate.GetComponent<EmergencyCrateController>()).HasValue && ReflectionHelpers.ReflectGetField<bool?>(typeof(EmergencyCrateController), "m_hasBeenTriggered", SelectedCrate.GetComponent<EmergencyCrateController>()).Value) { * if (!SelectedCrate | !SelectedCrate.GetComponent<EmergencyCrateController>()) { break; } * yield return null; * } * yield return new WaitForSeconds(1f); * m_room.npcSealState = RoomHandler.NPCSealState.SealNone; * }*/ yield break; }
private IEnumerator Trigger() { if (m_triggered) { yield break; } if (!string.IsNullOrEmpty(TriggerAnimation)) { spriteAnimator.Play(TriggerAnimation); } if (!string.IsNullOrEmpty(TriggerSFX)) { AkSoundEngine.PostEvent(TriggerSFX, gameObject); } m_triggered = true; Vector2 SpawnOffset = Vector2.zero; if (EnemySpawnOffset.HasValue) { SpawnOffset = EnemySpawnOffset.Value; } if (TriggerVFX) { SpawnManager.SpawnVFX(TriggerVFX, specRigidbody.UnitCenter + SpawnOffset, Quaternion.identity); } if (useAirDropSpawn) { EmergencyCrateController spawnedEnemyCrate = null; if (!EnemySpawnPlacableOverride) { RobotDaveIdea targetIdea = (!GameManager.Instance.Dungeon.UsesCustomFloorIdea) ? GameManager.Instance.Dungeon.sharedSettingsPrefab.DefaultProceduralIdea : GameManager.Instance.Dungeon.FloorIdea; GameObject eCrateInstance = ExpandUtility.SpawnAirDrop(m_room, sprite.WorldCenter, null, targetIdea.ValidEasyEnemyPlaceables[UnityEngine.Random.Range(0, targetIdea.ValidEasyEnemyPlaceables.Length)], 0.2f); if (eCrateInstance) { spawnedEnemyCrate = eCrateInstance.GetComponent <EmergencyCrateController>(); } // spawnedEnemyCrate = EnemyAirDrop(m_room, sprite.WorldCenter, targetIdea.ValidEasyEnemyPlaceables[UnityEngine.Random.Range(0, targetIdea.ValidEasyEnemyPlaceables.Length)]); } else { // spawnedEnemyCrate = EnemyAirDrop(m_room, sprite.WorldCenter, EnemySpawnPlacableOverride); GameObject eCrateInstance = ExpandUtility.SpawnAirDrop(m_room, sprite.WorldCenter, null, EnemySpawnPlacableOverride, 0.2f); if (eCrateInstance) { spawnedEnemyCrate = eCrateInstance.GetComponent <EmergencyCrateController>(); } } if (!m_room.IsSealed && spawnedEnemyCrate) { m_room.npcSealState = RoomHandler.NPCSealState.SealAll; m_room.SealRoom(); } yield return(new WaitForSeconds(2.25f)); DestroyMushroom(false); if (spawnedEnemyCrate) { while (ReflectionHelpers.ReflectGetField <bool?>(typeof(EmergencyCrateController), "m_hasBeenTriggered", spawnedEnemyCrate).HasValue&& ReflectionHelpers.ReflectGetField <bool?>(typeof(EmergencyCrateController), "m_hasBeenTriggered", spawnedEnemyCrate).Value) { if (!spawnedEnemyCrate) { break; } yield return(null); } } yield return(new WaitForSeconds(1f)); m_room.npcSealState = RoomHandler.NPCSealState.SealNone; if (spriteAnimator.IsPlaying(BreakAnimation)) { while (spriteAnimator.IsPlaying(BreakAnimation)) { yield return(null); } } Destroy(gameObject); } else { AIActor selectedEnemy = null; if (EnemySpawnPlacableOverride) { DungeonPlaceableVariant enemyVariant = EnemySpawnPlacableOverride.SelectFromTiersFull(); selectedEnemy = enemyVariant.GetOrLoadPlaceableObject.GetComponent <AIActor>(); } else { RobotDaveIdea targetIdea = (!GameManager.Instance.Dungeon.UsesCustomFloorIdea) ? GameManager.Instance.Dungeon.sharedSettingsPrefab.DefaultProceduralIdea : GameManager.Instance.Dungeon.FloorIdea; DungeonPlaceable backupEnemyPlaceable = targetIdea.ValidEasyEnemyPlaceables[UnityEngine.Random.Range(0, targetIdea.ValidEasyEnemyPlaceables.Length)]; DungeonPlaceableVariant enemyVariant = backupEnemyPlaceable.SelectFromTiersFull(); } if (selectedEnemy) { AIActor targetAIActor = AIActor.Spawn(selectedEnemy, specRigidbody.UnitCenter.ToIntVector2(VectorConversions.Floor) + SpawnOffset.ToIntVector2(), m_room, true, AIActor.AwakenAnimationType.Spawn, true); targetAIActor.reinforceType = AIActor.ReinforceType.SkipVfx; targetAIActor.HandleReinforcementFallIntoRoom(0.8f); if (!m_room.IsSealed) { m_room.SealRoom(); } while (targetAIActor.IsGone) { yield return(null); } DestroyMushroom(); } } yield break; }