diff --git a/GameEngine/src/main/java/gameEngine/GameEditor.java b/GameEngine/src/main/java/gameEngine/GameEditor.java index a3fbdeb..8de7a0e 100644 --- a/GameEngine/src/main/java/gameEngine/GameEditor.java +++ b/GameEngine/src/main/java/gameEngine/GameEditor.java @@ -333,6 +333,8 @@ public void updateListByScene(Scene gameScene) { this.gameScene = gameScene; updateGameObjectList(gameScene); + componentListModel.clear(); + componentList.repaint(); } //entityの情報を取得 diff --git a/GameEngine/src/main/java/gameEngine/entites/GameObject.java b/GameEngine/src/main/java/gameEngine/entites/GameObject.java index e533f91..da2e510 100644 --- a/GameEngine/src/main/java/gameEngine/entites/GameObject.java +++ b/GameEngine/src/main/java/gameEngine/entites/GameObject.java @@ -2,12 +2,15 @@ import gameEngine.entites.gameComponents.GameComponent; import gameEngine.entites.gameComponents.Mesh; +import gameEngine.scenes.GameScene; +import gameEngine.views.Window; import java.util.ArrayList; import java.util.List; public class GameObject extends Entity { + Window window = Window.get(); public final List gameComponents = new ArrayList<>(); public GameObject(String id) { @@ -22,6 +25,7 @@ } } this.gameComponents.add(component); + if(window.getScene() instanceof GameScene) component.setGameSceneComponent(true); System.out.println("Component added: " + component.getClass().getSimpleName()); } diff --git a/GameEngine/src/main/java/gameEngine/entites/gameComponents/CopyEntity.java b/GameEngine/src/main/java/gameEngine/entites/gameComponents/CopyEntity.java index b91144b..086c9fc 100644 --- a/GameEngine/src/main/java/gameEngine/entites/gameComponents/CopyEntity.java +++ b/GameEngine/src/main/java/gameEngine/entites/gameComponents/CopyEntity.java @@ -8,6 +8,7 @@ import static org.lwjgl.glfw.GLFW.GLFW_KEY_G; public class CopyEntity extends GameComponent{ + Window window = Window.get(); private Entity entity; public CopyEntity(Entity entity){ this.entity = entity; @@ -15,7 +16,8 @@ public void update() { if(Input.GetKeyDown(GLFW_KEY_G)){ - Window.currentScene.Instantiate((GameObject) entity); + window.getScene().Instantiate((GameObject) entity); + System.out.println(entity.getName() + " copied."); } } } diff --git a/GameEngine/src/main/java/gameEngine/entites/gameComponents/GameComponent.java b/GameEngine/src/main/java/gameEngine/entites/gameComponents/GameComponent.java index cc72d5a..d164392 100644 --- a/GameEngine/src/main/java/gameEngine/entites/gameComponents/GameComponent.java +++ b/GameEngine/src/main/java/gameEngine/entites/gameComponents/GameComponent.java @@ -1,6 +1,16 @@ package gameEngine.entites.gameComponents; public abstract class GameComponent { + protected boolean isGameSceneComponent; + + public boolean isGameSceneComponent() { + return isGameSceneComponent; + } + + public void setGameSceneComponent(boolean gameSceneComponent) { + isGameSceneComponent = gameSceneComponent; + } + public void init() { } diff --git a/GameEngine/src/main/java/gameEngine/scenes/Scene.java b/GameEngine/src/main/java/gameEngine/scenes/Scene.java index b3c0a11..54bd7a0 100644 --- a/GameEngine/src/main/java/gameEngine/scenes/Scene.java +++ b/GameEngine/src/main/java/gameEngine/scenes/Scene.java @@ -82,6 +82,7 @@ } } + //現状一つのEntityからしか呼び出せない public void Instantiate(GameObject original) { enqueueTask(() -> { @@ -102,6 +103,7 @@ }); } + //シーン切り替え時の演出 void changeScene(int scene, float dt){ if(!changingScene && Input.GetKeyDown(KeyEvent.VK_SPACE)){ diff --git a/GameEngine/src/main/java/gameEngine/views/Window.java b/GameEngine/src/main/java/gameEngine/views/Window.java index b77aa29..32ee4d8 100644 --- a/GameEngine/src/main/java/gameEngine/views/Window.java +++ b/GameEngine/src/main/java/gameEngine/views/Window.java @@ -3,6 +3,7 @@ import gameEngine.Time; import gameEngine.entites.Entity; import gameEngine.entites.GameObject; +import gameEngine.entites.gameComponents.*; import gameEngine.input.*; import gameEngine.scenes.*; @@ -13,7 +14,6 @@ import java.nio.*; import java.util.HashMap; -import java.util.Map; import static org.lwjgl.glfw.Callbacks.*; import static org.lwjgl.glfw.GLFW.*; @@ -23,7 +23,7 @@ public class Window { private static Window window; - public static Scene currentScene; + private static Scene currentScene; public int width; public int height; private String title; @@ -53,6 +53,13 @@ for (Entity entity : currentScene.entities.values()) { entity.restoreOriginalTransform(); } + // ゲームシーンのコンポーネントを削除 + for (Entity entity : currentScene.entities.values()) { + if (entity instanceof GameObject) { + GameObject gameObject = (GameObject) entity; + gameObject.gameComponents.removeIf(GameComponent::isGameSceneComponent); + } + } } initializeSceneEntities(); break; @@ -185,4 +192,8 @@ } + public Scene getScene(){ + return currentScene; + } + } \ No newline at end of file