parent
							
								
									b2cf0d14a0
								
							
						
					
					
						commit
						e83047ff38
					
				@ -0,0 +1,89 @@ | 
				
			|||||||
 | 
					package mightypork.rogue.world; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.io.IOException; | 
				
			||||||
 | 
					import java.io.InputStream; | 
				
			||||||
 | 
					import java.io.OutputStream; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import mightypork.util.constraints.rect.proxy.RectBound; | 
				
			||||||
 | 
					import mightypork.util.control.timing.Updateable; | 
				
			||||||
 | 
					import mightypork.util.files.ion.BinaryUtils; | 
				
			||||||
 | 
					import mightypork.util.files.ion.Ionizable; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class ItemData implements Ionizable, Updateable { | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						public static final short ION_MARK = 701; | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						private Model<ItemData, RectBound> model; | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						// data fields for models to use
 | 
				
			||||||
 | 
						public Object data; | 
				
			||||||
 | 
						public boolean[] flags; | 
				
			||||||
 | 
						public int[] ints; | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * Create from model id | 
				
			||||||
 | 
						 *  | 
				
			||||||
 | 
						 * @param id model id | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						public ItemData(int id) { | 
				
			||||||
 | 
							this(Items.get(id)); | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * Create from model | 
				
			||||||
 | 
						 *  | 
				
			||||||
 | 
						 * @param model model | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						public ItemData(Model<ItemData, RectBound> model) { | 
				
			||||||
 | 
							this.model = model; | 
				
			||||||
 | 
							model.create(this); | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * Create without model. Model will be read from ION input stream. | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						public ItemData() { | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						@Override | 
				
			||||||
 | 
						public void loadFrom(InputStream in) throws IOException | 
				
			||||||
 | 
						{ | 
				
			||||||
 | 
							final int id = BinaryUtils.readInt(in); | 
				
			||||||
 | 
							model = Items.get(id); | 
				
			||||||
 | 
							model.load(this, in); | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						@Override | 
				
			||||||
 | 
						public void saveTo(OutputStream out) throws IOException | 
				
			||||||
 | 
						{ | 
				
			||||||
 | 
							BinaryUtils.writeInt(out, model.getId()); | 
				
			||||||
 | 
							model.save(this, out); | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						@Override | 
				
			||||||
 | 
						public short getIonMark() | 
				
			||||||
 | 
						{ | 
				
			||||||
 | 
							return ION_MARK; | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						public void render(RectBound context) | 
				
			||||||
 | 
						{ | 
				
			||||||
 | 
							model.render(this, context); | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						@Override | 
				
			||||||
 | 
						public void update(double delta) | 
				
			||||||
 | 
						{ | 
				
			||||||
 | 
							model.update(this, delta); | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					} | 
				
			||||||
@ -0,0 +1,84 @@ | 
				
			|||||||
 | 
					package mightypork.rogue.world; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.io.InputStream; | 
				
			||||||
 | 
					import java.io.OutputStream; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import mightypork.util.annotations.DefaultImpl; | 
				
			||||||
 | 
					import mightypork.util.constraints.rect.proxy.RectBound; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** | 
				
			||||||
 | 
					 * An item model | 
				
			||||||
 | 
					 *  | 
				
			||||||
 | 
					 * @author MightyPork | 
				
			||||||
 | 
					 */ | 
				
			||||||
 | 
					public abstract class ItemModel implements Model<ItemData, RectBound> { | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						public final int id; | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						public ItemModel(int id) { | 
				
			||||||
 | 
							this.id = id; | 
				
			||||||
 | 
							Items.register(id, this); | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						@Override | 
				
			||||||
 | 
						public final int getId() | 
				
			||||||
 | 
						{ | 
				
			||||||
 | 
							return id; | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						@Override | 
				
			||||||
 | 
						@DefaultImpl | 
				
			||||||
 | 
						public void create(ItemData item) | 
				
			||||||
 | 
						{ | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * On search performed (reveal hidden door etc) | 
				
			||||||
 | 
						 *  | 
				
			||||||
 | 
						 * @param item item in world | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						@DefaultImpl | 
				
			||||||
 | 
						public void search(TileData item) | 
				
			||||||
 | 
						{ | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * Check if an entity can walk this item. If the item is not potentially | 
				
			||||||
 | 
						 * walkable, then this method must always return false. | 
				
			||||||
 | 
						 *  | 
				
			||||||
 | 
						 * @param item item in world | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						public abstract void isWalkable(TileData item); | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						@Override | 
				
			||||||
 | 
						@DefaultImpl | 
				
			||||||
 | 
						public void load(ItemData item, InputStream in) | 
				
			||||||
 | 
						{ | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						@Override | 
				
			||||||
 | 
						@DefaultImpl | 
				
			||||||
 | 
						public void save(ItemData item, OutputStream out) | 
				
			||||||
 | 
						{ | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						@Override | 
				
			||||||
 | 
						public abstract void render(ItemData item, RectBound context); | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						@Override | 
				
			||||||
 | 
						@DefaultImpl | 
				
			||||||
 | 
						public void update(ItemData item, double delta) | 
				
			||||||
 | 
						{ | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					} | 
				
			||||||
@ -0,0 +1,26 @@ | 
				
			|||||||
 | 
					package mightypork.rogue.world; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.util.HashMap; | 
				
			||||||
 | 
					import java.util.Map; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class Items { | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						private static final Map<Integer, ItemModel> registered = new HashMap<>(); | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						public static void register(int id, ItemModel model) | 
				
			||||||
 | 
						{ | 
				
			||||||
 | 
							if (registered.containsKey(id)) throw new IllegalArgumentException("Item ID " + id + " already in use."); | 
				
			||||||
 | 
							registered.put(id, model); | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						public static ItemModel get(int id) | 
				
			||||||
 | 
						{ | 
				
			||||||
 | 
							final ItemModel m = registered.get(id); | 
				
			||||||
 | 
							if (m == null) throw new IllegalArgumentException("No item with ID " + id + "."); | 
				
			||||||
 | 
							return m; | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					} | 
				
			||||||
@ -0,0 +1,63 @@ | 
				
			|||||||
 | 
					package mightypork.rogue.world; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.io.InputStream; | 
				
			||||||
 | 
					import java.io.OutputStream; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import mightypork.util.constraints.rect.proxy.RectBound; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public interface Model<DATA, RCTX> { | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * Get the id. | 
				
			||||||
 | 
						 *  | 
				
			||||||
 | 
						 * @return id | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						int getId(); | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * Populate an entity with data for this model | 
				
			||||||
 | 
						 *  | 
				
			||||||
 | 
						 * @param entity entity in world | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						void create(DATA entity); | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * Load entity data from a binary stream. | 
				
			||||||
 | 
						 *  | 
				
			||||||
 | 
						 * @param entity item to load | 
				
			||||||
 | 
						 * @param in input stream | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						void load(DATA entity, InputStream in); | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * Save entity data to a binary stream. | 
				
			||||||
 | 
						 *  | 
				
			||||||
 | 
						 * @param entity entity to save | 
				
			||||||
 | 
						 * @param out output stream | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						void save(DATA entity, OutputStream out); | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * Render according to given context. | 
				
			||||||
 | 
						 *  | 
				
			||||||
 | 
						 * @param entity data object | 
				
			||||||
 | 
						 * @param context rendering context | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						void render(DATA entity, RCTX context); | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * Update the entity (animation, decay etc) | 
				
			||||||
 | 
						 *  | 
				
			||||||
 | 
						 * @param entity data object | 
				
			||||||
 | 
						 * @param delta delta time | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						void update(DATA entity, double delta); | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
					} | 
				
			||||||
@ -0,0 +1,102 @@ | 
				
			|||||||
 | 
					package mightypork.rogue.world; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.io.IOException; | 
				
			||||||
 | 
					import java.io.InputStream; | 
				
			||||||
 | 
					import java.io.OutputStream; | 
				
			||||||
 | 
					import java.util.Stack; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import mightypork.util.control.timing.Updateable; | 
				
			||||||
 | 
					import mightypork.util.files.ion.BinaryUtils; | 
				
			||||||
 | 
					import mightypork.util.files.ion.Ionizable; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** | 
				
			||||||
 | 
					 * Concrete tile in the world. | 
				
			||||||
 | 
					 *  | 
				
			||||||
 | 
					 * @author MightyPork | 
				
			||||||
 | 
					 */ | 
				
			||||||
 | 
					public class TileData implements Ionizable, Updateable { | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						public static final short ION_MARK = 700; | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						/** Items dropped onto this tile */ | 
				
			||||||
 | 
						public final Stack<ItemData> items = new Stack<>(); | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						/** Whether the tile is occupied by an entity */ | 
				
			||||||
 | 
						public boolean occupied; | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						private TileModel model; | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						// data fields for models to use
 | 
				
			||||||
 | 
						public Object data; | 
				
			||||||
 | 
						public boolean[] flags; | 
				
			||||||
 | 
						public int[] ints; | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * Create from model id | 
				
			||||||
 | 
						 *  | 
				
			||||||
 | 
						 * @param id model id | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						public TileData(int id) { | 
				
			||||||
 | 
							this(Tiles.get(id)); | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * Create from model | 
				
			||||||
 | 
						 *  | 
				
			||||||
 | 
						 * @param model model | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						public TileData(TileModel model) { | 
				
			||||||
 | 
							this.model = model; | 
				
			||||||
 | 
							model.create(this); | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * Create without model. Model will be read from ION input stream. | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						public TileData() { | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						@Override | 
				
			||||||
 | 
						public void loadFrom(InputStream in) throws IOException | 
				
			||||||
 | 
						{ | 
				
			||||||
 | 
							final int id = BinaryUtils.readInt(in); | 
				
			||||||
 | 
							model = Tiles.get(id); | 
				
			||||||
 | 
							model.load(this, in); | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						@Override | 
				
			||||||
 | 
						public void saveTo(OutputStream out) throws IOException | 
				
			||||||
 | 
						{ | 
				
			||||||
 | 
							BinaryUtils.writeInt(out, model.getId()); | 
				
			||||||
 | 
							model.save(this, out); | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						@Override | 
				
			||||||
 | 
						public short getIonMark() | 
				
			||||||
 | 
						{ | 
				
			||||||
 | 
							return ION_MARK; | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						public void render(TileRenderContext context) | 
				
			||||||
 | 
						{ | 
				
			||||||
 | 
							model.render(this, context); | 
				
			||||||
 | 
							if (!items.isEmpty()) items.peek().render(context); | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						@Override | 
				
			||||||
 | 
						public void update(double delta) | 
				
			||||||
 | 
						{ | 
				
			||||||
 | 
							model.update(this, delta); | 
				
			||||||
 | 
							if (!items.isEmpty()) items.peek().update(delta); | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					} | 
				
			||||||
@ -0,0 +1,13 @@ | 
				
			|||||||
 | 
					package mightypork.rogue.world; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public interface TileHolder { | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						TileData getTile(int x, int y); | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						int getWidth(); | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						int getHeight(); | 
				
			||||||
 | 
					} | 
				
			||||||
@ -0,0 +1,106 @@ | 
				
			|||||||
 | 
					package mightypork.rogue.world; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.io.InputStream; | 
				
			||||||
 | 
					import java.io.OutputStream; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import mightypork.util.annotations.DefaultImpl; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public abstract class TileModel { | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						public final int id; | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						public TileModel(int id) { | 
				
			||||||
 | 
							this.id = id; | 
				
			||||||
 | 
							Tiles.register(id, this); | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * Get the id. | 
				
			||||||
 | 
						 *  | 
				
			||||||
 | 
						 * @return id | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						public final int getId() | 
				
			||||||
 | 
						{ | 
				
			||||||
 | 
							return id; | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * @return can be walked through (if discovered / open) | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						public abstract boolean isPotentiallyWalkable(); | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * Populate a tile holder with data for this tile model | 
				
			||||||
 | 
						 *  | 
				
			||||||
 | 
						 * @param tile tile in world | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						@DefaultImpl | 
				
			||||||
 | 
						public void create(TileData tile) | 
				
			||||||
 | 
						{ | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * On search performed (reveal hidden door etc) | 
				
			||||||
 | 
						 *  | 
				
			||||||
 | 
						 * @param tile tile in world | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						@DefaultImpl | 
				
			||||||
 | 
						public void search(TileData tile) | 
				
			||||||
 | 
						{ | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * Check if an entity can walk this tile. If the tile is not potentially | 
				
			||||||
 | 
						 * walkable, then this method must always return false. | 
				
			||||||
 | 
						 *  | 
				
			||||||
 | 
						 * @param tile tile in world | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						public abstract void isWalkable(TileData tile); | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * Load a tile from binary stream. | 
				
			||||||
 | 
						 *  | 
				
			||||||
 | 
						 * @param tile tile to load | 
				
			||||||
 | 
						 * @param in input stream | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						@DefaultImpl | 
				
			||||||
 | 
						public void load(TileData tile, InputStream in) | 
				
			||||||
 | 
						{ | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * Save a tile to binary stream. | 
				
			||||||
 | 
						 *  | 
				
			||||||
 | 
						 * @param tile tile to save | 
				
			||||||
 | 
						 * @param out output stream | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						@DefaultImpl | 
				
			||||||
 | 
						public void save(TileData tile, OutputStream out) | 
				
			||||||
 | 
						{ | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						public abstract void render(TileData tile, TileRenderContext context); | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * Update the tile (animation, item spawning etc) | 
				
			||||||
 | 
						 *  | 
				
			||||||
 | 
						 * @param tile tile to update | 
				
			||||||
 | 
						 * @param delta delta time | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						@DefaultImpl | 
				
			||||||
 | 
						public void update(TileData tile, double delta) | 
				
			||||||
 | 
						{ | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					} | 
				
			||||||
@ -0,0 +1,39 @@ | 
				
			|||||||
 | 
					package mightypork.rogue.world; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import mightypork.util.constraints.rect.Rect; | 
				
			||||||
 | 
					import mightypork.util.constraints.rect.builders.TiledRect; | 
				
			||||||
 | 
					import mightypork.util.constraints.rect.proxy.RectBound; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class TileRenderContext implements RectBound { | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						private final TileHolder map; | 
				
			||||||
 | 
						private final TiledRect tiler; | 
				
			||||||
 | 
						private int x, y; | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						public TileRenderContext(TileHolder map, Rect mapArea) { | 
				
			||||||
 | 
							this.map = map; | 
				
			||||||
 | 
							this.tiler = mapArea.tiles(map.getWidth(), map.getHeight()); | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						public TileData getTile() | 
				
			||||||
 | 
						{ | 
				
			||||||
 | 
							return map.getTile(x, y); | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						public TileData getAdjacentTile(int offsetX, int offsetY) | 
				
			||||||
 | 
						{ | 
				
			||||||
 | 
							return map.getTile(x + offsetX, y + offsetY); | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						@Override | 
				
			||||||
 | 
						public Rect getRect() | 
				
			||||||
 | 
						{ | 
				
			||||||
 | 
							return tiler.tile(x, y); | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					} | 
				
			||||||
@ -0,0 +1,26 @@ | 
				
			|||||||
 | 
					package mightypork.rogue.world; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.util.HashMap; | 
				
			||||||
 | 
					import java.util.Map; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class Tiles { | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						private static final Map<Integer, TileModel> registered = new HashMap<>(); | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						public static void register(int id, TileModel model) | 
				
			||||||
 | 
						{ | 
				
			||||||
 | 
							if (registered.containsKey(id)) throw new IllegalArgumentException("Tile ID " + id + " already in use."); | 
				
			||||||
 | 
							registered.put(id, model); | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						public static TileModel get(int id) | 
				
			||||||
 | 
						{ | 
				
			||||||
 | 
							final TileModel m = registered.get(id); | 
				
			||||||
 | 
							if (m == null) throw new IllegalArgumentException("No tile with ID " + id + "."); | 
				
			||||||
 | 
							return m; | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					} | 
				
			||||||
					Loading…
					
					
				
		Reference in new issue