Example #1
0
        public static bool Prefix(ItemStand __instance)
        {
            if (!__instance.HaveAttachment())
            {
                return(false);
            }
            GameObject itemPrefab = ObjectDB.instance.GetItemPrefab(__instance.m_nview.GetZDO().GetString("item"));

            if (itemPrefab != null)
            {
                GameObject gameObject = Object.Instantiate(itemPrefab, __instance.m_dropSpawnPoint.position, __instance.m_dropSpawnPoint.rotation);
                ItemDrop   itemDrop   = gameObject.GetComponent <ItemDrop>();
                ItemDrop.LoadFromZDO(itemDrop.m_itemData, __instance.m_nview.GetZDO());
                itemDrop.m_itemData = new ExtendedItemData(
                    itemDrop.m_itemData,
                    itemDrop.m_itemData.m_stack,
                    itemDrop.m_itemData.m_durability,
                    new Vector2i(),
                    false,
                    itemDrop.m_itemData.m_quality,
                    itemDrop.m_itemData.m_variant,
                    itemDrop.m_itemData.m_crafterID,
                    itemDrop.m_itemData.m_crafterName);
                gameObject.GetComponent <Rigidbody>().velocity = Vector3.up * 4f;
                __instance.m_effects.Create(__instance.m_dropSpawnPoint.position, Quaternion.identity);
            }
            __instance.m_nview.GetZDO().Set("item", "");
            __instance.m_nview.InvokeRPC(ZNetView.Everybody, "SetVisualItem", "", 0);
            return(false);
        }
Example #2
0
        public override void Paint(Level level)
        {
            var w = GetWidth();
            var h = GetHeight();
            var s = Math.Min(w, h);

            s = Math.Max(5, Rnd.Int(5, s - 5));

            var center = GetTileCenter();
            var stand  = new ItemStand();

            level.Area.Add(stand);
            stand.Center = center * 16 + new Vector2(8, 8);
            stand.SetItem(Items.CreateAndAdd(Items.Generate(ItemPool.Treasure), level.Area), null);

            var c = (int)Math.Floor(s / 2f);
            var t = Rnd.Chance() ? Tile.Rock : Tile.MetalBlock;

            for (var x = center.X - c; x <= center.X + c; x++)
            {
                for (var y = center.Y - c; y <= center.Y + c; y++)
                {
                    if (Math.Abs(x - center.X) + Math.Abs(y - center.Y) <= c && (center.X != x || center.Y != y))
                    {
                        Painter.Set(level, new Dot(x, y), t);
                    }
                }
            }

            Painter.Rect(level, this, 1, Tiles.RandomFloor());
        }
Example #3
0
 static void Prefix(Humanoid __0, ItemStand __instance, ref bool __result, ref bool __runOriginal)
 {
     if (PreventAccidentalInteraction.ShouldBlockInteraction(__instance))
     {
         __result      = false;
         __runOriginal = false;
     }
 }
Example #4
0
        public override void Use(Entity entity, Item item)
        {
            base.Use(entity, item);

            var room = entity.GetComponent <RoomComponent>().Room;

            if (room == null)
            {
                return;
            }

            // Copy to array, because we are going to change the list in the loop
            var items = room.Tagged[Tags.Item].ToArray();

            foreach (var it in items)
            {
                if (it is ItemStand ist)
                {
                    if (ist.Item == null)
                    {
                        continue;
                    }

                    var st = new ItemStand();
                    entity.Area.Add(st);

                    ist.X -= ist.Width / 2f + 1;

                    st.X = ist.X + ist.Width + 2;
                    st.Y = ist.Y;

                    st.SetItem(Items.CreateAndAdd(ist.Item.Id, entity.Area), item);
                }
                else if (it is Item i)
                {
                    var st = Items.CreateAndAdd(i.Id, entity.Area);
                    i.X -= i.Width / 2f + 1;

                    st.X = i.X + i.Width + 2;
                    st.Y = i.Y;
                }
            }

            var chests = room.Tagged[Tags.Chest].ToArray();

            foreach (var i in chests)
            {
                try {
                    var st = (Entity)Activator.CreateInstance(i.GetType());
                    i.X -= i.Width / 2f + 1;

                    st.X = i.X + i.Width + 2;
                    st.Y = i.Y;
                } catch (Exception e) {
                    Log.Error(e);
                }
            }
        }
