diff --git a/core/src/com/riiablo/Files.java b/core/src/com/riiablo/Files.java index 0902f5bc..4f3163df 100644 --- a/core/src/com/riiablo/Files.java +++ b/core/src/com/riiablo/Files.java @@ -40,6 +40,7 @@ import com.riiablo.codec.excel.RarePrefix; import com.riiablo.codec.excel.RareSuffix; import com.riiablo.codec.excel.Runes; import com.riiablo.codec.excel.SetItems; +import com.riiablo.codec.excel.Sets; import com.riiablo.codec.excel.SkillDesc; import com.riiablo.codec.excel.Skills; import com.riiablo.codec.excel.Sounds; @@ -84,6 +85,7 @@ public class Files { public final RarePrefix RarePrefix; public final RareSuffix RareSuffix; public final Runes Runes; + public final Sets Sets; public final SetItems SetItems; public final Skills skills; public final SkillDesc skilldesc; @@ -130,6 +132,7 @@ public class Files { PlrType = load(assets, PlrType.class); Properties = load(assets, Properties.class, Excel.EXPANSION); QualityItems = load(assets, QualityItems.class); + Sets = load(assets, Sets.class, Excel.EXPANSION); SetItems = load(assets, SetItems.class, Excel.EXPANSION); skills = load(assets, Skills.class); skilldesc = load(assets, SkillDesc.class); @@ -139,6 +142,8 @@ public class Files { //UniqueSuffix = load(assets, UniqueSuffix.class); WeaponClass = load(assets, WeaponClass.class); weapons = load(assets, Weapons.class); + + Sets.index(SetItems); } @Deprecated diff --git a/core/src/com/riiablo/codec/excel/SetItems.java b/core/src/com/riiablo/codec/excel/SetItems.java index b8cfdbe2..947e2049 100644 --- a/core/src/com/riiablo/codec/excel/SetItems.java +++ b/core/src/com/riiablo/codec/excel/SetItems.java @@ -1,30 +1,18 @@ package com.riiablo.codec.excel; -import com.badlogic.gdx.utils.Array; -import com.badlogic.gdx.utils.ObjectMap; - public class SetItems extends Excel { - private final ObjectMap> sets = new ObjectMap<>(); - - @Override - protected void init() { - for (SetItems.Entry item : this) { - Array items = sets.get(item.set); - if (items == null) sets.put(item.set, items = new Array<>(6)); - items.add(item); - } - } - - public Array getItems(SetItems.Entry item) { - return sets.get(item.set); - } - public static class Entry extends Excel.Entry { @Override public String toString() { return index; } + public Sets.Entry getSet() { + return parentSet; + } + + Sets.Entry parentSet; + @Key @Column public String index; diff --git a/core/src/com/riiablo/codec/excel/Sets.java b/core/src/com/riiablo/codec/excel/Sets.java new file mode 100644 index 00000000..502b2cfd --- /dev/null +++ b/core/src/com/riiablo/codec/excel/Sets.java @@ -0,0 +1,79 @@ +package com.riiablo.codec.excel; + +import com.badlogic.gdx.utils.Array; +import com.badlogic.gdx.utils.IntMap; + +public class Sets extends Excel { + private final IntMap> ITEMS = new IntMap<>(); + + public void index(SetItems items) { + assert ITEMS.size == 0 : "Illegal state -- ITEM has already been indexed"; + for (SetItems.Entry item : items) { + int id = index(item.set); + Sets.Entry entry = item.parentSet = get(id); + Array setItems = ITEMS.get(id); + if (setItems == null) ITEMS.put(id, setItems = entry.items = new Array<>(6)); + setItems.add(item); + } + } + + public static class Entry extends Excel.Entry { + @Override + public String toString() { + return index; + } + + public Array getItems() { + return items; + } + + Array items; + + @Key + @Column + public String index; + @Column public String name; + @Column public int version; + @Column public int level; + @Column(format = "PCode2%s", endIndex = 2, values = {"a", "b"}) + public String PCode2[]; + @Column(format = "PParam2%s", endIndex = 2, values = {"a", "b"}) + public int PParam2[]; + @Column(format = "PMin2%s", endIndex = 2, values = {"a", "b"}) + public int PMin2[]; + @Column(format = "PMax2%s", endIndex = 2, values = {"a", "b"}) + public int PMax2[]; + @Column(format = "PCode3%s", endIndex = 2, values = {"a", "b"}) + public int PCode3[]; + @Column(format = "PParam3%s", endIndex = 2, values = {"a", "b"}) + public int PParam3[]; + @Column(format = "PMin3%s", endIndex = 2, values = {"a", "b"}) + public int PMin3[]; + @Column(format = "PMax3%s", endIndex = 2, values = {"a", "b"}) + public int PMax3[]; + @Column(format = "PCode4%s", endIndex = 2, values = {"a", "b"}) + public int PCode4[]; + @Column(format = "PParam4%s", endIndex = 2, values = {"a", "b"}) + public int PParam4[]; + @Column(format = "PMin4%s", endIndex = 2, values = {"a", "b"}) + public int PMin4[]; + @Column(format = "PMax4%s", endIndex = 2, values = {"a", "b"}) + public int PMax4[]; + @Column(format = "PCode5%s", endIndex = 2, values = {"a", "b"}) + public int PCode5[]; + @Column(format = "PParam5%s", endIndex = 2, values = {"a", "b"}) + public int PParam5[]; + @Column(format = "PMin5%s", endIndex = 2, values = {"a", "b"}) + public int PMin5[]; + @Column(format = "PMax5%s", endIndex = 2, values = {"a", "b"}) + public int PMax5[]; + @Column(startIndex = 1, endIndex = 9) + public String FCode[]; + @Column(startIndex = 1, endIndex = 9) + public int FParam[]; + @Column(startIndex = 1, endIndex = 9) + public int FMin[]; + @Column(startIndex = 1, endIndex = 9) + public int FMax[]; + } +} diff --git a/core/src/com/riiablo/item/Item.java b/core/src/com/riiablo/item/Item.java index fe8bf9ec..c2bb361c 100644 --- a/core/src/com/riiablo/item/Item.java +++ b/core/src/com/riiablo/item/Item.java @@ -23,6 +23,7 @@ import com.riiablo.codec.excel.ItemTypes; import com.riiablo.codec.excel.MagicAffix; import com.riiablo.codec.excel.Misc; import com.riiablo.codec.excel.SetItems; +import com.riiablo.codec.excel.Sets; import com.riiablo.codec.excel.UniqueItems; import com.riiablo.codec.excel.Weapons; import com.riiablo.codec.util.BBox; @@ -985,9 +986,9 @@ public class Item extends Actor implements Disposable { // TODO: This can be cleaned up later -- add support for set detection if (quality == SET) { add().height(font.getLineHeight()).space(SPACING).row(); - final SetItems.Entry set = Riiablo.files.SetItems.get(qualityId); - add(new Label(Riiablo.string.lookup(set.set), font, Riiablo.colors.gold)).space(SPACING).row(); - for (SetItems.Entry item : Riiablo.files.SetItems.getItems(set)) { + Sets.Entry set = Riiablo.files.SetItems.get(qualityId).getSet(); + add(new Label(Riiablo.string.lookup(set.name), font, Riiablo.colors.gold)).space(SPACING).row(); + for (SetItems.Entry item : set.getItems()) { add(new Label(Riiablo.string.lookup(item.index), font, Riiablo.colors.red)).space(SPACING).row(); } }