Save-confirm dialog in game
This commit is contained in:
@@ -80,7 +80,7 @@ public abstract class BaseApp implements AppAccess, UncaughtExceptionHandler {
|
||||
}
|
||||
|
||||
// only here it makes sense to log.
|
||||
Log.i("=== Commencing initialization sequence ===");
|
||||
Log.i("=== Starting initialization sequence ===");
|
||||
|
||||
|
||||
/*
|
||||
@@ -145,7 +145,7 @@ public abstract class BaseApp implements AppAccess, UncaughtExceptionHandler {
|
||||
initScreens(screenRegistry);
|
||||
|
||||
postInit();
|
||||
Log.i("=== Initialized sequence completed ===");
|
||||
Log.i("=== Initialization sequence completed ===");
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,61 +0,0 @@
|
||||
package mightypork.gamecore.gui.components.layout;
|
||||
|
||||
|
||||
import mightypork.gamecore.app.AppAccess;
|
||||
import mightypork.gamecore.gui.components.Component;
|
||||
import mightypork.gamecore.gui.components.LayoutComponent;
|
||||
import mightypork.gamecore.util.math.constraints.rect.builders.TiledRect;
|
||||
import mightypork.gamecore.util.math.constraints.rect.proxy.RectBound;
|
||||
|
||||
|
||||
/**
|
||||
* Holder with evenly spaced columns
|
||||
*
|
||||
* @author MightyPork
|
||||
*/
|
||||
public class ColumnHolder extends LayoutComponent {
|
||||
|
||||
private final TiledRect tiler;
|
||||
private int col = 0;
|
||||
|
||||
|
||||
/**
|
||||
* @param app app access
|
||||
* @param context context
|
||||
* @param cols number of columns
|
||||
*/
|
||||
public ColumnHolder(AppAccess app, RectBound context, int cols)
|
||||
{
|
||||
super(app, context);
|
||||
this.tiler = columns(cols);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* make a new holder.<br>
|
||||
* Context must be assigned before rendering.
|
||||
*
|
||||
* @param app app access
|
||||
* @param cols number of columns
|
||||
*/
|
||||
public ColumnHolder(AppAccess app, int cols)
|
||||
{
|
||||
this(app, null, cols);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Add a row to the holder.
|
||||
*
|
||||
* @param elem
|
||||
*/
|
||||
public void add(final Component elem)
|
||||
{
|
||||
if (elem == null) return;
|
||||
|
||||
elem.setRect(tiler.column(col++));
|
||||
|
||||
attach(elem);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
package mightypork.gamecore.gui.components.layout;
|
||||
|
||||
|
||||
import mightypork.gamecore.app.AppAccess;
|
||||
import mightypork.gamecore.gui.components.Component;
|
||||
import mightypork.gamecore.util.math.constraints.rect.proxy.RectBound;
|
||||
|
||||
|
||||
public class ColumnLayout extends GridLayout {
|
||||
|
||||
private int col = 0;
|
||||
|
||||
|
||||
public ColumnLayout(AppAccess app, int rows)
|
||||
{
|
||||
this(app, null, rows);
|
||||
}
|
||||
|
||||
|
||||
public ColumnLayout(AppAccess app, RectBound context, int cols)
|
||||
{
|
||||
super(app, context, 1, cols);
|
||||
}
|
||||
|
||||
|
||||
public void add(final Component elem)
|
||||
{
|
||||
add(elem, 1);
|
||||
}
|
||||
|
||||
|
||||
public void add(final Component elem, int colSpan)
|
||||
{
|
||||
if (elem == null) return;
|
||||
|
||||
put(elem, 0, col, 1, colSpan);
|
||||
col += colSpan;
|
||||
}
|
||||
|
||||
|
||||
public void skip(int cols)
|
||||
{
|
||||
col += cols;
|
||||
}
|
||||
}
|
||||
@@ -1,61 +0,0 @@
|
||||
package mightypork.gamecore.gui.components.layout;
|
||||
|
||||
|
||||
import mightypork.gamecore.app.AppAccess;
|
||||
import mightypork.gamecore.gui.components.Component;
|
||||
import mightypork.gamecore.gui.components.LayoutComponent;
|
||||
import mightypork.gamecore.util.math.constraints.rect.builders.TiledRect;
|
||||
import mightypork.gamecore.util.math.constraints.rect.proxy.RectBound;
|
||||
|
||||
|
||||
/**
|
||||
* Holder with evenly spaced rows
|
||||
*
|
||||
* @author MightyPork
|
||||
*/
|
||||
public class RowHolder extends LayoutComponent {
|
||||
|
||||
private final TiledRect tiler;
|
||||
private int row = 0;
|
||||
|
||||
|
||||
/**
|
||||
* Make a row holder.<br>
|
||||
* Context must be assigned before rendering.
|
||||
*
|
||||
* @param app app access
|
||||
* @param rows number of rows
|
||||
*/
|
||||
public RowHolder(AppAccess app, int rows)
|
||||
{
|
||||
this(app, null, rows);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param app app access
|
||||
* @param context bounding context
|
||||
* @param rows number of rows
|
||||
*/
|
||||
public RowHolder(AppAccess app, RectBound context, int rows)
|
||||
{
|
||||
super(app, context);
|
||||
this.tiler = rows(rows);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Add a row to the holder.
|
||||
*
|
||||
* @param elem
|
||||
*/
|
||||
public void add(final Component elem)
|
||||
{
|
||||
if (elem == null) return;
|
||||
|
||||
elem.setRect(tiler.row(row++));
|
||||
|
||||
attach(elem);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
package mightypork.gamecore.gui.components.layout;
|
||||
|
||||
|
||||
import mightypork.gamecore.app.AppAccess;
|
||||
import mightypork.gamecore.gui.components.Component;
|
||||
import mightypork.gamecore.util.math.constraints.rect.proxy.RectBound;
|
||||
|
||||
|
||||
public class RowLayout extends GridLayout {
|
||||
|
||||
private int row = 0;
|
||||
|
||||
|
||||
public RowLayout(AppAccess app, int rows)
|
||||
{
|
||||
this(app, null, rows);
|
||||
}
|
||||
|
||||
|
||||
public RowLayout(AppAccess app, RectBound context, int rows)
|
||||
{
|
||||
super(app, context, rows, 1);
|
||||
}
|
||||
|
||||
|
||||
public void add(final Component elem)
|
||||
{
|
||||
add(elem, 1);
|
||||
}
|
||||
|
||||
|
||||
public void add(final Component elem, int rowSpan)
|
||||
{
|
||||
if (elem == null) return;
|
||||
|
||||
put(elem, row, 0, rowSpan, 1);
|
||||
row += rowSpan;
|
||||
}
|
||||
|
||||
|
||||
public void skip(int rows)
|
||||
{
|
||||
row += rows;
|
||||
}
|
||||
}
|
||||
@@ -87,16 +87,20 @@ public abstract class Overlay extends AppSubModule implements Comparable<Overlay
|
||||
@Override
|
||||
public void setVisible(boolean visible)
|
||||
{
|
||||
this.visible = visible;
|
||||
root.setVisible(visible);
|
||||
if (visible != this.visible) {
|
||||
this.visible = visible;
|
||||
root.setVisible(visible);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void setEnabled(boolean yes)
|
||||
{
|
||||
this.enabled = yes;
|
||||
root.setEnabled(yes);
|
||||
if (enabled != yes) {
|
||||
this.enabled = yes;
|
||||
root.setEnabled(yes);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -189,4 +193,18 @@ public abstract class Overlay extends AppSubModule implements Comparable<Overlay
|
||||
{
|
||||
this.alphaMul = Num.make(alpha);
|
||||
}
|
||||
|
||||
|
||||
public void show()
|
||||
{
|
||||
setVisible(true);
|
||||
setEnabled(true);
|
||||
}
|
||||
|
||||
|
||||
public void hide()
|
||||
{
|
||||
setVisible(false);
|
||||
setEnabled(false);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,8 +15,8 @@ import mightypork.rogue.events.ActionRequest.RequestType;
|
||||
|
||||
public class CrossfadeOverlay extends Overlay {
|
||||
|
||||
private static final double T_IN = 0.5;
|
||||
private static final double T_OUT = 0.7;
|
||||
private static final double T_IN = 0.4;
|
||||
private static final double T_OUT = 0.6;
|
||||
|
||||
NumAnimated alpha = new NumAnimated(0);
|
||||
String requestedScreenName;
|
||||
@@ -41,7 +41,7 @@ public class CrossfadeOverlay extends Overlay {
|
||||
{
|
||||
super(app);
|
||||
|
||||
final QuadPainter qp = new QuadPainter(RGB.BLACK);
|
||||
final QuadPainter qp = new QuadPainter(RGB.BLACK); // TODO allow custom colors
|
||||
qp.setRect(root);
|
||||
root.add(qp);
|
||||
|
||||
|
||||
@@ -134,8 +134,8 @@ public final class App extends BaseApp {
|
||||
bindEventToKey(new ActionRequest(RequestType.FULLSCREEN), Keys.F11);
|
||||
bindEventToKey(new ActionRequest(RequestType.SCREENSHOT), Keys.F2);
|
||||
|
||||
bindEventToKey(new GameStateRequest(GameState.EXIT), Keys.Q, Keys.MOD_CONTROL);
|
||||
bindEventToKey(new GameStateRequest(GameState.MAIN_MENU), Keys.M, Keys.MOD_CONTROL);
|
||||
bindEventToKey(new GameStateRequest(GameState.EXIT), Keys.Q, Keys.MOD_SHIFT | Keys.MOD_CONTROL);
|
||||
bindEventToKey(new GameStateRequest(GameState.MAIN_MENU), Keys.M, Keys.MOD_SHIFT | Keys.MOD_CONTROL);
|
||||
}
|
||||
|
||||
|
||||
@@ -145,7 +145,7 @@ public final class App extends BaseApp {
|
||||
}
|
||||
|
||||
|
||||
private void bindEventToKey(final BusEvent<?> event, int key, byte mod)
|
||||
private void bindEventToKey(final BusEvent<?> event, int key, int mod)
|
||||
{
|
||||
getInput().bindKey(new KeyStroke(key, mod), new Runnable() {
|
||||
|
||||
|
||||
@@ -118,6 +118,8 @@ public final class Res {
|
||||
// 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)));
|
||||
grid = texture.grid(8, 8);
|
||||
textures.add("death", grid.makeQuad(0, 2));
|
||||
|
||||
|
||||
// tiles
|
||||
@@ -171,7 +173,7 @@ public final class Res {
|
||||
textures.add("item.bone", grid.makeQuad(5, 0));
|
||||
textures.add("item.cheese", grid.makeQuad(6, 0));
|
||||
textures.add("item.sandwich", grid.makeQuad(7, 0));
|
||||
textures.add("item.heart_piece", grid.makeQuad(0, 1));
|
||||
textures.add("item.heart", grid.makeQuad(0, 1));
|
||||
textures.add("item.knife", grid.makeQuad(1, 1));
|
||||
textures.add("item.twig", grid.makeQuad(2, 1));
|
||||
}
|
||||
|
||||
@@ -0,0 +1,156 @@
|
||||
package mightypork.rogue.screens.game;
|
||||
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import mightypork.gamecore.gui.Action;
|
||||
import mightypork.gamecore.gui.AlignX;
|
||||
import mightypork.gamecore.gui.components.layout.ColumnLayout;
|
||||
import mightypork.gamecore.gui.components.layout.RowLayout;
|
||||
import mightypork.gamecore.gui.components.painters.QuadPainter;
|
||||
import mightypork.gamecore.gui.components.painters.TextPainter;
|
||||
import mightypork.gamecore.gui.screens.ScreenLayer;
|
||||
import mightypork.gamecore.input.KeyStroke;
|
||||
import mightypork.gamecore.input.Keys;
|
||||
import mightypork.gamecore.logging.Log;
|
||||
import mightypork.gamecore.resources.fonts.GLFont;
|
||||
import mightypork.gamecore.util.math.Easing;
|
||||
import mightypork.gamecore.util.math.color.pal.RGB;
|
||||
import mightypork.gamecore.util.math.constraints.num.Num;
|
||||
import mightypork.gamecore.util.math.constraints.num.mutable.NumAnimated;
|
||||
import mightypork.gamecore.util.math.timing.TimedTask;
|
||||
import mightypork.rogue.Res;
|
||||
import mightypork.rogue.screens.PushButton;
|
||||
import mightypork.rogue.screens.game.ScreenGame.GScrState;
|
||||
import mightypork.rogue.world.WorldProvider;
|
||||
|
||||
|
||||
public class AskSaveLayer extends ScreenLayer {
|
||||
|
||||
public Runnable task;
|
||||
|
||||
NumAnimated numa = new NumAnimated(0, Easing.QUADRATIC_OUT);
|
||||
TimedTask hideTT = new TimedTask() {
|
||||
|
||||
@Override
|
||||
public void run()
|
||||
{
|
||||
gscreen.setState(GScrState.WORLD); // go back..
|
||||
}
|
||||
};
|
||||
|
||||
private final ScreenGame gscreen;
|
||||
|
||||
|
||||
public void setTask(Runnable task)
|
||||
{
|
||||
this.task = task;
|
||||
}
|
||||
|
||||
|
||||
public AskSaveLayer(final ScreenGame screen)
|
||||
{
|
||||
super(screen);
|
||||
this.gscreen = screen;
|
||||
|
||||
// darker down to cover console.
|
||||
final QuadPainter qp = new QuadPainter(RGB.BLACK_80);
|
||||
qp.setRect(root);
|
||||
root.add(qp);
|
||||
|
||||
final GLFont thick_font = Res.getFont("thick");
|
||||
|
||||
final RowLayout rl = new RowLayout(root, 2);
|
||||
rl.setRect(root.shrink(Num.ZERO, root.height().perc(40)).moveY(root.height().perc(-10)));
|
||||
root.add(rl);
|
||||
|
||||
final TextPainter txp = new TextPainter(thick_font, AlignX.CENTER, RGB.WHITE, "Save the game?");
|
||||
rl.add(txp, 1);
|
||||
txp.setPaddingHPerc(0, 25);
|
||||
|
||||
final ColumnLayout cl = new ColumnLayout(root, 21);
|
||||
cl.skip(2);
|
||||
rl.add(cl);
|
||||
|
||||
final PushButton btn1 = new PushButton(thick_font, "Yes", ScreenGame.COLOR_BTN_GOOD);
|
||||
btn1.textPainter.setAlign(AlignX.RIGHT);
|
||||
btn1.textPainter.setPaddingHPerc(25, 20);
|
||||
btn1.disableHover();
|
||||
cl.add(btn1, 6);
|
||||
|
||||
final PushButton btn2 = new PushButton(thick_font, "No", ScreenGame.COLOR_BTN_BAD);
|
||||
btn2.textPainter.setAlign(AlignX.CENTER);
|
||||
btn2.textPainter.setPaddingHPerc(25, 20);
|
||||
btn2.disableHover();
|
||||
cl.add(btn2, 3);
|
||||
|
||||
final PushButton btn3 = new PushButton(thick_font, "Cancel", ScreenGame.COLOR_BTN_CANCEL);
|
||||
btn3.textPainter.setAlign(AlignX.LEFT);
|
||||
btn3.textPainter.setPaddingHPerc(25, 20);
|
||||
btn3.disableHover();
|
||||
cl.add(btn3, 10);
|
||||
|
||||
final Action cancel = new Action() {
|
||||
|
||||
@Override
|
||||
protected void execute()
|
||||
{
|
||||
if (numa.isFinished()) {
|
||||
numa.fadeOut(0.3);
|
||||
hideTT.start(0.3);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
btn1.setAction(new Action() {
|
||||
|
||||
@Override
|
||||
protected void execute()
|
||||
{
|
||||
try {
|
||||
WorldProvider.get().saveWorld();
|
||||
if (task != null) task.run();
|
||||
} catch (final IOException e) {
|
||||
Log.e(e);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
btn2.setAction(new Action() {
|
||||
|
||||
@Override
|
||||
protected void execute()
|
||||
{
|
||||
if (task != null) task.run();
|
||||
}
|
||||
});
|
||||
|
||||
btn3.setAction(cancel);
|
||||
|
||||
bindKey(new KeyStroke(Keys.ESCAPE), cancel);
|
||||
|
||||
updated.add(numa);
|
||||
updated.add(hideTT);
|
||||
|
||||
setAlpha(numa);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public int getZIndex()
|
||||
{
|
||||
return 301;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void show()
|
||||
{
|
||||
if (!isVisible()) {
|
||||
super.show();
|
||||
numa.fadeIn(0.3);
|
||||
hideTT.stop();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,95 @@
|
||||
package mightypork.rogue.screens.game;
|
||||
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import mightypork.gamecore.gui.Action;
|
||||
import mightypork.gamecore.gui.AlignX;
|
||||
import mightypork.gamecore.gui.components.layout.ColumnLayout;
|
||||
import mightypork.gamecore.gui.components.layout.RowLayout;
|
||||
import mightypork.gamecore.gui.components.painters.ImagePainter;
|
||||
import mightypork.gamecore.gui.components.painters.QuadPainter;
|
||||
import mightypork.gamecore.gui.components.painters.TextPainter;
|
||||
import mightypork.gamecore.gui.screens.ScreenLayer;
|
||||
import mightypork.gamecore.logging.Log;
|
||||
import mightypork.gamecore.resources.fonts.GLFont;
|
||||
import mightypork.gamecore.util.math.color.pal.RGB;
|
||||
import mightypork.gamecore.util.math.constraints.num.Num;
|
||||
import mightypork.rogue.GameStateManager.GameState;
|
||||
import mightypork.rogue.Res;
|
||||
import mightypork.rogue.events.GameStateRequest;
|
||||
import mightypork.rogue.screens.PushButton;
|
||||
import mightypork.rogue.screens.game.ScreenGame.GScrState;
|
||||
import mightypork.rogue.world.WorldProvider;
|
||||
|
||||
|
||||
public class DeathLayer extends ScreenLayer {
|
||||
|
||||
public DeathLayer(final ScreenGame screen)
|
||||
{
|
||||
super(screen);
|
||||
|
||||
// darker down to cover console.
|
||||
final QuadPainter qp = new QuadPainter(RGB.BLACK_80);
|
||||
qp.setRect(root);
|
||||
root.add(qp);
|
||||
|
||||
final GLFont thick_font = Res.getFont("thick");
|
||||
|
||||
final RowLayout rl = new RowLayout(root, 5);
|
||||
rl.setRect(root.shrink(Num.ZERO, root.height().perc(20)));
|
||||
root.add(rl);
|
||||
|
||||
final TextPainter txp = new TextPainter(thick_font, AlignX.CENTER, RGB.YELLOW, "You're dead!");
|
||||
rl.add(txp, 1);
|
||||
txp.setPaddingHPerc(0, 15);
|
||||
|
||||
final ImagePainter img = new ImagePainter(Res.getTxQuad("death"));
|
||||
img.keepAspectRatio();
|
||||
rl.add(img, 3);
|
||||
|
||||
final ColumnLayout cl = new ColumnLayout(root, 2);
|
||||
rl.add(cl);
|
||||
|
||||
final PushButton btn1 = new PushButton(thick_font, "Retry", ScreenGame.COLOR_BTN_GOOD);
|
||||
btn1.textPainter.setAlign(AlignX.RIGHT);
|
||||
btn1.textPainter.setPaddingHPerc(20, 25);
|
||||
cl.add(btn1);
|
||||
|
||||
final PushButton btn2 = new PushButton(thick_font, "Quit", ScreenGame.COLOR_BTN_BAD);
|
||||
btn2.textPainter.setAlign(AlignX.LEFT);
|
||||
btn2.textPainter.setPaddingHPerc(20, 25);
|
||||
cl.add(btn2);
|
||||
|
||||
btn1.setAction(new Action() {
|
||||
|
||||
@Override
|
||||
protected void execute()
|
||||
{
|
||||
try {
|
||||
WorldProvider.get().loadWorld(WorldProvider.get().getWorld().getSaveFile());
|
||||
screen.setState(GScrState.WORLD);
|
||||
} catch (final IOException e) {
|
||||
Log.e(e);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
btn2.setAction(new Action() {
|
||||
|
||||
@Override
|
||||
protected void execute()
|
||||
{
|
||||
getEventBus().send(new GameStateRequest(GameState.MAIN_MENU));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public int getZIndex()
|
||||
{
|
||||
return 300;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -10,16 +10,22 @@ import mightypork.gamecore.gui.screens.LayeredScreen;
|
||||
import mightypork.gamecore.input.KeyStroke;
|
||||
import mightypork.gamecore.input.Keys;
|
||||
import mightypork.gamecore.logging.Log;
|
||||
import mightypork.gamecore.util.math.color.Color;
|
||||
import mightypork.rogue.Config;
|
||||
import mightypork.rogue.GameStateManager.GameState;
|
||||
import mightypork.rogue.events.GameStateRequest;
|
||||
import mightypork.rogue.world.PlayerFacade;
|
||||
import mightypork.rogue.world.WorldProvider;
|
||||
import mightypork.rogue.world.events.PlayerKilledListener;
|
||||
import mightypork.rogue.world.events.WorldPauseRequest;
|
||||
import mightypork.rogue.world.events.WorldPauseRequest.PauseAction;
|
||||
|
||||
|
||||
public class ScreenGame extends LayeredScreen {
|
||||
public class ScreenGame extends LayeredScreen implements PlayerKilledListener {
|
||||
|
||||
public static final Color COLOR_BTN_GOOD = Color.fromHex(0x28CB2D);
|
||||
public static final Color COLOR_BTN_BAD = Color.fromHex(0xCB2828);
|
||||
public static final Color COLOR_BTN_CANCEL = Color.fromHex(0xFFFB55);
|
||||
|
||||
/**
|
||||
* Game gui state.
|
||||
@@ -28,15 +34,16 @@ public class ScreenGame extends LayeredScreen {
|
||||
*/
|
||||
public enum GScrState
|
||||
{
|
||||
WORLD, INV;
|
||||
WORLD, INV, DEATH, GOTO_MENU, GOTO_QUIT;
|
||||
}
|
||||
|
||||
private InventoryLayer invLayer;
|
||||
private HudLayer hudLayer;
|
||||
private DeathLayer deathLayer;
|
||||
|
||||
private WorldLayer worldLayer;
|
||||
|
||||
private GScrState state = GScrState.WORLD;
|
||||
private GScrState state = null;
|
||||
|
||||
private final ActionGroup worldActions = new ActionGroup();
|
||||
|
||||
@@ -124,9 +131,16 @@ public class ScreenGame extends LayeredScreen {
|
||||
@Override
|
||||
public void execute()
|
||||
{
|
||||
// TODO ask to save
|
||||
|
||||
getEventBus().send(new GameStateRequest(GameState.MAIN_MENU));
|
||||
setState(GScrState.GOTO_MENU);
|
||||
}
|
||||
};
|
||||
|
||||
public Action actionQuit = new Action() {
|
||||
|
||||
@Override
|
||||
public void execute()
|
||||
{
|
||||
setState(GScrState.GOTO_QUIT);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -140,6 +154,7 @@ public class ScreenGame extends LayeredScreen {
|
||||
pl.dropItem(pl.getInventory().getLastAddIndex());
|
||||
}
|
||||
};
|
||||
private AskSaveLayer askSaveLayer;
|
||||
|
||||
|
||||
/**
|
||||
@@ -160,15 +175,47 @@ public class ScreenGame extends LayeredScreen {
|
||||
if (nstate == GScrState.WORLD) {
|
||||
getEventBus().send(new WorldPauseRequest(PauseAction.RESUME));
|
||||
|
||||
invLayer.setVisible(false); // hide all extra layers
|
||||
invLayer.setEnabled(false);
|
||||
invLayer.hide();
|
||||
deathLayer.hide();
|
||||
askSaveLayer.hide();
|
||||
|
||||
worldActions.setEnabled(true);
|
||||
}
|
||||
|
||||
if (nstate == GScrState.INV) {
|
||||
invLayer.setVisible(true);
|
||||
invLayer.setEnabled(true);
|
||||
invLayer.show();
|
||||
}
|
||||
|
||||
if (nstate == GScrState.DEATH) {
|
||||
deathLayer.show();
|
||||
}
|
||||
|
||||
if (nstate == GScrState.GOTO_MENU) {
|
||||
|
||||
askSaveLayer.setTask(new Runnable() {
|
||||
|
||||
@Override
|
||||
public void run()
|
||||
{
|
||||
getEventBus().send(new GameStateRequest(GameState.MAIN_MENU));
|
||||
}
|
||||
});
|
||||
|
||||
askSaveLayer.show();
|
||||
}
|
||||
|
||||
if (nstate == GScrState.GOTO_QUIT) {
|
||||
|
||||
askSaveLayer.setTask(new Runnable() {
|
||||
|
||||
@Override
|
||||
public void run()
|
||||
{
|
||||
getEventBus().send(new GameStateRequest(GameState.EXIT));
|
||||
}
|
||||
});
|
||||
|
||||
askSaveLayer.show();
|
||||
}
|
||||
|
||||
this.state = nstate;
|
||||
@@ -186,16 +233,10 @@ public class ScreenGame extends LayeredScreen {
|
||||
super(app);
|
||||
|
||||
addLayer(invLayer = new InventoryLayer(this));
|
||||
invLayer.setEnabled(false);
|
||||
invLayer.setVisible(false);
|
||||
|
||||
addLayer(deathLayer = new DeathLayer(this));
|
||||
addLayer(hudLayer = new HudLayer(this));
|
||||
hudLayer.setEnabled(true);
|
||||
hudLayer.setVisible(true);
|
||||
|
||||
addLayer(worldLayer = new WorldLayer(this));
|
||||
worldLayer.setEnabled(true);
|
||||
worldLayer.setVisible(true);
|
||||
addLayer(askSaveLayer = new AskSaveLayer(this));
|
||||
|
||||
//pause key
|
||||
bindKey(new KeyStroke(Keys.P), actionTogglePause);
|
||||
@@ -210,6 +251,8 @@ public class ScreenGame extends LayeredScreen {
|
||||
|
||||
bindKey(new KeyStroke(Keys.L, Keys.MOD_CONTROL), actionLoad);
|
||||
bindKey(new KeyStroke(Keys.S, Keys.MOD_CONTROL), actionSave);
|
||||
bindKey(new KeyStroke(Keys.Q, Keys.MOD_CONTROL), actionQuit);
|
||||
bindKey(new KeyStroke(Keys.ESCAPE), actionMenu);
|
||||
|
||||
// add as actions - enableables.
|
||||
worldActions.add(worldLayer);
|
||||
@@ -223,12 +266,13 @@ public class ScreenGame extends LayeredScreen {
|
||||
worldActions.add(actionSave);
|
||||
worldActions.add(actionLoad);
|
||||
worldActions.add(actionMenu);
|
||||
worldActions.add(actionQuit);
|
||||
worldActions.add(actionDropLastPickedItem);
|
||||
|
||||
worldActions.setEnabled(true);
|
||||
|
||||
// CHEAT - X-ray
|
||||
bindKey(new KeyStroke(Keys.F10, Keys.MOD_CONTROL), new Runnable() {
|
||||
bindKey(new KeyStroke(Keys.MULTIPLY, Keys.MOD_CONTROL), new Runnable() {
|
||||
|
||||
@Override
|
||||
public void run()
|
||||
@@ -244,6 +288,8 @@ public class ScreenGame extends LayeredScreen {
|
||||
{
|
||||
super.onScreenEnter();
|
||||
WorldProvider.get().setListening(true);
|
||||
|
||||
setState(GScrState.WORLD);
|
||||
}
|
||||
|
||||
|
||||
@@ -253,4 +299,11 @@ public class ScreenGame extends LayeredScreen {
|
||||
super.onScreenLeave();
|
||||
WorldProvider.get().setListening(false);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onPlayerKilled()
|
||||
{
|
||||
setState(GScrState.DEATH);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,12 +3,14 @@ package mightypork.rogue.screens.menu;
|
||||
|
||||
import mightypork.gamecore.app.AppAccess;
|
||||
import mightypork.gamecore.gui.Action;
|
||||
import mightypork.gamecore.gui.components.layout.GridLayout;
|
||||
import mightypork.gamecore.gui.components.layout.RowLayout;
|
||||
import mightypork.gamecore.gui.components.painters.ImagePainter;
|
||||
import mightypork.gamecore.gui.components.painters.QuadPainter;
|
||||
import mightypork.gamecore.gui.screens.LayeredScreen;
|
||||
import mightypork.gamecore.gui.screens.Screen;
|
||||
import mightypork.gamecore.gui.screens.ScreenLayer;
|
||||
import mightypork.gamecore.input.KeyStroke;
|
||||
import mightypork.gamecore.input.Keys;
|
||||
import mightypork.gamecore.resources.fonts.GLFont;
|
||||
import mightypork.gamecore.util.math.color.Color;
|
||||
import mightypork.gamecore.util.math.color.pal.PAL16;
|
||||
@@ -59,15 +61,14 @@ public class ScreenMainMenu extends LayeredScreen {
|
||||
bg.setRect(root);
|
||||
root.add(bg);
|
||||
|
||||
final GridLayout layout = new GridLayout(root, menuBox, 10, 1);
|
||||
layout.enableCaching(true);
|
||||
root.add(layout);
|
||||
final RowLayout rows = new RowLayout(root, menuBox, 10);
|
||||
rows.enableCaching(true);
|
||||
root.add(rows);
|
||||
|
||||
int r = 0;
|
||||
final ImagePainter ip = new ImagePainter(Res.getTxQuad("logo"));
|
||||
ip.keepAspectRatio();
|
||||
layout.put(ip, r, 0, 4, 1);
|
||||
r += 5;
|
||||
rows.add(ip, 4);
|
||||
rows.skip(1);
|
||||
|
||||
PushButton btn;
|
||||
|
||||
@@ -83,8 +84,8 @@ public class ScreenMainMenu extends LayeredScreen {
|
||||
getEventBus().send(new GameStateRequest(GameState.SELECT_WORLD));
|
||||
}
|
||||
});
|
||||
layout.put(btn, r, 0, 2, 1);
|
||||
r += 3;
|
||||
rows.add(btn, 2);
|
||||
rows.skip(1);
|
||||
|
||||
/*
|
||||
// bouncy text button
|
||||
@@ -111,7 +112,17 @@ public class ScreenMainMenu extends LayeredScreen {
|
||||
getEventBus().send(new GameStateRequest(GameState.EXIT));
|
||||
}
|
||||
});
|
||||
layout.put(btn, r, 0, 2, 1);
|
||||
rows.add(btn, 2);
|
||||
|
||||
|
||||
bindKey(new KeyStroke(Keys.ESCAPE), new Runnable() {
|
||||
|
||||
@Override
|
||||
public void run()
|
||||
{
|
||||
getEventBus().send(new GameStateRequest(GameState.EXIT));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -3,18 +3,22 @@ package mightypork.rogue.screens.select_world;
|
||||
|
||||
import mightypork.gamecore.app.AppAccess;
|
||||
import mightypork.gamecore.gui.AlignX;
|
||||
import mightypork.gamecore.gui.components.layout.GridLayout;
|
||||
import mightypork.gamecore.gui.components.layout.RowLayout;
|
||||
import mightypork.gamecore.gui.components.painters.QuadPainter;
|
||||
import mightypork.gamecore.gui.components.painters.TextPainter;
|
||||
import mightypork.gamecore.gui.screens.LayeredScreen;
|
||||
import mightypork.gamecore.gui.screens.Screen;
|
||||
import mightypork.gamecore.gui.screens.ScreenLayer;
|
||||
import mightypork.gamecore.input.KeyStroke;
|
||||
import mightypork.gamecore.input.Keys;
|
||||
import mightypork.gamecore.util.math.color.Color;
|
||||
import mightypork.gamecore.util.math.color.pal.PAL16;
|
||||
import mightypork.gamecore.util.math.color.pal.RGB;
|
||||
import mightypork.gamecore.util.math.constraints.rect.Rect;
|
||||
import mightypork.rogue.GameStateManager.GameState;
|
||||
import mightypork.rogue.Paths;
|
||||
import mightypork.rogue.Res;
|
||||
import mightypork.rogue.events.GameStateRequest;
|
||||
|
||||
|
||||
/**
|
||||
@@ -50,31 +54,50 @@ public class ScreenSelectWorld extends LayeredScreen {
|
||||
|
||||
private void init()
|
||||
{
|
||||
final Rect menuBox = root.shrink(root.width().perc(25), root.height().perc(20));
|
||||
final Rect menuBox = root.shrink(root.width().perc(25), root.height().perc(30)).moveY(root.height().perc(-10));
|
||||
|
||||
|
||||
final QuadPainter bg = QuadPainter.gradV(Color.fromHex(0x007eb3), PAL16.SEABLUE);
|
||||
bg.setRect(root);
|
||||
root.add(bg);
|
||||
|
||||
final GridLayout layout = new GridLayout(root, menuBox, 7, 1);
|
||||
layout.enableCaching(true);
|
||||
root.add(layout);
|
||||
final RowLayout rows = new RowLayout(root, menuBox, 4);
|
||||
rows.enableCaching(true);
|
||||
root.add(rows);
|
||||
|
||||
TextPainter tp;
|
||||
|
||||
layout.put(tp = new TextPainter(Res.getFont("thick"), AlignX.CENTER, RGB.YELLOW, "Save slot:"), 0, 0, 1, 1);
|
||||
rows.add(tp = new TextPainter(Res.getFont("thick"), AlignX.CENTER, RGB.YELLOW, "Save slot:"));
|
||||
tp.setPaddingHPerc(0, 20);
|
||||
tp.setShadow(RGB.BLACK_50, tp.height().mul(0.6 / 8D).toVectXY());
|
||||
|
||||
slot1 = new WorldSlot(root, Paths.SAVE_SLOT_1);
|
||||
layout.put(slot1, 1, 0, 1, 1);
|
||||
rows.add(slot1);
|
||||
|
||||
slot2 = new WorldSlot(root, Paths.SAVE_SLOT_2);
|
||||
layout.put(slot2, 2, 0, 1, 1);
|
||||
rows.add(slot2);
|
||||
|
||||
slot3 = new WorldSlot(root, Paths.SAVE_SLOT_3);
|
||||
layout.put(slot3, 3, 0, 1, 1);
|
||||
rows.add(slot3);
|
||||
|
||||
// escape to quitn from here
|
||||
bindKey(new KeyStroke(Keys.ESCAPE), new Runnable() {
|
||||
|
||||
@Override
|
||||
public void run()
|
||||
{
|
||||
getEventBus().send(new GameStateRequest(GameState.MAIN_MENU));
|
||||
}
|
||||
});
|
||||
|
||||
bindKey(new KeyStroke(Keys.Q, Keys.MOD_CONTROL), new Runnable() {
|
||||
|
||||
@Override
|
||||
public void run()
|
||||
{
|
||||
getEventBus().send(new GameStateRequest(GameState.EXIT));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@ public class ItemHeartPiece extends Item {
|
||||
@Override
|
||||
protected ItemRenderer makeRenderer()
|
||||
{
|
||||
return new QuadItemRenderer(this, Res.getTxQuad("item.heart_piece"));
|
||||
return new QuadItemRenderer(this, Res.getTxQuad("item.heart"));
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user