Example #5
0
 static void Prefix(ItemStand __instance, ref string __result, ref bool __runOriginal)
 {
     // UnityEngine.Debug.Log("ShouldBlock: " + PreventAccidentalInteraction.ShouldBlockInteraction().ToString());
     if (PreventAccidentalInteraction.ShouldBlockInteraction(__instance))
     {
         __result      = String.Empty;
         __runOriginal = false;
     }
 }
Example #6
0
        public override void Paint(Level level)
        {
            var c     = GetTileCenter();
            var stand = new ItemStand();

            level.Area.Add(stand);
            stand.Center = c * 16 + new Vector2(8);
            stand.SetItem(Items.CreateAndAdd("bk:treasure_key", level.Area), null);
        }
Example #7
0
        public override void Paint(Level level)
        {
            base.Paint(level);
            Painter.Rect(level, this, 2, Tile.FloorD);

            var stand = new ItemStand();

            level.Area.Add(stand);

            stand.BottomCenter = GetCenterVector();
            stand.SetItem(Items.CreateAndAdd("bk:idol", level.Area), null);
        }
Example #8
0
        public override void Update(float dt)
        {
            if (Hidden)
            {
                if (!hided)
                {
                    hided = true;

                    foreach (var item in Area.Tagged[Tags.Item])
                    {
                        if (item is ItemStand stand && OwnsStand(stand))
                        {
                            stand.Done = true;
                        }
                    }
                }

                return;
            }

            if (saved && Remove && !OnScreen)
            {
                Done   = true;
                Hidden = true;

                var stand = new ItemStand();
                Area.Add(stand);
                stand.Center = Center;
                stand.SetItem(Items.CreateAndAdd("bk:emerald", Area), null);

                return;
            }

            base.Update(dt);

            if (!Flips)
            {
                return;
            }

            delay -= dt;

            if (delay <= 0)
            {
                delay = Rnd.Float(1, 10);
                GraphicsComponent.Flipped = !GraphicsComponent.Flipped;
            }
        }
        public override void Paint(Level level)
        {
            var c     = GetTileCenter();
            var stand = new ItemStand();

            level.Area.Add(stand);
            stand.Center = c * 16 + new Vector2(8, 16);
            stand.SetItem(Items.CreateAndAdd(Items.Generate(ItemPool.Secret), level.Area), null);

            var npc = new OldMan {
                RickRoll = Rnd.Chance(5)
            };

            level.Area.Add(npc);
            npc.BottomCenter = c * 16 + new Vector2(8, -8);
        }
Example #10
0
        public static bool ShouldBlockInteraction(ItemStand instance = null)
        {
            bool result = false;

            //UnityEngine.Debug.Log("Instance: " + (instance == null));
            //UnityEngine.Debug.Log("GuardianStone: " + BlockGuardianStoneInteractions.Value);
            //UnityEngine.Debug.Log("GuardianPowerName: " + !instance.m_guardianPower.m_name.IsNullOrWhiteSpace());
            try
            {
                if (BlockGuardianStoneInteractions.Value == false && instance.m_guardianPower != null)
                {
                    return(false);
                }
            }
            catch (NullReferenceException)
            {
                // This probably means instance is null and so we don't have to do anything
            }

            // UnityEngine.Debug.Log("keymethod: " + BlockInteractionMethod.Value);
            if (BlockInteractionMethod.Value == "keyheld")
            {
                foreach (string s in BlockInteractionKeys)
                {
                    // UnityEngine.Debug.Log("keyheld " + s + ": " + Input.GetKey(s).ToString());
                    result = !Input.GetKey(s) || result;
                }
            }
            else if (BlockInteractionMethod.Value == "crouch")
            {
                // UnityEngine.Debug.Log("crouching: " + Player.m_localPlayer.IsCrouching().ToString());
                result = !Player.m_localPlayer.IsCrouching();
            }

            // UnityEngine.Debug.Log("result: " + result.ToString());
            return(result);
        }
