minimap tweaks
This commit is contained in:
@@ -2,6 +2,7 @@ package mightypork.gamecore.control.events.input;
|
|||||||
|
|
||||||
|
|
||||||
import mightypork.util.control.eventbus.BusEvent;
|
import mightypork.util.control.eventbus.BusEvent;
|
||||||
|
import mightypork.util.control.eventbus.event_flags.UnloggedEvent;
|
||||||
|
|
||||||
import org.lwjgl.input.Keyboard;
|
import org.lwjgl.input.Keyboard;
|
||||||
|
|
||||||
@@ -11,6 +12,7 @@ import org.lwjgl.input.Keyboard;
|
|||||||
*
|
*
|
||||||
* @author MightyPork
|
* @author MightyPork
|
||||||
*/
|
*/
|
||||||
|
@UnloggedEvent
|
||||||
public class KeyEvent extends BusEvent<KeyListener> {
|
public class KeyEvent extends BusEvent<KeyListener> {
|
||||||
|
|
||||||
private final int key;
|
private final int key;
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package mightypork.gamecore.control.events.input;
|
|||||||
|
|
||||||
|
|
||||||
import mightypork.util.control.eventbus.BusEvent;
|
import mightypork.util.control.eventbus.BusEvent;
|
||||||
|
import mightypork.util.control.eventbus.event_flags.UnloggedEvent;
|
||||||
import mightypork.util.math.constraints.rect.proxy.RectBound;
|
import mightypork.util.math.constraints.rect.proxy.RectBound;
|
||||||
import mightypork.util.math.constraints.vect.Vect;
|
import mightypork.util.math.constraints.vect.Vect;
|
||||||
import mightypork.util.math.constraints.vect.VectConst;
|
import mightypork.util.math.constraints.vect.VectConst;
|
||||||
@@ -12,6 +13,7 @@ import mightypork.util.math.constraints.vect.VectConst;
|
|||||||
*
|
*
|
||||||
* @author MightyPork
|
* @author MightyPork
|
||||||
*/
|
*/
|
||||||
|
@UnloggedEvent
|
||||||
public class MouseButtonEvent extends BusEvent<MouseButtonListener> {
|
public class MouseButtonEvent extends BusEvent<MouseButtonListener> {
|
||||||
|
|
||||||
public static final int BUTTON_LEFT = 0;
|
public static final int BUTTON_LEFT = 0;
|
||||||
|
|||||||
@@ -85,7 +85,7 @@ public class HudLayer extends ScreenLayer {
|
|||||||
@Override
|
@Override
|
||||||
public int getEventPriority()
|
public int getEventPriority()
|
||||||
{
|
{
|
||||||
return 100;
|
return 200;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,8 +24,8 @@ public class ScreenGame extends LayeredScreen {
|
|||||||
|
|
||||||
this.world = obtainWorld();
|
this.world = obtainWorld();
|
||||||
|
|
||||||
addLayer(new WorldLayer(this, world));
|
|
||||||
addLayer(new HudLayer(this, world));
|
addLayer(new HudLayer(this, world));
|
||||||
|
addLayer(new WorldLayer(this, world));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ public class WorldLayer extends ScreenLayer {
|
|||||||
@Override
|
@Override
|
||||||
public int getZIndex()
|
public int getZIndex()
|
||||||
{
|
{
|
||||||
return -1; // stay down
|
return 0; // stay down
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -6,12 +6,14 @@ 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.EntityPos;
|
|
||||||
import mightypork.rogue.world.World;
|
import mightypork.rogue.world.World;
|
||||||
import mightypork.rogue.world.entity.Entity;
|
import mightypork.rogue.world.entity.Entity;
|
||||||
|
import mightypork.rogue.world.entity.EntityPos;
|
||||||
import mightypork.rogue.world.level.Level;
|
import mightypork.rogue.world.level.Level;
|
||||||
import mightypork.rogue.world.tile.Tile;
|
import mightypork.rogue.world.tile.Tile;
|
||||||
import mightypork.util.math.color.Color;
|
import mightypork.util.math.color.Color;
|
||||||
|
import mightypork.util.math.color.RGB;
|
||||||
|
import mightypork.util.math.constraints.num.Num;
|
||||||
import mightypork.util.math.constraints.rect.Rect;
|
import mightypork.util.math.constraints.rect.Rect;
|
||||||
import mightypork.util.math.constraints.rect.mutable.RectMutable;
|
import mightypork.util.math.constraints.rect.mutable.RectMutable;
|
||||||
import mightypork.util.math.constraints.vect.Vect;
|
import mightypork.util.math.constraints.vect.Vect;
|
||||||
@@ -24,12 +26,11 @@ public class Minimap extends InputComponent implements MouseButtonListener {
|
|||||||
private final World world;
|
private final World world;
|
||||||
private final RectMutable bounds = Rect.makeVar();
|
private final RectMutable bounds = Rect.makeVar();
|
||||||
private int unit = 0;
|
private int unit = 0;
|
||||||
private final Color back = Color.rgba(0, 0.2, 0.2, 0.4);
|
private final Num translucency = Num.make(0.8);
|
||||||
private final Color back2 = Color.rgba(0, 0.5, 0.5, 0.5);
|
private final Color playerColor = RGB.RED;
|
||||||
|
|
||||||
|
|
||||||
public Minimap(World w)
|
public Minimap(World w) {
|
||||||
{
|
|
||||||
this.world = w;
|
this.world = w;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -37,9 +38,10 @@ public class Minimap extends InputComponent implements MouseButtonListener {
|
|||||||
@Override
|
@Override
|
||||||
protected void renderComponent()
|
protected void renderComponent()
|
||||||
{
|
{
|
||||||
|
Color.pushAlpha(translucency);
|
||||||
|
|
||||||
final Level lvl = world.getCurrentLevel();
|
final Level lvl = world.getCurrentLevel();
|
||||||
unit = (int) Math.min(Math.max(2, Math.ceil(height().value() / (lvl.getHeight() + 2))), 8);
|
unit = (int) Math.min(Math.max(2, Math.ceil((height().value()/2) / (lvl.getHeight() + 2))), 6);
|
||||||
|
|
||||||
final World w = lvl.getWorld();
|
final World w = lvl.getWorld();
|
||||||
final Entity e = w.getPlayerEntity();
|
final Entity e = w.getPlayerEntity();
|
||||||
@@ -52,12 +54,12 @@ public class Minimap extends InputComponent implements MouseButtonListener {
|
|||||||
|
|
||||||
bounds.setTo(tl, unit * lw, unit * lh);
|
bounds.setTo(tl, unit * lw, unit * lh);
|
||||||
|
|
||||||
Render.quad(bounds.grow(unit * 0.5), back);
|
|
||||||
Render.quad(bounds, back2);
|
|
||||||
|
|
||||||
final Coord point = new Coord(tl.xi(), tl.yi());
|
final Coord point = new Coord(tl.xi(), tl.yi());
|
||||||
|
|
||||||
GL11.glDisable(GL11.GL_TEXTURE_2D);
|
GL11.glDisable(GL11.GL_TEXTURE_2D);
|
||||||
|
|
||||||
GL11.glBegin(GL11.GL_QUADS);
|
GL11.glBegin(GL11.GL_QUADS);
|
||||||
|
|
||||||
for (final Coord pos = Coord.zero(); pos.y < lh; pos.y++, point.y += unit) {
|
for (final Coord pos = Coord.zero(); pos.y < lh; pos.y++, point.y += unit) {
|
||||||
for (pos.x = 0, point.x = tl.xi(); pos.x < lw; pos.x++, point.x += unit) {
|
for (pos.x = 0, point.x = tl.xi(); pos.x < lw; pos.x++, point.x += unit) {
|
||||||
|
|
||||||
@@ -66,7 +68,7 @@ public class Minimap extends InputComponent implements MouseButtonListener {
|
|||||||
|
|
||||||
final Color clr = t.getMapColor();
|
final Color clr = t.getMapColor();
|
||||||
|
|
||||||
GL11.glColor4d(clr.r(), clr.g(), clr.b(), clr.a() * 0.9);
|
Render.setColor(clr);
|
||||||
|
|
||||||
GL11.glVertex2i(point.x, point.y);
|
GL11.glVertex2i(point.x, point.y);
|
||||||
GL11.glVertex2i(point.x + unit, point.y);
|
GL11.glVertex2i(point.x + unit, point.y);
|
||||||
@@ -76,7 +78,7 @@ public class Minimap extends InputComponent implements MouseButtonListener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// player
|
// player
|
||||||
GL11.glColor3d(1, 0, 0);
|
Render.setColor(playerColor);
|
||||||
|
|
||||||
final double plx = tl.xi() + plCoord.visualX() * unit;
|
final double plx = tl.xi() + plCoord.visualX() * unit;
|
||||||
final double ply = tl.yi() + plCoord.visualY() * unit;
|
final double ply = tl.yi() + plCoord.visualY() * unit;
|
||||||
@@ -87,19 +89,25 @@ public class Minimap extends InputComponent implements MouseButtonListener {
|
|||||||
GL11.glVertex2d(plx, ply + unit);
|
GL11.glVertex2d(plx, ply + unit);
|
||||||
|
|
||||||
GL11.glEnd();
|
GL11.glEnd();
|
||||||
|
|
||||||
|
Color.popAlpha();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void receive(MouseButtonEvent event)
|
public void receive(MouseButtonEvent event)
|
||||||
{
|
{
|
||||||
if (event.isOver(bounds) && event.isUp()) {
|
if (event.isOver(bounds)) {
|
||||||
final Vect relative = event.getPos().sub(bounds.origin());
|
if (event.isUp()) {
|
||||||
final Coord actual = Coord.make(relative.xi() / unit, relative.yi() / unit);
|
final Vect relative = event.getPos().sub(bounds.origin());
|
||||||
|
final Coord actual = Coord.make(relative.xi() / unit, relative.yi() / unit);
|
||||||
|
final Entity player = world.getPlayerEntity();
|
||||||
|
|
||||||
|
if (player.getLevel().getTile(actual).isExplored()) {
|
||||||
|
player.navigateTo(actual);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (!world.getCurrentLevel().getTile(actual).data.explored) return; // unexplored
|
|
||||||
|
|
||||||
world.getPlayerEntity().navigateTo(actual);
|
|
||||||
event.consume();
|
event.consume();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,6 +2,8 @@ package mightypork.rogue.world;
|
|||||||
|
|
||||||
|
|
||||||
import mightypork.rogue.world.entity.Entity;
|
import mightypork.rogue.world.entity.Entity;
|
||||||
|
import mightypork.rogue.world.entity.EntityPos;
|
||||||
|
import mightypork.rogue.world.entity.PathStep;
|
||||||
import mightypork.rogue.world.entity.models.EntityMoveListener;
|
import mightypork.rogue.world.entity.models.EntityMoveListener;
|
||||||
import mightypork.rogue.world.level.Level;
|
import mightypork.rogue.world.level.Level;
|
||||||
|
|
||||||
|
|||||||
@@ -104,8 +104,8 @@ public class World implements IonBundled, Updateable {
|
|||||||
final int playerEid = getNewEID();
|
final int playerEid = getNewEID();
|
||||||
|
|
||||||
playerEntity = Entities.PLAYER.createEntity(playerEid);
|
playerEntity = Entities.PLAYER.createEntity(playerEid);
|
||||||
levels.get(level).addEntity(playerEntity);
|
|
||||||
playerEntity.setPosition(levels.get(level).getEnterPoint());
|
playerEntity.setPosition(levels.get(level).getEnterPoint());
|
||||||
|
levels.get(level).addEntity(playerEntity);
|
||||||
|
|
||||||
playerInfo.setLevel(level);
|
playerInfo.setLevel(level);
|
||||||
playerInfo.setEID(playerEid);
|
playerInfo.setEID(playerEid);
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ public class WorldCreator {
|
|||||||
Level l;
|
Level l;
|
||||||
|
|
||||||
// first level
|
// first level
|
||||||
l = LevelGenerator.build(rand.nextLong(), 16, LevelGenerator.DUNGEON_THEME); //
|
l = LevelGenerator.build(rand.nextLong(), 30, LevelGenerator.DUNGEON_THEME); //
|
||||||
w.addLevel(l);
|
w.addLevel(l);
|
||||||
|
|
||||||
w.createPlayer(0);
|
w.createPlayer(0);
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ package mightypork.rogue.world;
|
|||||||
import mightypork.gamecore.render.Render;
|
import mightypork.gamecore.render.Render;
|
||||||
import mightypork.rogue.Res;
|
import mightypork.rogue.Res;
|
||||||
import mightypork.rogue.world.entity.Entity;
|
import mightypork.rogue.world.entity.Entity;
|
||||||
|
import mightypork.rogue.world.entity.EntityPos;
|
||||||
import mightypork.rogue.world.level.Level;
|
import mightypork.rogue.world.level.Level;
|
||||||
import mightypork.rogue.world.level.render.TileRenderContext;
|
import mightypork.rogue.world.level.render.TileRenderContext;
|
||||||
import mightypork.util.math.color.RGB;
|
import mightypork.util.math.color.RGB;
|
||||||
|
|||||||
@@ -6,8 +6,6 @@ import java.util.ArrayList;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import mightypork.rogue.world.Coord;
|
import mightypork.rogue.world.Coord;
|
||||||
import mightypork.rogue.world.EntityPos;
|
|
||||||
import mightypork.rogue.world.PathStep;
|
|
||||||
import mightypork.rogue.world.World;
|
import mightypork.rogue.world.World;
|
||||||
import mightypork.rogue.world.entity.models.EntityModel;
|
import mightypork.rogue.world.entity.models.EntityModel;
|
||||||
import mightypork.rogue.world.entity.models.EntityMoveListener;
|
import mightypork.rogue.world.entity.models.EntityMoveListener;
|
||||||
@@ -27,7 +25,7 @@ import mightypork.util.files.ion.IonOutput;
|
|||||||
*
|
*
|
||||||
* @author MightyPork
|
* @author MightyPork
|
||||||
*/
|
*/
|
||||||
public final class Entity implements IonBinary, EntityMoveListener {
|
public final class Entity implements IonBinary {
|
||||||
|
|
||||||
public static final int ION_MARK = 52;
|
public static final int ION_MARK = 52;
|
||||||
|
|
||||||
@@ -188,11 +186,15 @@ public final class Entity implements IonBinary, EntityMoveListener {
|
|||||||
if (walking && data.position.isFinished()) {
|
if (walking && data.position.isFinished()) {
|
||||||
walking = false;
|
walking = false;
|
||||||
level.freeTile(lastPosition.getCoord());
|
level.freeTile(lastPosition.getCoord());
|
||||||
|
|
||||||
onStepFinished(this);
|
for (final EntityMoveListener l : moveListeners) {
|
||||||
|
l.onStepFinished(this);
|
||||||
|
}
|
||||||
|
|
||||||
if (data.path.isEmpty()) {
|
if (data.path.isEmpty()) {
|
||||||
onPathFinished(this);
|
for (final EntityMoveListener l : moveListeners) {
|
||||||
|
l.onPathFinished(this);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -206,7 +208,11 @@ public final class Entity implements IonBinary, EntityMoveListener {
|
|||||||
|
|
||||||
if (!level.canWalkInto(planned)) {
|
if (!level.canWalkInto(planned)) {
|
||||||
cancelPath();
|
cancelPath();
|
||||||
onPathInterrupted(this);
|
|
||||||
|
for (final EntityMoveListener l : moveListeners) {
|
||||||
|
l.onPathInterrupted(this);
|
||||||
|
}
|
||||||
|
|
||||||
walking = false;
|
walking = false;
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
@@ -252,6 +258,8 @@ public final class Entity implements IonBinary, EntityMoveListener {
|
|||||||
|
|
||||||
public boolean navigateTo(Coord pos)
|
public boolean navigateTo(Coord pos)
|
||||||
{
|
{
|
||||||
|
if(pos.equals(getCoord())) return true;
|
||||||
|
|
||||||
final List<PathStep> path = PathFinder.findPathRelative(pfc, getPosition().getCoord(), pos);
|
final List<PathStep> path = PathFinder.findPathRelative(pfc, getPosition().getCoord(), pos);
|
||||||
|
|
||||||
if (path == null) return false;
|
if (path == null) return false;
|
||||||
@@ -262,33 +270,6 @@ public final class Entity implements IonBinary, EntityMoveListener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onStepFinished(Entity entity)
|
|
||||||
{
|
|
||||||
for (final EntityMoveListener l : moveListeners) {
|
|
||||||
l.onStepFinished(entity);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onPathFinished(Entity entity)
|
|
||||||
{
|
|
||||||
for (final EntityMoveListener l : moveListeners) {
|
|
||||||
l.onStepFinished(entity);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onPathInterrupted(Entity entity)
|
|
||||||
{
|
|
||||||
for (final EntityMoveListener l : moveListeners) {
|
|
||||||
l.onPathInterrupted(entity);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public void addMoveListener(EntityMoveListener listener)
|
public void addMoveListener(EntityMoveListener listener)
|
||||||
{
|
{
|
||||||
moveListeners.add(listener);
|
moveListeners.add(listener);
|
||||||
@@ -304,6 +285,7 @@ public final class Entity implements IonBinary, EntityMoveListener {
|
|||||||
public void setLevel(Level level)
|
public void setLevel(Level level)
|
||||||
{
|
{
|
||||||
this.level = level;
|
this.level = level;
|
||||||
|
model.onEnteredLevel(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -311,4 +293,10 @@ public final class Entity implements IonBinary, EntityMoveListener {
|
|||||||
{
|
{
|
||||||
return data.position.getCoord();
|
return data.position.getCoord();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public EntityModel getModel()
|
||||||
|
{
|
||||||
|
return model;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,8 +5,6 @@ import java.io.IOException;
|
|||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
import java.util.Queue;
|
import java.util.Queue;
|
||||||
|
|
||||||
import mightypork.rogue.world.EntityPos;
|
|
||||||
import mightypork.rogue.world.PathStep;
|
|
||||||
import mightypork.util.files.ion.IonBundle;
|
import mightypork.util.files.ion.IonBundle;
|
||||||
import mightypork.util.files.ion.IonBundled;
|
import mightypork.util.files.ion.IonBundled;
|
||||||
|
|
||||||
|
|||||||
+2
-1
@@ -1,8 +1,9 @@
|
|||||||
package mightypork.rogue.world;
|
package mightypork.rogue.world.entity;
|
||||||
|
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import mightypork.rogue.world.Coord;
|
||||||
import mightypork.util.files.ion.IonBundle;
|
import mightypork.util.files.ion.IonBundle;
|
||||||
import mightypork.util.files.ion.IonBundled;
|
import mightypork.util.files.ion.IonBundled;
|
||||||
import mightypork.util.math.Easing;
|
import mightypork.util.math.Easing;
|
||||||
+2
-1
@@ -1,8 +1,9 @@
|
|||||||
package mightypork.rogue.world;
|
package mightypork.rogue.world.entity;
|
||||||
|
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import mightypork.rogue.world.Coord;
|
||||||
import mightypork.util.files.ion.IonBinary;
|
import mightypork.util.files.ion.IonBinary;
|
||||||
import mightypork.util.files.ion.IonInput;
|
import mightypork.util.files.ion.IonInput;
|
||||||
import mightypork.util.files.ion.IonOutput;
|
import mightypork.util.files.ion.IonOutput;
|
||||||
@@ -8,6 +8,7 @@ import mightypork.rogue.world.entity.EntityData;
|
|||||||
import mightypork.rogue.world.entity.renderers.EntityRenderer;
|
import mightypork.rogue.world.entity.renderers.EntityRenderer;
|
||||||
import mightypork.rogue.world.pathfinding.Heuristic;
|
import mightypork.rogue.world.pathfinding.Heuristic;
|
||||||
import mightypork.rogue.world.pathfinding.PathFinder;
|
import mightypork.rogue.world.pathfinding.PathFinder;
|
||||||
|
import mightypork.util.annotations.DefaultImpl;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -22,8 +23,7 @@ public abstract class EntityModel implements EntityMoveListener {
|
|||||||
public EntityRenderer renderer = EntityRenderer.NONE;
|
public EntityRenderer renderer = EntityRenderer.NONE;
|
||||||
|
|
||||||
|
|
||||||
public EntityModel(int id)
|
public EntityModel(int id) {
|
||||||
{
|
|
||||||
Entities.register(id, this);
|
Entities.register(id, this);
|
||||||
this.id = id;
|
this.id = id;
|
||||||
}
|
}
|
||||||
@@ -69,24 +69,28 @@ public abstract class EntityModel implements EntityMoveListener {
|
|||||||
public abstract void onPathInterrupted(Entity entity);
|
public abstract void onPathInterrupted(Entity entity);
|
||||||
|
|
||||||
|
|
||||||
|
@DefaultImpl
|
||||||
public boolean canWalkInto(Entity entity, Coord pos)
|
public boolean canWalkInto(Entity entity, Coord pos)
|
||||||
{
|
{
|
||||||
return entity.getLevel().canWalkInto(pos);
|
return entity.getLevel().canWalkInto(pos);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@DefaultImpl
|
||||||
public int getPathMinCost()
|
public int getPathMinCost()
|
||||||
{
|
{
|
||||||
return 10;
|
return 10;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@DefaultImpl
|
||||||
public Heuristic getPathHeuristic()
|
public Heuristic getPathHeuristic()
|
||||||
{
|
{
|
||||||
return PathFinder.DIAGONAL_HEURISTIC;
|
return PathFinder.DIAGONAL_HEURISTIC;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@DefaultImpl
|
||||||
public int getPathCost(Entity entity, Coord from, Coord to)
|
public int getPathCost(Entity entity, Coord from, Coord to)
|
||||||
{
|
{
|
||||||
return 10;
|
return 10;
|
||||||
@@ -95,4 +99,10 @@ public abstract class EntityModel implements EntityMoveListener {
|
|||||||
|
|
||||||
public abstract void initMetadata(EntityData metadata);
|
public abstract void initMetadata(EntityData metadata);
|
||||||
|
|
||||||
|
|
||||||
|
@DefaultImpl
|
||||||
|
public void onEnteredLevel(Entity entity)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,8 +19,7 @@ public class PlayerModel extends EntityModel {
|
|||||||
private static final double STEP_TIME = 0.25;
|
private static final double STEP_TIME = 0.25;
|
||||||
|
|
||||||
|
|
||||||
public PlayerModel(int id)
|
public PlayerModel(int id) {
|
||||||
{
|
|
||||||
super(id);
|
super(id);
|
||||||
setRenderer(new PlayerRenderer("player"));
|
setRenderer(new PlayerRenderer("player"));
|
||||||
}
|
}
|
||||||
@@ -42,9 +41,20 @@ public class PlayerModel extends EntityModel {
|
|||||||
@Override
|
@Override
|
||||||
public void onStepFinished(Entity entity)
|
public void onStepFinished(Entity entity)
|
||||||
{
|
{
|
||||||
final Level l = entity.getLevel();
|
exploreSurroundings(entity);
|
||||||
|
}
|
||||||
l.markExplored(entity.getCoord(), 4.5);
|
|
||||||
|
|
||||||
|
private void exploreSurroundings(Entity entity)
|
||||||
|
{
|
||||||
|
entity.getLevel().markExplored(entity.getCoord(), 4.5);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onEnteredLevel(Entity entity)
|
||||||
|
{
|
||||||
|
exploreSurroundings(entity);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -70,6 +80,17 @@ public class PlayerModel extends EntityModel {
|
|||||||
public boolean canWalkInto(Entity entity, Coord pos)
|
public boolean canWalkInto(Entity entity, Coord pos)
|
||||||
{
|
{
|
||||||
final Tile t = entity.getLevel().getTile(pos);
|
final Tile t = entity.getLevel().getTile(pos);
|
||||||
return (t.data.explored || pos.dist(entity.getCoord()) < 6) && t.isWalkable();
|
return t.isWalkable();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getPathCost(Entity entity, Coord from, Coord to)
|
||||||
|
{
|
||||||
|
if (!entity.getLevel().getTile(entity.getCoord()).data.explored) {
|
||||||
|
return 1000;
|
||||||
|
}
|
||||||
|
|
||||||
|
return super.getPathCost(entity, from, to);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,8 +5,8 @@ import mightypork.gamecore.render.Render;
|
|||||||
import mightypork.gamecore.render.textures.TxQuad;
|
import mightypork.gamecore.render.textures.TxQuad;
|
||||||
import mightypork.gamecore.render.textures.TxSheet;
|
import mightypork.gamecore.render.textures.TxSheet;
|
||||||
import mightypork.rogue.Res;
|
import mightypork.rogue.Res;
|
||||||
import mightypork.rogue.world.EntityPos;
|
|
||||||
import mightypork.rogue.world.entity.Entity;
|
import mightypork.rogue.world.entity.Entity;
|
||||||
|
import mightypork.rogue.world.entity.EntityPos;
|
||||||
import mightypork.rogue.world.level.render.MapRenderContext;
|
import mightypork.rogue.world.level.render.MapRenderContext;
|
||||||
import mightypork.util.math.Calc;
|
import mightypork.util.math.Calc;
|
||||||
import mightypork.util.math.constraints.rect.Rect;
|
import mightypork.util.math.constraints.rect.Rect;
|
||||||
|
|||||||
@@ -22,18 +22,18 @@ public class LevelGenerator {
|
|||||||
{
|
{
|
||||||
final Random rand = new Random(seed + 13);
|
final Random rand = new Random(seed + 13);
|
||||||
|
|
||||||
final int max_size = 256;
|
final int max_size = 128;
|
||||||
|
|
||||||
final ScratchMap map = new ScratchMap(max_size, theme, rand);
|
final ScratchMap map = new ScratchMap(max_size, theme, rand);
|
||||||
|
|
||||||
// start
|
// start
|
||||||
map.addRoom(ROOM_SQUARE);
|
map.addRoom(ROOM_SQUARE);
|
||||||
|
|
||||||
for (int i = 0; i < 2 + rand.nextInt(1 + complexity + (int) Math.pow(complexity, 1.6)); i++) {
|
for (int i = 0; i < 1+complexity/4 + rand.nextInt(3 + complexity); i++) {
|
||||||
map.addRoom(ROOM_SQUARE);
|
map.addRoom(ROOM_SQUARE);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i = 0; i < 2 + rand.nextInt(1 + complexity / 3 + (int) Math.pow(complexity, 1.2)); i++) {
|
for (int i = 0; i < 1 + complexity/8 + rand.nextInt(1 + complexity); i++) {
|
||||||
map.addRoom(DEAD_END);
|
map.addRoom(DEAD_END);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,10 @@ package mightypork.rogue.world.gen;
|
|||||||
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
import mightypork.rogue.world.Coord;
|
import mightypork.rogue.world.Coord;
|
||||||
import mightypork.rogue.world.level.Level;
|
import mightypork.rogue.world.level.Level;
|
||||||
@@ -14,6 +16,7 @@ import mightypork.rogue.world.tile.Tile;
|
|||||||
import mightypork.rogue.world.tile.TileModel;
|
import mightypork.rogue.world.tile.TileModel;
|
||||||
import mightypork.rogue.world.tile.Tiles;
|
import mightypork.rogue.world.tile.Tiles;
|
||||||
import mightypork.util.logging.Log;
|
import mightypork.util.logging.Log;
|
||||||
|
import mightypork.util.math.Calc;
|
||||||
|
|
||||||
|
|
||||||
public class ScratchMap {
|
public class ScratchMap {
|
||||||
@@ -56,7 +59,7 @@ public class ScratchMap {
|
|||||||
|
|
||||||
if (t.isDoor()) return 10; // door
|
if (t.isDoor()) return 10; // door
|
||||||
if (t.isFloor()) return 20; // floor
|
if (t.isFloor()) return 20; // floor
|
||||||
|
|
||||||
if (t.isWall() && t.genData.isProtected) return 1000;
|
if (t.isWall() && t.genData.isProtected) return 1000;
|
||||||
|
|
||||||
return 100; // wall
|
return 100; // wall
|
||||||
@@ -91,8 +94,7 @@ public class ScratchMap {
|
|||||||
private static final boolean FIX_GLITCHES = true;
|
private static final boolean FIX_GLITCHES = true;
|
||||||
|
|
||||||
|
|
||||||
public ScratchMap(int max_size, Theme theme, Random rand)
|
public ScratchMap(int max_size, Theme theme, Random rand) {
|
||||||
{
|
|
||||||
map = new Tile[max_size][max_size];
|
map = new Tile[max_size][max_size];
|
||||||
|
|
||||||
genMin = Coord.make((max_size / 2) - 1, (max_size / 2) - 1);
|
genMin = Coord.make((max_size / 2) - 1, (max_size / 2) - 1);
|
||||||
@@ -174,7 +176,9 @@ public class ScratchMap {
|
|||||||
|
|
||||||
public Tile get(Coord pos)
|
public Tile get(Coord pos)
|
||||||
{
|
{
|
||||||
if (!isIn(pos)) { throw new IndexOutOfBoundsException("Tile not in map: " + pos); }
|
if (!isIn(pos)) {
|
||||||
|
throw new IndexOutOfBoundsException("Tile not in map: " + pos);
|
||||||
|
}
|
||||||
|
|
||||||
return map[pos.y][pos.x];
|
return map[pos.y][pos.x];
|
||||||
}
|
}
|
||||||
@@ -188,7 +192,9 @@ public class ScratchMap {
|
|||||||
|
|
||||||
public boolean set(Coord pos, Tile tile)
|
public boolean set(Coord pos, Tile tile)
|
||||||
{
|
{
|
||||||
if (!isIn(pos)) { throw new IndexOutOfBoundsException("Tile not in map: " + pos); }
|
if (!isIn(pos)) {
|
||||||
|
throw new IndexOutOfBoundsException("Tile not in map: " + pos);
|
||||||
|
}
|
||||||
|
|
||||||
map[pos.y][pos.x] = tile;
|
map[pos.y][pos.x] = tile;
|
||||||
return true;
|
return true;
|
||||||
@@ -256,17 +262,25 @@ public class ScratchMap {
|
|||||||
public void buildCorridors()
|
public void buildCorridors()
|
||||||
{
|
{
|
||||||
Log.f3("Building corridors.");
|
Log.f3("Building corridors.");
|
||||||
for (int i = 0; i < nodes.size(); i++) {
|
|
||||||
for (int j = i + 1; j < nodes.size(); j++) {
|
Coord start = nodes.get(0);
|
||||||
buildCorridor(nodes.get(i), nodes.get(j));
|
Set<Coord> starts = new HashSet<>();
|
||||||
|
|
||||||
|
for (int i = 0; i < 1+rooms.size()/8; i++) {
|
||||||
|
if (!starts.contains(start)) {
|
||||||
|
for (int j = 0; j < nodes.size(); j++) {
|
||||||
|
buildCorridor(start, nodes.get(j));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
starts.add(start);
|
||||||
|
start = Calc.pick(nodes);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private void buildCorridor(Coord node1, Coord node2)
|
private void buildCorridor(Coord node1, Coord node2)
|
||||||
{
|
{
|
||||||
//Log.f3("Finding path " + node1 + " -> " + node2);
|
Log.f3("Building corridor " + node1 + " -> " + node2);
|
||||||
final List<Coord> steps = PathFinder.findPath(pfc, node1, node2);
|
final List<Coord> steps = PathFinder.findPath(pfc, node1, node2);
|
||||||
|
|
||||||
if (steps == null) {
|
if (steps == null) {
|
||||||
@@ -296,7 +310,7 @@ public class ScratchMap {
|
|||||||
|
|
||||||
final Tile current = get(c);
|
final Tile current = get(c);
|
||||||
if (!current.isNull() && (current.isPotentiallyWalkable())) continue; // floor already, let it be
|
if (!current.isNull() && (current.isPotentiallyWalkable())) continue; // floor already, let it be
|
||||||
|
|
||||||
if (i == 0 && j == 0) {
|
if (i == 0 && j == 0) {
|
||||||
set(c, theme.floor());
|
set(c, theme.floor());
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ import java.util.LinkedList;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import mightypork.rogue.world.Coord;
|
import mightypork.rogue.world.Coord;
|
||||||
import mightypork.rogue.world.PathStep;
|
import mightypork.rogue.world.entity.PathStep;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -39,20 +39,17 @@ public final class Tile implements IonBinary {
|
|||||||
private boolean occupied;
|
private boolean occupied;
|
||||||
|
|
||||||
|
|
||||||
public Tile(int id)
|
public Tile(int id) {
|
||||||
{
|
|
||||||
this(Tiles.get(id));
|
this(Tiles.get(id));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public Tile(TileModel model)
|
public Tile(TileModel model) {
|
||||||
{
|
|
||||||
setModel(model);
|
setModel(model);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public Tile()
|
public Tile() {
|
||||||
{
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -210,4 +207,16 @@ public final class Tile implements IonBinary {
|
|||||||
{
|
{
|
||||||
return model.getMapColor(this);
|
return model.getMapColor(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public boolean isExplored()
|
||||||
|
{
|
||||||
|
return data.explored;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void explore()
|
||||||
|
{
|
||||||
|
data.explored = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,6 +4,8 @@ package mightypork.rogue.world.tile.models;
|
|||||||
import mightypork.rogue.world.tile.Tile;
|
import mightypork.rogue.world.tile.Tile;
|
||||||
import mightypork.util.math.color.COMMODORE;
|
import mightypork.util.math.color.COMMODORE;
|
||||||
import mightypork.util.math.color.Color;
|
import mightypork.util.math.color.Color;
|
||||||
|
import mightypork.util.math.color.PAL16;
|
||||||
|
import mightypork.util.math.color.RGB;
|
||||||
|
|
||||||
|
|
||||||
public class Floor extends AbstractTile {
|
public class Floor extends AbstractTile {
|
||||||
@@ -45,6 +47,6 @@ public class Floor extends AbstractTile {
|
|||||||
@Override
|
@Override
|
||||||
public Color getMapColor(Tile tile)
|
public Color getMapColor(Tile tile)
|
||||||
{
|
{
|
||||||
return COMMODORE.GRAY_DARK;
|
return RGB.GRAY_DARK;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,6 +5,8 @@ import mightypork.rogue.world.tile.Tile;
|
|||||||
import mightypork.rogue.world.tile.renderers.DoorRenderer;
|
import mightypork.rogue.world.tile.renderers.DoorRenderer;
|
||||||
import mightypork.util.math.color.COMMODORE;
|
import mightypork.util.math.color.COMMODORE;
|
||||||
import mightypork.util.math.color.Color;
|
import mightypork.util.math.color.Color;
|
||||||
|
import mightypork.util.math.color.PAL16;
|
||||||
|
import mightypork.util.math.color.RGB;
|
||||||
|
|
||||||
|
|
||||||
public class SimpleDoor extends AbstractTile {
|
public class SimpleDoor extends AbstractTile {
|
||||||
@@ -60,6 +62,6 @@ public class SimpleDoor extends AbstractTile {
|
|||||||
@Override
|
@Override
|
||||||
public Color getMapColor(Tile tile)
|
public Color getMapColor(Tile tile)
|
||||||
{
|
{
|
||||||
return COMMODORE.BROWN;
|
return PAL16.NEWPOOP;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ package mightypork.rogue.world.tile.models;
|
|||||||
import mightypork.rogue.world.tile.Tile;
|
import mightypork.rogue.world.tile.Tile;
|
||||||
import mightypork.util.math.color.COMMODORE;
|
import mightypork.util.math.color.COMMODORE;
|
||||||
import mightypork.util.math.color.Color;
|
import mightypork.util.math.color.Color;
|
||||||
|
import mightypork.util.math.color.RGB;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -50,6 +51,6 @@ public class Wall extends AbstractTile {
|
|||||||
@Override
|
@Override
|
||||||
public Color getMapColor(Tile tile)
|
public Color getMapColor(Tile tile)
|
||||||
{
|
{
|
||||||
return COMMODORE.GRAY_LIGHT;
|
return RGB.GRAY_LIGHT;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -85,7 +85,7 @@ public abstract class BusEvent<HANDLER> {
|
|||||||
*
|
*
|
||||||
* @return true if consumed
|
* @return true if consumed
|
||||||
*/
|
*/
|
||||||
final boolean isConsumed()
|
public final boolean isConsumed()
|
||||||
{
|
{
|
||||||
return consumed;
|
return consumed;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -616,7 +616,7 @@ public class Calc {
|
|||||||
* @param list list of choices
|
* @param list list of choices
|
||||||
* @return picked element
|
* @return picked element
|
||||||
*/
|
*/
|
||||||
public static Object pick(List<?> list)
|
public static <T> T pick(List<T> list)
|
||||||
{
|
{
|
||||||
if (list.size() == 0) return null;
|
if (list.size() == 0) return null;
|
||||||
return list.get(rand.nextInt(list.size()));
|
return list.get(rand.nextInt(list.size()));
|
||||||
|
|||||||
Reference in New Issue
Block a user