예제 #1
0
        private void RandomBombSpawn(PlayerController user, int bombToSpawn)
        {
            for (int i = 0; i < 10; i++)
            {
                Vector3 positionToSpawn3 = user.CurrentRoom.GetRandomVisibleClearSpot(1, 1).ToVector3();

                SpawnObjectPlayerItem bigbombPrefab = PickupObjectDatabase.GetById(bombToSpawn).GetComponent <SpawnObjectPlayerItem>();
                GameObject            bigbombObject = bigbombPrefab.objectToSpawn.gameObject;

                GameObject     bigbombObject2 = UnityEngine.Object.Instantiate <GameObject>(bigbombObject, positionToSpawn3, Quaternion.identity);
                tk2dBaseSprite bombsprite     = bigbombObject2.GetComponent <tk2dBaseSprite>();
                if (bombsprite)
                {
                    bombsprite.PlaceAtPositionByAnchor(positionToSpawn3, tk2dBaseSprite.Anchor.MiddleCenter);
                }
                if (user.HasPickupID(19) || user.HasPickupID(332))
                {
                    RestoreAmmo(user, 10);
                    SpawnObjectPlayerItem secondarybigbombPrefab = PickupObjectDatabase.GetById(bombToSpawn).GetComponent <SpawnObjectPlayerItem>();
                    GameObject            secondarybigbombObject = secondarybigbombPrefab.objectToSpawn.gameObject;

                    GameObject     secondarybigbombObject2 = UnityEngine.Object.Instantiate <GameObject>(secondarybigbombObject, positionToSpawn3, Quaternion.identity);
                    tk2dBaseSprite secondarybombsprite     = secondarybigbombObject2.GetComponent <tk2dBaseSprite>();
                    if (secondarybombsprite)
                    {
                        secondarybombsprite.PlaceAtPositionByAnchor(positionToSpawn3, tk2dBaseSprite.Anchor.MiddleCenter);
                    }
                }
            }
        }
예제 #2
0
        private void HandleFlip(FlippableCover table)
        {
            bool flag2 = base.Owner.PlayerHasActiveSynergy("Hidden Tech Landmine");

            if (flag2)
            {
                SpawnObjectPlayerItem component   = PickupObjectDatabase.GetById(66).GetComponent <SpawnObjectPlayerItem>();
                GameObject            gameObject  = component.objectToSpawn.gameObject;
                GameObject            gameObject2 = UnityEngine.Object.Instantiate <GameObject>(gameObject, table.sprite.WorldBottomCenter, Quaternion.identity);
                tk2dBaseSprite        component2  = gameObject2.GetComponent <tk2dBaseSprite>();
                bool flag3 = component2;
                if (flag3)
                {
                    component2.PlaceAtPositionByAnchor(table.sprite.WorldBottomCenter, tk2dBaseSprite.Anchor.MiddleCenter);
                }
            }
            else
            {
                int num = 108;
                SpawnObjectPlayerItem component   = PickupObjectDatabase.GetById(num).GetComponent <SpawnObjectPlayerItem>();
                GameObject            gameObject  = component.objectToSpawn.gameObject;
                GameObject            gameObject2 = UnityEngine.Object.Instantiate <GameObject>(gameObject, table.sprite.WorldBottomCenter, Quaternion.identity);
                tk2dBaseSprite        component2  = gameObject2.GetComponent <tk2dBaseSprite>();
                bool flag4 = component2;
                if (flag4)
                {
                    component2.PlaceAtPositionByAnchor(table.sprite.WorldBottomCenter, tk2dBaseSprite.Anchor.MiddleCenter);
                }
            }
        }
        public override void OnReloadPressed(PlayerController player, Gun gun, bool bSOMETHING)
        {
            base.OnReloadPressed(player, gun, bSOMETHING);
            if ((gun.ClipCapacity == gun.ClipShotsRemaining) || (gun.CurrentAmmo == gun.ClipShotsRemaining))
            {
                if (gun.CurrentAmmo >= 5)
                {
                    gun.CurrentAmmo -= 5;
                    SpawnObjectPlayerItem bigbombPrefab = PickupObjectDatabase.GetById(66).GetComponent <SpawnObjectPlayerItem>();
                    GameObject            bigbombObject = bigbombPrefab.objectToSpawn.gameObject;

                    GameObject     bigbombObject2 = UnityEngine.Object.Instantiate <GameObject>(bigbombObject, player.sprite.WorldBottomCenter, Quaternion.identity);
                    tk2dBaseSprite bombsprite     = bigbombObject2.GetComponent <tk2dBaseSprite>();
                    if (bombsprite)
                    {
                        bombsprite.PlaceAtPositionByAnchor(player.sprite.WorldBottomCenter, tk2dBaseSprite.Anchor.MiddleCenter);
                    }
                }
            }
            else if (gun.ClipShotsRemaining == 0 && gun.CurrentAmmo != 0)
            {
                if (player.PlayerHasActiveSynergy("Demolition Man"))
                {
                    SpawnObjectPlayerItem bigbombPrefab = PickupObjectDatabase.GetById(66).GetComponent <SpawnObjectPlayerItem>();
                    GameObject            bigbombObject = bigbombPrefab.objectToSpawn.gameObject;

                    GameObject     bigbombObject2 = UnityEngine.Object.Instantiate <GameObject>(bigbombObject, player.sprite.WorldBottomCenter, Quaternion.identity);
                    tk2dBaseSprite bombsprite     = bigbombObject2.GetComponent <tk2dBaseSprite>();
                    if (bombsprite)
                    {
                        bombsprite.PlaceAtPositionByAnchor(player.sprite.WorldBottomCenter, tk2dBaseSprite.Anchor.MiddleCenter);
                    }
                }
            }
        }
예제 #4
0
        public void PlaceBomb(Vector3 position)
        {
            SpawnObjectPlayerItem playerItem = PickupObjectDatabase.GetById(LastOwner.PlayerHasActiveSynergy("Cold as Ice") ? 109 : 108).GetComponent <SpawnObjectPlayerItem>();
            GameObject            bombPrefab = playerItem.objectToSpawn.gameObject;
            GameObject            BombObject = Object.Instantiate <GameObject>(bombPrefab, position, Quaternion.identity);
            tk2dBaseSprite        bombSprite = BombObject.GetComponent <tk2dBaseSprite>();

            if (bombSprite)
            {
                bombSprite.PlaceAtPositionByAnchor(position, tk2dBaseSprite.Anchor.MiddleCenter);
            }
        }