Example #11
0
        public override void Use(Entity entity, Item item)
        {
            var id = Random ? Items.Generate(i => i.Type == ItemType.Active || i.Type == ItemType.Weapon || i.Type == ItemType.Artifact) : Item;

            if (OnStand)
            {
                var i = Items.CreateAndAdd(id, entity.Area);

                if (i == null)
                {
                    Log.Error($"Invalid item {id}");
                    return;
                }

                var stand = new ItemStand();
                entity.Area.Add(stand);
                stand.Center = entity.Center - new Vector2(0, 8);
                stand.SetItem(i, null);

                return;
            }

            for (var j = 0; j < Amount; j++)
            {
                var i = Items.CreateAndAdd(id, entity.Area);

                if (i == null)
                {
                    Log.Error($"Invalid item {id}");
                    return;
                }

                // i.Hide = Hide;
                entity.GetComponent <InventoryComponent>().Pickup(i, Animate);
            }
        }
Example #12
0
 protected override bool OwnsStand(ItemStand stand)
 {
     return(stand is TrashGoblinStand);
 }
Example #13
0
 protected override bool OwnsStand(ItemStand stand)
 {
     return(stand is ArtifactStand);
 }
Example #14
0
        public override void Paint(Level level)
        {
            if (LevelSave.BiomeGenerated is IceBiome)
            {
                var clip = Painter.Clip;
                Painter.Clip = null;
                Painter.Rect(level, this, 0, Tile.WallB);
                Painter.Clip = clip;
            }

            var t = Tiles.Pick(Tile.Chasm, Tile.WallA, Tile.WallB, Tile.Planks);

            if (Rnd.Chance())
            {
                Painter.Set(level, new Dot(Left + 1, Top + 1), t);
                Painter.Set(level, new Dot(Right - 1, Bottom - 1), t);
            }

            if (Rnd.Chance())
            {
                Painter.Set(level, new Dot(Right - 1, Top + 1), t);
                Painter.Set(level, new Dot(Left + 1, Bottom - 1), t);
            }

            if (Rnd.Chance(10 + Run.Scourge * 5))
            {
                var cn = GetCenter() * 16;
                var c  = Rnd.Int(2, 4);

                for (var i = 0; i < c; i++)
                {
                    var stand = new ScourgedStand();
                    level.Area.Add(stand);
                    stand.Center = cn + new Vector2(16 + (i - c / 2f) * 32, 8);

                    stand.SetItem(Items.CreateAndAdd(Scourge.GenerateItemId(), level.Area), stand);
                }

                return;
            }

            var center = GetCenter() * 16 + new Vector2(8);

            if (Rnd.Chance(5))
            {
                var chest = new ProtoChest();
                level.Area.Add(chest);
                chest.BottomCenter = center;

                return;
            }

            switch (Rnd.Int(GlobalSave.IsTrue(ShopNpc.Gobetta) ? 6 : 5))
            {
            case 0: {
                for (var i = 0; i < Rnd.Int(1, 3); i++)
                {
                    Items.CreateAndAdd("bk:heart", level.Area).Center = center;
                }

                break;
            }

            case 1: {
                for (var i = 0; i < Rnd.Int(1, 4); i++)
                {
                    Items.CreateAndAdd("bk:shield", level.Area).Center = center;
                }

                break;
            }

            case 2: {
                var stand = new ItemStand();
                level.Area.Add(stand);
                stand.BottomCenter = center;
                stand.SetItem(Items.CreateAndAdd(Items.Generate(ItemPool.Treasure), level.Area), null);

                break;
            }

            case 3: {
                var a = Rnd.Chance();
                var c = Rnd.Int(1, a ? 3 : 4);

                for (var i = 0; i < c; i++)
                {
                    var chest = a ? (Chest) new StoneChest() : new RedChest();
                    level.Area.Add(chest);
                    chest.BottomCenter = center - new Vector2((c / 2f - i) * 20, 0);
                }

                break;
            }

            case 4: {
                for (var i = 0; i < Rnd.Int(6, 12); i++)
                {
                    Items.CreateAndAdd("bk:coin", level.Area).Center = center;
                }

                break;
            }

            case 5: {
                Gobetta.Place(GetTileCenter() * 16 + new Vector2(8, 8), level.Area);
                break;
            }
            }
        }
