parent
							
								
									78035ced7a
								
							
						
					
					
						commit
						fb244dc2b9
					
				@ -1,40 +0,0 @@ | 
				
			|||||||
package mightypork.gamecore.util.math.algo.pathfinding; | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import mightypork.gamecore.util.math.algo.Coord; | 
					 | 
				
			||||||
import mightypork.gamecore.util.math.algo.Step; | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
public interface PathFindingContext { | 
					 | 
				
			||||||
	 | 
					 | 
				
			||||||
	/** | 
					 | 
				
			||||||
	 * @param pos tile pos | 
					 | 
				
			||||||
	 * @return true if the tile is walkable | 
					 | 
				
			||||||
	 */ | 
					 | 
				
			||||||
	boolean isAccessible(Coord pos); | 
					 | 
				
			||||||
	 | 
					 | 
				
			||||||
	 | 
					 | 
				
			||||||
	/** | 
					 | 
				
			||||||
	 * Cost of walking onto a tile. It's useful to use ie. 10 for basic step. | 
					 | 
				
			||||||
	 *  | 
					 | 
				
			||||||
	 * @param from last tile | 
					 | 
				
			||||||
	 * @param to current tile | 
					 | 
				
			||||||
	 * @return cost | 
					 | 
				
			||||||
	 */ | 
					 | 
				
			||||||
	int getCost(Coord from, Coord to); | 
					 | 
				
			||||||
	 | 
					 | 
				
			||||||
	 | 
					 | 
				
			||||||
	/** | 
					 | 
				
			||||||
	 * @return lowest cost. Used to multiply heuristics. | 
					 | 
				
			||||||
	 */ | 
					 | 
				
			||||||
	int getMinCost(); | 
					 | 
				
			||||||
	 | 
					 | 
				
			||||||
	 | 
					 | 
				
			||||||
	/** | 
					 | 
				
			||||||
	 * @return used heuristic | 
					 | 
				
			||||||
	 */ | 
					 | 
				
			||||||
	Heuristic getHeuristic(); | 
					 | 
				
			||||||
	 | 
					 | 
				
			||||||
	 | 
					 | 
				
			||||||
	Step[] getWalkSides(); | 
					 | 
				
			||||||
} | 
					 | 
				
			||||||
@ -1,29 +0,0 @@ | 
				
			|||||||
package mightypork.rogue.world.entity; | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import mightypork.gamecore.util.math.algo.Coord; | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
public class SimpleEntityPathFindingContext extends EntityPathfindingContext { | 
					 | 
				
			||||||
	 | 
					 | 
				
			||||||
	public SimpleEntityPathFindingContext(Entity entity) | 
					 | 
				
			||||||
	{ | 
					 | 
				
			||||||
		super(entity); | 
					 | 
				
			||||||
	} | 
					 | 
				
			||||||
	 | 
					 | 
				
			||||||
	 | 
					 | 
				
			||||||
	@Override | 
					 | 
				
			||||||
	public int getCost(Coord from, Coord to) | 
					 | 
				
			||||||
	{ | 
					 | 
				
			||||||
		return 10; | 
					 | 
				
			||||||
	} | 
					 | 
				
			||||||
	 | 
					 | 
				
			||||||
	 | 
					 | 
				
			||||||
	@Override | 
					 | 
				
			||||||
	public int getMinCost() | 
					 | 
				
			||||||
	{ | 
					 | 
				
			||||||
		return 10; | 
					 | 
				
			||||||
	} | 
					 | 
				
			||||||
	 | 
					 | 
				
			||||||
	 | 
					 | 
				
			||||||
} | 
					 | 
				
			||||||
