diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/backend/GraphicsBackend.java b/src/main/java/ru/windcorp/progressia/client/graphics/backend/GraphicsBackend.java index c464d34..af69c93 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/backend/GraphicsBackend.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/backend/GraphicsBackend.java @@ -18,11 +18,11 @@ package ru.windcorp.progressia.client.graphics.backend; -import static org.lwjgl.opengl.GL11.*; - import glm.vec._2.i.Vec2i; +import org.lwjgl.glfw.GLFWVidMode; import static org.lwjgl.glfw.GLFW.*; +import static org.lwjgl.opengl.GL11.*; public class GraphicsBackend { @@ -38,6 +38,8 @@ public class GraphicsBackend { private static boolean faceCullingEnabled = false; + private static boolean isFullscreen = false; + private GraphicsBackend() { } @@ -128,4 +130,33 @@ public class GraphicsBackend { faceCullingEnabled = useFaceCulling; } + public static boolean isFullscreen() { + return isFullscreen; + } + + public static void setFullscreen() { + GLFWVidMode vidmode = glfwGetVideoMode(glfwGetPrimaryMonitor()); + glfwSetWindowMonitor( + getWindowHandle(), + glfwGetPrimaryMonitor(), + 0, + 0, + vidmode.width(), + vidmode.height(), + 0); + isFullscreen = true; + } + + public static void setWindowed() { + GLFWVidMode vidmode = glfwGetVideoMode(glfwGetPrimaryMonitor()); + glfwSetWindowMonitor( + getWindowHandle(), + 0, + (vidmode.width() - getFrameWidth()) / 2, + (vidmode.height() - getFrameHeight()) / 2, + getFrameWidth(), + getFrameHeight(), + 0); + isFullscreen = false; + } } diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/backend/GraphicsInterface.java b/src/main/java/ru/windcorp/progressia/client/graphics/backend/GraphicsInterface.java index 9af984f..be32b4c 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/backend/GraphicsInterface.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/backend/GraphicsInterface.java @@ -73,4 +73,12 @@ public class GraphicsInterface { GraphicsBackend.startNextLayer(); } + public static void makeFullscreen(boolean state) { + if (state) { + GraphicsBackend.setFullscreen(); + } else { + GraphicsBackend.setWindowed(); + } + } + } diff --git a/src/main/java/ru/windcorp/progressia/test/LayerTestGUI.java b/src/main/java/ru/windcorp/progressia/test/LayerTestGUI.java index 30cca35..9d7b8fb 100755 --- a/src/main/java/ru/windcorp/progressia/test/LayerTestGUI.java +++ b/src/main/java/ru/windcorp/progressia/test/LayerTestGUI.java @@ -18,16 +18,12 @@ package ru.windcorp.progressia.test; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Objects; -import java.util.function.Supplier; - import glm.vec._3.Vec3; import glm.vec._4.Vec4; import ru.windcorp.progressia.client.Client; import ru.windcorp.progressia.client.ClientState; import ru.windcorp.progressia.client.graphics.Colors; +import ru.windcorp.progressia.client.graphics.backend.GraphicsBackend; import ru.windcorp.progressia.client.graphics.backend.GraphicsInterface; import ru.windcorp.progressia.client.graphics.font.Font; import ru.windcorp.progressia.client.graphics.gui.DynamicLabel; @@ -44,6 +40,11 @@ import ru.windcorp.progressia.common.util.dynstr.DynamicStrings; import ru.windcorp.progressia.server.Server; import ru.windcorp.progressia.server.ServerState; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Objects; +import java.util.function.Supplier; + public class LayerTestGUI extends GUILayer { public LayerTestGUI() { @@ -110,6 +111,14 @@ public class LayerTestGUI extends GUILayer { ) ); + panel.addChild( + new Label( + "FullscreenDisplay", + font, + tmp_dynFormat("LayerTestGUI.IsFullscreen", GraphicsBackend::isFullscreen) + ) + ); + panel.addChild( new DynamicLabel( "FPSDisplay", diff --git a/src/main/java/ru/windcorp/progressia/test/TestPlayerControls.java b/src/main/java/ru/windcorp/progressia/test/TestPlayerControls.java index 710cbc1..9183130 100644 --- a/src/main/java/ru/windcorp/progressia/test/TestPlayerControls.java +++ b/src/main/java/ru/windcorp/progressia/test/TestPlayerControls.java @@ -187,6 +187,13 @@ public class TestPlayerControls { handleEscape(); break; + case GLFW.GLFW_KEY_F11: + if (!event.isPress()) + return false; + GraphicsInterface.makeFullscreen(!GraphicsBackend.isFullscreen()); + updateGUI(); + break; + case GLFW.GLFW_KEY_F3: if (!event.isPress()) return false; diff --git a/src/main/resources/assets/languages/en-US.lang b/src/main/resources/assets/languages/en-US.lang index a47e216..3524c66 100644 --- a/src/main/resources/assets/languages/en-US.lang +++ b/src/main/resources/assets/languages/en-US.lang @@ -19,4 +19,5 @@ LayerTestGUI.PosDisplay.NA.Client = Pos: client n/a LayerTestGUI.PosDisplay.NA.Entity = Pos: entity n/a LayerTestGUI.SelectedBlockDisplay = %s Block: %s LayerTestGUI.SelectedTileDisplay = %s Tile: %s -LayerTestGUI.PlacementModeHint = (Blocks %s Tiles: Ctrl + Mouse Wheel) \ No newline at end of file +LayerTestGUI.PlacementModeHint = (Blocks %s Tiles: Ctrl + Mouse Wheel) +LayerTestGUI.IsFullscreen = Fullscreen: %5s (F11) \ No newline at end of file diff --git a/src/main/resources/assets/languages/ru-RU.lang b/src/main/resources/assets/languages/ru-RU.lang index 180b25a..4056ee1 100644 --- a/src/main/resources/assets/languages/ru-RU.lang +++ b/src/main/resources/assets/languages/ru-RU.lang @@ -19,4 +19,5 @@ LayerTestGUI.PosDisplay.NA.Client = Поз: клиент н/д LayerTestGUI.PosDisplay.NA.Entity = Поз: сущность н/д LayerTestGUI.SelectedBlockDisplay = %s Блок: %s LayerTestGUI.SelectedTileDisplay = %s Плитка: %s -LayerTestGUI.PlacementModeHint = (Блок %s плитки: Ctrl + прокрутка) \ No newline at end of file +LayerTestGUI.PlacementModeHint = (Блок %s плитки: Ctrl + прокрутка) +LayerTestGUI.IsFullscreen = Полный экран: %5s (F11) \ No newline at end of file