diff --git a/src/main/java/net/guerra24/voxel/client/core/GlobalStates.java b/src/main/java/net/guerra24/voxel/client/core/GlobalStates.java index 456905641..5735f5621 100644 --- a/src/main/java/net/guerra24/voxel/client/core/GlobalStates.java +++ b/src/main/java/net/guerra24/voxel/client/core/GlobalStates.java @@ -1,130 +1,61 @@ package net.guerra24.voxel.client.core; -import java.util.Random; - -import net.guerra24.voxel.client.api.API; +import net.guerra24.voxel.client.core.states.GameSPState; +import net.guerra24.voxel.client.core.states.InPauseState; +import net.guerra24.voxel.client.core.states.LoadingState; +import net.guerra24.voxel.client.core.states.MainMenuState; +import net.guerra24.voxel.client.core.states.OptionsState; import net.guerra24.voxel.client.graphics.opengl.Display; import net.guerra24.voxel.client.input.Keyboard; -import net.guerra24.voxel.client.menu.MainMenu; -import net.guerra24.voxel.client.menu.OptionsMenu; -import net.guerra24.voxel.client.menu.PauseMenu; -import net.guerra24.voxel.client.resources.GameResources; import net.guerra24.voxel.client.resources.Loader; -import net.guerra24.voxel.client.world.WorldsHandler; -import net.guerra24.voxel.universal.util.vector.Vector3f; public class GlobalStates { public boolean loop = false; - private GameState state; - - private MainMenu mainMenu; - private PauseMenu pauseMenu; - private OptionsMenu optionsMenu; + public GameState state; public enum GameState { - GAME_SP, MAINMENU, IN_PAUSE, LOADING_WORLD, OPTIONS; + GAME_SP(new GameSPState()), + MAINMENU(new MainMenuState()), + IN_PAUSE(new InPauseState()), + LOADING_WORLD(new LoadingState()), + OPTIONS(new OptionsState()); + + GameState(State state) { + this.state = state; + } + + State state; } public GlobalStates(Loader loader) { - mainMenu = new MainMenu(loader); - pauseMenu = new PauseMenu(); - optionsMenu = new OptionsMenu(); loop = true; state = GameState.MAINMENU; } - public void updateUpdateThread(GameResources gm, WorldsHandler worlds, API api, Display display) { - - if (state == GameState.MAINMENU && mainMenu.getPlayButton().pressed()) { - state = GameState.LOADING_WORLD; - Random seed; - if (VoxelVariables.isCustomSeed) { - seed = new Random(VoxelVariables.seed.hashCode()); - } else { - seed = new Random(); - } - worlds.getActiveWorld().startWorld("World-0", seed, 0, api, gm); - gm.getCamera().setMouse(); - gm.getSoundSystem().stop("menu1"); - gm.getSoundSystem().rewind("menu1"); - state = GameState.GAME_SP; - } - - if (state == GameState.MAINMENU && mainMenu.getExitButton().pressed()) { - loop = false; - } - - if (state == GameState.IN_PAUSE && pauseMenu.getBackToMain().pressed()) { - worlds.getActiveWorld().clearDimension(gm); - gm.getSoundSystem().play("menu1"); - gm.getCamera().setPosition(new Vector3f(0, 0, 1)); - gm.getCamera().setPitch(0); - gm.getCamera().setYaw(0); - state = GameState.MAINMENU; - gm.getSoundSystem().setVolume("menu1", 1f); - } - - if (state == GameState.MAINMENU && mainMenu.getOptionsButton().pressed()) { - gm.getCamera().setPosition(new Vector3f(-1.4f, -3.4f, 1.4f)); - state = GameState.OPTIONS; - } - - if (state == GameState.OPTIONS && optionsMenu.getExitButton().pressed()) { - gm.getCamera().setPosition(new Vector3f(0, 0, 1)); - state = GameState.MAINMENU; - } - if (state == GameState.MAINMENU) { - if (mainMenu.getPlayButton().insideButton()) - mainMenu.getList().get(0).changeScale(0.074f); - else - mainMenu.getList().get(0).changeScale(0.07f); - if (mainMenu.getExitButton().insideButton()) - mainMenu.getList().get(2).changeScale(0.074f); - else - mainMenu.getList().get(2).changeScale(0.07f); - if (mainMenu.getOptionsButton().insideButton()) - mainMenu.getList().get(1).changeScale(0.074f); - else - mainMenu.getList().get(1).changeScale(0.07f); - - } - - if (state == GameState.OPTIONS) { - if (optionsMenu.getExitButton().insideButton()) - mainMenu.getList().get(3).changeScale(0.074f); - else - mainMenu.getList().get(3).changeScale(0.07f); - } - - if (state == GameState.GAME_SP && !display.isDisplayFocused() && !VoxelVariables.debug) { - gm.getCamera().unlockMouse(); - state = GameState.IN_PAUSE; - } - + public void doUpdate(Voxel voxel, float delta) { + + state.state.update(voxel, this, delta); + if (Display.isCloseRequested()) loop = false; while (Keyboard.next()) { if (state == GameState.GAME_SP && Keyboard.isKeyDown(Keyboard.KEY_ESCAPE)) { - gm.getCamera().unlockMouse(); + voxel.getGameResources().getCamera().unlockMouse(); state = GameState.IN_PAUSE; } else if (state == GameState.IN_PAUSE && Keyboard.isKeyDown(Keyboard.KEY_ESCAPE)) { - gm.getCamera().setMouse(); + voxel.getGameResources().getCamera().setMouse(); state = GameState.GAME_SP; } } } - public void updateRenderThread(GameResources gm, WorldsHandler worlds, API api, Display display) { + public void doRender(Voxel voxel, float delta) { + state.state.render(voxel, this, delta); } public GameState getState() { return state; } - - public MainMenu getMainMenu() { - return mainMenu; - } - } diff --git a/src/main/java/net/guerra24/voxel/client/core/State.java b/src/main/java/net/guerra24/voxel/client/core/State.java new file mode 100644 index 000000000..bf3bee756 --- /dev/null +++ b/src/main/java/net/guerra24/voxel/client/core/State.java @@ -0,0 +1,9 @@ +package net.guerra24.voxel.client.core; + +public interface State { + + void update(Voxel voxel, GlobalStates states, float delta); + + void render(Voxel voxel, GlobalStates states, float delta); + +} diff --git a/src/main/java/net/guerra24/voxel/client/core/Voxel.java b/src/main/java/net/guerra24/voxel/client/core/Voxel.java index f71cdf4ee..0b0036ba0 100644 --- a/src/main/java/net/guerra24/voxel/client/core/Voxel.java +++ b/src/main/java/net/guerra24/voxel/client/core/Voxel.java @@ -102,12 +102,8 @@ private void init() { worldsHandler.registerWorld(world.getCodeName(), world); worldsHandler.setActiveWorld("Infinity"); Logger.log("Initializing Threads"); - worldThread2 = new WorldThread1(); + worldThread2 = new WorldThread1(this); worldThread2.setName("Voxel World 1"); - worldThread2.setWorldHandler(worldsHandler); - worldThread2.setGameResources(gameResources); - worldThread2.setVoxel(this); - worldThread2.setGuiResources(guiResources); worldThread2.start(); /* * new Thread(new Runnable() { public void run() { @@ -138,104 +134,21 @@ public void mainLoop() { Display.timeCountRender -= 1f; } delta = Display.getDeltaRender(); - render(gameResources, delta); + render(delta); } dispose(); } - public void render(GameResources gm, float delta) { + private void render(float delta) { Display.fpsCount++; - switch (gm.getGlobalStates().getState()) { - case MAINMENU: - gm.getFrustum().calculateFrustum(gm.getRenderer().getProjectionMatrix(), gm.getCamera()); - gm.getRenderer().prepare(); - gm.getRenderer().renderGui(gm.getGlobalStates().getMainMenu().getList(), gm); - gm.getGuiRenderer().renderGui(gm.guis2); - break; - case IN_PAUSE: - gm.getRenderer().prepare(); - gm.getRenderer().begin(gm); - worldsHandler.getActiveWorld().updateChunksRender(gm); - gm.getRenderer().end(gm); - gm.getRenderer().renderEntity(gm.getPhysics().getMobManager().getMobs(), gm); - gm.getSkyboxRenderer().render(VoxelVariables.RED, VoxelVariables.GREEN, VoxelVariables.BLUE, delta, gm); - gm.getParticleController().render(gm); - gm.getGuiRenderer().renderGui(gm.guis4); - break; - case GAME_SP: - worldsHandler.getActiveWorld().lighting(); - - gm.getWaterFBO().begin(128, 128); - gm.getCamera().invertPitch(); - gm.getRenderer().prepare(); - gm.getSkyboxRenderer().render(VoxelVariables.RED, VoxelVariables.GREEN, VoxelVariables.BLUE, delta, gm); - gm.getWaterFBO().end(); - gm.getCamera().invertPitch(); - - gm.getSun_Camera().setPosition(gm.getCamera().getPosition()); - if (VoxelVariables.useShadows) { - gm.getMasterShadowRenderer().being(); - gm.getRenderer().prepare(); - worldsHandler.getActiveWorld().updateChunksShadow(gm); - gm.getMasterShadowRenderer().end(); - } - - gm.getFrustum().calculateFrustum(gm.getRenderer().getProjectionMatrix(), gm.getCamera()); - - gm.getPostProcessing().getPost_fbo().begin(Display.getWidth(), Display.getHeight()); - gm.getRenderer().prepare(); - gm.getRenderer().begin(gm); - worldsHandler.getActiveWorld().updateChunksRender(gm); - gm.getRenderer().end(gm); - gm.getSkyboxRenderer().render(VoxelVariables.RED, VoxelVariables.GREEN, VoxelVariables.BLUE, delta, gm); - gm.getRenderer().renderEntity(gm.getPhysics().getMobManager().getMobs(), gm); - gm.getParticleController().render(gm); - gm.getCamera().update(delta, gameResources, guiResources, worldsHandler.getActiveWorld(), api, client); - gm.getPhysics().getMobManager().getPlayer().update(delta, gm, guiResources, worldsHandler.getActiveWorld(), - api); - gm.getPostProcessing().getPost_fbo().end(); - - gm.getRenderer().prepare(); - gm.getPostProcessing().render(gm); - gm.getGuiRenderer().renderGui(gm.guis); - break; - case LOADING_WORLD: - gm.getRenderer().prepare(); - gm.getGuiRenderer().renderGui(gm.guis3); - break; - case OPTIONS: - gm.getFrustum().calculateFrustum(gm.getRenderer().getProjectionMatrix(), gm.getCamera()); - gm.getRenderer().prepare(); - gm.getRenderer().renderGui(gm.getGlobalStates().getMainMenu().getList(), gm); - gm.getGuiRenderer().renderGui(gm.guis2); - break; - } - gm.getTextMasterRenderer().render(); - gm.getGlobalStates().updateRenderThread(gm, worldsHandler, api, display); - display.updateDisplay(VoxelVariables.FPS, gm); + gameResources.getGlobalStates().doRender(this, delta); + gameResources.getTextMasterRenderer().render(); + display.updateDisplay(VoxelVariables.FPS, gameResources); } - public void update(GameResources gm, GuiResources gi, WorldsHandler world, float delta) { + public void update(float delta) { Display.upsCount++; - switch (gm.getGlobalStates().getState()) { - case MAINMENU: - break; - case IN_PAUSE: - break; - case GAME_SP: - worldsHandler.getActiveWorld().updateChunksGeneration(gm, api); - gm.getPhysics().getMobManager().update(delta, gm, gi, world.getActiveWorld(), api); - gm.getParticleController().update(delta, gm, gi, world.getActiveWorld()); - gm.getRenderer().getWaterRenderer().update(delta); - gm.update(gm.getSkyboxRenderer().update(delta)); - gm.getParticleController().update(delta, gm, gi, world.getActiveWorld()); - break; - case LOADING_WORLD: - break; - case OPTIONS: - break; - } - gm.getGlobalStates().updateUpdateThread(gm, world, api, display); + gameResources.getGlobalStates().doUpdate(this, delta); } public void dispose() { @@ -261,4 +174,12 @@ public DedicatedClient getClient() { return client; } + public WorldsHandler getWorldsHandler() { + return worldsHandler; + } + + public Display getDisplay() { + return display; + } + } diff --git a/src/main/java/net/guerra24/voxel/client/core/WorldThread1.java b/src/main/java/net/guerra24/voxel/client/core/WorldThread1.java index cdf988373..f534b7020 100644 --- a/src/main/java/net/guerra24/voxel/client/core/WorldThread1.java +++ b/src/main/java/net/guerra24/voxel/client/core/WorldThread1.java @@ -30,12 +30,15 @@ import net.guerra24.voxel.client.world.WorldsHandler; public class WorldThread1 extends Thread { - private GameResources gameResources; - private GuiResources guiResources; - private WorldsHandler world; - private Voxel voxel; + private final GameResources gameResources; + private final Voxel voxel; private long variableYieldTime, lastTime; private int fps = 20; + + public WorldThread1(Voxel voxel) { + this.voxel = voxel; + this.gameResources = voxel.getGameResources(); + } @Override public void run() { @@ -46,29 +49,13 @@ public void run() { delta = Display.getDeltaUpdate(); accumulator += delta; while (accumulator >= interval) { - voxel.update(gameResources, guiResources, world, interval); + voxel.update(interval); accumulator -= interval; } sync(fps); } } - public void setGameResources(GameResources gameResources) { - this.gameResources = gameResources; - } - - public void setWorldHandler(WorldsHandler dimensionHandler) { - this.world = dimensionHandler; - } - - public void setVoxel(Voxel kernel) { - this.voxel = kernel; - } - - public void setGuiResources(GuiResources guiResources) { - this.guiResources = guiResources; - } - private void sync(int fps) { if (fps <= 0) return; diff --git a/src/main/java/net/guerra24/voxel/client/core/states/GameSPState.java b/src/main/java/net/guerra24/voxel/client/core/states/GameSPState.java new file mode 100644 index 000000000..1714ce8b2 --- /dev/null +++ b/src/main/java/net/guerra24/voxel/client/core/states/GameSPState.java @@ -0,0 +1,80 @@ +package net.guerra24.voxel.client.core.states; + +import net.guerra24.voxel.client.api.API; +import net.guerra24.voxel.client.core.GlobalStates; +import net.guerra24.voxel.client.core.GlobalStates.GameState; +import net.guerra24.voxel.client.graphics.opengl.Display; +import net.guerra24.voxel.client.resources.GameResources; +import net.guerra24.voxel.client.resources.GuiResources; +import net.guerra24.voxel.client.world.WorldsHandler; +import net.guerra24.voxel.client.core.State; +import net.guerra24.voxel.client.core.Voxel; +import net.guerra24.voxel.client.core.VoxelVariables; + +public class GameSPState implements State { + + @Override + public void update(Voxel voxel, GlobalStates states, float delta) { + GameResources gm = voxel.getGameResources(); + GuiResources gi = voxel.getGuiResources(); + WorldsHandler worlds = voxel.getWorldsHandler(); + API api = voxel.getApi(); + Display display = voxel.getDisplay(); + + worlds.getActiveWorld().updateChunksGeneration(gm, api); + gm.getPhysics().getMobManager().update(delta, gm, gi, worlds.getActiveWorld(), api); + gm.getParticleController().update(delta, gm, gi, worlds.getActiveWorld()); + gm.getRenderer().getWaterRenderer().update(delta); + gm.update(gm.getSkyboxRenderer().update(delta)); + gm.getParticleController().update(delta, gm, gi, worlds.getActiveWorld()); + + if (!display.isDisplayFocused() && !VoxelVariables.debug) { + gm.getCamera().unlockMouse(); + states.state = GameState.IN_PAUSE; + } + } + + @Override + public void render(Voxel voxel, GlobalStates states, float delta) { + GameResources gm = voxel.getGameResources(); + WorldsHandler worlds = voxel.getWorldsHandler(); + API api = voxel.getApi(); + + worlds.getActiveWorld().lighting(); + + gm.getWaterFBO().begin(128, 128); + gm.getCamera().invertPitch(); + gm.getRenderer().prepare(); + gm.getSkyboxRenderer().render(VoxelVariables.RED, VoxelVariables.GREEN, VoxelVariables.BLUE, delta, gm); + gm.getWaterFBO().end(); + gm.getCamera().invertPitch(); + + gm.getSun_Camera().setPosition(gm.getCamera().getPosition()); + if (VoxelVariables.useShadows) { + gm.getMasterShadowRenderer().being(); + gm.getRenderer().prepare(); + worlds.getActiveWorld().updateChunksShadow(gm); + gm.getMasterShadowRenderer().end(); + } + + gm.getFrustum().calculateFrustum(gm.getRenderer().getProjectionMatrix(), gm.getCamera()); + + gm.getPostProcessing().getPost_fbo().begin(Display.getWidth(), Display.getHeight()); + gm.getRenderer().prepare(); + gm.getRenderer().begin(gm); + worlds.getActiveWorld().updateChunksRender(gm); + gm.getRenderer().end(gm); + gm.getSkyboxRenderer().render(VoxelVariables.RED, VoxelVariables.GREEN, VoxelVariables.BLUE, delta, gm); + gm.getRenderer().renderEntity(gm.getPhysics().getMobManager().getMobs(), gm); + gm.getParticleController().render(gm); + gm.getCamera().update(delta, gm, voxel.getGuiResources(), worlds.getActiveWorld(), api, voxel.getClient()); + gm.getPhysics().getMobManager().getPlayer().update(delta, gm, voxel.getGuiResources(), worlds.getActiveWorld(), + api); + gm.getPostProcessing().getPost_fbo().end(); + + gm.getRenderer().prepare(); + gm.getPostProcessing().render(gm); + gm.getGuiRenderer().renderGui(gm.guis); + } + +} diff --git a/src/main/java/net/guerra24/voxel/client/core/states/InPauseState.java b/src/main/java/net/guerra24/voxel/client/core/states/InPauseState.java new file mode 100644 index 000000000..067f32091 --- /dev/null +++ b/src/main/java/net/guerra24/voxel/client/core/states/InPauseState.java @@ -0,0 +1,49 @@ +package net.guerra24.voxel.client.core.states; + +import net.guerra24.voxel.client.core.GlobalStates; +import net.guerra24.voxel.client.core.State; +import net.guerra24.voxel.client.core.Voxel; +import net.guerra24.voxel.client.core.VoxelVariables; +import net.guerra24.voxel.client.core.GlobalStates.GameState; +import net.guerra24.voxel.client.menu.PauseMenu; +import net.guerra24.voxel.client.resources.GameResources; +import net.guerra24.voxel.universal.util.vector.Vector3f; + +public class InPauseState implements State { + + private PauseMenu pauseMenu; + + public InPauseState() { + pauseMenu = new PauseMenu(); + } + + @Override + public void update(Voxel voxel, GlobalStates states, float delta) { + GameResources gm = voxel.getGameResources(); + + if (pauseMenu.getBackToMain().pressed()) { + voxel.getWorldsHandler().getActiveWorld().clearDimension(gm); + gm.getSoundSystem().play("menu1"); + gm.getCamera().setPosition(new Vector3f(0, 0, 1)); + gm.getCamera().setPitch(0); + gm.getCamera().setYaw(0); + states.state = GameState.MAINMENU; + gm.getSoundSystem().setVolume("menu1", 1f); + } + } + + @Override + public void render(Voxel voxel, GlobalStates states, float delta) { + GameResources gm = voxel.getGameResources(); + + gm.getRenderer().prepare(); + gm.getRenderer().begin(gm); + voxel.getWorldsHandler().getActiveWorld().updateChunksRender(gm); + gm.getRenderer().end(gm); + gm.getRenderer().renderEntity(gm.getPhysics().getMobManager().getMobs(), gm); + gm.getSkyboxRenderer().render(VoxelVariables.RED, VoxelVariables.GREEN, VoxelVariables.BLUE, delta, gm); + gm.getParticleController().render(gm); + gm.getGuiRenderer().renderGui(gm.guis4); + } + +} diff --git a/src/main/java/net/guerra24/voxel/client/core/states/LoadingState.java b/src/main/java/net/guerra24/voxel/client/core/states/LoadingState.java new file mode 100644 index 000000000..23c7983f8 --- /dev/null +++ b/src/main/java/net/guerra24/voxel/client/core/states/LoadingState.java @@ -0,0 +1,36 @@ +package net.guerra24.voxel.client.core.states; + +import java.util.Random; + +import net.guerra24.voxel.client.core.GlobalStates; +import net.guerra24.voxel.client.core.State; +import net.guerra24.voxel.client.core.Voxel; +import net.guerra24.voxel.client.core.VoxelVariables; +import net.guerra24.voxel.client.core.GlobalStates.GameState; + +public class LoadingState implements State { + + @Override + public void update(Voxel voxel, GlobalStates states, float delta) { + Random seed; + if (VoxelVariables.isCustomSeed) { + seed = new Random(VoxelVariables.seed.hashCode()); + } else { + seed = new Random(); + } + voxel.getWorldsHandler().getActiveWorld().startWorld("World-0", seed, 0, voxel.getApi(), voxel.getGameResources()); + voxel.getGameResources().getCamera().setMouse(); + voxel.getGameResources().getSoundSystem().stop("menu1"); + voxel.getGameResources().getSoundSystem().rewind("menu1"); + states.state = GameState.GAME_SP; + } + + @Override + public void render(Voxel voxel, GlobalStates states, float delta) { + voxel.getGameResources().getRenderer().prepare(); + voxel.getGameResources().getGuiRenderer().renderGui(voxel.getGameResources().guis3); + } + + + +} diff --git a/src/main/java/net/guerra24/voxel/client/core/states/MainMenuState.java b/src/main/java/net/guerra24/voxel/client/core/states/MainMenuState.java new file mode 100644 index 000000000..1d8f7c0c9 --- /dev/null +++ b/src/main/java/net/guerra24/voxel/client/core/states/MainMenuState.java @@ -0,0 +1,51 @@ +package net.guerra24.voxel.client.core.states; + +import net.guerra24.voxel.client.core.GlobalStates; +import net.guerra24.voxel.client.core.State; +import net.guerra24.voxel.client.core.Voxel; +import net.guerra24.voxel.client.core.GlobalStates.GameState; +import net.guerra24.voxel.client.resources.GameResources; +import net.guerra24.voxel.universal.util.vector.Vector3f; + +public class MainMenuState implements State { + + @Override + public void render(Voxel voxel, GlobalStates states, float delta) { + GameResources gm = voxel.getGameResources(); + + gm.getFrustum().calculateFrustum(gm.getRenderer().getProjectionMatrix(), gm.getCamera()); + gm.getRenderer().prepare(); + gm.getRenderer().renderGui(gm.getMenuSystem().mainMenu.getList(), gm); + gm.getGuiRenderer().renderGui(gm.guis2); + } + + @Override + public void update(Voxel voxel, GlobalStates states, float delta) { + GameResources gm = voxel.getGameResources(); + + if (gm.getMenuSystem().mainMenu.getPlayButton().pressed()) { + states.state = GameState.LOADING_WORLD; + } else if (gm.getMenuSystem().mainMenu.getExitButton().pressed()) { + states.loop = false; + } else if (gm.getMenuSystem().mainMenu.getOptionsButton().pressed()) { + gm.getCamera().setPosition(new Vector3f(-1.4f, -3.4f, 1.4f)); + states.state = GameState.OPTIONS; + } + + if (gm.getMenuSystem().mainMenu.getPlayButton().insideButton()) + gm.getMenuSystem().mainMenu.getList().get(0).changeScale(0.074f); + else + gm.getMenuSystem().mainMenu.getList().get(0).changeScale(0.07f); + + if (gm.getMenuSystem().mainMenu.getExitButton().insideButton()) + gm.getMenuSystem().mainMenu.getList().get(2).changeScale(0.074f); + else + gm.getMenuSystem().mainMenu.getList().get(2).changeScale(0.07f); + + if (gm.getMenuSystem().mainMenu.getOptionsButton().insideButton()) + gm.getMenuSystem().mainMenu.getList().get(1).changeScale(0.074f); + else + gm.getMenuSystem().mainMenu.getList().get(1).changeScale(0.07f); + } + +} diff --git a/src/main/java/net/guerra24/voxel/client/core/states/OptionsState.java b/src/main/java/net/guerra24/voxel/client/core/states/OptionsState.java new file mode 100644 index 000000000..d3928c5bc --- /dev/null +++ b/src/main/java/net/guerra24/voxel/client/core/states/OptionsState.java @@ -0,0 +1,37 @@ +package net.guerra24.voxel.client.core.states; + +import net.guerra24.voxel.client.core.GlobalStates; +import net.guerra24.voxel.client.core.State; +import net.guerra24.voxel.client.core.Voxel; +import net.guerra24.voxel.client.resources.GameResources; +import net.guerra24.voxel.client.core.GlobalStates.GameState; +import net.guerra24.voxel.universal.util.vector.Vector3f; + +public class OptionsState implements State { + + @Override + public void update(Voxel voxel, GlobalStates states, float delta) { + GameResources gm = voxel.getGameResources(); + + if (gm.getMenuSystem().optionsMenu.getExitButton().pressed()) { + voxel.getGameResources().getCamera().setPosition(new Vector3f(0, 0, 1)); + states.state = GameState.MAINMENU; + } + + if (gm.getMenuSystem().optionsMenu.getExitButton().insideButton()) + gm.getMenuSystem().mainMenu.getList().get(3).changeScale(0.074f); + else + gm.getMenuSystem().mainMenu.getList().get(3).changeScale(0.07f); + } + + @Override + public void render(Voxel voxel, GlobalStates states, float delta) { + GameResources gm = voxel.getGameResources(); + + gm.getFrustum().calculateFrustum(gm.getRenderer().getProjectionMatrix(), gm.getCamera()); + gm.getRenderer().prepare(); + gm.getRenderer().renderGui(gm.getMenuSystem().mainMenu.getList(), gm); + gm.getGuiRenderer().renderGui(gm.guis2); + } + +} diff --git a/src/main/java/net/guerra24/voxel/client/menu/Menu.java b/src/main/java/net/guerra24/voxel/client/menu/Menu.java new file mode 100644 index 000000000..08ee1c52d --- /dev/null +++ b/src/main/java/net/guerra24/voxel/client/menu/Menu.java @@ -0,0 +1,19 @@ +package net.guerra24.voxel.client.menu; + +import net.guerra24.voxel.client.resources.Loader; + +public class Menu { + + public final MainMenu mainMenu; + + public final PauseMenu pauseMenu; + + public final OptionsMenu optionsMenu; + + public Menu(Loader loader) { + mainMenu = new MainMenu(loader); + pauseMenu = new PauseMenu(); + optionsMenu = new OptionsMenu(); + } + +} diff --git a/src/main/java/net/guerra24/voxel/client/resources/GameResources.java b/src/main/java/net/guerra24/voxel/client/resources/GameResources.java index b1c95504b..18eed7b11 100644 --- a/src/main/java/net/guerra24/voxel/client/resources/GameResources.java +++ b/src/main/java/net/guerra24/voxel/client/resources/GameResources.java @@ -40,6 +40,7 @@ import net.guerra24.voxel.client.graphics.PostProcessingRenderer; import net.guerra24.voxel.client.graphics.SkyboxRenderer; import net.guerra24.voxel.client.graphics.TextMasterRenderer; +import net.guerra24.voxel.client.menu.Menu; import net.guerra24.voxel.client.particle.ParticleController; import net.guerra24.voxel.client.resources.models.GuiTexture; import net.guerra24.voxel.client.sound.LibraryLWJGLOpenAL; @@ -89,6 +90,7 @@ public class GameResources { private Kryo kryo; private FrameBuffer waterFBO; private Physics physics; + private Menu menuSystem; private Vector3f sunRotation = new Vector3f(0, 0, -30); private Vector3f lightPos; @@ -112,6 +114,7 @@ public void init() { sun_Camera.setPitch(sunRotation.y); sun_Camera.setRoll(sunRotation.z); kryo = new Kryo(); + menuSystem = new Menu(loader); renderer = new MasterRenderer(loader); camera = new Camera(renderer.getProjectionMatrix()); occlusionRenderer = new OcclusionRenderer(renderer.getProjectionMatrix()); @@ -277,5 +280,9 @@ public Vector3f getLightPos() { public OcclusionRenderer getOcclusionRenderer() { return occlusionRenderer; } + + public Menu getMenuSystem() { + return menuSystem; + } } \ No newline at end of file