diff --git a/GameEngine/src/main/java/gameEngine/entites/gameComponents/ComponentView.java b/GameEngine/src/main/java/gameEngine/entites/gameComponents/ComponentView.java index 53d3e32..e488105 100644 --- a/GameEngine/src/main/java/gameEngine/entites/gameComponents/ComponentView.java +++ b/GameEngine/src/main/java/gameEngine/entites/gameComponents/ComponentView.java @@ -1,14 +1,12 @@ package gameEngine.entites.gameComponents; import gameEngine.entites.Entity; -import gameEngine.views.ConnectionLine; import gameEngine.views.Sprite; import org.joml.Vector3f; public class ComponentView extends Draggable{ private Sprite sprite; private PortView portviewA; - private PortView connectedEntity; public ComponentView(Entity entity){ this.parent = entity; @@ -31,6 +29,7 @@ sprite.update(); Vector3f pos = new Vector3f(parent.transform.position.x+82,parent.transform.position.y+12,parent.transform.position.z); portviewA.update(pos, parent.transform.rotation, parent.transform.scale); + portviewA.handleDragging("ComponentPort"); } @Override @@ -39,7 +38,7 @@ } @Override - protected void updatePosition(float mouseX, float mouseY) { + protected void draggingAction(float mouseX, float mouseY) { sprite.setPosition(mouseX - sprite.getDisplayedWidth() / 2, mouseY - sprite.getDisplayedHeight() / 2); } diff --git a/GameEngine/src/main/java/gameEngine/entites/gameComponents/Connection.java b/GameEngine/src/main/java/gameEngine/entites/gameComponents/Connection.java new file mode 100644 index 0000000..2d4b47c --- /dev/null +++ b/GameEngine/src/main/java/gameEngine/entites/gameComponents/Connection.java @@ -0,0 +1,48 @@ +package gameEngine.entites.gameComponents; + +import gameEngine.views.Color; +import gameEngine.views.Sprite; +import org.joml.Vector3f; + +public class Connection { + private PortView inPort; + private PortView outPort; + private Sprite lineSprite; + + public Connection(PortView inPort, PortView outPort) { + this.inPort = inPort; + this.outPort = outPort; + this.lineSprite = new Sprite("GameEngine/resources/EditorFrame.png"); + } + + public void render() { + Vector3f posA = inPort.getPosition(); + Vector3f posB = outPort.getPosition(); + + Vector3f linePosition = calculatePosition(posA, posB); + float lineLength = calculateDistance(posA, posB); + float angle = calculateAngle(posA, posB); + + lineSprite.setPosition(linePosition.x, linePosition.y); + lineSprite.setRotation(new Vector3f(0, 0, angle)); // z軸の回転を設定 + lineSprite.setScale(new Vector3f(lineLength, 1, 1)); // 長さをスケールで調整 + + lineSprite.update(); + } + + private Vector3f calculatePosition(Vector3f posA, Vector3f posB) { + return new Vector3f((posA.x + posB.x) / 2, (posA.y + posB.y) / 2, 0); + } + + private float calculateDistance(Vector3f posA, Vector3f posB) { + return (float) Math.sqrt(Math.pow(posB.x - posA.x, 2) + Math.pow(posB.y - posA.y, 2)); + } + + private float calculateAngle(Vector3f posA, Vector3f posB) { + return (float) Math.toDegrees(Math.atan2(posB.y - posA.y, posB.x - posA.x)); + } + + public boolean isClicked(float mouseX, float mouseY) { + return lineSprite.isMouseOver(mouseX, mouseY); + } +} diff --git a/GameEngine/src/main/java/gameEngine/entites/gameComponents/Draggable.java b/GameEngine/src/main/java/gameEngine/entites/gameComponents/Draggable.java index eec6c1d..fa88f40 100644 --- a/GameEngine/src/main/java/gameEngine/entites/gameComponents/Draggable.java +++ b/GameEngine/src/main/java/gameEngine/entites/gameComponents/Draggable.java @@ -31,7 +31,7 @@ } if (isDragging && Input.GetMouseButton(0)) { - updatePosition(mouseX, mouseY); // ドラッグ中は位置を更新 + draggingAction(mouseX, mouseY); // ドラッグ中の処理 } if (Input.GetMouseButtonUp(0)) { @@ -41,5 +41,5 @@ } protected abstract boolean isMouseOver(float mouseX, float mouseY); - protected abstract void updatePosition(float mouseX, float mouseY); + protected abstract void draggingAction(float mouseX, float mouseY); } diff --git a/GameEngine/src/main/java/gameEngine/entites/gameComponents/EntityView.java b/GameEngine/src/main/java/gameEngine/entites/gameComponents/EntityView.java index 6d01c35..43f6489 100644 --- a/GameEngine/src/main/java/gameEngine/entites/gameComponents/EntityView.java +++ b/GameEngine/src/main/java/gameEngine/entites/gameComponents/EntityView.java @@ -37,6 +37,7 @@ sprite.update(); Vector3f pos = new Vector3f(parent.transform.position.x-15,parent.transform.position.y+10,parent.transform.position.z); portviewA.update(pos, parent.transform.rotation, parent.transform.scale); + portviewA.handleDragging("EntityPort"); pos = new Vector3f(parent.transform.position.x-15,parent.transform.position.y+40,parent.transform.position.z); portviewB.update(pos, parent.transform.rotation, parent.transform.scale); } @@ -47,7 +48,7 @@ } @Override - protected void updatePosition(float mouseX, float mouseY) { + protected void draggingAction(float mouseX, float mouseY) { sprite.setPosition(mouseX - sprite.getDisplayedWidth() / 2, mouseY - sprite.getDisplayedHeight() / 2); } diff --git a/GameEngine/src/main/java/gameEngine/entites/gameComponents/Mesh.java b/GameEngine/src/main/java/gameEngine/entites/gameComponents/Mesh.java index 93f1c67..68b3490 100644 --- a/GameEngine/src/main/java/gameEngine/entites/gameComponents/Mesh.java +++ b/GameEngine/src/main/java/gameEngine/entites/gameComponents/Mesh.java @@ -61,7 +61,7 @@ } @Override - protected void updatePosition(float mouseX, float mouseY) { + protected void draggingAction(float mouseX, float mouseY) { sprite.setPosition(mouseX - sprite.getDisplayedWidth() / 2, mouseY - sprite.getDisplayedHeight() / 2); } diff --git a/GameEngine/src/main/java/gameEngine/entites/gameComponents/PortView.java b/GameEngine/src/main/java/gameEngine/entites/gameComponents/PortView.java index b3e4bb6..5951740 100644 --- a/GameEngine/src/main/java/gameEngine/entites/gameComponents/PortView.java +++ b/GameEngine/src/main/java/gameEngine/entites/gameComponents/PortView.java @@ -1,19 +1,21 @@ package gameEngine.entites.gameComponents; import gameEngine.views.Sprite; +import gameEngine.input.Input; +import gameEngine.input.MouseInput; import org.joml.Vector3f; public class PortView { private Sprite sprite; + private Vector3f position = new Vector3f(0,0,0); public PortView(boolean componentPort){ if(componentPort){ this.sprite = new Sprite("GameEngine/resources/PortA.png"); - sprite.updateSpriteDimensions(); - }else{ + } else { this.sprite = new Sprite("GameEngine/resources/PortB.png"); - sprite.updateSpriteDimensions(); } + sprite.updateSpriteDimensions(); } public void update(Vector3f pos, Vector3f rot, Vector3f scale){ @@ -21,6 +23,31 @@ sprite.setRotation(rot); sprite.setScale(scale); sprite.update(); + position.set(pos); } -} + public void handleDragging(String portName) { + float mouseX = MouseInput.getX(); + float mouseY = MouseInput.getY(); + + if (Input.GetMouseButtonDown(0) && isMouseOver(mouseX, mouseY)) { + System.out.println("Press:" + portName); + } + + if (Input.GetMouseButtonUp(0) && isMouseOver(mouseX, mouseY)) { + System.out.println("Release:" + portName); + } + } + + protected boolean isMouseOver(float mouseX, float mouseY) { + float width = sprite.getDisplayedWidth(); + float height = sprite.getDisplayedHeight(); + + return mouseX >= position.x && mouseX <= position.x + width && + mouseY >= position.y && mouseY <= position.y + height; + } + + public Vector3f getPosition() { + return position; + } +} \ No newline at end of file diff --git a/GameEngine/src/main/java/gameEngine/entites/gameComponents/TextMesh.java b/GameEngine/src/main/java/gameEngine/entites/gameComponents/TextMesh.java index dae8dd9..11f4340 100644 --- a/GameEngine/src/main/java/gameEngine/entites/gameComponents/TextMesh.java +++ b/GameEngine/src/main/java/gameEngine/entites/gameComponents/TextMesh.java @@ -61,7 +61,7 @@ } @Override - protected void updatePosition(float mouseX, float mouseY) { + protected void draggingAction(float mouseX, float mouseY) { textRenderer.setPosition(mouseX, mouseY); } diff --git a/GameEngine/src/main/java/gameEngine/views/Renderer.java b/GameEngine/src/main/java/gameEngine/views/Renderer.java index ef3a9ab..cb92c9e 100644 --- a/GameEngine/src/main/java/gameEngine/views/Renderer.java +++ b/GameEngine/src/main/java/gameEngine/views/Renderer.java @@ -5,9 +5,9 @@ import static org.lwjgl.opengl.GL11.*; public abstract class Renderer { - protected Vector3f position = new Vector3f(0, 0, 0); - protected Vector3f rotation = new Vector3f(0, 0, 0); - protected Vector3f scale = new Vector3f(1, 1, 1); + public Vector3f position = new Vector3f(0, 0, 0); + public Vector3f rotation = new Vector3f(0, 0, 0); + public Vector3f scale = new Vector3f(1, 1, 1); public Color color = new Color(1f, 1f, 1f, 1f); public void setPosition(float x, float y){