diff --git a/GameEngine/resources/GameEngineTest.model b/GameEngine/resources/GameEngineTest.model index 40a3d27..53cdc14 100644 --- a/GameEngine/resources/GameEngineTest.model +++ b/GameEngine/resources/GameEngineTest.model @@ -1,8 +1,8 @@ init { scene := { "entities": { - "1": { - "eid": "1", + "3": { + "eid": "3", "transform": { "rotation": { "x": 0.0, @@ -15,13 +15,13 @@ "z": 1.0 }, "position": { - "x": 570.0, - "y": 321.0, + "x": 524.0, + "y": 354.0, "z": 0.0 } }, "move": { - "type": straight, + "type": "straight", "speed": 5.0 }, "mesh": { @@ -54,8 +54,8 @@ "type": "sprite" } } -enemy1 := { - "eid": "1", +enemy3 := { + "eid": "3", "transform": { "rotation": { "x": 0.0, @@ -68,13 +68,13 @@ "z": 1.0 }, "position": { - "x": 570.0, - "y": 321.0, + "x": 524.0, + "y": 354.0, "z": 0.0 } }, "move": { - "type": straight, + "type": "straight", "speed": 5.0 }, "mesh": { @@ -108,30 +108,20 @@ "z": z } } +channel MoveEnemy3 { + in enemy3.transform.position(curPos:Json,moveEnemy3(nextPos,eid)) = nextPos + ref enemy3.eid(eid,moveEnemy3(nextPos,eid)) + out scene.entities.{eid:Str}.transform.position(curPos:Json,moveEnemy3(nextPos,eid)) = nextPos +} native channel EntityPositionUpdate(eid:Str) { in scene.entities.{eid:Str}.transform.position(curPos:Json,updatePosition(nextPos.x,nextPos.y,nextPos.z)) = nextPos } -channel MoveEnemy1 { - in enemy1.transform.position(curPos:Json,moveEnemy1(nextPos,eid)) = nextPos - ref enemy1.eid(eid,moveEnemy1(nextPos,eid)) - out scene.entities.{eid:Str}.transform.position(curPos:Json,moveEnemy1(nextPos,eid)) = nextPos -} native channel CameraProjectionUpdate { in scene.camera.projection(curProj:Json,updateProjection(curProj,nextProj)) = nextProj } native channel CameraScaleUpdate { in scene.camera.transform.scale(curScale:Json,updateScale(nextScale.x,nextScale.y,nextScale.z)) = nextScale } -channel UpdateEnemy1(tid:Str) { - in timers.{tid:Str}.count(curCount:Long,updateEnemy1(type,speed)) = nextCount - ref enemy1.move.type(type:Str,updateEnemy1(type,speed)) - ref enemy1.move.speed(speed:Float,updateEnemy1(type,speed)) - out enemy1.transform.position(curPos:Json,updateEnemy1(type,speed)) = { - "x": curPos.x, - "y": (curPos.y+speed), - "z": curPos.z -} -} native channel EntitySpriteUpdate(eid:Str) { in scene.entities.{eid:Str}.mesh(curMesh:Json,updateSprite(spritePath:Str)) = { "sprite": spritePath, @@ -141,13 +131,23 @@ native channel EntityScaleUpdate(eid:Str) { in scene.entities.{eid:Str}.transform.scale(curScale:Json,updateScale(nextScale.x,nextScale.y,nextScale.z)) = nextScale } +channel UpdateEnemy3(tid:Str) { + in timers.{tid:Str}.count(curCount:Long,updateEnemy3(type,speed)) = nextCount + ref enemy3.move.speed(speed:Float,updateEnemy3(type,speed)) + ref enemy3.move.type(type:Str,updateEnemy3(type,speed)) + out enemy3.transform.position(curPos:Json,updateEnemy3(type,speed)) = { + "x": (curPos.x+speed), + "y": curPos.y, + "z": curPos.z +} +} native channel TimersUpdated { in timers(curTimers:Map,update(curTimers,nextTimers)) = nextTimers } -channel RotateEnemy1 { - in enemy1.transform.rotation(curRot:Json,rotateEnemy1(nextRot,eid)) = nextRot - ref enemy1.eid(eid,rotateEnemy1(nextRot,eid)) - out scene.entities.{eid:Str}.transform.rotation(curRot:Json,rotateEnemy1(nextRot,eid)) = nextRot +channel RotateEnemy3 { + in enemy3.transform.rotation(curRot:Json,rotateEnemy3(nextRot,eid)) = nextRot + ref enemy3.eid(eid,rotateEnemy3(nextRot,eid)) + out scene.entities.{eid:Str}.transform.rotation(curRot:Json,rotateEnemy3(nextRot,eid)) = nextRot } native channel CameraPositionUpdate { in scene.camera.transform.position(curPos:Json,updatePosition(nextPos.x,nextPos.y,nextPos.z)) = nextPos diff --git a/GameEngine/src/main/java/gameEngine/GameEditor.java b/GameEngine/src/main/java/gameEngine/GameEditor.java index 3aa20bf..7fc7960 100644 --- a/GameEngine/src/main/java/gameEngine/GameEditor.java +++ b/GameEngine/src/main/java/gameEngine/GameEditor.java @@ -46,7 +46,7 @@ createMeshComponentViewButton = new Button(20, 33, 3.2f, 0.5f, "Add Mesh"); createMoveImageComponentViewButton = new Button(20, 73, 3.2f, 0.5f, "Add MoveImage"); - createMoveStraightComponentViewButton = new Button(20, 113, 3.2f, 0.5f, "Add MoveStraight"); + createMoveStraightComponentViewButton = new Button(20, 113, 3.2f, 0.5f, "Add Move"); createEntityViewButton = new Button(240, 33, 3.2f, 0.5f, "Add Entity"); @@ -155,7 +155,7 @@ createMoveImageComponentViewButton.addListener(scene::addNewMoveImageComponent); createMoveStraightComponentViewButton.clearListeners(); - createMoveStraightComponentViewButton.addListener(scene::addMoveStraightComponent); + createMoveStraightComponentViewButton.addListener(scene::addMoveComponent); createEntityViewButton.clearListeners(); createEntityViewButton.addListener(scene::addNewEntity); diff --git a/GameEngine/src/main/java/gameEngine/GameEngineModelFileGenerator.java b/GameEngine/src/main/java/gameEngine/GameEngineModelFileGenerator.java index 9505677..54ef934 100644 --- a/GameEngine/src/main/java/gameEngine/GameEngineModelFileGenerator.java +++ b/GameEngine/src/main/java/gameEngine/GameEngineModelFileGenerator.java @@ -3,7 +3,10 @@ import algorithms.TypeInference; import gameEngine.entites.EditorEntity; import gameEngine.entites.Entity; +import gameEngine.entites.editorComponents.ComponentView; import gameEngine.entites.editorComponents.EntityView; +import gameEngine.entites.gameComponents.Mesh; +import gameEngine.entites.gameComponents.Move; import gameEngine.geometry.Transform; import gameEngine.scenes.EditorScene; import gameEngine.scenes.Scene; @@ -31,6 +34,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.Objects; public class GameEngineModelFileGenerator { private DataTransferModel model; @@ -73,6 +77,7 @@ List enemy_transform_rotation = new ArrayList<>(); List enemy_move = new ArrayList<>(); List enemy_move_type = new ArrayList<>(); + List enemy_move_direction = new ArrayList<>(); List enemy_move_speed = new ArrayList<>(); List enemy_eid = new ArrayList<>(); for (int i = 1; i < editorScene.editorEntities.size(); i++) { @@ -85,6 +90,7 @@ ResourcePath etr = new ResourcePath(et, "rotation"); ResourcePath em = new ResourcePath(e,"move"); ResourcePath emt = new ResourcePath(em,"type"); + ResourcePath emd = new ResourcePath(em, "direction"); ResourcePath ems = new ResourcePath(em,"speed"); ResourcePath eid = new ResourcePath(e, "eid"); enemy.add(e); @@ -93,6 +99,7 @@ enemy_transform_rotation.add(etr); enemy_move.add(em); enemy_move_type.add(emt); + enemy_move_direction.add(emd); enemy_move_speed.add(ems); enemy_eid.add(eid); } @@ -303,7 +310,7 @@ enemy_transform_position.get(i - 1), "curPos: Json", "updateEnemy" + id + "(type, speed)", - "{\"x\": curPos.x, \"y\": curPos.y + speed, \"z\": curPos.z}") + setMoveDirection(editorEntity)) ); addChannel( @@ -396,6 +403,30 @@ } } + private String setMoveDirection(EditorEntity editorEntity){ + for(ComponentView componentView: editorEntity.getEditorComponent(EntityView.class).getConnectedComponentViews()){ + if(componentView.directionText != null) { + if(componentView.direction == Move.Direction.LEFT){ + System.out.println("LEFT"); + return "{\"x\": curPos.x - speed , \"y\": curPos.y, \"z\": curPos.z}"; + } + else if(componentView.direction == Move.Direction.RIGHT){ + System.out.println("RIGHT"); + return "{\"x\": curPos.x + speed , \"y\": curPos.y, \"z\": curPos.z}"; + } + else if(componentView.direction == Move.Direction.UP){ + System.out.println("UP"); + return "{\"x\": curPos.x, \"y\": curPos.y - speed, \"z\": curPos.z}"; + } + else if(componentView.direction == Move.Direction.DOWN){ + System.out.println("DOWN"); + return "{\"x\": curPos.x, \"y\": curPos.y + speed, \"z\": curPos.z}"; + } + } + } + return ""; + } + private JsonTerm createTransformTerm(Transform transform){ JsonTerm positionTerm = new JsonTerm(); positionTerm.addMember("x", new Constant(String.valueOf(transform.position.x))); diff --git a/GameEngine/src/main/java/gameEngine/SwingGameEditor.java b/GameEngine/src/main/java/gameEngine/SwingGameEditor.java deleted file mode 100644 index 2c41d65..0000000 --- a/GameEngine/src/main/java/gameEngine/SwingGameEditor.java +++ /dev/null @@ -1,364 +0,0 @@ -package gameEngine; - -import gameEngine.entites.Entity; -import gameEngine.entites.GameObject; -import gameEngine.entites.gameComponents.GameComponent; -import gameEngine.entites.gameComponents.*; -import gameEngine.scenes.*; -import org.joml.Vector3f; - -import javax.swing.*; -import java.awt.*; -import java.awt.event.FocusAdapter; -import java.awt.event.FocusEvent; -import java.util.List; -import java.util.Map; - -public class SwingGameEditor extends JFrame { - - private JList objectList; - private DefaultListModel listModel; - private DefaultListModel componentListModel; - private JList componentList; - private JLabel entityLabel, nameLabel, posLabel, rotLabel, scaLabel; - private JTextField posXField, posYField, posZField; - private JTextField rotXField, rotYField, rotZField; - private JTextField scaleXField, scaleYField, scaleZField; - private JTextField nameField; - private Scene gameScene; - private Timer updateTimer; - private JComboBox componentDropdown; - - private String lastLoadedName; - private Vector3f lastLoadedPos, lastLoadedRot, lastLoadedScale; - - public SwingGameEditor() - { - setTitle("Game Object Editor"); - setSize(500, 400); - setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); // 閉じられないようにする - setLayout(null); // レイアウトを絶対座標に設定 - initializeUIComponents();// 各UI要素の初期化 - initializeUpdateTimer(); // 定期的にリスト更新を行うタイマーを初期化 - setVisible(true); // フレームを表示} - } - - // UI要素を初期化し、配置関数を呼び出す - private void initializeUIComponents() { - listModel = new DefaultListModel<>(); - objectList = new JList<>(listModel); - JScrollPane scrollPane = new JScrollPane(objectList); - - objectList.setCellRenderer(createEntityRenderer()); - componentListModel = new DefaultListModel<>(); - componentList = new JList<>(componentListModel); - JScrollPane componentScrollPane = new JScrollPane(componentList); - componentList.setCellRenderer(createComponentRenderer()); - - // 各UIコンポーネントの作成と配置 - entityLabel = new JLabel("Entity:"); - nameField = new JTextField(20); - nameLabel = new JLabel("Name:"); - posLabel = new JLabel("Position:"); - rotLabel = new JLabel("Rotation:"); - scaLabel = new JLabel("Scale:"); - posXField = new JTextField(5); - posYField = new JTextField(5); - posZField = new JTextField(5); - rotXField = new JTextField(5); - rotYField = new JTextField(5); - rotZField = new JTextField(5); - scaleXField = new JTextField(5); - scaleYField = new JTextField(5); - scaleZField = new JTextField(5); - componentDropdown = new JComboBox<>(new String[]{"ColorController", "CopyEntity", "MoveImage", "Physics"}); - - addChangeListener(posXField, posYField, posZField, rotXField, rotYField, rotZField, scaleXField, scaleYField, scaleZField, nameField); - - JButton newGameObjectButton = new JButton("Add Entity"); - newGameObjectButton.addActionListener(e -> createNewGameObject()); - - JButton addComponentButton = new JButton("+ Component"); - addComponentButton.addActionListener(e -> addComponentToGameObject()); - - JButton removeComponentButton = new JButton("- Component"); - removeComponentButton.addActionListener(e -> removeComponentFromGameObject()); - - - int pos = 170; - // 各要素の位置とサイズを設定 - setComponentBounds(entityLabel, 10, 5, 100, 30); - setComponentBounds(scrollPane, 10, 30, 150, 300); - setComponentBounds(componentScrollPane, 350, 170, 130, 165); - setComponentBounds(nameLabel, pos, 10, 100, 30); - setComponentBounds(nameField, pos+50, 10, 170, 25); - setComponentBounds(posLabel, pos, 50, 100, 30); - setComponentBounds(posXField, pos + 50, 50, 50, 30); - setComponentBounds(posYField, pos + 110, 50, 50, 30); - setComponentBounds(posZField, pos + 170, 50, 50, 30); - setComponentBounds(rotLabel, pos, 90, 100, 30); - setComponentBounds(rotXField, pos + 50, 90, 50, 30); - setComponentBounds(rotYField, pos + 110, 90, 50, 30); - setComponentBounds(rotZField, pos + 170, 90, 50, 30); - setComponentBounds(scaLabel, pos, 130, 100, 30); - setComponentBounds(scaleXField, pos + 50, 130, 50, 30); - setComponentBounds(scaleYField, pos + 110, 130, 50, 30); - setComponentBounds(scaleZField, pos + 170, 130, 50, 30); - setComponentBounds(newGameObjectButton, 200, 170, 110, 20); - setComponentBounds(addComponentButton, 200, 260, 130, 20); - setComponentBounds(removeComponentButton, 200, 290, 130, 20); - setComponentBounds(componentDropdown, 200, 225, 130, 20); // ドロップダウンの位置とサイズを設定 - - objectList.addListSelectionListener(e -> { - if (!e.getValueIsAdjusting()) { // ユーザーが調整中でない場合のみ - loadSelectedGameObject(); // オブジェクトのプロパティをロード - } - }); - } - private void addChangeListener(JTextField... fields) { - for (JTextField field : fields) { - field.addActionListener(e -> applyGameObjectChanges()); - - field.addFocusListener(new FocusAdapter() { - @Override - public void focusGained(FocusEvent e) { - updateTimer.stop(); - } - - @Override - public void focusLost(FocusEvent e) { - applyGameObjectChanges(); - updateTimer.start(); - } - }); - } - } - - private void initializeUpdateTimer() { - updateTimer = new Timer(750, e -> { - String selectedObject = objectList.getSelectedValue(); - GameComponent selectedComponent = componentList.getSelectedValue(); - - updateGameObjectList(gameScene); - - if (selectedObject != null) { - objectList.setSelectedValue(selectedObject, true); - Entity selectedEntity = gameScene.getEntity(selectedObject); - if (selectedEntity instanceof GameObject) { - updateComponentList((GameObject) selectedEntity); - } - } - - if (selectedComponent != null) { - componentList.setSelectedValue(selectedComponent, true); - } - }); - updateTimer.start(); - } - - private ListCellRenderer createEntityRenderer() { - return (list, value, index, isSelected, cellHasFocus) -> { - JLabel label = new JLabel(); - Entity entity = gameScene.getEntity(value); - label.setText(entity.getName()); - label.setBackground(isSelected ? list.getSelectionBackground() : list.getBackground()); - label.setForeground(isSelected ? list.getSelectionForeground() : list.getForeground()); - label.setOpaque(true); - return label; - }; - } - private ListCellRenderer createComponentRenderer() { - return (list, value, index, isSelected, cellHasFocus) -> { - JLabel label = new JLabel(value.getClass().getSimpleName()); - label.setBackground(isSelected ? list.getSelectionBackground() : list.getBackground()); - label.setForeground(isSelected ? list.getSelectionForeground() : list.getForeground()); - label.setOpaque(true); - return label; - }; - } - - private void setComponentBounds(Component component, int x, int y, int width, int height) { - component.setBounds(x, y, width, height); - add(component); //フレームに追加 - } - - private void createNewGameObject() { - // gameScene.addNewObject(); // 新しいGameObjectを作成 - updateGameObjectList(gameScene); // オブジェクトリストの更新 - objectList.setSelectedIndex(listModel.getSize() - 1); // 新規作成したオブジェクトを選択 - applyGameObjectChanges(); // 作成直後に即座にプロパティを反映させる - } - - private void addComponentToGameObject() { - // 現在の選択状態を保存 - String selectedObject = objectList.getSelectedValue(); - GameComponent selectedComponent = componentList.getSelectedValue(); - - // コンポーネントの追加処理 - if (selectedObject != null) { - Entity selectedEntity = gameScene.getEntity(selectedObject); - if (selectedEntity instanceof GameObject) { - GameObject gameObject = (GameObject) selectedEntity; - - String component = (String) componentDropdown.getSelectedItem(); - switch (component) { - case "CopyEntity": - gameScene.addComponentToGameObject(gameObject, new CopyEntity(gameObject)); - break; - case "MoveImage": - gameScene.addComponentToGameObject(gameObject, new MoveImage(gameObject)); - break; - case "Physics": - gameScene.addComponentToGameObject(gameObject, new Physics(gameObject)); - break; - default: - JOptionPane.showMessageDialog(this, "Unknown Component Selected"); - break; - } - - // リストの更新 - updateComponentList(gameObject); - updateGameObjectList(gameScene); // オブジェクトリストの更新 - - //ダイアログ - JOptionPane.showMessageDialog(this, "Component Added to " + selectedEntity.name); - } - } - - // 選択状態を復元 - if (selectedObject != null) { - objectList.setSelectedValue(selectedObject, true); - } - if (selectedComponent != null) { - componentList.setSelectedValue(selectedComponent, true); - } - } - - private void removeComponentFromGameObject() { - String selectedIdStr = objectList.getSelectedValue(); - if (selectedIdStr != null) { - Entity selectedEntity = gameScene.getEntity(selectedIdStr); - if (selectedEntity instanceof GameObject) { - GameObject gameObject = (GameObject) selectedEntity; - GameComponent selectedComponent = componentList.getSelectedValue(); // GameComponentとして取得 - if (selectedComponent != null) { - gameScene.removeComponentFromGameObject(gameObject, selectedComponent); - updateComponentList(gameObject); // コンポーネントリストの更新 - JOptionPane.showMessageDialog(this, "Component Removed from " + selectedEntity.name); - } - } - } - } - - private void updateGameObjectList(Scene gameScene) { - listModel.clear(); - for (Map.Entry entry : gameScene.entities.entrySet()) { - Entity entity = entry.getValue(); - listModel.addElement(entity.getId()); - } - objectList.repaint(); - } - - - private void updateComponentList(GameObject gameObject) { - componentListModel.clear(); // リストをクリア - List components = gameObject.gameComponents; - for (GameComponent component : components) { - componentListModel.addElement(component); // コンポーネントを追加 - } - componentList.repaint(); - } - - private void loadSelectedGameObject() { - String selectedIdStr = objectList.getSelectedValue(); - if (selectedIdStr != null) { - Entity selectedEntity = gameScene.getEntity(selectedIdStr); - if (selectedEntity != null) { - loadObjectProperties(selectedEntity); - if (selectedEntity instanceof GameObject) { - updateComponentList((GameObject) selectedEntity); - } - } - } - } - - private void applyGameObjectChanges() { - String selectedIdStr = objectList.getSelectedValue(); - if (selectedIdStr != null) { - Entity selectedEntity = gameScene.getEntity(selectedIdStr); - if (selectedEntity != null) { - try { - String newName = nameField.getText(); - if (!newName.equals(lastLoadedName)) { - selectedEntity.setName(newName); - } - - Vector3f newPos = new Vector3f( - Float.parseFloat(posXField.getText()), - Float.parseFloat(posYField.getText()), - Float.parseFloat(posZField.getText()) - ); - if (!newPos.equals(lastLoadedPos)) { - selectedEntity.transform.setPosition(newPos); - } - - Vector3f newRot = new Vector3f( - Float.parseFloat(rotXField.getText()), - Float.parseFloat(rotYField.getText()), - Float.parseFloat(rotZField.getText()) - ); - if (!newRot.equals(lastLoadedRot)) { - selectedEntity.transform.setRotation(newRot); - } - - Vector3f newScale = new Vector3f( - Float.parseFloat(scaleXField.getText()), - Float.parseFloat(scaleYField.getText()), - Float.parseFloat(scaleZField.getText()) - ); - if (!newScale.equals(lastLoadedScale)) { - selectedEntity.transform.setScale(newScale); - } - - updateGameObjectList(gameScene); - - } catch (NumberFormatException e) { - JOptionPane.showMessageDialog(this, "Invalid input. Please enter valid numbers.", "Error", JOptionPane.ERROR_MESSAGE); - } - } - } - } - - - public void updateListByScene(Scene gameScene) { - this.gameScene = gameScene; - updateGameObjectList(gameScene); - componentListModel.clear(); - componentList.repaint(); - } - - //entityの情報を取得 - private void loadObjectProperties(Entity entity) { - nameField.setText(entity.getName()); - Vector3f pos = entity.transform.position; - posXField.setText(String.valueOf(pos.x)); - posYField.setText(String.valueOf(pos.y)); - posZField.setText(String.valueOf(pos.z)); - - Vector3f rot = entity.transform.rotation; - rotXField.setText(String.valueOf(rot.x)); - rotYField.setText(String.valueOf(rot.y)); - rotZField.setText(String.valueOf(rot.z)); - - Vector3f scale = entity.transform.scale; - scaleXField.setText(String.valueOf(scale.x)); - scaleYField.setText(String.valueOf(scale.y)); - scaleZField.setText(String.valueOf(scale.z)); - - lastLoadedName = entity.getName(); - lastLoadedPos = pos; - lastLoadedRot = rot; - lastLoadedScale = scale; - } - -} diff --git a/GameEngine/src/main/java/gameEngine/entites/editorComponents/ComponentView.java b/GameEngine/src/main/java/gameEngine/entites/editorComponents/ComponentView.java index 0e7e8ff..18858bf 100644 --- a/GameEngine/src/main/java/gameEngine/entites/editorComponents/ComponentView.java +++ b/GameEngine/src/main/java/gameEngine/entites/editorComponents/ComponentView.java @@ -2,6 +2,7 @@ import gameEngine.ResourceManager; import gameEngine.entites.EditorEntity; +import gameEngine.entites.gameComponents.Move; import gameEngine.geometry.Transform; import gameEngine.input.Input; import gameEngine.input.MouseInput; @@ -15,10 +16,16 @@ public EditorEntity.Connectiontype connectionType; private final PortView portview; + //Mesh public int meshId = 0; public Sprite meshSprite; ResourceManager resourceManager; + //Move + public Text directionText; + public Move.Direction direction; + private int directionNum = 0; + public ComponentView(EditorEntity parent, EditorEntity.Connectiontype connectionType, String text){ this.parent = parent; this.sprite = new Sprite(Window.resourcePath + "ComponentView.png"); @@ -26,14 +33,23 @@ this.text = new Text(parent.screenTransform.position.x, parent.screenTransform.position.y, text, 14); portview = new PortView(PortView.PortType.OUT, parent); this.connectionType = connectionType; + + if(connectionType == EditorEntity.Connectiontype.Move) setMoveComponent(); } + //Meshの場合 public ComponentView(EditorEntity parent, EditorEntity.Connectiontype connectionType, ResourceManager resourceManager, String text){ this(parent, connectionType, text); this.resourceManager = resourceManager; meshSprite = new Sprite(resourceManager.getPath(meshId)); } + //Moveの場合 + public void setMoveComponent() { + directionText = new Text(parent.transform.position.x, parent.transform.position.y + 30 ,"LEFT",18); + direction = Move.Direction.LEFT; + } + @Override protected void updatePortView(Vector3f actualPosition, Transform transform) { Vector3f adjustedPos = new Vector3f(actualPosition.x + 92, actualPosition.y, actualPosition.z); @@ -43,18 +59,29 @@ @Override protected void additionalUpdate(Vector3f actualPosition, Transform transform, Vector3f cameraPosition) { + float mouseX = MouseInput.getX(); + float mouseY = MouseInput.getY(); if (meshSprite != null) { meshSprite.setPosition(new Vector3f(actualPosition.x, actualPosition.y + 30, actualPosition.z)); meshSprite.setRotation(transform.rotation); meshSprite.setScale(transform.scale); meshSprite.update(); - float mouseX = MouseInput.getX(); - float mouseY = MouseInput.getY(); if (Input.GetMouseButtonDown(0) && meshSprite.isMouseOver(mouseX, mouseY)) { changeMeshSprite(); } } + + if(directionText != null){ + directionText.setPosition(new Vector3f(actualPosition.x, actualPosition.y + 30, actualPosition.z)); + directionText.setRotation(transform.rotation); + directionText.setScale(transform.scale); + directionText.update(); + + if (Input.GetMouseButtonDown(0) && directionText.isMouseOver(mouseX, mouseY)) { + changeDirectionType(); + } + } } @@ -68,6 +95,28 @@ } } + private void changeDirectionType(){ + if(directionNum < 3) directionNum += 1; + else directionNum = 0; + + if(directionNum == 0) { + direction = Move.Direction.LEFT; + directionText.setText("LEFT"); + } + else if(directionNum == 1) { + direction = Move.Direction.RIGHT; + directionText.setText("RIGHT"); + } + else if(directionNum == 2) { + direction = Move.Direction.UP; + directionText.setText("UP"); + } + else if(directionNum == 3) { + direction = Move.Direction.DOWN; + directionText.setText("DOWN"); + } + } + @Override public EditorComponent copy() { return this; diff --git a/GameEngine/src/main/java/gameEngine/entites/gameComponents/Move.java b/GameEngine/src/main/java/gameEngine/entites/gameComponents/Move.java index 25edd74..c791710 100644 --- a/GameEngine/src/main/java/gameEngine/entites/gameComponents/Move.java +++ b/GameEngine/src/main/java/gameEngine/entites/gameComponents/Move.java @@ -9,14 +9,15 @@ private GameObject parent; private final float moveSpeed = 100; public enum Direction {UP, DOWN, LEFT, RIGHT} - private final Direction direction = Direction.LEFT; + private Direction direction; public enum MoveType{ Straight, Wave } - private MoveType moveType = MoveType.Wave; + private MoveType moveType = MoveType.Straight; - public Move(GameObject parent){ + public Move(GameObject parent, Direction direction){ this.parent = parent; + this.direction = direction; } @Override public GameComponent copy() { diff --git a/GameEngine/src/main/java/gameEngine/scenes/EditorScene.java b/GameEngine/src/main/java/gameEngine/scenes/EditorScene.java index 44aee06..6a94662 100644 --- a/GameEngine/src/main/java/gameEngine/scenes/EditorScene.java +++ b/GameEngine/src/main/java/gameEngine/scenes/EditorScene.java @@ -122,13 +122,13 @@ object.addEditorComponent(new ComponentView(object, EditorEntity.Connectiontype.MoveImage, "MoveImage")); } - public void addMoveStraightComponent() { - enqueueTask(this::addMoveStraightComponentView); + public void addMoveComponent() { + enqueueTask(this::addMoveComponentView); } - private void addMoveStraightComponentView(){ + private void addMoveComponentView(){ EditorEntity object = createObject(); - object.addEditorComponent(new ComponentView(object, EditorEntity.Connectiontype.Move, "MoveStraight")); + object.addEditorComponent(new ComponentView(object, EditorEntity.Connectiontype.Move, "Move")); } ///---------------------------------------------------------------- diff --git a/GameEngine/src/main/java/gameEngine/scenes/GameScene.java b/GameEngine/src/main/java/gameEngine/scenes/GameScene.java index 5a935cd..dda4e11 100644 --- a/GameEngine/src/main/java/gameEngine/scenes/GameScene.java +++ b/GameEngine/src/main/java/gameEngine/scenes/GameScene.java @@ -63,6 +63,7 @@ object.addComponent(new Mesh(object, Mesh.MeshType.SPRITE, componentView.getSpritePath())); break; } + } object.addComponent(new Collider(object, false)); //コライダー(仮) } @@ -70,7 +71,11 @@ object.addComponent(new MoveImage(object)); } if(connectionType == EditorEntity.Connectiontype.Move){ - object.addComponent(new Move(object)); + for(ComponentView componentView: editorEntity.getEditorComponent(EntityView.class).getConnectedComponentViews()){ + if(componentView.directionText != null){ + object.addComponent(new Move(object, componentView.direction)); + } + } } } }