parent
8fa0dd927f
commit
e4e908ad75
@ -1,32 +1,57 @@ |
|||||||
package mightypork.rogue.world.item; |
package mightypork.rogue.world.item; |
||||||
|
|
||||||
|
|
||||||
import mightypork.gamecore.util.annot.DefaultImpl; |
import java.io.IOException; |
||||||
import mightypork.gamecore.util.math.constraints.rect.proxy.RectBound; |
|
||||||
|
|
||||||
|
import mightypork.gamecore.util.ion.IonInput; |
||||||
|
import mightypork.gamecore.util.ion.IonOutput; |
||||||
|
|
||||||
public abstract class ItemModel { |
/** |
||||||
|
* Item model (builder) |
||||||
|
* |
||||||
|
* @author MightyPork |
||||||
|
*/ |
||||||
|
public final class ItemModel { |
||||||
|
|
||||||
|
/** Model ID */ |
||||||
public final int id; |
public final int id; |
||||||
|
public final Class<? extends Item> itemClass; |
||||||
|
|
||||||
|
|
||||||
public ItemModel(int id) |
public ItemModel(int id, Class<? extends Item> item) |
||||||
{ |
{ |
||||||
Items.register(id, this); |
Items.register(id, this); |
||||||
this.id = id; |
this.id = id; |
||||||
|
this.itemClass = item; |
||||||
} |
} |
||||||
|
|
||||||
|
|
||||||
/** |
/** |
||||||
* @return new tile with this model |
* @return new item instance of this type |
||||||
*/ |
*/ |
||||||
@DefaultImpl |
public <T extends Item> T createItem() |
||||||
public Item create() |
{ |
||||||
|
try { |
||||||
|
return (T) itemClass.getConstructor(ItemModel.class).newInstance(this); |
||||||
|
} catch (final Exception e) { |
||||||
|
throw new RuntimeException("Could not instantiate an item.", e); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
public Item loadItem(IonInput in) throws IOException |
||||||
{ |
{ |
||||||
return new Item(this); |
final Item t = createItem(); |
||||||
|
t.load(in); |
||||||
|
return t; |
||||||
} |
} |
||||||
|
|
||||||
|
|
||||||
public abstract void render(Item item, RectBound context); |
public void saveItem(IonOutput out, Item tile) throws IOException |
||||||
|
{ |
||||||
|
if (itemClass != tile.getClass()) throw new RuntimeException("Item class mismatch."); |
||||||
|
|
||||||
|
tile.save(out); |
||||||
} |
} |
||||||
|
} |
||||||
|
|
||||||
|
Loading…
Reference in new issue