diff --git a/GameEngine/src/main/java/gameEngine/entites/gameComponents/Draggable.java b/GameEngine/src/main/java/gameEngine/entites/gameComponents/Draggable.java index 367ec19..eec6c1d 100644 --- a/GameEngine/src/main/java/gameEngine/entites/gameComponents/Draggable.java +++ b/GameEngine/src/main/java/gameEngine/entites/gameComponents/Draggable.java @@ -1,5 +1,6 @@ package gameEngine.entites.gameComponents; +import gameEngine.Time; import gameEngine.entites.Entity; import gameEngine.input.Input; import gameEngine.input.MouseInput; @@ -15,28 +16,27 @@ this.isDraggable = draggable; } - protected void handleDragging() { + public void handleDragging() { if (!isDraggable) return; + float mouseX = MouseInput.getX(); float mouseY = MouseInput.getY(); Scene scene = Window.get().getScene(); - if (scene.getSelectedEntity() != null && scene.getSelectedEntity() != parent) { - return; - } - - if (Input.GetMouseButtonDown(0) && isMouseOver(mouseX, mouseY)) { - isDragging = true; - scene.setSelectedEntity(parent); + if (scene.getSelectedEntity() == null) { + if (Input.GetMouseButtonDown(0) && isMouseOver(mouseX, mouseY)) { + isDragging = true; + scene.setSelectedEntity(parent); // エンティティを選択 + } } if (isDragging && Input.GetMouseButton(0)) { - updatePosition(mouseX, mouseY); + updatePosition(mouseX, mouseY); // ドラッグ中は位置を更新 } if (Input.GetMouseButtonUp(0)) { isDragging = false; - scene.clearSelectedEntity(); // ドラッグ解除時に選択をクリア + scene.clearSelectedEntity(); // ドラッグ終了時に選択解除 } } diff --git a/GameEngine/src/main/java/gameEngine/entites/gameComponents/Mesh.java b/GameEngine/src/main/java/gameEngine/entites/gameComponents/Mesh.java index 69ad00a..e02a376 100644 --- a/GameEngine/src/main/java/gameEngine/entites/gameComponents/Mesh.java +++ b/GameEngine/src/main/java/gameEngine/entites/gameComponents/Mesh.java @@ -1,14 +1,8 @@ package gameEngine.entites.gameComponents; import gameEngine.entites.Entity; -import gameEngine.entites.GameObject; -import gameEngine.input.Input; -import gameEngine.input.MouseInput; import gameEngine.views.Color; import gameEngine.views.Sprite; -import gameEngine.views.Texture; -import gameEngine.views.Window; -import static org.lwjgl.opengl.GL11.*; public class Mesh extends Draggable { @@ -53,8 +47,6 @@ sprite.setPosition(parent.transform.position); sprite.setRotation(parent.transform.rotation); sprite.setScale(parent.transform.scale); - - handleDragging(); sprite.update(); } } diff --git a/GameEngine/src/main/java/gameEngine/entites/gameComponents/TextMesh.java b/GameEngine/src/main/java/gameEngine/entites/gameComponents/TextMesh.java index e195a42..8b4cbab 100644 --- a/GameEngine/src/main/java/gameEngine/entites/gameComponents/TextMesh.java +++ b/GameEngine/src/main/java/gameEngine/entites/gameComponents/TextMesh.java @@ -1,7 +1,6 @@ package gameEngine.entites.gameComponents; import gameEngine.entites.Entity; -import gameEngine.input.MouseInput; import gameEngine.views.*; public class TextMesh extends Draggable{ @@ -38,8 +37,6 @@ textRenderer.setPosition(parent.transform.position); textRenderer.setRotation(parent.transform.rotation); textRenderer.setScale(parent.transform.scale); - - handleDragging(); textRenderer.update(); } diff --git a/GameEngine/src/main/java/gameEngine/scenes/EditorScene.java b/GameEngine/src/main/java/gameEngine/scenes/EditorScene.java index f615f02..92785ba 100644 --- a/GameEngine/src/main/java/gameEngine/scenes/EditorScene.java +++ b/GameEngine/src/main/java/gameEngine/scenes/EditorScene.java @@ -19,6 +19,7 @@ @Override public void update(float dt) { + updateDraggable(); changeScene(1, dt); //Gameシーンへの以降処理 } diff --git a/GameEngine/src/main/java/gameEngine/scenes/Scene.java b/GameEngine/src/main/java/gameEngine/scenes/Scene.java index c621ecf..c1499c9 100644 --- a/GameEngine/src/main/java/gameEngine/scenes/Scene.java +++ b/GameEngine/src/main/java/gameEngine/scenes/Scene.java @@ -40,6 +40,27 @@ selectedEntity = null; } + public void updateDraggable() { + // 選択済みのエンティティのみドラッグ + if (selectedEntity != null) { + GameObject gameObject = (GameObject) selectedEntity; + if (gameObject == null) return; + if (gameObject.getComponent(Draggable.class) != null) { + gameObject.getComponent(Draggable.class).handleDragging(); + } + } else { + // クリックで選択 + for (Entity entity : entities.values()) { + if (entity instanceof GameObject) { + GameObject gameObject = (GameObject) entity; + if (gameObject.getComponent(Draggable.class) != null) { + gameObject.getComponent(Draggable.class).handleDragging(); + } + } + } + } + } + public Scene(){ } diff --git a/GameEngine/src/main/java/gameEngine/views/Window.java b/GameEngine/src/main/java/gameEngine/views/Window.java index caace3c..c8ee1a4 100644 --- a/GameEngine/src/main/java/gameEngine/views/Window.java +++ b/GameEngine/src/main/java/gameEngine/views/Window.java @@ -173,11 +173,9 @@ GameObject gameObject = (GameObject) entity; if(gameObject.getComponent(Mesh.class) != null){ gameObject.getComponent(Mesh.class).update(); - gameObject.getComponent(Mesh.class).setDraggable(true); } if(gameObject.getComponent(TextMesh.class) != null){ gameObject.getComponent(TextMesh.class).update(); - gameObject.getComponent(TextMesh.class).setDraggable(true); } if(gameObject.getComponent(ButtonComponent.class) != null)gameObject.getComponent(ButtonComponent.class).update(); } @@ -188,12 +186,6 @@ if (entity instanceof GameObject) { GameObject gameObject = (GameObject) entity; gameObject.updateComponents(); - if(gameObject.getComponent(Mesh.class) != null){ - gameObject.getComponent(Mesh.class).setDraggable(false); - } - if(gameObject.getComponent(TextMesh.class) != null){ - gameObject.getComponent(TextMesh.class).setDraggable(false); - } } } }