Example #15
0
 protected override bool OwnsStand(ItemStand stand)
 {
     return(stand is WeaponStand);
 }
Example #16
0
 protected virtual bool OwnsStand(ItemStand stand)
 {
     return(false);
 }
Example #17
0
 private void Start()
 {
     sr    = GetComponent <SpriteRenderer>();
     col   = GetComponent <CircleCollider2D>();
     stand = transform.parent.GetComponent <ItemStand>();
 }
Example #18
0
 protected override bool OwnsStand(ItemStand stand)
 {
     return(stand is RogerStand);
 }
Example #19
0
        private static void RenderWindow()
        {
            if (Selected == null)
            {
                return;
            }

            var show   = true;
            var player = LocalPlayer.Locate(Engine.Instance.State.Area);

            if (!ImGui.Begin("Item editor", ref show, ImGuiWindowFlags.AlwaysAutoResize))
            {
                ImGui.End();
                return;
            }

            if (!show)
            {
                Selected = null;
                return;
            }

            var name     = Locale.Get(Selected.Id);
            var animated = Selected.Animation != null;
            var region   = animated ? null : CommonAse.Items.GetSlice(Selected.Id);

            if (!animated && region != null)
            {
                DrawItem(region);
            }

            ImGui.Text(Selected.Id);

            if (ImGui.Button("Give"))
            {
                LocalPlayer.Locate(Engine.Instance.State.Area)
                ?.GetComponent <InventoryComponent>()
                .Pickup(Items.CreateAndAdd(
                            Selected.Id, Engine.Instance.State.Area
                            ));
            }

            if (player != null)
            {
                ImGui.SameLine();

                if (ImGui.Button("Spawn"))
                {
                    var item = Items.CreateAndAdd(
                        Selected.Id, Engine.Instance.State.Area, false
                        );

                    item.Center = player.Center;
                }

                ImGui.SameLine();

                if (ImGui.Button("Spawn on stand"))
                {
                    var stand = new ItemStand();
                    Engine.Instance.State.Area.Add(stand);
                    var item = Items.CreateAndAdd(
                        Selected.Id, Engine.Instance.State.Area, false
                        );

                    stand.Center = player.Center;
                    stand.SetItem(item, null);
                }
            }

            ImGui.SameLine();

            if (ImGui.Button("Rename"))
            {
                ImGui.OpenPopup("Rename");
                itemName = Selected.Id;
            }

            if (ImGui.BeginPopupModal("Rename"))
            {
                ImGui.PushItemWidth(300);
                ImGui.InputText("Id", ref itemName, 64);
                ImGui.PopItemWidth();

                if (ImGui.Button("Rename") || Input.Keyboard.WasPressed(Keys.Enter, true))
                {
                    var iname       = Locale.Get(Selected.Id);
                    var idesc       = $"{Selected.Id}_desc";
                    var description = Locale.Get(idesc);

                    Locale.Map.Remove(Selected.Id);
                    Locale.Map.Remove(idesc);

                    Items.Datas.Remove(Selected.Id);

                    Selected.Id = itemName;
                    itemName    = "";

                    Locale.Map[Selected.Id]           = iname;
                    Locale.Map[$"{Selected.Id}_desc"] = description;
                    Items.Datas[Selected.Id]          = Selected;

                    ImGui.CloseCurrentPopup();
                }

                ImGui.SameLine();

                if (ImGui.Button("Cancel") || Input.Keyboard.WasPressed(Keys.Escape, true))
                {
                    itemName = "";
                    ImGui.CloseCurrentPopup();
                }

                ImGui.EndPopup();
            }

            if (ImGui.InputText("Name", ref name, 64))
            {
                Locale.Map[Selected.Id] = name;
            }

            var key  = $"{Selected.Id}_desc";
            var desc = Locale.Get(key);

            if (ImGui.InputText("Description", ref desc, 128))
            {
                Locale.Map[key] = desc;
            }

            var type = (int)Selected.Type;

            if (ImGui.Combo("Type", ref type, Types, Types.Length))
            {
                Selected.Type = (ItemType)type;
            }

            type = (int)Selected.Quality;

            if (ImGui.Combo("Quality", ref type, Quality, Quality.Length))
            {
                Selected.Quality = (ItemQuality)type;
            }

            if (Selected.Type == ItemType.Weapon)
            {
                type = (int)Selected.WeaponType;

                if (ImGui.Combo("Weapon Type", ref type, WeaponTypes, WeaponTypes.Length))
                {
                    Selected.WeaponType = (WeaponType)type;
                }
            }

            var t = Selected.Type;

            if (t != ItemType.Coin && t != ItemType.Heart && t != ItemType.Bomb && t != ItemType.Key)
            {
                if (t == ItemType.Active)
                {
                    var o = 0;                     // Room charged

                    if (Selected.SingleUse)
                    {
                        o = 2;
                    }
                    else if (Selected.UseTime < -0.01f)
                    {
                        o = 1;                         // Auto charged
                    }
                    else if (Selected.UseTime < 0.01f)
                    {
                        o = 3;                         // Infinite
                    }

                    if (ImGui.Combo("RC", ref o, types, types.Length))
                    {
                        Selected.SingleUse = false;

                        if (o == 0)
                        {
                            Selected.UseTime = Math.Max(0.01f, Math.Abs(Selected.UseTime));
                        }
                        else if (o == 1)
                        {
                            Selected.UseTime = Math.Min(-0.1f, -Math.Abs(Selected.UseTime));
                        }
                        else if (o == 3)
                        {
                            Selected.UseTime = 0;
                        }
                        else
                        {
                            Selected.SingleUse = true;
                        }
                    }

                    if (o == 0)
                    {
                        var v = (int)Selected.UseTime;

                        if (ImGui.InputInt("Charges", ref v))
                        {
                            Selected.UseTime = v;
                        }
                    }
                    else if (o == 1)
                    {
                        var v = -Selected.UseTime;

                        if (ImGui.InputFloat("Charge time", ref v))
                        {
                            Selected.UseTime = -v;
                        }
                    }
                }
                else if (t == ItemType.Weapon)
                {
                    ImGui.InputFloat("Use time", ref Selected.UseTime);
                    ImGui.Checkbox("Automatic", ref Selected.Automatic);
                }

                ImGui.Checkbox("Auto pickup", ref Selected.AutoPickup);
                ImGui.Checkbox("Scourge", ref Selected.Scourged);
                ImGui.SameLine();
            }
            else
            {
                Selected.AutoPickup = true;
            }

            if (ImGui.Checkbox("Animated", ref animated))
            {
                Selected.Animation = animated ? "" : null;
            }

            if (animated)
            {
                ImGui.InputText("Animation", ref Selected.Animation, 128);
            }

            ImGui.Separator();
            ImGui.Checkbox("Lockable", ref Selected.Lockable);

            if (Selected.Lockable)
            {
                ImGui.SameLine();
                var unlocked = GlobalSave.IsTrue(Selected.Id);

                if (ImGui.Checkbox("Unlocked", ref unlocked))
                {
                    if (unlocked)
                    {
                        Items.Unlock(Selected.Id);
                    }
                    else
                    {
                        GlobalSave.Put(Selected.Id, false);
                    }
                }

                var sells = Selected.UnlockPrice > 0;

                if (ImGui.Checkbox("Sells", ref sells))
                {
                    Selected.UnlockPrice = sells ? 1 : 0;
                }

                if (sells)
                {
                    ImGui.SameLine();
                    ImGui.InputInt("Price", ref Selected.UnlockPrice);
                }
            }

            ImGui.Separator();

            if (ImGui.CollapsingHeader("Uses"))
            {
                DisplayUse(Selected.Root, Selected.Uses);
            }

            if (ImGui.CollapsingHeader("Renderer"))
            {
                DisplayRenderer(Selected.Root, Selected.Renderer);
            }

            if (ImGui.CollapsingHeader("Pools"))
            {
                ImGui.Checkbox("Single spawn", ref Selected.Single);

                var i = 0;
                ImGui.Text($"{Selected.Pools}");

                foreach (var p in ItemPool.ById)
                {
                    var val = p.Contains(Selected.Pools);

                    if (ImGui.Checkbox(p.Name, ref val))
                    {
                        Selected.Pools = p.Apply(Selected.Pools, val);
                    }

                    i++;

                    if (i == ItemPool.Count)
                    {
                        break;
                    }
                }
            }

            if (ImGui.CollapsingHeader("Spawn chance"))
            {
                Selected.Chance.RenderDebug();
            }

            ImGui.Separator();

            if (ImGui.Button("Delete"))
            {
                Items.Datas.Remove(Selected.Id);
                Selected = null;
            }

            if (Selected != null && player != null)
            {
                var id = Selected.Id;

                if (player.GetComponent <InventoryComponent>().Has(id))
                {
                    ImGui.BulletText("Present in inventory");
                }

                if (player.GetComponent <ActiveWeaponComponent>().Has(id))
                {
                    ImGui.BulletText("Present in active weapon slot");
                }

                if (player.GetComponent <WeaponComponent>().Has(id))
                {
                    ImGui.BulletText("Present in weapon slot");
                }

                if (player.GetComponent <ActiveItemComponent>().Has(id))
                {
                    ImGui.BulletText("Present in active item slot");
                }
            }

            ImGui.End();
        }