예제 #5
0
 protected override void OnDestroy()
 {
     if ((PickupObjectDatabase.GetById(565) as PlayerOrbitalItem).BreakVFX && this.sprite != null)
     {
         for (int i = 0; i < 5; i++)
         {
             SpawnManager.SpawnVFX((PickupObjectDatabase.GetById(565) as PlayerOrbitalItem).BreakVFX, this.sprite.WorldCenter.ToVector3ZisY(0f), Quaternion.identity);
         }
         tk2dBaseSprite sprite = SpawnManager.SpawnVFX((PickupObjectDatabase.GetById(538) as SilverBulletsPassiveItem).SynergyPowerVFX, this.sprite.WorldCenter.ToVector3ZisY(0f), Quaternion.identity).GetComponent <tk2dBaseSprite>();
         sprite.PlaceAtPositionByAnchor(this.sprite.WorldCenter.ToVector3ZisY(0f), tk2dBaseSprite.Anchor.MiddleCenter);
     }
     base.OnDestroy();
 }
예제 #6
0
        public override void PurchaseItem(ShopItemController itemBad, bool actualPurchase = true, bool allowSign = true)
        {
            var   item            = itemBad as CustomShopItemController;
            float heightOffGround = -1f;

            if (item && item.sprite)
            {
                heightOffGround = item.sprite.HeightOffGround;
            }
            if (actualPurchase)
            {
                if (giveStatsOnPurchase)
                {
                    foreach (var stat in statsToGive)
                    {
                        item.LastInteractingPlayer.ownerlessStatModifiers.Add(stat);
                    }
                    item.LastInteractingPlayer.stats.RecalculateStats(item.LastInteractingPlayer, false, false);
                }
                if (this.shopkeepFSM != null)
                {
                    FsmObject fsmObject = this.shopkeepFSM.FsmVariables.FindFsmObject("referencedItem");
                    if (fsmObject != null)
                    {
                        fsmObject.Value = item;
                    }
                    this.shopkeepFSM.SendEvent("succeedPurchase");
                }
            }
            if (!item.item.PersistsOnPurchase)
            {
                if (allowSign)
                {
                    GameObject     gameObject = (GameObject)UnityEngine.Object.Instantiate(BraveResources.Load("Global Prefabs/Sign_SoldOut", ".prefab"));
                    tk2dBaseSprite component  = gameObject.GetComponent <tk2dBaseSprite>();
                    component.PlaceAtPositionByAnchor(item.sprite.WorldCenter, tk2dBaseSprite.Anchor.MiddleCenter);
                    gameObject.transform.position = gameObject.transform.position.Quantize(0.0625f);
                    component.HeightOffGround     = heightOffGround;
                    component.UpdateZDepth();
                }
                GameObject     gameObject2 = (GameObject)UnityEngine.Object.Instantiate(ResourceCache.Acquire("Global VFX/VFX_Item_Spawn_Poof"));
                tk2dBaseSprite component2  = gameObject2.GetComponent <tk2dBaseSprite>();
                component2.PlaceAtPositionByAnchor(item.sprite.WorldCenter.ToVector3ZUp(0f), tk2dBaseSprite.Anchor.MiddleCenter);
                component2.transform.position = component2.transform.position.Quantize(0.0625f);
                component2.HeightOffGround    = 5f;
                component2.UpdateZDepth();
                this.m_room.DeregisterInteractable(item);
                UnityEngine.Object.Destroy(item.gameObject);
            }
        }
예제 #7
0
        //Add the item's functionality down here! I stole most of this from the Stuffed Star active item code!
        protected override void DoEffect(PlayerController user)
        {
            int bombToSpawn = 108;

            if (user.HasPickupID(109) || user.HasPickupID(364) || user.HasPickupID(170))
            {
                bombToSpawn = 109;
            }

            if (user.HasPickupID(118))
            {
                RandomBombSpawn(user, bombToSpawn);
            }

            List <AIActor> activeEnemies = user.CurrentRoom.GetActiveEnemies(RoomHandler.ActiveEnemyType.All);

            if (activeEnemies != null)
            {
                for (int i = 0; i < activeEnemies.Count; i++)
                {
                    AIActor enemy = activeEnemies[i];
                    SpawnObjectPlayerItem bigbombPrefab = PickupObjectDatabase.GetById(bombToSpawn).GetComponent <SpawnObjectPlayerItem>();
                    GameObject            bigbombObject = bigbombPrefab.objectToSpawn.gameObject;

                    GameObject     bigbombObject2 = UnityEngine.Object.Instantiate <GameObject>(bigbombObject, enemy.sprite.WorldBottomCenter, Quaternion.identity);
                    tk2dBaseSprite bombsprite     = bigbombObject2.GetComponent <tk2dBaseSprite>();
                    if (bombsprite)
                    {
                        bombsprite.PlaceAtPositionByAnchor(enemy.sprite.WorldBottomCenter, tk2dBaseSprite.Anchor.MiddleCenter);
                    }
                    if (user.HasPickupID(19) || user.HasPickupID(332))
                    {
                        RestoreAmmo(user, activeEnemies.Count);
                        SpawnObjectPlayerItem secondarybigbombPrefab = PickupObjectDatabase.GetById(bombToSpawn).GetComponent <SpawnObjectPlayerItem>();
                        GameObject            secondarybigbombObject = secondarybigbombPrefab.objectToSpawn.gameObject;

                        GameObject     secondarybigbombObject2 = UnityEngine.Object.Instantiate <GameObject>(secondarybigbombObject, enemy.sprite.WorldBottomCenter, Quaternion.identity);
                        tk2dBaseSprite secondarybombsprite     = secondarybigbombObject2.GetComponent <tk2dBaseSprite>();
                        if (secondarybombsprite)
                        {
                            secondarybombsprite.PlaceAtPositionByAnchor(enemy.sprite.WorldBottomCenter, tk2dBaseSprite.Anchor.MiddleCenter);
                        }
                    }
                }
            }
        }
