diff --git a/AlgebraicDataflowArchitectureModel/AlgebraicDataflowArchitectureModel.iml b/AlgebraicDataflowArchitectureModel/AlgebraicDataflowArchitectureModel.iml index 7d7eb33..d122387 100644 --- a/AlgebraicDataflowArchitectureModel/AlgebraicDataflowArchitectureModel.iml +++ b/AlgebraicDataflowArchitectureModel/AlgebraicDataflowArchitectureModel.iml @@ -32,5 +32,6 @@ + \ No newline at end of file diff --git a/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/gameEngine/CameraPositionReceiver.java b/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/gameEngine/CameraPositionReceiver.java index 75f465e..47103ea 100644 --- a/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/gameEngine/CameraPositionReceiver.java +++ b/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/gameEngine/CameraPositionReceiver.java @@ -1,11 +1,11 @@ package simulator.interfaces.gameEngine; +import gameEngine.entites.Camera; import models.algebra.Expression; import models.algebra.Term; import simulator.Event; import simulator.SystemState; import simulator.interfaces.INativeReceiver; -import simulator.interfaces.gameEngine.GameEnginePresenter.Camera; public class CameraPositionReceiver implements INativeReceiver { private Camera camera; diff --git a/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/gameEngine/CameraProjectionReceiver.java b/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/gameEngine/CameraProjectionReceiver.java index f71c139..1ca2538 100644 --- a/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/gameEngine/CameraProjectionReceiver.java +++ b/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/gameEngine/CameraProjectionReceiver.java @@ -1,11 +1,11 @@ package simulator.interfaces.gameEngine; +import gameEngine.entites.Camera; import models.algebra.Expression; import models.algebra.Term; import simulator.Event; import simulator.SystemState; import simulator.interfaces.INativeReceiver; -import simulator.interfaces.gameEngine.GameEnginePresenter.Camera; public class CameraProjectionReceiver implements INativeReceiver { private Camera camera; diff --git a/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/gameEngine/CameraRotationReceiver.java b/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/gameEngine/CameraRotationReceiver.java index 0aad202..8e368a8 100644 --- a/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/gameEngine/CameraRotationReceiver.java +++ b/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/gameEngine/CameraRotationReceiver.java @@ -1,11 +1,11 @@ package simulator.interfaces.gameEngine; +import gameEngine.entites.Camera; import models.algebra.Expression; import models.algebra.Term; import simulator.Event; import simulator.SystemState; import simulator.interfaces.INativeReceiver; -import simulator.interfaces.gameEngine.GameEnginePresenter.Camera; public class CameraRotationReceiver implements INativeReceiver { private Camera camera; diff --git a/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/gameEngine/CameraScaleReceiver.java b/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/gameEngine/CameraScaleReceiver.java index 95c7013..1447071 100644 --- a/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/gameEngine/CameraScaleReceiver.java +++ b/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/gameEngine/CameraScaleReceiver.java @@ -1,11 +1,11 @@ package simulator.interfaces.gameEngine; +import gameEngine.entites.Camera; import models.algebra.Expression; import models.algebra.Term; import simulator.Event; import simulator.SystemState; import simulator.interfaces.INativeReceiver; -import simulator.interfaces.gameEngine.GameEnginePresenter.Camera; public class CameraScaleReceiver implements INativeReceiver { private Camera camera; diff --git a/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/gameEngine/EntityPositionReceiver.java b/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/gameEngine/EntityPositionReceiver.java index 513050d..aa19a4d 100644 --- a/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/gameEngine/EntityPositionReceiver.java +++ b/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/gameEngine/EntityPositionReceiver.java @@ -1,11 +1,11 @@ package simulator.interfaces.gameEngine; +import gameEngine.entites.Entity; import models.algebra.Expression; import models.algebra.Term; import simulator.Event; import simulator.SystemState; import simulator.interfaces.INativeReceiver; -import simulator.interfaces.gameEngine.GameEnginePresenter.Entity; public class EntityPositionReceiver implements INativeReceiver { private Entity entity; diff --git a/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/gameEngine/EntityRotationReceiver.java b/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/gameEngine/EntityRotationReceiver.java index 5a8d2b2..8185b49 100644 --- a/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/gameEngine/EntityRotationReceiver.java +++ b/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/gameEngine/EntityRotationReceiver.java @@ -1,11 +1,11 @@ package simulator.interfaces.gameEngine; +import gameEngine.entites.Entity; import models.algebra.Expression; import models.algebra.Term; import simulator.Event; import simulator.SystemState; import simulator.interfaces.INativeReceiver; -import simulator.interfaces.gameEngine.GameEnginePresenter.Entity; public class EntityRotationReceiver implements INativeReceiver { private Entity entity; diff --git a/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/gameEngine/EntityScaleReceiver.java b/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/gameEngine/EntityScaleReceiver.java index 31786dd..ebbbcf4 100644 --- a/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/gameEngine/EntityScaleReceiver.java +++ b/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/gameEngine/EntityScaleReceiver.java @@ -5,7 +5,7 @@ import simulator.Event; import simulator.SystemState; import simulator.interfaces.INativeReceiver; -import simulator.interfaces.gameEngine.GameEnginePresenter.Entity; +import gameEngine.entites.Entity; public class EntityScaleReceiver implements INativeReceiver { private Entity entity; diff --git a/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/gameEngine/GameEnginePresenter.java b/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/gameEngine/GameEnginePresenter.java index af4fc10..2353549 100644 --- a/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/gameEngine/GameEnginePresenter.java +++ b/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/gameEngine/GameEnginePresenter.java @@ -6,6 +6,9 @@ import java.util.Map; import java.util.Set; +import gameEngine.entites.*; +import gameEngine.entites.gameComponents.*; +import gameEngine.scenes.Scene; import models.algebra.Expression; import models.algebra.Term; import models.dataConstraintModel.JsonTerm; @@ -133,8 +136,8 @@ for (String oldEid: oldEidSet) { Resource resource = widToResource.remove(oldEid); if (resource != null) { - simulator.removeNativeReceiver(channel, resource); - } + + } simulator.removeNativeReceiver(channel, resource); } } @@ -164,7 +167,7 @@ JsonTerm position = (JsonTerm) positionExp; JsonTerm rotation = (JsonTerm) rotationExp; JsonTerm scale = (JsonTerm) scaleExp; - GameObject gameObj = new GameObject(); + GameObject gameObj = new GameObject("Sample");//新しいIDが必要あり gameObj.transform.setPosition(Float.parseFloat(position.get("x").toString()), Float.parseFloat(position.get("y").toString()), Float.parseFloat(position.get("z").toString())); @@ -226,71 +229,4 @@ } } } - - public static class Entity { - public Transform transform = new Transform(); - } - - public static class Camera extends Entity { - } - - public static class GameObject extends Entity { - private final List gameComponents = new ArrayList<>(); - - public void addComponent(GameComponent component) { - this.gameComponents.add(component); - } - } - - public static abstract class GameComponent { - } - - public static class Mesh extends GameComponent { - public enum MeshType { - SPRITE, CUBE - } - private MeshType type; - private GameObject parent; - - public Mesh(GameObject parent, MeshType type, String texturePath) { - this.parent = parent; - } - - public void setTexturePath(String texturePath) { - } - } - - public static class Transform { - public void setPosition(float x, float y, float z) { - } - public void setRotation(float x, float y, float z) { - } - public void setScale(float x, float y, float z) { - } - } - - public static class Scene { - private Camera camera; - private HashMap entities = new HashMap<>(); - - public Camera getCamera() { - return camera; - } - - public void setCamera(Camera camera) { - this.camera = camera; - } - - public Entity getEntity(String eid) { - return entities.get(eid); - } - - public void addEntity(String eid, Entity entity) { - entities.put(eid, entity); - } - - public void removeEntity(String eid) { - entities.remove(eid); - } - } } diff --git a/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/gameEngine/SpriteReceiver.java b/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/gameEngine/SpriteReceiver.java index b2c2241..2f50106 100644 --- a/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/gameEngine/SpriteReceiver.java +++ b/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/gameEngine/SpriteReceiver.java @@ -1,12 +1,11 @@ package simulator.interfaces.gameEngine; +import gameEngine.entites.gameComponents.Mesh; import models.algebra.Expression; import models.algebra.Term; import simulator.Event; import simulator.SystemState; import simulator.interfaces.INativeReceiver; -import simulator.interfaces.gameEngine.GameEnginePresenter.Entity; -import simulator.interfaces.gameEngine.GameEnginePresenter.Mesh; public class SpriteReceiver implements INativeReceiver { private Mesh mesh; diff --git a/GameEngine/src/main/java/gameEngine/GameEditor.java b/GameEngine/src/main/java/gameEngine/GameEditor.java index 3e98fa8..0b114da 100644 --- a/GameEngine/src/main/java/gameEngine/GameEditor.java +++ b/GameEngine/src/main/java/gameEngine/GameEditor.java @@ -44,8 +44,7 @@ @Override public Component getListCellRendererComponent(JList list, String value, int index, boolean isSelected, boolean cellHasFocus) { JLabel label = new JLabel(); - int id = Integer.parseInt(value); // 内部でIDを使用 - Entity entity = gameScene.entities.get(id); + Entity entity = gameScene.getEntity(value); label.setText(entity.name); // リストには名前を表示する if (isSelected) { label.setBackground(list.getSelectionBackground()); @@ -153,11 +152,10 @@ private void addComponentToGameObject() { String selectedIdStr = objectList.getSelectedValue(); if (selectedIdStr != null) { - int selectedId = Integer.parseInt(selectedIdStr); - Entity selectedEntity = gameScene.entities.get(selectedId); + Entity selectedEntity = gameScene.getEntity(selectedIdStr); if (selectedEntity instanceof GameObject) { GameObject gameObject = (GameObject) selectedEntity; - gameScene.addComponent(gameObject); // コンポーネントの追加処理 + gameScene.addComponentObjectSelect(gameObject); // コンポーネントの追加処理 updateComponentList(gameObject); // コンポーネントリストの更新 updateGameObjectList(gameScene); // オブジェクトリストの更新 JOptionPane.showMessageDialog(this, "Component Added to " + selectedEntity.name); @@ -168,13 +166,12 @@ private void removeComponentFromGameObject() { String selectedIdStr = objectList.getSelectedValue(); if (selectedIdStr != null) { - int selectedId = Integer.parseInt(selectedIdStr); - Entity selectedEntity = gameScene.entities.get(selectedId); + Entity selectedEntity = gameScene.getEntity(selectedIdStr); if (selectedEntity instanceof GameObject) { GameObject gameObject = (GameObject) selectedEntity; GameComponent selectedComponent = componentList.getSelectedValue(); // GameComponentとして取得 if (selectedComponent != null) { - gameScene.removeComponent(gameObject, selectedComponent); // GameComponentオブジェクトを渡す + gameScene.removeComponentObjectSelect(gameObject, selectedComponent); // GameComponentオブジェクトを渡す updateComponentList(gameObject); // コンポーネントリストの更新 updateGameObjectList(gameScene); // オブジェクトリストの更新 JOptionPane.showMessageDialog(this, "Component Removed from " + selectedEntity.name); @@ -185,9 +182,9 @@ private void updateGameObjectList(Scene gameScene) { listModel.clear(); // リストの初期化 - for (Map.Entry entry : gameScene.entities.entrySet()) { + for (Map.Entry entry : gameScene.entities.entrySet()) { Entity entity = entry.getValue(); - listModel.addElement(String.valueOf(entity.getId())); // IDをリストに追加 + listModel.addElement(entity.getId()); // そのままIDをリストに追加 } objectList.repaint(); // リストを再描画 objectList.revalidate(); // リストを再構築 @@ -213,8 +210,7 @@ private void loadSelectedGameObject() { String selectedIdStr = objectList.getSelectedValue(); if (selectedIdStr != null) { - int selectedId = Integer.parseInt(selectedIdStr); - Entity selectedEntity = gameScene.entities.get(selectedId); + Entity selectedEntity = gameScene.getEntity(selectedIdStr); // IDのまま取得 if (selectedEntity != null) { loadObjectProperties(selectedEntity); @@ -237,8 +233,7 @@ private void applyGameObjectChanges() { String selectedIdStr = objectList.getSelectedValue(); if (selectedIdStr != null) { - int selectedId = Integer.parseInt(selectedIdStr); - Entity selectedEntity = gameScene.entities.get(selectedId); + Entity selectedEntity = gameScene.getEntity(selectedIdStr); // IDのまま取得 if (selectedEntity != null) { selectedEntity.name = nameField.getText(); selectedEntity.transform.setPosition( diff --git a/GameEngine/src/main/java/gameEngine/entites/Camera.java b/GameEngine/src/main/java/gameEngine/entites/Camera.java index 50aa07e..b6314bd 100644 --- a/GameEngine/src/main/java/gameEngine/entites/Camera.java +++ b/GameEngine/src/main/java/gameEngine/entites/Camera.java @@ -9,7 +9,7 @@ private final ProjectionType projection; - public Camera(int id, ProjectionType projection){ + public Camera(String id, ProjectionType projection){ super(id); this.projection = projection; } diff --git a/GameEngine/src/main/java/gameEngine/entites/Entity.java b/GameEngine/src/main/java/gameEngine/entites/Entity.java index 2d08f68..7eacb1d 100644 --- a/GameEngine/src/main/java/gameEngine/entites/Entity.java +++ b/GameEngine/src/main/java/gameEngine/entites/Entity.java @@ -8,13 +8,13 @@ public class Entity { - private int entityId; // 作成時に割り当て + private String entityId; // 作成時に割り当て public Transform transform = new Transform(); public boolean active = true; public String name = "Entity"; - public Entity(int id) { - entityId = id; + public Entity(String eid) { + entityId = eid; } public void setActive(boolean active) { @@ -23,7 +23,7 @@ public void setName(String name){ this.name = name; } - public int getId(){ + public String getId(){ return entityId; } diff --git a/GameEngine/src/main/java/gameEngine/entites/GameObject.java b/GameEngine/src/main/java/gameEngine/entites/GameObject.java index 4bd9c1c..eff76c0 100644 --- a/GameEngine/src/main/java/gameEngine/entites/GameObject.java +++ b/GameEngine/src/main/java/gameEngine/entites/GameObject.java @@ -9,7 +9,7 @@ public final List gameComponents = new ArrayList<>(); - public GameObject(int id) { + public GameObject(String id) { super(id); } @@ -23,6 +23,7 @@ this.gameComponents.add(component); System.out.println("Component added: " + component.getClass().getSimpleName()); } + public void removeComponent(GameComponent component) { boolean removed = this.gameComponents.remove(component); if (removed) { diff --git a/GameEngine/src/main/java/gameEngine/entites/gameComponents/Mesh.java b/GameEngine/src/main/java/gameEngine/entites/gameComponents/Mesh.java index bef102c..ea5e72d 100644 --- a/GameEngine/src/main/java/gameEngine/entites/gameComponents/Mesh.java +++ b/GameEngine/src/main/java/gameEngine/entites/gameComponents/Mesh.java @@ -41,6 +41,9 @@ } } + public void setTexturePath(String texturePath){ + } + private void renderSprite() { // 2Dの描画モードに切り替え glMatrixMode(GL_PROJECTION);// 投影行列の設定モードに切り替え diff --git a/GameEngine/src/main/java/gameEngine/scenes/EditorScene.java b/GameEngine/src/main/java/gameEngine/scenes/EditorScene.java index 4e03dc9..ff245c4 100644 --- a/GameEngine/src/main/java/gameEngine/scenes/EditorScene.java +++ b/GameEngine/src/main/java/gameEngine/scenes/EditorScene.java @@ -1,41 +1,26 @@ package gameEngine.scenes; -import gameEngine.GameEditor; import gameEngine.entites.Entity; import gameEngine.entites.GameObject; import gameEngine.entites.gameComponents.ColorController; -import gameEngine.entites.gameComponents.GameComponent; import gameEngine.entites.gameComponents.Mesh; -import gameEngine.entites.gameComponents.MoveImage; -import gameEngine.input.*; -import gameEngine.views.Color; -import gameEngine.views.Window; - -import java.awt.event.KeyEvent; import java.util.HashMap; import static org.lwjgl.opengl.GL11.glClearColor; public class EditorScene extends Scene { - private boolean isCreateObject = false; - private boolean isAddComponent = false; - private boolean isRemoveComponent = false; - private GameObject addComponentObject; - private GameObject removeComponentObject; - private GameComponent removeComponent; public EditorScene(){ - this.entities = entities; System.out.println("Active Editor scene"); glClearColor(1, 1, 1, 0); //GameObjectの追加 - entities.put(0, new GameObject(0)); - GameObject g0 = (GameObject) entities.get(0); + createGameObject(); + GameObject g0 = (GameObject) getEntity("0"); g0.addComponent(new ColorController()); g0.setName("ColorController"); } - public EditorScene(HashMap entities){ + public EditorScene(HashMap entities){ this.entities = entities; System.out.println("Active Editor scene"); glClearColor(1, 1, 1, 0); @@ -64,38 +49,13 @@ } } - public void createNewObject(){ - if(isCreateObject) return; - isCreateObject = true; - } - - public void addComponent(GameObject gameObject){ - if(isAddComponent) return; - addComponentObject = gameObject; - isAddComponent = true; - } - - public void removeComponent(GameObject gameObject, GameComponent gameComponent){ - if(isRemoveComponent) return; - removeComponentObject = gameObject; - removeComponent = gameComponent; - isRemoveComponent = true; - } - private void createGameObject(){ - 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")); + int entitiesLength = entities.size(); + String newId = Integer.toString(entitiesLength); + addEntity(newId, new GameObject(newId)); + GameObject newGameObject = (GameObject) getEntity(newId); + newGameObject.addComponent(new Mesh(getEntity(newId), Mesh.MeshType.SPRITE, "test.png")); newGameObject.setName("NewEntity" + newId); } - private void addComponent(){ - addComponentObject.addComponent(new MoveImage(addComponentObject)); - } - - private void removeComponent(){ - removeComponentObject.removeComponent(removeComponent); - } - } diff --git a/GameEngine/src/main/java/gameEngine/scenes/GameScene.java b/GameEngine/src/main/java/gameEngine/scenes/GameScene.java index f8d0b57..25485f8 100644 --- a/GameEngine/src/main/java/gameEngine/scenes/GameScene.java +++ b/GameEngine/src/main/java/gameEngine/scenes/GameScene.java @@ -16,7 +16,7 @@ public class GameScene extends Scene { - public GameScene(HashMap entities) { + public GameScene(HashMap entities) { this.entities = entities;//Editorのentitiesを持ってくる System.out.println("Active Game scene"); glClearColor(1, 1, 1, 0); diff --git a/GameEngine/src/main/java/gameEngine/scenes/Scene.java b/GameEngine/src/main/java/gameEngine/scenes/Scene.java index 8db3b0a..46dbdd6 100644 --- a/GameEngine/src/main/java/gameEngine/scenes/Scene.java +++ b/GameEngine/src/main/java/gameEngine/scenes/Scene.java @@ -4,6 +4,7 @@ import gameEngine.entites.Entity; import gameEngine.entites.GameObject; import gameEngine.entites.gameComponents.GameComponent; +import gameEngine.entites.gameComponents.MoveImage; import gameEngine.input.Input; import gameEngine.views.Color; import gameEngine.views.Window; @@ -16,23 +17,70 @@ public abstract class Scene { private Camera camera; - public HashMap entities = new HashMap<>(); + public HashMap entities = new HashMap<>(); private boolean changingScene = false; private float timeToChangeScene = 2.0f; private final Color editorBackColor = new Color(1,1,1,0); + protected boolean isCreateObject = false; + protected boolean isAddComponent = false; + protected boolean isRemoveComponent = false; + protected GameObject addComponentObject; //コンポーネントを付与する対象オブジェクト + protected GameObject removeComponentObject; //コンポーネントを外す対象オブジェクト + protected GameComponent removeComponent; //外すコンポーネント + public Scene(){ } public abstract void update(float dt); - public void createNewObject() { + public Camera getCamera() { + return camera; } - public void addComponent(GameObject gameObject) { + public void setCamera(Camera camera) { + this.camera = camera; } - public void removeComponent(GameObject gameObject, GameComponent selectedComponent) { + + public Entity getEntity(String eid) { + return entities.get(eid); } + public void addEntity(String eid, Entity entity) { + entities.put(eid, entity); + } + public void removeEntity(String eid) { + entities.remove(eid); + } + + public void createNewObject(){ + if(isCreateObject) return; + isCreateObject = true; + } + + protected void addComponent() { + System.out.println("仮でMeshコンポーネントを付与します"); + addComponentObject.addComponent(new MoveImage(addComponentObject)); + } + protected void removeComponent(){ + removeComponentObject.removeComponent(removeComponent); + } + + //コンポーネントを追加するオブジェクトを選択 + public void addComponentObjectSelect(GameObject gameObject) { + if(isAddComponent) return; + addComponentObject = gameObject; + isAddComponent = true; + } + + //コンポーネントを削除するオブジェクトを選択 + public void removeComponentObjectSelect(GameObject gameObject, GameComponent gameComponent){ + if(isRemoveComponent) return; + removeComponentObject = gameObject; + removeComponent = gameComponent; + isRemoveComponent = true; + } + + void changeScene(int scene, float dt){ if(!changingScene && Input.GetKeyDown(KeyEvent.VK_SPACE)){ @@ -44,12 +92,12 @@ editorBackColor.r -= dt * 5.0f; editorBackColor.g -= dt * 5.0f; editorBackColor.b -= dt * 5.0f; + glClearColor(editorBackColor.r, editorBackColor.g, editorBackColor.b, editorBackColor.a); } else if(changingScene){ Window.changeScene(scene); } - glClearColor(editorBackColor.r, editorBackColor.g, editorBackColor.b, editorBackColor.a); - } + } } diff --git a/GameEngine/src/main/java/gameEngine/views/Window.java b/GameEngine/src/main/java/gameEngine/views/Window.java index d91d73a..0b049f9 100644 --- a/GameEngine/src/main/java/gameEngine/views/Window.java +++ b/GameEngine/src/main/java/gameEngine/views/Window.java @@ -29,7 +29,7 @@ private long glfwWindow; private static GameEditor gameEditor; - private static HashMap sceneEntities; + private static HashMap sceneEntities; private Window() { this.width = 1200;