Exemplo n.º 1
0
        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;
        }
Exemplo n.º 2
0
        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;
        }
Exemplo n.º 3
0
        // 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;
        }