예제 #8
0
 public IEnumerator ExplosiveDiarrhea(PlayerController user)
 {
     Notify(null, "Explosive Diarrhea");
     for (int i = 0; i < 5; i++)
     {
         SpawnObjectPlayerItem component3  = PickupObjectDatabase.GetById(108).GetComponent <SpawnObjectPlayerItem>();
         GameObject            gameObject3 = component3.objectToSpawn.gameObject;
         GameObject            gameObject4 = UnityEngine.Object.Instantiate <GameObject>(gameObject3, user.specRigidbody.UnitCenter, Quaternion.identity);
         tk2dBaseSprite        component4  = gameObject4.GetComponent <tk2dBaseSprite>();
         bool flag6 = component4;
         if (flag6)
         {
             component4.PlaceAtPositionByAnchor(user.specRigidbody.UnitCenter, tk2dBaseSprite.Anchor.MiddleCenter);
         }
         yield return(new WaitForSeconds(1f));
     }
     yield return(null);
 }
        private void DoSpawn(FlippableCover table)
        {
            Vector3 vector  = table.transform.position;
            Vector3 vector2 = table.specRigidbody.UnitCenter;

            if (vector.y > 0f)
            {
                vector2 += Vector3.up * 0.25f;
            }
            GameObject     gameObject2 = Instantiate <GameObject>(objectToSpawn, vector2, Quaternion.identity);
            tk2dBaseSprite component4  = gameObject2.GetComponent <tk2dBaseSprite>();

            if (component4)
            {
                component4.PlaceAtPositionByAnchor(vector2, tk2dBaseSprite.Anchor.MiddleCenter);
            }
            Vector2 vector3 = table.transform.position;

            vector3 = Quaternion.Euler(0f, 0f, 0f) * vector3;
            DebrisObject debrisObject = LootEngine.DropItemWithoutInstantiating(gameObject2, gameObject2.transform.position, vector3, 0, false, false, true, false);

            if (gameObject2.GetComponent <BlackHoleDoer>())
            {
                gameObject2.GetComponent <BlackHoleDoer>().coreDuration = 2f;
                debrisObject.PreventFallingInPits = true;
                debrisObject.PreventAbsorption    = true;
            }
            if (vector.y > 0f && debrisObject)
            {
                debrisObject.additionalHeightBoost = -1f;
                if (debrisObject.sprite)
                {
                    debrisObject.sprite.UpdateZDepth();
                }
            }
            debrisObject.IsAccurateDebris = true;
            debrisObject.Priority         = EphemeralObject.EphemeralPriority.Critical;
            debrisObject.bounceCount      = 0;
        }
        private void charmAll(PlayerController user)
        {
            GameObject     shadowPrefab = PickupObjectDatabase.GetById(820).GetComponent <SpawnObjectPlayerItem>().objectToSpawn;
            GameObject     gameObject   = UnityEngine.Object.Instantiate <GameObject>(shadowPrefab, user.specRigidbody.UnitCenter, Quaternion.identity);
            tk2dBaseSprite component2   = gameObject.GetComponent <tk2dBaseSprite>();

            if (component2 != null)
            {
                component2.PlaceAtPositionByAnchor(user.specRigidbody.UnitCenter.ToVector3ZUp(component2.transform.position.z), tk2dBaseSprite.Anchor.MiddleCenter);
                if (component2.specRigidbody != null)
                {
                    component2.specRigidbody.RegisterGhostCollisionException(user.specRigidbody);
                }
            }
            KageBunshinController component3 = gameObject.GetComponent <KageBunshinController>();

            if (component3)
            {
                component3.InitializeOwner(user);
            }
            gameObject.transform.position = gameObject.transform.position.Quantize(0.0625f);
        }
예제 #11
0
        public void ConfigureOnPlacement(RoomHandler room)
        {
            m_ParentRoom = room;

            if (!m_itemDisplaySprite)
            {
                if (!contents)
                {
                    contents = PickupObjectDatabase.GetById(ItemID);
                }
                if (!contents)
                {
                    return;
                }

                m_itemDisplaySprite = tk2dSprite.AddComponent(new GameObject("Display Sprite")
                {
                    transform = { parent = spawnTransform }
                }, contents.sprite.Collection, contents.sprite.spriteId);
                if (AddOutline)
                {
                    SpriteOutlineManager.AddOutlineToSprite(m_itemDisplaySprite, Color.black, 0.1f, 0.05f, SpriteOutlineManager.OutlineType.NORMAL);
                }
                sprite.AttachRenderer(m_itemDisplaySprite);
                m_itemDisplaySprite.HeightOffGround        = 0.25f;
                m_itemDisplaySprite.depthUsesTrimmedBounds = true;
                m_itemDisplaySprite.PlaceAtPositionByAnchor(spawnTransform.position, tk2dBaseSprite.Anchor.LowerCenter);
                m_itemDisplaySprite.transform.position = m_itemDisplaySprite.transform.position.Quantize(0.0625f);
                if (DoSpawnVFX)
                {
                    GameObject     gameObject = Instantiate((GameObject)ResourceCache.Acquire("Global VFX/VFX_Item_Spawn_Poof"));
                    tk2dBaseSprite component  = gameObject.GetComponent <tk2dBaseSprite>();
                    component.PlaceAtPositionByAnchor(m_itemDisplaySprite.WorldCenter.ToVector3ZUp(0f), tk2dBaseSprite.Anchor.MiddleCenter);
                    component.HeightOffGround = 5f;
                    component.UpdateZDepth();
                }
                sprite.UpdateZDepth();
            }
        }
예제 #12
0
 private void HandleBlackHoleEffect(TableTechChaosEffectIdentifier identifier, FlippableCover obj)
 {
     if (identifier == TableTechChaosEffectIdentifier.BLACK_HOLE)
     {
         Vector3        vector2     = obj.specRigidbody.UnitCenter;
         GameObject     gameObject2 = UnityEngine.Object.Instantiate <GameObject>(SingularityObject, vector2, Quaternion.identity);
         tk2dBaseSprite component4  = gameObject2.GetComponent <tk2dBaseSprite>();
         if (component4)
         {
             component4.PlaceAtPositionByAnchor(vector2, tk2dBaseSprite.Anchor.MiddleCenter);
         }
         DebrisObject debrisObject = LootEngine.DropItemWithoutInstantiating(gameObject2, gameObject2.transform.position, Vector2.zero, 0f, false, false, true, false);
         if (gameObject2.GetComponent <BlackHoleDoer>())
         {
             debrisObject.PreventFallingInPits = true;
             debrisObject.PreventAbsorption    = true;
         }
         debrisObject.IsAccurateDebris = true;
         debrisObject.Priority         = EphemeralObject.EphemeralPriority.Critical;
         debrisObject.bounceCount      = 0;
         obj.DestroyCover();
     }
 }
