package gameEngine; import java.util.ArrayList; import java.util.List; import gameEngine.entites.EditorEntity; import gameEngine.entites.editorComponents.ComponentView; import gameEngine.entites.editorComponents.Connection; import gameEngine.entites.editorComponents.EntityView; import gameEngine.entites.editorComponents.PortView; import gameEngine.input.Input; import gameEngine.input.MouseInput; public class ConnectionManager { private final List<Connection> 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()) { if (pressedPort.isConnectedTo(port)) { System.out.println("Already connected"); } else { System.out.println("Connect!"); Connection newConnection = new Connection(pressedPort, port); connections.add(newConnection); pressedPort.addConnectedPort(port); port.addConnectedPort(pressedPort); EditorEntity portParentA = pressedPort.getParent(); EditorEntity portParentB = port.getParent(); if (portParentA.getEditorComponent(EntityView.class) != null) { portParentA.ComponentConnections.add(portParentB.getEditorComponent(ComponentView.class).connectionType); } else { portParentB.ComponentConnections.add(portParentA.getEditorComponent(ComponentView.class).connectionType); } } } pressedPort = null; } public void update() { for (Connection connection : connections) { connection.render(); if (Input.GetMouseButtonDown(0)) { float mouseX = MouseInput.getX(); float mouseY = MouseInput.getY(); if (connection.isRemoveButtonClicked(mouseX, mouseY)) { System.out.println("Connection removed"); removeConnection(connection.getPortA(), connection.getPortB()); break; } } } } public void removeConnection(PortView portA, PortView portB) { Connection toRemove = null; for (Connection connection : connections) { if ((connection.getPortA() == portA && connection.getPortB() == portB) || (connection.getPortA() == portB && connection.getPortB() == portA)) { toRemove = connection; break; } } if (toRemove != null) { connections.remove(toRemove); portA.removeConnectedPort(portB); portB.removeConnectedPort(portA); EditorEntity portParentA = portA.getParent(); EditorEntity portParentB = portB.getParent(); if (portParentA.getEditorComponent(EntityView.class) != null) { portParentA.ComponentConnections.remove(portParentB.getEditorComponent(ComponentView.class).connectionType); } else { portParentB.ComponentConnections.remove(portParentA.getEditorComponent(ComponentView.class).connectionType); } } } }