diff --git a/AlgebraicDataflowArchitectureModel/src/application/simulator/SimulatorMenuBar.java b/AlgebraicDataflowArchitectureModel/src/application/simulator/SimulatorMenuBar.java index 8337cd1..29463f4 100644 --- a/AlgebraicDataflowArchitectureModel/src/application/simulator/SimulatorMenuBar.java +++ b/AlgebraicDataflowArchitectureModel/src/application/simulator/SimulatorMenuBar.java @@ -5,7 +5,6 @@ import application.actions.ZoomInAction; import application.actions.ZoomOutAction; -import application.simulator.actions.ShowGameSimulatorAction; import application.simulator.actions.ShowUISimulatorAction; public class SimulatorMenuBar extends JMenuBar { @@ -23,7 +22,6 @@ menu = add(new JMenu("Show")); menu.add(new ShowUISimulatorAction(simulatorWindow.getSimulator())); - menu.add(new ShowGameSimulatorAction(simulatorWindow.getSimulator())); } } diff --git a/AlgebraicDataflowArchitectureModel/src/application/simulator/actions/ShowGameSimulatorAction.java b/AlgebraicDataflowArchitectureModel/src/application/simulator/actions/ShowGameSimulatorAction.java deleted file mode 100644 index 0411823..0000000 --- a/AlgebraicDataflowArchitectureModel/src/application/simulator/actions/ShowGameSimulatorAction.java +++ /dev/null @@ -1,36 +0,0 @@ -package application.simulator.actions; - -import java.awt.event.ActionEvent; - -import javax.swing.AbstractAction; - -import application.simulator.UISimulatorWindow; -import gameEngine.views.Window; -import simulator.Simulator; -import simulator.interfaces.gameEngine.GameEnginePresenter; -import simulator.interfaces.timers.TimerService; - -public class ShowGameSimulatorAction extends AbstractAction { - private Simulator simulator; - - public ShowGameSimulatorAction(Simulator simulator) { - super("Show Game Simulator"); - this.simulator = simulator; - } - - @Override - public void actionPerformed(ActionEvent e) { - Thread game = new Thread() { - @Override - public void run() { - Window window = Window.get(); - window.changeScene(1); - GameEnginePresenter presenter = new GameEnginePresenter(window.getScene(), simulator); - TimerService timerService = new TimerService(simulator); - window.run(); - } - }; - game.start(); - } - -} diff --git a/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/gameEngine/CameraPositionReceiver.java b/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/gameEngine/CameraPositionReceiver.java deleted file mode 100644 index cadc4e8..0000000 --- a/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/gameEngine/CameraPositionReceiver.java +++ /dev/null @@ -1,40 +0,0 @@ -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; - -public class CameraPositionReceiver implements INativeReceiver { - private Camera camera; - - public CameraPositionReceiver(Camera camera) { - this.camera = camera; - } - - @Override - public void onReceiveFromModel(Event event, SystemState nextSystemState) { - Expression message = event.getMessage(); - if (message instanceof Term) { - Expression xExp = ((Term) message).getChild(0); - Expression yExp = ((Term) message).getChild(1); - Expression zExp = ((Term) message).getChild(2); - if (xExp instanceof Term) { - xExp = ((Term) xExp).reduce(); - } - if (yExp instanceof Term) { - yExp = ((Term) yExp).reduce(); - } - if (zExp instanceof Term) { - zExp = ((Term) zExp).reduce(); - } - Float x = Float.parseFloat(xExp.toString()); - Float y = Float.parseFloat(yExp.toString()); - Float z = Float.parseFloat(zExp.toString()); - camera.transform.setPosition(x, y, z); - } - } - -} diff --git a/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/gameEngine/CameraProjectionReceiver.java b/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/gameEngine/CameraProjectionReceiver.java deleted file mode 100644 index 1ca2538..0000000 --- a/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/gameEngine/CameraProjectionReceiver.java +++ /dev/null @@ -1,24 +0,0 @@ -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; - -public class CameraProjectionReceiver implements INativeReceiver { - private Camera camera; - - public CameraProjectionReceiver(Camera camera) { - this.camera = camera; - } - - @Override - public void onReceiveFromModel(Event event, SystemState nextSystemState) { - Expression message = event.getMessage(); - if (message instanceof Term) { - } - } - -} diff --git a/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/gameEngine/CameraRotationReceiver.java b/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/gameEngine/CameraRotationReceiver.java deleted file mode 100644 index e0ec72e..0000000 --- a/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/gameEngine/CameraRotationReceiver.java +++ /dev/null @@ -1,40 +0,0 @@ -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; - -public class CameraRotationReceiver implements INativeReceiver { - private Camera camera; - - public CameraRotationReceiver(Camera camera) { - this.camera = camera; - } - - @Override - public void onReceiveFromModel(Event event, SystemState nextSystemState) { - Expression message = event.getMessage(); - if (message instanceof Term) { - Expression xExp = ((Term) message).getChild(0); - Expression yExp = ((Term) message).getChild(1); - Expression zExp = ((Term) message).getChild(2); - if (xExp instanceof Term) { - xExp = ((Term) xExp).reduce(); - } - if (yExp instanceof Term) { - yExp = ((Term) yExp).reduce(); - } - if (zExp instanceof Term) { - zExp = ((Term) zExp).reduce(); - } - Float x = Float.parseFloat(xExp.toString()); - Float y = Float.parseFloat(yExp.toString()); - Float z = Float.parseFloat(zExp.toString()); - camera.transform.setRotation(x, y, z); - } - } - -} diff --git a/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/gameEngine/CameraScaleReceiver.java b/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/gameEngine/CameraScaleReceiver.java deleted file mode 100644 index fb0c1cf..0000000 --- a/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/gameEngine/CameraScaleReceiver.java +++ /dev/null @@ -1,40 +0,0 @@ -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; - -public class CameraScaleReceiver implements INativeReceiver { - private Camera camera; - - public CameraScaleReceiver(Camera camera) { - this.camera = camera; - } - - @Override - public void onReceiveFromModel(Event event, SystemState nextSystemState) { - Expression message = event.getMessage(); - if (message instanceof Term) { - Expression xExp = ((Term) message).getChild(0); - Expression yExp = ((Term) message).getChild(1); - Expression zExp = ((Term) message).getChild(2); - if (xExp instanceof Term) { - xExp = ((Term) xExp).reduce(); - } - if (yExp instanceof Term) { - yExp = ((Term) yExp).reduce(); - } - if (zExp instanceof Term) { - zExp = ((Term) zExp).reduce(); - } - Float x = Float.parseFloat(xExp.toString()); - Float y = Float.parseFloat(yExp.toString()); - Float z = Float.parseFloat(zExp.toString()); - camera.transform.setScale(x, y, z); - } - } - -} diff --git a/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/gameEngine/EntityPositionReceiver.java b/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/gameEngine/EntityPositionReceiver.java deleted file mode 100644 index f1c668a..0000000 --- a/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/gameEngine/EntityPositionReceiver.java +++ /dev/null @@ -1,40 +0,0 @@ -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; - -public class EntityPositionReceiver implements INativeReceiver { - private Entity entity; - - public EntityPositionReceiver(Entity entity) { - this.entity = entity; - } - - @Override - public void onReceiveFromModel(Event event, SystemState nextSystemState) { - Expression message = event.getMessage(); - if (message instanceof Term) { - Expression xExp = ((Term) message).getChild(0); - Expression yExp = ((Term) message).getChild(1); - Expression zExp = ((Term) message).getChild(2); - if (xExp instanceof Term) { - xExp = ((Term) xExp).reduce(); - } - if (yExp instanceof Term) { - yExp = ((Term) yExp).reduce(); - } - if (zExp instanceof Term) { - zExp = ((Term) zExp).reduce(); - } - Float x = Float.parseFloat(xExp.toString()); - Float y = Float.parseFloat(yExp.toString()); - Float z = Float.parseFloat(zExp.toString()); - entity.transform.setPosition(x, y, z); - } - } - -} diff --git a/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/gameEngine/EntityRotationReceiver.java b/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/gameEngine/EntityRotationReceiver.java deleted file mode 100644 index a07ca45..0000000 --- a/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/gameEngine/EntityRotationReceiver.java +++ /dev/null @@ -1,40 +0,0 @@ -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; - -public class EntityRotationReceiver implements INativeReceiver { - private Entity entity; - - public EntityRotationReceiver(Entity entity) { - this.entity = entity; - } - - @Override - public void onReceiveFromModel(Event event, SystemState nextSystemState) { - Expression message = event.getMessage(); - if (message instanceof Term) { - Expression xExp = ((Term) message).getChild(0); - Expression yExp = ((Term) message).getChild(1); - Expression zExp = ((Term) message).getChild(2); - if (xExp instanceof Term) { - xExp = ((Term) xExp).reduce(); - } - if (yExp instanceof Term) { - yExp = ((Term) yExp).reduce(); - } - if (zExp instanceof Term) { - zExp = ((Term) zExp).reduce(); - } - Float x = Float.parseFloat(xExp.toString()); - Float y = Float.parseFloat(yExp.toString()); - Float z = Float.parseFloat(zExp.toString()); - entity.transform.setRotation(x, y, z); - } - } - -} diff --git a/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/gameEngine/EntityScaleReceiver.java b/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/gameEngine/EntityScaleReceiver.java deleted file mode 100644 index 3e9ebf7..0000000 --- a/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/gameEngine/EntityScaleReceiver.java +++ /dev/null @@ -1,40 +0,0 @@ -package simulator.interfaces.gameEngine; - -import models.algebra.Expression; -import models.algebra.Term; -import simulator.Event; -import simulator.SystemState; -import simulator.interfaces.INativeReceiver; -import gameEngine.entites.Entity; - -public class EntityScaleReceiver implements INativeReceiver { - private Entity entity; - - public EntityScaleReceiver(Entity entity) { - this.entity = entity; - } - - @Override - public void onReceiveFromModel(Event event, SystemState nextSystemState) { - Expression message = event.getMessage(); - if (message instanceof Term) { - Expression xExp = ((Term) message).getChild(0); - Expression yExp = ((Term) message).getChild(1); - Expression zExp = ((Term) message).getChild(2); - if (xExp instanceof Term) { - xExp = ((Term) xExp).reduce(); - } - if (yExp instanceof Term) { - yExp = ((Term) yExp).reduce(); - } - if (zExp instanceof Term) { - zExp = ((Term) zExp).reduce(); - } - Float x = Float.parseFloat(xExp.toString()); - Float y = Float.parseFloat(yExp.toString()); - Float z = Float.parseFloat(zExp.toString()); - entity.transform.setScale(x, y, z); - } - } - -} diff --git a/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/gameEngine/GameEnginePresenter.java b/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/gameEngine/GameEnginePresenter.java deleted file mode 100644 index 0d37247..0000000 --- a/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/gameEngine/GameEnginePresenter.java +++ /dev/null @@ -1,233 +0,0 @@ -package simulator.interfaces.gameEngine; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import gameEngine.entites.*; -import gameEngine.entites.gameComponents.*; -import gameEngine.scenes.Scene; -import gameEngine.views.Sprite; -import models.algebra.Expression; -import models.algebra.Term; -import models.dataConstraintModel.JsonTerm; -import models.dataConstraintModel.MapTerm; -import models.dataFlowModel.DataTransferChannel; -import simulator.Event; -import simulator.Resource; -import simulator.Simulator; -import simulator.SystemState; -import simulator.interfaces.INativeReceiver; - -public class GameEnginePresenter implements INativeReceiver { - public final String sceneUpdateChannelName = "SceneUpdate"; - public final String cameraPositionUpdateChannelName = "CameraPositionUpdate"; - public final String cameraRotationUpdateChannelName = "CameraRotationUpdate"; - public final String cameraScaleUpdateChannelName = "CameraScaleUpdate"; - public final String cameraProjectionUpdateChannelName = "CameraProjectionUpdate"; - public final String entityPositionUpdateChannelName = "EntityPositionUpdate"; - public final String entityRotationUpdateChannelName = "EntityRotationUpdate"; - public final String entityScaleUpdateChannelName = "EntityScaleUpdate"; - public final String spriteUpdateChannelName = "SpriteUpdate"; - - public final String sceneUpdateEventChannelName = "SceneUpdateEvent"; - public final String keyEventChannelName = "KeyEvent"; - - protected Scene scene; - protected Simulator simulator; - - protected DataTransferChannel sceneUpdateChannel; - protected DataTransferChannel cameraPositionUpdateChannel; - protected DataTransferChannel cameraRotationUpdateChannel; - protected DataTransferChannel cameraScaleUpdateChannel; - protected DataTransferChannel cameraProjectionUpdateChannel; - protected DataTransferChannel entityPositionUpdateChannel; - protected DataTransferChannel entityRotationUpdateChannel; - protected DataTransferChannel entityScaleUpdateChannel; - protected DataTransferChannel spriteUpdateChannel; - - protected DataTransferChannel sceneUpdateEventChannel; - protected DataTransferChannel keyEventChannel; - - protected Map> channelAndResourcesForEntityReceiving = new HashMap<>(); - protected Map channelAndResourcesForCameraReceiving = new HashMap<>(); - - public GameEnginePresenter(Scene scene, Simulator simulator) { - this.scene = scene; - this.simulator = simulator; - - sceneUpdateChannel = (DataTransferChannel) simulator.getModel().getChannel(sceneUpdateChannelName); - cameraPositionUpdateChannel = (DataTransferChannel) simulator.getModel().getChannel(cameraPositionUpdateChannelName); - cameraRotationUpdateChannel = (DataTransferChannel) simulator.getModel().getChannel(cameraRotationUpdateChannelName); - cameraScaleUpdateChannel = (DataTransferChannel) simulator.getModel().getChannel(cameraScaleUpdateChannelName); - cameraProjectionUpdateChannel = (DataTransferChannel) simulator.getModel().getChannel(cameraProjectionUpdateChannelName); - entityPositionUpdateChannel = (DataTransferChannel) simulator.getModel().getChannel(entityPositionUpdateChannelName); - entityRotationUpdateChannel = (DataTransferChannel) simulator.getModel().getChannel(entityRotationUpdateChannelName); - entityScaleUpdateChannel = (DataTransferChannel) simulator.getModel().getChannel(entityScaleUpdateChannelName); - spriteUpdateChannel = (DataTransferChannel) simulator.getModel().getChannel(spriteUpdateChannelName); - - sceneUpdateEventChannel = (DataTransferChannel) simulator.getModel().getInputChannel(sceneUpdateEventChannelName); - keyEventChannel = (DataTransferChannel) simulator.getModel().getInputChannel(keyEventChannelName); - simulator.addNativeReceiver(this, sceneUpdateChannel); - } - - @Override - public void onReceiveFromModel(Event event, SystemState nextSystemState) { - Expression message = event.getMessage(); - if (message instanceof Term && ((Term) message).getChildren().size() >= 2) { - Expression curScExp = ((Term) message).getChild(0); - Expression nextScExp = ((Term) message).getChild(1); - if (curScExp instanceof JsonTerm && nextScExp instanceof JsonTerm) { - JsonTerm curSc = (JsonTerm) curScExp; - JsonTerm nextSc = (JsonTerm) nextScExp; - Resource sceneResource = nextSystemState.getResource(event.getInputResource().getResourceIdentifier()); - Expression cameraExp = nextSc.get("camera"); - if (cameraExp != null && cameraExp instanceof JsonTerm) { - // Connect camera and model. - JsonTerm camera = (JsonTerm) cameraExp; - Resource cameraResource = sceneResource.getChildrenMap().get("camera"); - Camera cameraObj = scene.getCamera(); - Resource cameraTransformResource = cameraResource.getChildrenMap().get("transform"); - Resource cameraProjectionResource = cameraResource.getChildrenMap().get("projection"); - Resource cameraPositionResource = cameraTransformResource.getChildrenMap().get("position"); - Resource cameraRotationResource = cameraTransformResource.getChildrenMap().get("rotation"); - Resource cameraScaleResource = cameraTransformResource.getChildrenMap().get("scale"); - - if (channelAndResourcesForCameraReceiving.get(cameraPositionUpdateChannel) == null) { - CameraPositionReceiver nativePositionReceiver = new CameraPositionReceiver(cameraObj); - simulator.addNativeReceiver(nativePositionReceiver, cameraPositionUpdateChannel, cameraPositionResource); - channelAndResourcesForCameraReceiving.put(cameraPositionUpdateChannel, cameraPositionResource); - } - - if (channelAndResourcesForCameraReceiving.get(cameraRotationUpdateChannel) == null) { - CameraRotationReceiver nativeRotationReceiver = new CameraRotationReceiver(cameraObj); - simulator.addNativeReceiver(nativeRotationReceiver, cameraRotationUpdateChannel, cameraRotationResource); - channelAndResourcesForCameraReceiving.put(cameraRotationUpdateChannel, cameraRotationResource); - } - - if (channelAndResourcesForCameraReceiving.get(cameraScaleUpdateChannel) == null) { - CameraScaleReceiver nativeScaleReceiver = new CameraScaleReceiver(cameraObj); - simulator.addNativeReceiver(nativeScaleReceiver, cameraScaleUpdateChannel, cameraScaleResource); - channelAndResourcesForCameraReceiving.put(cameraScaleUpdateChannel, cameraScaleResource); - } - - if (channelAndResourcesForCameraReceiving.get(cameraProjectionUpdateChannel) == null) { - CameraProjectionReceiver nativeProjectionReceiver = new CameraProjectionReceiver(cameraObj); - simulator.addNativeReceiver(nativeProjectionReceiver, cameraProjectionUpdateChannel, cameraProjectionResource); - channelAndResourcesForCameraReceiving.put(cameraProjectionUpdateChannel, cameraProjectionResource); - } - } - Expression oldEntities = curSc.get("entities"); - Expression newEntities = nextSc.get("entities"); - Set oldEidSet = new HashSet<>(((MapTerm) oldEntities).keySet()); - Set newEidSet = new HashSet<>(((MapTerm) newEntities).keySet()); - oldEidSet.removeAll(((MapTerm) newEntities).keySet()); - newEidSet.removeAll(((MapTerm) oldEntities).keySet()); - if (!oldEidSet.isEmpty() || !newEidSet.isEmpty()) { - // If the set of scene entities is changed. - - // Remove old entities and their native receivers. - for (String oldEid: oldEidSet) { - scene.removeEntity(oldEid); - } - for (DataTransferChannel channel: channelAndResourcesForEntityReceiving.keySet()) { - Map widToResource = channelAndResourcesForEntityReceiving.get(channel); - for (String oldEid: oldEidSet) { - Resource resource = widToResource.remove(oldEid); - if (resource != null) { - - } simulator.removeNativeReceiver(channel, resource); - } - } - - // Add new entities. - Resource entitiesResource = sceneResource.getChildrenMap().get("entities"); - for (String newEid: newEidSet) { - Expression entityExp = ((MapTerm) newEntities).get(newEid); - if (entityExp instanceof JsonTerm) { - JsonTerm entity = (JsonTerm) entityExp; - Resource entityResource = entitiesResource.getChildrenMap().get(newEid); - Expression transformExp = entity.get("transform"); - Expression meshExp = entity.get("mesh"); - if (transformExp instanceof JsonTerm && meshExp instanceof JsonTerm) { - JsonTerm transform = (JsonTerm) transformExp; - JsonTerm mesh = (JsonTerm) meshExp; - Resource transformResource = entityResource.getChildrenMap().get("transform"); - Resource meshResource = entityResource.getChildrenMap().get("mesh"); - Expression positionExp = transform.get("position"); - Expression rotationExp = transform.get("rotation"); - Expression scaleExp = transform.get("scale"); - Resource positionResource = transformResource.getChildrenMap().get("position"); - Resource rotationResource = transformResource.getChildrenMap().get("rotation"); - Resource scaleResource = transformResource.getChildrenMap().get("scale"); - if (positionExp instanceof JsonTerm - && rotationExp instanceof JsonTerm - && scaleExp instanceof JsonTerm) { - JsonTerm position = (JsonTerm) positionExp; - JsonTerm rotation = (JsonTerm) rotationExp; - JsonTerm scale = (JsonTerm) scaleExp; - GameObject gameObj = new GameObject(newEid);//新しいIDが必要あり - gameObj.transform.setPosition(Float.parseFloat(position.get("x").toString()), - Float.parseFloat(position.get("y").toString()), - Float.parseFloat(position.get("z").toString())); - gameObj.transform.setRotation(Float.parseFloat(rotation.get("x").toString()), - Float.parseFloat(rotation.get("y").toString()), - Float.parseFloat(rotation.get("z").toString())); - gameObj.transform.setScale(Float.parseFloat(scale.get("x").toString()), - Float.parseFloat(scale.get("y").toString()), - Float.parseFloat(scale.get("z").toString())); - Expression type = mesh.get("type"); - if (type.toString().equals("\"sprite\"")) { - String texturePath = mesh.get("sprite").toString().replace("\"", ""); - Mesh meshObj = new Mesh(gameObj, Mesh.MeshType.SPRITE, texturePath); - gameObj.addComponent(meshObj); - SpriteReceiver nativeSpriteReceiver = new SpriteReceiver(meshObj); - simulator.addNativeReceiver(nativeSpriteReceiver, spriteUpdateChannel, meshResource); - - Map resources = channelAndResourcesForEntityReceiving.get(spriteUpdateChannel); - if (resources == null) { - resources = new HashMap<>(); - channelAndResourcesForEntityReceiving.put(spriteUpdateChannel, resources); - } - resources.put(newEid, meshResource); - } - scene.addEntity(newEid, gameObj); - - // Connect game entity and model. - EntityPositionReceiver nativePositionReceiver = new EntityPositionReceiver(gameObj); - simulator.addNativeReceiver(nativePositionReceiver, entityPositionUpdateChannel, positionResource); - Map resources = channelAndResourcesForEntityReceiving.get(entityPositionUpdateChannel); - if (resources == null) { - resources = new HashMap<>(); - channelAndResourcesForEntityReceiving.put(entityPositionUpdateChannel, resources); - } - resources.put(newEid, positionResource); - - EntityRotationReceiver nativeRotationReceiver = new EntityRotationReceiver(gameObj); - simulator.addNativeReceiver(nativeRotationReceiver, entityRotationUpdateChannel, rotationResource); - resources = channelAndResourcesForEntityReceiving.get(entityRotationUpdateChannel); - if (resources == null) { - resources = new HashMap<>(); - channelAndResourcesForEntityReceiving.put(entityRotationUpdateChannel, resources); - } - resources.put(newEid, rotationResource); - - EntityScaleReceiver nativeScaleReceiver = new EntityScaleReceiver(gameObj); - simulator.addNativeReceiver(nativeScaleReceiver, entityScaleUpdateChannel, scaleResource); - resources = channelAndResourcesForEntityReceiving.get(entityScaleUpdateChannel); - if (resources == null) { - resources = new HashMap<>(); - channelAndResourcesForEntityReceiving.put(entityScaleUpdateChannel, resources); - } - resources.put(newEid, scaleResource); - } - } - } - } - } - } - } - } -} diff --git a/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/gameEngine/SpriteReceiver.java b/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/gameEngine/SpriteReceiver.java deleted file mode 100644 index 162a64d..0000000 --- a/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/gameEngine/SpriteReceiver.java +++ /dev/null @@ -1,27 +0,0 @@ -package simulator.interfaces.gameEngine; - -import gameEngine.entites.gameComponents.Mesh; -import gameEngine.views.Sprite; -import models.algebra.Expression; -import models.algebra.Term; -import simulator.Event; -import simulator.SystemState; -import simulator.interfaces.INativeReceiver; - -public class SpriteReceiver implements INativeReceiver { - private Mesh mesh; - - public SpriteReceiver(Mesh mesh) { - this.mesh = mesh; - } - - @Override - public void onReceiveFromModel(Event event, SystemState nextSystemState) { - Expression message = event.getMessage(); - if (message instanceof Term) { - Expression exp = ((Term) message).getChild(0); - mesh.setSprite(exp.toString()); - } - } - -} diff --git a/GameEngine/src/main/java/gameEngine/GameEngineModelFileGenerator.java b/GameEngine/src/main/java/gameEngine/GameEngineModelFileGenerator.java index 5f976fd..0f09d3f 100644 --- a/GameEngine/src/main/java/gameEngine/GameEngineModelFileGenerator.java +++ b/GameEngine/src/main/java/gameEngine/GameEngineModelFileGenerator.java @@ -12,7 +12,7 @@ import parser.Parser.TokenStream; import parser.exceptions.*; import simulator.Simulator; -import simulator.interfaces.gameEngine.GameEnginePresenter; +import gameEngine.simulator.interfaces.GameEnginePresenter; import simulator.interfaces.timers.TimerService; import java.io.File; diff --git a/GameEngine/src/main/java/gameEngine/simulator/interfaces/CameraPositionReceiver.java b/GameEngine/src/main/java/gameEngine/simulator/interfaces/CameraPositionReceiver.java new file mode 100644 index 0000000..3b39b3f --- /dev/null +++ b/GameEngine/src/main/java/gameEngine/simulator/interfaces/CameraPositionReceiver.java @@ -0,0 +1,40 @@ +package gameEngine.simulator.interfaces; + +import gameEngine.entites.Camera; +import models.algebra.Expression; +import models.algebra.Term; +import simulator.Event; +import simulator.SystemState; +import simulator.interfaces.INativeReceiver; + +public class CameraPositionReceiver implements INativeReceiver { + private Camera camera; + + public CameraPositionReceiver(Camera camera) { + this.camera = camera; + } + + @Override + public void onReceiveFromModel(Event event, SystemState nextSystemState) { + Expression message = event.getMessage(); + if (message instanceof Term) { + Expression xExp = ((Term) message).getChild(0); + Expression yExp = ((Term) message).getChild(1); + Expression zExp = ((Term) message).getChild(2); + if (xExp instanceof Term) { + xExp = ((Term) xExp).reduce(); + } + if (yExp instanceof Term) { + yExp = ((Term) yExp).reduce(); + } + if (zExp instanceof Term) { + zExp = ((Term) zExp).reduce(); + } + Float x = Float.parseFloat(xExp.toString()); + Float y = Float.parseFloat(yExp.toString()); + Float z = Float.parseFloat(zExp.toString()); + camera.transform.setPosition(x, y, z); + } + } + +} diff --git a/GameEngine/src/main/java/gameEngine/simulator/interfaces/CameraProjectionReceiver.java b/GameEngine/src/main/java/gameEngine/simulator/interfaces/CameraProjectionReceiver.java new file mode 100644 index 0000000..4d137bc --- /dev/null +++ b/GameEngine/src/main/java/gameEngine/simulator/interfaces/CameraProjectionReceiver.java @@ -0,0 +1,24 @@ +package gameEngine.simulator.interfaces; + +import gameEngine.entites.Camera; +import models.algebra.Expression; +import models.algebra.Term; +import simulator.Event; +import simulator.SystemState; +import simulator.interfaces.INativeReceiver; + +public class CameraProjectionReceiver implements INativeReceiver { + private Camera camera; + + public CameraProjectionReceiver(Camera camera) { + this.camera = camera; + } + + @Override + public void onReceiveFromModel(Event event, SystemState nextSystemState) { + Expression message = event.getMessage(); + if (message instanceof Term) { + } + } + +} diff --git a/GameEngine/src/main/java/gameEngine/simulator/interfaces/CameraRotationReceiver.java b/GameEngine/src/main/java/gameEngine/simulator/interfaces/CameraRotationReceiver.java new file mode 100644 index 0000000..88c048f --- /dev/null +++ b/GameEngine/src/main/java/gameEngine/simulator/interfaces/CameraRotationReceiver.java @@ -0,0 +1,40 @@ +package gameEngine.simulator.interfaces; + +import gameEngine.entites.Camera; +import models.algebra.Expression; +import models.algebra.Term; +import simulator.Event; +import simulator.SystemState; +import simulator.interfaces.INativeReceiver; + +public class CameraRotationReceiver implements INativeReceiver { + private Camera camera; + + public CameraRotationReceiver(Camera camera) { + this.camera = camera; + } + + @Override + public void onReceiveFromModel(Event event, SystemState nextSystemState) { + Expression message = event.getMessage(); + if (message instanceof Term) { + Expression xExp = ((Term) message).getChild(0); + Expression yExp = ((Term) message).getChild(1); + Expression zExp = ((Term) message).getChild(2); + if (xExp instanceof Term) { + xExp = ((Term) xExp).reduce(); + } + if (yExp instanceof Term) { + yExp = ((Term) yExp).reduce(); + } + if (zExp instanceof Term) { + zExp = ((Term) zExp).reduce(); + } + Float x = Float.parseFloat(xExp.toString()); + Float y = Float.parseFloat(yExp.toString()); + Float z = Float.parseFloat(zExp.toString()); + camera.transform.setRotation(x, y, z); + } + } + +} diff --git a/GameEngine/src/main/java/gameEngine/simulator/interfaces/CameraScaleReceiver.java b/GameEngine/src/main/java/gameEngine/simulator/interfaces/CameraScaleReceiver.java new file mode 100644 index 0000000..2f09d09 --- /dev/null +++ b/GameEngine/src/main/java/gameEngine/simulator/interfaces/CameraScaleReceiver.java @@ -0,0 +1,40 @@ +package gameEngine.simulator.interfaces; + +import gameEngine.entites.Camera; +import models.algebra.Expression; +import models.algebra.Term; +import simulator.Event; +import simulator.SystemState; +import simulator.interfaces.INativeReceiver; + +public class CameraScaleReceiver implements INativeReceiver { + private Camera camera; + + public CameraScaleReceiver(Camera camera) { + this.camera = camera; + } + + @Override + public void onReceiveFromModel(Event event, SystemState nextSystemState) { + Expression message = event.getMessage(); + if (message instanceof Term) { + Expression xExp = ((Term) message).getChild(0); + Expression yExp = ((Term) message).getChild(1); + Expression zExp = ((Term) message).getChild(2); + if (xExp instanceof Term) { + xExp = ((Term) xExp).reduce(); + } + if (yExp instanceof Term) { + yExp = ((Term) yExp).reduce(); + } + if (zExp instanceof Term) { + zExp = ((Term) zExp).reduce(); + } + Float x = Float.parseFloat(xExp.toString()); + Float y = Float.parseFloat(yExp.toString()); + Float z = Float.parseFloat(zExp.toString()); + camera.transform.setScale(x, y, z); + } + } + +} diff --git a/GameEngine/src/main/java/gameEngine/simulator/interfaces/EntityPositionReceiver.java b/GameEngine/src/main/java/gameEngine/simulator/interfaces/EntityPositionReceiver.java new file mode 100644 index 0000000..9cf5b05 --- /dev/null +++ b/GameEngine/src/main/java/gameEngine/simulator/interfaces/EntityPositionReceiver.java @@ -0,0 +1,40 @@ +package gameEngine.simulator.interfaces; + +import gameEngine.entites.Entity; +import models.algebra.Expression; +import models.algebra.Term; +import simulator.Event; +import simulator.SystemState; +import simulator.interfaces.INativeReceiver; + +public class EntityPositionReceiver implements INativeReceiver { + private Entity entity; + + public EntityPositionReceiver(Entity entity) { + this.entity = entity; + } + + @Override + public void onReceiveFromModel(Event event, SystemState nextSystemState) { + Expression message = event.getMessage(); + if (message instanceof Term) { + Expression xExp = ((Term) message).getChild(0); + Expression yExp = ((Term) message).getChild(1); + Expression zExp = ((Term) message).getChild(2); + if (xExp instanceof Term) { + xExp = ((Term) xExp).reduce(); + } + if (yExp instanceof Term) { + yExp = ((Term) yExp).reduce(); + } + if (zExp instanceof Term) { + zExp = ((Term) zExp).reduce(); + } + Float x = Float.parseFloat(xExp.toString()); + Float y = Float.parseFloat(yExp.toString()); + Float z = Float.parseFloat(zExp.toString()); + entity.transform.setPosition(x, y, z); + } + } + +} diff --git a/GameEngine/src/main/java/gameEngine/simulator/interfaces/EntityRotationReceiver.java b/GameEngine/src/main/java/gameEngine/simulator/interfaces/EntityRotationReceiver.java new file mode 100644 index 0000000..a1bf209 --- /dev/null +++ b/GameEngine/src/main/java/gameEngine/simulator/interfaces/EntityRotationReceiver.java @@ -0,0 +1,40 @@ +package gameEngine.simulator.interfaces; + +import gameEngine.entites.Entity; +import models.algebra.Expression; +import models.algebra.Term; +import simulator.Event; +import simulator.SystemState; +import simulator.interfaces.INativeReceiver; + +public class EntityRotationReceiver implements INativeReceiver { + private Entity entity; + + public EntityRotationReceiver(Entity entity) { + this.entity = entity; + } + + @Override + public void onReceiveFromModel(Event event, SystemState nextSystemState) { + Expression message = event.getMessage(); + if (message instanceof Term) { + Expression xExp = ((Term) message).getChild(0); + Expression yExp = ((Term) message).getChild(1); + Expression zExp = ((Term) message).getChild(2); + if (xExp instanceof Term) { + xExp = ((Term) xExp).reduce(); + } + if (yExp instanceof Term) { + yExp = ((Term) yExp).reduce(); + } + if (zExp instanceof Term) { + zExp = ((Term) zExp).reduce(); + } + Float x = Float.parseFloat(xExp.toString()); + Float y = Float.parseFloat(yExp.toString()); + Float z = Float.parseFloat(zExp.toString()); + entity.transform.setRotation(x, y, z); + } + } + +} diff --git a/GameEngine/src/main/java/gameEngine/simulator/interfaces/EntityScaleReceiver.java b/GameEngine/src/main/java/gameEngine/simulator/interfaces/EntityScaleReceiver.java new file mode 100644 index 0000000..44f41a7 --- /dev/null +++ b/GameEngine/src/main/java/gameEngine/simulator/interfaces/EntityScaleReceiver.java @@ -0,0 +1,40 @@ +package gameEngine.simulator.interfaces; + +import models.algebra.Expression; +import models.algebra.Term; +import simulator.Event; +import simulator.SystemState; +import simulator.interfaces.INativeReceiver; +import gameEngine.entites.Entity; + +public class EntityScaleReceiver implements INativeReceiver { + private Entity entity; + + public EntityScaleReceiver(Entity entity) { + this.entity = entity; + } + + @Override + public void onReceiveFromModel(Event event, SystemState nextSystemState) { + Expression message = event.getMessage(); + if (message instanceof Term) { + Expression xExp = ((Term) message).getChild(0); + Expression yExp = ((Term) message).getChild(1); + Expression zExp = ((Term) message).getChild(2); + if (xExp instanceof Term) { + xExp = ((Term) xExp).reduce(); + } + if (yExp instanceof Term) { + yExp = ((Term) yExp).reduce(); + } + if (zExp instanceof Term) { + zExp = ((Term) zExp).reduce(); + } + Float x = Float.parseFloat(xExp.toString()); + Float y = Float.parseFloat(yExp.toString()); + Float z = Float.parseFloat(zExp.toString()); + entity.transform.setScale(x, y, z); + } + } + +} diff --git a/GameEngine/src/main/java/gameEngine/simulator/interfaces/GameEnginePresenter.java b/GameEngine/src/main/java/gameEngine/simulator/interfaces/GameEnginePresenter.java new file mode 100644 index 0000000..0c41e16 --- /dev/null +++ b/GameEngine/src/main/java/gameEngine/simulator/interfaces/GameEnginePresenter.java @@ -0,0 +1,233 @@ +package gameEngine.simulator.interfaces; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import gameEngine.entites.*; +import gameEngine.entites.gameComponents.*; +import gameEngine.scenes.Scene; +import gameEngine.views.Sprite; +import models.algebra.Expression; +import models.algebra.Term; +import models.dataConstraintModel.JsonTerm; +import models.dataConstraintModel.MapTerm; +import models.dataFlowModel.DataTransferChannel; +import simulator.Event; +import simulator.Resource; +import simulator.Simulator; +import simulator.SystemState; +import simulator.interfaces.INativeReceiver; + +public class GameEnginePresenter implements INativeReceiver { + public final String sceneUpdateChannelName = "SceneUpdate"; + public final String cameraPositionUpdateChannelName = "CameraPositionUpdate"; + public final String cameraRotationUpdateChannelName = "CameraRotationUpdate"; + public final String cameraScaleUpdateChannelName = "CameraScaleUpdate"; + public final String cameraProjectionUpdateChannelName = "CameraProjectionUpdate"; + public final String entityPositionUpdateChannelName = "EntityPositionUpdate"; + public final String entityRotationUpdateChannelName = "EntityRotationUpdate"; + public final String entityScaleUpdateChannelName = "EntityScaleUpdate"; + public final String spriteUpdateChannelName = "SpriteUpdate"; + + public final String sceneUpdateEventChannelName = "SceneUpdateEvent"; + public final String keyEventChannelName = "KeyEvent"; + + protected Scene scene; + protected Simulator simulator; + + protected DataTransferChannel sceneUpdateChannel; + protected DataTransferChannel cameraPositionUpdateChannel; + protected DataTransferChannel cameraRotationUpdateChannel; + protected DataTransferChannel cameraScaleUpdateChannel; + protected DataTransferChannel cameraProjectionUpdateChannel; + protected DataTransferChannel entityPositionUpdateChannel; + protected DataTransferChannel entityRotationUpdateChannel; + protected DataTransferChannel entityScaleUpdateChannel; + protected DataTransferChannel spriteUpdateChannel; + + protected DataTransferChannel sceneUpdateEventChannel; + protected DataTransferChannel keyEventChannel; + + protected Map> channelAndResourcesForEntityReceiving = new HashMap<>(); + protected Map channelAndResourcesForCameraReceiving = new HashMap<>(); + + public GameEnginePresenter(Scene scene, Simulator simulator) { + this.scene = scene; + this.simulator = simulator; + + sceneUpdateChannel = (DataTransferChannel) simulator.getModel().getChannel(sceneUpdateChannelName); + cameraPositionUpdateChannel = (DataTransferChannel) simulator.getModel().getChannel(cameraPositionUpdateChannelName); + cameraRotationUpdateChannel = (DataTransferChannel) simulator.getModel().getChannel(cameraRotationUpdateChannelName); + cameraScaleUpdateChannel = (DataTransferChannel) simulator.getModel().getChannel(cameraScaleUpdateChannelName); + cameraProjectionUpdateChannel = (DataTransferChannel) simulator.getModel().getChannel(cameraProjectionUpdateChannelName); + entityPositionUpdateChannel = (DataTransferChannel) simulator.getModel().getChannel(entityPositionUpdateChannelName); + entityRotationUpdateChannel = (DataTransferChannel) simulator.getModel().getChannel(entityRotationUpdateChannelName); + entityScaleUpdateChannel = (DataTransferChannel) simulator.getModel().getChannel(entityScaleUpdateChannelName); + spriteUpdateChannel = (DataTransferChannel) simulator.getModel().getChannel(spriteUpdateChannelName); + + sceneUpdateEventChannel = (DataTransferChannel) simulator.getModel().getInputChannel(sceneUpdateEventChannelName); + keyEventChannel = (DataTransferChannel) simulator.getModel().getInputChannel(keyEventChannelName); + simulator.addNativeReceiver(this, sceneUpdateChannel); + } + + @Override + public void onReceiveFromModel(Event event, SystemState nextSystemState) { + Expression message = event.getMessage(); + if (message instanceof Term && ((Term) message).getChildren().size() >= 2) { + Expression curScExp = ((Term) message).getChild(0); + Expression nextScExp = ((Term) message).getChild(1); + if (curScExp instanceof JsonTerm && nextScExp instanceof JsonTerm) { + JsonTerm curSc = (JsonTerm) curScExp; + JsonTerm nextSc = (JsonTerm) nextScExp; + Resource sceneResource = nextSystemState.getResource(event.getInputResource().getResourceIdentifier()); + Expression cameraExp = nextSc.get("camera"); + if (cameraExp != null && cameraExp instanceof JsonTerm) { + // Connect camera and model. + JsonTerm camera = (JsonTerm) cameraExp; + Resource cameraResource = sceneResource.getChildrenMap().get("camera"); + Camera cameraObj = scene.getCamera(); + Resource cameraTransformResource = cameraResource.getChildrenMap().get("transform"); + Resource cameraProjectionResource = cameraResource.getChildrenMap().get("projection"); + Resource cameraPositionResource = cameraTransformResource.getChildrenMap().get("position"); + Resource cameraRotationResource = cameraTransformResource.getChildrenMap().get("rotation"); + Resource cameraScaleResource = cameraTransformResource.getChildrenMap().get("scale"); + + if (channelAndResourcesForCameraReceiving.get(cameraPositionUpdateChannel) == null) { + CameraPositionReceiver nativePositionReceiver = new CameraPositionReceiver(cameraObj); + simulator.addNativeReceiver(nativePositionReceiver, cameraPositionUpdateChannel, cameraPositionResource); + channelAndResourcesForCameraReceiving.put(cameraPositionUpdateChannel, cameraPositionResource); + } + + if (channelAndResourcesForCameraReceiving.get(cameraRotationUpdateChannel) == null) { + CameraRotationReceiver nativeRotationReceiver = new CameraRotationReceiver(cameraObj); + simulator.addNativeReceiver(nativeRotationReceiver, cameraRotationUpdateChannel, cameraRotationResource); + channelAndResourcesForCameraReceiving.put(cameraRotationUpdateChannel, cameraRotationResource); + } + + if (channelAndResourcesForCameraReceiving.get(cameraScaleUpdateChannel) == null) { + CameraScaleReceiver nativeScaleReceiver = new CameraScaleReceiver(cameraObj); + simulator.addNativeReceiver(nativeScaleReceiver, cameraScaleUpdateChannel, cameraScaleResource); + channelAndResourcesForCameraReceiving.put(cameraScaleUpdateChannel, cameraScaleResource); + } + + if (channelAndResourcesForCameraReceiving.get(cameraProjectionUpdateChannel) == null) { + CameraProjectionReceiver nativeProjectionReceiver = new CameraProjectionReceiver(cameraObj); + simulator.addNativeReceiver(nativeProjectionReceiver, cameraProjectionUpdateChannel, cameraProjectionResource); + channelAndResourcesForCameraReceiving.put(cameraProjectionUpdateChannel, cameraProjectionResource); + } + } + Expression oldEntities = curSc.get("entities"); + Expression newEntities = nextSc.get("entities"); + Set oldEidSet = new HashSet<>(((MapTerm) oldEntities).keySet()); + Set newEidSet = new HashSet<>(((MapTerm) newEntities).keySet()); + oldEidSet.removeAll(((MapTerm) newEntities).keySet()); + newEidSet.removeAll(((MapTerm) oldEntities).keySet()); + if (!oldEidSet.isEmpty() || !newEidSet.isEmpty()) { + // If the set of scene entities is changed. + + // Remove old entities and their native receivers. + for (String oldEid: oldEidSet) { + scene.removeEntity(oldEid); + } + for (DataTransferChannel channel: channelAndResourcesForEntityReceiving.keySet()) { + Map widToResource = channelAndResourcesForEntityReceiving.get(channel); + for (String oldEid: oldEidSet) { + Resource resource = widToResource.remove(oldEid); + if (resource != null) { + + } simulator.removeNativeReceiver(channel, resource); + } + } + + // Add new entities. + Resource entitiesResource = sceneResource.getChildrenMap().get("entities"); + for (String newEid: newEidSet) { + Expression entityExp = ((MapTerm) newEntities).get(newEid); + if (entityExp instanceof JsonTerm) { + JsonTerm entity = (JsonTerm) entityExp; + Resource entityResource = entitiesResource.getChildrenMap().get(newEid); + Expression transformExp = entity.get("transform"); + Expression meshExp = entity.get("mesh"); + if (transformExp instanceof JsonTerm && meshExp instanceof JsonTerm) { + JsonTerm transform = (JsonTerm) transformExp; + JsonTerm mesh = (JsonTerm) meshExp; + Resource transformResource = entityResource.getChildrenMap().get("transform"); + Resource meshResource = entityResource.getChildrenMap().get("mesh"); + Expression positionExp = transform.get("position"); + Expression rotationExp = transform.get("rotation"); + Expression scaleExp = transform.get("scale"); + Resource positionResource = transformResource.getChildrenMap().get("position"); + Resource rotationResource = transformResource.getChildrenMap().get("rotation"); + Resource scaleResource = transformResource.getChildrenMap().get("scale"); + if (positionExp instanceof JsonTerm + && rotationExp instanceof JsonTerm + && scaleExp instanceof JsonTerm) { + JsonTerm position = (JsonTerm) positionExp; + JsonTerm rotation = (JsonTerm) rotationExp; + JsonTerm scale = (JsonTerm) scaleExp; + GameObject gameObj = new GameObject(newEid);//新しいIDが必要あり + gameObj.transform.setPosition(Float.parseFloat(position.get("x").toString()), + Float.parseFloat(position.get("y").toString()), + Float.parseFloat(position.get("z").toString())); + gameObj.transform.setRotation(Float.parseFloat(rotation.get("x").toString()), + Float.parseFloat(rotation.get("y").toString()), + Float.parseFloat(rotation.get("z").toString())); + gameObj.transform.setScale(Float.parseFloat(scale.get("x").toString()), + Float.parseFloat(scale.get("y").toString()), + Float.parseFloat(scale.get("z").toString())); + Expression type = mesh.get("type"); + if (type.toString().equals("\"sprite\"")) { + String texturePath = mesh.get("sprite").toString().replace("\"", ""); + Mesh meshObj = new Mesh(gameObj, Mesh.MeshType.SPRITE, texturePath); + gameObj.addComponent(meshObj); + SpriteReceiver nativeSpriteReceiver = new SpriteReceiver(meshObj); + simulator.addNativeReceiver(nativeSpriteReceiver, spriteUpdateChannel, meshResource); + + Map resources = channelAndResourcesForEntityReceiving.get(spriteUpdateChannel); + if (resources == null) { + resources = new HashMap<>(); + channelAndResourcesForEntityReceiving.put(spriteUpdateChannel, resources); + } + resources.put(newEid, meshResource); + } + scene.addEntity(newEid, gameObj); + + // Connect game entity and model. + EntityPositionReceiver nativePositionReceiver = new EntityPositionReceiver(gameObj); + simulator.addNativeReceiver(nativePositionReceiver, entityPositionUpdateChannel, positionResource); + Map resources = channelAndResourcesForEntityReceiving.get(entityPositionUpdateChannel); + if (resources == null) { + resources = new HashMap<>(); + channelAndResourcesForEntityReceiving.put(entityPositionUpdateChannel, resources); + } + resources.put(newEid, positionResource); + + EntityRotationReceiver nativeRotationReceiver = new EntityRotationReceiver(gameObj); + simulator.addNativeReceiver(nativeRotationReceiver, entityRotationUpdateChannel, rotationResource); + resources = channelAndResourcesForEntityReceiving.get(entityRotationUpdateChannel); + if (resources == null) { + resources = new HashMap<>(); + channelAndResourcesForEntityReceiving.put(entityRotationUpdateChannel, resources); + } + resources.put(newEid, rotationResource); + + EntityScaleReceiver nativeScaleReceiver = new EntityScaleReceiver(gameObj); + simulator.addNativeReceiver(nativeScaleReceiver, entityScaleUpdateChannel, scaleResource); + resources = channelAndResourcesForEntityReceiving.get(entityScaleUpdateChannel); + if (resources == null) { + resources = new HashMap<>(); + channelAndResourcesForEntityReceiving.put(entityScaleUpdateChannel, resources); + } + resources.put(newEid, scaleResource); + } + } + } + } + } + } + } + } +} diff --git a/GameEngine/src/main/java/gameEngine/simulator/interfaces/SpriteReceiver.java b/GameEngine/src/main/java/gameEngine/simulator/interfaces/SpriteReceiver.java new file mode 100644 index 0000000..d603f5a --- /dev/null +++ b/GameEngine/src/main/java/gameEngine/simulator/interfaces/SpriteReceiver.java @@ -0,0 +1,27 @@ +package gameEngine.simulator.interfaces; + +import gameEngine.entites.gameComponents.Mesh; +import gameEngine.views.Sprite; +import models.algebra.Expression; +import models.algebra.Term; +import simulator.Event; +import simulator.SystemState; +import simulator.interfaces.INativeReceiver; + +public class SpriteReceiver implements INativeReceiver { + private Mesh mesh; + + public SpriteReceiver(Mesh mesh) { + this.mesh = mesh; + } + + @Override + public void onReceiveFromModel(Event event, SystemState nextSystemState) { + Expression message = event.getMessage(); + if (message instanceof Term) { + Expression exp = ((Term) message).getChild(0); + mesh.setSprite(exp.toString()); + } + } + +}