예제 #13
0
        private void HandleHit(Projectile arg1, SpeculativeRigidbody arg2, bool arg3)
        {
            if (arg2.aiActor != null && arg2.aiActor.behaviorSpeculator && !arg2.aiActor.IsHarmlessEnemy)
            {
                PlayerController player = gun.CurrentOwner as PlayerController;
                if ((player.HasPickupID(131) || player.HasPickupID(239) || player.HasPickupID(815)) || (gun.DuctTapeMergedGunIDs != null))
                {
                    float value2 = UnityEngine.Random.Range(0.0f, 1.0f);
                    if (value2 <= 0.05 && armorCount < 10)
                    {
                        GameManager.Instance.StartCoroutine(this.Clang());
                        LootEngine.SpawnItem(PickupObjectDatabase.GetById(120).gameObject, arg2.sprite.WorldBottomCenter, Vector2.up, 1f, true, false, true);
                        armorCount += 1;
                    }
                }

                float value = UnityEngine.Random.Range(0.0f, 1.0f);
                if (value <= 0.05)
                {
                    GameManager.Instance.StartCoroutine(this.Clang());

                    // TURRET
                    SpawnObjectPlayerItem portableturret = PickupObjectDatabase.GetById(201).GetComponent <SpawnObjectPlayerItem>();
                    String     turretGuid    = portableturret.enemyGuidToSpawn;
                    GameObject objectToSpawn = EnemyDatabase.GetOrLoadByGuid(turretGuid).gameObject;

                    GameObject     gameObject2 = UnityEngine.Object.Instantiate <GameObject>(objectToSpawn, arg2.sprite.WorldBottomCenter, Quaternion.identity);
                    tk2dBaseSprite component4  = gameObject2.GetComponent <tk2dBaseSprite>();
                    if (component4)
                    {
                        component4.sprite.IsPerpendicular = true;
                        component4.PlaceAtPositionByAnchor(arg2.sprite.WorldBottomCenter.ToVector3ZUp(component4.transform.position.z), tk2dBaseSprite.Anchor.MiddleCenter);
                    }
                    this.spawnedPlayerObject = gameObject2;
                    PortableTurretController component5 = this.spawnedPlayerObject.GetComponent <PortableTurretController>();
                    if (component5)
                    {
                        component5.sourcePlayer = player;
                    }
                }

                else
                {
                    if (value <= 0.1)
                    {
                        GameManager.Instance.StartCoroutine(this.Clang());

                        //MINE
                        SpawnObjectPlayerItem proximitymine = PickupObjectDatabase.GetById(66).GetComponent <SpawnObjectPlayerItem>();
                        GameObject            mineObject    = proximitymine.objectToSpawn.gameObject;

                        GameObject     mineObject2 = UnityEngine.Object.Instantiate <GameObject>(mineObject, arg2.sprite.WorldBottomCenter, Quaternion.identity);
                        tk2dBaseSprite mineSprite  = mineObject2.GetComponent <tk2dBaseSprite>();
                        if (mineSprite)
                        {
                            mineSprite.IsPerpendicular = true;
                            mineSprite.PlaceAtPositionByAnchor(arg2.sprite.WorldBottomCenter, tk2dBaseSprite.Anchor.MiddleCenter);
                        }
                    }

                    else
                    {
                        if (value <= 0.15)
                        {
                            GameManager.Instance.StartCoroutine(this.Clang());

                            //TABLE
                            FoldingTableItem     foldingtable        = PickupObjectDatabase.GetById(644).GetComponent <FoldingTableItem>();
                            GameObject           tableObject         = foldingtable.TableToSpawn.gameObject;
                            GameObject           gameObject          = UnityEngine.Object.Instantiate <GameObject>(tableObject.gameObject, arg2.sprite.WorldBottomCenter, Quaternion.identity);
                            SpeculativeRigidbody componentInChildren = gameObject.GetComponentInChildren <SpeculativeRigidbody>();
                            FlippableCover       component           = gameObject.GetComponent <FlippableCover>();
                            component.transform.position.XY().GetAbsoluteRoom().RegisterInteractable(component);
                            component.ConfigureOnPlacement(component.transform.position.XY().GetAbsoluteRoom());
                            componentInChildren.Initialize();
                            PhysicsEngine.Instance.RegisterOverlappingGhostCollisionExceptions(componentInChildren, null, false);
                        }
                    }
                }
            }
        }
        private IEnumerator BecomeMimic()
        {
            if (m_hands == null)
            {
                StartCoroutine(DoIntro());
            }

            if (!ChaosConsole.WallMimicsUseRewardManager)
            {
                m_ChaosModeActive = true;
            }
            if (m_GlitchModeActive)
            {
                m_ItemDropOdds += 0.2f; m_FriendlyMimicOdds += 0.2f;
            }

            m_isHidden = false;
            SpeculativeRigidbody specRigidbody = this.specRigidbody;

            specRigidbody.OnRigidbodyCollision = (SpeculativeRigidbody.OnRigidbodyCollisionDelegate)Delegate.Remove(specRigidbody.OnRigidbodyCollision, new SpeculativeRigidbody.OnRigidbodyCollisionDelegate(HandleRigidbodyCollision));
            SpeculativeRigidbody specRigidbody2 = this.specRigidbody;

            specRigidbody2.OnBeamCollision = (SpeculativeRigidbody.OnBeamCollisionDelegate)Delegate.Remove(specRigidbody2.OnBeamCollision, new SpeculativeRigidbody.OnBeamCollisionDelegate(HandleBeamCollision));
            AIAnimator tongueAnimator = aiAnimator.ChildAnimator;

            tongueAnimator.renderer.enabled       = true;
            tongueAnimator.spriteAnimator.enabled = true;
            AIAnimator spitAnimator = tongueAnimator.ChildAnimator;

            spitAnimator.renderer.enabled       = true;
            spitAnimator.spriteAnimator.enabled = true;
            tongueAnimator.PlayUntilFinished("spawn", false, null, -1f, false);
            float delay        = tongueAnimator.CurrentClipLength;
            float timer        = 0f;
            bool  hasPlayedVFX = false;

            while (timer < delay)
            {
                yield return(null);

                timer += BraveTime.DeltaTime;
                if (!hasPlayedVFX && delay - timer < 0.1f)
                {
                    hasPlayedVFX = true;
                    if (WallDisappearVFX)
                    {
                        Vector2 zero  = Vector2.zero;
                        Vector2 zero2 = Vector2.zero;
                        DungeonData.Direction facingDirection = m_facingDirection;
                        if (facingDirection != DungeonData.Direction.SOUTH)
                        {
                            if (facingDirection != DungeonData.Direction.EAST)
                            {
                                if (facingDirection == DungeonData.Direction.WEST)
                                {
                                    zero  = new Vector2(0f, -1f);
                                    zero2 = new Vector2(0f, 1f);
                                }
                            }
                            else
                            {
                                zero  = new Vector2(0f, -1f);
                                zero2 = new Vector2(0f, 1f);
                            }
                        }
                        else
                        {
                            zero  = new Vector2(0f, -1f);
                            zero2 = new Vector2(0f, 1f);
                        }
                        Vector2 min = Vector2.Min(pos1.ToVector2(), pos2.ToVector2()) + zero;
                        Vector2 max = Vector2.Max(pos1.ToVector2(), pos2.ToVector2()) + new Vector2(1f, 1f) + zero2;
                        for (int i = 0; i < 5; i++)
                        {
                            Vector2        v              = BraveUtility.RandomVector2(min, max, new Vector2(0.25f, 0.25f)) + new Vector2(0f, 1f);
                            GameObject     gameObject     = SpawnManager.SpawnVFX(WallDisappearVFX, v, Quaternion.identity);
                            tk2dBaseSprite tk2dBaseSprite = (!gameObject) ? null : gameObject.GetComponent <tk2dBaseSprite>();
                            if (tk2dBaseSprite)
                            {
                                tk2dBaseSprite.HeightOffGround = 8f;
                                tk2dBaseSprite.UpdateZDepth();
                            }
                        }
                    }
                }
            }
            if (!m_failedWallConfigure && m_GlitchModeActive)
            {
                if (aiActor.ParentRoom != null && GlitchEnemyList != null && GlitchEnemyList.Count > 0 && UnityEngine.Random.value <= m_spawnGitchEnemyOdds)
                {
                    float RandomIntervalFloat       = UnityEngine.Random.Range(0.02f, 0.06f);
                    float RandomDispFloat           = UnityEngine.Random.Range(0.1f, 0.16f);
                    float RandomDispIntensityFloat  = UnityEngine.Random.Range(0.1f, 0.4f);
                    float RandomColorProbFloat      = UnityEngine.Random.Range(0.05f, 0.2f);
                    float RandomColorIntensityFloat = UnityEngine.Random.Range(0.1f, 0.25f);

                    int count2 = this.specRigidbody.PixelColliders.Count;
                    this.specRigidbody.PixelColliders.RemoveAt(count2 - 1);
                    this.specRigidbody.PixelColliders.RemoveAt(count2 - 2);
                    StaticReferenceManager.AllShadowSystemDepthHavers.Remove(m_fakeWall.transform);
                    Destroy(m_fakeWall);
                    Destroy(m_fakeCeiling);

                    Vector3 targetPosForSpawn = m_startingPos + DungeonData.GetIntVector2FromDirection(m_facingDirection).ToVector3();
                    while (timer < delay)
                    {
                        aiAnimator.LockFacingDirection = true;
                        aiAnimator.FacingDirection     = DungeonData.GetAngleFromDirection(m_facingDirection);
                        yield return(null);

                        timer += BraveTime.DeltaTime;
                        transform.position = Vector3.Lerp(m_startingPos, targetPosForSpawn, Mathf.InverseLerp(0.42f, 0.58f, timer));
                        this.specRigidbody.Reinitialize();
                    }
                    yield return(null);

                    Vector3 FinalSpawnLocation             = transform.position;
                    Vector3 VFXExplosionLocation           = transform.position;
                    Vector2 VFXExplosionSource             = Vector2.zero;
                    DungeonData.Direction CurrentDirection = m_facingDirection;
                    if (CurrentDirection == DungeonData.Direction.WEST)
                    {
                        FinalSpawnLocation   += new Vector3(2.5f, 3.5f);
                        VFXExplosionLocation += new Vector3(3.5f, 3.5f);
                        VFXExplosionSource    = new Vector2(1, 0);
                    }
                    else if (CurrentDirection == DungeonData.Direction.EAST)
                    {
                        FinalSpawnLocation   += new Vector3(4f, 3.5f);
                        VFXExplosionLocation += new Vector3(3f, 3.5f);
                    }
                    else if (CurrentDirection == DungeonData.Direction.NORTH)
                    {
                        FinalSpawnLocation   += new Vector3(3.5f, 4f);
                        VFXExplosionLocation += new Vector3(3.5f, 3f);
                        VFXExplosionSource    = new Vector2(0, 1);
                    }
                    else if (CurrentDirection == DungeonData.Direction.SOUTH)
                    {
                        FinalSpawnLocation   += new Vector3(3.5f, 1.5f);
                        VFXExplosionLocation += new Vector3(3.5f, 2.5f);
                    }
                    yield return(null);

                    string        SelectedEnemy          = BraveUtility.RandomElement(GlitchEnemyList);
                    ExplosionData wallMimicExplosionData = new ExplosionData();
                    wallMimicExplosionData.CopyFrom(GameManager.Instance.Dungeon.sharedSettingsPrefab.DefaultExplosionData);
                    wallMimicExplosionData.damage = 0f;
                    wallMimicExplosionData.force /= 1.6f;

                    if (SelectedEnemy != "RATCORPSE")
                    {
                        Exploder.Explode(VFXExplosionLocation, wallMimicExplosionData, VFXExplosionSource, ignoreQueues: true, damageTypes: CoreDamageTypes.None);
                        GameObject     SpawnVFXObject          = Instantiate((GameObject)ResourceCache.Acquire("Global VFX/VFX_Item_Spawn_Poof"));
                        tk2dBaseSprite SpawnVFXObjectComponent = SpawnVFXObject.GetComponent <tk2dBaseSprite>();
                        SpawnVFXObjectComponent.PlaceAtPositionByAnchor(FinalSpawnLocation + new Vector3(0f, 0.5f, 0f), tk2dBaseSprite.Anchor.MiddleCenter);
                        SpawnVFXObjectComponent.HeightOffGround = 1f;
                        SpawnVFXObjectComponent.UpdateZDepth();
                        AIActor glitchActor = AIActor.Spawn(EnemyDatabase.GetOrLoadByGuid(SelectedEnemy), FinalSpawnLocation, aiActor.ParentRoom, true, AIActor.AwakenAnimationType.Awaken, true);

                        /*if (aiActor.ParentRoom != null && !aiActor.ParentRoom.IsSealed && !glitchActor.IgnoreForRoomClear) {
                         *  if (GameManager.Instance.PrimaryPlayer.CurrentRoom == aiActor.ParentRoom && aiActor.ParentRoom.EverHadEnemies) {
                         *      aiActor.ParentRoom.SealRoom();
                         *  }
                         * }*/
                        PickupObject.ItemQuality targetGlitchEnemyItemQuality = (UnityEngine.Random.value >= 0.2f) ? ((!BraveUtility.RandomBool()) ? PickupObject.ItemQuality.C : PickupObject.ItemQuality.D) : PickupObject.ItemQuality.B;
                        GenericLootTable         glitchEnemyLootTable         = (!BraveUtility.RandomBool()) ? GameManager.Instance.RewardManager.GunsLootTable : GameManager.Instance.RewardManager.ItemsLootTable;
                        PickupObject             glitchEnemyItem = LootEngine.GetItemOfTypeAndQuality <PickupObject>(targetGlitchEnemyItemQuality, glitchEnemyLootTable, false);

                        /*if (BraveUtility.RandomBool()) {
                         *  ChaosUtility.MakeCompanion(glitchActor);
                         * } else {
                         *  ChaosShaders.Instance.ApplyGlitchShader(glitchActor, glitchActor.sprite, true, RandomIntervalFloat, RandomDispFloat, RandomDispIntensityFloat, RandomColorProbFloat, RandomColorIntensityFloat);
                         * }*/

                        ChaosShaders.Instance.ApplyGlitchShader(glitchActor, glitchActor.sprite, true, RandomIntervalFloat, RandomDispFloat, RandomDispIntensityFloat, RandomColorProbFloat, RandomColorIntensityFloat);

                        if (glitchEnemyItem)
                        {
                            glitchActor.AdditionalSafeItemDrops.Add(glitchEnemyItem);
                        }
                    }
                    else
                    {
                        Exploder.Explode(VFXExplosionLocation, wallMimicExplosionData, VFXExplosionSource, ignoreQueues: true, damageTypes: CoreDamageTypes.None);
                        GameObject     SpawnVFXObject          = Instantiate((GameObject)ResourceCache.Acquire("Global VFX/VFX_Item_Spawn_Poof"));
                        tk2dBaseSprite SpawnVFXObjectComponent = SpawnVFXObject.GetComponent <tk2dBaseSprite>();
                        SpawnVFXObjectComponent.PlaceAtPositionByAnchor(FinalSpawnLocation + new Vector3(0f, 0.5f, 0f), tk2dBaseSprite.Anchor.MiddleCenter);
                        SpawnVFXObjectComponent.HeightOffGround = 1f;
                        SpawnVFXObjectComponent.UpdateZDepth();
                        GameObject   spawnedRatCorpseObject = Instantiate(ChaosPrefabs.RatCorpseNPC, FinalSpawnLocation, Quaternion.identity);
                        TalkDoerLite talkdoerComponent      = spawnedRatCorpseObject.GetComponent <TalkDoerLite>();
                        talkdoerComponent.transform.position.XY().GetAbsoluteRoom().RegisterInteractable(talkdoerComponent);
                        talkdoerComponent.transform.position.XY().GetAbsoluteRoom().TransferInteractableOwnershipToDungeon(talkdoerComponent);
                        talkdoerComponent.playmakerFsm.SetState("Set Mode");
                        ChaosUtility.AddHealthHaver(talkdoerComponent.gameObject, 60, flashesOnDamage: false, exploderSpawnsItem: true);
                    }
                    yield return(null);

                    Destroy(aiActor.gameObject);
                    yield break;
                }
            }
            PickupObject.ItemQuality targetQuality = (UnityEngine.Random.value >= 0.2f) ? ((!BraveUtility.RandomBool()) ? PickupObject.ItemQuality.C : PickupObject.ItemQuality.D) : PickupObject.ItemQuality.B;
            GenericLootTable         lootTable     = (!BraveUtility.RandomBool()) ? GameManager.Instance.RewardManager.GunsLootTable : GameManager.Instance.RewardManager.ItemsLootTable;
            PickupObject             item          = LootEngine.GetItemOfTypeAndQuality <PickupObject>(targetQuality, lootTable, false);

            if (item)
            {
                if (m_ChaosModeActive)
                {
                    if (UnityEngine.Random.value <= m_ItemDropOdds)
                    {
                        aiActor.AdditionalSafeItemDrops.Add(item);
                    }
                    else
                    {
                        aiActor.AdditionalSafeItemDrops.Add(PickupObjectDatabase.GetById(70));
                        if (BraveUtility.RandomBool())
                        {
                            aiActor.AdditionalSafeItemDrops.Add(PickupObjectDatabase.GetById(70));
                        }
                        if (m_GlitchModeActive)
                        {
                            aiActor.AdditionalSafeItemDrops.Add(PickupObjectDatabase.GetById(70));
                        }
                    }
                    if (UnityEngine.Random.value <= m_FriendlyMimicOdds)
                    {
                        m_isFriendlyMimic = true;
                    }
                }
                else
                {
                    aiActor.AdditionalSafeItemDrops.Add(item);
                }
            }
            else
            {
                if (m_ChaosModeActive && UnityEngine.Random.value <= m_FriendlyMimicOdds)
                {
                    m_isFriendlyMimic = true;
                }
            }
            aiActor.enabled            = true;
            behaviorSpeculator.enabled = true;
            if (aiActor.ParentRoom != null && aiActor.ParentRoom.IsSealed && !m_isFriendlyMimic)
            {
                aiActor.IgnoreForRoomClear = false;
            }
            // if (m_isFriendlyMimic) { ChaosUtility.MakeCompanion(aiActor); }
            if (m_isFriendlyMimic)
            {
                aiActor.ApplyEffect(GameManager.Instance.Dungeon.sharedSettingsPrefab.DefaultPermanentCharmEffect, 1f, null);
            }
            if (!m_failedWallConfigure)
            {
                int count = this.specRigidbody.PixelColliders.Count;
                for (int j = 0; j < count - 2; j++)
                {
                    this.specRigidbody.PixelColliders[j].Enabled = true;
                }
                this.specRigidbody.PixelColliders.RemoveAt(count - 1);
                this.specRigidbody.PixelColliders.RemoveAt(count - 2);
                StaticReferenceManager.AllShadowSystemDepthHavers.Remove(m_fakeWall.transform);
                Destroy(m_fakeWall);
                Destroy(m_fakeCeiling);
            }
            else
            {
                int count = this.specRigidbody.PixelColliders.Count;
                for (int j = 0; j < count; j++)
                {
                    this.specRigidbody.PixelColliders[j].Enabled = true;
                }
            }
            for (int k = 0; k < m_hands.Length; k++)
            {
                m_hands[k].gameObject.SetActive(true);
            }
            aiActor.ToggleRenderers(true);
            if (aiShooter)
            {
                aiShooter.ToggleGunAndHandRenderers(true, "ChaosWallMimicController");
            }
            aiActor.IsGone           = false;
            healthHaver.IsVulnerable = true;
            aiActor.State            = AIActor.ActorState.Normal;
            for (int l = 0; l < m_hands.Length; l++)
            {
                m_hands[l].gameObject.SetActive(false);
            }
            m_isFinished = true;
            delay        = 0.58f;
            timer        = 0f;
            Vector3 targetPos = m_startingPos + DungeonData.GetIntVector2FromDirection(m_facingDirection).ToVector3();

            while (timer < delay)
            {
                aiAnimator.LockFacingDirection = true;
                aiAnimator.FacingDirection     = DungeonData.GetAngleFromDirection(m_facingDirection);
                yield return(null);

                timer += BraveTime.DeltaTime;
                transform.position = Vector3.Lerp(m_startingPos, targetPos, Mathf.InverseLerp(0.42f, 0.58f, timer));
                this.specRigidbody.Reinitialize();
            }
            aiAnimator.LockFacingDirection = false;
            knockbackDoer.SetImmobile(false, "ChaosWallMimicController");
            aiActor.CollisionDamage            = 0.5f;
            aiActor.CollisionKnockbackStrength = m_collisionKnockbackStrength;
            yield break;
        }
