protected IEnumerator ExpandHandleTransitionToFallbackCombatRoom(PaydayDrillItem drillItem, RoomHandler sourceRoom, Chest sourceChest) { Dungeon d = GameManager.Instance.Dungeon; sourceChest.majorBreakable.TemporarilyInvulnerable = true; sourceRoom.DeregisterInteractable(sourceChest); // RoomHandler newRoom = ExpandUtility.Instance.AddCustomRuntimeRoom(drillItem.GenericFallbackCombatRoom, true, false, lightStyle: DungeonData.LightGenerationStyle.STANDARD); RoomHandler newRoom = d.AddRuntimeRoom(drillItem.GenericFallbackCombatRoom, null, DungeonData.LightGenerationStyle.FORCE_COLOR); newRoom.CompletelyPreventLeaving = true; Vector3 oldChestPosition = sourceChest.transform.position; sourceChest.transform.position = newRoom.Epicenter.ToVector3(); if (sourceChest.transform.parent == sourceRoom.hierarchyParent) { sourceChest.transform.parent = newRoom.hierarchyParent; } SpeculativeRigidbody component = sourceChest.GetComponent <SpeculativeRigidbody>(); if (component) { component.Reinitialize(); PathBlocker.BlockRigidbody(component, false); } tk2dBaseSprite component2 = sourceChest.GetComponent <tk2dBaseSprite>(); if (component2) { component2.UpdateZDepth(); } Vector3 m_baseChestOffset = ReflectionHelpers.ReflectGetField <Vector3>(typeof(PaydayDrillItem), "m_baseChestOffset", drillItem); Vector3 m_largeChestOffset = ReflectionHelpers.ReflectGetField <Vector3>(typeof(PaydayDrillItem), "m_largeChestOffset", drillItem); Vector3 chestOffset = m_baseChestOffset; if (sourceChest.name.Contains("_Red") || sourceChest.name.Contains("_Black")) { chestOffset += m_largeChestOffset; } GameObject spawnedVFX = SpawnManager.SpawnVFX(drillItem.DrillVFXPrefab, sourceChest.transform.position + chestOffset, Quaternion.identity); tk2dBaseSprite spawnedSprite = spawnedVFX.GetComponent <tk2dBaseSprite>(); spawnedSprite.HeightOffGround = 1f; spawnedSprite.UpdateZDepth(); Vector2 oldPlayerPosition = GameManager.Instance.BestActivePlayer.transform.position.XY(); Vector2 newPlayerPosition = newRoom.Epicenter.ToVector2() + new Vector2(0f, -3f); Pixelator.Instance.FadeToColor(0.25f, Color.white, true, 0.125f); Pathfinder.Instance.InitializeRegion(d.data, newRoom.area.basePosition, newRoom.area.dimensions); GameManager.Instance.BestActivePlayer.WarpToPoint(newPlayerPosition, false, false); if (GameManager.Instance.CurrentGameType == GameManager.GameType.COOP_2_PLAYER) { GameManager.Instance.GetOtherPlayer(GameManager.Instance.BestActivePlayer).ReuniteWithOtherPlayer(GameManager.Instance.BestActivePlayer, false); } yield return(null); for (int i = 0; i < GameManager.Instance.AllPlayers.Length; i++) { GameManager.Instance.AllPlayers[i].WarpFollowersToPlayer(false); GameManager.Instance.AllPlayers[i].WarpCompanionsToPlayer(false); } yield return(new WaitForSeconds(drillItem.DelayPostExpansionPreEnemies)); yield return(GameManager.Instance.StartCoroutine(ExpandHandleCombatWaves(drillItem, d, newRoom, sourceChest))); drillItem.DisappearDrillPoof.SpawnAtPosition(spawnedSprite.WorldBottomLeft + new Vector2(-0.0625f, 0.25f), 0f, null, null, null, new float?(3f), false, null, null, false); Destroy(spawnedVFX.gameObject); AkSoundEngine.PostEvent("Stop_OBJ_paydaydrill_loop_01", GameManager.Instance.gameObject); AkSoundEngine.PostEvent("Play_OBJ_item_spawn_01", GameManager.Instance.gameObject); sourceChest.ForceUnlock(); bool goodToGo = false; while (!goodToGo) { goodToGo = true; for (int j = 0; j < GameManager.Instance.AllPlayers.Length; j++) { float num = Vector2.Distance(sourceChest.specRigidbody.UnitCenter, GameManager.Instance.AllPlayers[j].CenterPosition); if (num > 3f) { goodToGo = false; } } yield return(null); } Pixelator.Instance.FadeToColor(0.25f, Color.white, true, 0.125f); GameManager.Instance.BestActivePlayer.WarpToPoint(oldPlayerPosition, false, false); if (GameManager.Instance.CurrentGameType == GameManager.GameType.COOP_2_PLAYER) { GameManager.Instance.GetOtherPlayer(GameManager.Instance.BestActivePlayer).ReuniteWithOtherPlayer(GameManager.Instance.BestActivePlayer, false); } sourceChest.transform.position = oldChestPosition; if (sourceChest.transform.parent == newRoom.hierarchyParent) { sourceChest.transform.parent = sourceRoom.hierarchyParent; } SpeculativeRigidbody component3 = sourceChest.GetComponent <SpeculativeRigidbody>(); if (component3) { component3.Reinitialize(); } tk2dBaseSprite component4 = sourceChest.GetComponent <tk2dBaseSprite>(); if (component4) { component4.UpdateZDepth(); } sourceRoom.RegisterInteractable(sourceChest); FieldInfo m_inEffectField = typeof(PaydayDrillItem).GetField("m_inEffect", BindingFlags.Instance | BindingFlags.NonPublic); m_inEffectField.SetValue(drillItem, false); // m_inEffect = false; yield break; }
protected IEnumerator ExpandHandleSeamlessTransitionToCombatRoomHook(Action <PaydayDrillItem, RoomHandler, Chest> orig, PaydayDrillItem self, RoomHandler sourceRoom, Chest sourceChest) { Dungeon dungeon = GameManager.Instance.Dungeon; if (dungeon.tileIndices.tilesetId == GlobalDungeonData.ValidTilesets.JUNGLEGEON) { GameManager.Instance.StartCoroutine(ExpandHandleTransitionToFallbackCombatRoom(self, sourceRoom, sourceChest)); yield break; } else { sourceChest.majorBreakable.TemporarilyInvulnerable = true; sourceRoom.DeregisterInteractable(sourceChest); int tmapExpansion = 13; RoomHandler newRoom = dungeon.RuntimeDuplicateChunk(sourceRoom.area.basePosition, sourceRoom.area.dimensions, tmapExpansion, sourceRoom, true); newRoom.CompletelyPreventLeaving = true; List <Transform> movedObjects = new List <Transform>(); string[] c_rewardRoomObjects = ReflectionHelpers.ReflectGetField <string[]>(typeof(PaydayDrillItem), "c_rewardRoomObjects", self); for (int i = 0; i < c_rewardRoomObjects.Length; i++) { Transform transform = sourceRoom.hierarchyParent.Find(c_rewardRoomObjects[i]); if (transform) { movedObjects.Add(transform); ExpandMoveObjectBetweenRooms(transform, sourceRoom, newRoom); } } ExpandMoveObjectBetweenRooms(sourceChest.transform, sourceRoom, newRoom); if (sourceChest.specRigidbody) { PathBlocker.BlockRigidbody(sourceChest.specRigidbody, false); } Vector3 m_baseChestOffset = ReflectionHelpers.ReflectGetField <Vector3>(typeof(PaydayDrillItem), "m_baseChestOffset", self); Vector3 m_largeChestOffset = ReflectionHelpers.ReflectGetField <Vector3>(typeof(PaydayDrillItem), "m_largeChestOffset", self); Vector3 chestOffset = m_baseChestOffset; if (sourceChest.name.Contains("_Red") || sourceChest.name.Contains("_Black")) { chestOffset += m_largeChestOffset; } GameObject spawnedVFX = SpawnManager.SpawnVFX(self.DrillVFXPrefab, sourceChest.transform.position + chestOffset, Quaternion.identity); tk2dBaseSprite spawnedSprite = spawnedVFX.GetComponent <tk2dBaseSprite>(); spawnedSprite.HeightOffGround = 1f; spawnedSprite.UpdateZDepth(); Vector2 oldPlayerPosition = GameManager.Instance.BestActivePlayer.transform.position.XY(); Vector2 playerOffset = oldPlayerPosition - sourceRoom.area.basePosition.ToVector2(); Vector2 newPlayerPosition = newRoom.area.basePosition.ToVector2() + playerOffset; Pixelator.Instance.FadeToColor(0.25f, Color.white, true, 0.125f); Pathfinder.Instance.InitializeRegion(dungeon.data, newRoom.area.basePosition, newRoom.area.dimensions); GameManager.Instance.BestActivePlayer.WarpToPoint(newPlayerPosition, false, false); if (GameManager.Instance.CurrentGameType == GameManager.GameType.COOP_2_PLAYER) { GameManager.Instance.GetOtherPlayer(GameManager.Instance.BestActivePlayer).ReuniteWithOtherPlayer(GameManager.Instance.BestActivePlayer, false); } yield return(null); for (int j = 0; j < GameManager.Instance.AllPlayers.Length; j++) { GameManager.Instance.AllPlayers[j].WarpFollowersToPlayer(false); GameManager.Instance.AllPlayers[j].WarpCompanionsToPlayer(false); } yield return(dungeon.StartCoroutine(HandleCombatRoomExpansion(self, sourceRoom, newRoom, sourceChest))); self.DisappearDrillPoof.SpawnAtPosition(spawnedSprite.WorldBottomLeft + new Vector2(-0.0625f, 0.25f), 0f, null, null, null, new float?(3f), false, null, null, false); Destroy(spawnedVFX.gameObject); sourceChest.ForceUnlock(); AkSoundEngine.PostEvent("Stop_OBJ_paydaydrill_loop_01", GameManager.Instance.gameObject); AkSoundEngine.PostEvent("Play_OBJ_item_spawn_01", GameManager.Instance.gameObject); bool goodToGo = false; while (!goodToGo) { goodToGo = true; for (int k = 0; k < GameManager.Instance.AllPlayers.Length; k++) { float num = Vector2.Distance(sourceChest.specRigidbody.UnitCenter, GameManager.Instance.AllPlayers[k].CenterPosition); if (num > 3f) { goodToGo = false; } } yield return(null); } GameManager.Instance.MainCameraController.SetManualControl(true, true); GameManager.Instance.MainCameraController.OverridePosition = GameManager.Instance.BestActivePlayer.CenterPosition; for (int l = 0; l < GameManager.Instance.AllPlayers.Length; l++) { GameManager.Instance.AllPlayers[l].SetInputOverride("shrinkage"); } yield return(dungeon.StartCoroutine(HandleCombatRoomShrinking(newRoom))); for (int m = 0; m < GameManager.Instance.AllPlayers.Length; m++) { GameManager.Instance.AllPlayers[m].ClearInputOverride("shrinkage"); } Pixelator.Instance.FadeToColor(0.25f, Color.white, true, 0.125f); AkSoundEngine.PostEvent("Play_OBJ_paydaydrill_end_01", GameManager.Instance.gameObject); GameManager.Instance.MainCameraController.SetManualControl(false, false); GameManager.Instance.BestActivePlayer.WarpToPoint(oldPlayerPosition, false, false); if (GameManager.Instance.CurrentGameType == GameManager.GameType.COOP_2_PLAYER) { GameManager.Instance.GetOtherPlayer(GameManager.Instance.BestActivePlayer).ReuniteWithOtherPlayer(GameManager.Instance.BestActivePlayer, false); } ExpandMoveObjectBetweenRooms(sourceChest.transform, newRoom, sourceRoom); for (int n = 0; n < movedObjects.Count; n++) { ExpandMoveObjectBetweenRooms(movedObjects[n], newRoom, sourceRoom); } sourceRoom.RegisterInteractable(sourceChest); FieldInfo m_inEffectField = typeof(PaydayDrillItem).GetField("m_inEffect", BindingFlags.Instance | BindingFlags.NonPublic); m_inEffectField.SetValue(self, false); } yield break; }
// Token: 0x06007314 RID: 29460 RVA: 0x002CD318 File Offset: 0x002CB518 /*protected IEnumerator HandleTransitionToFallbackCombatRoom(RoomHandler sourceRoom, Chest sourceChest) * { * Dungeon d = GameManager.Instance.Dungeon; * sourceChest.majorBreakable.TemporarilyInvulnerable = true; * sourceRoom.DeregisterInteractable(sourceChest); * RoomHandler newRoom = d.AddRuntimeRoom(this.GenericFallbackCombatRoom, null, DungeonData.LightGenerationStyle.FORCE_COLOR); * newRoom.CompletelyPreventLeaving = true; * Vector3 oldChestPosition = sourceChest.transform.position; * sourceChest.transform.position = newRoom.Epicenter.ToVector3(); * if (sourceChest.transform.parent == sourceRoom.hierarchyParent) * { * sourceChest.transform.parent = newRoom.hierarchyParent; * } * SpeculativeRigidbody component = sourceChest.GetComponent<SpeculativeRigidbody>(); * if (component) * { * component.Reinitialize(); * PathBlocker.BlockRigidbody(component, false); * } * tk2dBaseSprite component2 = sourceChest.GetComponent<tk2dBaseSprite>(); * if (component2) * { * component2.UpdateZDepth(); * } * Vector3 chestOffset = this.m_baseChestOffset; * if (sourceChest.name.Contains("_Red") || sourceChest.name.Contains("_Black")) * { * chestOffset += this.m_largeChestOffset; * } * GameObject spawnedVFX = SpawnManager.SpawnVFX(this.DrillVFXPrefab, sourceChest.transform.position + chestOffset, Quaternion.identity); * tk2dBaseSprite spawnedSprite = spawnedVFX.GetComponent<tk2dBaseSprite>(); * spawnedSprite.HeightOffGround = 1f; * spawnedSprite.UpdateZDepth(); * Vector2 oldPlayerPosition = GameManager.Instance.BestActivePlayer.transform.position.XY(); * Vector2 newPlayerPosition = newRoom.Epicenter.ToVector2() + new Vector2(0f, -3f); * Pixelator.Instance.FadeToColor(0.25f, Color.white, true, 0.125f); * Pathfinder.Instance.InitializeRegion(d.data, newRoom.area.basePosition, newRoom.area.dimensions); * GameManager.Instance.BestActivePlayer.WarpToPoint(newPlayerPosition, false, false); * if (GameManager.Instance.CurrentGameType == GameManager.GameType.COOP_2_PLAYER) * { * GameManager.Instance.GetOtherPlayer(GameManager.Instance.BestActivePlayer).ReuniteWithOtherPlayer(GameManager.Instance.BestActivePlayer, false); * } * yield return null; * for (int i = 0; i < GameManager.Instance.AllPlayers.Length; i++) * { * GameManager.Instance.AllPlayers[i].WarpFollowersToPlayer(false); * GameManager.Instance.AllPlayers[i].WarpCompanionsToPlayer(false); * } * yield return new WaitForSeconds(this.DelayPostExpansionPreEnemies); * yield return this.StartCoroutine(this.HandleCombatWaves(d, newRoom, sourceChest)); * this.DisappearDrillPoof.SpawnAtPosition(spawnedSprite.WorldBottomLeft + new Vector2(-0.0625f, 0.25f), 0f, null, null, null, new float?(3f), false, null, null, false); * UnityEngine.Object.Destroy(spawnedVFX.gameObject); * AkSoundEngine.PostEvent("Stop_OBJ_paydaydrill_loop_01", GameManager.Instance.gameObject); * AkSoundEngine.PostEvent("Play_OBJ_item_spawn_01", GameManager.Instance.gameObject); * sourceChest.ForceUnlock(); * bool goodToGo = false; * while (!goodToGo) * { * goodToGo = true; * for (int j = 0; j < GameManager.Instance.AllPlayers.Length; j++) * { * float num = Vector2.Distance(sourceChest.specRigidbody.UnitCenter, GameManager.Instance.AllPlayers[j].CenterPosition); * if (num > 3f) * { * goodToGo = false; * } * } * yield return null; * } * Pixelator.Instance.FadeToColor(0.25f, Color.white, true, 0.125f); * GameManager.Instance.BestActivePlayer.WarpToPoint(oldPlayerPosition, false, false); * if (GameManager.Instance.CurrentGameType == GameManager.GameType.COOP_2_PLAYER) * { * GameManager.Instance.GetOtherPlayer(GameManager.Instance.BestActivePlayer).ReuniteWithOtherPlayer(GameManager.Instance.BestActivePlayer, false); * } * sourceChest.transform.position = oldChestPosition; * if (sourceChest.transform.parent == newRoom.hierarchyParent) * { * sourceChest.transform.parent = sourceRoom.hierarchyParent; * } * SpeculativeRigidbody component3 = sourceChest.GetComponent<SpeculativeRigidbody>(); * if (component3) * { * component3.Reinitialize(); * } * tk2dBaseSprite component4 = sourceChest.GetComponent<tk2dBaseSprite>(); * if (component4) * { * component4.UpdateZDepth(); * } * sourceRoom.RegisterInteractable(sourceChest); * this.m_inEffect = false; * yield break; * }*/ // Token: 0x06007315 RID: 29461 RVA: 0x002CD344 File Offset: 0x002CB544 protected IEnumerator HandleSeamlessTransitionToCombatRoom(RoomHandler sourceRoom, Chest sourceChest) { Dungeon d = GameManager.Instance.Dungeon; sourceChest.majorBreakable.TemporarilyInvulnerable = true; sourceRoom.DeregisterInteractable(sourceChest); int tmapExpansion = 10; Toolbox.RuntimeDuplicateChunk(sourceRoom.area.basePosition, sourceRoom.area.dimensions, tmapExpansion, sourceRoom, true); //newRoom.CompletelyPreventLeaving = true; List <Transform> movedObjects = new List <Transform>(); for (int i = 0; i < this.c_rewardRoomObjects.Length; i++) { Transform transform = sourceRoom.hierarchyParent.Find(this.c_rewardRoomObjects[i]); if (transform) { movedObjects.Add(transform); //this.MoveObjectBetweenRooms(transform, sourceRoom, newRoom); } } //this.MoveObjectBetweenRooms(sourceChest.transform, sourceRoom, newRoom); if (sourceChest.specRigidbody) { PathBlocker.BlockRigidbody(sourceChest.specRigidbody, false); } Vector3 chestOffset = this.m_baseChestOffset; if (sourceChest.name.Contains("_Red") || sourceChest.name.Contains("_Black")) { chestOffset += this.m_largeChestOffset; } Vector2 oldPlayerPosition = GameManager.Instance.BestActivePlayer.transform.position.XY(); Vector2 playerOffset = oldPlayerPosition - sourceRoom.area.basePosition.ToVector2(); //Vector2 newPlayerPosition = newRoom.area.basePosition.ToVector2() + playerOffset; Pixelator.Instance.FadeToColor(0.25f, Color.white, true, 0.125f); //Pathfinder.Instance.InitializeRegion(d.data, newRoom.area.basePosition, newRoom.area.dimensions); //GameManager.Instance.BestActivePlayer.WarpToPoint(newPlayerPosition, false, false); if (GameManager.Instance.CurrentGameType == GameManager.GameType.COOP_2_PLAYER) { GameManager.Instance.GetOtherPlayer(GameManager.Instance.BestActivePlayer).ReuniteWithOtherPlayer(GameManager.Instance.BestActivePlayer, false); } yield return(null); for (int j = 0; j < GameManager.Instance.AllPlayers.Length; j++) { GameManager.Instance.AllPlayers[j].WarpFollowersToPlayer(false); GameManager.Instance.AllPlayers[j].WarpCompanionsToPlayer(false); } yield return(d.StartCoroutine(this.HandleCombatRoomExpansion(sourceRoom, sourceRoom, sourceChest))); sourceChest.ForceUnlock(); AkSoundEngine.PostEvent("Stop_OBJ_paydaydrill_loop_01", GameManager.Instance.gameObject); AkSoundEngine.PostEvent("Play_OBJ_item_spawn_01", GameManager.Instance.gameObject); bool goodToGo = false; while (!goodToGo) { goodToGo = true; for (int k = 0; k < GameManager.Instance.AllPlayers.Length; k++) { float num = Vector2.Distance(sourceChest.specRigidbody.UnitCenter, GameManager.Instance.AllPlayers[k].CenterPosition); if (num > 3f) { goodToGo = false; } } yield return(null); } GameManager.Instance.MainCameraController.SetManualControl(true, true); GameManager.Instance.MainCameraController.OverridePosition = GameManager.Instance.BestActivePlayer.CenterPosition; for (int l = 0; l < GameManager.Instance.AllPlayers.Length; l++) { GameManager.Instance.AllPlayers[l].SetInputOverride("shrinkage"); } yield return(d.StartCoroutine(this.HandleCombatRoomShrinking(sourceRoom))); for (int m = 0; m < GameManager.Instance.AllPlayers.Length; m++) { GameManager.Instance.AllPlayers[m].ClearInputOverride("shrinkage"); } Pixelator.Instance.FadeToColor(0.25f, Color.white, true, 0.125f); AkSoundEngine.PostEvent("Play_OBJ_paydaydrill_end_01", GameManager.Instance.gameObject); GameManager.Instance.MainCameraController.SetManualControl(false, false); GameManager.Instance.BestActivePlayer.WarpToPoint(oldPlayerPosition, false, false); if (GameManager.Instance.CurrentGameType == GameManager.GameType.COOP_2_PLAYER) { GameManager.Instance.GetOtherPlayer(GameManager.Instance.BestActivePlayer).ReuniteWithOtherPlayer(GameManager.Instance.BestActivePlayer, false); } //this.MoveObjectBetweenRooms(sourceChest.transform, newRoom, sourceRoom); for (int n = 0; n < movedObjects.Count; n++) { // this.MoveObjectBetweenRooms(movedObjects[n], newRoom, sourceRoom); } sourceRoom.RegisterInteractable(sourceChest); yield break; }