Reflecting engine changes, some init task improvements

master
Ondřej Hruška 11 years ago
parent e368877b6e
commit cf096bcce5
  1. 1
      .gitignore
  2. 10
      src/mightypork/rogue/Const.java
  3. 38
      src/mightypork/rogue/Launcher.java
  4. 81
      src/mightypork/rogue/RogueApp.java
  5. 18
      src/mightypork/rogue/RogueStateManager.java
  6. 12
      src/mightypork/rogue/events/LoadingOverlayRequest.java
  7. 14
      src/mightypork/rogue/events/RogueStateRequest.java
  8. 70
      src/mightypork/rogue/init/RogueAddResources.java
  9. 18
      src/mightypork/rogue/init/RogueInitUI.java
  10. 30
      src/mightypork/rogue/init/RogueSetupConfig.java
  11. 8
      src/mightypork/rogue/init/RogueSetupDisplay.java
  12. 4
      src/mightypork/rogue/init/RogueSetupGlobalKeys.java
  13. 10
      src/mightypork/rogue/init/RogueSetupWorkdir.java
  14. 28
      src/mightypork/rogue/screens/FpsOverlay.java
  15. 46
      src/mightypork/rogue/screens/LoadingOverlay.java
  16. 12
      src/mightypork/rogue/screens/RogueScreen.java
  17. 22
      src/mightypork/rogue/screens/game/HeartBar.java
  18. 36
      src/mightypork/rogue/screens/game/IngameNav.java
  19. 80
      src/mightypork/rogue/screens/game/InvSlot.java
  20. 64
      src/mightypork/rogue/screens/game/LayerAskSave.java
  21. 40
      src/mightypork/rogue/screens/game/LayerDeath.java
  22. 86
      src/mightypork/rogue/screens/game/LayerGameUi.java
  23. 146
      src/mightypork/rogue/screens/game/LayerInv.java
  24. 26
      src/mightypork/rogue/screens/game/LayerMapView.java
  25. 36
      src/mightypork/rogue/screens/game/LayerWin.java
  26. 18
      src/mightypork/rogue/screens/game/NavButton.java
  27. 156
      src/mightypork/rogue/screens/game/ScreenGame.java
  28. 52
      src/mightypork/rogue/screens/menu/ScreenMainMenu.java
  29. 44
      src/mightypork/rogue/screens/select_world/ScreenSelectWorld.java
  30. 88
      src/mightypork/rogue/screens/select_world/WorldSlot.java
  31. 111
      src/mightypork/rogue/screens/story/ScreenStory.java
  32. 74
      src/mightypork/rogue/world/Inventory.java
  33. 80
      src/mightypork/rogue/world/PlayerControl.java
  34. 64
      src/mightypork/rogue/world/PlayerData.java
  35. 218
      src/mightypork/rogue/world/PlayerFacade.java
  36. 132
      src/mightypork/rogue/world/World.java
  37. 136
      src/mightypork/rogue/world/WorldConsole.java
  38. 66
      src/mightypork/rogue/world/WorldProvider.java
  39. 90
      src/mightypork/rogue/world/WorldRenderer.java
  40. 18
      src/mightypork/rogue/world/entity/AiTimer.java
  41. 44
      src/mightypork/rogue/world/entity/Entities.java
  42. 150
      src/mightypork/rogue/world/entity/Entity.java
  43. 26
      src/mightypork/rogue/world/entity/EntityModel.java
  44. 22
      src/mightypork/rogue/world/entity/EntityModule.java
  45. 28
      src/mightypork/rogue/world/entity/EntityPathFinder.java
  46. 4
      src/mightypork/rogue/world/entity/EntityRenderer.java
  47. 28
      src/mightypork/rogue/world/entity/impl/BossRatAi.java
  48. 20
      src/mightypork/rogue/world/entity/impl/BrownRatAi.java
  49. 38
      src/mightypork/rogue/world/entity/impl/EntityBossRat.java
  50. 42
      src/mightypork/rogue/world/entity/impl/EntityBrownRat.java
  51. 44
      src/mightypork/rogue/world/entity/impl/EntityGrayRat.java
  52. 76
      src/mightypork/rogue/world/entity/impl/EntityPlayer.java
  53. 24
      src/mightypork/rogue/world/entity/impl/GrayRatAi.java
  54. 200
      src/mightypork/rogue/world/entity/impl/MonsterAi.java
  55. 72
      src/mightypork/rogue/world/entity/modules/EntityModuleHealth.java
  56. 134
      src/mightypork/rogue/world/entity/modules/EntityModulePosition.java
  57. 12
      src/mightypork/rogue/world/entity/modules/EntityMoveListener.java
  58. 98
      src/mightypork/rogue/world/entity/modules/EntityPos.java
  59. 38
      src/mightypork/rogue/world/entity/render/EntityRendererMobLR.java
  60. 2
      src/mightypork/rogue/world/events/GameWinEvent.java
  61. 4
      src/mightypork/rogue/world/events/GameWinHandler.java
  62. 2
      src/mightypork/rogue/world/events/PlayerDeathHandler.java
  63. 4
      src/mightypork/rogue/world/events/PlayerKilledEvent.java
  64. 12
      src/mightypork/rogue/world/events/PlayerStepEndEvent.java
  65. 2
      src/mightypork/rogue/world/events/PlayerStepEndListener.java
  66. 4
      src/mightypork/rogue/world/events/WorldAscendRequest.java
  67. 2
      src/mightypork/rogue/world/events/WorldAscendRequestListener.java
  68. 4
      src/mightypork/rogue/world/events/WorldDescendRequest.java
  69. 2
      src/mightypork/rogue/world/events/WorldDescendRequestListener.java
  70. 20
      src/mightypork/rogue/world/events/WorldPauseRequest.java
  71. 110
      src/mightypork/rogue/world/gen/LevelBuilder.java
  72. 30
      src/mightypork/rogue/world/gen/MapTheme.java
  73. 2
      src/mightypork/rogue/world/gen/RoomBuilder.java
  74. 22
      src/mightypork/rogue/world/gen/RoomEntry.java
  75. 10
      src/mightypork/rogue/world/gen/Rooms.java
  76. 352
      src/mightypork/rogue/world/gen/ScratchMap.java
  77. 78
      src/mightypork/rogue/world/gen/WorldCreator.java
  78. 16
      src/mightypork/rogue/world/gen/WorldGenError.java
  79. 52
      src/mightypork/rogue/world/gen/rooms/AbstractRectRoom.java
  80. 14
      src/mightypork/rogue/world/gen/rooms/BasicRoom.java
  81. 26
      src/mightypork/rogue/world/gen/rooms/BossRoom.java
  82. 14
      src/mightypork/rogue/world/gen/rooms/DeadEndRoom.java
  83. 20
      src/mightypork/rogue/world/gen/rooms/EntranceRoom.java
  84. 20
      src/mightypork/rogue/world/gen/rooms/ExitRoom.java
  85. 20
      src/mightypork/rogue/world/gen/rooms/ItemShrineRoom.java
  86. 14
      src/mightypork/rogue/world/gen/rooms/SecretRoom.java
  87. 18
      src/mightypork/rogue/world/gen/rooms/StorageRoom.java
  88. 10
      src/mightypork/rogue/world/gen/rooms/TreasureChestRoom.java
  89. 30
      src/mightypork/rogue/world/gen/themes/ThemeBrick.java
  90. 88
      src/mightypork/rogue/world/gui/MapView.java
  91. 32
      src/mightypork/rogue/world/gui/Minimap.java
  92. 50
      src/mightypork/rogue/world/gui/WorldConsoleRenderer.java
  93. 70
      src/mightypork/rogue/world/gui/interaction/MIPKeyboard.java
  94. 70
      src/mightypork/rogue/world/gui/interaction/MIPMouse.java
  95. 22
      src/mightypork/rogue/world/gui/interaction/MapInteractionPlugin.java
  96. 122
      src/mightypork/rogue/world/item/Item.java
  97. 28
      src/mightypork/rogue/world/item/ItemModel.java
  98. 12
      src/mightypork/rogue/world/item/ItemRenderer.java
  99. 44
      src/mightypork/rogue/world/item/Items.java
  100. 22
      src/mightypork/rogue/world/item/impl/ItemBaseFood.java
  101. Some files were not shown because too many files have changed in this diff Show More