예제 #15
0
        //SYNERGY WITH SPARE KEY --> "Spare Keybullet Kin"
        private void OnEnemyDamaged(float damage, bool fatal, HealthHaver enemy)
        {
            try
            {
                if (enemy.aiActor && enemy)
                {
                    if (fatal && Owner.HasPickupID(71))
                    {
                        if (UnityEngine.Random.value < 0.1f)
                        {
                            SpawnObjectPlayerItem bigbombPrefab = PickupObjectDatabase.GetById(71).GetComponent <SpawnObjectPlayerItem>();
                            GameObject            bigbombObject = bigbombPrefab.objectToSpawn.gameObject;

                            GameObject     bigbombObject2 = UnityEngine.Object.Instantiate <GameObject>(bigbombObject, enemy.sprite.WorldBottomCenter, Quaternion.identity);
                            tk2dBaseSprite bombsprite     = bigbombObject2.GetComponent <tk2dBaseSprite>();
                            if (bombsprite)
                            {
                                bombsprite.PlaceAtPositionByAnchor(enemy.sprite.WorldBottomCenter, tk2dBaseSprite.Anchor.MiddleCenter);
                            }
                        }
                    }
                    float outcomeDamage = damage;
                    if (Owner.HasPickupID(442))
                    {
                        outcomeDamage *= 2;
                    }
                    RoomHandler    absoluteRoom  = base.transform.position.GetAbsoluteRoom();
                    List <AIActor> enemiesInRoom = new List <AIActor>();

                    if (absoluteRoom.GetActiveEnemies(RoomHandler.ActiveEnemyType.RoomClear) != null)
                    {
                        foreach (AIActor m_Enemy in absoluteRoom.GetActiveEnemies(RoomHandler.ActiveEnemyType.RoomClear))
                        {
                            enemiesInRoom.Add(m_Enemy);
                        }
                    }
                    AIActor randomActiveEnemy      = null;
                    AIActor randomActiveOTHEREnemy = null;
                    if (enemiesInRoom.Count > 1)
                    {
                        enemiesInRoom.Remove(enemy.aiActor);
                        randomActiveEnemy = BraveUtility.RandomElement(enemiesInRoom);
                        if (enemiesInRoom.Count > 2 && (Owner.HasPickupID(276) || Owner.HasPickupID(149) || Owner.HasPickupID(482) || Owner.HasPickupID(506) || Owner.HasPickupID(172) || Owner.HasPickupID(198) || Owner.HasPickupID(Gungeon.Game.Items["nn:spectre_bullets"].PickupObjectId)))
                        {
                            enemiesInRoom.Remove(randomActiveEnemy);
                            randomActiveOTHEREnemy = BraveUtility.RandomElement(enemiesInRoom);
                        }
                    }

                    if (randomActiveEnemy != null && randomActiveEnemy != enemy.aiActor && randomActiveEnemy.healthHaver && randomActiveEnemy.healthHaver.IsAlive && randomActiveEnemy.healthHaver.IsVulnerable)
                    {
                        if (OnCooldownVoodoo == false)
                        {
                            OnCooldownVoodoo = true;

                            if (Owner.HasPickupID(527) && UnityEngine.Random.value < 0.25f)
                            {
                                randomActiveEnemy.gameActor.ApplyEffect(this.charmEffect, 1f, null);
                            }
                            randomActiveEnemy.healthHaver.ApplyDamage(outcomeDamage, Vector2.zero, "Voodoo Magic", CoreDamageTypes.None, DamageCategory.Normal, true, null, false);

                            if ((Owner.HasPickupID(276) || Owner.HasPickupID(149) || Owner.HasPickupID(482) || Owner.HasPickupID(506) || Owner.HasPickupID(172) || Owner.HasPickupID(198) || Owner.HasPickupID(Gungeon.Game.Items["nn:spectre_bullets"].PickupObjectId)) && randomActiveOTHEREnemy != null && randomActiveOTHEREnemy != enemy.aiActor && randomActiveOTHEREnemy.healthHaver && randomActiveOTHEREnemy.healthHaver.IsAlive && randomActiveOTHEREnemy.healthHaver.IsVulnerable)
                            {
                                if (Owner.HasPickupID(527) && UnityEngine.Random.value < 0.25f)
                                {
                                    randomActiveOTHEREnemy.gameActor.ApplyEffect(this.charmEffect, 1f, null);
                                }
                                randomActiveOTHEREnemy.healthHaver.ApplyDamage(outcomeDamage, Vector2.zero, "Voodoo Magic", CoreDamageTypes.None, DamageCategory.Normal, true, null, false);
                            }
                            Invoke("Cooldown", 0.01f);
                        }
                    }
                }
            }
            catch (Exception e)
            {
                ETGModConsole.Log(e.Message);
                ETGModConsole.Log(e.StackTrace);
                ETGModConsole.Log("IF YOU SEE THIS PLEASE REPORT IT TO NEVERNAMED (WITH SCREENSHOTS)");
            }
        }