@ -0,0 +1,59 @@ | 
				
			|||||||
 | 
					package mightypork.rogue.world.entity.entities; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import mightypork.rogue.world.entity.Entity; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class RatAi extends MonsterAi { | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						public RatAi(Entity entity) | 
				
			||||||
 | 
						{ | 
				
			||||||
 | 
							super(entity); | 
				
			||||||
 | 
							 | 
				
			||||||
 | 
							setAttackTime(1); | 
				
			||||||
 | 
							setScanTime(2); | 
				
			||||||
 | 
							setSleepTime(100); | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						@Override | 
				
			||||||
 | 
						protected double getScanRadius() | 
				
			||||||
 | 
						{ | 
				
			||||||
 | 
							return isSleeping() ? 2 + rand.nextInt(3) : 4 + rand.nextInt(3); | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						@Override | 
				
			||||||
 | 
						protected double getAttackDistance() | 
				
			||||||
 | 
						{ | 
				
			||||||
 | 
							return 1.42; | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						@Override | 
				
			||||||
 | 
						protected int getAttackStrength() | 
				
			||||||
 | 
						{ | 
				
			||||||
 | 
							return 1 + rand.nextInt(2); | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						@Override | 
				
			||||||
 | 
						protected int getPreyAbandonDistance() | 
				
			||||||
 | 
						{ | 
				
			||||||
 | 
							return 8 + rand.nextInt(4); | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						@Override | 
				
			||||||
 | 
						protected boolean shouldSkipScan() | 
				
			||||||
 | 
						{ | 
				
			||||||
 | 
							return false;//rand.nextInt(3) == 0;
 | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						@Override | 
				
			||||||
 | 
						protected boolean shouldRandomlyAbandonPrey() | 
				
			||||||
 | 
						{ | 
				
			||||||
 | 
							return false;//rand.nextInt(8) == 0;
 | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					} | 
				
			||||||
@ -0,0 +1,59 @@ | 
				
			|||||||
 | 
					package mightypork.rogue.world.entity.entities; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import mightypork.gamecore.util.math.algo.pathfinding.PathFinder; | 
				
			||||||
 | 
					import mightypork.rogue.world.entity.*; | 
				
			||||||
 | 
					import mightypork.rogue.world.entity.renderers.EntityRenderer; | 
				
			||||||
 | 
					import mightypork.rogue.world.entity.renderers.EntityRendererMobLR; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class RatEntity extends Entity { | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						/** Navigation PFC */ | 
				
			||||||
 | 
						private PathFinder pathf; | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						private final RatAi ai = new RatAi(this); | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						private EntityRenderer renderer; | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						public RatEntity(EntityModel model, int eid) | 
				
			||||||
 | 
						{ | 
				
			||||||
 | 
							super(model, eid); | 
				
			||||||
 | 
							 | 
				
			||||||
 | 
							addModule("ai", ai); | 
				
			||||||
 | 
							pos.addMoveListener(ai); | 
				
			||||||
 | 
							 | 
				
			||||||
 | 
							pos.setStepTime(0.5); | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						@Override | 
				
			||||||
 | 
						public PathFinder getPathFinder() | 
				
			||||||
 | 
						{ | 
				
			||||||
 | 
							if (pathf == null) { | 
				
			||||||
 | 
								pathf = new EntityPathFinder(this); | 
				
			||||||
 | 
							} | 
				
			||||||
 | 
							 | 
				
			||||||
 | 
							return pathf; | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						@Override | 
				
			||||||
 | 
						public EntityType getType() | 
				
			||||||
 | 
						{ | 
				
			||||||
 | 
							return EntityType.MONSTER; | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						@Override | 
				
			||||||
 | 
						protected EntityRenderer getRenderer() | 
				
			||||||
 | 
						{ | 
				
			||||||
 | 
							if (renderer == null) { | 
				
			||||||
 | 
								renderer = new EntityRendererMobLR(this, "sprite.player"); | 
				
			||||||
 | 
							} | 
				
			||||||
 | 
							 | 
				
			||||||
 | 
							return renderer; | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
					} | 
				
			||||||
@ -1,41 +0,0 @@ | 
				
			|||||||
package mightypork.rogue.world.entity.entities; | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import mightypork.gamecore.util.math.algo.pathfinding.PathFindingContext; | 
					 | 
				
			||||||
import mightypork.rogue.world.entity.*; | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
public abstract class SimpleMonster extends Entity { | 
					 | 
				
			||||||
	 | 
					 | 
				
			||||||
	/** Navigation PFC */ | 
					 | 
				
			||||||
	private EntityPathfindingContext pathfc; | 
					 | 
				
			||||||
	 | 
					 | 
				
			||||||
	private final EntityModule ai = new MonsterAi(this); | 
					 | 
				
			||||||
	 | 
					 | 
				
			||||||
	 | 
					 | 
				
			||||||
	public SimpleMonster(EntityModel model, int eid) | 
					 | 
				
			||||||
	{ | 
					 | 
				
			||||||
		super(model, eid); | 
					 | 
				
			||||||
		 | 
					 | 
				
			||||||
		addModule("ai", ai); | 
					 | 
				
			||||||
	} | 
					 | 
				
			||||||
	 | 
					 | 
				
			||||||
	 | 
					 | 
				
			||||||
	@Override | 
					 | 
				
			||||||
	public PathFindingContext getPathfindingContext() | 
					 | 
				
			||||||
	{ | 
					 | 
				
			||||||
		if (pathfc == null) { | 
					 | 
				
			||||||
			pathfc = new SimpleEntityPathFindingContext(this); | 
					 | 
				
			||||||
		} | 
					 | 
				
			||||||
		 | 
					 | 
				
			||||||
		return pathfc; | 
					 | 
				
			||||||
	} | 
					 | 
				
			||||||
	 | 
					 | 
				
			||||||
	 | 
					 | 
				
			||||||
	@Override | 
					 | 
				
			||||||
	public EntityType getType() | 
					 | 
				
			||||||
	{ | 
					 | 
				
			||||||
		return EntityType.MONSTER; | 
					 | 
				
			||||||
	} | 
					 | 
				
			||||||
	 | 
					 | 
				
			||||||
} | 
					 | 
				
			||||||
@ -1,14 +0,0 @@ | 
				
			|||||||
package mightypork.rogue.world.tile; | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/** | 
					 | 
				
			||||||
 * Data storage for tile renderer | 
					 | 
				
			||||||
 *  | 
					 | 
				
			||||||
 * @author MightyPork | 
					 | 
				
			||||||
 */ | 
					 | 
				
			||||||
public class TileRenderData { | 
					 | 
				
			||||||
	 | 
					 | 
				
			||||||
	public byte shadows; | 
					 | 
				
			||||||
	public boolean shadowsComputed; | 
					 | 
				
			||||||
	 | 
					 | 
				
			||||||
} | 
					 | 
				
			||||||
@ -1,39 +0,0 @@ | 
				
			|||||||
package mightypork.rogue.world.tile.renderers; | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import mightypork.gamecore.render.Render; | 
					 | 
				
			||||||
import mightypork.gamecore.resources.textures.TxSheet; | 
					 | 
				
			||||||
import mightypork.gamecore.util.math.constraints.rect.Rect; | 
					 | 
				
			||||||
import mightypork.rogue.Res; | 
					 | 
				
			||||||
import mightypork.rogue.world.level.render.TileRenderContext; | 
					 | 
				
			||||||
import mightypork.rogue.world.tile.Tile; | 
					 | 
				
			||||||
import mightypork.rogue.world.tile.TileRenderer; | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
public class DoorRenderer extends TileRenderer { | 
					 | 
				
			||||||
	 | 
					 | 
				
			||||||
	private final TxSheet closed; | 
					 | 
				
			||||||
	private final TxSheet open; | 
					 | 
				
			||||||
	 | 
					 | 
				
			||||||
	 | 
					 | 
				
			||||||
	public DoorRenderer(String quadClosed, String quadOpen) | 
					 | 
				
			||||||
	{ | 
					 | 
				
			||||||
		this.closed = Res.getTxSheet(quadClosed); | 
					 | 
				
			||||||
		this.open = Res.getTxSheet(quadOpen); | 
					 | 
				
			||||||
	} | 
					 | 
				
			||||||
	 | 
					 | 
				
			||||||
	 | 
					 | 
				
			||||||
	@Override | 
					 | 
				
			||||||
	public void renderTile(TileRenderContext context) | 
					 | 
				
			||||||
	{ | 
					 | 
				
			||||||
		final Tile t = context.getTile(); | 
					 | 
				
			||||||
		final Rect rect = context.getRect(); | 
					 | 
				
			||||||
		 | 
					 | 
				
			||||||
		if (t.isOccupied()) { | 
					 | 
				
			||||||
			Render.quadTextured(rect, open.getRandomQuad(context.getTileNoise())); | 
					 | 
				
			||||||
		} else { | 
					 | 
				
			||||||
			Render.quadTextured(rect, closed.getRandomQuad(context.getTileNoise())); | 
					 | 
				
			||||||
		} | 
					 | 
				
			||||||
	} | 
					 | 
				
			||||||
	 | 
					 | 
				
			||||||
} | 
					 | 
				
			||||||
@ -0,0 +1,70 @@ | 
				
			|||||||
 | 
					package mightypork.rogue.world.tile.renderers; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import mightypork.gamecore.render.Render; | 
				
			||||||
 | 
					import mightypork.gamecore.resources.textures.TxSheet; | 
				
			||||||
 | 
					import mightypork.gamecore.util.math.constraints.rect.Rect; | 
				
			||||||
 | 
					import mightypork.gamecore.util.math.timing.TimedTask; | 
				
			||||||
 | 
					import mightypork.rogue.Res; | 
				
			||||||
 | 
					import mightypork.rogue.world.level.render.TileRenderContext; | 
				
			||||||
 | 
					import mightypork.rogue.world.tile.Tile; | 
				
			||||||
 | 
					import mightypork.rogue.world.tile.TileRenderer; | 
				
			||||||
 | 
					import mightypork.rogue.world.tile.tiles.TileBaseDoor; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class DoorTileRenderer extends TileRenderer { | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						private final TxSheet locked; | 
				
			||||||
 | 
						private final TxSheet closed; | 
				
			||||||
 | 
						private final TxSheet open; | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						private boolean visuallyOpen = false; | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						private final TimedTask closeTask = new TimedTask() { | 
				
			||||||
 | 
							 | 
				
			||||||
 | 
							@Override | 
				
			||||||
 | 
							public void run() | 
				
			||||||
 | 
							{ | 
				
			||||||
 | 
								System.out.println("CLOSEDOOR + "+ ((TileBaseDoor) tile).isOpen()); | 
				
			||||||
 | 
								visuallyOpen = ((TileBaseDoor) tile).isOpen(); | 
				
			||||||
 | 
							} | 
				
			||||||
 | 
						}; | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						public DoorTileRenderer(TileBaseDoor doorTile, TxSheet locked, TxSheet closed, TxSheet open) | 
				
			||||||
 | 
						{ | 
				
			||||||
 | 
							super(doorTile); | 
				
			||||||
 | 
							 | 
				
			||||||
 | 
							this.locked = locked; | 
				
			||||||
 | 
							this.closed = closed; | 
				
			||||||
 | 
							this.open = open; | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						@Override | 
				
			||||||
 | 
						public void renderTile(TileRenderContext context) | 
				
			||||||
 | 
						{ | 
				
			||||||
 | 
							final Rect rect = context.getRect(); | 
				
			||||||
 | 
							 | 
				
			||||||
 | 
							if (!visuallyOpen && ((TileBaseDoor) tile).isOpen()) visuallyOpen = true; | 
				
			||||||
 | 
							 | 
				
			||||||
 | 
							if (visuallyOpen && !((TileBaseDoor) tile).isOpen()) { | 
				
			||||||
 | 
								if(!closeTask.isRunning()) closeTask.start(0.4); | 
				
			||||||
 | 
							} | 
				
			||||||
 | 
							 | 
				
			||||||
 | 
							if (visuallyOpen) {			 | 
				
			||||||
 | 
								Render.quadTextured(rect, open.getRandomQuad(context.getTileNoise())); | 
				
			||||||
 | 
							} else { | 
				
			||||||
 | 
								TxSheet sheet = (((TileBaseDoor) tile).isLocked() ? locked : closed);			 | 
				
			||||||
 | 
								Render.quadTextured(rect, sheet.getRandomQuad(context.getTileNoise())); | 
				
			||||||
 | 
							} | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						@Override | 
				
			||||||
 | 
						public void update(double delta) | 
				
			||||||
 | 
						{ | 
				
			||||||
 | 
							closeTask.update(delta); | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
					} | 
				
			||||||
@ -1,38 +0,0 @@ | 
				
			|||||||
package mightypork.rogue.world.tile.renderers; | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import mightypork.gamecore.render.Render; | 
					 | 
				
			||||||
import mightypork.gamecore.resources.textures.TxSheet; | 
					 | 
				
			||||||
import mightypork.gamecore.util.math.constraints.rect.Rect; | 
					 | 
				
			||||||
import mightypork.rogue.Res; | 
					 | 
				
			||||||
import mightypork.rogue.world.level.render.TileRenderContext; | 
					 | 
				
			||||||
import mightypork.rogue.world.tile.Tile; | 
					 | 
				
			||||||
import mightypork.rogue.world.tile.TileRenderer; | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
public class LockedDoorRenderer extends DoorRenderer { | 
					 | 
				
			||||||
	 | 
					 | 
				
			||||||
	private final TxSheet locked; | 
					 | 
				
			||||||
	 | 
					 | 
				
			||||||
	 | 
					 | 
				
			||||||
	public LockedDoorRenderer(String sheetLocked, String sheetClosed, String sheetOpen) | 
					 | 
				
			||||||
	{ | 
					 | 
				
			||||||
		super(sheetClosed, sheetOpen); | 
					 | 
				
			||||||
		this.locked = Res.getTxSheet(sheetLocked); | 
					 | 
				
			||||||
	} | 
					 | 
				
			||||||
	 | 
					 | 
				
			||||||
	 | 
					 | 
				
			||||||
	@Override | 
					 | 
				
			||||||
	public void renderTile(TileRenderContext context) | 
					 | 
				
			||||||
	{ | 
					 | 
				
			||||||
		final Tile t = context.getTile(); | 
					 | 
				
			||||||
		 | 
					 | 
				
			||||||
		if (!t.isWalkable()) { | 
					 | 
				
			||||||
			final Rect rect = context.getRect(); | 
					 | 
				
			||||||
			Render.quadTextured(rect, locked.getRandomQuad(context.getTileNoise())); | 
					 | 
				
			||||||
		} else { | 
					 | 
				
			||||||
			super.renderTile(context); | 
					 | 
				
			||||||
		} | 
					 | 
				
			||||||
	} | 
					 | 
				
			||||||
	 | 
					 | 
				
			||||||
} | 
					 | 
				
			||||||
@ -1,29 +0,0 @@ | 
				
			|||||||
package mightypork.rogue.world.tile.tiles; | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import mightypork.rogue.world.tile.TileModel; | 
					 | 
				
			||||||
import mightypork.rogue.world.tile.TileRenderer; | 
					 | 
				
			||||||
import mightypork.rogue.world.tile.TileType; | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
public class DoorTile extends SolidTile { | 
					 | 
				
			||||||
	 | 
					 | 
				
			||||||
	public DoorTile(TileModel model, TileRenderer renderer) | 
					 | 
				
			||||||
	{ | 
					 | 
				
			||||||
		super(model, renderer); | 
					 | 
				
			||||||
	} | 
					 | 
				
			||||||
	 | 
					 | 
				
			||||||
	 | 
					 | 
				
			||||||
	@Override | 
					 | 
				
			||||||
	public boolean isWalkable() | 
					 | 
				
			||||||
	{ | 
					 | 
				
			||||||
		return true; | 
					 | 
				
			||||||
	} | 
					 | 
				
			||||||
	 | 
					 | 
				
			||||||
	 | 
					 | 
				
			||||||
	@Override | 
					 | 
				
			||||||
	public TileType getType() | 
					 | 
				
			||||||
	{ | 
					 | 
				
			||||||
		return TileType.DOOR; | 
					 | 
				
			||||||
	} | 
					 | 
				
			||||||
} | 
					 | 
				
			||||||
@ -1,22 +0,0 @@ | 
				
			|||||||
package mightypork.rogue.world.tile.tiles; | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import mightypork.rogue.world.tile.TileModel; | 
					 | 
				
			||||||
import mightypork.rogue.world.tile.TileRenderer; | 
					 | 
				
			||||||
import mightypork.rogue.world.tile.TileType; | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
public class FloorTile extends GroundTile { | 
					 | 
				
			||||||
	 | 
					 | 
				
			||||||
	public FloorTile(TileModel model, TileRenderer renderer) | 
					 | 
				
			||||||
	{ | 
					 | 
				
			||||||
		super(model, renderer); | 
					 | 
				
			||||||
	} | 
					 | 
				
			||||||
	 | 
					 | 
				
			||||||
	 | 
					 | 
				
			||||||
	@Override | 
					 | 
				
			||||||
	public TileType getType() | 
					 | 
				
			||||||
	{ | 
					 | 
				
			||||||
		return TileType.FLOOR; | 
					 | 
				
			||||||
	} | 
					 | 
				
			||||||
} | 
					 | 
				
			||||||
@ -1,44 +0,0 @@ | 
				
			|||||||
package mightypork.rogue.world.tile.tiles; | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import java.io.IOException; | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import mightypork.gamecore.util.ion.IonInput; | 
					 | 
				
			||||||
import mightypork.gamecore.util.ion.IonOutput; | 
					 | 
				
			||||||
import mightypork.rogue.world.tile.TileModel; | 
					 | 
				
			||||||
import mightypork.rogue.world.tile.TileRenderer; | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
public class LockedDoorTile extends DoorTile { | 
					 | 
				
			||||||
	 | 
					 | 
				
			||||||
	public boolean locked = true; | 
					 | 
				
			||||||
	 | 
					 | 
				
			||||||
	 | 
					 | 
				
			||||||
	public LockedDoorTile(TileModel model, TileRenderer renderer) | 
					 | 
				
			||||||
	{ | 
					 | 
				
			||||||
		super(model, renderer); | 
					 | 
				
			||||||
	} | 
					 | 
				
			||||||
	 | 
					 | 
				
			||||||
	 | 
					 | 
				
			||||||
	@Override | 
					 | 
				
			||||||
	public boolean isWalkable() | 
					 | 
				
			||||||
	{ | 
					 | 
				
			||||||
		return !locked; | 
					 | 
				
			||||||
	} | 
					 | 
				
			||||||
	 | 
					 | 
				
			||||||
	 | 
					 | 
				
			||||||
	@Override | 
					 | 
				
			||||||
	public void load(IonInput in) throws IOException | 
					 | 
				
			||||||
	{ | 
					 | 
				
			||||||
		super.load(in); | 
					 | 
				
			||||||
		locked = in.readBoolean(); | 
					 | 
				
			||||||
	} | 
					 | 
				
			||||||
	 | 
					 | 
				
			||||||
	 | 
					 | 
				
			||||||
	@Override | 
					 | 
				
			||||||
	public void save(IonOutput out) throws IOException | 
					 | 
				
			||||||
	{ | 
					 | 
				
			||||||
		super.save(out); | 
					 | 
				
			||||||
		out.writeBoolean(locked); | 
					 | 
				
			||||||
	} | 
					 | 
				
			||||||
} | 
					 | 
				
			||||||
@ -0,0 +1,82 @@ | 
				
			|||||||
 | 
					package mightypork.rogue.world.tile.tiles; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.io.IOException; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import mightypork.gamecore.resources.textures.TxSheet; | 
				
			||||||
 | 
					import mightypork.gamecore.util.ion.IonInput; | 
				
			||||||
 | 
					import mightypork.gamecore.util.ion.IonOutput; | 
				
			||||||
 | 
					import mightypork.rogue.world.tile.TileModel; | 
				
			||||||
 | 
					import mightypork.rogue.world.tile.TileRenderer; | 
				
			||||||
 | 
					import mightypork.rogue.world.tile.TileType; | 
				
			||||||
 | 
					import mightypork.rogue.world.tile.renderers.DoorTileRenderer; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public abstract class TileBaseDoor extends TileSolid { | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						private final DoorTileRenderer renderer; | 
				
			||||||
 | 
						protected boolean locked = false; | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						public TileBaseDoor(TileModel model, TxSheet locked, TxSheet closed, TxSheet open) | 
				
			||||||
 | 
						{ | 
				
			||||||
 | 
							super(model); | 
				
			||||||
 | 
							 | 
				
			||||||
 | 
							this.renderer = new DoorTileRenderer(this, locked, closed, open); | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						@Override | 
				
			||||||
 | 
						protected TileRenderer getRenderer() | 
				
			||||||
 | 
						{ | 
				
			||||||
 | 
							return renderer; | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						@Override | 
				
			||||||
 | 
						public boolean isWalkable() | 
				
			||||||
 | 
						{ | 
				
			||||||
 | 
							return !locked; | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						@Override | 
				
			||||||
 | 
						public TileType getType() | 
				
			||||||
 | 
						{ | 
				
			||||||
 | 
							return TileType.DOOR; | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						@Override | 
				
			||||||
 | 
						public void load(IonInput in) throws IOException | 
				
			||||||
 | 
						{ | 
				
			||||||
 | 
							super.load(in); | 
				
			||||||
 | 
							locked = in.readBoolean(); | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						@Override | 
				
			||||||
 | 
						public void save(IonOutput out) throws IOException | 
				
			||||||
 | 
						{ | 
				
			||||||
 | 
							super.save(out); | 
				
			||||||
 | 
							out.writeBoolean(locked); | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * @return true if the door appears open | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						public boolean isOpen() | 
				
			||||||
 | 
						{ | 
				
			||||||
 | 
							return isOccupied(); | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * @return true if the door is locked | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						public boolean isLocked() | 
				
			||||||
 | 
						{ | 
				
			||||||
 | 
							return locked; | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					} | 
				
			||||||
@ -0,0 +1,34 @@ | 
				
			|||||||
 | 
					package mightypork.rogue.world.tile.tiles; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import mightypork.gamecore.resources.textures.TxSheet; | 
				
			||||||
 | 
					import mightypork.rogue.world.tile.TileModel; | 
				
			||||||
 | 
					import mightypork.rogue.world.tile.TileRenderer; | 
				
			||||||
 | 
					import mightypork.rogue.world.tile.TileType; | 
				
			||||||
 | 
					import mightypork.rogue.world.tile.renderers.BasicTileRenderer; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public abstract class TileBaseFloor extends TileWalkable { | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						private BasicTileRenderer renderer; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						public TileBaseFloor(TileModel model, TxSheet sheet) | 
				
			||||||
 | 
						{ | 
				
			||||||
 | 
							super(model); | 
				
			||||||
 | 
							this.renderer = new BasicTileRenderer(this, sheet); | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						@Override | 
				
			||||||
 | 
						protected TileRenderer getRenderer() | 
				
			||||||
 | 
						{ | 
				
			||||||
 | 
							return renderer; | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						@Override | 
				
			||||||
 | 
						public TileType getType() | 
				
			||||||
 | 
						{ | 
				
			||||||
 | 
							return TileType.FLOOR; | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					} | 
				
			||||||
@ -0,0 +1,49 @@ | 
				
			|||||||
 | 
					package mightypork.rogue.world.tile.tiles; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import mightypork.gamecore.resources.textures.TxSheet; | 
				
			||||||
 | 
					import mightypork.rogue.world.tile.TileModel; | 
				
			||||||
 | 
					import mightypork.rogue.world.tile.TileRenderer; | 
				
			||||||
 | 
					import mightypork.rogue.world.tile.TileType; | 
				
			||||||
 | 
					import mightypork.rogue.world.tile.renderers.BasicTileRenderer; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** | 
				
			||||||
 | 
					 * Collapsed wall that's walk-through | 
				
			||||||
 | 
					 *  | 
				
			||||||
 | 
					 * @author MightyPork | 
				
			||||||
 | 
					 */ | 
				
			||||||
 | 
					public abstract class TileBasePassage extends TileSolid { | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						private BasicTileRenderer renderer; | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						public TileBasePassage(TileModel model, TxSheet sheet) | 
				
			||||||
 | 
						{ | 
				
			||||||
 | 
							super(model); | 
				
			||||||
 | 
							 | 
				
			||||||
 | 
							this.renderer = new BasicTileRenderer(this, sheet); | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						@Override | 
				
			||||||
 | 
						protected TileRenderer getRenderer() | 
				
			||||||
 | 
						{ | 
				
			||||||
 | 
							return renderer; | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						@Override | 
				
			||||||
 | 
						public TileType getType() | 
				
			||||||
 | 
						{ | 
				
			||||||
 | 
							return TileType.PASSAGE; | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						@Override | 
				
			||||||
 | 
						public boolean isWalkable() | 
				
			||||||
 | 
						{ | 
				
			||||||
 | 
							return true; | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
					} | 
				
			||||||
@ -0,0 +1,35 @@ | 
				
			|||||||
 | 
					package mightypork.rogue.world.tile.tiles; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import mightypork.gamecore.resources.textures.TxSheet; | 
				
			||||||
 | 
					import mightypork.rogue.world.level.render.TileRenderContext; | 
				
			||||||
 | 
					import mightypork.rogue.world.tile.TileModel; | 
				
			||||||
 | 
					import mightypork.rogue.world.tile.TileRenderer; | 
				
			||||||
 | 
					import mightypork.rogue.world.tile.TileType; | 
				
			||||||
 | 
					import mightypork.rogue.world.tile.renderers.BasicTileRenderer; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public abstract class TileBaseWall extends TileSolid { | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						private BasicTileRenderer renderer; | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						public TileBaseWall(TileModel model, TxSheet sheet) | 
				
			||||||
 | 
						{ | 
				
			||||||
 | 
							super(model); | 
				
			||||||
 | 
							this.renderer = new BasicTileRenderer(this, sheet); | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						public BasicTileRenderer getRenderer() | 
				
			||||||
 | 
						{ | 
				
			||||||
 | 
							return renderer; | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						@Override | 
				
			||||||
 | 
						public TileType getType() | 
				
			||||||
 | 
						{ | 
				
			||||||
 | 
							return TileType.WALL; | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					} | 
				
			||||||
@ -1,35 +0,0 @@ | 
				
			|||||||
package mightypork.rogue.world.tile.tiles; | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import mightypork.rogue.world.tile.TileModel; | 
					 | 
				
			||||||
import mightypork.rogue.world.tile.TileRenderer; | 
					 | 
				
			||||||
import mightypork.rogue.world.tile.TileType; | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/** | 
					 | 
				
			||||||
 * Collapsed wall that's walk-through | 
					 | 
				
			||||||
 *  | 
					 | 
				
			||||||
 * @author MightyPork | 
					 | 
				
			||||||
 */ | 
					 | 
				
			||||||
public class WallPassageTile extends SolidTile { | 
					 | 
				
			||||||
	 | 
					 | 
				
			||||||
	public WallPassageTile(TileModel model, TileRenderer renderer) | 
					 | 
				
			||||||
	{ | 
					 | 
				
			||||||
		super(model, renderer); | 
					 | 
				
			||||||
	} | 
					 | 
				
			||||||
	 | 
					 | 
				
			||||||
	 | 
					 | 
				
			||||||
	@Override | 
					 | 
				
			||||||
	public TileType getType() | 
					 | 
				
			||||||
	{ | 
					 | 
				
			||||||
		return TileType.PASSAGE; | 
					 | 
				
			||||||
	} | 
					 | 
				
			||||||
	 | 
					 | 
				
			||||||
	 | 
					 | 
				
			||||||
	@Override | 
					 | 
				
			||||||
	public boolean isWalkable() | 
					 | 
				
			||||||
	{ | 
					 | 
				
			||||||
		return true; | 
					 | 
				
			||||||
	} | 
					 | 
				
			||||||
	 | 
					 | 
				
			||||||
} | 
					 | 
				
			||||||
@ -1,22 +0,0 @@ | 
				
			|||||||
package mightypork.rogue.world.tile.tiles; | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import mightypork.rogue.world.tile.TileModel; | 
					 | 
				
			||||||
import mightypork.rogue.world.tile.TileRenderer; | 
					 | 
				
			||||||
import mightypork.rogue.world.tile.TileType; | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
public class WallTile extends SolidTile { | 
					 | 
				
			||||||
	 | 
					 | 
				
			||||||
	public WallTile(TileModel model, TileRenderer renderer) | 
					 | 
				
			||||||
	{ | 
					 | 
				
			||||||
		super(model, renderer); | 
					 | 
				
			||||||
	} | 
					 | 
				
			||||||
	 | 
					 | 
				
			||||||
	 | 
					 | 
				
			||||||
	@Override | 
					 | 
				
			||||||
	public TileType getType() | 
					 | 
				
			||||||
	{ | 
					 | 
				
			||||||
		return TileType.WALL; | 
					 | 
				
			||||||
	} | 
					 | 
				
			||||||
} | 
					 | 
				
			||||||
@ -0,0 +1,22 @@ | 
				
			|||||||
 | 
					package mightypork.rogue.world.tile.tiles.brick; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import mightypork.rogue.Res; | 
				
			||||||
 | 
					import mightypork.rogue.world.tile.TileModel; | 
				
			||||||
 | 
					import mightypork.rogue.world.tile.tiles.TileBaseDoor; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class TileBrickDoor extends TileBaseDoor { | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						public TileBrickDoor(TileModel model) | 
				
			||||||
 | 
						{ | 
				
			||||||
 | 
							//@formatter:off
 | 
				
			||||||
 | 
							super( | 
				
			||||||
 | 
								model, | 
				
			||||||
 | 
								Res.sheet("tile.brick.door.locked"), | 
				
			||||||
 | 
								Res.sheet("tile.brick.door.closed"), | 
				
			||||||
 | 
								Res.sheet("tile.brick.door.open") | 
				
			||||||
 | 
							); | 
				
			||||||
 | 
							//@formatter:on
 | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
					} | 
				
			||||||
@ -0,0 +1,16 @@ | 
				
			|||||||
 | 
					package mightypork.rogue.world.tile.tiles.brick; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import mightypork.gamecore.resources.textures.TxSheet; | 
				
			||||||
 | 
					import mightypork.rogue.Res; | 
				
			||||||
 | 
					import mightypork.rogue.world.tile.TileModel; | 
				
			||||||
 | 
					import mightypork.rogue.world.tile.tiles.TileBaseFloor; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class TileBrickFloor extends TileBaseFloor { | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						public TileBrickFloor(TileModel model) | 
				
			||||||
 | 
						{ | 
				
			||||||
 | 
							super(model, Res.sheet("tile.brick.floor")); | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
					} | 
				
			||||||
@ -0,0 +1,17 @@ | 
				
			|||||||
 | 
					package mightypork.rogue.world.tile.tiles.brick; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import mightypork.rogue.Res; | 
				
			||||||
 | 
					import mightypork.rogue.world.tile.TileModel; | 
				
			||||||
 | 
					import mightypork.rogue.world.tile.tiles.TileBaseDoor; | 
				
			||||||
 | 
					import mightypork.rogue.world.tile.tiles.TileBasePassage; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class TileBrickPassage extends TileBasePassage { | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						public TileBrickPassage(TileModel model) | 
				
			||||||
 | 
						{ | 
				
			||||||
 | 
							super(model, Res.sheet("tile.brick.passage")); | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
					} | 
				
			||||||
@ -0,0 +1,26 @@ | 
				
			|||||||
 | 
					package mightypork.rogue.world.tile.tiles.brick; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import mightypork.gamecore.util.math.color.Color; | 
				
			||||||
 | 
					import mightypork.gamecore.util.math.color.pal.RGB; | 
				
			||||||
 | 
					import mightypork.rogue.Res; | 
				
			||||||
 | 
					import mightypork.rogue.world.tile.TileModel; | 
				
			||||||
 | 
					import mightypork.rogue.world.tile.tiles.TileBaseDoor; | 
				
			||||||
 | 
					import mightypork.rogue.world.tile.tiles.TileBaseSecretDoor; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class TileBrickSecretDoor extends TileBaseSecretDoor { | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						public TileBrickSecretDoor(TileModel model) | 
				
			||||||
 | 
						{ | 
				
			||||||
 | 
							//@formatter:off
 | 
				
			||||||
 | 
							super( | 
				
			||||||
 | 
								model, | 
				
			||||||
 | 
								Res.sheet("tile.brick.door.secret"), | 
				
			||||||
 | 
								Res.sheet("tile.brick.door.closed"), | 
				
			||||||
 | 
								Res.sheet("tile.brick.door.open") | 
				
			||||||
 | 
							); | 
				
			||||||
 | 
							//@formatter:on
 | 
				
			||||||
 | 
							 | 
				
			||||||
 | 
							locked = true; // hide it
 | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					} | 
				
			||||||
@ -0,0 +1,16 @@ | 
				
			|||||||
 | 
					package mightypork.rogue.world.tile.tiles.brick; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import mightypork.gamecore.resources.textures.TxSheet; | 
				
			||||||
 | 
					import mightypork.rogue.Res; | 
				
			||||||
 | 
					import mightypork.rogue.world.tile.TileModel; | 
				
			||||||
 | 
					import mightypork.rogue.world.tile.tiles.TileBaseWall; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class TileBrickWall extends TileBaseWall { | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						public TileBrickWall(TileModel model) | 
				
			||||||
 | 
						{ | 
				
			||||||
 | 
							super(model, Res.sheet("tile.brick.wall")); | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
					} | 
				
			||||||
					Loading…
					
					
				
		Reference in new issue