package gameEngine; import gameEngine.scenes.EditorScene; import gameEngine.views.*; import gameEngine.scenes.Scene; import java.util.ArrayList; import java.util.Collections; import java.util.List; public class GameEditor { private EditorScene scene; private float windowWidth, windowHeight; private final String frameImagePath = Window.resourcePath + "EditorFrame.png"; private List<IUpdatable> updatableviews = new ArrayList<>(); private Sprite[] EditorFrameSprite = new Sprite[4]; private Button playButton; private Text playButtonText; private Button createMeshComponentViewButton; private Text createMeshComponentViewButtonText; private Button createMoveImageComponentViewButton; private Text createMoveImageComponentViewButtonText; private Button createEntityViewButton; private Text createEntityViewButtonText; public GameEditor(Scene scene, float windowWidth, float windowHeight) { this.scene = (EditorScene) scene; this.windowWidth = windowWidth; this.windowHeight = windowHeight; initializeEditorComponents(); } private void initializeEditorComponents() { createFrame(); playButton = new Button(windowWidth/ 2 -16 , 3, 1, 0.4f); playButtonText = new Text(windowWidth/ 2 - 11.25f, 1, "Play", 24); createMeshComponentViewButton = new Button(20, 33, 3.2f, 0.5f); createMeshComponentViewButtonText = new Text(20 +5.25f, 30.4f, "Add Mesh", 24); createMoveImageComponentViewButton = new Button(20, 73, 3.2f, 0.5f); createMoveImageComponentViewButtonText = new Text(20 +5.25f, 70.4f, "Add MoveImage", 24); createEntityViewButton = new Button(240, 33, 3.2f, 0.5f); createEntityViewButtonText = new Text(240 +5.25f, 30.4f, "Add Entity", 24); setButtonListeners(); setInspector(); } private void registerUpdatable(IUpdatable... components) { Collections.addAll(updatableviews, components); } private void setInspector() { String[] labels = {"Position", "Rotation", "Scale"}; String[] axes = {"x", "y", "z"}; float startX = 900; float startY = 40; float fieldWidth = 70; float fieldHeight = 22; float spacingX = 100; float spacingY = 40; float labelOffsetX = -100; float labelOffsetY = 5; for (int i = 0; i < labels.length; i++) { float labelX = startX + labelOffsetX; float labelY = startY + i * spacingY + labelOffsetY; Text labelText = new Text(labelX, labelY-6, labels[i] + ":", 18); updatableviews.add(labelText); for (int j = 0; j < axes.length; j++) { float fieldX = startX + j * spacingX; float fieldY = startY + i * spacingY; Text axisText = new Text(fieldX - 20, fieldY, axes[j] + ":", 18); InputField field = new InputField(fieldX, fieldY, fieldWidth, fieldHeight, "0", 18); updatableviews.add(axisText); updatableviews.add(field); } } } private void setButtonListeners() { playButton.clearListeners(); playButton.addListener(scene::changeSceneStart); createMeshComponentViewButton.clearListeners(); createMeshComponentViewButton.addListener(scene::addNewMeshComponent); createMoveImageComponentViewButton.clearListeners(); createMoveImageComponentViewButton.addListener(scene::addNewMoveImageComponent); createEntityViewButton.clearListeners(); createEntityViewButton.addListener(scene::addNewEntity); registerUpdatable(playButton, playButtonText, createMeshComponentViewButton, createMeshComponentViewButtonText, createMoveImageComponentViewButton, createMoveImageComponentViewButtonText, createEntityViewButton, createEntityViewButtonText); } public void setScene(Scene newScene) { this.scene = (EditorScene) newScene; setButtonListeners(); } public void update() { for(Sprite editorFrameSprites : EditorFrameSprite) editorFrameSprites.update(); for (IUpdatable updatable : updatableviews) { updatable.update(); } } private void createFrame(){ EditorFrameSprite[0] = new Sprite(frameImagePath, 0, 0, 20, 0.5f); EditorFrameSprite[1] = new Sprite(frameImagePath, 0, 0, 0.25f, 20); EditorFrameSprite[2] = new Sprite(frameImagePath, windowWidth-16, 0, 0.25f, 20); EditorFrameSprite[3] = new Sprite(frameImagePath, 0, windowHeight-16, 20, 0.5f); for (Sprite sprite : EditorFrameSprite) { updatableviews.add(sprite); } } }