From 2f26602d159551c764c1ff15dc8a73e18000d257 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Hru=C5=A1ka?= Date: Mon, 21 Apr 2014 17:57:15 +0200 Subject: [PATCH] some changes, nothing much --- fuck.ion | Bin 140 -> 0 bytes .../render/fonts/impl/CachedFont.java | 4 +- .../render/textures/DeferredTexture.java | 2 +- .../gamecore/render/textures/GLTexture.java | 4 +- src/mightypork/rogue/App.java | 2 - src/mightypork/rogue/world/World.java | 12 +-- src/mightypork/rogue/world/item/Item.java | 49 +-------- .../rogue/world/item/ItemModel.java | 14 --- src/mightypork/rogue/world/map/Level.java | 3 +- src/mightypork/rogue/world/map/MapAccess.java | 4 +- .../rogue/world/map/TileRenderContext.java | 2 +- .../rogue/world/structs/ItemStack.java | 19 ---- .../rogue/world/structs/LevelList.java | 19 ---- .../rogue/world/tile/DroppedItemRenderer.java | 45 +++++++++ src/mightypork/rogue/world/tile/Tile.java | 94 +++++++++++------- .../rogue/world/tile/TileModel.java | 28 ++++++ .../world/tile/models/AbstractNullTile.java | 17 ++++ .../rogue/world/tile/models/Floor.java | 5 + .../rogue/world/tile/models/SimpleTile.java | 31 +++++- .../rogue/world/tile/models/Wall.java | 5 + .../constraints/rect/builders/TiledRect.java | 2 +- .../constraints/rect/caching/RectDigest.java | 2 +- .../util/control/timing/Animator.java | 9 +- src/mightypork/util/files/ion/IonBundle.java | 4 +- src/mightypork/util/files/ion/Ionizable.java | 38 ++----- src/mightypork/util/files/ion/Streamable.java | 36 +++++++ ...rrayList.java => StreamableArrayList.java} | 4 +- ...bleHashMap.java => StreamableHashMap.java} | 4 +- ...bleHashSet.java => StreamableHashSet.java} | 4 +- ...hMap.java => StreamableLinkedHashMap.java} | 4 +- ...kedList.java => StreamableLinkedList.java} | 4 +- ...nizableStack.java => StreamableStack.java} | 4 +- ...bleTreeSet.java => StreamableTreeSet.java} | 4 +- 33 files changed, 271 insertions(+), 207 deletions(-) delete mode 100644 fuck.ion delete mode 100644 src/mightypork/rogue/world/structs/ItemStack.java delete mode 100644 src/mightypork/rogue/world/structs/LevelList.java create mode 100644 src/mightypork/rogue/world/tile/DroppedItemRenderer.java create mode 100644 src/mightypork/util/files/ion/Streamable.java rename src/mightypork/util/files/ion/templates/{IonizableArrayList.java => StreamableArrayList.java} (75%) rename src/mightypork/util/files/ion/templates/{IonizableHashMap.java => StreamableHashMap.java} (75%) rename src/mightypork/util/files/ion/templates/{IonizableHashSet.java => StreamableHashSet.java} (75%) rename src/mightypork/util/files/ion/templates/{IonizableLinkedHashMap.java => StreamableLinkedHashMap.java} (73%) rename src/mightypork/util/files/ion/templates/{IonizableLinkedList.java => StreamableLinkedList.java} (75%) rename src/mightypork/util/files/ion/templates/{IonizableStack.java => StreamableStack.java} (76%) rename src/mightypork/util/files/ion/templates/{IonizableTreeSet.java => StreamableTreeSet.java} (76%) diff --git a/fuck.ion b/fuck.ion deleted file mode 100644 index 44b42b221823e172fc3a7f2bf8e2baef8d7ef705..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 140 zcmW-YK?;Ik7zM|)G~Bgn`MdH8Zp8!_qM=53p*lv;Ngd@e@Oa;RKn_H5l2{Ts%SBSj yl!8yzjZ83{aiNo#w%*DTB~Prdu$P2NhkpgkO3V;lVr+LNhSDfVm!i4EHT diff --git a/src/mightypork/gamecore/render/fonts/impl/CachedFont.java b/src/mightypork/gamecore/render/fonts/impl/CachedFont.java index 9fa4e5c..6368899 100644 --- a/src/mightypork/gamecore/render/fonts/impl/CachedFont.java +++ b/src/mightypork/gamecore/render/fonts/impl/CachedFont.java @@ -396,8 +396,8 @@ public class CachedFont implements GLFont { // draw quad - float txmin = chtx.texPosX; - float tymin = chtx.texPosY; + final float txmin = chtx.texPosX; + final float tymin = chtx.texPosY; final float draw_width = minx + chtx.width - minx; final float draw_height = (float) (chtx.height) - (float) 0; diff --git a/src/mightypork/gamecore/render/textures/DeferredTexture.java b/src/mightypork/gamecore/render/textures/DeferredTexture.java index 39b898a..102962c 100644 --- a/src/mightypork/gamecore/render/textures/DeferredTexture.java +++ b/src/mightypork/gamecore/render/textures/DeferredTexture.java @@ -56,7 +56,7 @@ public class DeferredTexture extends DeferredResource implements GLTexture { if (!alphal) { alphal = true; - alpha = backingTexture.hasAlpha(); + alpha = backingTexture.hasAlpha(); } return alpha; diff --git a/src/mightypork/gamecore/render/textures/GLTexture.java b/src/mightypork/gamecore/render/textures/GLTexture.java index 9792d44..270e9d6 100644 --- a/src/mightypork/gamecore/render/textures/GLTexture.java +++ b/src/mightypork/gamecore/render/textures/GLTexture.java @@ -83,8 +83,8 @@ public interface GLTexture extends Destroyable { * Bind to GL context, applying the filters prescribed. */ void bind(); - - + + /** * @return true if the image is RGBA */ diff --git a/src/mightypork/rogue/App.java b/src/mightypork/rogue/App.java index ece7616..14e5ba2 100644 --- a/src/mightypork/rogue/App.java +++ b/src/mightypork/rogue/App.java @@ -27,7 +27,6 @@ import mightypork.rogue.world.World; import mightypork.rogue.world.WorldPos; import mightypork.rogue.world.item.Item; import mightypork.rogue.world.map.Level; -import mightypork.rogue.world.structs.LevelList; import mightypork.rogue.world.tile.Tile; import mightypork.util.control.eventbus.EventBus; import mightypork.util.control.eventbus.events.Event; @@ -112,7 +111,6 @@ public final class App extends BaseApp { { Ion.registerIonizable(Item.ION_MARK, Item.class); Ion.registerIonizable(Level.ION_MARK, Level.class); - Ion.registerIonizable(LevelList.ION_MARK, LevelList.class); Ion.registerIonizable(PlayerInfo.ION_MARK, PlayerInfo.class); Ion.registerIonizable(Tile.ION_MARK, Tile.class); Ion.registerIonizable(World.ION_MARK, World.class); diff --git a/src/mightypork/rogue/world/World.java b/src/mightypork/rogue/world/World.java index 70688c2..5890968 100644 --- a/src/mightypork/rogue/world/World.java +++ b/src/mightypork/rogue/world/World.java @@ -9,23 +9,22 @@ import java.util.Set; import mightypork.rogue.world.map.Level; import mightypork.rogue.world.map.TileRenderContext; -import mightypork.rogue.world.structs.LevelList; import mightypork.util.constraints.rect.Rect; import mightypork.util.constraints.rect.RectConst; import mightypork.util.constraints.rect.proxy.RectBound; import mightypork.util.constraints.vect.VectConst; import mightypork.util.control.timing.Updateable; -import mightypork.util.error.CorruptedDataException; import mightypork.util.files.ion.Ion; import mightypork.util.files.ion.IonBundle; import mightypork.util.files.ion.Ionizable; +import mightypork.util.files.ion.templates.StreamableArrayList; public class World implements Ionizable, Updateable { public static final short ION_MARK = 706; - private LevelList levels = new LevelList(); + private StreamableArrayList levels = new StreamableArrayList<>(); private PlayerInfo player = new PlayerInfo(); @@ -42,12 +41,8 @@ public class World implements Ionizable, Updateable { final IonBundle ib = (IonBundle) Ion.readObject(in); player = ib.get("player", player); seed = ib.get("seed", seed); - levels = ib.get("levels", levels); - // levels Ion.readSequence(in, levels); - - if (player == null) throw new CorruptedDataException("Null player in world."); } @@ -57,8 +52,9 @@ public class World implements Ionizable, Updateable { final IonBundle ib = new IonBundle(); ib.put("player", player); ib.put("seed", seed); - ib.put("levels", levels); Ion.writeObject(out, ib); + + Ion.writeSequence(out, levels); } diff --git a/src/mightypork/rogue/world/item/Item.java b/src/mightypork/rogue/world/item/Item.java index 2d19e11..28c084d 100644 --- a/src/mightypork/rogue/world/item/Item.java +++ b/src/mightypork/rogue/world/item/Item.java @@ -5,31 +5,20 @@ import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; -import mightypork.rogue.world.map.TileRenderContext; import mightypork.util.constraints.rect.proxy.RectBound; -import mightypork.util.control.timing.Animator; -import mightypork.util.control.timing.AnimatorBounce; -import mightypork.util.control.timing.Updateable; import mightypork.util.files.ion.Ion; -import mightypork.util.files.ion.IonBundle; import mightypork.util.files.ion.IonConstructor; import mightypork.util.files.ion.Ionizable; -import mightypork.util.math.Easing; -public class Item implements Updateable, Ionizable { +public class Item implements Ionizable { public static final short ION_MARK = 701; private transient ItemModel model; - public transient Object modelData; - public transient Animator anim; public int id; - public boolean[] flags; - public int[] numbers; - public Item(int id) { @@ -47,7 +36,6 @@ public class Item implements Updateable, Ionizable { { this.model = model; this.id = model.id; - this.anim = new AnimatorBounce(2, Easing.SINE_BOTH); } @@ -60,28 +48,17 @@ public class Item implements Updateable, Ionizable { @Override public void save(OutputStream out) throws IOException { - final IonBundle ib = new IonBundle(); - - ib.put("id", id); - ib.put("flags", flags); - ib.put("numbers", numbers); - - Ion.writeObject(out, ib); + Ion.writeShort(out, (short) id); } @Override public void load(InputStream in) throws IOException { - final IonBundle ib = (IonBundle) Ion.readObject(in); - - id = ib.get("id", 0); - flags = ib.get("flags", null); - numbers = ib.get("numbers", null); + id = Ion.readShort(in); - if (id != model.id) { - model = Items.get(id); - } + // if id changed, get new model + if (model == null || id != model.id) model = Items.get(id); } @@ -91,20 +68,4 @@ public class Item implements Updateable, Ionizable { return ION_MARK; } - - @Override - public void update(double delta) - { - if (anim != null) { - anim.update(delta); - - } - } - - - public void renderOnTile(TileRenderContext context) - { - model.renderOnTile(this, context); - } - } diff --git a/src/mightypork/rogue/world/item/ItemModel.java b/src/mightypork/rogue/world/item/ItemModel.java index 922bd75..8aa90a3 100644 --- a/src/mightypork/rogue/world/item/ItemModel.java +++ b/src/mightypork/rogue/world/item/ItemModel.java @@ -13,11 +13,6 @@ public abstract class ItemModel { public final int id; - private final RectBoundAdapter tileRect = new RectBoundAdapter(); - private final NumBoundAdapter yOffset = new NumBoundAdapter(); - - private final Rect itemRect = tileRect.shrink(tileRect.height().perc(10)).moveY(yOffset.neg()); - public ItemModel(int id) { @@ -38,13 +33,4 @@ public abstract class ItemModel { public abstract void render(Item item, RectBound context); - - public void renderOnTile(Item item, TileRenderContext context) - { - tileRect.setRect(context.getRect()); - yOffset.setNum(item.anim); - - render(item, itemRect); - } - } diff --git a/src/mightypork/rogue/world/map/Level.java b/src/mightypork/rogue/world/map/Level.java index 80b6666..777b90a 100644 --- a/src/mightypork/rogue/world/map/Level.java +++ b/src/mightypork/rogue/world/map/Level.java @@ -32,7 +32,7 @@ public class Level implements MapAccess, Ionizable { /** Level seed (used for generation and tile variation) */ public long seed; - + private NoiseGen noiseGen; @@ -193,6 +193,7 @@ public class Level implements MapAccess, Ionizable { } } + @Override public NoiseGen getNoiseGen() { diff --git a/src/mightypork/rogue/world/map/MapAccess.java b/src/mightypork/rogue/world/map/MapAccess.java index aa4f3b6..6e11a04 100644 --- a/src/mightypork/rogue/world/map/MapAccess.java +++ b/src/mightypork/rogue/world/map/MapAccess.java @@ -38,8 +38,8 @@ public interface MapAccess { * @return map seed */ long getSeed(); - - + + /** * @return level-specific noise generator */ diff --git a/src/mightypork/rogue/world/map/TileRenderContext.java b/src/mightypork/rogue/world/map/TileRenderContext.java index eca6b92..c2be8b0 100644 --- a/src/mightypork/rogue/world/map/TileRenderContext.java +++ b/src/mightypork/rogue/world/map/TileRenderContext.java @@ -28,7 +28,7 @@ public final class TileRenderContext implements RectBound { this.map = map; this.tiler = drawArea.tiles(map.getWidth(), map.getHeight()); - this.tiler.setOverlap(0.001); + this.tiler.setOverlap(0.001); // avoid gaps (rounding error?) this.noise = map.getNoiseGen(); } diff --git a/src/mightypork/rogue/world/structs/ItemStack.java b/src/mightypork/rogue/world/structs/ItemStack.java deleted file mode 100644 index bde85cf..0000000 --- a/src/mightypork/rogue/world/structs/ItemStack.java +++ /dev/null @@ -1,19 +0,0 @@ -package mightypork.rogue.world.structs; - - -import mightypork.rogue.world.item.Item; -import mightypork.util.files.ion.templates.IonizableStack; - - -public class ItemStack extends IonizableStack { - - private static final short ION_MARK = 710; - - - @Override - public short getIonMark() - { - return ION_MARK; - } - -} diff --git a/src/mightypork/rogue/world/structs/LevelList.java b/src/mightypork/rogue/world/structs/LevelList.java deleted file mode 100644 index 4f8012d..0000000 --- a/src/mightypork/rogue/world/structs/LevelList.java +++ /dev/null @@ -1,19 +0,0 @@ -package mightypork.rogue.world.structs; - - -import mightypork.rogue.world.map.Level; -import mightypork.util.files.ion.templates.IonizableArrayList; - - -public class LevelList extends IonizableArrayList { - - public static final short ION_MARK = 709; - - - @Override - public short getIonMark() - { - return ION_MARK; - } - -} diff --git a/src/mightypork/rogue/world/tile/DroppedItemRenderer.java b/src/mightypork/rogue/world/tile/DroppedItemRenderer.java new file mode 100644 index 0000000..5f9c9bb --- /dev/null +++ b/src/mightypork/rogue/world/tile/DroppedItemRenderer.java @@ -0,0 +1,45 @@ +package mightypork.rogue.world.tile; + + +import mightypork.rogue.world.item.Item; +import mightypork.rogue.world.map.TileRenderContext; +import mightypork.util.constraints.rect.Rect; +import mightypork.util.constraints.rect.proxy.RectBoundAdapter; +import mightypork.util.control.timing.Animator; +import mightypork.util.control.timing.AnimatorBounce; +import mightypork.util.control.timing.Updateable; +import mightypork.util.math.Easing; + + +public class DroppedItemRenderer implements Updateable { + + private Animator itemAnim = new AnimatorBounce(2, Easing.SINE_BOTH); + + // prepared constraints, to avoid re-building each frame + private final RectBoundAdapter tileRectAdapter = new RectBoundAdapter(); + private final Rect itemRect = tileRectAdapter.shrink(tileRectAdapter.height().perc(10)).moveY(itemAnim.neg()); + + + public Animator getItemAnim() + { + if (itemAnim == null) { + itemAnim = new AnimatorBounce(2, Easing.SINE_BOTH); + } + + return itemAnim; + } + + + public void render(Item item, TileRenderContext context) + { + tileRectAdapter.setRect(context); + item.render(itemRect); + } + + + @Override + public void update(double delta) + { + itemAnim.update(delta); + } +} diff --git a/src/mightypork/rogue/world/tile/Tile.java b/src/mightypork/rogue/world/tile/Tile.java index baa7491..b4f6855 100644 --- a/src/mightypork/rogue/world/tile/Tile.java +++ b/src/mightypork/rogue/world/tile/Tile.java @@ -4,14 +4,17 @@ package mightypork.rogue.world.tile; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; +import java.util.Stack; +import mightypork.rogue.world.item.Item; import mightypork.rogue.world.map.TileRenderContext; -import mightypork.rogue.world.structs.ItemStack; import mightypork.util.control.timing.Animator; import mightypork.util.control.timing.Updateable; import mightypork.util.files.ion.Ion; +import mightypork.util.files.ion.IonBundle; import mightypork.util.files.ion.IonConstructor; import mightypork.util.files.ion.Ionizable; +import mightypork.util.files.ion.Streamable; public final class Tile implements Ionizable, Updateable { @@ -19,15 +22,19 @@ public final class Tile implements Ionizable, Updateable { public static final short ION_MARK = 700; private transient TileModel model; + + /** + * Temporary storage for the model (unlocked door state, lever switched etc) + */ public transient Object modelData; - public transient Animator anim; - public int id; + /** Animator field for the model to use, if needed */ + public transient Animator anim; - public ItemStack items = new ItemStack(); + private transient DroppedItemRenderer itemRenderer; // lazy - public boolean[] flags; - public int[] numbers; + public int id; + private final Stack items = new Stack<>(); public Tile(int id) @@ -36,16 +43,16 @@ public final class Tile implements Ionizable, Updateable { } - @IonConstructor - public Tile() + public Tile(TileModel model) { + this.model = model; + this.id = model.id; } - public Tile(TileModel model) + @IonConstructor + public Tile() { - this.model = model; - this.id = model.id; } @@ -54,7 +61,7 @@ public final class Tile implements Ionizable, Updateable { model.render(context); if (!items.isEmpty()) { - items.peek().renderOnTile(context); + getItemRenderer().render(items.peek(), context); } } @@ -64,17 +71,15 @@ public final class Tile implements Ionizable, Updateable { { if (model.isNullTile()) throw new RuntimeException("Cannot save null tile."); - Ion.writeShort(out, (short) id); - - byte written = 0; - if (flags != null) written |= 1; - if (numbers != null) written |= 2; - if (items != null && !items.isEmpty()) written |= 4; - Ion.writeByte(out, written); + Ion.writeShort(out, (short) id); // tile ID + Ion.writeSequence(out, items); // if empty, writes single END mark - if ((written & 1) != 0) Ion.writeBooleanArray(out, flags); - if ((written & 2) != 0) Ion.writeIntArray(out, numbers); - if ((written & 4) != 0) Ion.writeObject(out, items); + // models with metadata can save their stuff + if (model.hasMetadata()) { + IonBundle ib = new IonBundle(); + model.saveMetadata(this, ib); + Ion.writeObject(out, ib); + } } @@ -83,33 +88,38 @@ public final class Tile implements Ionizable, Updateable { { id = Ion.readShort(in); - final byte written = Ion.readByte(in); - - if ((written & 1) != 0) flags = Ion.readBooleanArray(in); - if ((written & 2) != 0) numbers = Ion.readIntArray(in); - if ((written & 4) != 0) items = (ItemStack) Ion.readObject(in); - - // renew model + // check if model is changed (can happen) if (model == null || id != model.id) { model = Tiles.get(id); } + + Ion.readSequence(in, items); // if END is found, nothing is read. + + // load model's stuff + if (model.hasMetadata()) { + IonBundle ib = (IonBundle) Ion.readObject(in); + model.loadMetadata(this, ib); + } } @Override - public short getIonMark() + public void update(double delta) { - return ION_MARK; + model.update(this, delta); + if (!items.isEmpty()) { + getItemRenderer().update(delta); + } } - @Override - public void update(double delta) + private DroppedItemRenderer getItemRenderer() { - model.update(this, delta); - if (!items.isEmpty()) { - items.peek().update(delta); + if (itemRenderer == null) { + itemRenderer = new DroppedItemRenderer(); } + + return itemRenderer; } @@ -118,4 +128,16 @@ public final class Tile implements Ionizable, Updateable { return model; } + + public boolean hasItems() + { + return !items.isEmpty(); + } + + + @Override + public short getIonMark() + { + return ION_MARK; + } } diff --git a/src/mightypork/rogue/world/tile/TileModel.java b/src/mightypork/rogue/world/tile/TileModel.java index 2377d1d..fe4889d 100644 --- a/src/mightypork/rogue/world/tile/TileModel.java +++ b/src/mightypork/rogue/world/tile/TileModel.java @@ -3,6 +3,7 @@ package mightypork.rogue.world.tile; import mightypork.rogue.world.map.TileRenderContext; import mightypork.util.annotations.DefaultImpl; +import mightypork.util.files.ion.IonBundle; /** @@ -76,4 +77,31 @@ public abstract class TileModel { */ public abstract void update(Tile tile, double delta); + + /** + * Store tile metadata (door lock state etc) + * + * @param tile stored tile + * @param ib written data bundle + */ + public abstract void saveMetadata(Tile tile, IonBundle ib); + + + /** + * Load from an IonBundle. The bundle is guaranteed to not be null, but + * could be empty. + * + * @param tile loaded tile + * @param ib item data bundle + */ + public abstract void loadMetadata(Tile tile, IonBundle ib); + + + /** + * True if this tile's data should be saved/loaded.
+ * Must be a constant value. + * + * @return has data + */ + public abstract boolean hasMetadata(); } diff --git a/src/mightypork/rogue/world/tile/models/AbstractNullTile.java b/src/mightypork/rogue/world/tile/models/AbstractNullTile.java index 4e4e5a3..aee829f 100644 --- a/src/mightypork/rogue/world/tile/models/AbstractNullTile.java +++ b/src/mightypork/rogue/world/tile/models/AbstractNullTile.java @@ -4,6 +4,7 @@ package mightypork.rogue.world.tile.models; import mightypork.rogue.world.map.TileRenderContext; import mightypork.rogue.world.tile.Tile; import mightypork.rogue.world.tile.TileModel; +import mightypork.util.files.ion.IonBundle; /** @@ -58,4 +59,20 @@ public abstract class AbstractNullTile extends TileModel { return inst; } + @Override + public boolean hasMetadata() + { + return false; + } + + @Override + public void loadMetadata(Tile tile, IonBundle ib) + { + } + + @Override + public void saveMetadata(Tile tile, IonBundle ib) + { + } + } diff --git a/src/mightypork/rogue/world/tile/models/Floor.java b/src/mightypork/rogue/world/tile/models/Floor.java index c975969..ea16196 100644 --- a/src/mightypork/rogue/world/tile/models/Floor.java +++ b/src/mightypork/rogue/world/tile/models/Floor.java @@ -1,6 +1,11 @@ package mightypork.rogue.world.tile.models; +/** + * Template for floor tiles with no metadata + * + * @author MightyPork + */ public class Floor extends SimpleTile { public Floor(int id, String sheetKey) diff --git a/src/mightypork/rogue/world/tile/models/SimpleTile.java b/src/mightypork/rogue/world/tile/models/SimpleTile.java index 9227d35..ff82a93 100644 --- a/src/mightypork/rogue/world/tile/models/SimpleTile.java +++ b/src/mightypork/rogue/world/tile/models/SimpleTile.java @@ -8,8 +8,14 @@ import mightypork.rogue.world.map.TileRenderContext; import mightypork.rogue.world.tile.Tile; import mightypork.rogue.world.tile.TileModel; import mightypork.util.annotations.DefaultImpl; +import mightypork.util.files.ion.IonBundle; +/** + * Basic implementation of a tile with coord-random texture and no animation. + * + * @author MightyPork + */ public abstract class SimpleTile extends TileModel { protected final TxSheet sheet; @@ -36,8 +42,10 @@ public abstract class SimpleTile extends TileModel { } + /* + * Items can override this if their walkability changes based on something + */ @Override - @DefaultImpl public boolean isWalkable(Tile tile) { return isPotentiallyWalkable(); @@ -47,4 +55,25 @@ public abstract class SimpleTile extends TileModel { @Override public abstract boolean isPotentiallyWalkable(); + + @Override + @DefaultImpl + public boolean hasMetadata() + { + return false; // it's a SIMPLE tile + } + + + @Override + @DefaultImpl + public void loadMetadata(Tile tile, IonBundle ib) + { + } + + + @Override + @DefaultImpl + public void saveMetadata(Tile tile, IonBundle ib) + { + } } diff --git a/src/mightypork/rogue/world/tile/models/Wall.java b/src/mightypork/rogue/world/tile/models/Wall.java index 3efd6d4..d9348a9 100644 --- a/src/mightypork/rogue/world/tile/models/Wall.java +++ b/src/mightypork/rogue/world/tile/models/Wall.java @@ -1,6 +1,11 @@ package mightypork.rogue.world.tile.models; +/** + * Template for wall tiles with no metadata + * + * @author MightyPork + */ public class Wall extends SimpleTile { public Wall(int id, String sheetKey) diff --git a/src/mightypork/util/constraints/rect/builders/TiledRect.java b/src/mightypork/util/constraints/rect/builders/TiledRect.java index de8a200..b837aa7 100644 --- a/src/mightypork/util/constraints/rect/builders/TiledRect.java +++ b/src/mightypork/util/constraints/rect/builders/TiledRect.java @@ -97,7 +97,7 @@ public class TiledRect extends RectProxy { Log.w("Y coordinate(s) out of range.", new IllegalAccessException()); } - Vect orig = origin().add(perCol.mul(x), perRow.mul(y)); + final Vect orig = origin().add(perCol.mul(x), perRow.mul(y)); return Rect.make(orig, perCol.mul(size_x), perRow.mul(size_y)); } diff --git a/src/mightypork/util/constraints/rect/caching/RectDigest.java b/src/mightypork/util/constraints/rect/caching/RectDigest.java index 6c6065c..69e29be 100644 --- a/src/mightypork/util/constraints/rect/caching/RectDigest.java +++ b/src/mightypork/util/constraints/rect/caching/RectDigest.java @@ -18,7 +18,7 @@ public class RectDigest { public RectDigest(Rect rect) - { + { this.x = rect.origin().x(); this.y = rect.origin().y(); diff --git a/src/mightypork/util/control/timing/Animator.java b/src/mightypork/util/control/timing/Animator.java index 765304f..7b3eeaa 100644 --- a/src/mightypork/util/control/timing/Animator.java +++ b/src/mightypork/util/control/timing/Animator.java @@ -4,11 +4,10 @@ package mightypork.util.control.timing; import mightypork.util.annotations.DefaultImpl; import mightypork.util.constraints.num.Num; import mightypork.util.constraints.num.mutable.NumAnimated; -import mightypork.util.constraints.num.proxy.NumBound; import mightypork.util.math.Easing; -public abstract class Animator implements Updateable, Pauseable, NumBound { +public abstract class Animator extends Num implements Updateable, Pauseable { private final NumAnimated animator; private final Num num; @@ -81,12 +80,6 @@ public abstract class Animator implements Updateable, Pauseable, NumBound { @Override - public final Num getNum() - { - return num; - } - - public final double value() { return num.value(); diff --git a/src/mightypork/util/files/ion/IonBundle.java b/src/mightypork/util/files/ion/IonBundle.java index 5fca8e0..be7525f 100644 --- a/src/mightypork/util/files/ion/IonBundle.java +++ b/src/mightypork/util/files/ion/IonBundle.java @@ -1,7 +1,7 @@ package mightypork.util.files.ion; -import mightypork.util.files.ion.templates.IonizableHashMap; +import mightypork.util.files.ion.templates.StreamableHashMap; /** @@ -16,7 +16,7 @@ import mightypork.util.files.ion.templates.IonizableHashMap; * * @author MightyPork */ -public class IonBundle extends IonizableHashMap { +public class IonBundle extends StreamableHashMap implements Ionizable { /** * Get an object. If not found, fallback is returned. diff --git a/src/mightypork/util/files/ion/Ionizable.java b/src/mightypork/util/files/ion/Ionizable.java index d299012..bc423cc 100644 --- a/src/mightypork/util/files/ion/Ionizable.java +++ b/src/mightypork/util/files/ion/Ionizable.java @@ -1,39 +1,19 @@ package mightypork.util.files.ion; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; - - /** - * Object that can be saved to and loaded from Ion file.
- * All classes implementing Ionizable must be registered to {@link Ion} using - * Ion.registerIonizable(obj.class). + *

+ * Data object that can be reconstructed by Ion based on it's mark. Such object + * MUST provide an implicit constructor. + *

+ *

+ * All {@link Ionizable}s must be registered to {@link Ion}, otherwise they + * can't be written/loaded using the mark. + *

* * @author MightyPork */ -public interface Ionizable { - - /** - * Load data from the input stream. Mark has already been read, begin - * reading right after it. - * - * @param in input stream - * @throws IOException - */ - void load(InputStream in) throws IOException; - - - /** - * Store data to output stream. Mark has already been written, begin right - * after it. - * - * @param out Output stream - * @throws IOException - */ - void save(OutputStream out) throws IOException; - +public interface Ionizable extends Streamable { /** * Get Ion mark byte. diff --git a/src/mightypork/util/files/ion/Streamable.java b/src/mightypork/util/files/ion/Streamable.java new file mode 100644 index 0000000..c4d473d --- /dev/null +++ b/src/mightypork/util/files/ion/Streamable.java @@ -0,0 +1,36 @@ +package mightypork.util.files.ion; + + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; + + +/** + * + * Saveable to a stream. + * + * + * @author MightyPork + */ +public interface Streamable { + + /** + * Load data from the input stream. Must be compatible with the + * save method. + * + * @param in input stream + * @throws IOException + */ + void load(InputStream in) throws IOException; + + + /** + * Store data to output stream. + * + * @param out Output stream + * @throws IOException + */ + void save(OutputStream out) throws IOException; + +} diff --git a/src/mightypork/util/files/ion/templates/IonizableArrayList.java b/src/mightypork/util/files/ion/templates/StreamableArrayList.java similarity index 75% rename from src/mightypork/util/files/ion/templates/IonizableArrayList.java rename to src/mightypork/util/files/ion/templates/StreamableArrayList.java index 8f04952..c202667 100644 --- a/src/mightypork/util/files/ion/templates/IonizableArrayList.java +++ b/src/mightypork/util/files/ion/templates/StreamableArrayList.java @@ -7,10 +7,10 @@ import java.io.OutputStream; import java.util.ArrayList; import mightypork.util.files.ion.Ion; -import mightypork.util.files.ion.Ionizable; +import mightypork.util.files.ion.Streamable; -public abstract class IonizableArrayList extends ArrayList implements Ionizable { +public class StreamableArrayList extends ArrayList implements Streamable { @Override public void load(InputStream in) throws IOException diff --git a/src/mightypork/util/files/ion/templates/IonizableHashMap.java b/src/mightypork/util/files/ion/templates/StreamableHashMap.java similarity index 75% rename from src/mightypork/util/files/ion/templates/IonizableHashMap.java rename to src/mightypork/util/files/ion/templates/StreamableHashMap.java index 5326857..4e8d394 100644 --- a/src/mightypork/util/files/ion/templates/IonizableHashMap.java +++ b/src/mightypork/util/files/ion/templates/StreamableHashMap.java @@ -7,10 +7,10 @@ import java.io.OutputStream; import java.util.HashMap; import mightypork.util.files.ion.Ion; -import mightypork.util.files.ion.Ionizable; +import mightypork.util.files.ion.Streamable; -public abstract class IonizableHashMap extends HashMap implements Ionizable { +public class StreamableHashMap extends HashMap implements Streamable { @Override public void load(InputStream in) throws IOException diff --git a/src/mightypork/util/files/ion/templates/IonizableHashSet.java b/src/mightypork/util/files/ion/templates/StreamableHashSet.java similarity index 75% rename from src/mightypork/util/files/ion/templates/IonizableHashSet.java rename to src/mightypork/util/files/ion/templates/StreamableHashSet.java index 73979cf..c0cacd0 100644 --- a/src/mightypork/util/files/ion/templates/IonizableHashSet.java +++ b/src/mightypork/util/files/ion/templates/StreamableHashSet.java @@ -7,10 +7,10 @@ import java.io.OutputStream; import java.util.HashSet; import mightypork.util.files.ion.Ion; -import mightypork.util.files.ion.Ionizable; +import mightypork.util.files.ion.Streamable; -public abstract class IonizableHashSet extends HashSet implements Ionizable { +public abstract class StreamableHashSet extends HashSet implements Streamable { @Override public void load(InputStream in) throws IOException diff --git a/src/mightypork/util/files/ion/templates/IonizableLinkedHashMap.java b/src/mightypork/util/files/ion/templates/StreamableLinkedHashMap.java similarity index 73% rename from src/mightypork/util/files/ion/templates/IonizableLinkedHashMap.java rename to src/mightypork/util/files/ion/templates/StreamableLinkedHashMap.java index 8d10803..8983131 100644 --- a/src/mightypork/util/files/ion/templates/IonizableLinkedHashMap.java +++ b/src/mightypork/util/files/ion/templates/StreamableLinkedHashMap.java @@ -7,10 +7,10 @@ import java.io.OutputStream; import java.util.LinkedHashMap; import mightypork.util.files.ion.Ion; -import mightypork.util.files.ion.Ionizable; +import mightypork.util.files.ion.Streamable; -public abstract class IonizableLinkedHashMap extends LinkedHashMap implements Ionizable { +public class StreamableLinkedHashMap extends LinkedHashMap implements Streamable { @Override public void load(InputStream in) throws IOException diff --git a/src/mightypork/util/files/ion/templates/IonizableLinkedList.java b/src/mightypork/util/files/ion/templates/StreamableLinkedList.java similarity index 75% rename from src/mightypork/util/files/ion/templates/IonizableLinkedList.java rename to src/mightypork/util/files/ion/templates/StreamableLinkedList.java index 1d90e02..5f92bbd 100644 --- a/src/mightypork/util/files/ion/templates/IonizableLinkedList.java +++ b/src/mightypork/util/files/ion/templates/StreamableLinkedList.java @@ -7,10 +7,10 @@ import java.io.OutputStream; import java.util.LinkedList; import mightypork.util.files.ion.Ion; -import mightypork.util.files.ion.Ionizable; +import mightypork.util.files.ion.Streamable; -public abstract class IonizableLinkedList extends LinkedList implements Ionizable { +public class StreamableLinkedList extends LinkedList implements Streamable { @Override public void load(InputStream in) throws IOException diff --git a/src/mightypork/util/files/ion/templates/IonizableStack.java b/src/mightypork/util/files/ion/templates/StreamableStack.java similarity index 76% rename from src/mightypork/util/files/ion/templates/IonizableStack.java rename to src/mightypork/util/files/ion/templates/StreamableStack.java index 60c0098..ccdac67 100644 --- a/src/mightypork/util/files/ion/templates/IonizableStack.java +++ b/src/mightypork/util/files/ion/templates/StreamableStack.java @@ -7,10 +7,10 @@ import java.io.OutputStream; import java.util.Stack; import mightypork.util.files.ion.Ion; -import mightypork.util.files.ion.Ionizable; +import mightypork.util.files.ion.Streamable; -public abstract class IonizableStack extends Stack implements Ionizable { +public class StreamableStack extends Stack implements Streamable { @Override public void load(InputStream in) throws IOException diff --git a/src/mightypork/util/files/ion/templates/IonizableTreeSet.java b/src/mightypork/util/files/ion/templates/StreamableTreeSet.java similarity index 76% rename from src/mightypork/util/files/ion/templates/IonizableTreeSet.java rename to src/mightypork/util/files/ion/templates/StreamableTreeSet.java index ccc714e..b7e1cf6 100644 --- a/src/mightypork/util/files/ion/templates/IonizableTreeSet.java +++ b/src/mightypork/util/files/ion/templates/StreamableTreeSet.java @@ -7,10 +7,10 @@ import java.io.OutputStream; import java.util.TreeSet; import mightypork.util.files.ion.Ion; -import mightypork.util.files.ion.Ionizable; +import mightypork.util.files.ion.Streamable; -public abstract class IonizableTreeSet extends TreeSet implements Ionizable { +public class StreamableTreeSet extends TreeSet implements Streamable { @Override public void load(InputStream in) throws IOException