mirror of
https://github.com/collinsmith/riiablo.git
synced 2025-02-01 10:24:30 +07:00
Created ItemWrapper class which is an Actor that wraps an Item
Added static util methods to ItemUtils This is experimental to play with simplifying Item class
This commit is contained in:
parent
90971e57b8
commit
0306c60850
@ -3,13 +3,10 @@ package com.riiablo.item.item4;
|
||||
import java.util.Arrays;
|
||||
import org.apache.commons.lang3.builder.ToStringBuilder;
|
||||
|
||||
import com.badlogic.gdx.assets.AssetDescriptor;
|
||||
import com.badlogic.gdx.scenes.scene2d.ui.Table;
|
||||
import com.badlogic.gdx.utils.Array;
|
||||
|
||||
import com.riiablo.Riiablo;
|
||||
import com.riiablo.codec.DC6;
|
||||
import com.riiablo.codec.Index;
|
||||
import com.riiablo.codec.excel.Armor;
|
||||
import com.riiablo.codec.excel.ItemEntry;
|
||||
import com.riiablo.codec.excel.ItemTypes;
|
||||
@ -156,14 +153,6 @@ public class Item {
|
||||
String name; // cache?
|
||||
Table header; // needed?
|
||||
|
||||
// Cursor and 2d image stuff
|
||||
AssetDescriptor<DC6> invFileDescriptor;
|
||||
DC6 invFile;
|
||||
Index invColormap;
|
||||
int invColorIndex;
|
||||
Index charColormap;
|
||||
int charColorIndex;
|
||||
|
||||
Item() {}
|
||||
|
||||
void reset() {
|
||||
|
@ -5,6 +5,9 @@ import com.badlogic.gdx.utils.GdxRuntimeException;
|
||||
import com.riiablo.Riiablo;
|
||||
import com.riiablo.codec.excel.Gems;
|
||||
import com.riiablo.codec.excel.ItemEntry;
|
||||
import com.riiablo.codec.excel.MagicAffix;
|
||||
import com.riiablo.codec.excel.SetItems;
|
||||
import com.riiablo.codec.excel.UniqueItems;
|
||||
import com.riiablo.item.PropertyList;
|
||||
|
||||
public class ItemUtils {
|
||||
@ -27,4 +30,103 @@ public class ItemUtils {
|
||||
props[Item.GEMPROPS_SHIELD] = PropertyList.obtain().add(gem.shieldModCode, gem.shieldModParam, gem.shieldModMin, gem.shieldModMax);
|
||||
return props;
|
||||
}
|
||||
|
||||
static String getInvFileName(Item item) {
|
||||
if (item.isIdentified()) {
|
||||
switch (item.quality) {
|
||||
case SET:
|
||||
SetItems.Entry setItem = (SetItems.Entry) item.qualityData;
|
||||
if (!setItem.invfile.isEmpty()) return setItem.invfile;
|
||||
break;
|
||||
case UNIQUE:
|
||||
UniqueItems.Entry uniqueItem = (UniqueItems.Entry) item.qualityData;
|
||||
if (!uniqueItem.invfile.isEmpty()) return uniqueItem.invfile;
|
||||
break;
|
||||
default:
|
||||
// do nothing
|
||||
}
|
||||
}
|
||||
|
||||
return item.pictureId >= 0 ? item.typeEntry.InvGfx[item.pictureId] : item.base.invfile;
|
||||
}
|
||||
|
||||
static String getInvColor(Item item) {
|
||||
if (item.base.InvTrans == 0 || !item.isIdentified()) return null;
|
||||
switch (item.quality) {
|
||||
case MAGIC: {
|
||||
MagicAffix affix;
|
||||
int prefix = item.qualityId & Item.MAGIC_AFFIX_MASK;
|
||||
if ((affix = Riiablo.files.MagicPrefix.get(prefix)) != null && affix.transform)
|
||||
return affix.transformcolor;
|
||||
int suffix = item.qualityId >>> Item.MAGIC_AFFIX_SIZE;
|
||||
if ((affix = Riiablo.files.MagicSuffix.get(suffix)) != null && affix.transform)
|
||||
return affix.transformcolor;
|
||||
return null;
|
||||
}
|
||||
|
||||
case RARE:
|
||||
case CRAFTED: {
|
||||
MagicAffix affix;
|
||||
RareQualityData rareQualityData = (RareQualityData) item.qualityData;
|
||||
for (int i = 0; i < RareQualityData.NUM_AFFIXES; i++) {
|
||||
int prefix = rareQualityData.prefixes[i];
|
||||
if ((affix = Riiablo.files.MagicPrefix.get(prefix)) != null && affix.transform)
|
||||
return affix.transformcolor;
|
||||
int suffix = rareQualityData.suffixes[i];
|
||||
if ((affix = Riiablo.files.MagicSuffix.get(suffix)) != null && affix.transform)
|
||||
return affix.transformcolor;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
case SET:
|
||||
return ((SetItems.Entry) item.qualityData).invtransform;
|
||||
|
||||
case UNIQUE:
|
||||
return ((UniqueItems.Entry) item.qualityData).invtransform;
|
||||
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
static String getCharColor(Item item) {
|
||||
if (item.base.Transform == 0 || !item.isIdentified()) return null;
|
||||
switch (item.quality) {
|
||||
case MAGIC: {
|
||||
MagicAffix affix;
|
||||
int prefix = item.qualityId & Item.MAGIC_AFFIX_MASK;
|
||||
if ((affix = Riiablo.files.MagicPrefix.get(prefix)) != null && affix.transform)
|
||||
return affix.transformcolor;
|
||||
int suffix = item.qualityId >>> Item.MAGIC_AFFIX_SIZE;
|
||||
if ((affix = Riiablo.files.MagicSuffix.get(suffix)) != null && affix.transform)
|
||||
return affix.transformcolor;
|
||||
return null;
|
||||
}
|
||||
|
||||
case RARE:
|
||||
case CRAFTED: {
|
||||
MagicAffix affix;
|
||||
RareQualityData rareQualityData = (RareQualityData) item.qualityData;
|
||||
for (int i = 0; i < RareQualityData.NUM_AFFIXES; i++) {
|
||||
int prefix = rareQualityData.prefixes[i];
|
||||
if ((affix = Riiablo.files.MagicPrefix.get(prefix)) != null && affix.transform)
|
||||
return affix.transformcolor;
|
||||
int suffix = rareQualityData.suffixes[i];
|
||||
if ((affix = Riiablo.files.MagicSuffix.get(suffix)) != null && affix.transform)
|
||||
return affix.transformcolor;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
case SET:
|
||||
return ((SetItems.Entry) item.qualityData).chrtransform;
|
||||
|
||||
case UNIQUE:
|
||||
return ((UniqueItems.Entry) item.qualityData).chrtransform;
|
||||
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
89
core/src/com/riiablo/item/item4/ItemWrapper.java
Normal file
89
core/src/com/riiablo/item/item4/ItemWrapper.java
Normal file
@ -0,0 +1,89 @@
|
||||
package com.riiablo.item.item4;
|
||||
|
||||
import com.badlogic.gdx.assets.AssetDescriptor;
|
||||
import com.badlogic.gdx.graphics.g2d.Batch;
|
||||
import com.badlogic.gdx.scenes.scene2d.Actor;
|
||||
import com.badlogic.gdx.utils.Disposable;
|
||||
|
||||
import com.riiablo.Riiablo;
|
||||
import com.riiablo.codec.DC6;
|
||||
import com.riiablo.codec.Index;
|
||||
import com.riiablo.codec.excel.Inventory;
|
||||
import com.riiablo.codec.util.BBox;
|
||||
import com.riiablo.graphics.PaletteIndexedBatch;
|
||||
|
||||
public class ItemWrapper extends Actor implements Disposable {
|
||||
final Item item;
|
||||
|
||||
AssetDescriptor<DC6> invFileDescriptor;
|
||||
DC6 invFile;
|
||||
|
||||
Index invColormap;
|
||||
int invColorIndex;
|
||||
|
||||
Index charColormap;
|
||||
int charColorIndex;
|
||||
|
||||
private ItemWrapper(Item item) {
|
||||
this.item = item;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return item.getNameString();
|
||||
}
|
||||
|
||||
public void resize() {
|
||||
BBox box = invFile.getBox();
|
||||
setSize(box.width, box.height);
|
||||
}
|
||||
|
||||
public void resize(Inventory.Entry inv) {
|
||||
setSize(item.base.invwidth * inv.gridBoxWidth, item.base.invheight * inv.gridBoxHeight);
|
||||
}
|
||||
|
||||
|
||||
public void load() {
|
||||
if (invFileDescriptor != null) return;
|
||||
invFileDescriptor = new AssetDescriptor<>("data\\global\\items\\" + ItemUtils.getInvFileName(item) + '.' + DC6.EXT, DC6.class);
|
||||
Riiablo.assets.load(invFileDescriptor);
|
||||
checkLoaded();
|
||||
|
||||
invColormap = Riiablo.colormaps.get(item.base.InvTrans);
|
||||
String invColor = ItemUtils.getInvColor(item);
|
||||
invColorIndex = invColor != null ? Riiablo.files.colors.index(invColor) + 1 : 0;
|
||||
|
||||
charColormap = Riiablo.colormaps.get(item.base.Transform);
|
||||
String charColor = ItemUtils.getCharColor(item);
|
||||
charColorIndex = charColor != null ? Riiablo.files.colors.index(charColor) + 1 : 0;
|
||||
|
||||
// TODO: load images of socketed items
|
||||
}
|
||||
|
||||
public boolean checkLoaded() {
|
||||
boolean b = Riiablo.assets.isLoaded(invFileDescriptor);
|
||||
if (b && invFile == null) {
|
||||
invFile = Riiablo.assets.get(invFileDescriptor);
|
||||
resize();
|
||||
}
|
||||
|
||||
return b;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void draw(Batch batch, float a) {
|
||||
if (invFile == null && !checkLoaded()) return;
|
||||
PaletteIndexedBatch b = (PaletteIndexedBatch) batch;
|
||||
boolean ethereal = item.isEthereal();
|
||||
if (ethereal) b.setAlpha(Item.ETHEREAL_ALPHA);
|
||||
if (invColormap != null) b.setColormap(invColormap, invColorIndex);
|
||||
invFile.draw(b, getX(), getY());
|
||||
if (invColormap != null) b.resetColormap();
|
||||
if (ethereal) b.resetColor();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dispose() {
|
||||
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user