Example #20
0
        public override void Paint(Level level)
        {
            if (LevelSave.BiomeGenerated is IceBiome)
            {
                var clip = Painter.Clip;
                Painter.Clip = null;
                Painter.Rect(level, this, 0, Tile.WallB);
                Painter.Clip = clip;
            }

            var center = GetCenter() * 16 + new Vector2(8);

            if (Rnd.Chance(20))
            {
                var stand = new ItemStand();
                level.Area.Add(stand);
                stand.Center = center;

                stand.SetItem(Items.CreateAndAdd(Items.Generate(ItemPool.Treasure), level.Area), null);
            }
            else
            {
                var chests = new List <Chest>();
                var i      = Rnd.Int(4);

                switch (i)
                {
                case 0: {
                    for (var k = 0; k < 2; k++)
                    {
                        chests.Add(new RedChest());
                    }

                    break;
                }

                case 1: {
                    for (var k = 0; k < 4; k++)
                    {
                        chests.Add(new GoldChest());
                    }

                    break;
                }

                case 2: {
                    for (var k = 0; k < 3; k++)
                    {
                        chests.Add(new WoodenChest());
                    }

                    break;
                }

                default: {
                    chests.Add(new GoldChest());
                    chests.Add(new WoodenChest());
                    chests.Add(new RedChest());

                    break;
                }
                }

                chests.Shuffle(Rnd.Generator);

                var j  = 0;
                var cn = chests.Count;

                foreach (var c in chests)
                {
                    level.Area.Add(c);
                    c.Center = center + new Vector2((j - cn / 2f) * 16, 0);

                    j++;
                }
            }
        }
