parent
							
								
									fa1d2b577b
								
							
						
					
					
						commit
						06c7303988
					
				@ -0,0 +1,55 @@ | 
				
			|||||||
 | 
					package mightypork.rogue; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import mightypork.gamecore.app.AppAccess; | 
				
			||||||
 | 
					import mightypork.gamecore.app.AppModule; | 
				
			||||||
 | 
					import mightypork.gamecore.gui.events.CrossfadeRequest; | 
				
			||||||
 | 
					import mightypork.gamecore.logging.Log; | 
				
			||||||
 | 
					import mightypork.rogue.world.WorldProvider; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class GameStateManager extends AppModule { | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						public GameStateManager(AppAccess app) | 
				
			||||||
 | 
						{ | 
				
			||||||
 | 
							super(app); | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						public static enum GameState | 
				
			||||||
 | 
						{ | 
				
			||||||
 | 
							MAIN_MENU, SELECT_WORLD, PLAY_WORLD, EXIT | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						public void triggerAction(GameState state) | 
				
			||||||
 | 
						{ | 
				
			||||||
 | 
							switch (state) { | 
				
			||||||
 | 
								case MAIN_MENU: | 
				
			||||||
 | 
									getEventBus().send(new CrossfadeRequest("main_menu")); | 
				
			||||||
 | 
									break; | 
				
			||||||
 | 
								 | 
				
			||||||
 | 
								case SELECT_WORLD: | 
				
			||||||
 | 
									getEventBus().send(new CrossfadeRequest("select_world")); | 
				
			||||||
 | 
									break; | 
				
			||||||
 | 
								 | 
				
			||||||
 | 
								case PLAY_WORLD: | 
				
			||||||
 | 
									 | 
				
			||||||
 | 
									if (WorldProvider.get().getWorld() == null) { | 
				
			||||||
 | 
										Log.w("WorldProvider has no world."); | 
				
			||||||
 | 
									} | 
				
			||||||
 | 
									 | 
				
			||||||
 | 
									getEventBus().send(new CrossfadeRequest("game")); | 
				
			||||||
 | 
									break; | 
				
			||||||
 | 
								 | 
				
			||||||
 | 
								case EXIT: | 
				
			||||||
 | 
									getEventBus().send(new CrossfadeRequest(null)); | 
				
			||||||
 | 
									break; | 
				
			||||||
 | 
								 | 
				
			||||||
 | 
								default: | 
				
			||||||
 | 
									Log.w("Unknown action: " + state); | 
				
			||||||
 | 
									break; | 
				
			||||||
 | 
							} | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
					} | 
				
			||||||
@ -0,0 +1,25 @@ | 
				
			|||||||
 | 
					package mightypork.rogue.events; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import mightypork.gamecore.eventbus.BusEvent; | 
				
			||||||
 | 
					import mightypork.rogue.GameStateManager; | 
				
			||||||
 | 
					import mightypork.rogue.GameStateManager.GameState; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class GameStateRequest extends BusEvent<GameStateManager> { | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						final private GameState requested; | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						public GameStateRequest(GameState requested) | 
				
			||||||
 | 
						{ | 
				
			||||||
 | 
							this.requested = requested; | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						@Override | 
				
			||||||
 | 
						protected void handleBy(GameStateManager handler) | 
				
			||||||
 | 
						{ | 
				
			||||||
 | 
							handler.triggerAction(requested); | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					} | 
				
			||||||
@ -1,101 +0,0 @@ | 
				
			|||||||
package mightypork.rogue.screens.menu; | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import mightypork.gamecore.gui.Action; | 
					 | 
				
			||||||
import mightypork.gamecore.gui.components.layout.GridLayout; | 
					 | 
				
			||||||
import mightypork.gamecore.gui.components.painters.ImagePainter; | 
					 | 
				
			||||||
import mightypork.gamecore.gui.components.painters.QuadPainter; | 
					 | 
				
			||||||
import mightypork.gamecore.gui.events.CrossfadeRequest; | 
					 | 
				
			||||||
import mightypork.gamecore.gui.screens.Screen; | 
					 | 
				
			||||||
import mightypork.gamecore.gui.screens.ScreenLayer; | 
					 | 
				
			||||||
import mightypork.gamecore.util.math.color.Color; | 
					 | 
				
			||||||
import mightypork.gamecore.util.math.color.pal.PAL16; | 
					 | 
				
			||||||
import mightypork.gamecore.util.math.constraints.num.Num; | 
					 | 
				
			||||||
import mightypork.gamecore.util.math.constraints.rect.Rect; | 
					 | 
				
			||||||
import mightypork.rogue.Res; | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
class MenuLayer extends ScreenLayer { | 
					 | 
				
			||||||
	 | 
					 | 
				
			||||||
	public MenuLayer(Screen screen) | 
					 | 
				
			||||||
	{ | 
					 | 
				
			||||||
		super(screen); | 
					 | 
				
			||||||
		 | 
					 | 
				
			||||||
		init(); | 
					 | 
				
			||||||
	} | 
					 | 
				
			||||||
	 | 
					 | 
				
			||||||
	 | 
					 | 
				
			||||||
	private void init() | 
					 | 
				
			||||||
	{ | 
					 | 
				
			||||||
		final Rect menuBox = root.shrink(Num.ZERO, root.height().mul(0.15)).moveY(root.height().mul(-0.04)); | 
					 | 
				
			||||||
		 | 
					 | 
				
			||||||
		final GridLayout layout = new GridLayout(root, menuBox, 11, 1); | 
					 | 
				
			||||||
		layout.enableCaching(true); | 
					 | 
				
			||||||
		 | 
					 | 
				
			||||||
		final QuadPainter bg = QuadPainter.gradV(Color.fromHex(0x007eb3), PAL16.SEABLUE); | 
					 | 
				
			||||||
		bg.setRect(root); | 
					 | 
				
			||||||
		root.add(bg); | 
					 | 
				
			||||||
		 | 
					 | 
				
			||||||
		root.add(layout); | 
					 | 
				
			||||||
		 | 
					 | 
				
			||||||
		int r = 0; | 
					 | 
				
			||||||
		final ImagePainter ip = new ImagePainter(Res.txq("logo")); | 
					 | 
				
			||||||
		ip.keepAspectRatio(); | 
					 | 
				
			||||||
		layout.put(ip, r, 0, 5, 1); | 
					 | 
				
			||||||
		r += 6; | 
					 | 
				
			||||||
		 | 
					 | 
				
			||||||
		MenuButton btn; | 
					 | 
				
			||||||
		 | 
					 | 
				
			||||||
		 | 
					 | 
				
			||||||
		// world button
 | 
					 | 
				
			||||||
		btn = new MenuButton("Game", PAL16.SLIMEGREEN); | 
					 | 
				
			||||||
		btn.setAction(new Action() { | 
					 | 
				
			||||||
			 | 
					 | 
				
			||||||
			@Override | 
					 | 
				
			||||||
			protected void execute() | 
					 | 
				
			||||||
			{ | 
					 | 
				
			||||||
				getEventBus().send(new CrossfadeRequest("game")); | 
					 | 
				
			||||||
			} | 
					 | 
				
			||||||
		}); | 
					 | 
				
			||||||
		layout.put(btn, r, 0, 2, 1); | 
					 | 
				
			||||||
		r += 3; | 
					 | 
				
			||||||
		 | 
					 | 
				
			||||||
		/* | 
					 | 
				
			||||||
		// bouncy text button
 | 
					 | 
				
			||||||
		btn = new MenuButton("Bouncy", PAL16.CLOUDBLUE); | 
					 | 
				
			||||||
		btn.setAction(new Action() { | 
					 | 
				
			||||||
			 | 
					 | 
				
			||||||
			@Override | 
					 | 
				
			||||||
			protected void execute() | 
					 | 
				
			||||||
			{ | 
					 | 
				
			||||||
				getEventBus().send(new CrossfadeRequest("test.bouncy")); | 
					 | 
				
			||||||
			} | 
					 | 
				
			||||||
		}); | 
					 | 
				
			||||||
		layout.put(btn, r, 0, 2, 1); | 
					 | 
				
			||||||
		r += 3; | 
					 | 
				
			||||||
		*/ | 
					 | 
				
			||||||
		 | 
					 | 
				
			||||||
		// quit button
 | 
					 | 
				
			||||||
		btn = new MenuButton("Bye!", PAL16.BLOODRED); | 
					 | 
				
			||||||
		btn.setAction(new Action() { | 
					 | 
				
			||||||
			 | 
					 | 
				
			||||||
			@Override | 
					 | 
				
			||||||
			protected void execute() | 
					 | 
				
			||||||
			{ | 
					 | 
				
			||||||
				getEventBus().send(new CrossfadeRequest(null)); // null -> fade and halt
 | 
					 | 
				
			||||||
			} | 
					 | 
				
			||||||
		}); | 
					 | 
				
			||||||
		layout.put(btn, r, 0, 2, 1); | 
					 | 
				
			||||||
		 | 
					 | 
				
			||||||
		 | 
					 | 
				
			||||||
		root.add(layout); | 
					 | 
				
			||||||
	} | 
					 | 
				
			||||||
	 | 
					 | 
				
			||||||
	 | 
					 | 
				
			||||||
	@Override | 
					 | 
				
			||||||
	public int getZIndex() | 
					 | 
				
			||||||
	{ | 
					 | 
				
			||||||
		return 2; | 
					 | 
				
			||||||
	} | 
					 | 
				
			||||||
	 | 
					 | 
				
			||||||
} | 
					 | 
				
			||||||
@ -0,0 +1,65 @@ | 
				
			|||||||
 | 
					package mightypork.rogue.screens.select_world; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.util.ArrayList; | 
				
			||||||
 | 
					import java.util.Collection; | 
				
			||||||
 | 
					import java.util.List; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import mightypork.gamecore.eventbus.clients.DelegatingClient; | 
				
			||||||
 | 
					import mightypork.gamecore.gui.components.ClickableComponent; | 
				
			||||||
 | 
					import mightypork.gamecore.gui.components.Component; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class ClickableWrapper extends ClickableComponent implements DelegatingClient { | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						private final Component wrapped; | 
				
			||||||
 | 
						private final List<Component> list; | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						public ClickableWrapper(Component wrapped) | 
				
			||||||
 | 
						{ | 
				
			||||||
 | 
							this.wrapped = wrapped; | 
				
			||||||
 | 
							wrapped.setRect(this); | 
				
			||||||
 | 
							 | 
				
			||||||
 | 
							list = new ArrayList<>(1); | 
				
			||||||
 | 
							list.add(wrapped); | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						@Override | 
				
			||||||
 | 
						public Collection<?> getChildClients() | 
				
			||||||
 | 
						{ | 
				
			||||||
 | 
							return list; | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						@Override | 
				
			||||||
 | 
						public boolean doesDelegate() | 
				
			||||||
 | 
						{ | 
				
			||||||
 | 
							return true; | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						@Override | 
				
			||||||
 | 
						public boolean isEnabled() | 
				
			||||||
 | 
						{ | 
				
			||||||
 | 
							return super.isEnabled() && wrapped.isEnabled(); | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						@Override | 
				
			||||||
 | 
						public void enable(boolean yes) | 
				
			||||||
 | 
						{ | 
				
			||||||
 | 
							super.enable(yes); | 
				
			||||||
 | 
							wrapped.enable(yes); | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						@Override | 
				
			||||||
 | 
						protected void renderComponent() | 
				
			||||||
 | 
						{ | 
				
			||||||
 | 
							wrapped.render(); | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
					} | 
				
			||||||
@ -0,0 +1,86 @@ | 
				
			|||||||
 | 
					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.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.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.Paths; | 
				
			||||||
 | 
					import mightypork.rogue.Res; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** | 
				
			||||||
 | 
					 * Main menu screen | 
				
			||||||
 | 
					 *  | 
				
			||||||
 | 
					 * @author MightyPork | 
				
			||||||
 | 
					 */ | 
				
			||||||
 | 
					public class ScreenSelectWorld extends LayeredScreen { | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						public ScreenSelectWorld(AppAccess app) | 
				
			||||||
 | 
						{ | 
				
			||||||
 | 
							super(app); | 
				
			||||||
 | 
							 | 
				
			||||||
 | 
							addLayer(new WorldsLayer(this)); | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						class WorldsLayer extends ScreenLayer { | 
				
			||||||
 | 
							 | 
				
			||||||
 | 
							public WorldsLayer(Screen screen) | 
				
			||||||
 | 
							{ | 
				
			||||||
 | 
								super(screen); | 
				
			||||||
 | 
								 | 
				
			||||||
 | 
								init(); | 
				
			||||||
 | 
							} | 
				
			||||||
 | 
							 | 
				
			||||||
 | 
							 | 
				
			||||||
 | 
							private void init() | 
				
			||||||
 | 
							{ | 
				
			||||||
 | 
								final Rect menuBox = root.shrink(root.width().perc(25), root.height().perc(20)); | 
				
			||||||
 | 
								 | 
				
			||||||
 | 
								 | 
				
			||||||
 | 
								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); | 
				
			||||||
 | 
								 | 
				
			||||||
 | 
								TextPainter tp; | 
				
			||||||
 | 
								 | 
				
			||||||
 | 
								layout.put(tp = new TextPainter(Res.getFont("thick"), AlignX.CENTER, RGB.YELLOW, "Save slot:"), 0, 0, 1, 1); | 
				
			||||||
 | 
								tp.setPaddingHPerc(0, 20); | 
				
			||||||
 | 
								tp.setShadow(RGB.BLACK_50, tp.height().mul(0.6 / 8D).toVectXY()); | 
				
			||||||
 | 
								 | 
				
			||||||
 | 
								 | 
				
			||||||
 | 
								WorldSlot wsl; | 
				
			||||||
 | 
								 | 
				
			||||||
 | 
								wsl = new WorldSlot(root, Paths.SAVE_SLOT_1); | 
				
			||||||
 | 
								layout.put(wsl, 1, 0, 1, 1); | 
				
			||||||
 | 
								 | 
				
			||||||
 | 
								wsl = new WorldSlot(root, Paths.SAVE_SLOT_2); | 
				
			||||||
 | 
								layout.put(wsl, 2, 0, 1, 1); | 
				
			||||||
 | 
								 | 
				
			||||||
 | 
								wsl = new WorldSlot(root, Paths.SAVE_SLOT_3); | 
				
			||||||
 | 
								layout.put(wsl, 3, 0, 1, 1); | 
				
			||||||
 | 
							} | 
				
			||||||
 | 
							 | 
				
			||||||
 | 
							 | 
				
			||||||
 | 
							@Override | 
				
			||||||
 | 
							public int getZIndex() | 
				
			||||||
 | 
							{ | 
				
			||||||
 | 
								return 2; | 
				
			||||||
 | 
							} | 
				
			||||||
 | 
							 | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					} | 
				
			||||||
@ -0,0 +1,132 @@ | 
				
			|||||||
 | 
					package mightypork.rogue.screens.select_world; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.io.File; | 
				
			||||||
 | 
					import java.io.IOException; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import mightypork.gamecore.app.AppAccess; | 
				
			||||||
 | 
					import mightypork.gamecore.gui.Action; | 
				
			||||||
 | 
					import mightypork.gamecore.gui.AlignX; | 
				
			||||||
 | 
					import mightypork.gamecore.gui.components.layout.ConstraintLayout; | 
				
			||||||
 | 
					import mightypork.gamecore.gui.components.layout.GridLayout; | 
				
			||||||
 | 
					import mightypork.gamecore.gui.components.painters.QuadPainter; | 
				
			||||||
 | 
					import mightypork.gamecore.gui.components.painters.TextPainter; | 
				
			||||||
 | 
					import mightypork.gamecore.resources.fonts.GLFont; | 
				
			||||||
 | 
					import mightypork.gamecore.util.ion.Ion; | 
				
			||||||
 | 
					import mightypork.gamecore.util.ion.IonBundle; | 
				
			||||||
 | 
					import mightypork.gamecore.util.math.color.pal.RGB; | 
				
			||||||
 | 
					import mightypork.gamecore.util.math.constraints.num.Num; | 
				
			||||||
 | 
					import mightypork.gamecore.util.math.constraints.rect.Rect; | 
				
			||||||
 | 
					import mightypork.gamecore.util.strings.StringProvider; | 
				
			||||||
 | 
					import mightypork.rogue.GameStateManager.GameState; | 
				
			||||||
 | 
					import mightypork.rogue.Res; | 
				
			||||||
 | 
					import mightypork.rogue.events.GameStateRequest; | 
				
			||||||
 | 
					import mightypork.rogue.world.World; | 
				
			||||||
 | 
					import mightypork.rogue.world.WorldProvider; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class WorldSlot extends ConstraintLayout { | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						private final StringProvider lblStrp = new StringProvider() { | 
				
			||||||
 | 
							 | 
				
			||||||
 | 
							@Override | 
				
			||||||
 | 
							public String getString() | 
				
			||||||
 | 
							{ | 
				
			||||||
 | 
								return label; | 
				
			||||||
 | 
							} | 
				
			||||||
 | 
						}; | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						private File file; | 
				
			||||||
 | 
						private String label; | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						private IonBundle worldBundle; | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						public WorldSlot(AppAccess app, File worldFile) | 
				
			||||||
 | 
						{ | 
				
			||||||
 | 
							super(app); | 
				
			||||||
 | 
							 | 
				
			||||||
 | 
							this.file = worldFile; | 
				
			||||||
 | 
							 | 
				
			||||||
 | 
							final Rect innerRect = shrink(height().perc(5)); | 
				
			||||||
 | 
							 | 
				
			||||||
 | 
							final QuadPainter qp = new QuadPainter(RGB.BLACK.withAlpha(new Num() { | 
				
			||||||
 | 
								 | 
				
			||||||
 | 
								@Override | 
				
			||||||
 | 
								public double value() | 
				
			||||||
 | 
								{ | 
				
			||||||
 | 
									return isMouseOver() ? 0.2 : 0.1; | 
				
			||||||
 | 
								} | 
				
			||||||
 | 
							})); | 
				
			||||||
 | 
							 | 
				
			||||||
 | 
							 | 
				
			||||||
 | 
							qp.setRect(innerRect); | 
				
			||||||
 | 
							add(qp); | 
				
			||||||
 | 
							 | 
				
			||||||
 | 
							 | 
				
			||||||
 | 
							final GridLayout gridl = new GridLayout(app, 1, 8); | 
				
			||||||
 | 
							gridl.setRect(innerRect.shrink(width().perc(10), Num.ZERO)); | 
				
			||||||
 | 
							add(gridl); | 
				
			||||||
 | 
							 | 
				
			||||||
 | 
							TextPainter tp; | 
				
			||||||
 | 
							ClickableWrapper btn; | 
				
			||||||
 | 
							final GLFont font = Res.getFont("thick"); | 
				
			||||||
 | 
							 | 
				
			||||||
 | 
							tp = new TextPainter(font, AlignX.LEFT, RGB.WHITE, lblStrp); | 
				
			||||||
 | 
							tp.setPaddingHPerc(0, 20); | 
				
			||||||
 | 
							 | 
				
			||||||
 | 
							gridl.put(btn = new ClickableWrapper(tp), 0, 0, 1, 7); | 
				
			||||||
 | 
							btn.setAction(new Action() { | 
				
			||||||
 | 
								 | 
				
			||||||
 | 
								@Override | 
				
			||||||
 | 
								protected void execute() | 
				
			||||||
 | 
								{ | 
				
			||||||
 | 
									try { | 
				
			||||||
 | 
										final World w = new World(); | 
				
			||||||
 | 
										w.setSaveFile(file); | 
				
			||||||
 | 
										w.load(worldBundle); | 
				
			||||||
 | 
										WorldProvider.get().setWorld(w); | 
				
			||||||
 | 
									} catch (final Exception e) { | 
				
			||||||
 | 
										WorldProvider.get().createWorld(Double.doubleToLongBits(Math.random())); | 
				
			||||||
 | 
									} | 
				
			||||||
 | 
									 | 
				
			||||||
 | 
									getEventBus().send(new GameStateRequest(GameState.PLAY_WORLD)); | 
				
			||||||
 | 
								} | 
				
			||||||
 | 
							}); | 
				
			||||||
 | 
							 | 
				
			||||||
 | 
							tp = new TextPainter(font, AlignX.LEFT, RGB.RED, "X"); | 
				
			||||||
 | 
							tp.setPaddingHPerc(0, 20); | 
				
			||||||
 | 
							gridl.put(btn = new ClickableWrapper(tp), 0, 7, 1, 1); | 
				
			||||||
 | 
							btn.setAction(new Action() { | 
				
			||||||
 | 
								 | 
				
			||||||
 | 
								@Override | 
				
			||||||
 | 
								protected void execute() | 
				
			||||||
 | 
								{ | 
				
			||||||
 | 
									file.delete(); | 
				
			||||||
 | 
									refresh(); | 
				
			||||||
 | 
								} | 
				
			||||||
 | 
							}); | 
				
			||||||
 | 
							 | 
				
			||||||
 | 
							refresh(); | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						public void refresh() | 
				
			||||||
 | 
						{ | 
				
			||||||
 | 
							if (!file.exists()) { | 
				
			||||||
 | 
								label = "<empty>"; | 
				
			||||||
 | 
							} else { | 
				
			||||||
 | 
								try { | 
				
			||||||
 | 
									worldBundle = Ion.fromFile(file); | 
				
			||||||
 | 
									final int lvl = worldBundle.get("meta.last_level", -1); | 
				
			||||||
 | 
									 | 
				
			||||||
 | 
									if (lvl == -1) throw new RuntimeException(); // let the catch block handle it
 | 
				
			||||||
 | 
									 | 
				
			||||||
 | 
									label = "Floor " + (lvl + 1); | 
				
			||||||
 | 
								} catch (final IOException e) { | 
				
			||||||
 | 
									label = "<corrupt>"; | 
				
			||||||
 | 
								} | 
				
			||||||
 | 
							} | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
					} | 
				
			||||||
@ -1,76 +0,0 @@ | 
				
			|||||||
package mightypork.rogue.screens.test_bouncyboxes; | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import java.util.Random; | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import mightypork.gamecore.eventbus.events.Updateable; | 
					 | 
				
			||||||
import mightypork.gamecore.gui.components.BaseComponent; | 
					 | 
				
			||||||
import mightypork.gamecore.render.Render; | 
					 | 
				
			||||||
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.constraints.rect.Rect; | 
					 | 
				
			||||||
import mightypork.gamecore.util.math.constraints.rect.caching.RectCache; | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
public class BouncyBox extends BaseComponent implements Updateable { | 
					 | 
				
			||||||
	 | 
					 | 
				
			||||||
	private final Random rand = new Random(); | 
					 | 
				
			||||||
	 | 
					 | 
				
			||||||
	private final RectCache box; | 
					 | 
				
			||||||
	 | 
					 | 
				
			||||||
	private final NumAnimated pos = new NumAnimated(0, Easing.BOUNCE_OUT); | 
					 | 
				
			||||||
	 | 
					 | 
				
			||||||
	 | 
					 | 
				
			||||||
	public BouncyBox() | 
					 | 
				
			||||||
	{ | 
					 | 
				
			||||||
		super(); | 
					 | 
				
			||||||
		enableCaching(true); | 
					 | 
				
			||||||
		 | 
					 | 
				
			||||||
		Rect abox; | 
					 | 
				
			||||||
		 | 
					 | 
				
			||||||
		abox = leftEdge().growRight(height()); | 
					 | 
				
			||||||
		abox = abox.move(width().sub(height()).mul(pos), Num.ZERO); | 
					 | 
				
			||||||
		abox = abox.shrink(height().perc(10)); | 
					 | 
				
			||||||
		 | 
					 | 
				
			||||||
		box = abox.cached(); | 
					 | 
				
			||||||
	} | 
					 | 
				
			||||||
	 | 
					 | 
				
			||||||
	 | 
					 | 
				
			||||||
	@Override | 
					 | 
				
			||||||
	public void renderComponent() | 
					 | 
				
			||||||
	{ | 
					 | 
				
			||||||
		Render.quad(box, RGB.GREEN); | 
					 | 
				
			||||||
	} | 
					 | 
				
			||||||
	 | 
					 | 
				
			||||||
	 | 
					 | 
				
			||||||
	public void goLeft() | 
					 | 
				
			||||||
	{ | 
					 | 
				
			||||||
		pos.animate(1, 0, 1 + rand.nextDouble() * 1); | 
					 | 
				
			||||||
	} | 
					 | 
				
			||||||
	 | 
					 | 
				
			||||||
	 | 
					 | 
				
			||||||
	public void goRight() | 
					 | 
				
			||||||
	{ | 
					 | 
				
			||||||
		pos.animate(0, 1, 1 + rand.nextDouble() * 1); | 
					 | 
				
			||||||
	} | 
					 | 
				
			||||||
	 | 
					 | 
				
			||||||
	 | 
					 | 
				
			||||||
	@Override | 
					 | 
				
			||||||
	public void update(double delta) | 
					 | 
				
			||||||
	{ | 
					 | 
				
			||||||
		if (pos.isInProgress()) { | 
					 | 
				
			||||||
			pos.update(delta); | 
					 | 
				
			||||||
			box.poll(); | 
					 | 
				
			||||||
		} | 
					 | 
				
			||||||
	} | 
					 | 
				
			||||||
	 | 
					 | 
				
			||||||
	 | 
					 | 
				
			||||||
	@Override | 
					 | 
				
			||||||
	public void updateLayout() | 
					 | 
				
			||||||
	{ | 
					 | 
				
			||||||
		box.poll(); | 
					 | 
				
			||||||
	} | 
					 | 
				
			||||||
	 | 
					 | 
				
			||||||
} | 
					 | 
				
			||||||
@ -1,88 +0,0 @@ | 
				
			|||||||
package mightypork.rogue.screens.test_bouncyboxes; | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import java.util.ArrayList; | 
					 | 
				
			||||||
import java.util.List; | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import mightypork.gamecore.gui.AlignX; | 
					 | 
				
			||||||
import mightypork.gamecore.gui.components.layout.RowHolder; | 
					 | 
				
			||||||
import mightypork.gamecore.gui.components.painters.TextPainter; | 
					 | 
				
			||||||
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.pal.RGB; | 
					 | 
				
			||||||
import mightypork.gamecore.util.math.constraints.num.Num; | 
					 | 
				
			||||||
import mightypork.gamecore.util.math.constraints.vect.Vect; | 
					 | 
				
			||||||
import mightypork.rogue.Res; | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
public class LayerBouncyBoxes extends ScreenLayer { | 
					 | 
				
			||||||
	 | 
					 | 
				
			||||||
	List<BouncyBox> boxes = new ArrayList<>(); | 
					 | 
				
			||||||
	private RowHolder layout; | 
					 | 
				
			||||||
	 | 
					 | 
				
			||||||
	 | 
					 | 
				
			||||||
	public LayerBouncyBoxes(Screen screen) | 
					 | 
				
			||||||
	{ | 
					 | 
				
			||||||
		super(screen); | 
					 | 
				
			||||||
		 | 
					 | 
				
			||||||
		bindKey(new KeyStroke(true, Keys.RIGHT), new Runnable() { | 
					 | 
				
			||||||
			 | 
					 | 
				
			||||||
			@Override | 
					 | 
				
			||||||
			public void run() | 
					 | 
				
			||||||
			{ | 
					 | 
				
			||||||
				goRight(); | 
					 | 
				
			||||||
			} | 
					 | 
				
			||||||
		}); | 
					 | 
				
			||||||
		 | 
					 | 
				
			||||||
		bindKey(new KeyStroke(true, Keys.LEFT), new Runnable() { | 
					 | 
				
			||||||
			 | 
					 | 
				
			||||||
			@Override | 
					 | 
				
			||||||
			public void run() | 
					 | 
				
			||||||
			{ | 
					 | 
				
			||||||
				goLeft(); | 
					 | 
				
			||||||
			} | 
					 | 
				
			||||||
		}); | 
					 | 
				
			||||||
		 | 
					 | 
				
			||||||
		// shrink screen rect by 8% on all sides
 | 
					 | 
				
			||||||
		 | 
					 | 
				
			||||||
		root.add(layout = new RowHolder(this, root.shrink(root.height().perc(5)), 10)); | 
					 | 
				
			||||||
		 | 
					 | 
				
			||||||
		for (int i = 0; i < 9; i++) { | 
					 | 
				
			||||||
			final BouncyBox bbr = new BouncyBox(); | 
					 | 
				
			||||||
			layout.add(bbr); | 
					 | 
				
			||||||
			boxes.add(bbr); | 
					 | 
				
			||||||
		} | 
					 | 
				
			||||||
		 | 
					 | 
				
			||||||
		final TextPainter tp = new TextPainter(Res.getFont("thick"), AlignX.LEFT, RGB.WHITE); | 
					 | 
				
			||||||
		tp.setText("Press left & right to move."); | 
					 | 
				
			||||||
		final Num shadowOffset = tp.height().div(16); | 
					 | 
				
			||||||
		tp.setShadow(RGB.RED, Vect.make(shadowOffset, shadowOffset)); | 
					 | 
				
			||||||
		 | 
					 | 
				
			||||||
		layout.add(tp); | 
					 | 
				
			||||||
	} | 
					 | 
				
			||||||
	 | 
					 | 
				
			||||||
	 | 
					 | 
				
			||||||
	public void goLeft() | 
					 | 
				
			||||||
	{ | 
					 | 
				
			||||||
		for (final BouncyBox bbr : boxes) { | 
					 | 
				
			||||||
			bbr.goLeft(); | 
					 | 
				
			||||||
		} | 
					 | 
				
			||||||
	} | 
					 | 
				
			||||||
	 | 
					 | 
				
			||||||
	 | 
					 | 
				
			||||||
	public void goRight() | 
					 | 
				
			||||||
	{ | 
					 | 
				
			||||||
		for (final BouncyBox bbr : boxes) { | 
					 | 
				
			||||||
			bbr.goRight(); | 
					 | 
				
			||||||
		} | 
					 | 
				
			||||||
	} | 
					 | 
				
			||||||
	 | 
					 | 
				
			||||||
	 | 
					 | 
				
			||||||
	@Override | 
					 | 
				
			||||||
	public int getZIndex() | 
					 | 
				
			||||||
	{ | 
					 | 
				
			||||||
		return 0; | 
					 | 
				
			||||||
	} | 
					 | 
				
			||||||
} | 
					 | 
				
			||||||
@ -1,17 +0,0 @@ | 
				
			|||||||
package mightypork.rogue.screens.test_bouncyboxes; | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import mightypork.gamecore.app.AppAccess; | 
					 | 
				
			||||||
import mightypork.gamecore.gui.screens.LayeredScreen; | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
public class ScreenTestBouncy extends LayeredScreen { | 
					 | 
				
			||||||
	 | 
					 | 
				
			||||||
	public ScreenTestBouncy(AppAccess app) | 
					 | 
				
			||||||
	{ | 
					 | 
				
			||||||
		super(app); | 
					 | 
				
			||||||
		 | 
					 | 
				
			||||||
		addLayer(new LayerBouncyBoxes(this)); | 
					 | 
				
			||||||
	} | 
					 | 
				
			||||||
	 | 
					 | 
				
			||||||
} | 
					 | 
				
			||||||
					Loading…
					
					
				
		Reference in new issue