private void RandomToadieAirDrop(GameObject lootCratePrefab, RoomHandler currentRoom, IntVector2?Clearence = null) { if (!Clearence.HasValue) { Clearence = new IntVector2(2, 2); } IntVector2?DropLocation = FindRandomDropLocation(currentRoom, Clearence.Value); if (DropLocation.HasValue) { EmergencyCrateController lootCrate = Instantiate(lootCratePrefab, DropLocation.Value.ToVector2().ToVector3ZUp(1f), Quaternion.identity).GetComponent <EmergencyCrateController>(); if (lootCrate == null) { return; } lootCrate.ChanceToExplode = 0; lootCrate.ChanceToSpawnEnemy = 1; lootCrate.EnemyPlaceable = m_CustomEnemyPlacable(BraveUtility.RandomElement(ToadieGUIDs)); lootCrate.Trigger(new Vector3(-5f, -5f, -5f), DropLocation.Value.ToVector3() + new Vector3(15f, 15f, 15f), currentRoom, true); currentRoom.ExtantEmergencyCrate = lootCrate.gameObject; } return; }
private void SpawnCrate(int item) { GameObject gameObject = (GameObject)BraveResources.Load("EmergencyCrate", ".prefab"); GameObject gameObject2 = UnityEngine.Object.Instantiate <GameObject>(gameObject); EmergencyCrateController component = gameObject2.GetComponent <EmergencyCrateController>(); SimplerCrateBehaviour simpleCrate = component.TurnIntoSimplerCrate(); simpleCrate.LootID = item; IntVector2 bestRewardLocation = LastOwner.CurrentRoom.GetBestRewardLocation(new IntVector2(1, 1), RoomHandler.RewardLocationStyle.CameraCenter, true); simpleCrate.Trigger(new Vector3(-5f, -5f, -5f), bestRewardLocation.ToVector3() + new Vector3(15f, 15f, 15f), LastOwner.CurrentRoom); LastOwner.CurrentRoom.ExtantEmergencyCrate = gameObject2; }
public void SpawnAirDrop(IntVector2 roomVector, GenericLootTable overrideTable = null, float EnemyOdds = 0f, float ExplodeOdds = 0f, bool playSoundFX = true, bool usePlayerPosition = true, string EnemyGUID = "01972dee89fc4404a5c408d50007dad5") { EmergencyCrateController lootCrate = Instantiate(EmergancyCratePrefab, roomVector.ToVector2().ToVector3ZUp(1f), Quaternion.identity).GetComponent <EmergencyCrateController>(); Dungeon dungeon = GameManager.Instance.Dungeon; PlayerController player = GameManager.Instance.PrimaryPlayer; RoomHandler currentRoom = GameManager.Instance.PrimaryPlayer.CurrentRoom; IntVector2 currentRoomSize = currentRoom.area.dimensions; int RoomSizeX = currentRoomSize.x; int RoomSizeY = currentRoomSize.y; lootCrate.ChanceToExplode = ExplodeOdds; lootCrate.ChanceToSpawnEnemy = EnemyOdds; lootCrate.EnemyPlaceable = CustomEnemyPlacable(EnemyGUID); if (overrideTable != null) { lootCrate.gunTable = overrideTable; } IntVector2 bestRewardLocation = new IntVector2(1, 1); if (RoomSizeX < 8 && RoomSizeY < 8) { currentRoomSize = bestRewardLocation; } if (!usePlayerPosition) { bestRewardLocation = player.CurrentRoom.GetBestRewardLocation(currentRoom.area.dimensions, RoomHandler.RewardLocationStyle.CameraCenter, true); lootCrate.Trigger(new Vector3(-5f, -5f, -5f), bestRewardLocation.ToVector3() + new Vector3(15f, 15f, 15f), player.CurrentRoom, overrideTable == null); GameManager.Instance.Dungeon.data[bestRewardLocation].PreventRewardSpawn = true; } else { bestRewardLocation = player.CurrentRoom.GetBestRewardLocation(new IntVector2(1, 1), RoomHandler.RewardLocationStyle.CameraCenter, true); lootCrate.Trigger(new Vector3(-5f, -5f, -5f), bestRewardLocation.ToVector3() + new Vector3(15f, 15f, 15f), player.CurrentRoom, overrideTable == null); GameManager.Instance.Dungeon.data[bestRewardLocation].PreventRewardSpawn = true; } dungeon.data[bestRewardLocation].PreventRewardSpawn = true; player.CurrentRoom.ExtantEmergencyCrate = lootCrate.gameObject; if (playSoundFX) { AkSoundEngine.PostEvent("Play_OBJ_supplydrop_activate_01", player.CurrentRoom.ExtantEmergencyCrate); } return; }
public static SimplerCrateBehaviour TurnIntoSimplerCrate(this EmergencyCrateController self) { GameObject obj = self.gameObject; if (obj != null) { SimplerCrateBehaviour newCrateBehav = obj.AddComponent <SimplerCrateBehaviour>(); newCrateBehav.driftAnimationName = self.driftAnimationName; newCrateBehav.landedAnimationName = self.landedAnimationName; newCrateBehav.chuteLandedAnimationName = self.chuteLandedAnimationName; newCrateBehav.crateDisappearAnimationName = self.crateDisappearAnimationName; newCrateBehav.chuteAnimator = self.chuteAnimator; newCrateBehav.landingTargetSprite = self.landingTargetSprite; UnityEngine.Object.Destroy(self); return(newCrateBehav); } else { return(null); } }
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; }