Basic menus
This commit is contained in:
parent
f4a7a8d513
commit
bde5a77131
@ -6,6 +6,7 @@ import electrosphere.entity.EntityUtils;
|
|||||||
import electrosphere.entity.state.MovementTree;
|
import electrosphere.entity.state.MovementTree;
|
||||||
import electrosphere.entity.state.MovementTree.MovementTreeState;
|
import electrosphere.entity.state.MovementTree.MovementTreeState;
|
||||||
import electrosphere.main.Globals;
|
import electrosphere.main.Globals;
|
||||||
|
import electrosphere.menu.MenuTransition;
|
||||||
import electrosphere.net.client.ClientNetworkMessage;
|
import electrosphere.net.client.ClientNetworkMessage;
|
||||||
import electrosphere.net.message.EntityMessage;
|
import electrosphere.net.message.EntityMessage;
|
||||||
import electrosphere.util.Utilities;
|
import electrosphere.util.Utilities;
|
||||||
@ -14,9 +15,13 @@ import java.util.List;
|
|||||||
import org.joml.Vector3f;
|
import org.joml.Vector3f;
|
||||||
import static org.lwjgl.glfw.GLFW.GLFW_KEY_A;
|
import static org.lwjgl.glfw.GLFW.GLFW_KEY_A;
|
||||||
import static org.lwjgl.glfw.GLFW.GLFW_KEY_D;
|
import static org.lwjgl.glfw.GLFW.GLFW_KEY_D;
|
||||||
|
import static org.lwjgl.glfw.GLFW.GLFW_KEY_DOWN;
|
||||||
|
import static org.lwjgl.glfw.GLFW.GLFW_KEY_ENTER;
|
||||||
|
import static org.lwjgl.glfw.GLFW.GLFW_KEY_ESCAPE;
|
||||||
import static org.lwjgl.glfw.GLFW.GLFW_KEY_LEFT_CONTROL;
|
import static org.lwjgl.glfw.GLFW.GLFW_KEY_LEFT_CONTROL;
|
||||||
import static org.lwjgl.glfw.GLFW.GLFW_KEY_S;
|
import static org.lwjgl.glfw.GLFW.GLFW_KEY_S;
|
||||||
import static org.lwjgl.glfw.GLFW.GLFW_KEY_SPACE;
|
import static org.lwjgl.glfw.GLFW.GLFW_KEY_SPACE;
|
||||||
|
import static org.lwjgl.glfw.GLFW.GLFW_KEY_UP;
|
||||||
import static org.lwjgl.glfw.GLFW.GLFW_KEY_W;
|
import static org.lwjgl.glfw.GLFW.GLFW_KEY_W;
|
||||||
import static org.lwjgl.glfw.GLFW.GLFW_PRESS;
|
import static org.lwjgl.glfw.GLFW.GLFW_PRESS;
|
||||||
import static org.lwjgl.glfw.GLFW.glfwGetKey;
|
import static org.lwjgl.glfw.GLFW.glfwGetKey;
|
||||||
@ -34,6 +39,11 @@ public class ControlHandler {
|
|||||||
public static final String DATA_STRING_INPUT_CODE_MOVEMENT_JUMP = "jump";
|
public static final String DATA_STRING_INPUT_CODE_MOVEMENT_JUMP = "jump";
|
||||||
public static final String DATA_STRING_INPUT_CODE_MOVEMENT_FALL = "fall";
|
public static final String DATA_STRING_INPUT_CODE_MOVEMENT_FALL = "fall";
|
||||||
|
|
||||||
|
public static final String DATA_STRING_INPUT_CODE_MENU_INCREMENT = "menuIncrement";
|
||||||
|
public static final String DATA_STRING_INPUT_CODE_MENU_DECREMENT = "menuDecrement";
|
||||||
|
public static final String DATA_STRING_INPUT_CODE_MENU_SELECT = "menuSelect";
|
||||||
|
public static final String DATA_STRING_INPUT_CODE_MENU_BACKOUT = "menuBackout";
|
||||||
|
|
||||||
|
|
||||||
enum ControlsState {
|
enum ControlsState {
|
||||||
TITLE_PAGE,
|
TITLE_PAGE,
|
||||||
@ -41,6 +51,8 @@ public class ControlHandler {
|
|||||||
MAIN_GAME,
|
MAIN_GAME,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ControlsState state;
|
||||||
|
|
||||||
|
|
||||||
HashMap<String, Integer> controlsMap;
|
HashMap<String, Integer> controlsMap;
|
||||||
HashMap<String, Boolean> controlsState;
|
HashMap<String, Boolean> controlsState;
|
||||||
@ -52,6 +64,10 @@ public class ControlHandler {
|
|||||||
|
|
||||||
public static void generateExampleControlsMap(){
|
public static void generateExampleControlsMap(){
|
||||||
ControlHandler handler = new ControlHandler();
|
ControlHandler handler = new ControlHandler();
|
||||||
|
/*
|
||||||
|
Main Game controls
|
||||||
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Map the controls
|
Map the controls
|
||||||
*/
|
*/
|
||||||
@ -71,103 +87,183 @@ public class ControlHandler {
|
|||||||
handler.addControlState(DATA_STRING_INPUT_CODE_MOVEMENT_RIGHT, false);
|
handler.addControlState(DATA_STRING_INPUT_CODE_MOVEMENT_RIGHT, false);
|
||||||
handler.addControlState(DATA_STRING_INPUT_CODE_MOVEMENT_JUMP, false);
|
handler.addControlState(DATA_STRING_INPUT_CODE_MOVEMENT_JUMP, false);
|
||||||
handler.addControlState(DATA_STRING_INPUT_CODE_MOVEMENT_FALL, false);
|
handler.addControlState(DATA_STRING_INPUT_CODE_MOVEMENT_FALL, false);
|
||||||
|
|
||||||
|
/*
|
||||||
|
Map the controls
|
||||||
|
*/
|
||||||
|
handler.addControl(DATA_STRING_INPUT_CODE_MENU_INCREMENT, GLFW_KEY_DOWN);
|
||||||
|
handler.addControl(DATA_STRING_INPUT_CODE_MENU_DECREMENT, GLFW_KEY_UP);
|
||||||
|
handler.addControl(DATA_STRING_INPUT_CODE_MENU_SELECT, GLFW_KEY_ENTER);
|
||||||
|
handler.addControl(DATA_STRING_INPUT_CODE_MENU_BACKOUT, GLFW_KEY_ESCAPE);
|
||||||
|
|
||||||
|
/*
|
||||||
|
Set their states to false(not pressed)
|
||||||
|
*/
|
||||||
|
handler.addControlState(DATA_STRING_INPUT_CODE_MENU_INCREMENT, false);
|
||||||
|
handler.addControlState(DATA_STRING_INPUT_CODE_MENU_DECREMENT, false);
|
||||||
|
handler.addControlState(DATA_STRING_INPUT_CODE_MENU_SELECT, false);
|
||||||
|
handler.addControlState(DATA_STRING_INPUT_CODE_MENU_BACKOUT, false);
|
||||||
|
|
||||||
|
/*
|
||||||
|
set state
|
||||||
|
*/
|
||||||
|
handler.setHandlerState(ControlsState.TITLE_MENU);
|
||||||
|
|
||||||
|
/*
|
||||||
|
Save to file
|
||||||
|
*/
|
||||||
Utilities.saveObjectToBakedJsonFile("/Config/keybinds.json", handler);
|
Utilities.saveObjectToBakedJsonFile("/Config/keybinds.json", handler);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public void pollControls(){
|
public void pollControls(){
|
||||||
if(Globals.playerCharacter != null){
|
switch(state){
|
||||||
MovementTree movementTree = CreatureUtils.getEntityMovementTree(Globals.playerCharacter);
|
|
||||||
Vector3f cameraEyeVector = CameraEntityUtils.getCameraEye(Globals.playerCamera);
|
|
||||||
/*
|
case MAIN_GAME:
|
||||||
Move forward
|
if(Globals.playerCharacter != null){
|
||||||
*/
|
MovementTree movementTree = CreatureUtils.getEntityMovementTree(Globals.playerCharacter);
|
||||||
if(controlsMap.containsKey(DATA_STRING_INPUT_CODE_MOVEMENT_FORWARD)){
|
Vector3f cameraEyeVector = CameraEntityUtils.getCameraEye(Globals.playerCamera);
|
||||||
if(glfwGetKey(Globals.window, controlsMap.get(DATA_STRING_INPUT_CODE_MOVEMENT_FORWARD)) == GLFW_PRESS){
|
/*
|
||||||
CreatureUtils.setMovementVector(Globals.playerCharacter, new Vector3f(-cameraEyeVector.x,0,-cameraEyeVector.z).normalize());
|
Move forward
|
||||||
if(movementTree.getState()==MovementTreeState.IDLE || movementTree.getState()==MovementTreeState.SLOWDOWN){
|
*/
|
||||||
movementTree.start();
|
if(controlsMap.containsKey(DATA_STRING_INPUT_CODE_MOVEMENT_FORWARD)){
|
||||||
|
if(glfwGetKey(Globals.window, controlsMap.get(DATA_STRING_INPUT_CODE_MOVEMENT_FORWARD)) == GLFW_PRESS){
|
||||||
|
CreatureUtils.setMovementVector(Globals.playerCharacter, new Vector3f(-cameraEyeVector.x,0,-cameraEyeVector.z).normalize());
|
||||||
|
if(movementTree.getState()==MovementTreeState.IDLE || movementTree.getState()==MovementTreeState.SLOWDOWN){
|
||||||
|
movementTree.start();
|
||||||
|
}
|
||||||
|
controlsState.put(DATA_STRING_INPUT_CODE_MOVEMENT_FORWARD, true);
|
||||||
|
Vector3f position = EntityUtils.getEntityPosition(Globals.playerCharacter);
|
||||||
|
EntityMessage outgoingMessage = EntityMessage.constructMoveMessage(
|
||||||
|
Globals.playerCharacter.getId(),
|
||||||
|
position.x,
|
||||||
|
position.y,
|
||||||
|
position.z
|
||||||
|
);
|
||||||
|
Globals.clientConnection.queueOutgoingMessage(outgoingMessage);
|
||||||
|
} else {
|
||||||
|
if(controlsState.get(DATA_STRING_INPUT_CODE_MOVEMENT_FORWARD) == true){
|
||||||
|
movementTree.slowdown();
|
||||||
|
}
|
||||||
|
controlsState.put(DATA_STRING_INPUT_CODE_MOVEMENT_FORWARD, false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
controlsState.put(DATA_STRING_INPUT_CODE_MOVEMENT_FORWARD, true);
|
/*
|
||||||
Vector3f position = EntityUtils.getEntityPosition(Globals.playerCharacter);
|
Move backward
|
||||||
EntityMessage outgoingMessage = EntityMessage.constructMoveMessage(
|
*/
|
||||||
Globals.playerCharacter.getId(),
|
if(controlsMap.containsKey(DATA_STRING_INPUT_CODE_MOVEMENT_BACKWARD)){
|
||||||
position.x,
|
if(glfwGetKey(Globals.window, controlsMap.get(DATA_STRING_INPUT_CODE_MOVEMENT_BACKWARD)) == GLFW_PRESS){
|
||||||
position.y,
|
CreatureUtils.setMovementVector(Globals.playerCharacter, new Vector3f(cameraEyeVector.x,0,cameraEyeVector.z).normalize());
|
||||||
position.z
|
if(movementTree.getState()==MovementTreeState.IDLE || movementTree.getState()==MovementTreeState.SLOWDOWN){
|
||||||
);
|
movementTree.start();
|
||||||
Globals.clientConnection.queueOutgoingMessage(outgoingMessage);
|
}
|
||||||
} else {
|
controlsState.put(DATA_STRING_INPUT_CODE_MOVEMENT_BACKWARD, true);
|
||||||
if(controlsState.get(DATA_STRING_INPUT_CODE_MOVEMENT_FORWARD) == true){
|
} else {
|
||||||
movementTree.slowdown();
|
if(controlsState.get(DATA_STRING_INPUT_CODE_MOVEMENT_BACKWARD) == true){
|
||||||
|
movementTree.slowdown();
|
||||||
|
}
|
||||||
|
controlsState.put(DATA_STRING_INPUT_CODE_MOVEMENT_BACKWARD, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
Move left
|
||||||
|
*/
|
||||||
|
if(controlsMap.containsKey(DATA_STRING_INPUT_CODE_MOVEMENT_LEFT)){
|
||||||
|
if(glfwGetKey(Globals.window, controlsMap.get(DATA_STRING_INPUT_CODE_MOVEMENT_LEFT)) == GLFW_PRESS){
|
||||||
|
CreatureUtils.setMovementVector(Globals.playerCharacter, new Vector3f(-cameraEyeVector.x,0,-cameraEyeVector.z).rotateY((float)(90 * Math.PI / 180)).normalize());
|
||||||
|
if(movementTree.getState()==MovementTreeState.IDLE || movementTree.getState()==MovementTreeState.SLOWDOWN){
|
||||||
|
movementTree.start();
|
||||||
|
}
|
||||||
|
controlsState.put(DATA_STRING_INPUT_CODE_MOVEMENT_LEFT, true);
|
||||||
|
} else {
|
||||||
|
if(controlsState.get(DATA_STRING_INPUT_CODE_MOVEMENT_LEFT) == true){
|
||||||
|
movementTree.slowdown();
|
||||||
|
}
|
||||||
|
controlsState.put(DATA_STRING_INPUT_CODE_MOVEMENT_LEFT, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
Move right
|
||||||
|
*/
|
||||||
|
if(controlsMap.containsKey(DATA_STRING_INPUT_CODE_MOVEMENT_RIGHT)){
|
||||||
|
if(glfwGetKey(Globals.window, controlsMap.get(DATA_STRING_INPUT_CODE_MOVEMENT_RIGHT)) == GLFW_PRESS){
|
||||||
|
CreatureUtils.setMovementVector(Globals.playerCharacter, new Vector3f(-cameraEyeVector.x,0,-cameraEyeVector.z).rotateY((float)(-90 * Math.PI / 180)).normalize());
|
||||||
|
if(movementTree.getState()==MovementTreeState.IDLE || movementTree.getState()==MovementTreeState.SLOWDOWN){
|
||||||
|
movementTree.start();
|
||||||
|
}
|
||||||
|
controlsState.put(DATA_STRING_INPUT_CODE_MOVEMENT_RIGHT, true);
|
||||||
|
} else {
|
||||||
|
if(controlsState.get(DATA_STRING_INPUT_CODE_MOVEMENT_RIGHT) == true){
|
||||||
|
movementTree.slowdown();
|
||||||
|
}
|
||||||
|
controlsState.put(DATA_STRING_INPUT_CODE_MOVEMENT_RIGHT, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
Move up
|
||||||
|
*/
|
||||||
|
if(controlsMap.containsKey(DATA_STRING_INPUT_CODE_MOVEMENT_JUMP) && glfwGetKey(Globals.window, controlsMap.get(DATA_STRING_INPUT_CODE_MOVEMENT_JUMP)) == GLFW_PRESS){
|
||||||
|
EntityUtils.getEntityPosition(Globals.playerCharacter).add(new Vector3f(0,0.6f,0).mul(1f));
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
Move down
|
||||||
|
*/
|
||||||
|
if(controlsMap.containsKey(DATA_STRING_INPUT_CODE_MOVEMENT_FALL) && glfwGetKey(Globals.window, controlsMap.get(DATA_STRING_INPUT_CODE_MOVEMENT_FALL)) == GLFW_PRESS){
|
||||||
|
EntityUtils.getEntityPosition(Globals.playerCharacter).add(new Vector3f(0,-0.6f,0).mul(1f));
|
||||||
}
|
}
|
||||||
controlsState.put(DATA_STRING_INPUT_CODE_MOVEMENT_FORWARD, false);
|
|
||||||
}
|
}
|
||||||
}
|
break;
|
||||||
/*
|
|
||||||
Move backward
|
|
||||||
*/
|
|
||||||
if(controlsMap.containsKey(DATA_STRING_INPUT_CODE_MOVEMENT_BACKWARD)){
|
|
||||||
if(glfwGetKey(Globals.window, controlsMap.get(DATA_STRING_INPUT_CODE_MOVEMENT_BACKWARD)) == GLFW_PRESS){
|
|
||||||
CreatureUtils.setMovementVector(Globals.playerCharacter, new Vector3f(cameraEyeVector.x,0,cameraEyeVector.z).normalize());
|
|
||||||
if(movementTree.getState()==MovementTreeState.IDLE || movementTree.getState()==MovementTreeState.SLOWDOWN){
|
case TITLE_MENU:
|
||||||
movementTree.start();
|
if(controlsMap.containsKey(DATA_STRING_INPUT_CODE_MENU_INCREMENT)){
|
||||||
|
if(glfwGetKey(Globals.window, controlsMap.get(DATA_STRING_INPUT_CODE_MENU_INCREMENT)) == GLFW_PRESS){
|
||||||
|
controlsState.put(DATA_STRING_INPUT_CODE_MENU_INCREMENT, true);
|
||||||
|
} else {
|
||||||
|
if(controlsState.get(DATA_STRING_INPUT_CODE_MENU_INCREMENT) == true){
|
||||||
|
Globals.currentMenu.incrementMenuOption();
|
||||||
|
}
|
||||||
|
controlsState.put(DATA_STRING_INPUT_CODE_MENU_INCREMENT, false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
controlsState.put(DATA_STRING_INPUT_CODE_MOVEMENT_BACKWARD, true);
|
if(controlsMap.containsKey(DATA_STRING_INPUT_CODE_MENU_DECREMENT)){
|
||||||
} else {
|
if(glfwGetKey(Globals.window, controlsMap.get(DATA_STRING_INPUT_CODE_MENU_DECREMENT)) == GLFW_PRESS){
|
||||||
if(controlsState.get(DATA_STRING_INPUT_CODE_MOVEMENT_BACKWARD) == true){
|
controlsState.put(DATA_STRING_INPUT_CODE_MENU_DECREMENT, true);
|
||||||
movementTree.slowdown();
|
} else {
|
||||||
|
if(controlsState.get(DATA_STRING_INPUT_CODE_MENU_DECREMENT) == true){
|
||||||
|
Globals.currentMenu.decrementMenuOption();
|
||||||
|
}
|
||||||
|
controlsState.put(DATA_STRING_INPUT_CODE_MENU_DECREMENT, false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
controlsState.put(DATA_STRING_INPUT_CODE_MOVEMENT_BACKWARD, false);
|
if(controlsMap.containsKey(DATA_STRING_INPUT_CODE_MENU_SELECT)){
|
||||||
}
|
if(glfwGetKey(Globals.window, controlsMap.get(DATA_STRING_INPUT_CODE_MENU_SELECT)) == GLFW_PRESS){
|
||||||
}
|
controlsState.put(DATA_STRING_INPUT_CODE_MENU_SELECT, true);
|
||||||
/*
|
} else {
|
||||||
Move left
|
if(controlsState.get(DATA_STRING_INPUT_CODE_MENU_SELECT) == true){
|
||||||
*/
|
MenuTransition.selectOption(Globals.currentMenu);
|
||||||
if(controlsMap.containsKey(DATA_STRING_INPUT_CODE_MOVEMENT_LEFT)){
|
}
|
||||||
if(glfwGetKey(Globals.window, controlsMap.get(DATA_STRING_INPUT_CODE_MOVEMENT_LEFT)) == GLFW_PRESS){
|
controlsState.put(DATA_STRING_INPUT_CODE_MENU_SELECT, false);
|
||||||
CreatureUtils.setMovementVector(Globals.playerCharacter, new Vector3f(-cameraEyeVector.x,0,-cameraEyeVector.z).rotateY((float)(90 * Math.PI / 180)).normalize());
|
}
|
||||||
if(movementTree.getState()==MovementTreeState.IDLE || movementTree.getState()==MovementTreeState.SLOWDOWN){
|
|
||||||
movementTree.start();
|
|
||||||
}
|
}
|
||||||
controlsState.put(DATA_STRING_INPUT_CODE_MOVEMENT_LEFT, true);
|
if(controlsMap.containsKey(DATA_STRING_INPUT_CODE_MENU_BACKOUT)){
|
||||||
} else {
|
if(glfwGetKey(Globals.window, controlsMap.get(DATA_STRING_INPUT_CODE_MENU_BACKOUT)) == GLFW_PRESS){
|
||||||
if(controlsState.get(DATA_STRING_INPUT_CODE_MOVEMENT_LEFT) == true){
|
controlsState.put(DATA_STRING_INPUT_CODE_MENU_BACKOUT, true);
|
||||||
movementTree.slowdown();
|
} else {
|
||||||
|
if(controlsState.get(DATA_STRING_INPUT_CODE_MENU_BACKOUT) == true){
|
||||||
|
MenuTransition.backout(Globals.currentMenu);
|
||||||
|
}
|
||||||
|
controlsState.put(DATA_STRING_INPUT_CODE_MENU_BACKOUT, false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
controlsState.put(DATA_STRING_INPUT_CODE_MOVEMENT_LEFT, false);
|
break;
|
||||||
}
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
Move right
|
|
||||||
*/
|
|
||||||
if(controlsMap.containsKey(DATA_STRING_INPUT_CODE_MOVEMENT_RIGHT)){
|
|
||||||
if(glfwGetKey(Globals.window, controlsMap.get(DATA_STRING_INPUT_CODE_MOVEMENT_RIGHT)) == GLFW_PRESS){
|
|
||||||
CreatureUtils.setMovementVector(Globals.playerCharacter, new Vector3f(-cameraEyeVector.x,0,-cameraEyeVector.z).rotateY((float)(-90 * Math.PI / 180)).normalize());
|
|
||||||
if(movementTree.getState()==MovementTreeState.IDLE || movementTree.getState()==MovementTreeState.SLOWDOWN){
|
|
||||||
movementTree.start();
|
|
||||||
}
|
|
||||||
controlsState.put(DATA_STRING_INPUT_CODE_MOVEMENT_RIGHT, true);
|
|
||||||
} else {
|
|
||||||
if(controlsState.get(DATA_STRING_INPUT_CODE_MOVEMENT_RIGHT) == true){
|
|
||||||
movementTree.slowdown();
|
|
||||||
}
|
|
||||||
controlsState.put(DATA_STRING_INPUT_CODE_MOVEMENT_RIGHT, false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
Move up
|
|
||||||
*/
|
|
||||||
if(controlsMap.containsKey(DATA_STRING_INPUT_CODE_MOVEMENT_JUMP) && glfwGetKey(Globals.window, controlsMap.get(DATA_STRING_INPUT_CODE_MOVEMENT_JUMP)) == GLFW_PRESS){
|
|
||||||
EntityUtils.getEntityPosition(Globals.playerCharacter).add(new Vector3f(0,0.6f,0).mul(1f));
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
Move down
|
|
||||||
*/
|
|
||||||
if(controlsMap.containsKey(DATA_STRING_INPUT_CODE_MOVEMENT_FALL) && glfwGetKey(Globals.window, controlsMap.get(DATA_STRING_INPUT_CODE_MOVEMENT_FALL)) == GLFW_PRESS){
|
|
||||||
EntityUtils.getEntityPosition(Globals.playerCharacter).add(new Vector3f(0,-0.6f,0).mul(1f));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -191,4 +287,12 @@ public class ControlHandler {
|
|||||||
controlsState.put(controlName,state);
|
controlsState.put(controlName,state);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setHandlerState(ControlsState state){
|
||||||
|
this.state = state;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ControlsState getState(){
|
||||||
|
return state;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -7,6 +7,8 @@ import electrosphere.game.cell.DrawCellManager;
|
|||||||
import electrosphere.game.state.SimulationState.SimulationStateMachine;
|
import electrosphere.game.state.SimulationState.SimulationStateMachine;
|
||||||
import electrosphere.game.terrain.TerrainManager;
|
import electrosphere.game.terrain.TerrainManager;
|
||||||
import electrosphere.main.Globals;
|
import electrosphere.main.Globals;
|
||||||
|
import static electrosphere.main.Globals.loadingBox;
|
||||||
|
import electrosphere.menu.MenuUtils;
|
||||||
import electrosphere.net.client.ClientNetworking;
|
import electrosphere.net.client.ClientNetworking;
|
||||||
import electrosphere.net.server.Server;
|
import electrosphere.net.server.Server;
|
||||||
import electrosphere.renderer.Model;
|
import electrosphere.renderer.Model;
|
||||||
@ -47,6 +49,12 @@ public class LoadingThread extends Thread {
|
|||||||
|
|
||||||
case LOAD_TITLE_MENU:
|
case LOAD_TITLE_MENU:
|
||||||
|
|
||||||
|
Globals.currentMenu = MenuUtils.createTitleMenu();
|
||||||
|
|
||||||
|
loadingBox.setDraw(false);
|
||||||
|
|
||||||
|
MenuUtils.makeMenuDrawable(Globals.currentMenu);
|
||||||
|
|
||||||
SimulationState.simulationState = SimulationStateMachine.TITLE_MENU;
|
SimulationState.simulationState = SimulationStateMachine.TITLE_MENU;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|||||||
@ -18,14 +18,17 @@ import electrosphere.entity.types.creature.CreatureTypeList;
|
|||||||
import electrosphere.game.cell.DrawCellManager;
|
import electrosphere.game.cell.DrawCellManager;
|
||||||
import electrosphere.game.state.LoadingThread;
|
import electrosphere.game.state.LoadingThread;
|
||||||
import electrosphere.game.terrain.TerrainManager;
|
import electrosphere.game.terrain.TerrainManager;
|
||||||
|
import electrosphere.menu.Menu;
|
||||||
import electrosphere.net.client.ClientNetworking;
|
import electrosphere.net.client.ClientNetworking;
|
||||||
import electrosphere.net.server.Server;
|
import electrosphere.net.server.Server;
|
||||||
import electrosphere.renderer.ModelUtils;
|
import electrosphere.renderer.ModelUtils;
|
||||||
import electrosphere.renderer.assetmanager.AssetDataStrings;
|
import electrosphere.renderer.assetmanager.AssetDataStrings;
|
||||||
import electrosphere.renderer.assetmanager.AssetManager;
|
import electrosphere.renderer.assetmanager.AssetManager;
|
||||||
import electrosphere.renderer.ui.WidgetManager;
|
import electrosphere.renderer.ui.WidgetManager;
|
||||||
|
import electrosphere.renderer.ui.WidgetUtils;
|
||||||
import electrosphere.renderer.ui.font.FontUtils;
|
import electrosphere.renderer.ui.font.FontUtils;
|
||||||
import electrosphere.renderer.ui.font.RawFontMap;
|
import electrosphere.renderer.ui.font.RawFontMap;
|
||||||
|
import electrosphere.renderer.ui.font.TextBox;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
@ -114,13 +117,15 @@ public class Globals {
|
|||||||
public static Texture textureSpecularDefault;
|
public static Texture textureSpecularDefault;
|
||||||
public static Material materialDefault;
|
public static Material materialDefault;
|
||||||
|
|
||||||
|
public static Texture blackTexture;
|
||||||
|
|
||||||
public static DirectionalLight lightDirectionalDefault;
|
public static DirectionalLight lightDirectionalDefault;
|
||||||
public static ArrayList<PointLight> lightPointListDefault;
|
public static ArrayList<PointLight> lightPointListDefault;
|
||||||
public static SpotLight lightSpotDefault;
|
public static SpotLight lightSpotDefault;
|
||||||
|
|
||||||
public static TextureMap textureMapDefault;
|
public static TextureMap textureMapDefault;
|
||||||
|
|
||||||
|
public static Menu currentMenu;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -155,6 +160,9 @@ public class Globals {
|
|||||||
//manager for all widgets currently being drawn to screen
|
//manager for all widgets currently being drawn to screen
|
||||||
public static WidgetManager widgetManager;
|
public static WidgetManager widgetManager;
|
||||||
|
|
||||||
|
//ui text box for loading text
|
||||||
|
public static TextBox loadingBox;
|
||||||
|
|
||||||
|
|
||||||
//the player camera entity
|
//the player camera entity
|
||||||
public static Entity playerCamera;
|
public static Entity playerCamera;
|
||||||
@ -168,6 +176,7 @@ public class Globals {
|
|||||||
public static boolean RENDER_FLAG_RENDER_SHADOW_MAP = false;
|
public static boolean RENDER_FLAG_RENDER_SHADOW_MAP = false;
|
||||||
public static boolean RENDER_FLAG_RENDER_SCREEN_FRAMEBUFFER_CONTENT = false;
|
public static boolean RENDER_FLAG_RENDER_SCREEN_FRAMEBUFFER_CONTENT = false;
|
||||||
public static boolean RENDER_FLAG_RENDER_SCREEN_FRAMEBUFFER = false;
|
public static boolean RENDER_FLAG_RENDER_SCREEN_FRAMEBUFFER = false;
|
||||||
|
public static boolean RENDER_FLAG_RENDER_BLACK_BACKGROUND = true;
|
||||||
public static boolean RENDER_FLAG_RENDER_UI = true;
|
public static boolean RENDER_FLAG_RENDER_UI = true;
|
||||||
|
|
||||||
|
|
||||||
@ -207,6 +216,10 @@ public class Globals {
|
|||||||
assetManager.registerModelToSpecificString(ModelUtils.createBitmapDisplay(), AssetDataStrings.ASSET_STRING_BITMAP_FONT);
|
assetManager.registerModelToSpecificString(ModelUtils.createBitmapDisplay(), AssetDataStrings.ASSET_STRING_BITMAP_FONT);
|
||||||
RawFontMap fontMap = Utilities.loadObjectFromBakedJsonFile("/Textures/Fonts/fontMap.json", RawFontMap.class);
|
RawFontMap fontMap = Utilities.loadObjectFromBakedJsonFile("/Textures/Fonts/fontMap.json", RawFontMap.class);
|
||||||
FontUtils.setFontDataMap(fontMap);
|
FontUtils.setFontDataMap(fontMap);
|
||||||
|
//black texture for backgrouns
|
||||||
|
blackTexture = new Texture("Textures/b1.png");
|
||||||
|
//loading box
|
||||||
|
loadingBox = WidgetUtils.createVerticallyAlignedTextBox(520, 100, 50, 7, 1, "LOADING", true);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void initEntityTypeMap(){
|
static void initEntityTypeMap(){
|
||||||
|
|||||||
@ -108,7 +108,7 @@ public class Main {
|
|||||||
public static int playerId = -1;
|
public static int playerId = -1;
|
||||||
|
|
||||||
|
|
||||||
static boolean running = true;
|
public static boolean running = true;
|
||||||
|
|
||||||
public static Entity letterEntity;
|
public static Entity letterEntity;
|
||||||
|
|
||||||
@ -143,8 +143,6 @@ public class Main {
|
|||||||
Globals.loadingThread = new LoadingThread(LoadingThread.LOAD_TITLE_MENU);
|
Globals.loadingThread = new LoadingThread(LoadingThread.LOAD_TITLE_MENU);
|
||||||
Globals.loadingThread.start();
|
Globals.loadingThread.start();
|
||||||
|
|
||||||
TextBox loadingText = WidgetUtils.createVerticallyAlignedTextBox(520, 100, 50, 7, 1, "LOADING", true);
|
|
||||||
|
|
||||||
//recapture the screen for rendering
|
//recapture the screen for rendering
|
||||||
RenderUtils.recaptureScreen();
|
RenderUtils.recaptureScreen();
|
||||||
|
|
||||||
@ -189,7 +187,7 @@ public class Main {
|
|||||||
/// I N P U T C O N T R O L S
|
/// I N P U T C O N T R O L S
|
||||||
///
|
///
|
||||||
cameraSpeed = 2.5f * deltaTime;
|
cameraSpeed = 2.5f * deltaTime;
|
||||||
if (glfwGetKey(Globals.window, GLFW_KEY_ESCAPE) == GLFW_PRESS) {
|
if (glfwGetKey(Globals.window, GLFW_KEY_ESCAPE) == GLFW_PRESS && SimulationState.simulationState == SimulationStateMachine.MAIN_SIMULATION) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
80
src/main/java/electrosphere/menu/Menu.java
Normal file
80
src/main/java/electrosphere/menu/Menu.java
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
package electrosphere.menu;
|
||||||
|
|
||||||
|
import electrosphere.main.Globals;
|
||||||
|
import electrosphere.renderer.ui.Widget;
|
||||||
|
import electrosphere.renderer.ui.font.TextBox;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import org.joml.Vector3f;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author amaterasu
|
||||||
|
*/
|
||||||
|
public class Menu {
|
||||||
|
|
||||||
|
public enum MenuType {
|
||||||
|
TITLE_MENU,
|
||||||
|
IP_MENU,
|
||||||
|
}
|
||||||
|
|
||||||
|
MenuType type;
|
||||||
|
|
||||||
|
int option = 0;
|
||||||
|
int optionMax = 0;
|
||||||
|
|
||||||
|
List<Widget> widgetList = new ArrayList();
|
||||||
|
List<Widget> optionList = new ArrayList();
|
||||||
|
|
||||||
|
public Menu(MenuType type){
|
||||||
|
this.type = type;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addOption(Widget option){
|
||||||
|
widgetList.add(option);
|
||||||
|
optionList.add(option);
|
||||||
|
optionMax++;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addElement(Widget element){
|
||||||
|
widgetList.add(element);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void dispose(){
|
||||||
|
for(Widget w : widgetList){
|
||||||
|
Globals.widgetManager.unregisterWidget(w);
|
||||||
|
}
|
||||||
|
widgetList.clear();
|
||||||
|
optionList.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void incrementMenuOption(){
|
||||||
|
setMenuOptionColor(option,new Vector3f(1.0f,1.0f,1.0f));
|
||||||
|
option++;
|
||||||
|
if(option>=optionMax){
|
||||||
|
option = 0;
|
||||||
|
}
|
||||||
|
setMenuOptionColor(option,new Vector3f(1.0f,1.0f,0.0f));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void decrementMenuOption(){
|
||||||
|
setMenuOptionColor(option,new Vector3f(1.0f,1.0f,1.0f));
|
||||||
|
option--;
|
||||||
|
if(option < 0){
|
||||||
|
option = optionMax - 1;
|
||||||
|
}
|
||||||
|
setMenuOptionColor(option,new Vector3f(1.0f,1.0f,0.0f));
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getCurrentOption(){
|
||||||
|
return option;
|
||||||
|
}
|
||||||
|
|
||||||
|
public MenuType getType(){
|
||||||
|
return type;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMenuOptionColor(int option, Vector3f color){
|
||||||
|
((TextBox)optionList.get(option)).setColor(color);
|
||||||
|
}
|
||||||
|
}
|
||||||
55
src/main/java/electrosphere/menu/MenuTransition.java
Normal file
55
src/main/java/electrosphere/menu/MenuTransition.java
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
package electrosphere.menu;
|
||||||
|
|
||||||
|
import electrosphere.game.state.LoadingThread;
|
||||||
|
import electrosphere.main.Globals;
|
||||||
|
import electrosphere.main.Main;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author amaterasu
|
||||||
|
*/
|
||||||
|
public class MenuTransition {
|
||||||
|
public static void selectOption(Menu m){
|
||||||
|
switch(m.getType()){
|
||||||
|
case TITLE_MENU:
|
||||||
|
switch(m.getCurrentOption()){
|
||||||
|
//single player
|
||||||
|
case 0:
|
||||||
|
m.dispose();
|
||||||
|
Globals.loadingThread = new LoadingThread(LoadingThread.LOAD_MAIN_GAME);
|
||||||
|
Globals.loadingThread.start();
|
||||||
|
break;
|
||||||
|
//multi player
|
||||||
|
case 1:
|
||||||
|
m.dispose();
|
||||||
|
Globals.currentMenu = MenuUtils.createIPMenu();
|
||||||
|
break;
|
||||||
|
//options
|
||||||
|
case 2:
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case IP_MENU:
|
||||||
|
switch(m.getCurrentOption()){
|
||||||
|
//connect
|
||||||
|
case 2:
|
||||||
|
Globals.loadingThread = new LoadingThread(LoadingThread.LOAD_MAIN_GAME);
|
||||||
|
Globals.loadingThread.start();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void backout(Menu m){
|
||||||
|
switch(m.getType()){
|
||||||
|
case TITLE_MENU:
|
||||||
|
Main.running = false;
|
||||||
|
break;
|
||||||
|
case IP_MENU:
|
||||||
|
Globals.currentMenu = MenuUtils.createTitleMenu();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
50
src/main/java/electrosphere/menu/MenuUtils.java
Normal file
50
src/main/java/electrosphere/menu/MenuUtils.java
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
package electrosphere.menu;
|
||||||
|
|
||||||
|
import electrosphere.main.Globals;
|
||||||
|
import electrosphere.menu.Menu.MenuType;
|
||||||
|
import electrosphere.renderer.ui.Widget;
|
||||||
|
import electrosphere.renderer.ui.WidgetUtils;
|
||||||
|
import org.joml.Vector3f;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author amaterasu
|
||||||
|
*/
|
||||||
|
public class MenuUtils {
|
||||||
|
|
||||||
|
|
||||||
|
public static Menu createTitleMenu(){
|
||||||
|
Menu rVal = new Menu(MenuType.TITLE_MENU);
|
||||||
|
int screenTop = Globals.WINDOW_HEIGHT / 2;
|
||||||
|
rVal.addElement(WidgetUtils.createVerticallyAlignedTextBox(170, screenTop - 50 , 50, 4, 1, "ORPG", true));
|
||||||
|
rVal.addOption(WidgetUtils.createVerticallyAlignedTextBox(500, screenTop - 125, 50, 12, 1, "SINGLEPLAYER", true));
|
||||||
|
rVal.setMenuOptionColor(0, new Vector3f(1.0f,1.0f,0.0f));
|
||||||
|
rVal.addOption(WidgetUtils.createVerticallyAlignedTextBox(460, screenTop - 200, 50, 11, 1, "MULTIPLAYER", true));
|
||||||
|
rVal.addOption(WidgetUtils.createVerticallyAlignedTextBox(290, screenTop - 275, 50, 7, 1, "OPTIONS", true));
|
||||||
|
return rVal;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Menu createIPMenu(){
|
||||||
|
Menu rVal = new Menu(MenuType.IP_MENU);
|
||||||
|
int screenTop = Globals.WINDOW_HEIGHT / 2;
|
||||||
|
rVal.addElement(WidgetUtils.createVerticallyAlignedTextBox(420, screenTop - 50 , 50, 10, 1, "IP ADDRESS", true));
|
||||||
|
rVal.addOption(WidgetUtils.createVerticallyAlignedTextBox(460, screenTop - 125, 50, 11, 1, "192.168.0.1", true));
|
||||||
|
rVal.setMenuOptionColor(0, new Vector3f(1.0f,1.0f,0.0f));
|
||||||
|
rVal.addElement(WidgetUtils.createVerticallyAlignedTextBox(170, screenTop - 200, 50, 4, 1, "PORT", true));
|
||||||
|
rVal.addOption(WidgetUtils.createVerticallyAlignedTextBox(170, screenTop - 275, 50, 4, 1, "1111", true));
|
||||||
|
rVal.addOption(WidgetUtils.createVerticallyAlignedTextBox(290, screenTop - 350, 50, 7, 1, "CONNECT", true));
|
||||||
|
return rVal;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void makeMenuDrawable(Menu m){
|
||||||
|
for(Widget w : m.widgetList){
|
||||||
|
w.setDraw(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void makeMenuUndrawable(Menu m){
|
||||||
|
for(Widget w : m.widgetList){
|
||||||
|
w.setDraw(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -542,6 +542,13 @@ public class RenderUtils {
|
|||||||
renderScreenFramebuffer();
|
renderScreenFramebuffer();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Render black background
|
||||||
|
*/
|
||||||
|
if(Globals.RENDER_FLAG_RENDER_BLACK_BACKGROUND){
|
||||||
|
renderBlackBackground();
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Render any ui elements
|
Render any ui elements
|
||||||
*/
|
*/
|
||||||
@ -552,6 +559,8 @@ public class RenderUtils {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//check and call events and swap the buffers
|
//check and call events and swap the buffers
|
||||||
glfwSwapBuffers(Globals.window);
|
glfwSwapBuffers(Globals.window);
|
||||||
glfwPollEvents();
|
glfwPollEvents();
|
||||||
@ -725,8 +734,14 @@ public class RenderUtils {
|
|||||||
// }
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
static void renderLoading(){
|
static void renderBlackBackground(){
|
||||||
|
//render full screen quad
|
||||||
|
glUseProgram(screenTextureShaders.shaderProgram);
|
||||||
|
glBindVertexArray(screenTextureVAO);
|
||||||
|
Globals.blackTexture.bind();
|
||||||
|
// glBindTexture(GL_TEXTURE_2D, screenFramebuffer.getTexture());
|
||||||
|
glDrawArrays(GL_TRIANGLES, 0, 6);
|
||||||
|
glBindVertexArray(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -27,5 +27,10 @@ public class WidgetManager {
|
|||||||
return widgetList;
|
return widgetList;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void unregisterWidget(Widget w){
|
||||||
|
if(widgetList.contains(w)){
|
||||||
|
widgetList.remove(w);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -20,6 +20,8 @@ public class TextBox extends Widget{
|
|||||||
int rows;
|
int rows;
|
||||||
int cols;
|
int cols;
|
||||||
String text;
|
String text;
|
||||||
|
|
||||||
|
Vector3f color = new Vector3f(0,0,0);
|
||||||
|
|
||||||
public TextBox(int positionX, int positionY, int width, int height, int rows, int cols, String text, boolean render) {
|
public TextBox(int positionX, int positionY, int width, int height, int rows, int cols, String text, boolean render) {
|
||||||
super(positionX,positionY,width,height,render,Widget.WidgetType.TEXT_BOX);
|
super(positionX,positionY,width,height,render,Widget.WidgetType.TEXT_BOX);
|
||||||
@ -56,6 +58,10 @@ public class TextBox extends Widget{
|
|||||||
this.text = text;
|
this.text = text;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setColor(Vector3f color) {
|
||||||
|
this.color = color;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void draw(){
|
public void draw(){
|
||||||
@ -82,6 +88,7 @@ public class TextBox extends Widget{
|
|||||||
charModel.pushUniformToMesh(AssetDataStrings.ASSET_STRING_BITMAP_FONT_MESH_NAME, "mDimension", characterDimensions);
|
charModel.pushUniformToMesh(AssetDataStrings.ASSET_STRING_BITMAP_FONT_MESH_NAME, "mDimension", characterDimensions);
|
||||||
charModel.pushUniformToMesh(AssetDataStrings.ASSET_STRING_BITMAP_FONT_MESH_NAME, "tPosition", bitMapPosition);
|
charModel.pushUniformToMesh(AssetDataStrings.ASSET_STRING_BITMAP_FONT_MESH_NAME, "tPosition", bitMapPosition);
|
||||||
charModel.pushUniformToMesh(AssetDataStrings.ASSET_STRING_BITMAP_FONT_MESH_NAME, "tDimension", bitMapDimension);
|
charModel.pushUniformToMesh(AssetDataStrings.ASSET_STRING_BITMAP_FONT_MESH_NAME, "tDimension", bitMapDimension);
|
||||||
|
charModel.pushUniformToMesh(AssetDataStrings.ASSET_STRING_BITMAP_FONT_MESH_NAME, "color", color);
|
||||||
charModel.drawUI();
|
charModel.drawUI();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -204,6 +204,91 @@
|
|||||||
"startY": 16,
|
"startY": 16,
|
||||||
"width": 6,
|
"width": 6,
|
||||||
"height": 11
|
"height": 11
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"symbol": " ",
|
||||||
|
"startX": 0,
|
||||||
|
"startY": 240,
|
||||||
|
"width": 16,
|
||||||
|
"height": 16
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"symbol": "0",
|
||||||
|
"startX": 0,
|
||||||
|
"startY": 175,
|
||||||
|
"width": 10,
|
||||||
|
"height": 14
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"symbol": "1",
|
||||||
|
"startX": 32,
|
||||||
|
"startY": 175,
|
||||||
|
"width": 10,
|
||||||
|
"height": 14
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"symbol": "2",
|
||||||
|
"startX": 64,
|
||||||
|
"startY": 175,
|
||||||
|
"width": 10,
|
||||||
|
"height": 14
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"symbol": "3",
|
||||||
|
"startX": 96,
|
||||||
|
"startY": 175,
|
||||||
|
"width": 10,
|
||||||
|
"height": 14
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"symbol": "4",
|
||||||
|
"startX": 128,
|
||||||
|
"startY": 175,
|
||||||
|
"width": 10,
|
||||||
|
"height": 14
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"symbol": "5",
|
||||||
|
"startX": 160,
|
||||||
|
"startY": 175,
|
||||||
|
"width": 10,
|
||||||
|
"height": 14
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"symbol": "6",
|
||||||
|
"startX": 192,
|
||||||
|
"startY": 175,
|
||||||
|
"width": 10,
|
||||||
|
"height": 14
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"symbol": "7",
|
||||||
|
"startX": 224,
|
||||||
|
"startY": 175,
|
||||||
|
"width": 10,
|
||||||
|
"height": 14
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"symbol": "8",
|
||||||
|
"startX": 0,
|
||||||
|
"startY": 143,
|
||||||
|
"width": 11,
|
||||||
|
"height": 14
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"symbol": "9",
|
||||||
|
"startX": 31,
|
||||||
|
"startY": 143,
|
||||||
|
"width": 11,
|
||||||
|
"height": 14
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"symbol": ".",
|
||||||
|
"startX": 190,
|
||||||
|
"startY": 205,
|
||||||
|
"width": 11,
|
||||||
|
"height": 14
|
||||||
}
|
}
|
||||||
|
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
BIN
src/main/resources/Textures/b1.png
Normal file
BIN
src/main/resources/Textures/b1.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 137 B |
Loading…
Reference in New Issue
Block a user