Example #21
0
 protected override bool OwnsStand(ItemStand stand)
 {
     return(stand is GobettaStand);
 }
Example #22
0
 public Model3DCommand(string type, ItemStand parameters) : base(type, parameters)
 {
 }
Example #23
0
 public UpdateModel3DCommand(ItemStand parameters) : base("update", parameters)
 {
 }
Example #24
0
 protected override bool OwnsStand(ItemStand stand)
 {
     return(stand is ActiveStand);
 }
Example #25
0
        private static string GetPrefabFriendlyName(GameObject prefab)
        {
            HoverText hover = prefab.GetComponent <HoverText>();

            if (hover)
            {
                return(hover.m_text);
            }

            ItemDrop item = prefab.GetComponent <ItemDrop>();

            if (item)
            {
                return(item.m_itemData.m_shared.m_name);
            }

            Character chara = prefab.GetComponent <Character>();

            if (chara)
            {
                return(chara.m_name);
            }

            RuneStone runestone = prefab.GetComponent <RuneStone>();

            if (runestone)
            {
                return(runestone.m_name);
            }

            ItemStand itemStand = prefab.GetComponent <ItemStand>();

            if (itemStand)
            {
                return(itemStand.m_name);
            }

            MineRock mineRock = prefab.GetComponent <MineRock>();

            if (mineRock)
            {
                return(mineRock.m_name);
            }

            Pickable pickable = prefab.GetComponent <Pickable>();

            if (pickable)
            {
                return(GetPrefabFriendlyName(pickable.m_itemPrefab));
            }

            CreatureSpawner creatureSpawner = prefab.GetComponent <CreatureSpawner>();

            if (creatureSpawner)
            {
                return(GetPrefabFriendlyName(creatureSpawner.m_creaturePrefab));
            }

            SpawnArea spawnArea = prefab.GetComponent <SpawnArea>();

            if (spawnArea && spawnArea.m_prefabs.Count > 0)
            {
                return(GetPrefabFriendlyName(spawnArea.m_prefabs[0].m_prefab));
            }

            Piece piece = prefab.GetComponent <Piece>();

            if (piece && !string.IsNullOrEmpty(piece.m_name))
            {
                return(piece.m_name);
            }

            return(prefab.name);
        }
