diff --git a/GameEngine/src/main/java/gameEngine/entites/Camera.java b/GameEngine/src/main/java/gameEngine/entites/Camera.java index b6314bd..b2e920b 100644 --- a/GameEngine/src/main/java/gameEngine/entites/Camera.java +++ b/GameEngine/src/main/java/gameEngine/entites/Camera.java @@ -1,5 +1,7 @@ package gameEngine.entites; +import org.joml.Vector3f; + public class Camera extends Entity{ public enum ProjectionType{ @@ -12,6 +14,17 @@ public Camera(String id, ProjectionType projection){ super(id); this.projection = projection; + this.position = new Vector3f(0, 0, 0); // 初期位置を原点に設定 + } + + private Vector3f position; + + public Vector3f getPosition() { + return position; + } + + public void move(float x, float y, float z) { + position.add(x, y, z); } } diff --git a/GameEngine/src/main/java/gameEngine/scenes/EditorScene.java b/GameEngine/src/main/java/gameEngine/scenes/EditorScene.java index f5e2de0..6304827 100644 --- a/GameEngine/src/main/java/gameEngine/scenes/EditorScene.java +++ b/GameEngine/src/main/java/gameEngine/scenes/EditorScene.java @@ -3,6 +3,8 @@ import gameEngine.ConnectionManager; import gameEngine.GameEditor; import gameEngine.ResourceManager; +import gameEngine.Time; +import gameEngine.entites.Camera; import gameEngine.entites.EditorEntity; import gameEngine.entites.Entity; import gameEngine.entites.editorComponents.ComponentView; @@ -10,11 +12,13 @@ import gameEngine.entites.editorComponents.EditorText; import gameEngine.entites.editorComponents.EntityView; import gameEngine.geometry.Transform; +import gameEngine.input.Input; import gameEngine.views.Window; import org.joml.Vector3f; import java.util.HashMap; +import static org.lwjgl.glfw.GLFW.*; import static org.lwjgl.opengl.GL11.glClearColor; public class EditorScene extends Scene { @@ -25,11 +29,13 @@ public ConnectionManager connectionManager = new ConnectionManager(); public ResourceManager resourceManager = new ResourceManager(); private EditorEntity clickedEntity = null; + private Camera editorCamera; public EditorScene(float windowWidth, float windowHeight){ System.out.println("Active Editor scene"); gameEditor = new GameEditor(this, windowWidth, windowHeight); gameEditor.setScene(this); + this.editorCamera = new Camera("001", Camera.ProjectionType.PERSPECTIVE); glClearColor(1, 1, 1, 0); resourceManager.addPath(Window.resourcePath + "empty.png"); resourceManager.addPath(Window.resourcePath + "enemy1.png"); @@ -39,12 +45,14 @@ @Override public void update(float dt) { + handleCameraMovement(); + updateDraggable(); changeScene(1, dt); //Gameシーンへの以降処理 connectionManager.update(); for (EditorEntity editorEntity : editorEntities.values()) { - editorEntity.updateComponents(); + editorEntity.updateComponents(); } gameEditor.update(); } @@ -103,6 +111,39 @@ object.getEditorComponent(EditorText.class).setLocalPosition(new Vector3f(10,2,0)); } + ///---------------------------------------------------------------- + /// Editorのカメラ + ///---------------------------------------------------------------- + + + + private void handleCameraMovement() { + Vector3f velocity = new Vector3f(0, 0, 0); + float speed = 200.0f; + + if (Input.GetKey(GLFW_KEY_UP)) { + velocity.y -= speed * Time.deltaTime; + } + if (Input.GetKey(GLFW_KEY_DOWN)) { + velocity.y += speed * Time.deltaTime; + } + if (Input.GetKey(GLFW_KEY_LEFT)) { + velocity.x -= speed * Time.deltaTime; + } + if (Input.GetKey(GLFW_KEY_RIGHT)) { + velocity.x += speed * Time.deltaTime; + } + + editorCamera.move(velocity.x, velocity.y, velocity.z); + for (EditorEntity editorEntity : editorEntities.values()) { + // 速度ベクトルを基にエンティティを移動 + editorEntity.transform.setPosition( + editorEntity.transform.position.x - velocity.x, + editorEntity.transform.position.y - velocity.y, + editorEntity.transform.position.z - velocity.z + ); + } + } ///---------------------------------------------------------------- /// 選択、ドラッグ処理