diff --git a/GameEngine/resources/InPort.png b/GameEngine/resources/InPort.png new file mode 100644 index 0000000..976b98a --- /dev/null +++ b/GameEngine/resources/InPort.png Binary files differ diff --git a/GameEngine/resources/Line.png b/GameEngine/resources/Line.png new file mode 100644 index 0000000..0279819 --- /dev/null +++ b/GameEngine/resources/Line.png Binary files differ diff --git a/GameEngine/resources/OutPort.png b/GameEngine/resources/OutPort.png new file mode 100644 index 0000000..2cb5dc6 --- /dev/null +++ b/GameEngine/resources/OutPort.png Binary files differ diff --git a/GameEngine/resources/PortA.png b/GameEngine/resources/PortA.png deleted file mode 100644 index 9dc7e6d..0000000 --- a/GameEngine/resources/PortA.png +++ /dev/null Binary files differ diff --git a/GameEngine/src/main/java/gameEngine/ConnectionManager.java b/GameEngine/src/main/java/gameEngine/ConnectionManager.java new file mode 100644 index 0000000..66fabec --- /dev/null +++ b/GameEngine/src/main/java/gameEngine/ConnectionManager.java @@ -0,0 +1,45 @@ +package gameEngine; + +import java.util.ArrayList; +import java.util.List; + +import gameEngine.entites.gameComponents.Connection; +import gameEngine.entites.gameComponents.PortView; +import gameEngine.input.Input; +import gameEngine.input.MouseInput; + +import javax.sound.sampled.Port; + +public class ConnectionManager { + private List connections = new ArrayList<>(); + private PortView pressedPort; + + public void handlePortPress(PortView port) { + pressedPort = port; + } + + public void handlePortRelease(PortView port) { + if (pressedPort != null && pressedPort != port && pressedPort.getPortType() != port.getPortType()) { + System.out.println("Connect!"); + Connection newConnection = new Connection(pressedPort, port); + connections.add(newConnection); + } + pressedPort = null; + } + + public void update() { + for (Connection connection : connections) { + connection.render(); + } + + if (Input.GetMouseButtonDown(0)) { + float mouseX = MouseInput.getX(); + float mouseY = MouseInput.getY(); + + for (Connection connection : connections) { + if(connection.isClicked(mouseX, mouseY)) System.out.println("Clicked"); + else System.out.println("o"); + } + } + } +} \ No newline at end of file diff --git a/GameEngine/src/main/java/gameEngine/entites/gameComponents/ComponentView.java b/GameEngine/src/main/java/gameEngine/entites/gameComponents/ComponentView.java index e488105..154b859 100644 --- a/GameEngine/src/main/java/gameEngine/entites/gameComponents/ComponentView.java +++ b/GameEngine/src/main/java/gameEngine/entites/gameComponents/ComponentView.java @@ -12,7 +12,7 @@ this.parent = entity; this.sprite = new Sprite("GameEngine/resources/ComponentView.png"); sprite.updateSpriteDimensions(); - portviewA = new PortView(true); + portviewA = new PortView(PortView.PortType.OUT); } @Override @@ -29,7 +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"); + portviewA.handleDragging(); } @Override diff --git a/GameEngine/src/main/java/gameEngine/entites/gameComponents/Connection.java b/GameEngine/src/main/java/gameEngine/entites/gameComponents/Connection.java index 2d4b47c..6929785 100644 --- a/GameEngine/src/main/java/gameEngine/entites/gameComponents/Connection.java +++ b/GameEngine/src/main/java/gameEngine/entites/gameComponents/Connection.java @@ -12,7 +12,7 @@ public Connection(PortView inPort, PortView outPort) { this.inPort = inPort; this.outPort = outPort; - this.lineSprite = new Sprite("GameEngine/resources/EditorFrame.png"); + this.lineSprite = new Sprite("GameEngine/resources/Line.png"); } public void render() { @@ -23,9 +23,12 @@ float lineLength = calculateDistance(posA, posB); float angle = calculateAngle(posA, posB); - lineSprite.setPosition(linePosition.x, linePosition.y); + linePosition.x -= (float) (lineLength / 2 * Math.cos(Math.toRadians(angle))); + linePosition.y -= (float) (lineLength / 2 * Math.sin(Math.toRadians(angle))); + + lineSprite.setPosition(linePosition.x+8, linePosition.y+16); lineSprite.setRotation(new Vector3f(0, 0, angle)); // z軸の回転を設定 - lineSprite.setScale(new Vector3f(lineLength, 1, 1)); // 長さをスケールで調整 + lineSprite.setScale(new Vector3f(lineLength, 3, 1)); // 長さをスケールで調整 lineSprite.update(); } diff --git a/GameEngine/src/main/java/gameEngine/entites/gameComponents/EntityView.java b/GameEngine/src/main/java/gameEngine/entites/gameComponents/EntityView.java index 43f6489..1590390 100644 --- a/GameEngine/src/main/java/gameEngine/entites/gameComponents/EntityView.java +++ b/GameEngine/src/main/java/gameEngine/entites/gameComponents/EntityView.java @@ -14,8 +14,8 @@ this.parent = entity; this.sprite = new Sprite("GameEngine/resources/EntityView.png"); sprite.updateSpriteDimensions(); - portviewA = new PortView(true); - portviewB = new PortView(false); + portviewA = new PortView(PortView.PortType.IN); + portviewB = new PortView(PortView.PortType.IN); } @Override @@ -37,9 +37,9 @@ 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); + portviewA.handleDragging(); +// 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); } @Override diff --git a/GameEngine/src/main/java/gameEngine/entites/gameComponents/PortView.java b/GameEngine/src/main/java/gameEngine/entites/gameComponents/PortView.java index 5951740..0d70849 100644 --- a/GameEngine/src/main/java/gameEngine/entites/gameComponents/PortView.java +++ b/GameEngine/src/main/java/gameEngine/entites/gameComponents/PortView.java @@ -1,20 +1,27 @@ package gameEngine.entites.gameComponents; +import gameEngine.ConnectionManager; import gameEngine.views.Sprite; import gameEngine.input.Input; import gameEngine.input.MouseInput; +import gameEngine.views.Window; import org.joml.Vector3f; public class PortView { + enum PortType {OUT, IN} + private PortType portType; + private ConnectionManager connectionManager; 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"); - } else { - this.sprite = new Sprite("GameEngine/resources/PortB.png"); + public PortView(PortType portType){ + connectionManager = Window.get().connectionManager; + if(portType == PortType.IN){ + this.sprite = new Sprite("GameEngine/resources/InPort.png"); + } else if(portType == PortType.OUT){ + this.sprite = new Sprite("GameEngine/resources/OutPort.png"); } + this.portType = portType; sprite.updateSpriteDimensions(); } @@ -26,16 +33,16 @@ position.set(pos); } - public void handleDragging(String portName) { + public void handleDragging() { float mouseX = MouseInput.getX(); float mouseY = MouseInput.getY(); if (Input.GetMouseButtonDown(0) && isMouseOver(mouseX, mouseY)) { - System.out.println("Press:" + portName); + connectionManager.handlePortPress(this); } if (Input.GetMouseButtonUp(0) && isMouseOver(mouseX, mouseY)) { - System.out.println("Release:" + portName); + connectionManager.handlePortRelease(this); } } @@ -50,4 +57,6 @@ public Vector3f getPosition() { return position; } + + public PortType getPortType(){ return portType; } } \ No newline at end of file diff --git a/GameEngine/src/main/java/gameEngine/views/ConnectionLine.java b/GameEngine/src/main/java/gameEngine/views/ConnectionLine.java deleted file mode 100644 index 3488c8d..0000000 --- a/GameEngine/src/main/java/gameEngine/views/ConnectionLine.java +++ /dev/null @@ -1,14 +0,0 @@ -package gameEngine.views; - -import org.joml.Vector3f; -import static org.lwjgl.opengl.GL11.*; - -public class ConnectionLine { - public static void drawLine(Vector3f start, Vector3f end) { - glBegin(GL_LINES); - glVertex3f(start.x, start.y, start.z); - glVertex3f(end.x, end.y, end.z); - glEnd(); - } - -} diff --git a/GameEngine/src/main/java/gameEngine/views/Window.java b/GameEngine/src/main/java/gameEngine/views/Window.java index 48b0353..57aa0ce 100644 --- a/GameEngine/src/main/java/gameEngine/views/Window.java +++ b/GameEngine/src/main/java/gameEngine/views/Window.java @@ -1,4 +1,5 @@ package gameEngine.views; +import gameEngine.ConnectionManager; import gameEngine.GameEditor; import gameEngine.SwingGameEditor; import gameEngine.Time; @@ -31,6 +32,7 @@ private long glfwWindow; private static SwingGameEditor swingGameEditor; private static GameEditor gameEditor; + public ConnectionManager connectionManager = new ConnectionManager(); private static HashMap sceneEntities; @@ -166,6 +168,8 @@ currentScene.update(dt); currentScene.processTasks(); + connectionManager.update(); + if(currentScene instanceof EditorScene) { for (Entity entity : currentScene.entities.values()) { if (entity instanceof GameObject) {