diff --git a/GameEngine/resources/RemoveButton.png b/GameEngine/resources/RemoveButton.png index eea4f45..99da289 100644 --- a/GameEngine/resources/RemoveButton.png +++ b/GameEngine/resources/RemoveButton.png Binary files differ diff --git a/GameEngine/resources/empty.png b/GameEngine/resources/empty.png new file mode 100644 index 0000000..d4b75de --- /dev/null +++ b/GameEngine/resources/empty.png Binary files differ diff --git a/GameEngine/src/main/java/gameEngine/ResourceManager.java b/GameEngine/src/main/java/gameEngine/ResourceManager.java new file mode 100644 index 0000000..5825b6a --- /dev/null +++ b/GameEngine/src/main/java/gameEngine/ResourceManager.java @@ -0,0 +1,45 @@ +package gameEngine; + +import java.util.ArrayList; +import java.util.List; + +public class ResourceManager { + private final List paths = new ArrayList<>(); + //0番はEmpty用pathのため、削除、上書きは不可能 + + public List getPathList(){ + return paths; + } + + //追加 + public int addPath(String path) { + paths.add(path); + return paths.size() - 1; + } + + //上書き + public boolean overwritePath(int id, String newPath) { + if (id > 0 && id < paths.size() && newPath != null) { + paths.set(id, newPath); + return true; + } + return false; + } + + //削除 + public boolean removePath(int id) { + if (id > 0 && id < paths.size()) { + paths.set(id, null); + return true; + } + return false; + } + + //取得 + public String getPath(int id) { + if (id >= 0 && id < paths.size()) { + return paths.get(id); + } + return null; + } +} diff --git a/GameEngine/src/main/java/gameEngine/entites/EditorEntity.java b/GameEngine/src/main/java/gameEngine/entites/EditorEntity.java index 3e022de..001a579 100644 --- a/GameEngine/src/main/java/gameEngine/entites/EditorEntity.java +++ b/GameEngine/src/main/java/gameEngine/entites/EditorEntity.java @@ -1,6 +1,8 @@ package gameEngine.entites; +import gameEngine.entites.editorComponents.ComponentView; import gameEngine.entites.editorComponents.EditorComponent; +import gameEngine.entites.editorComponents.PortView; import java.util.ArrayList; import java.util.List; diff --git a/GameEngine/src/main/java/gameEngine/entites/editorComponents/ComponentView.java b/GameEngine/src/main/java/gameEngine/entites/editorComponents/ComponentView.java index b6e5974..c27f3be 100644 --- a/GameEngine/src/main/java/gameEngine/entites/editorComponents/ComponentView.java +++ b/GameEngine/src/main/java/gameEngine/entites/editorComponents/ComponentView.java @@ -1,5 +1,6 @@ package gameEngine.entites.editorComponents; +import gameEngine.ResourceManager; import gameEngine.entites.EditorEntity; import gameEngine.views.Sprite; import org.joml.Vector3f; @@ -9,6 +10,11 @@ public EditorEntity.Connectiontype connectionType; private final PortView portview; + //Meshのみ 分離を検討 + public int meshId = 0; + public Sprite meshSprite; + ResourceManager resourceManager; + public ComponentView(EditorEntity parent, EditorEntity.Connectiontype connectionType){ this.parent = parent; this.sprite = new Sprite("GameEngine/resources/ComponentView.png"); @@ -17,6 +23,12 @@ this.connectionType = connectionType; } + public ComponentView(EditorEntity parent, EditorEntity.Connectiontype connectionType, ResourceManager resourceManager){ + this(parent, connectionType); + this.resourceManager = resourceManager; + meshSprite = new Sprite(resourceManager.getPath(meshId)); + } + @Override public void init(){ sprite.update(); @@ -29,6 +41,14 @@ sprite.setRotation(parent.transform.rotation); sprite.setScale(parent.transform.scale); sprite.update(); + + if(meshSprite != null){ + meshSprite.setPosition(new Vector3f(parent.transform.position.x, parent.transform.position.y+30, parent.transform.position.z)); + meshSprite.setRotation(parent.transform.rotation); + meshSprite.setScale(parent.transform.scale); + meshSprite.update(); + } + 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(); @@ -49,4 +69,8 @@ public EditorComponent copy() { return this; } + + public String getSpritePath(){ + return resourceManager.getPath(meshId); + } } diff --git a/GameEngine/src/main/java/gameEngine/entites/editorComponents/Connection.java b/GameEngine/src/main/java/gameEngine/entites/editorComponents/Connection.java index 855a704..4c144fa 100644 --- a/GameEngine/src/main/java/gameEngine/entites/editorComponents/Connection.java +++ b/GameEngine/src/main/java/gameEngine/entites/editorComponents/Connection.java @@ -26,7 +26,7 @@ lineRenderer.render(); Vector3f buttonPosition = lineRenderer.calculatePosition(posA, posB); - removeButtonSprite.setPosition(buttonPosition.x, buttonPosition.y - 8); + removeButtonSprite.setPosition(buttonPosition.x, buttonPosition.y); removeButtonSprite.setScale(1,1,1); removeButtonSprite.update(); } diff --git a/GameEngine/src/main/java/gameEngine/entites/editorComponents/EntityView.java b/GameEngine/src/main/java/gameEngine/entites/editorComponents/EntityView.java index 99b2173..85de626 100644 --- a/GameEngine/src/main/java/gameEngine/entites/editorComponents/EntityView.java +++ b/GameEngine/src/main/java/gameEngine/entites/editorComponents/EntityView.java @@ -4,6 +4,9 @@ import gameEngine.views.Sprite; import org.joml.Vector3f; +import java.util.ArrayList; +import java.util.List; + public class EntityView extends Draggable{ private Sprite sprite; @@ -56,4 +59,21 @@ public PortView getPortView() { return portviewA; } + + public List getConnectedComponentViews() { + List connectedComponentViews = new ArrayList<>(); + + for (PortView connectedPort : portviewA.getConnectedPorts()) { + EditorEntity parentEntity = connectedPort.getParent(); + + if (parentEntity != null) { + for (EditorComponent component : parentEntity.editorComponents) { + if (component instanceof ComponentView) { + connectedComponentViews.add((ComponentView) component); + } + } + } + } + return connectedComponentViews; + } } diff --git a/GameEngine/src/main/java/gameEngine/entites/editorComponents/PortView.java b/GameEngine/src/main/java/gameEngine/entites/editorComponents/PortView.java index 50a72a7..f5c9757 100644 --- a/GameEngine/src/main/java/gameEngine/entites/editorComponents/PortView.java +++ b/GameEngine/src/main/java/gameEngine/entites/editorComponents/PortView.java @@ -99,4 +99,8 @@ connectedPorts.remove(portView); } + public List getConnectedPorts(){ + return connectedPorts; + } + } \ No newline at end of file diff --git a/GameEngine/src/main/java/gameEngine/scenes/EditorScene.java b/GameEngine/src/main/java/gameEngine/scenes/EditorScene.java index 17de05b..06f71ef 100644 --- a/GameEngine/src/main/java/gameEngine/scenes/EditorScene.java +++ b/GameEngine/src/main/java/gameEngine/scenes/EditorScene.java @@ -2,6 +2,7 @@ import gameEngine.ConnectionManager; import gameEngine.GameEditor; +import gameEngine.ResourceManager; import gameEngine.entites.EditorEntity; import gameEngine.entites.Entity; import gameEngine.entites.editorComponents.ComponentView; @@ -21,12 +22,15 @@ public HashMap editorEntities = new HashMap<>(); private EditorEntity selectedEntity = null; public ConnectionManager connectionManager = new ConnectionManager(); + public ResourceManager resourceManager = new ResourceManager(); public EditorScene(float windowWidth, float windowHeight){ System.out.println("Active Editor scene"); gameEditor = new GameEditor(this, windowWidth, windowHeight); gameEditor.setScene(this); glClearColor(1, 1, 1, 0); + resourceManager.addPath("GameEngine/resources/empty.png"); + System.out.println(resourceManager.getPathList()); } @Override @@ -78,7 +82,7 @@ private void addMeshComponentView(){ EditorEntity object = createEditorEntity(); object.transform.setPosition((float) Window.get().width / 2 ,(float) Window.get().height /2, 0); - object.addEditorComponent(new ComponentView(object, EditorEntity.Connectiontype.Mesh)); + object.addEditorComponent(new ComponentView(object, EditorEntity.Connectiontype.Mesh, resourceManager)); object.addEditorComponent(new EditorText(object, "Mesh", 14)); object.getEditorComponent(EditorText.class).setLocalPosition(new Vector3f(10,2,0)); } diff --git a/GameEngine/src/main/java/gameEngine/scenes/GameScene.java b/GameEngine/src/main/java/gameEngine/scenes/GameScene.java index 099b0e5..13c5d25 100644 --- a/GameEngine/src/main/java/gameEngine/scenes/GameScene.java +++ b/GameEngine/src/main/java/gameEngine/scenes/GameScene.java @@ -3,6 +3,7 @@ import gameEngine.entites.EditorEntity; import gameEngine.entites.Entity; import gameEngine.entites.GameObject; +import gameEngine.entites.editorComponents.ComponentView; import gameEngine.entites.editorComponents.EntityView; import gameEngine.entites.gameComponents.*; @@ -44,7 +45,13 @@ for(EditorEntity.Connectiontype connectionType: editorEntity.ComponentConnections) { if(connectionType == EditorEntity.Connectiontype.Mesh){ - object.addComponent(new Mesh(object, Mesh.MeshType.SPRITE, "GameEngine/resources/0.png")); + //接続しているComponentView + for(ComponentView componentView: editorEntity.getEditorComponent(EntityView.class).getConnectedComponentViews()){ + if(componentView.meshSprite != null) { + object.addComponent(new Mesh(object, Mesh.MeshType.SPRITE, componentView.getSpritePath())); + break; + } + } } if(connectionType == EditorEntity.Connectiontype.MoveImage){ object.addComponent(new MoveImage(object)); diff --git a/GameEngine/src/main/java/gameEngine/views/LineRenderer.java b/GameEngine/src/main/java/gameEngine/views/LineRenderer.java index d84f323..a7ab4d2 100644 --- a/GameEngine/src/main/java/gameEngine/views/LineRenderer.java +++ b/GameEngine/src/main/java/gameEngine/views/LineRenderer.java @@ -16,7 +16,7 @@ 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.setPosition(linePosition.x + 11, linePosition.y + 11); lineSprite.setRotation(new Vector3f(0, 0, angle)); lineSprite.setScale(new Vector3f(lineLength, thickness, 1)); lineSprite.update();