diff --git a/GameEngine/resources/cameraFrameView.png b/GameEngine/resources/cameraFrameView.png new file mode 100644 index 0000000..aef4e14 --- /dev/null +++ b/GameEngine/resources/cameraFrameView.png Binary files differ diff --git a/GameEngine/src/main/java/gameEngine/GameEngineModelFileGenerator.java b/GameEngine/src/main/java/gameEngine/GameEngineModelFileGenerator.java index 3c06196..e76f11a 100644 --- a/GameEngine/src/main/java/gameEngine/GameEngineModelFileGenerator.java +++ b/GameEngine/src/main/java/gameEngine/GameEngineModelFileGenerator.java @@ -126,7 +126,7 @@ JsonTerm meshTerm = new JsonTerm(); meshTerm.addMember("type", new Constant("sprite")); - meshTerm.addMember("sprite", new Constant(Window.get().resourcePath + "test.png")); + meshTerm.addMember("sprite", new Constant(Window.resourcePath + "test.png")); JsonTerm entityTerm = new JsonTerm(); entityTerm.addMember("transform", transformTerm); @@ -136,7 +136,6 @@ sceneTerm.addMember("001", entityTerm); sceneTerm.addMember("002", entityTerm); - System.out.println(sceneTerm); return sceneTerm; } @@ -149,7 +148,6 @@ fileWriter.write(model.getSourceText()); fileWriter.close(); - System.out.println("Model file saved as: " + outputFileName); } catch (IOException e) { e.printStackTrace(); } diff --git a/GameEngine/src/main/java/gameEngine/entites/editorComponents/ComponentView.java b/GameEngine/src/main/java/gameEngine/entites/editorComponents/ComponentView.java index 0898a64..0e7e8ff 100644 --- a/GameEngine/src/main/java/gameEngine/entites/editorComponents/ComponentView.java +++ b/GameEngine/src/main/java/gameEngine/entites/editorComponents/ComponentView.java @@ -5,19 +5,16 @@ import gameEngine.geometry.Transform; import gameEngine.input.Input; import gameEngine.input.MouseInput; -import gameEngine.scenes.EditorScene; import gameEngine.views.Sprite; import gameEngine.views.Text; import gameEngine.views.Window; import org.joml.Vector3f; -public class ComponentView extends Draggable{ - private final Sprite sprite; - private final Text text; +public class ComponentView extends DraggableComponent { + public EditorEntity.Connectiontype connectionType; private final PortView portview; - //Meshのみ 分離を検討 public int meshId = 0; public Sprite meshSprite; ResourceManager resourceManager; @@ -38,53 +35,29 @@ } @Override - public void init(){ - sprite.update(); - sprite.updateSpriteDimensions(); + protected void updatePortView(Vector3f actualPosition, Transform transform) { + Vector3f adjustedPos = new Vector3f(actualPosition.x + 92, actualPosition.y, actualPosition.z); + portview.update(adjustedPos, transform.rotation, transform.scale); + portview.handleDragging(); } @Override - public void update() { - Transform transform = parent.transform; - Transform screenTransform = parent.screenTransform; + protected void additionalUpdate(Vector3f actualPosition, Transform transform, Vector3f cameraPosition) { + if (meshSprite != null) { + meshSprite.setPosition(new Vector3f(actualPosition.x, actualPosition.y + 30, actualPosition.z)); + meshSprite.setRotation(transform.rotation); + meshSprite.setScale(transform.scale); + meshSprite.update(); - if(Window.get().getScene() instanceof EditorScene) { - Vector3f cameraPosition = Window.get().getScene().getCamera().getPosition(); - Vector3f actualPosition = new Vector3f(screenTransform.position).sub(cameraPosition); - - sprite.setPosition(actualPosition); - sprite.setRotation(transform.rotation); - sprite.setScale(transform.scale); - sprite.update(); - - text.setPosition(new Vector3f(0,-16,0).add(actualPosition)); - text.setRotation(transform.rotation); - text.setScale(transform.scale); - text.update(); - - Vector3f adjustedPos = new Vector3f(actualPosition.x +92, actualPosition.y, actualPosition.z); - portview.update(adjustedPos, transform.rotation, transform.scale); - portview.handleDragging(); - - if(meshSprite != null){ - meshSprite.setPosition(new Vector3f(actualPosition.x, actualPosition.y+30, actualPosition.z)); - meshSprite.setRotation(transform.rotation); - meshSprite.setScale(transform.scale); - meshSprite.update(); - - float mouseX = MouseInput.getX(); - float mouseY = MouseInput.getY(); - if (Input.GetMouseButtonDown(0) && meshSprite.isMouseOver(mouseX, mouseY)) { - changeMeshSprite(); - } + float mouseX = MouseInput.getX(); + float mouseY = MouseInput.getY(); + if (Input.GetMouseButtonDown(0) && meshSprite.isMouseOver(mouseX, mouseY)) { + changeMeshSprite(); } } - - - - } + private void changeMeshSprite() { meshId = (meshId + 1) % resourceManager.getPathList().size(); @@ -96,55 +69,6 @@ } @Override - protected boolean isMouseOver(float mouseX, float mouseY) { - return sprite.isMouseOver(mouseX, mouseY); - } - - @Override - protected void leftDragStartAction(float mouseX, float mouseY) { - Vector3f cameraPosition = Window.get().getScene().getCamera().getPosition(); - - float worldMouseX = mouseX + cameraPosition.x; - float worldMouseY = mouseY + cameraPosition.y; - - dragOffsetX = worldMouseX - parent.transform.position.x; - dragOffsetY = worldMouseY - parent.transform.position.y; - } - - @Override - protected void leftDraggingAction(float mouseX, float mouseY) { - Vector3f cameraPosition = Window.get().getScene().getCamera().getPosition(); - - float worldMouseX = mouseX + cameraPosition.x; - float worldMouseY = mouseY + cameraPosition.y; - - float targetX = worldMouseX - dragOffsetX; - float targetY = worldMouseY - dragOffsetY; - - parent.transform.setPosition( - targetX, - targetY, - parent.transform.position.z - ); - - parent.screenTransform.setPosition( - parent.transform.position.x - cameraPosition.x, - parent.transform.position.y - cameraPosition.y, - parent.transform.position.z - - cameraPosition.z - ); - } - - @Override - protected void rightDragStartAction(float mouseX, float mouseY) { - - } - - @Override - protected void rightDraggingAction(float mouseX, float mouseY) { - - } - - @Override public EditorComponent copy() { return this; } diff --git a/GameEngine/src/main/java/gameEngine/entites/editorComponents/Draggable.java b/GameEngine/src/main/java/gameEngine/entites/editorComponents/Draggable.java deleted file mode 100644 index 1095256..0000000 --- a/GameEngine/src/main/java/gameEngine/entites/editorComponents/Draggable.java +++ /dev/null @@ -1,67 +0,0 @@ -package gameEngine.entites.editorComponents; - -import gameEngine.entites.EditorEntity; -import gameEngine.input.Input; -import gameEngine.input.MouseInput; -import gameEngine.scenes.EditorScene; -import gameEngine.views.Window; - -public abstract class Draggable extends EditorComponent { - protected EditorEntity parent; - protected boolean isDraggable = true; - protected boolean isLeftDragging = false; - protected boolean isRightDragging = false; - protected float dragOffsetX = 0.0f; - protected float dragOffsetY = 0.0f; - - public void setDraggable(boolean draggable) { - this.isDraggable = draggable; - } - - public void handleDragging() { - if (!isDraggable) return; - - float mouseX = MouseInput.getX(); - float mouseY = MouseInput.getY(); - EditorScene scene = (EditorScene) Window.get().getScene(); - - if (scene.getSelectedEntity() == null) { - if (Input.GetMouseButtonDown(0) && isMouseOver(mouseX, mouseY)) { - isLeftDragging = true; - scene.setSelectedEntity(parent); - scene.setClickedEntity(parent); - leftDragStartAction(mouseX, mouseY); // ドラッグ開始時の処理 - } - - if (Input.GetMouseButtonDown(1) && isMouseOver(mouseX, mouseY)) { - isRightDragging = true; - scene.setSelectedEntity(parent); - scene.setClickedEntity(parent); - rightDragStartAction(mouseX, mouseY); - } - } - - if (isLeftDragging && Input.GetMouseButton(0)) { - leftDraggingAction(mouseX, mouseY); // ドラッグ中の処理 - } - if (isRightDragging && Input.GetMouseButton(1)) { - rightDraggingAction(mouseX, mouseY); // ドラッグ中の処理 - } - - if (Input.GetMouseButtonUp(0)) { - isLeftDragging = false; - scene.clearSelectedObject(); - } - if (Input.GetMouseButtonUp(1)) { - isRightDragging = false; - scene.clearSelectedObject(); - } - } - - protected abstract boolean isMouseOver(float mouseX, float mouseY); - protected abstract void leftDragStartAction(float mouseX, float mouseY); - protected abstract void leftDraggingAction(float mouseX, float mouseY); - protected abstract void rightDragStartAction(float mouseX, float mouseY); - protected abstract void rightDraggingAction(float mouseX, float mouseY); - -} diff --git a/GameEngine/src/main/java/gameEngine/entites/editorComponents/DraggableComponent.java b/GameEngine/src/main/java/gameEngine/entites/editorComponents/DraggableComponent.java new file mode 100644 index 0000000..4758fbe --- /dev/null +++ b/GameEngine/src/main/java/gameEngine/entites/editorComponents/DraggableComponent.java @@ -0,0 +1,171 @@ +package gameEngine.entites.editorComponents; + +import gameEngine.entites.EditorEntity; +import gameEngine.geometry.Transform; +import gameEngine.input.Input; +import gameEngine.input.MouseInput; +import gameEngine.scenes.EditorScene; +import gameEngine.views.Sprite; +import gameEngine.views.Text; +import gameEngine.views.Window; +import org.joml.Vector3f; + +import java.util.ArrayList; +import java.util.List; + +public abstract class DraggableComponent extends EditorComponent { + + protected EditorEntity parent; + protected Sprite sprite; + protected Text text; + protected boolean isDraggable = true; + protected boolean isLeftDragging = false; + protected boolean isRightDragging = false; + protected float dragOffsetX = 0.0f; + protected float dragOffsetY = 0.0f; + + @Override + public void init() { + sprite.update(); + sprite.updateSpriteDimensions(); + } + + @Override + public void update(){ + if (!(Window.get().getScene() instanceof EditorScene)) return; + + Transform transform = parent.transform; + Transform screenTransform = parent.screenTransform; + + Vector3f cameraPosition = Window.get().getScene().getCamera().getPosition(); + Vector3f actualPosition = new Vector3f(screenTransform.position).sub(cameraPosition); + + updateSprite(actualPosition, transform); + updateText(actualPosition, transform); + + //以下サブクラス固有処理 + updatePortView(actualPosition, transform); + additionalUpdate(actualPosition, transform, cameraPosition); + } + + private void updateSprite(Vector3f actualPosition, Transform transform){ + sprite.setPosition(actualPosition); + sprite.setRotation(transform.rotation); + sprite.setScale(transform.scale); + sprite.update(); + } + + private void updateText(Vector3f actualPosition, Transform transform){ + text.setPosition(new Vector3f(0,-16,0).add(actualPosition)); + text.setRotation(transform.rotation); + text.setScale(transform.scale); + text.update(); + } + + public void setDraggable(boolean draggable) { + this.isDraggable = draggable; + } + + public void handleDragging() { + if (!isDraggable) return; + + float mouseX = MouseInput.getX(); + float mouseY = MouseInput.getY(); + EditorScene scene = (EditorScene) Window.get().getScene(); + + if (scene.getSelectedEntity() == null) { + if (Input.GetMouseButtonDown(0) && isMouseOver(mouseX, mouseY)) { + isLeftDragging = true; + scene.setSelectedEntity(parent); + scene.setClickedEntity(parent); + startDragAction(mouseX, mouseY); + } + + if (Input.GetMouseButtonDown(1) && isMouseOver(mouseX, mouseY)) { + isRightDragging = true; + scene.setSelectedEntity(parent); + scene.setClickedEntity(parent); + startDragAction(mouseX, mouseY); + } + } + + if (isLeftDragging && Input.GetMouseButton(0)) { + draggingAction(mouseX, mouseY, false); + } + if (isRightDragging && Input.GetMouseButton(1)) { + draggingAction(mouseX, mouseY, true); + } + + if (Input.GetMouseButtonUp(0)) { + isLeftDragging = false; + scene.clearSelectedObject(); + } + if (Input.GetMouseButtonUp(1)) { + isRightDragging = false; + scene.clearSelectedObject(); + } + + } + + protected boolean isMouseOver(float mouseX, float mouseY) { + return sprite.isMouseOver(mouseX, mouseY); + } + + protected void startDragAction(float mouseX, float mouseY) { + Vector3f cameraPosition = Window.get().getScene().getCamera().getPosition(); + + float worldMouseX = mouseX + cameraPosition.x; + float worldMouseY = mouseY + cameraPosition.y; + + dragOffsetX = worldMouseX - parent.transform.position.x; + dragOffsetY = worldMouseY - parent.transform.position.y; + } + + protected void draggingAction(float mouseX, float mouseY, boolean isRightDrag) { + Vector3f cameraPosition = Window.get().getScene().getCamera().getPosition(); + + float worldMouseX = mouseX + cameraPosition.x; + float worldMouseY = mouseY + cameraPosition.y; + + float targetX = worldMouseX - dragOffsetX; + float targetY = worldMouseY - dragOffsetY; + + float deltaX = targetX - parent.transform.position.x; + float deltaY = targetY - parent.transform.position.y; + + parent.transform.setPosition(targetX, targetY, parent.transform.position.z); + parent.screenTransform.setPosition( + parent.transform.position.x - cameraPosition.x, + parent.transform.position.y - cameraPosition.y, + parent.transform.position.z - cameraPosition.z + ); + + if (isRightDrag) { + handleConnectedComponents(deltaX, deltaY, cameraPosition); + } + } + + + private void handleConnectedComponents(float deltaX, float deltaY, Vector3f cameraPosition) { + for (ComponentView component : getConnectedComponentViews()) { + EditorEntity componentParent = component.parent; + componentParent.transform.setPosition( + componentParent.transform.position.x + deltaX, + componentParent.transform.position.y + deltaY, + componentParent.transform.position.z + ); + + componentParent.screenTransform.setPosition( + componentParent.transform.position.x - cameraPosition.x, + componentParent.transform.position.y - cameraPosition.y, + componentParent.transform.position.z - cameraPosition.z + ); + } + } + + protected abstract void updatePortView(Vector3f actualPosition, Transform transform); + protected abstract void additionalUpdate(Vector3f actualPosition, Transform transform, Vector3f cameraPosition); + protected List getConnectedComponentViews() { + return new ArrayList<>(); + } +} diff --git a/GameEngine/src/main/java/gameEngine/entites/editorComponents/EntityView.java b/GameEngine/src/main/java/gameEngine/entites/editorComponents/EntityView.java index 8281c91..7cc9c32 100644 --- a/GameEngine/src/main/java/gameEngine/entites/editorComponents/EntityView.java +++ b/GameEngine/src/main/java/gameEngine/entites/editorComponents/EntityView.java @@ -2,7 +2,6 @@ import gameEngine.entites.EditorEntity; import gameEngine.geometry.Transform; -import gameEngine.scenes.EditorScene; import gameEngine.views.Sprite; import gameEngine.views.Text; import gameEngine.views.Window; @@ -11,10 +10,8 @@ import java.util.ArrayList; import java.util.List; -public class EntityView extends Draggable{ +public class EntityView extends DraggableComponent { - private Sprite sprite; - private Text text; private PortView portviewA; public EntityView(EditorEntity parent) { @@ -26,36 +23,14 @@ } @Override - public void init() { - sprite.update(); - sprite.updateSpriteDimensions(); + protected void updatePortView(Vector3f actualPosition, Transform transform) { + Vector3f adjustedPos = new Vector3f(actualPosition.x - 30, actualPosition.y + 8, actualPosition.z); + portviewA.update(adjustedPos, transform.rotation, transform.scale); + portviewA.handleDragging(); } @Override - public void update() { - Transform transform = parent.transform; - Transform screenTransform = parent.screenTransform; - - if(Window.get().getScene() instanceof EditorScene) { - Vector3f cameraPosition = Window.get().getScene().getCamera().getPosition(); - Vector3f actualPosition = new Vector3f(screenTransform.position).sub(cameraPosition); - - sprite.setPosition(actualPosition); - sprite.setRotation(transform.rotation); - sprite.setScale(transform.scale); - sprite.update(); - - text.setPosition(new Vector3f(0,-16,0).add(actualPosition)); - text.setRotation(transform.rotation); - text.setScale(transform.scale); - text.update(); - - Vector3f adjustedPos = new Vector3f(actualPosition.x - 30, actualPosition.y + 8, actualPosition.z); - portviewA.update(adjustedPos, transform.rotation, transform.scale); - portviewA.handleDragging(); - } - - + protected void additionalUpdate(Vector3f actualPosition, Transform transform, Vector3f cameraPosition) { } @Override @@ -63,103 +38,7 @@ return this; } - @Override - protected boolean isMouseOver(float mouseX, float mouseY) { - return sprite.isMouseOver(mouseX, mouseY); - } - - @Override - protected void leftDragStartAction(float mouseX, float mouseY) { - Vector3f cameraPosition = Window.get().getScene().getCamera().getPosition(); - - float worldMouseX = mouseX + cameraPosition.x; - float worldMouseY = mouseY + cameraPosition.y; - - dragOffsetX = worldMouseX - parent.transform.position.x; - dragOffsetY = worldMouseY - parent.transform.position.y; - } - - @Override - protected void leftDraggingAction(float mouseX, float mouseY) { - Vector3f cameraPosition = Window.get().getScene().getCamera().getPosition(); - - float worldMouseX = mouseX + cameraPosition.x; - float worldMouseY = mouseY + cameraPosition.y; - - float targetX = worldMouseX - dragOffsetX; - float targetY = worldMouseY - dragOffsetY; - - parent.transform.setPosition( - targetX, - targetY, - parent.transform.position.z - ); - - parent.screenTransform.setPosition( - parent.transform.position.x - cameraPosition.x, - parent.transform.position.y - cameraPosition.y, - parent.transform.position.z - - cameraPosition.z - ); - } - - @Override - protected void rightDragStartAction(float mouseX, float mouseY) { - Vector3f cameraPosition = Window.get().getScene().getCamera().getPosition(); - - float worldMouseX = mouseX + cameraPosition.x; - float worldMouseY = mouseY + cameraPosition.y; - - dragOffsetX = worldMouseX - parent.transform.position.x; - dragOffsetY = worldMouseY - parent.transform.position.y; - } - - @Override - protected void rightDraggingAction(float mouseX, float mouseY) { - Vector3f cameraPosition = Window.get().getScene().getCamera().getPosition(); - - float worldMouseX = mouseX + cameraPosition.x; - float worldMouseY = mouseY + cameraPosition.y; - - float targetX = worldMouseX - dragOffsetX; - float targetY = worldMouseY - dragOffsetY; - - float deltaX = targetX - parent.transform.position.x; - float deltaY = targetY - parent.transform.position.y; - - parent.transform.setPosition( - targetX, - targetY, - parent.transform.position.z - ); - - parent.screenTransform.setPosition( - parent.transform.position.x - cameraPosition.x, - parent.transform.position.y - cameraPosition.y, - parent.transform.position.z - cameraPosition.z - ); - - List connectedComponents = getConnectedComponentViews(); - for (ComponentView component : connectedComponents) { - EditorEntity componentParent = component.parent; - componentParent.transform.setPosition( - componentParent.transform.position.x + deltaX, - componentParent.transform.position.y + deltaY, - componentParent.transform.position.z - ); - - componentParent.screenTransform.setPosition( - componentParent.transform.position.x - cameraPosition.x, - componentParent.transform.position.y - cameraPosition.y, - componentParent.transform.position.z - cameraPosition.z - ); - } - } - - public PortView getPortView() { - return portviewA; - } - public List getConnectedComponentViews() { List connectedComponentViews = new ArrayList<>(); diff --git a/GameEngine/src/main/java/gameEngine/scenes/EditorScene.java b/GameEngine/src/main/java/gameEngine/scenes/EditorScene.java index 598b778..6b937d4 100644 --- a/GameEngine/src/main/java/gameEngine/scenes/EditorScene.java +++ b/GameEngine/src/main/java/gameEngine/scenes/EditorScene.java @@ -8,7 +8,7 @@ import gameEngine.entites.EditorEntity; import gameEngine.entites.Entity; import gameEngine.entites.editorComponents.ComponentView; -import gameEngine.entites.editorComponents.Draggable; +import gameEngine.entites.editorComponents.DraggableComponent; import gameEngine.entites.editorComponents.EntityView; import gameEngine.geometry.Transform; import gameEngine.input.Input; @@ -175,13 +175,13 @@ public void updateDraggable() { if (selectedEntity != null) { - if (selectedEntity.getEditorComponent(Draggable.class) != null) { - selectedEntity.getEditorComponent(Draggable.class).handleDragging(); + if (selectedEntity.getEditorComponent(DraggableComponent.class) != null) { + selectedEntity.getEditorComponent(DraggableComponent.class).handleDragging(); } } else { for (EditorEntity entity : editorEntities.values()) { - if (entity.getEditorComponent(Draggable.class) != null) { - entity.getEditorComponent(Draggable.class).handleDragging(); + if (entity.getEditorComponent(DraggableComponent.class) != null) { + entity.getEditorComponent(DraggableComponent.class).handleDragging(); } } }