cleanup & reorg
This commit is contained in:
@@ -113,6 +113,7 @@ public final class App extends BaseApp {
|
|||||||
Ion.registerBinary(Level.ION_MARK, Level.class);
|
Ion.registerBinary(Level.ION_MARK, Level.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void postInit()
|
protected void postInit()
|
||||||
{
|
{
|
||||||
|
|||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package mightypork.rogue.screens.gamescreen.gui;
|
package mightypork.rogue.screens.gamescreen;
|
||||||
|
|
||||||
|
|
||||||
import mightypork.gamecore.gui.AlignX;
|
import mightypork.gamecore.gui.AlignX;
|
||||||
@@ -9,9 +9,7 @@ import mightypork.gamecore.gui.screens.ScreenLayer;
|
|||||||
import mightypork.gamecore.input.KeyStroke;
|
import mightypork.gamecore.input.KeyStroke;
|
||||||
import mightypork.gamecore.input.Keys;
|
import mightypork.gamecore.input.Keys;
|
||||||
import mightypork.rogue.Res;
|
import mightypork.rogue.Res;
|
||||||
import mightypork.rogue.screens.gamescreen.gui.HeartBar;
|
import mightypork.rogue.world.gui.Minimap;
|
||||||
import mightypork.rogue.screens.gamescreen.gui.NavItemSlot;
|
|
||||||
import mightypork.rogue.screens.gamescreen.world.Minimap;
|
|
||||||
import mightypork.util.math.constraints.num.Num;
|
import mightypork.util.math.constraints.num.Num;
|
||||||
import mightypork.util.math.constraints.rect.Rect;
|
import mightypork.util.math.constraints.rect.Rect;
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package mightypork.rogue.screens.gamescreen.gui;
|
package mightypork.rogue.screens.gamescreen;
|
||||||
|
|
||||||
|
|
||||||
import mightypork.gamecore.control.events.input.MouseMotionEvent;
|
import mightypork.gamecore.control.events.input.MouseMotionEvent;
|
||||||
@@ -32,6 +32,7 @@ public class ScreenGame extends LayeredScreen {
|
|||||||
WorldProvider.get().setListening(true);
|
WorldProvider.get().setListening(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onScreenLeave()
|
protected void onScreenLeave()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -3,9 +3,9 @@ package mightypork.rogue.screens.gamescreen;
|
|||||||
|
|
||||||
import mightypork.gamecore.gui.screens.Screen;
|
import mightypork.gamecore.gui.screens.Screen;
|
||||||
import mightypork.gamecore.gui.screens.ScreenLayer;
|
import mightypork.gamecore.gui.screens.ScreenLayer;
|
||||||
import mightypork.rogue.screens.gamescreen.world.MIPClickPathfWalk;
|
import mightypork.rogue.world.gui.MapView;
|
||||||
import mightypork.rogue.screens.gamescreen.world.MIPKeyWalk;
|
import mightypork.rogue.world.gui.interaction.MIPClickPathfWalk;
|
||||||
import mightypork.rogue.screens.gamescreen.world.MapView;
|
import mightypork.rogue.world.gui.interaction.MIPKeyWalk;
|
||||||
import mightypork.util.math.constraints.num.Num;
|
import mightypork.util.math.constraints.num.Num;
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -22,10 +22,10 @@ public abstract class PlayerControl {
|
|||||||
|
|
||||||
private World getWorld2()
|
private World getWorld2()
|
||||||
{
|
{
|
||||||
World newWorld = getWorld();
|
final World newWorld = getWorld();
|
||||||
|
|
||||||
if (newWorld != lastWorld) {
|
if (newWorld != lastWorld) {
|
||||||
for (EntityMoveListener eml : playerMoveListeners) {
|
for (final EntityMoveListener eml : playerMoveListeners) {
|
||||||
newWorld.getPlayerEntity().pos.addMoveListener(eml);
|
newWorld.getPlayerEntity().pos.addMoveListener(eml);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -39,7 +39,7 @@ public abstract class PlayerControl {
|
|||||||
|
|
||||||
private Entity getPlayerEntity()
|
private Entity getPlayerEntity()
|
||||||
{
|
{
|
||||||
if(getWorld2() == null) return null;
|
if (getWorld2() == null) return null;
|
||||||
|
|
||||||
return getWorld2().getPlayerEntity();
|
return getWorld2().getPlayerEntity();
|
||||||
}
|
}
|
||||||
@@ -82,7 +82,7 @@ public abstract class PlayerControl {
|
|||||||
public void addMoveListener(EntityMoveListener eml)
|
public void addMoveListener(EntityMoveListener eml)
|
||||||
{
|
{
|
||||||
playerMoveListeners.add(eml);
|
playerMoveListeners.add(eml);
|
||||||
if(getPlayerEntity() != null) {
|
if (getPlayerEntity() != null) {
|
||||||
getPlayerEntity().pos.addMoveListener(eml);
|
getPlayerEntity().pos.addMoveListener(eml);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ public class World implements IonBundled, Updateable {
|
|||||||
in.loadBundled("player", playerInfo);
|
in.loadBundled("player", playerInfo);
|
||||||
|
|
||||||
playerEntity = levels.get(playerInfo.getLevel()).getEntity(playerInfo.getEID());
|
playerEntity = levels.get(playerInfo.getLevel()).getEntity(playerInfo.getEID());
|
||||||
if(playerEntity == null) throw new RuntimeException("Player entity not found in the world.");
|
if (playerEntity == null) throw new RuntimeException("Player entity not found in the world.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ import mightypork.util.control.eventbus.clients.RootBusNode;
|
|||||||
import mightypork.util.files.ion.Ion;
|
import mightypork.util.files.ion.Ion;
|
||||||
|
|
||||||
|
|
||||||
public class WorldProvider extends RootBusNode{
|
public class WorldProvider extends RootBusNode {
|
||||||
|
|
||||||
public static synchronized void init(BusAccess busAccess)
|
public static synchronized void init(BusAccess busAccess)
|
||||||
{
|
{
|
||||||
@@ -21,7 +21,8 @@ public class WorldProvider extends RootBusNode{
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public WorldProvider(BusAccess busAccess) {
|
public WorldProvider(BusAccess busAccess)
|
||||||
|
{
|
||||||
super(busAccess);
|
super(busAccess);
|
||||||
setListening(false);
|
setListening(false);
|
||||||
}
|
}
|
||||||
@@ -31,9 +32,7 @@ public class WorldProvider extends RootBusNode{
|
|||||||
|
|
||||||
public static WorldProvider get()
|
public static WorldProvider get()
|
||||||
{
|
{
|
||||||
if (inst == null) {
|
if (inst == null) { throw new IllegalStateException("World provider not initialized."); }
|
||||||
throw new IllegalStateException("World provider not initialized.");
|
|
||||||
}
|
|
||||||
|
|
||||||
return inst;
|
return inst;
|
||||||
}
|
}
|
||||||
@@ -60,7 +59,9 @@ public class WorldProvider extends RootBusNode{
|
|||||||
return world;
|
return world;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setWorld(World newWorld) {
|
|
||||||
|
private void setWorld(World newWorld)
|
||||||
|
{
|
||||||
|
|
||||||
if (world != null) removeChildClient(world);
|
if (world != null) removeChildClient(world);
|
||||||
world = newWorld;
|
world = newWorld;
|
||||||
|
|||||||
@@ -38,7 +38,8 @@ public class WorldRenderer extends RectProxy {
|
|||||||
private TileRenderContext trc;
|
private TileRenderContext trc;
|
||||||
|
|
||||||
|
|
||||||
public WorldRenderer(Rect viewport, Num tileSize) {
|
public WorldRenderer(Rect viewport, Num tileSize)
|
||||||
|
{
|
||||||
super(viewport);
|
super(viewport);
|
||||||
|
|
||||||
this.tileSize = tileSize;
|
this.tileSize = tileSize;
|
||||||
@@ -69,7 +70,7 @@ public class WorldRenderer extends RectProxy {
|
|||||||
|
|
||||||
private VectConst getOffset()
|
private VectConst getOffset()
|
||||||
{
|
{
|
||||||
Entity ent = WorldProvider.get().getPlayerEntity();
|
final Entity ent = WorldProvider.get().getPlayerEntity();
|
||||||
return Vect.make(ent.pos.getVisualPos().neg().sub(0.5, 0.5)).freeze();
|
return Vect.make(ent.pos.getVisualPos().neg().sub(0.5, 0.5)).freeze();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -85,7 +86,7 @@ public class WorldRenderer extends RectProxy {
|
|||||||
Render.translate(getOffset());
|
Render.translate(getOffset());
|
||||||
|
|
||||||
// tiles to render
|
// tiles to render
|
||||||
Entity ent = WorldProvider.get().getPlayerEntity();
|
final Entity ent = WorldProvider.get().getPlayerEntity();
|
||||||
|
|
||||||
final Coord pos = ent.pos.getCoord();
|
final Coord pos = ent.pos.getCoord();
|
||||||
final double w = width().value();
|
final double w = width().value();
|
||||||
@@ -131,7 +132,7 @@ public class WorldRenderer extends RectProxy {
|
|||||||
for (final Entity e : activeLevel.getEntities()) {
|
for (final Entity e : activeLevel.getEntities()) {
|
||||||
|
|
||||||
// avoid entities out of view rect
|
// avoid entities out of view rect
|
||||||
Vect entPos = e.pos.getVisualPos();
|
final Vect entPos = e.pos.getVisualPos();
|
||||||
final int x = (int) Math.round(entPos.x());
|
final int x = (int) Math.round(entPos.x());
|
||||||
final int y = (int) Math.round(entPos.y());
|
final int y = (int) Math.round(entPos.y());
|
||||||
|
|
||||||
|
|||||||
@@ -23,13 +23,9 @@ public final class Entities {
|
|||||||
|
|
||||||
public static void register(int id, EntityModel model)
|
public static void register(int id, EntityModel model)
|
||||||
{
|
{
|
||||||
if (id < 0 || id >= entities.length) {
|
if (id < 0 || id >= entities.length) { throw new IllegalArgumentException("Entity model ID " + id + " is out of range."); }
|
||||||
throw new IllegalArgumentException("Entity model ID " + id + " is out of range.");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (entities[id] != null) {
|
if (entities[id] != null) { throw new IllegalArgumentException("Entity model ID " + id + " already in use."); }
|
||||||
throw new IllegalArgumentException("Entity model ID " + id + " already in use.");
|
|
||||||
}
|
|
||||||
|
|
||||||
entities[id] = model;
|
entities[id] = model;
|
||||||
}
|
}
|
||||||
@@ -39,9 +35,7 @@ public final class Entities {
|
|||||||
{
|
{
|
||||||
final EntityModel e = entities[id];
|
final EntityModel e = entities[id];
|
||||||
|
|
||||||
if (e == null) {
|
if (e == null) { throw new IllegalArgumentException("No entity model with ID " + id + "."); }
|
||||||
throw new IllegalArgumentException("No entity model with ID " + id + ".");
|
|
||||||
}
|
|
||||||
|
|
||||||
return e;
|
return e;
|
||||||
}
|
}
|
||||||
@@ -58,7 +52,7 @@ public final class Entities {
|
|||||||
|
|
||||||
public static void saveEntities(IonOutput out, Collection<Entity> entities) throws IOException
|
public static void saveEntities(IonOutput out, Collection<Entity> entities) throws IOException
|
||||||
{
|
{
|
||||||
for (Entity entity : entities) {
|
for (final Entity entity : entities) {
|
||||||
out.startEntry();
|
out.startEntry();
|
||||||
saveEntity(out, entity);
|
saveEntity(out, entity);
|
||||||
}
|
}
|
||||||
@@ -69,16 +63,16 @@ public final class Entities {
|
|||||||
|
|
||||||
public static Entity loadEntity(IonInput in) throws IOException
|
public static Entity loadEntity(IonInput in) throws IOException
|
||||||
{
|
{
|
||||||
int id = in.readIntByte();
|
final int id = in.readIntByte();
|
||||||
|
|
||||||
EntityModel model = get(id);
|
final EntityModel model = get(id);
|
||||||
return model.loadEntity(in);
|
return model.loadEntity(in);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public static void saveEntity(IonOutput out, Entity entity) throws IOException
|
public static void saveEntity(IonOutput out, Entity entity) throws IOException
|
||||||
{
|
{
|
||||||
EntityModel model = entity.getModel();
|
final EntityModel model = entity.getModel();
|
||||||
|
|
||||||
out.writeIntByte(model.id);
|
out.writeIntByte(model.id);
|
||||||
|
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ import java.util.Map;
|
|||||||
import java.util.Map.Entry;
|
import java.util.Map.Entry;
|
||||||
|
|
||||||
import mightypork.rogue.world.World;
|
import mightypork.rogue.world.World;
|
||||||
import mightypork.rogue.world.entity.modules.EntityModule;
|
|
||||||
import mightypork.rogue.world.entity.modules.EntityModuleHealth;
|
import mightypork.rogue.world.entity.modules.EntityModuleHealth;
|
||||||
import mightypork.rogue.world.entity.modules.EntityModulePosition;
|
import mightypork.rogue.world.entity.modules.EntityModulePosition;
|
||||||
import mightypork.rogue.world.entity.modules.EntityMoveListener;
|
import mightypork.rogue.world.entity.modules.EntityMoveListener;
|
||||||
@@ -41,7 +40,8 @@ public abstract class Entity implements IonBundled, Updateable, EntityMoveListen
|
|||||||
public final EntityModuleHealth health = new EntityModuleHealth(this);
|
public final EntityModuleHealth health = new EntityModuleHealth(this);
|
||||||
|
|
||||||
|
|
||||||
public Entity(EntityModel model, int eid) {
|
public Entity(EntityModel model, int eid)
|
||||||
|
{
|
||||||
|
|
||||||
this.entityId = eid;
|
this.entityId = eid;
|
||||||
this.model = model;
|
this.model = model;
|
||||||
@@ -57,7 +57,7 @@ public abstract class Entity implements IonBundled, Updateable, EntityMoveListen
|
|||||||
public void save(IonBundle bundle) throws IOException
|
public void save(IonBundle bundle) throws IOException
|
||||||
{
|
{
|
||||||
bundle.put("eid", entityId);
|
bundle.put("eid", entityId);
|
||||||
for (Entry<String, EntityModule> entry : modules.entrySet()) {
|
for (final Entry<String, EntityModule> entry : modules.entrySet()) {
|
||||||
bundle.putBundled(entry.getKey(), entry.getValue());
|
bundle.putBundled(entry.getKey(), entry.getValue());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -69,7 +69,7 @@ public abstract class Entity implements IonBundled, Updateable, EntityMoveListen
|
|||||||
entityId = bundle.get("eid", -1);
|
entityId = bundle.get("eid", -1);
|
||||||
if (entityId < 0) throw new IllegalValueException("Bad entity id: " + entityId);
|
if (entityId < 0) throw new IllegalValueException("Bad entity id: " + entityId);
|
||||||
|
|
||||||
for (Entry<String, EntityModule> entry : modules.entrySet()) {
|
for (final Entry<String, EntityModule> entry : modules.entrySet()) {
|
||||||
bundle.loadBundled(entry.getKey(), entry.getValue());
|
bundle.loadBundled(entry.getKey(), entry.getValue());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -117,7 +117,7 @@ public abstract class Entity implements IonBundled, Updateable, EntityMoveListen
|
|||||||
@Override
|
@Override
|
||||||
public void update(double delta)
|
public void update(double delta)
|
||||||
{
|
{
|
||||||
for (Entry<String, EntityModule> entry : modules.entrySet()) {
|
for (final Entry<String, EntityModule> entry : modules.entrySet()) {
|
||||||
entry.getValue().update(delta);
|
entry.getValue().update(delta);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,11 +27,12 @@ public final class EntityModel {
|
|||||||
this.tileClass = entity;
|
this.tileClass = entity;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public Entity createEntity(int eid)
|
public Entity createEntity(int eid)
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
return tileClass.getConstructor(EntityModel.class, int.class).newInstance(this, eid);
|
return tileClass.getConstructor(EntityModel.class, int.class).newInstance(this, eid);
|
||||||
} catch (Exception e) {
|
} catch (final Exception e) {
|
||||||
throw new RuntimeException("Could not instantiate a tile.", e);
|
throw new RuntimeException("Could not instantiate a tile.", e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -39,8 +40,8 @@ public final class EntityModel {
|
|||||||
|
|
||||||
public Entity loadEntity(IonInput in) throws IOException
|
public Entity loadEntity(IonInput in) throws IOException
|
||||||
{
|
{
|
||||||
IonBundle bundle = in.readBundle();
|
final IonBundle bundle = in.readBundle();
|
||||||
Entity ent = createEntity(-1);
|
final Entity ent = createEntity(-1);
|
||||||
ent.load(bundle);
|
ent.load(bundle);
|
||||||
return ent;
|
return ent;
|
||||||
}
|
}
|
||||||
@@ -48,7 +49,7 @@ public final class EntityModel {
|
|||||||
|
|
||||||
public void saveEntity(IonOutput out, Entity entity) throws IOException
|
public void saveEntity(IonOutput out, Entity entity) throws IOException
|
||||||
{
|
{
|
||||||
IonBundle bundle = new IonBundle();
|
final IonBundle bundle = new IonBundle();
|
||||||
entity.save(bundle);
|
entity.save(bundle);
|
||||||
out.writeBundle(bundle);
|
out.writeBundle(bundle);
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-1
@@ -1,4 +1,5 @@
|
|||||||
package mightypork.rogue.world.entity.modules;
|
package mightypork.rogue.world.entity;
|
||||||
|
|
||||||
|
|
||||||
import mightypork.util.files.ion.IonBundled;
|
import mightypork.util.files.ion.IonBundled;
|
||||||
import mightypork.util.timing.Updateable;
|
import mightypork.util.timing.Updateable;
|
||||||
@@ -13,7 +13,8 @@ public abstract class EntityPathfindingContext implements PathFindingContext {
|
|||||||
protected final Entity entity;
|
protected final Entity entity;
|
||||||
|
|
||||||
|
|
||||||
public EntityPathfindingContext(Entity entity) {
|
public EntityPathfindingContext(Entity entity)
|
||||||
|
{
|
||||||
this.entity = entity;
|
this.entity = entity;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,20 +1,24 @@
|
|||||||
package mightypork.rogue.world.entity;
|
package mightypork.rogue.world.entity;
|
||||||
|
|
||||||
|
|
||||||
import mightypork.rogue.world.Coord;
|
import mightypork.rogue.world.Coord;
|
||||||
|
|
||||||
|
|
||||||
public class SimpleEntityPathFindingContext extends EntityPathfindingContext {
|
public class SimpleEntityPathFindingContext extends EntityPathfindingContext {
|
||||||
|
|
||||||
public SimpleEntityPathFindingContext(Entity entity) {
|
public SimpleEntityPathFindingContext(Entity entity)
|
||||||
|
{
|
||||||
super(entity);
|
super(entity);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getCost(Coord from, Coord to)
|
public int getCost(Coord from, Coord to)
|
||||||
{
|
{
|
||||||
return 10;
|
return 10;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getMinCost()
|
public int getMinCost()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -21,9 +21,7 @@ public class PlayerEntity extends Entity {
|
|||||||
public int getCost(Coord from, Coord to)
|
public int getCost(Coord from, Coord to)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (!getLevel().getTile(pos.getCoord()).isExplored()) {
|
if (!getLevel().getTile(pos.getCoord()).isExplored()) { return 1000; }
|
||||||
return 1000;
|
|
||||||
}
|
|
||||||
|
|
||||||
return super.getCost(from, to);
|
return super.getCost(from, to);
|
||||||
|
|
||||||
@@ -33,7 +31,8 @@ public class PlayerEntity extends Entity {
|
|||||||
private final EntityRenderer renderer = new SimpleLeftRightMobRenderer(this, "sprite.player");
|
private final EntityRenderer renderer = new SimpleLeftRightMobRenderer(this, "sprite.player");
|
||||||
|
|
||||||
|
|
||||||
public PlayerEntity(EntityModel model, int eid) {
|
public PlayerEntity(EntityModel model, int eid)
|
||||||
|
{
|
||||||
super(model, eid);
|
super(model, eid);
|
||||||
|
|
||||||
// init default values
|
// init default values
|
||||||
@@ -47,6 +46,7 @@ public class PlayerEntity extends Entity {
|
|||||||
return pathfc;
|
return pathfc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setLevel(Level level)
|
public void setLevel(Level level)
|
||||||
{
|
{
|
||||||
@@ -61,6 +61,7 @@ public class PlayerEntity extends Entity {
|
|||||||
renderer.render(context);
|
renderer.render(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onStepFinished(Entity entity)
|
public void onStepFinished(Entity entity)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ package mightypork.rogue.world.entity.modules;
|
|||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
import mightypork.rogue.world.entity.Entity;
|
import mightypork.rogue.world.entity.Entity;
|
||||||
|
import mightypork.rogue.world.entity.EntityModule;
|
||||||
import mightypork.util.error.IllegalValueException;
|
import mightypork.util.error.IllegalValueException;
|
||||||
import mightypork.util.files.ion.IonBundle;
|
import mightypork.util.files.ion.IonBundle;
|
||||||
import mightypork.util.math.Calc;
|
import mightypork.util.math.Calc;
|
||||||
@@ -11,7 +12,8 @@ import mightypork.util.math.Calc;
|
|||||||
|
|
||||||
public class EntityModuleHealth implements EntityModule {
|
public class EntityModuleHealth implements EntityModule {
|
||||||
|
|
||||||
public EntityModuleHealth(Entity entity) {
|
public EntityModuleHealth(Entity entity)
|
||||||
|
{
|
||||||
this.entity = entity;
|
this.entity = entity;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import java.util.Set;
|
|||||||
|
|
||||||
import mightypork.rogue.world.Coord;
|
import mightypork.rogue.world.Coord;
|
||||||
import mightypork.rogue.world.entity.Entity;
|
import mightypork.rogue.world.entity.Entity;
|
||||||
|
import mightypork.rogue.world.entity.EntityModule;
|
||||||
import mightypork.rogue.world.entity.PathStep;
|
import mightypork.rogue.world.entity.PathStep;
|
||||||
import mightypork.rogue.world.pathfinding.PathFinder;
|
import mightypork.rogue.world.pathfinding.PathFinder;
|
||||||
import mightypork.rogue.world.pathfinding.PathFindingContext;
|
import mightypork.rogue.world.pathfinding.PathFindingContext;
|
||||||
@@ -36,7 +37,8 @@ public class EntityModulePosition implements EntityModule {
|
|||||||
private final Set<EntityMoveListener> moveListeners = new LinkedHashSet<>();
|
private final Set<EntityMoveListener> moveListeners = new LinkedHashSet<>();
|
||||||
|
|
||||||
|
|
||||||
public EntityModulePosition(Entity entity) {
|
public EntityModulePosition(Entity entity)
|
||||||
|
{
|
||||||
this.entity = entity;
|
this.entity = entity;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -144,7 +146,7 @@ public class EntityModulePosition implements EntityModule {
|
|||||||
public boolean navigateTo(Coord target)
|
public boolean navigateTo(Coord target)
|
||||||
{
|
{
|
||||||
if (target.equals(getCoord())) return true;
|
if (target.equals(getCoord())) return true;
|
||||||
PathFindingContext pfc = entity.getPathfindingContext();
|
final PathFindingContext pfc = entity.getPathfindingContext();
|
||||||
final List<PathStep> newPath = PathFinder.findPathRelative(pfc, entityPos.getCoord(), target);
|
final List<PathStep> newPath = PathFinder.findPathRelative(pfc, entityPos.getCoord(), target);
|
||||||
|
|
||||||
if (newPath == null) return false;
|
if (newPath == null) return false;
|
||||||
|
|||||||
@@ -1,10 +1,9 @@
|
|||||||
package mightypork.rogue.world.entity.modules;
|
package mightypork.rogue.world.entity.modules;
|
||||||
|
|
||||||
|
|
||||||
import mightypork.rogue.world.entity.Entity;
|
import mightypork.rogue.world.entity.Entity;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public interface EntityMoveListener {
|
public interface EntityMoveListener {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -181,6 +181,6 @@ public class EntityPos implements IonBundled, Updateable {
|
|||||||
|
|
||||||
public VectConst getVisualPos()
|
public VectConst getVisualPos()
|
||||||
{
|
{
|
||||||
return Vect.make(walkOffset.x()+coord.x, walkOffset.y()+coord.y);
|
return Vect.make(walkOffset.x() + coord.x, walkOffset.y() + coord.y);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,7 +10,8 @@ public abstract class EntityRenderer {
|
|||||||
protected final Entity entity;
|
protected final Entity entity;
|
||||||
|
|
||||||
|
|
||||||
public EntityRenderer(Entity entity) {
|
public EntityRenderer(Entity entity)
|
||||||
|
{
|
||||||
this.entity = entity;
|
this.entity = entity;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -17,7 +17,8 @@ public class SimpleLeftRightMobRenderer extends EntityRenderer {
|
|||||||
private final TxSheet sheet;
|
private final TxSheet sheet;
|
||||||
|
|
||||||
|
|
||||||
public SimpleLeftRightMobRenderer(Entity entity, String sheetKey) {
|
public SimpleLeftRightMobRenderer(Entity entity, String sheetKey)
|
||||||
|
{
|
||||||
super(entity);
|
super(entity);
|
||||||
this.sheet = Res.getTxSheet(sheetKey);
|
this.sheet = Res.getTxSheet(sheetKey);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,9 +29,9 @@ public class LevelGenerator {
|
|||||||
// start
|
// start
|
||||||
map.addRoom(ROOM_SQUARE);
|
map.addRoom(ROOM_SQUARE);
|
||||||
|
|
||||||
for (int i = 0; i < 2+complexity/2+rand.nextInt((int) (1+complexity*0.3)); i++) {
|
for (int i = 0; i < 2 + complexity / 2 + rand.nextInt((int) (1 + complexity * 0.3)); i++) {
|
||||||
map.addRoom(ROOM_SQUARE);
|
map.addRoom(ROOM_SQUARE);
|
||||||
if(rand.nextInt(4)>0) map.addRoom(DEAD_END);
|
if (rand.nextInt(4) > 0) map.addRoom(DEAD_END);
|
||||||
}
|
}
|
||||||
|
|
||||||
map.buildCorridors();
|
map.buildCorridors();
|
||||||
|
|||||||
@@ -77,8 +77,10 @@ public class ScratchMap {
|
|||||||
return PathFinder.CORNER_HEURISTIC;
|
return PathFinder.CORNER_HEURISTIC;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Coord[] getWalkSides() {
|
public Coord[] getWalkSides()
|
||||||
|
{
|
||||||
return Sides.cardinalSides;
|
return Sides.cardinalSides;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -261,7 +263,7 @@ public class ScratchMap {
|
|||||||
Log.f3("Building corridors.");
|
Log.f3("Building corridors.");
|
||||||
|
|
||||||
Coord start = nodes.get(0);
|
Coord start = nodes.get(0);
|
||||||
Set<Coord> starts = new HashSet<>();
|
final Set<Coord> starts = new HashSet<>();
|
||||||
|
|
||||||
for (int i = 0; i < 2 + rooms.size() / 5; i++) {
|
for (int i = 0; i < 2 + rooms.size() / 5; i++) {
|
||||||
if (!starts.contains(start)) {
|
if (!starts.contains(start)) {
|
||||||
|
|||||||
+14
-3
@@ -1,4 +1,4 @@
|
|||||||
package mightypork.rogue.screens.gamescreen.world;
|
package mightypork.rogue.world.gui;
|
||||||
|
|
||||||
|
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
@@ -16,6 +16,7 @@ import mightypork.rogue.world.WorldProvider;
|
|||||||
import mightypork.rogue.world.WorldRenderer;
|
import mightypork.rogue.world.WorldRenderer;
|
||||||
import mightypork.rogue.world.entity.Entity;
|
import mightypork.rogue.world.entity.Entity;
|
||||||
import mightypork.rogue.world.entity.modules.EntityMoveListener;
|
import mightypork.rogue.world.entity.modules.EntityMoveListener;
|
||||||
|
import mightypork.rogue.world.gui.interaction.MapInteractionPlugin;
|
||||||
import mightypork.util.math.Easing;
|
import mightypork.util.math.Easing;
|
||||||
import mightypork.util.math.constraints.num.Num;
|
import mightypork.util.math.constraints.num.Num;
|
||||||
import mightypork.util.math.constraints.num.mutable.NumAnimated;
|
import mightypork.util.math.constraints.num.mutable.NumAnimated;
|
||||||
@@ -23,6 +24,11 @@ import mightypork.util.math.constraints.vect.Vect;
|
|||||||
import mightypork.util.timing.Updateable;
|
import mightypork.util.timing.Updateable;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Level display component
|
||||||
|
*
|
||||||
|
* @author MightyPork
|
||||||
|
*/
|
||||||
public class MapView extends InputComponent implements KeyListener, MouseButtonListener, EntityMoveListener, Updateable {
|
public class MapView extends InputComponent implements KeyListener, MouseButtonListener, EntityMoveListener, Updateable {
|
||||||
|
|
||||||
protected final WorldRenderer worldRenderer;
|
protected final WorldRenderer worldRenderer;
|
||||||
@@ -109,8 +115,8 @@ public class MapView extends InputComponent implements KeyListener, MouseButtonL
|
|||||||
p.onKey(this, pc, event.getKey(), event.isDown());
|
p.onKey(this, pc, event.getKey(), event.isDown());
|
||||||
}
|
}
|
||||||
|
|
||||||
if(event.getKey() == Keys.Z) {
|
if (event.getKey() == Keys.Z) {
|
||||||
if(event.isDown()) {
|
if (event.isDown()) {
|
||||||
zoom.fadeIn(1);
|
zoom.fadeIn(1);
|
||||||
} else {
|
} else {
|
||||||
zoom.fadeOut(1);
|
zoom.fadeOut(1);
|
||||||
@@ -123,6 +129,11 @@ public class MapView extends InputComponent implements KeyListener, MouseButtonL
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add interaction plugin
|
||||||
|
*
|
||||||
|
* @param plugin
|
||||||
|
*/
|
||||||
public void addPlugin(MapInteractionPlugin plugin)
|
public void addPlugin(MapInteractionPlugin plugin)
|
||||||
{
|
{
|
||||||
plugins.add(plugin);
|
plugins.add(plugin);
|
||||||
+3
-6
@@ -1,4 +1,4 @@
|
|||||||
package mightypork.rogue.screens.gamescreen.world;
|
package mightypork.rogue.world.gui;
|
||||||
|
|
||||||
|
|
||||||
import mightypork.gamecore.control.events.input.MouseButtonEvent;
|
import mightypork.gamecore.control.events.input.MouseButtonEvent;
|
||||||
@@ -6,7 +6,6 @@ import mightypork.gamecore.control.events.input.MouseButtonListener;
|
|||||||
import mightypork.gamecore.gui.components.InputComponent;
|
import mightypork.gamecore.gui.components.InputComponent;
|
||||||
import mightypork.gamecore.render.Render;
|
import mightypork.gamecore.render.Render;
|
||||||
import mightypork.rogue.world.Coord;
|
import mightypork.rogue.world.Coord;
|
||||||
import mightypork.rogue.world.World;
|
|
||||||
import mightypork.rogue.world.WorldProvider;
|
import mightypork.rogue.world.WorldProvider;
|
||||||
import mightypork.rogue.world.entity.Entity;
|
import mightypork.rogue.world.entity.Entity;
|
||||||
import mightypork.rogue.world.level.Level;
|
import mightypork.rogue.world.level.Level;
|
||||||
@@ -29,17 +28,15 @@ public class Minimap extends InputComponent implements MouseButtonListener {
|
|||||||
private final Color playerColor = RGB.RED;
|
private final Color playerColor = RGB.RED;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void renderComponent()
|
protected void renderComponent()
|
||||||
{
|
{
|
||||||
Color.pushAlpha(translucency);
|
Color.pushAlpha(translucency);
|
||||||
|
|
||||||
final Level lvl = WorldProvider.get().getCurrentLevel();
|
final Level lvl = WorldProvider.get().getCurrentLevel();
|
||||||
unit = (int) Math.min(Math.max(2, Math.ceil((height().value()/2) / (lvl.getHeight() + 2))), 6);
|
unit = (int) Math.min(Math.max(2, Math.ceil((height().value() / 2) / (lvl.getHeight() + 2))), 6);
|
||||||
|
|
||||||
final World w = lvl.getWorld();
|
final Entity e = WorldProvider.get().getPlayerEntity();
|
||||||
final Entity e = w.getPlayerEntity();
|
|
||||||
final Vect plCoord = e.pos.getVisualPos();
|
final Vect plCoord = e.pos.getVisualPos();
|
||||||
|
|
||||||
final int lw = lvl.getWidth();
|
final int lw = lvl.getWidth();
|
||||||
+2
-1
@@ -1,9 +1,10 @@
|
|||||||
package mightypork.rogue.screens.gamescreen.world;
|
package mightypork.rogue.world.gui.interaction;
|
||||||
|
|
||||||
|
|
||||||
import mightypork.gamecore.input.InputSystem;
|
import mightypork.gamecore.input.InputSystem;
|
||||||
import mightypork.rogue.world.Coord;
|
import mightypork.rogue.world.Coord;
|
||||||
import mightypork.rogue.world.PlayerControl;
|
import mightypork.rogue.world.PlayerControl;
|
||||||
|
import mightypork.rogue.world.gui.MapView;
|
||||||
import mightypork.util.math.constraints.vect.Vect;
|
import mightypork.util.math.constraints.vect.Vect;
|
||||||
|
|
||||||
|
|
||||||
+2
-1
@@ -1,9 +1,10 @@
|
|||||||
package mightypork.rogue.screens.gamescreen.world;
|
package mightypork.rogue.world.gui.interaction;
|
||||||
|
|
||||||
|
|
||||||
import mightypork.gamecore.input.InputSystem;
|
import mightypork.gamecore.input.InputSystem;
|
||||||
import mightypork.gamecore.input.Keys;
|
import mightypork.gamecore.input.Keys;
|
||||||
import mightypork.rogue.world.PlayerControl;
|
import mightypork.rogue.world.PlayerControl;
|
||||||
|
import mightypork.rogue.world.gui.MapView;
|
||||||
import mightypork.util.math.constraints.vect.Vect;
|
import mightypork.util.math.constraints.vect.Vect;
|
||||||
|
|
||||||
|
|
||||||
+2
-1
@@ -1,9 +1,10 @@
|
|||||||
package mightypork.rogue.screens.gamescreen.world;
|
package mightypork.rogue.world.gui.interaction;
|
||||||
|
|
||||||
|
|
||||||
import mightypork.gamecore.input.InputSystem;
|
import mightypork.gamecore.input.InputSystem;
|
||||||
import mightypork.rogue.world.Coord;
|
import mightypork.rogue.world.Coord;
|
||||||
import mightypork.rogue.world.PlayerControl;
|
import mightypork.rogue.world.PlayerControl;
|
||||||
|
import mightypork.rogue.world.gui.MapView;
|
||||||
import mightypork.util.math.Calc.Deg;
|
import mightypork.util.math.Calc.Deg;
|
||||||
import mightypork.util.math.Polar;
|
import mightypork.util.math.Polar;
|
||||||
import mightypork.util.math.constraints.vect.Vect;
|
import mightypork.util.math.constraints.vect.Vect;
|
||||||
+2
-1
@@ -1,7 +1,8 @@
|
|||||||
package mightypork.rogue.screens.gamescreen.world;
|
package mightypork.rogue.world.gui.interaction;
|
||||||
|
|
||||||
|
|
||||||
import mightypork.rogue.world.PlayerControl;
|
import mightypork.rogue.world.PlayerControl;
|
||||||
|
import mightypork.rogue.world.gui.MapView;
|
||||||
import mightypork.util.math.constraints.vect.Vect;
|
import mightypork.util.math.constraints.vect.Vect;
|
||||||
|
|
||||||
|
|
||||||
@@ -53,11 +53,13 @@ public class Level implements MapAccess, IonBinary {
|
|||||||
private transient NoiseGen noiseGen;
|
private transient NoiseGen noiseGen;
|
||||||
|
|
||||||
|
|
||||||
public Level() {
|
public Level()
|
||||||
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public Level(int width, int height) {
|
public Level(int width, int height)
|
||||||
|
{
|
||||||
size.setTo(width, height);
|
size.setTo(width, height);
|
||||||
buildArray();
|
buildArray();
|
||||||
}
|
}
|
||||||
@@ -327,16 +329,16 @@ public class Level implements MapAccess, IonBinary {
|
|||||||
|
|
||||||
public void explore(Coord center)
|
public void explore(Coord center)
|
||||||
{
|
{
|
||||||
Collection<Coord> filled = new HashSet<>();
|
final Collection<Coord> filled = new HashSet<>();
|
||||||
|
|
||||||
FloodFill.fill(center, exploreFc, filled);
|
FloodFill.fill(center, exploreFc, filled);
|
||||||
|
|
||||||
for (Coord c : filled) {
|
for (final Coord c : filled) {
|
||||||
getTile(c).setExplored();
|
getTile(c).setExplored();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private FillContext exploreFc = new FillContext() {
|
private final FillContext exploreFc = new FillContext() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Coord[] getSpreadSides()
|
public Coord[] getSpreadSides()
|
||||||
@@ -355,7 +357,7 @@ public class Level implements MapAccess, IonBinary {
|
|||||||
@Override
|
@Override
|
||||||
public boolean canSpreadFrom(Coord pos)
|
public boolean canSpreadFrom(Coord pos)
|
||||||
{
|
{
|
||||||
Tile t = getTile(pos);
|
final Tile t = getTile(pos);
|
||||||
return t.isWalkable() && t.getType() != TileType.DOOR;
|
return t.isWalkable() && t.getType() != TileType.DOOR;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -363,7 +365,7 @@ public class Level implements MapAccess, IonBinary {
|
|||||||
@Override
|
@Override
|
||||||
public boolean canEnter(Coord pos)
|
public boolean canEnter(Coord pos)
|
||||||
{
|
{
|
||||||
Tile t = getTile(pos);
|
final Tile t = getTile(pos);
|
||||||
return !t.isNull();
|
return !t.isNull();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -11,8 +11,10 @@ public interface FillContext {
|
|||||||
|
|
||||||
boolean canSpreadFrom(Coord pos);
|
boolean canSpreadFrom(Coord pos);
|
||||||
|
|
||||||
|
|
||||||
Coord[] getSpreadSides();
|
Coord[] getSpreadSides();
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the max distance filled form start point. Use -1 for unlimited range.
|
* Get the max distance filled form start point. Use -1 for unlimited range.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ public class FloodFill {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Fill an area
|
* Fill an area
|
||||||
|
*
|
||||||
* @param start start point
|
* @param start start point
|
||||||
* @param context filling context
|
* @param context filling context
|
||||||
* @param foundNodes collection to put filled coords in
|
* @param foundNodes collection to put filled coords in
|
||||||
@@ -19,29 +20,29 @@ public class FloodFill {
|
|||||||
*/
|
*/
|
||||||
public static final boolean fill(Coord start, FillContext context, Collection<Coord> foundNodes)
|
public static final boolean fill(Coord start, FillContext context, Collection<Coord> foundNodes)
|
||||||
{
|
{
|
||||||
Queue<Coord> activeNodes = new LinkedList<>();
|
final Queue<Coord> activeNodes = new LinkedList<>();
|
||||||
|
|
||||||
double maxDist = context.getMaxDistance();
|
final double maxDist = context.getMaxDistance();
|
||||||
|
|
||||||
activeNodes.add(start);
|
activeNodes.add(start);
|
||||||
|
|
||||||
Coord[] sides = context.getSpreadSides();
|
final Coord[] sides = context.getSpreadSides();
|
||||||
boolean forceSpreadNext = context.forceSpreadStart();
|
boolean forceSpreadNext = context.forceSpreadStart();
|
||||||
|
|
||||||
boolean limitReached = false;
|
boolean limitReached = false;
|
||||||
|
|
||||||
while (!activeNodes.isEmpty()) {
|
while (!activeNodes.isEmpty()) {
|
||||||
Coord current = activeNodes.poll();
|
final Coord current = activeNodes.poll();
|
||||||
foundNodes.add(current);
|
foundNodes.add(current);
|
||||||
|
|
||||||
if(!context.canSpreadFrom(current) && !forceSpreadNext) continue;
|
if (!context.canSpreadFrom(current) && !forceSpreadNext) continue;
|
||||||
|
|
||||||
forceSpreadNext = false;
|
forceSpreadNext = false;
|
||||||
|
|
||||||
|
|
||||||
for (Coord spr : sides) {
|
for (final Coord spr : sides) {
|
||||||
Coord next = current.add(spr);
|
final Coord next = current.add(spr);
|
||||||
if(activeNodes.contains(next) || foundNodes.contains(next)) continue;
|
if (activeNodes.contains(next) || foundNodes.contains(next)) continue;
|
||||||
|
|
||||||
if (next.dist(start) > maxDist) {
|
if (next.dist(start) > maxDist) {
|
||||||
limitReached = true;
|
limitReached = true;
|
||||||
|
|||||||
@@ -33,7 +33,8 @@ public abstract class Tile implements IonBinaryHeadless {
|
|||||||
protected boolean explored;
|
protected boolean explored;
|
||||||
|
|
||||||
|
|
||||||
public Tile(TileModel model, TileRenderer renderer) {
|
public Tile(TileModel model, TileRenderer renderer)
|
||||||
|
{
|
||||||
this.model = model;
|
this.model = model;
|
||||||
this.renderer = renderer;
|
this.renderer = renderer;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ public final class TileModel {
|
|||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
return tileClass.getConstructor(TileModel.class, TileRenderer.class).newInstance(this, renderer);
|
return tileClass.getConstructor(TileModel.class, TileRenderer.class).newInstance(this, renderer);
|
||||||
} catch (Exception e) {
|
} catch (final Exception e) {
|
||||||
throw new RuntimeException("Could not instantiate a tile.", e);
|
throw new RuntimeException("Could not instantiate a tile.", e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -44,7 +44,7 @@ public final class TileModel {
|
|||||||
|
|
||||||
public Tile loadTile(IonInput in) throws IOException
|
public Tile loadTile(IonInput in) throws IOException
|
||||||
{
|
{
|
||||||
Tile t = createTile();
|
final Tile t = createTile();
|
||||||
t.load(in);
|
t.load(in);
|
||||||
return t;
|
return t;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package mightypork.rogue.world.tile;
|
package mightypork.rogue.world.tile;
|
||||||
|
|
||||||
|
|
||||||
import mightypork.gamecore.render.Render;
|
import mightypork.gamecore.render.Render;
|
||||||
import mightypork.gamecore.render.textures.TxQuad;
|
import mightypork.gamecore.render.textures.TxQuad;
|
||||||
import mightypork.rogue.Res;
|
import mightypork.rogue.Res;
|
||||||
@@ -22,7 +23,8 @@ public abstract class TileRenderer {
|
|||||||
private static boolean inited;
|
private static boolean inited;
|
||||||
|
|
||||||
|
|
||||||
public TileRenderer() {
|
public TileRenderer()
|
||||||
|
{
|
||||||
if (!inited) {
|
if (!inited) {
|
||||||
SH_N = Res.getTxQuad("tile.shadow.n");
|
SH_N = Res.getTxQuad("tile.shadow.n");
|
||||||
SH_S = Res.getTxQuad("tile.shadow.s");
|
SH_S = Res.getTxQuad("tile.shadow.s");
|
||||||
@@ -108,7 +110,7 @@ public abstract class TileRenderer {
|
|||||||
if ((ufog & Sides.W) != 0) Render.quadTextured(rect, UFOG_W);
|
if ((ufog & Sides.W) != 0) Render.quadTextured(rect, UFOG_W);
|
||||||
if ((ufog & Sides.E) != 0) Render.quadTextured(rect, UFOG_E);
|
if ((ufog & Sides.E) != 0) Render.quadTextured(rect, UFOG_E);
|
||||||
|
|
||||||
if ((ufog & Sides.SW_CORNER) == Sides.SW) Render.quadTextured(rect, UFOG_SW);
|
if ((ufog & Sides.SW_CORNER) == Sides.SW) Render.quadTextured(rect, UFOG_SW);
|
||||||
if ((ufog & Sides.S) != 0) Render.quadTextured(rect, UFOG_S);
|
if ((ufog & Sides.S) != 0) Render.quadTextured(rect, UFOG_S);
|
||||||
if ((ufog & Sides.SE_CORNER) == Sides.SE) Render.quadTextured(rect, UFOG_SE);
|
if ((ufog & Sides.SE_CORNER) == Sides.SE) Render.quadTextured(rect, UFOG_SE);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,7 +26,8 @@ public enum TileType
|
|||||||
private final boolean potentiallyWalkable;
|
private final boolean potentiallyWalkable;
|
||||||
|
|
||||||
|
|
||||||
private TileType(Color mapColor, boolean potentiallyWalkable) {
|
private TileType(Color mapColor, boolean potentiallyWalkable)
|
||||||
|
{
|
||||||
this.mapColor = mapColor;
|
this.mapColor = mapColor;
|
||||||
this.potentiallyWalkable = potentiallyWalkable;
|
this.potentiallyWalkable = potentiallyWalkable;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -52,16 +52,16 @@ public final class Tiles {
|
|||||||
|
|
||||||
public static Tile loadTile(IonInput in) throws IOException
|
public static Tile loadTile(IonInput in) throws IOException
|
||||||
{
|
{
|
||||||
int id = in.readIntByte();
|
final int id = in.readIntByte();
|
||||||
|
|
||||||
TileModel model = get(id);
|
final TileModel model = get(id);
|
||||||
return model.loadTile(in);
|
return model.loadTile(in);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public static void saveTile(IonOutput out, Tile tile) throws IOException
|
public static void saveTile(IonOutput out, Tile tile) throws IOException
|
||||||
{
|
{
|
||||||
TileModel model = tile.getModel();
|
final TileModel model = tile.getModel();
|
||||||
|
|
||||||
out.writeIntByte(model.id);
|
out.writeIntByte(model.id);
|
||||||
model.saveTile(out, tile);
|
model.saveTile(out, tile);
|
||||||
|
|||||||
@@ -13,12 +13,14 @@ public class DoorTile extends SolidTile {
|
|||||||
super(model, renderer);
|
super(model, renderer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isWalkable()
|
public boolean isWalkable()
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public TileType getType()
|
public TileType getType()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -17,10 +17,11 @@ import mightypork.util.files.ion.IonOutput;
|
|||||||
|
|
||||||
public abstract class GroundTile extends Tile {
|
public abstract class GroundTile extends Tile {
|
||||||
|
|
||||||
private DroppedItemRenderer itemRenderer = new DroppedItemRenderer();
|
private final DroppedItemRenderer itemRenderer = new DroppedItemRenderer();
|
||||||
|
|
||||||
protected final Stack<Item> items = new Stack<>();
|
protected final Stack<Item> items = new Stack<>();
|
||||||
|
|
||||||
|
|
||||||
public GroundTile(TileModel model, TileRenderer renderer)
|
public GroundTile(TileModel model, TileRenderer renderer)
|
||||||
{
|
{
|
||||||
super(model, renderer);
|
super(model, renderer);
|
||||||
@@ -60,18 +61,21 @@ public abstract class GroundTile extends Tile {
|
|||||||
in.readSequence(items);
|
in.readSequence(items);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean doesCastShadow()
|
public boolean doesCastShadow()
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isWalkable()
|
public boolean isWalkable()
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean dropItem(Item item)
|
public boolean dropItem(Item item)
|
||||||
{
|
{
|
||||||
@@ -79,12 +83,14 @@ public abstract class GroundTile extends Tile {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Item pickItem()
|
public Item pickItem()
|
||||||
{
|
{
|
||||||
return hasItem() ? items.pop() : null;
|
return hasItem() ? items.pop() : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean hasItem()
|
public boolean hasItem()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ public class LockedDoorTile extends DoorTile {
|
|||||||
super(model, renderer);
|
super(model, renderer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isWalkable()
|
public boolean isWalkable()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -63,6 +63,7 @@ public class NullTile extends Tile {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean dropItem(Item item)
|
public boolean dropItem(Item item)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package mightypork.rogue.world.tile.tiles;
|
package mightypork.rogue.world.tile.tiles;
|
||||||
|
|
||||||
|
|
||||||
import mightypork.rogue.world.item.Item;
|
import mightypork.rogue.world.item.Item;
|
||||||
import mightypork.rogue.world.tile.Tile;
|
import mightypork.rogue.world.tile.Tile;
|
||||||
import mightypork.rogue.world.tile.TileModel;
|
import mightypork.rogue.world.tile.TileModel;
|
||||||
@@ -13,30 +14,35 @@ public abstract class SolidTile extends Tile {
|
|||||||
super(model, renderer);
|
super(model, renderer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isWalkable()
|
public boolean isWalkable()
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean doesCastShadow()
|
public boolean doesCastShadow()
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean hasItem()
|
public boolean hasItem()
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean dropItem(Item item)
|
public boolean dropItem(Item item)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Item pickItem()
|
public Item pickItem()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package mightypork.rogue.world.tile.tiles;
|
package mightypork.rogue.world.tile.tiles;
|
||||||
|
|
||||||
|
|
||||||
import mightypork.rogue.world.tile.TileModel;
|
import mightypork.rogue.world.tile.TileModel;
|
||||||
import mightypork.rogue.world.tile.TileRenderer;
|
import mightypork.rogue.world.tile.TileRenderer;
|
||||||
import mightypork.rogue.world.tile.TileType;
|
import mightypork.rogue.world.tile.TileType;
|
||||||
@@ -12,6 +13,7 @@ public class WallTile extends SolidTile {
|
|||||||
super(model, renderer);
|
super(model, renderer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public TileType getType()
|
public TileType getType()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -3,26 +3,31 @@ package mightypork.util.error;
|
|||||||
|
|
||||||
public class IllegalValueException extends RuntimeException {
|
public class IllegalValueException extends RuntimeException {
|
||||||
|
|
||||||
public IllegalValueException() {
|
public IllegalValueException()
|
||||||
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public IllegalValueException(String message) {
|
public IllegalValueException(String message)
|
||||||
|
{
|
||||||
super(message);
|
super(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public IllegalValueException(Throwable cause) {
|
public IllegalValueException(Throwable cause)
|
||||||
|
{
|
||||||
super(cause);
|
super(cause);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public IllegalValueException(String message, Throwable cause) {
|
public IllegalValueException(String message, Throwable cause)
|
||||||
|
{
|
||||||
super(message, cause);
|
super(message, cause);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public IllegalValueException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
|
public IllegalValueException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace)
|
||||||
|
{
|
||||||
super(message, cause, enableSuppression, writableStackTrace);
|
super(message, cause, enableSuppression, writableStackTrace);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +1,6 @@
|
|||||||
package mightypork.util.files.ion;
|
package mightypork.util.files.ion;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Binary ion object, with a mark = saveable / loadable on it's own
|
* Binary ion object, with a mark = saveable / loadable on it's own
|
||||||
*
|
*
|
||||||
|
|||||||
Reference in New Issue
Block a user