diff --git a/GameEngine/src/main/java/gameEngine/GameEditor.java b/GameEngine/src/main/java/gameEngine/GameEditor.java index c51335d..6c4bb62 100644 --- a/GameEngine/src/main/java/gameEngine/GameEditor.java +++ b/GameEngine/src/main/java/gameEngine/GameEditor.java @@ -1,8 +1,7 @@ package gameEngine; +import gameEngine.entites.Entity; import gameEngine.entites.GameObject; -import gameEngine.entites.gameComponents.ColorController; -import gameEngine.entites.gameComponents.Mesh; import gameEngine.scenes.*; import javax.swing.*; @@ -11,9 +10,6 @@ import java.awt.event.ActionListener; import java.util.Map; -import javax.swing.event.DocumentEvent; -import javax.swing.event.DocumentListener; - public class GameEditor extends JFrame { private JList objectList; @@ -50,8 +46,8 @@ public Component getListCellRendererComponent(JList list, String value, int index, boolean isSelected, boolean cellHasFocus) { JLabel label = new JLabel(); int id = Integer.parseInt(value); // 内部でIDを使用 - GameObject gameObject = gameScene.gameObjects.get(id); - label.setText(gameObject.name); // リストには名前を表示する + Entity entity = gameScene.entities.get(id); + label.setText(entity.name); // リストには名前を表示する if (isSelected) { label.setBackground(list.getSelectionBackground()); label.setForeground(list.getSelectionForeground()); @@ -152,11 +148,11 @@ String selectedIdStr = objectList.getSelectedValue(); if (selectedIdStr != null) { int selectedId = Integer.parseInt(selectedIdStr); - GameObject selectedObject = gameScene.gameObjects.get(selectedId); - if (selectedObject != null) { - // コンポーネントを追加 (例: Mesh など) - gameScene.addComponent(selectedObject); - JOptionPane.showMessageDialog(this, "Component Added to " + selectedObject.name); + Entity selectedEntity = gameScene.entities.get(selectedId); + if (selectedEntity instanceof GameObject) { + GameObject gameObject = (GameObject) selectedEntity; + gameScene.addComponent(gameObject); + JOptionPane.showMessageDialog(this, "Component Added to " + selectedEntity.name); } } } @@ -164,29 +160,29 @@ // GameObjectのリストを更新 public void updateGameObjectList(Scene gameScene) { listModel.clear(); - for (Map.Entry entry : gameScene.gameObjects.entrySet()) { - GameObject gameObject = entry.getValue(); - listModel.addElement(String.valueOf(gameObject.getId())); // IDをリストに表示(内部) - } + for (Map.Entry entry : gameScene.entities.entrySet()) { + Entity entity = entry.getValue(); + listModel.addElement(String.valueOf(entity.getId())); // IDをリストに表示 + } } // 選択されたGameObjectのプロパティをロードする private void loadSelectedGameObject() { String selectedIdStr = objectList.getSelectedValue(); if (selectedIdStr != null) { - int selectedId = Integer.parseInt(selectedIdStr); // IDとして扱う - GameObject selectedObject = gameScene.gameObjects.get(selectedId); - if (selectedObject != null) { - nameField.setText(selectedObject.name); - posXField.setText(String.valueOf(selectedObject.transform.position.x)); - posYField.setText(String.valueOf(selectedObject.transform.position.y)); - posZField.setText(String.valueOf(selectedObject.transform.position.z)); - rotXField.setText(String.valueOf(selectedObject.transform.rotation.x)); - rotYField.setText(String.valueOf(selectedObject.transform.rotation.y)); - rotZField.setText(String.valueOf(selectedObject.transform.rotation.z)); - scaleXField.setText(String.valueOf(selectedObject.transform.scale.x)); - scaleYField.setText(String.valueOf(selectedObject.transform.scale.y)); - scaleZField.setText(String.valueOf(selectedObject.transform.scale.z)); + int selectedId = Integer.parseInt(selectedIdStr); + Entity selectedEntity = gameScene.entities.get(selectedId); + if (selectedEntity != null) { + nameField.setText(selectedEntity.name); + posXField.setText(String.valueOf(selectedEntity.transform.position.x)); + posYField.setText(String.valueOf(selectedEntity.transform.position.y)); + posZField.setText(String.valueOf(selectedEntity.transform.position.z)); + rotXField.setText(String.valueOf(selectedEntity.transform.rotation.x)); + rotYField.setText(String.valueOf(selectedEntity.transform.rotation.y)); + rotZField.setText(String.valueOf(selectedEntity.transform.rotation.z)); + scaleXField.setText(String.valueOf(selectedEntity.transform.scale.x)); + scaleYField.setText(String.valueOf(selectedEntity.transform.scale.y)); + scaleZField.setText(String.valueOf(selectedEntity.transform.scale.z)); } } } @@ -203,20 +199,20 @@ String selectedIdStr = objectList.getSelectedValue(); if (selectedIdStr != null) { int selectedId = Integer.parseInt(selectedIdStr); // IDとして扱う - GameObject selectedObject = gameScene.gameObjects.get(selectedId); - if (selectedObject != null) { - selectedObject.name = nameField.getText(); - selectedObject.transform.setPosition( + Entity selectedEntity = gameScene.entities.get(selectedId); + if (selectedEntity != null) { + selectedEntity.name = nameField.getText(); + selectedEntity.transform.setPosition( Float.parseFloat(posXField.getText()), Float.parseFloat(posYField.getText()), Float.parseFloat(posZField.getText()) ); - selectedObject.transform.setRotation( + selectedEntity.transform.setRotation( Float.parseFloat(rotXField.getText()), Float.parseFloat(rotYField.getText()), Float.parseFloat(rotZField.getText()) ); - selectedObject.transform.setScale( + selectedEntity.transform.setScale( Float.parseFloat(scaleXField.getText()), Float.parseFloat(scaleYField.getText()), Float.parseFloat(scaleZField.getText()) diff --git a/GameEngine/src/main/java/gameEngine/entites/Entity.java b/GameEngine/src/main/java/gameEngine/entites/Entity.java index fd964b1..0f2b49e 100644 --- a/GameEngine/src/main/java/gameEngine/entites/Entity.java +++ b/GameEngine/src/main/java/gameEngine/entites/Entity.java @@ -1,5 +1,7 @@ package gameEngine.entites; +import gameEngine.entites.gameComponents.GameComponent; +import gameEngine.entites.gameComponents.MoveImage; import gameEngine.geometry.Transform; public class Entity { @@ -22,4 +24,5 @@ public int getId(){ return entityId; } + } diff --git a/GameEngine/src/main/java/gameEngine/entites/gameComponents/Mesh.java b/GameEngine/src/main/java/gameEngine/entites/gameComponents/Mesh.java index d2d37c1..8cf17a0 100644 --- a/GameEngine/src/main/java/gameEngine/entites/gameComponents/Mesh.java +++ b/GameEngine/src/main/java/gameEngine/entites/gameComponents/Mesh.java @@ -1,5 +1,6 @@ package gameEngine.entites.gameComponents; +import gameEngine.entites.Entity; import gameEngine.entites.GameObject; import gameEngine.views.Texture; import gameEngine.views.Window; @@ -13,12 +14,12 @@ private final MeshType type; private Texture texture; // スプライトのテクスチャを保持 - private final GameObject parent; // 親のオブジェクトを持つ + private final Entity parent; // 親のオブジェクトを持つ private int spriteWidth = 64; // スプライト幅(今後指定可能にする) private int spriteHeight = 64; // スプライト高さ(今後指定可能にする) - public Mesh(GameObject parent, MeshType type, String texturePath) { + public Mesh(Entity parent, MeshType type, String texturePath) { this.parent = parent; this.type = type; if (type == MeshType.SPRITE) { diff --git a/GameEngine/src/main/java/gameEngine/entites/gameComponents/MoveImage.java b/GameEngine/src/main/java/gameEngine/entites/gameComponents/MoveImage.java index 0ac498a..2a63f43 100644 --- a/GameEngine/src/main/java/gameEngine/entites/gameComponents/MoveImage.java +++ b/GameEngine/src/main/java/gameEngine/entites/gameComponents/MoveImage.java @@ -1,4 +1,5 @@ package gameEngine.entites.gameComponents; +import gameEngine.entites.Entity; import gameEngine.entites.GameObject; import gameEngine.input.*; @@ -7,36 +8,36 @@ public class MoveImage extends GameComponent{ - private GameObject gameObject; + private Entity entity; - public MoveImage(GameObject gameObject){ - this.gameObject = gameObject; + public MoveImage(Entity entity){ + this.entity = entity; } public void update() { if (Input.GetKey(GLFW_KEY_W)) { - float y = gameObject.transform.position.y; - gameObject.transform.setPosition(gameObject.transform.position.x, y - 1, 0); + float y = entity.transform.position.y; + entity.transform.setPosition(entity.transform.position.x, y - 1, 0); } if (Input.GetKey(GLFW_KEY_A)) { - float x = gameObject.transform.position.x; - gameObject.transform.setPosition(x - 1, gameObject.transform.position.y, 0); + float x = entity.transform.position.x; + entity.transform.setPosition(x - 1, entity.transform.position.y, 0); } if (Input.GetKey(GLFW_KEY_S)) { - float y = gameObject.transform.position.y; - gameObject.transform.setPosition(gameObject.transform.position.x, y + 1, 0); + float y = entity.transform.position.y; + entity.transform.setPosition(entity.transform.position.x, y + 1, 0); } if (Input.GetKey(GLFW_KEY_D)) { - float x = gameObject.transform.position.x; - gameObject.transform.setPosition(x + 1, gameObject.transform.position.y, 0); + float x = entity.transform.position.x; + entity.transform.setPosition(x + 1, entity.transform.position.y, 0); } if (Input.GetKey(GLFW_KEY_LEFT)) { - float rotation = gameObject.transform.rotation.z; - gameObject.transform.setRotation(0, 0, rotation - 1); // 左回転 + float rotation = entity.transform.rotation.z; + entity.transform.setRotation(0, 0, rotation - 1); // 左回転 } if (Input.GetKey(GLFW_KEY_RIGHT)) { - float rotation = gameObject.transform.rotation.z; - gameObject.transform.setRotation(0, 0, rotation + 1); // 右回転 + float rotation = entity.transform.rotation.z; + entity.transform.setRotation(0, 0, rotation + 1); // 右回転 } } } diff --git a/GameEngine/src/main/java/gameEngine/scenes/GameScene.java b/GameEngine/src/main/java/gameEngine/scenes/GameScene.java index 006c1a8..5b9551a 100644 --- a/GameEngine/src/main/java/gameEngine/scenes/GameScene.java +++ b/GameEngine/src/main/java/gameEngine/scenes/GameScene.java @@ -1,5 +1,6 @@ package gameEngine.scenes; +import gameEngine.entites.Entity; import gameEngine.entites.GameObject; import gameEngine.entites.gameComponents.ColorController; import gameEngine.entites.gameComponents.GameComponent; @@ -17,14 +18,16 @@ System.out.println("Active Game scene"); glClearColor(1, 1, 1, 0); - gameObjects.put(0, new GameObject(0)); - gameObjects.get(0).addComponent(new ColorController()); - gameObjects.get(0).setName("ColorController"); + entities.put(0, new GameObject(0)); + GameObject g0 = (GameObject) entities.get(0); + g0.addComponent(new ColorController()); + g0.setName("ColorController"); - gameObjects.put(1, new GameObject(1)); - gameObjects.get(1).addComponent(new Mesh(gameObjects.get(1), Mesh.MeshType.SPRITE, "test.png")); - gameObjects.get(1).addComponent(new MoveImage(gameObjects.get(1))); - gameObjects.get(1).setName("Player"); + entities.put(1, new GameObject(1)); + GameObject g1 = (GameObject) entities.get(1); + g1.addComponent(new Mesh(entities.get(1), Mesh.MeshType.SPRITE, "test.png")); + g1.addComponent(new MoveImage(entities.get(1))); + entities.get(1).setName("Player"); } @Override @@ -54,10 +57,11 @@ } private void createGameObject(){ - int newId = gameObjects.size(); - gameObjects.put(newId, new GameObject(newId)); - gameObjects.get(newId).addComponent(new Mesh(gameObjects.get(newId), Mesh.MeshType.SPRITE, "test.png")); - gameObjects.get(newId).setName("NewEntity" + newId); + int newId = entities.size(); + entities.put(newId, new GameObject(newId)); + GameObject newGameObject = (GameObject) entities.get(newId); + newGameObject.addComponent(new Mesh(entities.get(newId), Mesh.MeshType.SPRITE, "test.png")); + newGameObject.setName("NewEntity" + newId); } private void addComponent(){ diff --git a/GameEngine/src/main/java/gameEngine/scenes/Scene.java b/GameEngine/src/main/java/gameEngine/scenes/Scene.java index f244241..326e32f 100644 --- a/GameEngine/src/main/java/gameEngine/scenes/Scene.java +++ b/GameEngine/src/main/java/gameEngine/scenes/Scene.java @@ -1,6 +1,7 @@ package gameEngine.scenes; import gameEngine.entites.Camera; +import gameEngine.entites.Entity; import gameEngine.entites.GameObject; import java.util.HashMap; @@ -8,7 +9,7 @@ public abstract class Scene { private Camera camera; - public HashMap gameObjects = new HashMap<>(); + public HashMap entities = new HashMap<>(); public Scene(){ } @@ -17,7 +18,7 @@ public void createNewObject() { } - public void addComponent(GameObject selectedObject) { + public void addComponent(GameObject gameObject) { } } diff --git a/GameEngine/src/main/java/gameEngine/views/Window.java b/GameEngine/src/main/java/gameEngine/views/Window.java index 5ce4acb..b5cb4a1 100644 --- a/GameEngine/src/main/java/gameEngine/views/Window.java +++ b/GameEngine/src/main/java/gameEngine/views/Window.java @@ -1,6 +1,7 @@ package gameEngine.views; import gameEngine.GameEditor; import gameEngine.Time; +import gameEngine.entites.Entity; import gameEngine.entites.GameObject; import gameEngine.input.*; import gameEngine.scenes.*; @@ -34,24 +35,27 @@ gameEditor = new GameEditor(); } - public static void changeScene(int newScene){ - switch (newScene){ + public static void changeScene(int newScene) { + switch (newScene) { case 0: currentScene = new EditorScene(); - //現在のシーンのゲームコンポーネントのinit - for (GameObject obj : currentScene.gameObjects.values()) { - obj.initComponents(); + for (Entity entity : currentScene.entities.values()) { + if (entity instanceof GameObject) { + GameObject gameObject = (GameObject) entity; + gameObject.initComponents(); + } } gameEditor.updateListByScene(currentScene); break; case 1: currentScene = new GameScene(); - //現在のシーンのゲームコンポーネントのinit - for (GameObject obj : currentScene.gameObjects.values()) { - obj.initComponents(); + for (Entity entity : currentScene.entities.values()) { + if (entity instanceof GameObject) { + GameObject gameObject = (GameObject) entity; + gameObject.initComponents(); + } } gameEditor.updateListByScene(currentScene); - break; default: assert false : "Unknown Scene [" + newScene + "]"; @@ -141,8 +145,11 @@ currentScene.update((float)dt); //現在のシーンのゲームコンポーネントのUpdate - for (GameObject obj : currentScene.gameObjects.values()) { - obj.updateComponents(); + for (Entity entity : currentScene.entities.values()) { + if (entity instanceof GameObject) { + GameObject gameObject = (GameObject) entity; + gameObject.updateComponents(); + } } }