diff --git a/GameEngine/resources/InPort.png b/GameEngine/resources/InPort.png index 976b98a..03b7081 100644 --- a/GameEngine/resources/InPort.png +++ b/GameEngine/resources/InPort.png Binary files differ diff --git a/GameEngine/resources/OutPort.png b/GameEngine/resources/OutPort.png index 2cb5dc6..ec8bc03 100644 --- a/GameEngine/resources/OutPort.png +++ b/GameEngine/resources/OutPort.png Binary files differ diff --git a/GameEngine/resources/RemoveButton.png b/GameEngine/resources/RemoveButton.png new file mode 100644 index 0000000..c1af199 --- /dev/null +++ b/GameEngine/resources/RemoveButton.png Binary files differ diff --git a/GameEngine/src/main/java/gameEngine/ConnectionManager.java b/GameEngine/src/main/java/gameEngine/ConnectionManager.java index 18afb37..e99b6fc 100644 --- a/GameEngine/src/main/java/gameEngine/ConnectionManager.java +++ b/GameEngine/src/main/java/gameEngine/ConnectionManager.java @@ -17,10 +17,9 @@ } public void handlePortRelease(PortView port) { - if (pressedPort != null && pressedPort != port && pressedPort.getPortType() != port.getPortType()) { if (pressedPort.isConnectedTo(port)) { - System.out.println("already connected"); + System.out.println("Already connected"); } else { System.out.println("Connect!"); Connection newConnection = new Connection(pressedPort, port); @@ -48,7 +47,7 @@ float mouseX = MouseInput.getX(); float mouseY = MouseInput.getY(); - if (connection.isClicked(mouseX, mouseY)) { + if (connection.isRemoveButtonClicked(mouseX, mouseY)) { System.out.println("Connection removed"); removeConnection(connection.getPortA(), connection.getPortB()); break; diff --git a/GameEngine/src/main/java/gameEngine/entites/gameComponents/ComponentView.java b/GameEngine/src/main/java/gameEngine/entites/gameComponents/ComponentView.java index a35f7a4..5b574ee 100644 --- a/GameEngine/src/main/java/gameEngine/entites/gameComponents/ComponentView.java +++ b/GameEngine/src/main/java/gameEngine/entites/gameComponents/ComponentView.java @@ -29,7 +29,7 @@ sprite.setRotation(parent.transform.rotation); sprite.setScale(parent.transform.scale); sprite.update(); - Vector3f pos = new Vector3f(parent.transform.position.x+82,parent.transform.position.y+4,parent.transform.position.z); + Vector3f pos = new Vector3f(parent.transform.position.x+92,parent.transform.position.y,parent.transform.position.z); portview.update(pos, parent.transform.rotation, parent.transform.scale); portview.handleDragging(); } diff --git a/GameEngine/src/main/java/gameEngine/entites/gameComponents/Connection.java b/GameEngine/src/main/java/gameEngine/entites/gameComponents/Connection.java index 511e943..c696a75 100644 --- a/GameEngine/src/main/java/gameEngine/entites/gameComponents/Connection.java +++ b/GameEngine/src/main/java/gameEngine/entites/gameComponents/Connection.java @@ -1,51 +1,37 @@ package gameEngine.entites.gameComponents; +import gameEngine.views.LineRenderer; import gameEngine.views.Sprite; import org.joml.Vector3f; public class Connection { private final PortView portA; private final PortView portB; - private final Sprite lineSprite; + private final LineRenderer lineRenderer; + private final Sprite removeButtonSprite; public Connection(PortView inPort, PortView outPort) { this.portA = inPort; this.portB = outPort; - this.lineSprite = new Sprite("GameEngine/resources/Line.png"); + this.lineRenderer = new LineRenderer("GameEngine/resources/Line.png"); + this.removeButtonSprite = new Sprite("GameEngine/resources/RemoveButton.png"); } public void render() { Vector3f posA = portA.getPosition(); Vector3f posB = portB.getPosition(); - Vector3f linePosition = calculatePosition(posA, posB); - float lineLength = calculateDistance(posA, posB); - float angle = calculateAngle(posA, posB); + lineRenderer.updateLine(portA.getPosition(), portB.getPosition(), 3); + lineRenderer.render(); - 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+8); - lineSprite.setRotation(new Vector3f(0, 0, angle)); // z軸の回転を設定 - lineSprite.setScale(new Vector3f(lineLength, 3, 1)); // 長さをスケールで調整 - - lineSprite.update(); + Vector3f buttonPosition = lineRenderer.calculatePosition(posA, posB); + removeButtonSprite.setPosition(buttonPosition.x, buttonPosition.y - 8); + removeButtonSprite.setScale(1,1,1); + removeButtonSprite.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); + public boolean isRemoveButtonClicked(float mouseX, float mouseY) { + return removeButtonSprite.isMouseOver(mouseX, mouseY); } public PortView getPortA() { diff --git a/GameEngine/src/main/java/gameEngine/entites/gameComponents/EntityView.java b/GameEngine/src/main/java/gameEngine/entites/gameComponents/EntityView.java index 0291386..0d8e8d5 100644 --- a/GameEngine/src/main/java/gameEngine/entites/gameComponents/EntityView.java +++ b/GameEngine/src/main/java/gameEngine/entites/gameComponents/EntityView.java @@ -36,7 +36,7 @@ sprite.setRotation(parent.transform.rotation); sprite.setScale(parent.transform.scale); sprite.update(); - Vector3f pos = new Vector3f(parent.transform.position.x-15,parent.transform.position.y+10,parent.transform.position.z); + Vector3f pos = new Vector3f(parent.transform.position.x-30,parent.transform.position.y+8,parent.transform.position.z); portviewA.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); diff --git a/GameEngine/src/main/java/gameEngine/entites/gameComponents/PortView.java b/GameEngine/src/main/java/gameEngine/entites/gameComponents/PortView.java index 747a4b2..d361fa9 100644 --- a/GameEngine/src/main/java/gameEngine/entites/gameComponents/PortView.java +++ b/GameEngine/src/main/java/gameEngine/entites/gameComponents/PortView.java @@ -4,6 +4,7 @@ import gameEngine.entites.Entity; import gameEngine.entites.GameObject; import gameEngine.scenes.EditorScene; +import gameEngine.views.LineRenderer; import gameEngine.views.Sprite; import gameEngine.input.Input; import gameEngine.input.MouseInput; @@ -20,8 +21,11 @@ private Vector3f position = new Vector3f(0,0,0); private GameObject parent; private List connectedPorts = new ArrayList<>(); + private LineRenderer lineRenderer; + private boolean dragging = false; public PortView(PortType portType, GameObject parent){ + this.lineRenderer = new LineRenderer("GameEngine/resources/Line.png"); this.parent = parent; if(portType == PortType.IN){ this.sprite = new Sprite("GameEngine/resources/InPort.png"); @@ -48,12 +52,21 @@ if (Input.GetMouseButtonDown(0) && isMouseOver(mouseX, mouseY)) { EditorScene editorScene = (EditorScene) Window.get().getScene(); editorScene.connectionManager.handlePortPress(this); + dragging = true; } - if (Input.GetMouseButtonUp(0) && isMouseOver(mouseX, mouseY)) { - EditorScene editorScene = (EditorScene) Window.get().getScene(); - editorScene.connectionManager.handlePortRelease(this); + if (Input.GetMouseButton(0) && dragging) { + lineRenderer.updateLine(sprite.position, new Vector3f(mouseX, mouseY, 0), 3); } + + if (Input.GetMouseButtonUp(0)) { + dragging = false; + if(isMouseOver(mouseX, mouseY)){ + EditorScene editorScene = (EditorScene) Window.get().getScene(); + editorScene.connectionManager.handlePortRelease(this); + } + } + } protected boolean isMouseOver(float mouseX, float mouseY) { diff --git a/GameEngine/src/main/java/gameEngine/scenes/EditorScene.java b/GameEngine/src/main/java/gameEngine/scenes/EditorScene.java index 8b1006d..404f095 100644 --- a/GameEngine/src/main/java/gameEngine/scenes/EditorScene.java +++ b/GameEngine/src/main/java/gameEngine/scenes/EditorScene.java @@ -81,7 +81,7 @@ GameObject object = createGameObject(); object.transform.setPosition((float) Window.get().width / 2 ,(float) Window.get().height /2, 0); object.addComponent(new ComponentView(object, GameObject.Connectiontype.Mesh)); - object.addComponent(new TextMesh(object, "Mesh", 20)); + object.addComponent(new TextMesh(object, "Mesh", 14)); object.getComponent(TextMesh.class).setLocalPosition(new Vector3f(10,2,0)); } @@ -93,7 +93,7 @@ GameObject object = createGameObject(); object.transform.setPosition((float) Window.get().width / 2 ,(float) Window.get().height /2, 0); object.addComponent(new ComponentView(object, GameObject.Connectiontype.MoveImage)); - object.addComponent(new TextMesh(object, "MoveImage", 20)); + object.addComponent(new TextMesh(object, "MoveImage", 14)); object.getComponent(TextMesh.class).setLocalPosition(new Vector3f(10,2,0)); } diff --git a/GameEngine/src/main/java/gameEngine/views/LineRenderer.java b/GameEngine/src/main/java/gameEngine/views/LineRenderer.java new file mode 100644 index 0000000..d84f323 --- /dev/null +++ b/GameEngine/src/main/java/gameEngine/views/LineRenderer.java @@ -0,0 +1,40 @@ +package gameEngine.views; +import org.joml.Vector3f; + +public class LineRenderer { + private final Sprite lineSprite; + + public LineRenderer(String spritePath) { + this.lineSprite = new Sprite(spritePath); + } + + public void updateLine(Vector3f start, Vector3f end, float thickness) { + Vector3f linePosition = calculatePosition(start, end); + float lineLength = calculateDistance(start, end); + float angle = calculateAngle(start, end); + + 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 + 8); + lineSprite.setRotation(new Vector3f(0, 0, angle)); + lineSprite.setScale(new Vector3f(lineLength, thickness, 1)); + lineSprite.update(); + } + + public void render() { + lineSprite.render(); + } + + public 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)); + } +}