示例#1
0
        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);
            }
示例#3
0
            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));
        }
示例#5
0
        private void CmdApplyItem(GameObject sourceItemGo, GameObject interactableGo)
        {
            Item.Item           sourceItem   = sourceItemGo?.GetComponent <Item.Item>();
            IPlayerInteractable interactable = interactableGo.GetComponent <IPlayerInteractable>();

            interactable?.ApplyItemServer(sourceItem);
        }
示例#6
0
    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;
        }
    }
示例#7
0
 public override bool CanBeUsed(PlayerController user)
 {
     bool nom = EatenBullet == 0;
     {
         IPlayerInteractable nearestInteractable = user.CurrentRoom.GetNearestInteractable(user.CenterPosition, 0.75f, user);
         return(nearestInteractable is BulletThatCanKillThePast);
     }
 }
示例#8
0
        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>();
     }
 }
示例#11
0
        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);
            }
        }
示例#12
0
        private void OnTriggerEnter(Collider other)
        {
            Debug.Log("Collision appeared");
            IPlayerInteractable otherObject = other.gameObject.GetComponent <IPlayerInteractable>();

            if (otherObject != null)
            {
                otherObject.OnPlayerCollided(this);
            }
        }
示例#13
0
        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);
            }
        }
示例#14
0
        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>();
            }
        }
示例#15
0
    void OnTriggerExit(Collider col)
    {
        IPlayerInteractable interactable = col.GetComponent <IPlayerInteractable> ();

        if (interactable != null)
        {
            interactable.Highlight(false);
            interactable.InteractEnd();
            interactables.Remove(interactable);
            Debug.Log(interactable);
        }
    }
示例#16
0
        public override bool CanBeUsed(PlayerController user)
        {
            IPlayerInteractable nearestInteractable = user.CurrentRoom.GetNearestInteractable(user.CenterPosition, 1f, user);

            if (nearestInteractable is Chest)
            {
                return(true);
            }
            else
            {
                return(false);
            }
        }
示例#17
0
 /// <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;
     }
 }
示例#18
0
        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);
            }
        }
示例#19
0
        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);
        }
示例#20
0
    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);
    }
示例#21
0
 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;
            }
        }
示例#23
0
    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);
            }
        }
    }
示例#24
0
        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);
            }
        }
示例#25
0
 // 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);
        }
示例#27
0
    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);
    }
示例#28
0
        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);
                    }
                }
            }
        }
示例#29
0
 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();
             }
         }
     }
 }
示例#30
0
 public void SetInteraction(IPlayerInteractable interactable)
 {
     Interactable = interactable;
 }