package gameEngine.scenes;
import gameEngine.ConnectionManager;
import gameEngine.GameEditor;
import gameEngine.entites.Entity;
import gameEngine.entites.GameObject;
import gameEngine.entites.gameComponents.ComponentView;
import gameEngine.entites.gameComponents.Draggable;
import gameEngine.entites.gameComponents.EntityView;
import gameEngine.entites.gameComponents.TextMesh;
import gameEngine.views.Window;
import org.joml.Vector3f;
import java.util.HashMap;
import static org.lwjgl.opengl.GL11.glClearColor;
public class EditorScene extends Scene {
private static GameEditor gameEditor;
public HashMap<String, Entity> editorEntities = new HashMap<>();
private GameObject selectedObject = null;
public ConnectionManager connectionManager = new ConnectionManager();
public EditorScene(float windowWidth, float windowHeight){
System.out.println("Active Editor scene");
gameEditor = new GameEditor(this, windowWidth, windowHeight);
gameEditor.setScene(this);
glClearColor(1, 1, 1, 0);
}
@Override
public void update(float dt) {
updateDraggable();
changeScene(1, dt); //Gameシーンへの以降処理
connectionManager.update();
for (Entity entity : editorEntities.values()) {
if (entity instanceof GameObject gameObject) {
gameObject.updateComponents();
}
}
gameEditor.update();
}
public Entity getEditorEntity(String eid) {
return editorEntities.get(eid);
}
public void addEditorEntity(String eid, Entity entity) {
editorEntities.put(eid, entity);
}
public void removeEditorEntity(String eid) {
editorEntities.remove(eid);
}
private GameObject createGameObject(){
int entitiesLength = editorEntities.size();
String newId = Integer.toString(entitiesLength);
GameObject gameObject = new GameObject(newId);
addEditorEntity(newId, gameObject);
return gameObject;
}
public void addNewEntity() {
enqueueTask(this::addEntityView);
}
private void addEntityView(){
GameObject object = createGameObject();
object.transform.setPosition((float) Window.get().width / 2 ,(float) Window.get().height /2, 0);
object.addComponent(new EntityView(object));
object.addComponent(new TextMesh(object, "Entity", 16));
object.getComponent(TextMesh.class).setLocalPosition(new Vector3f(0,-20,0));
}
public void addNewMeshComponent() {
enqueueTask(this::addMeshComponentView);
}
private void addMeshComponentView(){
GameObject object = createGameObject();
object.transform.setPosition((float) Window.get().width / 2 ,(float) Window.get().height /2, 0);
object.addComponent(new ComponentView(object, GameObject.Connectiontype.Mesh));
object.addComponent(new TextMesh(object, "Mesh", 14));
object.getComponent(TextMesh.class).setLocalPosition(new Vector3f(10,2,0));
}
public void addNewMoveImageComponent() {
enqueueTask(this::addMoveImageComponentView);
}
private void addMoveImageComponentView(){
GameObject object = createGameObject();
object.transform.setPosition((float) Window.get().width / 2 ,(float) Window.get().height /2, 0);
object.addComponent(new ComponentView(object, GameObject.Connectiontype.MoveImage));
object.addComponent(new TextMesh(object, "MoveImage", 14));
object.getComponent(TextMesh.class).setLocalPosition(new Vector3f(10,2,0));
}
///----------------------------------------------------------------
/// 選択、ドラッグ処理
///----------------------------------------------------------------
public GameObject getSelectedObject() {
return selectedObject;
}
public void setSelectedObject(GameObject gameObject) {
selectedObject = gameObject;
System.out.println("Selected Entity: " + selectedObject);
}
public void clearSelectedObject() {
selectedObject = null;
}
public void updateDraggable() {
if (selectedObject != null) {
if (selectedObject.getComponent(Draggable.class) != null) {
selectedObject.getComponent(Draggable.class).handleDragging();
}
} else {
for (Entity entity : editorEntities.values()) {
if (entity instanceof GameObject gameObject) {
if (gameObject.getComponent(Draggable.class) != null) {
gameObject.getComponent(Draggable.class).handleDragging();
}
}
}
}
}
}