protected GameScene(int width, int height) { super(width, height); getContentRoot().getChildren().addAll(gameRoot, uiRoot); if (FXGL.getSettings().isProfilingEnabled()) { initProfilerText(0, height - 120); } initViewport(width, height); addDebugListener(); log.debug("Game scene initialized: " + width + "x" + height); }
@Override public void onEntityAdded(Entity entity) { initView(entity.getViewComponent()); if (FXGL.getSettings().getDevShowPosition().getValue()) { addDebugView(entity); } }
private void initView(ViewComponent viewComponent) { EntityView view = viewComponent.getView(); addGameView(view, viewComponent.getRenderLayer()); viewComponent.renderLayerProperty().addListener((o, oldLayer, newLayer) -> { getRenderGroup(oldLayer).getChildren().remove(view); getRenderGroup(newLayer).getChildren().add(view); }); }
@Override public void onEntityRemoved(Entity entity) { destroyView(entity.getViewComponent()); EntityView debugView = debugPositions.get(entity); if (debugView != null) { debugView.translateXProperty().unbind(); debugView.translateYProperty().unbind(); removeGameView(debugView, RenderLayer.TOP); debugPositions.remove(entity); } }
/** * Add nodes to the UI overlay. * * @param nodes UI nodes to add */ public void addUINodes(Node... nodes) { for (Node node : nodes) addUINode(node); }
private void addDebugListener() { FXGL.getSettings().getDevShowPosition().addListener((o, prev, show) -> { if (show) { forEach(FXGL.getApp().getGameWorld().getEntities(), e -> { addDebugView(e); }); } else { forEach(debugPositions, entry -> { EntityView view = entry.value; view.translateXProperty().unbind(); view.translateYProperty().unbind(); removeGameView(view, RenderLayer.TOP); }); debugPositions.clear(); } }); }
public void onUpdate(double tpf) { getViewport().onUpdate(tpf); }
/** * Add a view to the game root. * * @param view view to add */ public void addGameView(EntityView view, RenderLayer layer) { getRenderGroup(layer).getChildren().add(view); }
private void addDebugView(Entity e) { Text textPos = new Text(""); textPos.textProperty().bind(e.xProperty().asString("(%.0f, ").concat(e.yProperty().asString("%.0f)"))); EntityView view = new EntityView(new Circle(2.5)); view.addNode(textPos); view.translateXProperty().bind(e.xProperty()); view.translateYProperty().bind(e.yProperty()); addGameView(view, RenderLayer.TOP); debugPositions.put(e, view); }
public void addUI(UI ui) { addUINode(ui.getRoot()); }
/** * Unbinds viewport, clears game views and UI nodes. */ public void clear() { log.debug("Clearing game scene"); getViewport().unbind(); gameRoot.getChildren().clear(); uiRoot.getChildren().setAll(profilerText); }
public void addGameView(EntityView view) { getRenderGroup(RenderLayer.DEFAULT).getChildren().add(view); }
public void openEditDialog() { UI ui = app.getAssetLoader().loadUI("dialog_edit_entity.fxml", new DialogEditEntityController()); MDIWindow window = new InGameWindow("Edit Entity", InGameWindow.WindowDecor.ALL); window.setPrefSize(380, 450); window.setContentPane(new Pane(ui.getRoot())); app.getGameScene().addUINode(window); }
/** * Generates view from tiles. * * @param map parsed Tiled map * @param layerName layer name as specified by Tiled * @param renderLayer created view will use this render layer * @return builder */ public EntityBuilder viewFromTiles(TiledMap map, String layerName, RenderLayer renderLayer) { entity.getViewComponent().setView(tilesToView(map, layerName), false); entity.getViewComponent().setRenderLayer(renderLayer); // https://github.com/AlmasB/FXGL/issues/474 if (FXGL.getSettings().isExperimentalTiledLargeMap()) { entity.xProperty().bind(FXGL.getApp().getGameScene().getViewport().xProperty()); entity.yProperty().bind(FXGL.getApp().getGameScene().getViewport().yProperty()); } return this; }
/** * Remove a view from the game root. * * @param view view to remove */ public void removeGameView(EntityView view, RenderLayer layer) { getRenderGroup(layer).getChildren().remove(view); }
public void openAddDialog() { UI ui = app.getAssetLoader().loadUI("dialog_add_entity.fxml", new DialogAddEntityController()); MDIWindow window = new InGameWindow("Add Entity", InGameWindow.WindowDecor.ALL); window.setPrefSize(350, 300); window.setContentPane(new Pane(ui.getRoot())); app.getGameScene().addUINode(window); }
private void initViewport(double w, double h) { Viewport viewport = getViewport(); gameRoot.layoutXProperty().bind(viewport.xProperty().negate()); gameRoot.layoutYProperty().bind(viewport.yProperty().negate()); Scale scale = new Scale(); scale.pivotXProperty().bind(viewport.xProperty()); scale.pivotYProperty().bind(viewport.yProperty()); scale.xProperty().bind(viewport.zoomProperty()); scale.yProperty().bind(viewport.zoomProperty()); gameRoot.getTransforms().add(scale); Rotate rotate = new Rotate(0, Rotate.Z_AXIS); rotate.pivotXProperty().bind(viewport.xProperty().add(w / 2)); rotate.pivotYProperty().bind(viewport.yProperty().add(h / 2)); rotate.angleProperty().bind(viewport.angleProperty().negate()); gameRoot.getTransforms().add(rotate); }
public void openColorAdjustDialog() { if (uiColorAdjust == null) { uiColorAdjust = app.getAssetLoader().loadUI("dialog_color_adjust.fxml", new ColorAdjustController()); } MDIWindow window = new InGameWindow("Color Adjust", InGameWindow.WindowDecor.ALL); window.setPrefSize(380, 450); window.setContentPane(new Pane(uiColorAdjust.getRoot())); app.getGameScene().addUINode(window); }