Example #26
0
        public override void Paint(Level level)
        {
            if (LevelSave.BiomeGenerated is IceBiome)
            {
                var clip = Painter.Clip;
                Painter.Clip = null;
                Painter.Rect(level, this, 0, Tile.WallB);
                Painter.Clip = clip;
            }

            Painter.Fill(level, this, 1, Tile.EvilWall);
            Painter.Fill(level, this, 2, Tile.EvilFloor);

            PaintTunnel(level, Tile.EvilFloor);

            var center = GetCenter() * 16 + new Vector2(8);

            switch (Rnd.Int(4))
            {
            case 0: {
                for (var i = 0; i < Rnd.Int(1, 3); i++)
                {
                    Items.CreateAndAdd("bk:heart", level.Area).Center = center;
                }

                break;
            }

            case 1: {
                for (var i = 0; i < Rnd.Int(1, 4); i++)
                {
                    Items.CreateAndAdd("bk:shield", level.Area).Center = center;
                }

                break;
            }

            case 2: {
                var stand = new ItemStand();
                level.Area.Add(stand);
                stand.BottomCenter = center;
                stand.SetItem(Items.CreateAndAdd(Items.Generate(ItemPool.SpikedRoom), level.Area), null);

                break;
            }

            case 3: {
                var a = Rnd.Chance();
                var c = Rnd.Int(1, a ? 3 : 4);

                for (var i = 0; i < c; i++)
                {
                    var chest = a ? (Chest) new StoneChest() : new RedChest();
                    level.Area.Add(chest);
                    chest.BottomCenter = center - new Vector2((c / 2f - i) * 20, 0);
                }

                break;
            }
            }
        }