1
.gitignore vendored

@ -2,6 +2,7 @@
/target/
/~local/
/.rogue-save/
/rogue-workdir/
/build/out/*.jar
/build/in/*.jar
*.log

@ -7,20 +7,20 @@ package mightypork.rogue;
* @author Ondřej Hruška (MightyPork)
*/
public final class Const {
// STRINGS
public static final int VERSION = 6;
public static final String APP_NAME = "Rogue: Savage Rats";
public static final String TITLEBAR = APP_NAME + ", v" + VERSION;
// AUDIO
public static final int FPS_RENDER = 120; // max
// INITIAL WINDOW SIZE
public static final int WINDOW_W = 640;
public static final int WINDOW_H = 480;
/** Render dark in unknown area & skip invisible stuff */
public static boolean RENDER_UFOG = true;
}

@ -9,7 +9,7 @@ import mightypork.utils.files.OsUtils;
public class Launcher {
/**
* Launcher
*
@ -18,72 +18,72 @@ public class Launcher {
public static void main(String[] args)
{
// System.out.println("argv = " + Arrays.toString(args)+"\n");
Level llSyso = Level.FINER;
File workdir = null;
boolean logBus = false;
try {
boolean localWorkdir = false;
String lwdDir = null;
for (int i = 0; i < args.length; i++) {
final String arg = args[i];
if (arg.equals("--workdir") || arg.equals("-w")) {
localWorkdir = true;
lwdDir = args[i + 1];
i++;
continue;
} else if (arg.equals("--silent") || arg.equals("-s")) {
llSyso = Level.OFF;
continue;
} else if (arg.equals("--warn") || arg.equals("-e")) {
llSyso = Level.WARNING;
continue;
} else if (arg.equals("--verbose") || arg.equals("-v")) {
llSyso = Level.ALL;
continue;
} else if (arg.equals("--help") || arg.equals("-h")) {
printHelp();
System.exit(0);
} else if (arg.equals("--debug-bus")) {
logBus = true;
} else {
System.err.println("Unknown argument: " + arg);
printHelp();
System.exit(1);
}
}
if (!localWorkdir) {
workdir = OsUtils.getHomeWorkDir(".rogue");
} else {
workdir = new File(lwdDir);
}
} catch (final Exception e) {
System.out.println("Error parsing arguments:");
e.printStackTrace();
printHelp();
System.exit(1);
}
final App app = new RogueApp(workdir, llSyso);
if (logBus) App.bus().detailedLogging = true;
final App app = new RogueApp(workdir, llSyso);
if (logBus) App.bus().detailedLogging = true;
app.start();
}
private static void printHelp()
{
//@formatter:off

@ -6,15 +6,10 @@ import java.util.logging.Level;
import mightypork.gamecore.backends.lwjgl.LwjglBackend;
import mightypork.gamecore.core.App;
import mightypork.gamecore.core.DeltaMainLoop;
import mightypork.gamecore.core.MainLoop;
import mightypork.gamecore.core.events.MainLoopRequest;
import mightypork.gamecore.core.init.InitTaskCrashHandler;
import mightypork.gamecore.core.init.InitTaskIonizables;
import mightypork.gamecore.core.init.InitTaskLog;
import mightypork.gamecore.core.init.InitTaskLogHeader;
import mightypork.gamecore.core.init.InitTaskMainLoop;
import mightypork.gamecore.core.init.InitTaskResourceLoaderAsync;
import mightypork.gamecore.core.plugins.screenshot.InitTaskPluginScreenshot;
import mightypork.gamecore.core.plugins.screenshot.ScreenshotRequestListener;
import mightypork.gamecore.gui.events.ViewportChangeEvent;
@ -22,12 +17,12 @@ import mightypork.gamecore.gui.events.ViewportChangeListener;
import mightypork.gamecore.resources.Res;
import mightypork.rogue.RogueStateManager.RogueState;
import mightypork.rogue.events.RogueStateRequest;
import mightypork.rogue.init.AddResources;
import mightypork.rogue.init.InitScreens;
import mightypork.rogue.init.SetupConfig;
import mightypork.rogue.init.SetupDisplay;
import mightypork.rogue.init.SetupGlobalKeys;
import mightypork.rogue.init.SetupWorkdir;
import mightypork.rogue.init.RogueAddResources;
import mightypork.rogue.init.RogueInitUI;
import mightypork.rogue.init.RogueSetupConfig;
import mightypork.rogue.init.RogueSetupDisplay;
import mightypork.rogue.init.RogueSetupGlobalKeys;
import mightypork.rogue.init.RogueSetupWorkdir;
import mightypork.rogue.world.Inventory;
import mightypork.utils.ion.Ion;
import mightypork.utils.logging.Log;
@ -39,13 +34,13 @@ import mightypork.utils.logging.Log;
* @author Ondřej Hruška (MightyPork)
*/
public final class RogueApp extends App implements ViewportChangeListener, ScreenshotRequestListener {
public RogueApp(File workdir, final Level logStdout)
{
super(new LwjglBackend());
addInitTask(new InitTaskLog() {
@Override
public void init()
{
@ -55,25 +50,24 @@ public final class RogueApp extends App implements ViewportChangeListener, Scree
setLogName("runtime");
}
});
addInitTask(new InitTaskLogHeader() {
@Override
public void before()
{
Log.i("## Starting Rogue v." + Const.VERSION + " ##");
}
});
addInitTask(new InitTaskCrashHandler());
addInitTask(new SetupWorkdir(workdir));
addInitTask(new SetupConfig());
addInitTask(new RogueSetupWorkdir(workdir));
addInitTask(new RogueSetupConfig());
addInitTask(new InitTaskPluginScreenshot("screenshots"));
addInitTask(new InitTaskIonizables() {
@Override
public void after()
{
@ -81,38 +75,27 @@ public final class RogueApp extends App implements ViewportChangeListener, Scree
Ion.register(Inventory.class);
}
});
addInitTask(new SetupDisplay());
addInitTask(new SetupGlobalKeys());
addInitTask(new InitTaskResourceLoaderAsync());
addInitTask(new AddResources());
addInitTask(new InitTaskMainLoop() {
@Override
protected MainLoop getLoopImpl()
{
return new DeltaMainLoop();
}
});
addInitTask(new InitScreens());
addInitTask(new RogueSetupDisplay());
addInitTask(new RogueSetupGlobalKeys());
addInitTask(new RogueAddResources());
addInitTask(new RogueInitUI());
}
@Override
public void onScreenshotRequest()
{
Res.sound("gui.shutter").play(0.8);
}
@Override
protected void postInit()
{
bus().send(new MainLoopRequest(new Runnable() {
@Override
public void run()
{
@ -125,16 +108,16 @@ public final class RogueApp extends App implements ViewportChangeListener, Scree
}
}, false));
}
@Override
public void onViewportChanged(ViewportChangeEvent event)
{
// save viewport size to config file
final boolean fs = gfx().isFullscreen();
cfg().setValue("display.fullscreen", fs);
if (!fs) {
cfg().setValue("display.width", gfx().getWidth());
cfg().setValue("display.height", gfx().getHeight());

@ -8,40 +8,40 @@ import mightypork.utils.logging.Log;
public class RogueStateManager extends BusNode {
public static enum RogueState
{
MAIN_MENU, SELECT_WORLD, PLAY_WORLD, EXIT, STORY
}
public void triggerAction(RogueState state, boolean fromDark)
{
switch (state) {
case MAIN_MENU:
App.bus().send(new CrossfadeRequest("main_menu", fromDark));
break;
case SELECT_WORLD:
App.bus().send(new CrossfadeRequest("select_world", fromDark));
break;
case PLAY_WORLD:
App.bus().send(new CrossfadeRequest("game", fromDark));
break;
case STORY:
App.bus().send(new CrossfadeRequest("story", fromDark));
break;
case EXIT:
App.bus().send(new CrossfadeRequest(null));
break;
default:
Log.w("Unknown action: " + state);
break;
}
}
}

@ -13,11 +13,11 @@ import mightypork.utils.eventbus.events.flags.SingleReceiverEvent;
*/
@SingleReceiverEvent
public class LoadingOverlayRequest extends BusEvent<LoadingOverlay> {
private final String msg;
private final Runnable task;
/**
* @param msg task description
* @param task task runnable
@ -27,12 +27,12 @@ public class LoadingOverlayRequest extends BusEvent<LoadingOverlay> {
this.task = task;
this.msg = msg;
}
@Override
protected void handleBy(LoadingOverlay handler)
{
handler.show(msg, task);
}
}

@ -12,25 +12,25 @@ import mightypork.utils.eventbus.BusEvent;
* @author Ondřej Hruška (MightyPork)
*/
public class RogueStateRequest extends BusEvent<RogueStateManager> {
final private RogueState requested;
private final boolean fromDark;
public RogueStateRequest(RogueState requested)
{
this.requested = requested;
this.fromDark = false;
}
public RogueStateRequest(RogueState requested, boolean fromDark)
{
this.requested = requested;
this.fromDark = fromDark;
}
@Override
protected void handleBy(RogueStateManager handler)
{

@ -15,29 +15,29 @@ import mightypork.gamecore.graphics.textures.WrapMode;
import mightypork.utils.math.constraints.rect.Rect;
public class AddResources extends InitTaskResources {
public class RogueAddResources extends InitTaskResources {
@Override
public void addFonts(FontRegistry fonts)
{
DeferredFont font;
//fonts.loadFont("polygon_pixel", new DeferredFont("/res/font/PolygonPixel5x7Standard.ttf", Glyphs.basic, 16));
fonts.addFont("press_start", font = App.gfx().createFont("/res/font/PressStart2P.ttf", Glyphs.basic, 16));
fonts.addFont("battlenet", font = App.gfx().createFont("/res/font/battlenet.ttf", Glyphs.basic, 16));
font.setDiscardRatio(3 / 16D, 2 / 16D);
fonts.addFont("tinyutf", font = App.gfx().createFont("/res/font/TinyUnicode2.ttf", Glyphs.basic, 16));
font.setDiscardRatio(5 / 16D, 3 / 16D);
// aliases
fonts.addAlias("thick", "press_start");
fonts.addAlias("thin", "battlenet");
fonts.addAlias("tiny", "tinyutf");
}
@Override
public void addSounds(SoundRegistry sounds)
{
@ -45,42 +45,42 @@ public class AddResources extends InitTaskResources {
sounds.addLoop("music.menu", "/res/audio/music/Home_Base_Groove.ogg", 1, 0.7, 3, 1.5);
sounds.addLoop("music.dungeon", "/res/audio/music/8bit_Dungeon_Level.ogg", 1, 0.6, 3, 1.5);
//sounds.addLoop("music.dungeon2.boss", "/res/audio/music/8bit_Dungeon_Boss.ogg", 1, 0.6, 3, 1.5);
sounds.addEffect("gui.shutter", "/res/audio/effects/shutter.ogg", 1, 1);
sounds.addEffect("gui.click", "/res/audio/effects/click.ogg", 1, 1);
sounds.addEffect("game.win", "/res/audio/effects/win.ogg", 1, 0.7);
sounds.addEffect("game.lose", "/res/audio/effects/lose.ogg", 1, 1);
sounds.addEffect("item.drop", "/res/audio/effects/drop.ogg", 1, 1);
sounds.addEffect("item.pickup", "/res/audio/effects/pickup.ogg", 1, 1);
sounds.addEffect("item.break", "/res/audio/effects/break.ogg", 1, 1);
sounds.addEffect("player.eat", "/res/audio/effects/eat.ogg", 1, 1);
sounds.addEffect("player.hurt", "/res/audio/effects/hurt.ogg", 1, 1);
sounds.addEffect("crate.open", "/res/audio/effects/crate.ogg", 1, 1);
sounds.addEffect("door.open", "/res/audio/effects/door.ogg", 1, 1);
sounds.addEffect("door.close", "/res/audio/effects/door.ogg", 0.8, 1);
sounds.addEffect("rat.sqeak1", "/res/audio/effects/mouse1.ogg", 1, 1);
sounds.addEffect("rat.sqeak2", "/res/audio/effects/mouse2.ogg", 1, 1);
sounds.addEffect("rat.sqeak3", "/res/audio/effects/mouse3.ogg", 1, 1);
sounds.addEffect("rat.sqeak4", "/res/audio/effects/mouse4.ogg", 1, 1);
sounds.addEffect("rat.sqeak5", "/res/audio/effects/mouse5.ogg", 1, 1);
}
@Override
public void addTextures(TextureRegistry textures)
{
ITexture texture;
QuadGrid grid;
// gui
texture = textures.loadTexture("/res/img/gui.png", FilterMode.NEAREST, WrapMode.CLAMP);
// small gui elements
grid = texture.grid(32, 32);
textures.add("hud.heart.on", grid.makeQuad(0, 0));
@ -88,14 +88,14 @@ public class AddResources extends InitTaskResources {
textures.add("hud.heart.half", grid.makeQuad(2, 0));
textures.add("hud.xp.on", grid.makeQuad(0, 1));
textures.add("hud.xp.off", grid.makeQuad(1, 1));
// nav
grid = texture.grid(8, 8);
textures.add("nav.bg", grid.makeQuad(0, 7, 4, 1));
textures.add("nav.button.bg.base", grid.makeQuad(4, 7));
textures.add("nav.button.bg.hover", grid.makeQuad(5, 7));
textures.add("nav.button.bg.down", grid.makeQuad(6, 7));
textures.add("nav.button.fg.eat", grid.makeQuad(0, 6));
textures.add("nav.button.fg.inventory", grid.makeQuad(1, 6));
textures.add("nav.button.fg.attack", grid.makeQuad(2, 6));
@ -106,10 +106,10 @@ public class AddResources extends InitTaskResources {
textures.add("nav.button.fg.magnify", grid.makeQuad(7, 6));
textures.add("nav.button.fg.save", grid.makeQuad(7, 5));
textures.add("nav.button.fg.load", grid.makeQuad(6, 5));
textures.add("inv.slot.base", grid.makeQuad(0, 5));
textures.add("inv.slot.selected", grid.makeQuad(1, 5));
// sprites
texture = textures.loadTexture("/res/img/sprites.png", FilterMode.NEAREST, WrapMode.CLAMP);
grid = texture.grid(8, 8);
@ -118,7 +118,7 @@ public class AddResources extends InitTaskResources {
textures.add("sprite.rat.brown", grid.makeSheet(0, 2, 4, 1));
textures.add("sprite.rat.boss", grid.makeSheet(0, 3, 4, 1));
textures.add("sprite.zzz", grid.makeQuad(0, 7)); // sleep thingy
// logo
texture = textures.loadTexture("/res/img/logo.png", FilterMode.NEAREST, WrapMode.CLAMP);
textures.add("logo", texture.makeQuad(Rect.make(0, 0, 0.543, 0.203)));
@ -126,52 +126,52 @@ public class AddResources extends InitTaskResources {
textures.add("death", grid.makeQuad(0, 2));
textures.add("death2", grid.makeQuad(1, 2, 1.5, 1));
textures.add("win", grid.makeQuad(2.5, 2, 1.5, 1));
grid = texture.grid(8, 4);
textures.add("story_1", grid.makeQuad(0, 2, 3, 1));
textures.add("story_2", grid.makeQuad(3, 2, 3, 1));
textures.add("story_3", grid.makeQuad(0, 3, 3, 1));
// tiles
texture = textures.addTexture("tiles", "/res/img/tiles.png", FilterMode.NEAREST, WrapMode.CLAMP);
grid = texture.grid(8, 8);
textures.add("tile.brick.floor", grid.makeSheet(0, 1, 5, 1));
textures.add("tile.brick.wall", grid.makeSheet(0, 0, 8, 1));
textures.add("tile.brick.door.closed", grid.makeQuad(1, 2));
textures.add("tile.brick.door.open", grid.makeQuad(2, 2));
textures.add("tile.brick.door.secret", grid.makeSheet(0, 3, 2, 1));
textures.add("tile.brick.passage", grid.makeSheet(3, 2, 4, 1));
textures.add("tile.brick.stairs.up", grid.makeQuad(0, 6));
textures.add("tile.brick.stairs.down", grid.makeQuad(1, 6));
textures.add("tile.extra.chest.closed", grid.makeQuad(0, 4));
textures.add("tile.extra.chest.open", grid.makeQuad(1, 4));
// shadows
textures.add("tile.shadow.n", grid.makeQuad(0, 7));
textures.add("tile.shadow.s", grid.makeQuad(0, 7).flipY());
textures.add("tile.shadow.w", grid.makeQuad(1, 7));
textures.add("tile.shadow.e", grid.makeQuad(1, 7).flipX());
textures.add("tile.shadow.nw", grid.makeQuad(2, 7));
textures.add("tile.shadow.ne", grid.makeQuad(2, 7).flipX());
textures.add("tile.shadow.sw", grid.makeQuad(2, 7).flipY());
textures.add("tile.shadow.se", grid.makeQuad(2, 7).flipY().flipX());
// unexplored fog
textures.add("tile.ufog.n", grid.makeQuad(3, 7));
textures.add("tile.ufog.s", grid.makeQuad(3, 7).flipY());
textures.add("tile.ufog.w", grid.makeQuad(4, 7));
textures.add("tile.ufog.e", grid.makeQuad(4, 7).flipX());
textures.add("tile.ufog.nw", grid.makeQuad(5, 7));
textures.add("tile.ufog.ne", grid.makeQuad(5, 7).flipX());
textures.add("tile.ufog.sw", grid.makeQuad(5, 7).flipY());
textures.add("tile.ufog.se", grid.makeQuad(5, 7).flipY().flipX());
textures.add("tile.ufog.full", grid.makeQuad(6, 7));
texture = textures.addTexture("items", "/res/img/items.png", FilterMode.NEAREST, WrapMode.CLAMP);
grid = texture.grid(8, 8);
textures.add("item.meat", grid.makeQuad(0, 0));
@ -186,5 +186,5 @@ public class AddResources extends InitTaskResources {
textures.add("item.knife", grid.makeQuad(1, 1));
textures.add("item.twig", grid.makeQuad(2, 1));
}
}

@ -2,7 +2,7 @@ package mightypork.rogue.init;
import mightypork.gamecore.core.App;
import mightypork.gamecore.core.init.InitTaskScreens;
import mightypork.gamecore.core.init.InitTaskUI;
import mightypork.gamecore.graphics.Renderable;
import mightypork.gamecore.gui.screens.ScreenRegistry;
import mightypork.gamecore.gui.screens.impl.CrossfadeOverlay;
@ -16,28 +16,28 @@ import mightypork.rogue.screens.story.ScreenStory;
import mightypork.rogue.world.WorldProvider;
public class InitScreens extends InitTaskScreens {
public class RogueInitUI extends InitTaskUI {
@Override
protected Renderable getMainRenderableImpl()
protected Renderable createMainRenderable()
{
final ScreenRegistry screens = new ScreenRegistry();
app.addChildClient(screens);
/* game screen references world provider instance */
App.bus().subscribe(new RogueStateManager());
App.bus().subscribe(WorldProvider.get());
screens.addOverlay(new CrossfadeOverlay());
screens.addOverlay(new CrossfadeOverlay());
screens.addScreen("main_menu", new ScreenMainMenu());
screens.addScreen("select_world", new ScreenSelectWorld());
screens.addScreen("game", new ScreenGame());
screens.addScreen("story", new ScreenStory());
screens.addOverlay(new FpsOverlay());
screens.addOverlay(new LoadingOverlay());
return screens;
}
}

@ -2,37 +2,37 @@ package mightypork.rogue.init;
import mightypork.gamecore.core.config.Config;
import mightypork.gamecore.core.config.InitTaskConfig;
import mightypork.gamecore.core.init.InitTaskConfig;
public class SetupConfig extends InitTaskConfig {
public class RogueSetupConfig extends InitTaskConfig {
@Override
protected Config buildConfig()
{
final Config cfg = new Config("config.ini", "Rogue config file");
cfg.addBoolean("display.fullscreen", false, "Start in fullscreen (remembers state at exit)");
cfg.addInteger("display.width", 1024, "Initial width (remembers from last time)");
cfg.addInteger("display.height", 768, "Initial height (remembers from last time)");
cfg.addBoolean("opt.show_story", true, "Show story on start-up.");
// keys
cfg.addBoolean("opt.show_story", true, "Show story on start-up.");
// keys
cfg.addKeyStroke("global.quit", "CTRL+Q", "Quit the game");
cfg.addKeyStroke("global.quit_force", "CTRL+SHIFT+Q", "Quit the game without asking, low-level");
cfg.addKeyStroke("global.screenshot", "F2", "Take screenshot (save into working directory)");
cfg.addKeyStroke("global.fullscreen", "F11", "Toggle fullscreen");
cfg.addKeyStroke("global.fps_meter", "F3", "Toggle FPS meter overlay");
cfg.addKeyStroke("general.close", "ESC", "Leave a dialog or screen");
cfg.addKeyStroke("general.cancel", "ESC", "\"Cancel\" option in dialogs");
cfg.addKeyStroke("general.confirm", "ENTER", "\"Confirm\" option in dialogs");
cfg.addKeyStroke("general.yes", "Y", "\"Yes\" option in dialogs");
cfg.addKeyStroke("general.no", "N", "\"No\" option in dialogs");
cfg.addKeyStroke("game.quit", "ESC", "Quit to menu");
cfg.addKeyStroke("game.save", "CTRL+S", "Save to file");
cfg.addKeyStroke("game.load", "CTRL+L", "Load from file");
@ -42,22 +42,22 @@ public class SetupConfig extends InitTaskConfig {
cfg.addKeyStroke("game.drop", "D", "Drop last picked item");
cfg.addKeyStroke("game.inventory", "I", "Toggle inventory view");
cfg.addKeyStroke("game.pause", "P", "Pause the game");
cfg.addKeyStroke("game.walk.up", "UP", "Walk north");
cfg.addKeyStroke("game.walk.down", "DOWN", "Walk south");
cfg.addKeyStroke("game.walk.left", "LEFT", "Walk west");
cfg.addKeyStroke("game.walk.right", "RIGHT", "Walk east");
cfg.addKeyStroke("game.cheat.xray", "CTRL+SHIFT+X", "Cheat to see unexplored tiles");
cfg.addKeyStroke("game.inv.use", "E", "Use (eat or equip) the selected item");
cfg.addKeyStroke("game.inv.drop", "D", "Drop the selected item");
cfg.addKeyStroke("game.inv.move.left", "LEFT", "Move inventory cursor left");
cfg.addKeyStroke("game.inv.move.right", "RIGHT", "Move inventory cursor right");
cfg.addKeyStroke("game.inv.move.up", "UP", "Move inventory cursor up");
cfg.addKeyStroke("game.inv.move.down", "DOWN", "Move inventory cursor down");
return cfg;
}
}

@ -6,20 +6,20 @@ import mightypork.gamecore.core.init.InitTaskDisplay;
import mightypork.rogue.Const;
public class SetupDisplay extends InitTaskDisplay {
public class RogueSetupDisplay extends InitTaskDisplay {
@Override
public void init()
{
final int w = App.cfg().getValue("display.width");
final int h = App.cfg().getValue("display.height");
final boolean fs = App.cfg().getValue("display.fullscreen");
setSize(w, h);
setResizable(true);
setFullscreen(fs);
setTitle(Const.TITLEBAR);
setTargetFps(Const.FPS_RENDER);
}
}

@ -9,7 +9,7 @@ import mightypork.gamecore.input.Trigger;
import mightypork.utils.eventbus.BusEvent;
public class SetupGlobalKeys extends InitTask {
public class RogueSetupGlobalKeys extends InitTask {
@Override
@ -55,6 +55,6 @@ public class SetupGlobalKeys extends InitTask {
@Override
public String[] getDependencies()
{
return new String[] { "config" };
return new String[] { "config", "backend" };
}
}

@ -6,14 +6,14 @@ import java.io.File;
import mightypork.gamecore.core.init.InitTaskWorkdir;
public class SetupWorkdir extends InitTaskWorkdir {
public SetupWorkdir(File workdir)
public class RogueSetupWorkdir extends InitTaskWorkdir {
public RogueSetupWorkdir(File workdir)
{
super(workdir, true);
}
@Override
public void init()
{

@ -22,48 +22,48 @@ import mightypork.utils.string.StringProvider;
* @author Ondřej Hruška (MightyPork)
*/
public class FpsOverlay extends Overlay {
TextPainter tp;
public FpsOverlay()
{
/*
* Toggle key: F3
*/
bindKey(App.cfg().getKeyStroke("global.fps_meter"), Trigger.RISING, new Action() {
@Override
public void execute()
{
setVisible(!isVisible());
}
});
final IFont font = Res.font("thin");
final Num h = root.height();
final RectBound constraint = root.shrink(h.perc(3)).topRight().startRect().growDown(h.perc(5).max(16));
tp = new TextPainter(font, AlignX.RIGHT, RGB.YELLOW, new StringProvider() {
@Override
public String getString()
{
return App.gfx().getFps() + " fps";
}
});
tp.setRect(constraint);
tp.setShadow(RGB.BLACK_60, Vect.make(tp.height().div(8).round()));
root.add(tp);
setVisible(false); // initially hide.
}
@Override
public int getZIndex()
{

@ -24,32 +24,32 @@ import mightypork.utils.string.StringProvider;
* @author Ondřej Hruška (MightyPork)
*/
public class LoadingOverlay extends Overlay {
private static final double T_IN = 0.5;
private static final double T_OUT = 1;
private final NumAnimated alpha = new NumAnimated(0);
private final StringProvider msgStrProv = new StringProvider() {
@Override
public String getString()
{
return msg == null ? "" : msg;
}
};
private boolean busy;
private String msg;
private Runnable task;
private final TimedTask tt = new TimedTask() {
@Override
public void run()
{
Support.runAsThread(new Runnable() {
@Override
public void run()
{
@ -61,38 +61,38 @@ public class LoadingOverlay extends Overlay {
});
}
};
public LoadingOverlay()
{
final QuadPainter qp = new QuadPainter(PAL16.SEABLUE);
qp.setRect(root);
root.add(qp);
updated.add(alpha);
updated.add(tt);
Rect textRect = root.shrink(Num.ZERO, root.height().perc(48));
textRect = textRect.moveY(root.height().perc(-10));
final TextPainter tp = new TextPainter(Res.font("thick"), AlignX.CENTER, RGB.WHITE, msgStrProv);
tp.setRect(textRect);
tp.setShadow(RGB.BLACK_60, tp.height().mul(1 / 8D).toVectXY());
root.add(tp);
setAlpha(alpha);
}
@Override
public int getZIndex()
{
return 10001; // not too high, so app can put something on top
}
/**
* Show for a task
*
@ -102,14 +102,14 @@ public class LoadingOverlay extends Overlay {
public void show(String message, Runnable task)
{
if (busy) throw new IllegalStateException("Loader is busy with another task.");
this.msg = message;
this.task = task;
this.busy = true;
alpha.setEasing(Easing.SINE_IN);
alpha.fadeIn(T_IN);
tt.start(T_IN);
}
}

@ -2,20 +2,20 @@ package mightypork.rogue.screens;
import mightypork.gamecore.core.App;
import mightypork.gamecore.core.events.ShutdownEvent;
import mightypork.gamecore.core.events.ShutdownListener;
import mightypork.gamecore.core.events.ShutdownRequest;
import mightypork.gamecore.core.events.ShutdownRequestListener;
import mightypork.gamecore.gui.screens.LayeredScreen;
import mightypork.rogue.RogueStateManager.RogueState;
import mightypork.rogue.events.RogueStateRequest;
import mightypork.utils.annotations.Stub;
public class RogueScreen extends LayeredScreen implements ShutdownListener {
public class RogueScreen extends LayeredScreen implements ShutdownRequestListener {
@Override
@Stub
public void onShutdown(ShutdownEvent event)
public void onShutdownRequested(ShutdownRequest event)
{
App.bus().send(new RogueStateRequest(RogueState.EXIT));
//event.consume(); FIXME we need a "shutdown request" event AND "shutdown" event.

@ -11,17 +11,17 @@ import mightypork.utils.math.constraints.rect.Rect;
public class HeartBar extends BaseComponent {
private final TxQuad img_on;
private final TxQuad img_off;
private final TxQuad img_half;
private final Num total;
private final Num active;
private final NumVar index = new NumVar(0);
private final Rect heart;
public HeartBar(Num total, Num active, TxQuad img_on, TxQuad img_half, TxQuad img_off, AlignX align)
{
super();
@ -30,10 +30,10 @@ public class HeartBar extends BaseComponent {
this.img_on = img_on;
this.img_off = img_off;
this.img_half = img_half;
final Num h = height();
final Num w = width();
switch (align) {
case LEFT:
heart = leftEdge().growRight(h).moveX(index.mul(h));
@ -47,19 +47,19 @@ public class HeartBar extends BaseComponent {
default:
heart = null; // impossible
}
}
@Override
protected void renderComponent()
{
for (int i = 0; i < total.value(); i++) {
index.setTo(i);
final double rem = active.value() - i;
App.gfx().quad(heart, (rem > 0.6 ? img_on : rem > 0.25 ? img_half : img_off));
}
}
}

@ -12,51 +12,51 @@ import mightypork.utils.math.constraints.rect.RectBound;
public class IngameNav extends LayoutComponent {
private final FlowColumnLayout leftFlow;
private final FlowColumnLayout rightFlow;
private final Rect paintHelper;
private final TxQuad bg;
public IngameNav()
{
this(null);
}
public IngameNav(RectBound context)
{
super(context);
final Rect shr = this.shrink(height().perc(5));
leftFlow = new FlowColumnLayout(context, shr.height(), AlignX.LEFT);
rightFlow = new FlowColumnLayout(context, shr.height(), AlignX.RIGHT);
leftFlow.setRect(shr);
rightFlow.setRect(shr);
attach(leftFlow);
attach(rightFlow);
paintHelper = leftEdge().growRight(height().mul(4));
bg = Res.txQuad("nav.bg");
}
public void addLeft(NavButton comp)
{
leftFlow.add(comp);
}
public void addRight(NavButton comp)
{
rightFlow.add(comp);
}
@Override
public void renderComponent()
{
@ -64,8 +64,8 @@ public class IngameNav extends LayoutComponent {
for (int i = 0; i < Math.ceil(width().value() / paintHelper.width().value()); i++) {
App.gfx().quad(paintHelper.moveX(paintHelper.width().value() * i), bg);
}
super.renderComponent();
}
}

@ -11,7 +11,7 @@ import mightypork.rogue.world.PlayerFacade;
import mightypork.rogue.world.WorldProvider;
import mightypork.rogue.world.item.Item;
import mightypork.rogue.world.item.ItemType;
import mightypork.utils.Support;
import mightypork.utils.Str;
import mightypork.utils.math.AlignX;
import mightypork.utils.math.color.Color;
import mightypork.utils.math.color.pal.RGB;
@ -26,76 +26,76 @@ import mightypork.utils.math.constraints.rect.caching.RectCache;
* @author Ondřej Hruška (MightyPork)
*/
public class InvSlot extends ClickableComponent {
private final TxQuad txBase, txSelected;
protected boolean selected = false;
protected int index;
private final RectCache itemRect;
private final RectCache uiRect;
private final InvSlot[] slots;
private final TextPainter rbTxP;
private final TextPainter rtTxP;
private final RectCache rbTxRect;
private final RectCache rtTxRect;
private final Rect usesRect;
private final Num hAlpha = Num.make(0.7);
public InvSlot(int index, InvSlot[] allSlots)
{
super();
this.txBase = Res.txQuad("inv.slot.base");
this.txSelected = Res.txQuad("inv.slot.selected");
this.index = index;
this.slots = allSlots;
this.uiRect = getRect().shrink(height().perc(16)).cached();
this.itemRect = uiRect.shrink(Num.ZERO, height().perc(14), height().perc(14), Num.ZERO).cached();
this.usesRect = uiRect.topLeft().startRect().grow(Num.ZERO, uiRect.width().perc(40), Num.ZERO, uiRect.height().perc(8));
//@formatter:off
this.rbTxRect = uiRect.bottomEdge()
.moveY(uiRect.height().perc(1*(30/7D)))
.growUp(uiRect.height().perc(30)).cached();
//@formatter:on
rbTxP = new TextPainter(Res.font("tiny"), AlignX.RIGHT, RGB.WHITE);
rbTxP.setRect(rbTxRect);
rbTxP.setShadow(RGB.BLACK_70, rbTxP.getRect().height().div(7).toVectXY());
//@formatter:off
this.rtTxRect = uiRect.topEdge()
.growDown(uiRect.height().perc(30)).cached();
//@formatter:on
rtTxP = new TextPainter(Res.font("tiny"), AlignX.RIGHT, RGB.GREEN);
rtTxP.setRect(rtTxRect);
rtTxP.setShadow(RGB.BLACK_70, rtTxP.getRect().height().div(7).toVectXY());
setAction(new Action() {
@Override
protected void execute()
{
for (final InvSlot sl : slots) {
sl.selected = false;
}