예제 #16
0
        public static void RollHook(Action <RatPackItem, Projectile> orig, RatPackItem item, Projectile proj)
        {
            PlayerController player = item.LastOwner;

            if (player.HasPickupID(TrapCardId))
            {
                if (cooldown == false)
                {
                    float value = UnityEngine.Random.Range(0.0f, 1.0f);
                    bool  flag  = value < 0.3;
                    if (flag || player.HasPickupID(423))
                    {
                        AIActor enemy = proj.Owner as AIActor;
                        if (enemy != null)
                        {
                            cooldown = true;
                            GameManager.Instance.StartCoroutine(StartCooldown());
                            LootEngine.DoDefaultItemPoof(enemy.sprite.WorldBottomCenter, false, true);
                            AkSoundEngine.PostEvent("Play_OBJ_bomb_fuse_01", enemy.gameObject);

                            if (player.HasPickupID(109) || player.HasPickupID(364) || player.HasPickupID(170))
                            {
                                SpawnObjectPlayerItem icebombPrefab = PickupObjectDatabase.GetById(109).GetComponent <SpawnObjectPlayerItem>();
                                GameObject            icebombObject = icebombPrefab.objectToSpawn.gameObject;

                                GameObject     icebombObject2 = UnityEngine.Object.Instantiate <GameObject>(icebombObject, enemy.sprite.WorldBottomCenter, Quaternion.identity);
                                tk2dBaseSprite icebombsprite  = icebombObject2.GetComponent <tk2dBaseSprite>();
                                if (icebombsprite)
                                {
                                    icebombsprite.PlaceAtPositionByAnchor(enemy.sprite.WorldBottomCenter, tk2dBaseSprite.Anchor.MiddleCenter);
                                }
                            }

                            else if (!player.HasPickupID(109) || !player.HasPickupID(364) || !player.HasPickupID(170))
                            {
                                SpawnObjectPlayerItem bigbombPrefab = PickupObjectDatabase.GetById(108).GetComponent <SpawnObjectPlayerItem>();
                                GameObject            bigbombObject = bigbombPrefab.objectToSpawn.gameObject;

                                GameObject     bigbombObject2 = UnityEngine.Object.Instantiate <GameObject>(bigbombObject, enemy.sprite.WorldBottomCenter, Quaternion.identity);
                                tk2dBaseSprite bombsprite     = bigbombObject2.GetComponent <tk2dBaseSprite>();
                                if (bombsprite)
                                {
                                    bombsprite.PlaceAtPositionByAnchor(enemy.sprite.WorldBottomCenter, tk2dBaseSprite.Anchor.MiddleCenter);
                                }
                            }
                        }

                        else
                        {
                            RoomHandler absoluteRoom = player.CurrentRoom;
                            if (absoluteRoom.HasActiveEnemies(RoomHandler.ActiveEnemyType.All))
                            {
                                AIActor randomActiveEnemy = absoluteRoom.GetNearestEnemy(Vector2.zero, out float nearestDistance, true, true);
                                nearestDistance = float.MaxValue;
                                if (randomActiveEnemy != null)
                                {
                                    if (player.HasPickupID(109) || player.HasPickupID(364) || player.HasPickupID(170))
                                    {
                                        SpawnObjectPlayerItem icebombPrefab = PickupObjectDatabase.GetById(109).GetComponent <SpawnObjectPlayerItem>();
                                        GameObject            icebombObject = icebombPrefab.objectToSpawn.gameObject;

                                        GameObject     icebombObject2 = UnityEngine.Object.Instantiate <GameObject>(icebombObject, randomActiveEnemy.sprite.WorldBottomCenter, Quaternion.identity);
                                        tk2dBaseSprite icebombsprite  = icebombObject2.GetComponent <tk2dBaseSprite>();
                                        if (icebombsprite)
                                        {
                                            icebombsprite.PlaceAtPositionByAnchor(randomActiveEnemy.sprite.WorldBottomCenter, tk2dBaseSprite.Anchor.MiddleCenter);
                                        }
                                    }

                                    else if (!player.HasPickupID(109) || !player.HasPickupID(364) || !player.HasPickupID(170))
                                    {
                                        SpawnObjectPlayerItem bigbombPrefab = PickupObjectDatabase.GetById(108).GetComponent <SpawnObjectPlayerItem>();
                                        GameObject            bigbombObject = bigbombPrefab.objectToSpawn.gameObject;

                                        GameObject     bigbombObject2 = UnityEngine.Object.Instantiate <GameObject>(bigbombObject, randomActiveEnemy.sprite.WorldBottomCenter, Quaternion.identity);
                                        tk2dBaseSprite bombsprite     = bigbombObject2.GetComponent <tk2dBaseSprite>();
                                        if (bombsprite)
                                        {
                                            bombsprite.PlaceAtPositionByAnchor(randomActiveEnemy.sprite.WorldBottomCenter, tk2dBaseSprite.Anchor.MiddleCenter);
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
            orig(item, proj);
        }
        public void InitializeInternal(PickupObject i)
        {
            this.item = i;
            if (this.item && this.item.encounterTrackable)
            {
                GameStatsManager.Instance.SingleIncrementDifferentiator(this.item.encounterTrackable);
            }

            this.CurrentPrice = this.item.PurchasePrice;
            if (this.m_baseParentShop != null && this.CurrencyType == ShopCurrencyType.KEYS)
            {
                this.CurrentPrice = 1;
                if (this.item.quality == PickupObject.ItemQuality.A)
                {
                    this.CurrentPrice = 2;
                }
                if (this.item.quality == PickupObject.ItemQuality.S)
                {
                    this.CurrentPrice = 3;
                }
            }
            if (this.m_baseParentShop != null && this.CurrencyType == ShopCurrencyType.BLANKS)
            {
                this.CurrentPrice = 1;
                if (this.item.quality == PickupObject.ItemQuality.A || this.item.quality == PickupObject.ItemQuality.S)
                {
                    this.CurrentPrice = 2;
                }
            }
            if (this.m_baseParentShop != null && this.CurrencyType == ShopCurrencyType.CUSTOM)
            {
                this.CurrentPrice = 1;
                if (customPrice != null)
                {
                    this.CurrentPrice = customPrice(this.m_baseParentShop, this, this.item);
                }
                else
                {
                    ETGModConsole.Log("CustomPrice is sadly null please look into this!");
                }
            }

            base.gameObject.AddComponent <tk2dSprite>();
            tk2dSprite tk2dSprite = i.GetComponent <tk2dSprite>();

            if (tk2dSprite == null)
            {
                tk2dSprite = i.GetComponentInChildren <tk2dSprite>();
            }
            base.sprite.SetSprite(tk2dSprite.Collection, tk2dSprite.spriteId);
            base.sprite.IsPerpendicular = true;
            if (this.UseOmnidirectionalItemFacing)
            {
                base.sprite.IsPerpendicular = false;
            }
            base.sprite.HeightOffGround       = 1f;
            this.UseOmnidirectionalItemFacing = true;
            base.sprite.PlaceAtPositionByAnchor(base.transform.parent.position, tk2dBaseSprite.Anchor.MiddleCenter);
            base.sprite.transform.position = base.sprite.transform.position.Quantize(0.0625f);
            DepthLookupManager.ProcessRenderer(base.sprite.renderer);
            tk2dSprite componentInParent = base.transform.parent.gameObject.GetComponentInParent <tk2dSprite>();

            if (componentInParent != null)
            {
                componentInParent.AttachRenderer(base.sprite);
            }
            SpriteOutlineManager.AddOutlineToSprite(base.sprite, Color.black, 0.1f, 0.05f, SpriteOutlineManager.OutlineType.NORMAL);
            GameObject gameObject = null;

            if (this.m_parentShop != null && this.m_parentShop.shopItemShadowPrefab != null)
            {
                gameObject = this.m_parentShop.shopItemShadowPrefab;
            }
            if (this.m_baseParentShop != null && this.m_baseParentShop.shopItemShadowPrefab != null)
            {
                gameObject = this.m_baseParentShop.shopItemShadowPrefab;
            }
            if (gameObject != null)
            {
                if (!this.m_shadowObject)
                {
                    this.m_shadowObject = UnityEngine.Object.Instantiate <GameObject>(gameObject);
                }
                tk2dBaseSprite component = this.m_shadowObject.GetComponent <tk2dBaseSprite>();
                component.PlaceAtPositionByAnchor(base.sprite.WorldBottomCenter, tk2dBaseSprite.Anchor.MiddleCenter);
                component.transform.position = component.transform.position.Quantize(0.0625f);
                base.sprite.AttachRenderer(component);
                component.transform.parent = base.sprite.transform;
                component.HeightOffGround  = -0.5f;
            }
            base.sprite.UpdateZDepth();
            SpeculativeRigidbody orAddComponent = base.gameObject.GetOrAddComponent <SpeculativeRigidbody>();

            orAddComponent.PixelColliders = new List <PixelCollider>();
            PixelCollider pixelCollider = new PixelCollider
            {
                ColliderGenerationMode = PixelCollider.PixelColliderGeneration.Circle,
                CollisionLayer         = CollisionLayer.HighObstacle,
                ManualDiameter         = 14
            };
            Vector2 vector = base.sprite.WorldCenter - base.transform.position.XY();

            pixelCollider.ManualOffsetX = PhysicsEngine.UnitToPixel(vector.x) - 7;
            pixelCollider.ManualOffsetY = PhysicsEngine.UnitToPixel(vector.y) - 7;
            orAddComponent.PixelColliders.Add(pixelCollider);
            orAddComponent.Initialize();
            orAddComponent.OnPreRigidbodyCollision = null;
            SpeculativeRigidbody speculativeRigidbody = orAddComponent;

            speculativeRigidbody.OnPreRigidbodyCollision = (SpeculativeRigidbody.OnPreRigidbodyCollisionDelegate)Delegate.Combine(speculativeRigidbody.OnPreRigidbodyCollision, new SpeculativeRigidbody.OnPreRigidbodyCollisionDelegate(this.ItemOnPreRigidbodyCollision));
            base.RegenerateCache();
            if (!GameManager.Instance.IsFoyer && this.item is Gun && GameManager.Instance.PrimaryPlayer.CharacterUsesRandomGuns)
            {
                this.ForceOutOfStock();
            }
        }