diff --git a/GameEngine/src/main/java/gameEngine/GameEditor.java b/GameEngine/src/main/java/gameEngine/GameEditor.java index f759374..fb79bb4 100644 --- a/GameEngine/src/main/java/gameEngine/GameEditor.java +++ b/GameEngine/src/main/java/gameEngine/GameEditor.java @@ -4,11 +4,17 @@ import gameEngine.views.*; import gameEngine.scenes.Scene; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + public class GameEditor { private EditorScene scene; private float windowWidth, windowHeight; private final String frameImagePath = Window.resourcePath + "EditorFrame.png"; + private List updatableviews = new ArrayList<>(); + private Sprite[] EditorFrameSprite = new Sprite[4]; private Button playButton; @@ -23,8 +29,6 @@ private Button createEntityViewButton; private Text createEntityViewButtonText; - private InputField inputField; - public GameEditor(Scene scene, float windowWidth, float windowHeight) { this.scene = (EditorScene) scene; this.windowWidth = windowWidth; @@ -47,9 +51,44 @@ createEntityViewButton = new Button(240, 33, 3.2f, 0.5f); createEntityViewButtonText = new Text(240 +5.25f, 30.4f, "Add Entity", 24); - inputField = new InputField(400,400,160,40,"InputField",32); - setButtonListeners(); + setInspector(); + } + + private void registerUpdatable(IUpdatable... components) { + Collections.addAll(updatableviews, components); + } + + private void setInspector() { + String[] labels = {"Position", "Rotation", "Scale"}; + String[] axes = {"x", "y", "z"}; + float startX = 900; + float startY = 40; + float fieldWidth = 70; + float fieldHeight = 22; + float spacingX = 100; + float spacingY = 40; + float labelOffsetX = -100; + float labelOffsetY = 5; + + for (int i = 0; i < labels.length; i++) { + float labelX = startX + labelOffsetX; + float labelY = startY + i * spacingY + labelOffsetY; + + Text labelText = new Text(labelX, labelY-6, labels[i] + ":", 18); + updatableviews.add(labelText); + + for (int j = 0; j < axes.length; j++) { + float fieldX = startX + j * spacingX; + float fieldY = startY + i * spacingY; + + Text axisText = new Text(fieldX - 20, fieldY, axes[j] + ":", 18); + InputField field = new InputField(fieldX, fieldY, fieldWidth, fieldHeight, "0", 18); + + updatableviews.add(axisText); + updatableviews.add(field); + } + } } private void setButtonListeners() { @@ -64,6 +103,11 @@ createEntityViewButton.clearListeners(); createEntityViewButton.addListener(scene::addNewEntity); + + registerUpdatable(playButton, playButtonText, + createMeshComponentViewButton, createMeshComponentViewButtonText, + createMoveImageComponentViewButton, createMoveImageComponentViewButtonText, + createEntityViewButton, createEntityViewButtonText); } public void setScene(Scene newScene) { @@ -73,15 +117,10 @@ public void update() { for(Sprite editorFrameSprites : EditorFrameSprite) editorFrameSprites.update(); - playButton.update(); - playButtonText.update(); - createMeshComponentViewButton.update(); - createMeshComponentViewButtonText.update(); - createMoveImageComponentViewButton.update(); - createMoveImageComponentViewButtonText.update(); - createEntityViewButton.update(); - createEntityViewButtonText.update(); - inputField.update(); + + for (IUpdatable updatable : updatableviews) { + updatable.update(); + } } private void createFrame(){ @@ -89,5 +128,9 @@ EditorFrameSprite[1] = new Sprite(frameImagePath, 0, 0, 0.25f, 20); EditorFrameSprite[2] = new Sprite(frameImagePath, windowWidth-16, 0, 0.25f, 20); EditorFrameSprite[3] = new Sprite(frameImagePath, 0, windowHeight-16, 20, 0.5f); + + for (Sprite sprite : EditorFrameSprite) { + updatableviews.add(sprite); + } } } diff --git a/GameEngine/src/main/java/gameEngine/input/Input.java b/GameEngine/src/main/java/gameEngine/input/Input.java index 0f47699..fb50e61 100644 --- a/GameEngine/src/main/java/gameEngine/input/Input.java +++ b/GameEngine/src/main/java/gameEngine/input/Input.java @@ -1,5 +1,7 @@ package gameEngine.input; +import java.util.List; + public class Input { // キーが押された瞬間 @@ -31,4 +33,8 @@ public static boolean GetMouseButtonUp(int mouseButton) { return MouseInput.isMouseButtonUp(mouseButton); } + + public static List getPressedKeys() { + return KeyInput.getPressedKeys(); + } } diff --git a/GameEngine/src/main/java/gameEngine/input/KeyInput.java b/GameEngine/src/main/java/gameEngine/input/KeyInput.java index 9da6c25..6db6041 100644 --- a/GameEngine/src/main/java/gameEngine/input/KeyInput.java +++ b/GameEngine/src/main/java/gameEngine/input/KeyInput.java @@ -1,5 +1,8 @@ package gameEngine.input; +import java.util.ArrayList; +import java.util.List; + import static org.lwjgl.glfw.GLFW.*; public class KeyInput { @@ -65,4 +68,14 @@ } return false; } + + public static List getPressedKeys() { + List pressedKeys = new ArrayList<>(); + for (int i = 0; i < get().keyPressed.length; i++) { + if (get().keyPressed[i]) { + pressedKeys.add(i); // 押されているキーコードを追加 + } + } + return pressedKeys; + } } \ No newline at end of file diff --git a/GameEngine/src/main/java/gameEngine/views/Button.java b/GameEngine/src/main/java/gameEngine/views/Button.java index e6ae52c..4efe82d 100644 --- a/GameEngine/src/main/java/gameEngine/views/Button.java +++ b/GameEngine/src/main/java/gameEngine/views/Button.java @@ -6,7 +6,7 @@ import java.util.ArrayList; import java.util.List; -public class Button { +public class Button implements IUpdatable { private Sprite buttonSprite; private List onClickListeners = new ArrayList<>(); private boolean isPressed = false; diff --git a/GameEngine/src/main/java/gameEngine/views/IUpdatable.java b/GameEngine/src/main/java/gameEngine/views/IUpdatable.java new file mode 100644 index 0000000..dd94e01 --- /dev/null +++ b/GameEngine/src/main/java/gameEngine/views/IUpdatable.java @@ -0,0 +1,5 @@ +package gameEngine.views; + +public interface IUpdatable { + void update(); +} diff --git a/GameEngine/src/main/java/gameEngine/views/InputField.java b/GameEngine/src/main/java/gameEngine/views/InputField.java index dde292b..6324e31 100644 --- a/GameEngine/src/main/java/gameEngine/views/InputField.java +++ b/GameEngine/src/main/java/gameEngine/views/InputField.java @@ -6,7 +6,7 @@ import gameEngine.input.Input; import static org.lwjgl.glfw.GLFW.*; -public class InputField { +public class InputField implements IUpdatable { private Text displayText; private boolean isFocused; @@ -36,7 +36,7 @@ this.backgroundSprite = new Sprite(Window.resourcePath + "EditorFrame.png", posX, posY, width, height); this.backgroundSprite.setSize(width, height); - displayText = new Text(posX, posY, placeholder, textSize); + displayText = new Text(posX+2, posY, placeholder, textSize); defaultColor = new Color(1, 1, 1, 1); // 通常時の色 focusColor = new Color(0.7f, 0.7f, 0.7f, 1); // フォーカス中の色 displayText.setColor(defaultColor); @@ -111,6 +111,23 @@ } } + // 記号入力(上手くいったもののみ) + if (isShiftPressed) { + if (Input.GetKeyDown(GLFW_KEY_MINUS)) appendChar('='); + else if (Input.GetKeyDown(GLFW_KEY_SEMICOLON)) appendChar('+'); + else if (Input.GetKeyDown(GLFW_KEY_COMMA)) appendChar('<'); + else if (Input.GetKeyDown(GLFW_KEY_PERIOD)) appendChar('>'); + else if (Input.GetKeyDown(GLFW_KEY_SLASH)) appendChar('?'); + + } else { + if (Input.GetKeyDown(GLFW_KEY_MINUS)) appendChar('-'); + else if (Input.GetKeyDown(GLFW_KEY_SEMICOLON)) appendChar(';'); + else if (Input.GetKeyDown(GLFW_KEY_COMMA)) appendChar(','); + else if (Input.GetKeyDown(GLFW_KEY_PERIOD)) appendChar('.'); + else if (Input.GetKeyDown(GLFW_KEY_SLASH)) appendChar('/'); + } + + // Deleteキーでカーソル右側の文字を削除 if (Input.GetKeyDown(GLFW_KEY_DELETE) && cursorPosition < inputText.length()) { inputText = inputText.substring(0, cursorPosition) + inputText.substring(cursorPosition + 1); @@ -126,6 +143,11 @@ } } + private void appendChar(char c) { + inputText = inputText.substring(0, cursorPosition) + c + inputText.substring(cursorPosition); + cursorPosition++; + displayText.setText(inputText.isEmpty() ? placeholder : inputText); + } private void updateCursorBlink(float deltaTime) { cursorBlinkTimer += deltaTime; diff --git a/GameEngine/src/main/java/gameEngine/views/Sprite.java b/GameEngine/src/main/java/gameEngine/views/Sprite.java index 8ee8482..cec6a7b 100644 --- a/GameEngine/src/main/java/gameEngine/views/Sprite.java +++ b/GameEngine/src/main/java/gameEngine/views/Sprite.java @@ -4,7 +4,7 @@ import static org.lwjgl.opengl.GL11.*; -public class Sprite extends Renderer { +public class Sprite extends Renderer implements IUpdatable { private Texture texture; diff --git a/GameEngine/src/main/java/gameEngine/views/Text.java b/GameEngine/src/main/java/gameEngine/views/Text.java index 8b6902f..3df4d5d 100644 --- a/GameEngine/src/main/java/gameEngine/views/Text.java +++ b/GameEngine/src/main/java/gameEngine/views/Text.java @@ -7,7 +7,7 @@ import static java.awt.Font.SANS_SERIF; import static org.lwjgl.opengl.GL11.*; -public class Text extends Renderer { +public class Text extends Renderer implements IUpdatable { private Texture fontTexture; private Map fontGlyphs;