diff --git a/GameEngine/src/main/java/org/example/ColorController.class b/GameEngine/src/main/java/org/example/ColorController.class new file mode 100644 index 0000000..1a0c83d --- /dev/null +++ b/GameEngine/src/main/java/org/example/ColorController.class Binary files differ diff --git a/GameEngine/src/main/java/org/example/ColorController.java b/GameEngine/src/main/java/org/example/ColorController.java index d4d0a0c..375eb44 100644 --- a/GameEngine/src/main/java/org/example/ColorController.java +++ b/GameEngine/src/main/java/org/example/ColorController.java @@ -1,63 +1,39 @@ package org.example; + import static org.lwjgl.glfw.GLFW.*; +public class ColorController implements IGameComponent { + private float red, green, blue; -public class ColorController { - - private float red = 1.0f; - private float green = 0.0f; - private float blue = 0.0f; - - public void setRed(float red) { - this.red = red; + @Override + public void init() { + setColor(0.0f,0.0f,0.0f); } - public void setGreen(float green) { - this.green = green; - } - - public void setBlue(float blue) { - this.blue = blue; - } - - - public float getRed() { - return red; - } - - public float getGreen() { - return green; - } - - public float getBlue() { - return blue; - } - - - - public void handleInput(int key) { - switch (key) { - case GLFW_KEY_R: // Rキーで赤に変更 - setRed(1.0f); - setGreen(0.0f); - setBlue(0.0f); - break; - case GLFW_KEY_G: // Gキーで緑に変更 - setRed(0.0f); - setGreen(1.0f); - setBlue(0.0f); - break; - case GLFW_KEY_B: // Bキーで青に変更 - setRed(0.0f); - setGreen(0.0f); - setBlue(1.0f); - break; - case GLFW_KEY_Y: // Yキーで黄色に変更 - setRed(1.0f); - setGreen(1.0f); - setBlue(0.0f); - break; + @Override + public void update() { + if (KeyInput.KeyPress(GLFW_KEY_R)) { + setColor(1.0f, 0.0f, 0.0f); // Rキーで赤に変更 } + if (KeyInput.KeyPress(GLFW_KEY_G)) { + setColor(0.0f, 1.0f, 0.0f); // Gキーで緑に変更 + } + if (KeyInput.KeyPress(GLFW_KEY_B)) { + setColor(0.0f, 0.0f, 1.0f); // Bキーで青に変更 + } + if (KeyInput.KeyPress(GLFW_KEY_Y)) { + setColor(1.0f, 1.0f, 0.0f); // Yキーで黄色に変更 + } + } + + public float getRed() { return red; } + public float getGreen() { return green; } + public float getBlue() { return blue; } + + public void setColor(float r, float g, float b){ + red = r; + green = g; + blue = b; } } \ No newline at end of file diff --git a/GameEngine/src/main/java/org/example/IGameComponent.class b/GameEngine/src/main/java/org/example/IGameComponent.class new file mode 100644 index 0000000..1995c59 --- /dev/null +++ b/GameEngine/src/main/java/org/example/IGameComponent.class Binary files differ diff --git a/GameEngine/src/main/java/org/example/IGameComponent.java b/GameEngine/src/main/java/org/example/IGameComponent.java new file mode 100644 index 0000000..03acee5 --- /dev/null +++ b/GameEngine/src/main/java/org/example/IGameComponent.java @@ -0,0 +1,6 @@ +package org.example; + +public interface IGameComponent { + void init(); + void update (); +} diff --git a/GameEngine/src/main/java/org/example/KeyInput.class b/GameEngine/src/main/java/org/example/KeyInput.class new file mode 100644 index 0000000..fc7b351 --- /dev/null +++ b/GameEngine/src/main/java/org/example/KeyInput.class Binary files differ diff --git a/GameEngine/src/main/java/org/example/KeyInput.java b/GameEngine/src/main/java/org/example/KeyInput.java new file mode 100644 index 0000000..64d33fc --- /dev/null +++ b/GameEngine/src/main/java/org/example/KeyInput.java @@ -0,0 +1,21 @@ +package org.example; + +import static org.lwjgl.glfw.GLFW.*; +public class KeyInput { + private static KeyInput instance; + private static long window; + + private KeyInput(long window) { + KeyInput.window = window; + } + + public static void init(long window) { + if (instance == null) { + instance = new KeyInput(window); + } + } + + public static boolean KeyPress(int keyCode) { + return glfwGetKey(window, keyCode) == GLFW_PRESS; + } +} diff --git a/GameEngine/src/main/java/org/example/Main.class b/GameEngine/src/main/java/org/example/Main.class new file mode 100644 index 0000000..751b51b --- /dev/null +++ b/GameEngine/src/main/java/org/example/Main.class Binary files differ diff --git a/GameEngine/src/main/java/org/example/Main.java b/GameEngine/src/main/java/org/example/Main.java index cb192a9..3848858 100644 --- a/GameEngine/src/main/java/org/example/Main.java +++ b/GameEngine/src/main/java/org/example/Main.java @@ -1,10 +1,13 @@ package org.example; + import org.lwjgl.*; import org.lwjgl.glfw.*; import org.lwjgl.opengl.*; import org.lwjgl.system.*; import java.nio.*; +import java.util.ArrayList; +import java.util.List; import static org.lwjgl.glfw.Callbacks.*; import static org.lwjgl.glfw.GLFW.*; @@ -14,22 +17,21 @@ public class Main { - // ウィンドウハンドル private long window; - private final ColorController colorController = new ColorController(); + private final List iGameComponents = new ArrayList<>(); + private ColorController colorController = new ColorController(); + public static void main(String[] args) { + new Main().run(); + } public void run() { System.out.println("Hello LWJGL " + Version.getVersion() + "!"); - init(); loop(); - // ウィンドウのコールバックを解放し、ウィンドウを破棄 - glfwFreeCallbacks(window); + glfwFreeCallbacks(window);// ウィンドウのコールバックを解放し、ウィンドウを破棄 glfwDestroyWindow(window); - - // GLFWを終了し、エラーコールバックを解放 - glfwTerminate(); + glfwTerminate(); // GLFWを終了し、エラーコールバックを解放 glfwSetErrorCallback(null).free(); } @@ -55,9 +57,6 @@ glfwSetKeyCallback(window, (window, key, scancode, action, mods) -> { if ( key == GLFW_KEY_ESCAPE && action == GLFW_RELEASE ) glfwSetWindowShouldClose(window, true); // レンダリングループでこれを検出します - if (action == GLFW_PRESS || action == GLFW_REPEAT) { - colorController.handleInput(key); // キー入力に応じて色を変更 - } }); // スレッドスタックを取得し、新しいフレームをプッシュします @@ -79,33 +78,38 @@ ); } // スタックフレームは自動的にポップされます - // OpenGLコンテキストを現在のスレッドに設定 - glfwMakeContextCurrent(window); - // 垂直同期を有効化 - glfwSwapInterval(1); + glfwMakeContextCurrent(window); // OpenGLコンテキストを現在のスレッドに設定 + glfwSwapInterval(1); // 垂直同期を有効化 + glfwShowWindow(window); // ウィンドウを表示 - // ウィンドウを表示 - glfwShowWindow(window); + //--------------------------------------------------------------- + KeyInput.init(window); + iGameComponents.add(colorController); + + //GameComponentのinit処理 + for (IGameComponent gameComponents : iGameComponents) { + gameComponents.init(); + } + //--------------------------------------------------------------- } private void loop() { GL.createCapabilities(); - // レンダリングループ while (!glfwWindowShouldClose(window)) { - // 現在の色でクリア + //--------------------------------------------------------------- + //GameComponentのupdate処理 + for (IGameComponent gameComponents : iGameComponents) { + gameComponents.update(); + } + //--------------------------------------------------------------- + glClearColor(colorController.getRed(), colorController.getGreen(), colorController.getBlue(), 0.0f); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // フレームバッファをクリア - glfwSwapBuffers(window); // カラーバッファを交換 - glfwPollEvents(); // ウィンドウイベントをポーリング } } - public static void main(String[] args) { - new Main().run(); - } - } \ No newline at end of file