private void RerollChest(Chest chest, PlayerController user) { Chest newChest = GameManager.Instance.RewardManager.SpawnRewardChestAt(chest.sprite.WorldBottomLeft.ToIntVector2()); user.CurrentRoom.DeregisterInteractable(chest); chest.DeregisterChestOnMinimap(); Destroy(chest.gameObject); }
protected override void DoEffect(PlayerController user) { IPlayerInteractable nearestInteractable = user.CurrentRoom.GetNearestInteractable(user.CenterPosition, 1f, user); if (!(nearestInteractable is Chest)) { return; } Chest rerollChest = nearestInteractable as Chest; if (rerollChest.IsGlitched == true) { Chest.Spawn(GameManager.Instance.RewardManager.S_Chest, rerollChest.sprite.WorldCenter.ToIntVector2()); } else { if (rerollChest.IsRainbowChest == true) { Chest badchest = Chest.Spawn(GameManager.Instance.RewardManager.S_Chest, rerollChest.sprite.WorldCenter.ToIntVector2()); badchest.IsLocked = false; } else { if ((GameManager.Instance.RewardManager.GetQualityFromChest(rerollChest) == ItemQuality.D)) { LootEngine.SpawnItem(Gungeon.Game.Items["junk"].gameObject, rerollChest.sprite.WorldCenter, Vector2.left, 0); } if ((GameManager.Instance.RewardManager.GetQualityFromChest(rerollChest) == ItemQuality.C)) { Chest badchest = Chest.Spawn(GameManager.Instance.RewardManager.D_Chest, rerollChest.sprite.WorldCenter.ToIntVector2()); badchest.IsLocked = false; } if ((GameManager.Instance.RewardManager.GetQualityFromChest(rerollChest) == ItemQuality.B)) { Chest badchest = Chest.Spawn(GameManager.Instance.RewardManager.C_Chest, rerollChest.sprite.WorldCenter.ToIntVector2()); badchest.IsLocked = false; } if ((GameManager.Instance.RewardManager.GetQualityFromChest(rerollChest) == ItemQuality.A)) { Chest badchest = Chest.Spawn(GameManager.Instance.RewardManager.B_Chest, rerollChest.sprite.WorldCenter.ToIntVector2()); badchest.IsLocked = false; } if ((GameManager.Instance.RewardManager.GetQualityFromChest(rerollChest) == ItemQuality.S)) { Chest badchest = Chest.Spawn(GameManager.Instance.RewardManager.A_Chest, rerollChest.sprite.WorldCenter.ToIntVector2()); badchest.IsLocked = false; } } user.CurrentRoom.DeregisterInteractable(rerollChest); rerollChest.DeregisterChestOnMinimap(); Destroy(rerollChest.gameObject); } }
private void UpgradeChest(Chest chest, PlayerController user) { ChestToolbox.ChestTier tier = chest.GetChestTier(); ChestToolbox.ChestTier targetTier = ChestToolbox.ChestTier.OTHER; switch (tier) { case ChestToolbox.ChestTier.BROWN: targetTier = ChestToolbox.ChestTier.BLUE; break; case ChestToolbox.ChestTier.BLUE: targetTier = ChestToolbox.ChestTier.GREEN; break; case ChestToolbox.ChestTier.GREEN: targetTier = ChestToolbox.ChestTier.RED; break; case ChestToolbox.ChestTier.RED: targetTier = ChestToolbox.ChestTier.BLACK; break; case ChestToolbox.ChestTier.BLACK: targetTier = ChestToolbox.ChestTier.RAINBOW; break; case ChestToolbox.ChestTier.SYNERGY: targetTier = ChestToolbox.ChestTier.BLACK; break; } ChestToolbox.ThreeStateValue isMimic = ChestToolbox.ThreeStateValue.UNSPECIFIED; if (chest.IsMimic) { isMimic = ChestToolbox.ThreeStateValue.FORCEYES; } else { isMimic = ChestToolbox.ThreeStateValue.FORCENO; } if (targetTier != ChestToolbox.ChestTier.OTHER) { ChestToolbox.SpawnChestEasy(chest.sprite.WorldBottomLeft.ToIntVector2(), targetTier, chest.IsLocked, Chest.GeneralChestType.UNSPECIFIED, isMimic); } else { GameManager.Instance.RewardManager.SpawnRewardChestAt(chest.sprite.WorldBottomLeft.ToIntVector2()); } user.CurrentRoom.DeregisterInteractable(chest); chest.DeregisterChestOnMinimap(); Destroy(chest.gameObject); }
public void ReplaceChest(PlayerController user) { if (rerollChest == null || rerollChest.IsBroken) { return; } Chest newChest = GameManager.Instance.RewardManager.SpawnRewardChestAt(rerollChest.sprite.WorldBottomLeft.ToIntVector2()); user.CurrentRoom.DeregisterInteractable(rerollChest); rerollChest.DeregisterChestOnMinimap(); Destroy(rerollChest.gameObject); }
private void TeleportChest(Chest chest, PlayerController user) { CachedChestData item = new CachedChestData(chest); SpawnManager.SpawnVFX(EasyVFXDatabase.ChestTeleporterTimeWarp, chest.sprite.WorldCenter, Quaternion.identity, true); user.CurrentRoom.DeregisterInteractable(chest); chest.DeregisterChestOnMinimap(); if (chest.majorBreakable) { chest.majorBreakable.TemporarilyInvulnerable = true; } Object.Destroy(chest.gameObject, 0.8f); this.m_chestos.Add(item); }
protected override void DoEffect(PlayerController user) { IPlayerInteractable nearestInteractable = user.CurrentRoom.GetNearestInteractable(user.CenterPosition, 1f, user); if (!(nearestInteractable is Chest)) { return; } AkSoundEngine.PostEvent("Play_ENM_electric_charge_01", user.gameObject); Chest rerollChest = nearestInteractable as Chest; int selected = UnityEngine.Random.Range(1, 15); ETGModConsole.Log(selected.ToString()); VFXToolbox.GlitchScreenForSeconds(1.5f); switch (selected) { case 1: //Blow up chest if (user.PlayerHasActiveSynergy("KEYGEN")) { SpareChest(rerollChest); } else { Exploder.DoDefaultExplosion(rerollChest.specRigidbody.UnitCenter, Vector2.zero); if (rerollChest.IsMimic) { OMITBReflectionHelpers.ReflectSetField <bool>(typeof(Chest), "m_isMimic", false, rerollChest); } rerollChest.majorBreakable.Break(Vector2.zero); if (rerollChest.GetChestTier() == ChestToolbox.ChestTier.RAT) { UnityEngine.Object.Destroy(rerollChest.gameObject); } } break; case 2: //Open Chest rerollChest.ForceOpen(user); break; case 3: //Break Lock if (user.PlayerHasActiveSynergy("KEYGEN")) { SpareChest(rerollChest); } else { if (rerollChest.IsLocked) { rerollChest.BreakLock(); } else { rerollChest.majorBreakable.Break(Vector2.zero); } } break; case 4: //Duplicate Chest DupeChest(rerollChest, user); break; case 5: //Turn into mimic if (!rerollChest.IsMimic) { rerollChest.overrideMimicChance = 100; rerollChest.MaybeBecomeMimic(); } rerollChest.ForceOpen(user); break; case 6: //Englitch List <GlobalDungeonData.ValidTilesets> bannedGlitchFloors = new List <GlobalDungeonData.ValidTilesets>() { GlobalDungeonData.ValidTilesets.CATACOMBGEON, GlobalDungeonData.ValidTilesets.HELLGEON, GlobalDungeonData.ValidTilesets.OFFICEGEON, GlobalDungeonData.ValidTilesets.FORGEGEON, }; if (!bannedGlitchFloors.Contains(GameManager.Instance.Dungeon.tileIndices.tilesetId)) { rerollChest.BecomeGlitchChest(); } else { if (!rerollChest.IsMimic) { rerollChest.MaybeBecomeMimic(); } rerollChest.ForceOpen(user); } break; case 7: //Enrainbow if (UnityEngine.Random.value <= 0.65f) { UpgradeChest(rerollChest, user); } else { rerollChest.BecomeRainbowChest(); } break; case 8: //Reroll RerollChest(rerollChest, user); break; case 9: //Turn into pickups if (user.PlayerHasActiveSynergy("KEYGEN")) { SpareChest(rerollChest); } else { for (int i = 0; i < 5; i++) { LootEngine.SpawnItem(PickupObjectDatabase.GetById(BraveUtility.RandomElement(BabyGoodChanceKin.lootIDlist)).gameObject, rerollChest.sprite.WorldCenter, Vector2.zero, 0); } LootEngine.SpawnCurrency(rerollChest.sprite.WorldCenter, UnityEngine.Random.Range(5, 11)); user.CurrentRoom.DeregisterInteractable(rerollChest); rerollChest.DeregisterChestOnMinimap(); UnityEngine.Object.Destroy(rerollChest.gameObject); } break; case 10: //Fuse if (user.PlayerHasActiveSynergy("KEYGEN")) { SpareChest(rerollChest); } else { var type = typeof(Chest); var func = type.GetMethod("TriggerCountdownTimer", BindingFlags.Instance | BindingFlags.NonPublic); var ret = func.Invoke(rerollChest, null); AkSoundEngine.PostEvent("Play_OBJ_fuse_loop_01", rerollChest.gameObject); } break; case 11: //Unlock if (rerollChest.IsLocked) { rerollChest.ForceUnlock(); } else { rerollChest.ForceOpen(user); } break; case 12: //Enjam rerollChest.gameObject.GetOrAddComponent <JammedChestBehav>(); break; case 13: //TeleportChest TeleportChest(rerollChest, user); break; case 14: //Drill FauxDrill(rerollChest, user); break; } }
private void Start() { PlayerReflection.TargetPlayer = GameManager.Instance.PrimaryPlayer; PlayerReflection.MirrorSprite = MirrorSprite; if (!isGlitched) { if (GameManager.Instance.CurrentGameType == GameManager.GameType.COOP_2_PLAYER) { CoopPlayerReflection.TargetPlayer = GameManager.Instance.SecondaryPlayer; CoopPlayerReflection.MirrorSprite = MirrorSprite; } else { CoopPlayerReflection.gameObject.SetActive(false); } } else { PlayerReflection.gameObject.SetActive(false); CoopPlayerReflection.gameObject.SetActive(false); tk2dBaseSprite[] AllMirrorSprites = gameObject.GetComponents <tk2dBaseSprite>(); if (AllMirrorSprites != null && AllMirrorSprites.Length > 0) { ChaosShaders.Instance.ApplyGlitchShader(null, AllMirrorSprites[0]); } } IntVector2 MirrorChestPosition = (base.transform.position.IntXY(VectorConversions.Round) + new IntVector2(0, -2) - m_ParentRoom.area.basePosition); if (spawnBellosChest) { MirrorChest = ChaosUtility.GenerateChest(MirrorChestPosition, m_ParentRoom, PickupObject.ItemQuality.A, 0, false); MirrorChest.forceContentIds = new List <int>() { 435, 493 }; } else { MirrorChest = ChaosUtility.GenerateChest(MirrorChestPosition, m_ParentRoom, null, -1f); } MirrorChest.PreventFuse = true; SpriteOutlineManager.RemoveOutlineFromSprite(MirrorChest.sprite, false); Transform transform = MirrorChest.gameObject.transform.Find("Shadow"); if (transform) { MirrorChest.ShadowSprite = transform.GetComponent <tk2dSprite>(); } MirrorChest.IsMirrorChest = true; MirrorChest.ConfigureOnPlacement(m_ParentRoom); m_ParentRoom.RegisterInteractable(MirrorChest); if (spawnBellosChest) { MirrorChest.DeregisterChestOnMinimap(); } if (MirrorChest.majorBreakable) { MirrorChest.majorBreakable.TemporarilyInvulnerable = true; } ChestSprite = MirrorChest.sprite; ChestSprite.renderer.enabled = false; ChestReflection.TargetSprite = ChestSprite; ChestReflection.MirrorSprite = MirrorSprite; SpeculativeRigidbody specRigidbody = MirrorSprite.specRigidbody; specRigidbody.OnRigidbodyCollision = (SpeculativeRigidbody.OnRigidbodyCollisionDelegate)Delegate.Combine(specRigidbody.OnRigidbodyCollision, new SpeculativeRigidbody.OnRigidbodyCollisionDelegate(HandleRigidbodyCollisionWithMirror)); MinorBreakable componentInChildren = GetComponentInChildren <MinorBreakable>(); componentInChildren.OnlyBrokenByCode = true; componentInChildren.heightOffGround = 4f; IPlayerInteractable[] TableInterfacesInChildren = GameObjectExtensions.GetInterfacesInChildren <IPlayerInteractable>(gameObject); for (int i = 0; i < TableInterfacesInChildren.Length; i++) { if (!m_ParentRoom.IsRegistered(TableInterfacesInChildren[i])) { m_ParentRoom.RegisterInteractable(TableInterfacesInChildren[i]); } } // Destroy(gameObject.GetComponent<MirrorController>()); // SpeculativeRigidbody InteractableRigidMirror = gameObject.GetComponent<SpeculativeRigidbody>(); // InteractableRigidMirror.Initialize(); // PhysicsEngine.Instance.RegisterOverlappingGhostCollisionExceptions(InteractableRigidMirror, null, false); }