public override bool CanBeUsed(PlayerController user) { if (!user || user.CurrentRoom == null || user.CurrentRoom.CompletelyPreventLeaving) { return(false); } IPlayerInteractable nearestInteractable = user.CurrentRoom.GetNearestInteractable(user.CenterPosition, 1f, user); if (nearestInteractable is InteractableLock || nearestInteractable is Chest || nearestInteractable is DungeonDoorController) { if (nearestInteractable is InteractableLock) { InteractableLock interactableLock = nearestInteractable as InteractableLock; if (interactableLock && !interactableLock.IsBusted && interactableLock.transform.position.GetAbsoluteRoom() == user.CurrentRoom && interactableLock.IsLocked && !interactableLock.HasBeenPicked && interactableLock.lockMode == InteractableLock.InteractableLockMode.NORMAL) { return(base.CanBeUsed(user)); } } else if (nearestInteractable is DungeonDoorController) { DungeonDoorController dungeonDoorController = nearestInteractable as DungeonDoorController; if (dungeonDoorController != null && dungeonDoorController.Mode == DungeonDoorController.DungeonDoorMode.COMPLEX && dungeonDoorController.isLocked && !dungeonDoorController.lockIsBusted) { return(base.CanBeUsed(user)); } } else if (nearestInteractable is Chest) { Chest chest = nearestInteractable as Chest; return(chest && chest.GetAbsoluteParentRoom() == user.CurrentRoom && chest.IsLocked && !chest.IsLockBroken && !chest.IsMimic && base.CanBeUsed(user)); } } return(false); }
void FixedUpdate() { PlayerController player = this.GetComponent <PlayerController>(); if (player == null || !player.passiveItems.Contains(parent)) { Destroy(); return; } IPlayerInteractable nearestInteractable = player.CurrentRoom.GetNearestInteractable(player.CenterPosition, 1f, player); if (!(nearestInteractable is Chest)) { HandleSize(Vector2.zero); return; } Chest chest = nearestInteractable as Chest; if (chest != lastChest) { Setup(chest); } HandleSize(baseScale); }
void FixedUpdate() { if (!player || player.CurrentRoom == null) { return; } IPlayerInteractable nearestInteractable = player.CurrentRoom.GetNearestInteractable(player.sprite.WorldCenter, 1f, player); if (nearestInteractable != null && nearestInteractable is Chest) { var chest = nearestInteractable as Chest; if (!encounteredChests.Contains(chest) && !chest.transform.Find(fxName)) { InitializeChest(chest); } else { nearbyChest = chest; } } else { nearbyChest = null; } HandleChests(); }
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.IsMimic) { rerollChest.ForceOpen(user); return; } AkSoundEngine.PostEvent(slotRoll, base.gameObject); //replaceChest.majorBreakable.TemporarilyInvulnerable = true; if (rerollChest.GetComponent <MeshRenderer>() != null) { MakeRainbow(rerollChest.GetComponent <MeshRenderer>()); } this.rerollChest = rerollChest; StartCoroutine(ItemBuilder.HandleDuration(this, 1.25f, user, ReplaceChest)); }
private void CmdApplyItem(GameObject sourceItemGo, GameObject interactableGo) { Item.Item sourceItem = sourceItemGo?.GetComponent <Item.Item>(); IPlayerInteractable interactable = interactableGo.GetComponent <IPlayerInteractable>(); interactable?.ApplyItemServer(sourceItem); }
void Update() { if (interactables.Count > 1) { targetInteractable = GetNearestInteractable(); foreach (IPlayerInteractable interactable in interactables) { if (interactable != targetInteractable) { interactable.Highlight(false); } else { interactable.Highlight(true); } } } else if (interactables.Count > 0) { targetInteractable = interactables [0]; } else { targetInteractable = null; } }
public override bool CanBeUsed(PlayerController user) { bool nom = EatenBullet == 0; { IPlayerInteractable nearestInteractable = user.CurrentRoom.GetNearestInteractable(user.CenterPosition, 0.75f, user); return(nearestInteractable is BulletThatCanKillThePast); } }
private void FixedUpdate() { var ray = new Ray(_camera.position, _camera.forward); if (Physics.Raycast(ray, out var hitInfo, _range)) { _interactable = hitInfo.collider.GetComponent <IPlayerInteractable>(); }
void OnCollisionExit(Collision other) { Debug.Log($"OnCollisionExit => {other.gameObject.tag}"); if (other.gameObject.CompareTag("PlayerInteractable")) { _showHint = false; _playerInteractable = null; } }
void OnCollisionEnter(Collision other) { Debug.Log($"OnCollisionEnter => {other.gameObject.tag}"); if (other.gameObject.CompareTag("PlayerInteractable")) { _showHint = true; _playerInteractable = other.gameObject.GetComponent <IPlayerInteractable>(); } }
protected override void DoEffect(PlayerController user) { IPlayerInteractable nearestInteractable = user.CurrentRoom.GetNearestInteractable(user.CenterPosition, 3f, user); if (!(nearestInteractable is AmmoPickup)) { return; } AmmoPickup rerollChest = nearestInteractable as AmmoPickup; Instantiate <GameObject>(EasyVFXDatabase.BloodiedScarfPoofVFX, rerollChest.sprite.WorldCenter, Quaternion.identity); Destroy(rerollChest.gameObject); AkSoundEngine.PostEvent("Play_OBJ_ammo_suck_01", gameObject); int bighead = UnityEngine.Random.Range(1, 11); if (bighead == 1) { this.ApplyStat(user, PlayerStats.StatType.Damage, 0.15f, StatModifier.ModifyMethod.ADDITIVE); } if (bighead == 2) { this.ApplyStat(user, PlayerStats.StatType.Health, 1f, StatModifier.ModifyMethod.ADDITIVE); } if (bighead == 3) { this.ApplyStat(user, PlayerStats.StatType.Coolness, 1f, StatModifier.ModifyMethod.ADDITIVE); } if (bighead == 4) { this.ApplyStat(user, PlayerStats.StatType.MovementSpeed, 0.15f, StatModifier.ModifyMethod.ADDITIVE); } if (bighead == 5) { this.ApplyStat(user, PlayerStats.StatType.AdditionalClipCapacityMultiplier, 0.15f, StatModifier.ModifyMethod.ADDITIVE); } if (bighead == 6) { this.ApplyStat(user, PlayerStats.StatType.AmmoCapacityMultiplier, 0.15f, StatModifier.ModifyMethod.ADDITIVE); } if (bighead == 7) { this.ApplyStat(user, PlayerStats.StatType.AdditionalBlanksPerFloor, 1f, StatModifier.ModifyMethod.ADDITIVE); } if (bighead == 8) { this.ApplyStat(user, PlayerStats.StatType.RateOfFire, 0.15f, StatModifier.ModifyMethod.ADDITIVE); } if (bighead == 9) { this.ApplyStat(user, PlayerStats.StatType.ReloadSpeed, 0.15f, StatModifier.ModifyMethod.ADDITIVE); } if (bighead == 10) { this.ApplyStat(user, PlayerStats.StatType.RangeMultiplier, 0.15f, StatModifier.ModifyMethod.ADDITIVE); } }
private void OnTriggerEnter(Collider other) { Debug.Log("Collision appeared"); IPlayerInteractable otherObject = other.gameObject.GetComponent <IPlayerInteractable>(); if (otherObject != null) { otherObject.OnPlayerCollided(this); } }
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); } }
protected override void DoEffect(PlayerController user) { IPlayerInteractable nearestInteractable = user.CurrentRoom.GetNearestInteractable(user.CenterPosition, 1f, user); if (!(nearestInteractable is Chest)) { return; } Chest dupeChest = nearestInteractable as Chest; IntVector2 bestRewardLocation = user.CurrentRoom.GetBestRewardLocation(IntVector2.One * 3, RoomHandler.RewardLocationStyle.PlayerCenter, true); ChestToolbox.ChestTier tier = dupeChest.GetChestTier(); if (tier == ChestToolbox.ChestTier.RAT) { tier = ChestToolbox.ChestTier.RED; } else if (tier == ChestToolbox.ChestTier.TRUTH) { tier = ChestToolbox.ChestTier.BLUE; } ChestToolbox.ThreeStateValue isMimic = ChestToolbox.ThreeStateValue.UNSPECIFIED; if (dupeChest.IsMimic) { isMimic = ChestToolbox.ThreeStateValue.FORCEYES; } else { isMimic = ChestToolbox.ThreeStateValue.FORCENO; } ChestToolbox.ThreeStateValue isFused = ChestToolbox.ThreeStateValue.UNSPECIFIED; if (dupeChest.GetFuse() != null) { isFused = ChestToolbox.ThreeStateValue.FORCEYES; } else { isFused = ChestToolbox.ThreeStateValue.FORCENO; } Chest spawnedChest = ChestToolbox.SpawnChestEasy(bestRewardLocation, tier, dupeChest.IsLocked, Chest.GeneralChestType.UNSPECIFIED, isMimic, isFused); if (dupeChest.GetComponent <JammedChestBehav>()) { spawnedChest.gameObject.AddComponent <JammedChestBehav>(); } else if (dupeChest.GetComponent <PassedOverForJammedChest>()) { spawnedChest.gameObject.AddComponent <PassedOverForJammedChest>(); } }
void OnTriggerExit(Collider col) { IPlayerInteractable interactable = col.GetComponent <IPlayerInteractable> (); if (interactable != null) { interactable.Highlight(false); interactable.InteractEnd(); interactables.Remove(interactable); Debug.Log(interactable); } }
public override bool CanBeUsed(PlayerController user) { IPlayerInteractable nearestInteractable = user.CurrentRoom.GetNearestInteractable(user.CenterPosition, 1f, user); if (nearestInteractable is Chest) { return(true); } else { return(false); } }
/// <summary> /// Handles InteractableChanged event, updating the overlay depending on if null or not /// </summary> /// <param name="interactable">The new interactable (enables and updates overlay) or null (disables)</param> private void OnInteractableChanged(IPlayerInteractable interactable) { if (interactable == null) { interactionContainer.gameObject.SetActive(false); } else { interactionText.text = Constants.ActionToText(interactable.Action); interactionContainer.gameObject.SetActive(true); currentInteractableTransform = interactable.ThisGO.transform.position; } }
protected override void DoEffect(PlayerController user) { AkSoundEngine.PostEvent("Play_BOSS_doormimic_vanish_01", base.gameObject); IPlayerInteractable nearestInteractable = user.CurrentRoom.GetNearestInteractable(user.CenterPosition, 1f, user); this.EatenBullet += 1; bool flag = nearestInteractable is PassiveItem; if (flag) { LootEngine.DoDefaultSynergyPoof((nearestInteractable as PassiveItem).sprite.WorldCenter, false); UnityEngine.Object.Destroy((nearestInteractable as PassiveItem).gameObject); } }
public override bool CanBeUsed(PlayerController user) { IPlayerInteractable nearestInteractable = user.CurrentRoom.GetNearestInteractable(user.CenterPosition, 1f, user); if (nearestInteractable is PassiveItem) { PassiveItem passiveItem = (nearestInteractable as PassiveItem); if (passiveItem && passiveItem.PickupObjectId == 531) { return(false); } } return(nearestInteractable is PassiveItem | nearestInteractable is PlayerItem); }
public IPlayerInteractable GetNearestInteractable() { float near = 9999; IPlayerInteractable nearestInteractable = interactables [0]; foreach (IPlayerInteractable interactable in interactables) { float dist = Vector3.Distance(interactable.GetPosition(), transform.position); if (dist < near) { near = dist; nearestInteractable = interactable; } } return(nearestInteractable); }
public void OOf(Projectile projectile) { PlayerController player = this.gun.CurrentOwner as PlayerController; { IPlayerInteractable nearestInteractable = player.CurrentRoom.GetNearestInteractable(projectile.sprite.WorldCenter, 1f, player); if (nearestInteractable is InteractableLock || nearestInteractable is Chest || nearestInteractable is DungeonDoorController) { if (nearestInteractable is InteractableLock) { InteractableLock interactableLock = nearestInteractable as InteractableLock; if (interactableLock.lockMode == InteractableLock.InteractableLockMode.NORMAL) { { AkSoundEngine.PostEvent("Play_OBJ_purchase_unable_01", base.gameObject); interactableLock.BreakLock(); } } return; } if (nearestInteractable is DungeonDoorController) { DungeonDoorController dungeonDoorController = nearestInteractable as DungeonDoorController; if (dungeonDoorController != null && dungeonDoorController.Mode == DungeonDoorController.DungeonDoorMode.COMPLEX && dungeonDoorController.isLocked) { { AkSoundEngine.PostEvent("Play_OBJ_purchase_unable_01", base.gameObject); dungeonDoorController.BreakLock(); } } } else if (nearestInteractable is Chest) { Chest chest = nearestInteractable as Chest; if (chest.IsLocked) { if (!chest.IsLockBroken) { AkSoundEngine.PostEvent("Play_WPN_gun_empty_01", base.gameObject); chest.BreakLock(); return; } } } } } }
// Token: 0x06000019 RID: 25 RVA: 0x00003ADC File Offset: 0x00001CDC private static void PlaceBreachShrines() { bool flag = OldShrineFactory.m_builtShrines; bool flag2 = !flag; if (flag2) { foreach (GameObject gameObject in OldShrineFactory.builtShrines.Values) { try { OldShrineFactory.CustomShrineController component = gameObject.GetComponent <OldShrineFactory.CustomShrineController>(); bool flag3 = !component.isBreachShrine; bool flag4 = !flag3; if (flag4) { OldShrineFactory.CustomShrineController component2 = UnityEngine.Object.Instantiate <GameObject>(gameObject).GetComponent <OldShrineFactory.CustomShrineController>(); component2.Copy(component); component2.gameObject.SetActive(true); component2.sprite.PlaceAtPositionByAnchor(component2.offset, tk2dBaseSprite.Anchor.LowerCenter); IPlayerInteractable component3 = component2.GetComponent <IPlayerInteractable>(); bool flag5 = component3 is SimpleInteractable; bool flag6 = flag5; if (flag6) { ((SimpleInteractable)component3).OnAccept = component2.OnAccept; ((SimpleInteractable)component3).OnDecline = component2.OnDecline; ((SimpleInteractable)component3).CanUse = component2.CanUse; } bool flag7 = !RoomHandler.unassignedInteractableObjects.Contains(component3); bool flag8 = flag7; if (flag8) { RoomHandler.unassignedInteractableObjects.Add(component3); } } } catch (Exception e) { Tools.PrintException(e, "FF0000"); } } OldShrineFactory.m_builtShrines = true; } }
void OnTriggerEnter(Collider col) { if (col.gameObject.tag == "obstacle" || col.gameObject.tag == "powerup") { IPlayerInteractable interactable = col.GetComponent <IPlayerInteractable> (); if (interactable != null) { if (E_TargetInRange != null) { E_TargetInRange(gameObject, new TargetingEventArgs(interactable.GetInteractableType())); } interactable.Highlight(true); interactables.Add(interactable); } } }
protected override void DoEffect(PlayerController user) { IPlayerInteractable nearestInteractable = user.CurrentRoom.GetNearestInteractable(user.CenterPosition, 1f, user); int pickupID = -1; if (nearestInteractable is PassiveItem) { pickupID = (nearestInteractable as PassiveItem).PickupObjectId; } else if (nearestInteractable is PlayerItem) { pickupID = (nearestInteractable as PlayerItem).PickupObjectId; } if (pickupID != -1) { LootEngine.SpawnItem(PickupObjectDatabase.GetById(pickupID).gameObject, user.CenterPosition, Vector2.up, 1f, true, true, false); } }
// Token: 0x0600009C RID: 156 RVA: 0x000084D0 File Offset: 0x000066D0 public static void PlaceBreachShrines() { ShrineFactory.CleanupBreachShrines(); foreach (GameObject gameObject in ShrineFactory.registeredShrines.Values) { try { ShrineFactory.CustomShrineController component = gameObject.GetComponent <ShrineFactory.CustomShrineController>(); bool flag = !component.isBreachShrine; bool flag2 = !flag; bool flag3 = flag2; if (flag3) { ShrineFactory.CustomShrineController component2 = UnityEngine.Object.Instantiate <GameObject>(gameObject).GetComponent <ShrineFactory.CustomShrineController>(); component2.Copy(component); component2.gameObject.SetActive(true); component2.sprite.PlaceAtPositionByAnchor(component2.offset, tk2dBaseSprite.Anchor.LowerCenter); SpriteOutlineManager.AddOutlineToSprite(component2.sprite, Color.black); IPlayerInteractable component3 = component2.GetComponent <IPlayerInteractable>(); bool flag4 = component3 is SimpleInteractable; bool flag5 = flag4; bool flag6 = flag5; if (flag6) { ((SimpleInteractable)component3).OnAccept = component2.OnAccept; ((SimpleInteractable)component3).OnDecline = component2.OnDecline; ((SimpleInteractable)component3).CanUse = component2.CanUse; } bool flag7 = !RoomHandler.unassignedInteractableObjects.Contains(component3); bool flag8 = flag7; bool flag9 = flag8; if (flag9) { RoomHandler.unassignedInteractableObjects.Add(component3); } } } catch (Exception e) { Tools.PrintException(e, "FF0000"); } } }
public override void OnReloadPressedSafe(PlayerController player, Gun gun, bool manualReload) { IPlayerInteractable nearestInteractable = player.CurrentRoom.GetNearestInteractable(player.CenterPosition, 1f, player); if (nearestInteractable != null && nearestInteractable is Gun) { Gun gunness = nearestInteractable as Gun; if (gunness != null && !InvalidGuns.Contains(gunness.PickupObjectId) && gunness.DefaultModule.shootStyle != ProjectileModule.ShootStyle.Beam) { EatAndAbsorbGun(gun, gunness); } else { } //ETGModConsole.Log("Gunness is null, on the exclusion list, or a beam"); } } else { } //ETGModConsole.Log("Nearest Interactible is either null or not a debris object"); } base.OnReloadPressedSafe(player, gun, manualReload); }
private void Update() { var interactableCollider = Physics2D.OverlapPoint(transform.position, interactableLayerMask); if (interactableCollider != null) { var interactable = GetInteractableForGameObject(interactableCollider.gameObject); if (currentInteractable != interactable) { if (currentInteractable != null) { SignalLeavingInteractable(currentInteractable); } if (interactable != null) { SignalEnteringInteractable(interactable); } currentInteractable = interactable; } } else if (currentInteractable != null) { SignalLeavingInteractable(currentInteractable); currentInteractable = null; } if (currentInteractable != null && Input.GetKeyDown(KeyCode.E)) { currentInteractable.OnPlayerInteracting(this); } if (Input.GetKeyDown(KeyCode.Q)) { DropResource(); } wateringCan.ShowCan(holdingState == PlayerHoldingState.Water && WaterCharges > 0); seed.enabled = (holdingState == PlayerHoldingState.Seed); hangingBaby.enabled = (holdingState == PlayerHoldingState.Baby); }
protected override void DoEffect(PlayerController user) { base.DoEffect(user); IPlayerInteractable nearestInteractable = user.CurrentRoom.GetNearestInteractable(user.CenterPosition, 1f, user); if (nearestInteractable is InteractableLock || nearestInteractable is Chest || nearestInteractable is DungeonDoorController) { if (nearestInteractable is InteractableLock) { InteractableLock interactableLock = nearestInteractable as InteractableLock; if (interactableLock.lockMode == InteractableLock.InteractableLockMode.NORMAL) { interactableLock.ForceUnlock(); user.healthHaver.ApplyDamage(1, Vector2.zero, "Blood Loss"); AkSoundEngine.PostEvent("m_OBJ_lock_pick_01", GameManager.Instance.gameObject); } return; } if (nearestInteractable is DungeonDoorController) { DungeonDoorController dungeonDoorController = nearestInteractable as DungeonDoorController; if (dungeonDoorController != null && dungeonDoorController.Mode == DungeonDoorController.DungeonDoorMode.COMPLEX && dungeonDoorController.isLocked) { dungeonDoorController.Unlock(); user.healthHaver.ApplyDamage(1, Vector2.zero, "Blood Loss"); AkSoundEngine.PostEvent("m_OBJ_lock_pick_01", GameManager.Instance.gameObject); } } else if (nearestInteractable is Chest) { Chest chest = nearestInteractable as Chest; if (chest.IsLocked) { chest.ForceUnlock(); user.healthHaver.ApplyDamage(1, Vector2.zero, "Blood Loss"); AkSoundEngine.PostEvent("m_OBJ_lock_pick_01", GameManager.Instance.gameObject); } } } }
public override void OnReloadPressed(PlayerController player, Gun gun, bool bSOMETHING) { base.OnReloadPressed(player, gun, bSOMETHING); if (!gun.IsReloading && gun.GetComponent <CantTransformBehaviour>() == null) { IPlayerInteractable nearestInteractable = player.CurrentRoom.GetNearestInteractable(player.CenterPosition, 1f, player); if (nearestInteractable != null && nearestInteractable is Gun) { Gun gun2 = Toolbox.GetGunById((nearestInteractable as Gun).PickupObjectId); if (gun2 != null) { gun.TransformToTargetGun(gun2); gun.InfiniteAmmo = gun2.InfiniteAmmo; gun.UsesRechargeLikeActiveItem = gun2.UsesRechargeLikeActiveItem; gun.ActiveItemStyleRechargeAmount = gun2.ActiveItemStyleRechargeAmount; this.gun.gameObject.AddComponent <CantTransformBehaviour>().transformGunId = gun2.PickupObjectId; FieldInfo info2 = typeof(Gun).GetField("m_cachedGunHandedness", BindingFlags.NonPublic | BindingFlags.Instance); info2.SetValue(this.gun, new GunHandedness?(gun2.Handedness)); player.ProcessHandAttachment(); } } } }
public void SetInteraction(IPlayerInteractable interactable) { Interactable = interactable; }