From f16f091ef080dac086308d30ea301a24af5bf1b5 Mon Sep 17 00:00:00 2001 From: Almas Baimagambetov Date: Fri, 31 Dec 2021 08:55:48 +0000 Subject: [PATCH] added currency --- .../almasb/fxglgames/td/CurrencyService.java | 29 ++++++++++++++++ .../almasb/fxglgames/td/TowerDefenseApp.java | 1 + .../almasb/fxglgames/td/ui/CurrencyIcon.java | 24 ++++++++++++++ .../almasb/fxglgames/td/ui/CurrencyView.java | 33 +++++++++++++++++++ .../td/ui/scene/TowerDefenseMainMenu.java | 8 ++++- 5 files changed, 94 insertions(+), 1 deletion(-) create mode 100644 TowerDefense/src/main/java/com/almasb/fxglgames/td/CurrencyService.java create mode 100644 TowerDefense/src/main/java/com/almasb/fxglgames/td/ui/CurrencyIcon.java create mode 100644 TowerDefense/src/main/java/com/almasb/fxglgames/td/ui/CurrencyView.java diff --git a/TowerDefense/src/main/java/com/almasb/fxglgames/td/CurrencyService.java b/TowerDefense/src/main/java/com/almasb/fxglgames/td/CurrencyService.java new file mode 100644 index 00000000..19912036 --- /dev/null +++ b/TowerDefense/src/main/java/com/almasb/fxglgames/td/CurrencyService.java @@ -0,0 +1,29 @@ +package com.almasb.fxglgames.td; + +import com.almasb.fxgl.core.EngineService; +import com.almasb.fxgl.core.collection.PropertyMap; +import javafx.beans.property.IntegerProperty; + +/** + * @author Almas Baimagambetov (almaslvl@gmail.com) + */ +public class CurrencyService extends EngineService { + + private PropertyMap map = new PropertyMap(); + + public CurrencyService() { + map.setValue("currency", 0); + } + + public int getCurrency() { + return map.getInt("currency"); + } + + public void setCurrency(int value) { + map.setValue("currency", value); + } + + public IntegerProperty currencyProperty() { + return map.intProperty("currency"); + } +} diff --git a/TowerDefense/src/main/java/com/almasb/fxglgames/td/TowerDefenseApp.java b/TowerDefense/src/main/java/com/almasb/fxglgames/td/TowerDefenseApp.java index a4475fa7..543e4dbb 100644 --- a/TowerDefense/src/main/java/com/almasb/fxglgames/td/TowerDefenseApp.java +++ b/TowerDefense/src/main/java/com/almasb/fxglgames/td/TowerDefenseApp.java @@ -55,6 +55,7 @@ protected void initSettings(GameSettings settings) { settings.setIntroEnabled(false); settings.setMainMenuEnabled(true); settings.setGameMenuEnabled(true); + settings.addEngineService(CurrencyService.class); settings.setSceneFactory(new SceneFactory() { @Override public FXGLMenu newMainMenu() { diff --git a/TowerDefense/src/main/java/com/almasb/fxglgames/td/ui/CurrencyIcon.java b/TowerDefense/src/main/java/com/almasb/fxglgames/td/ui/CurrencyIcon.java new file mode 100644 index 00000000..b4195fba --- /dev/null +++ b/TowerDefense/src/main/java/com/almasb/fxglgames/td/ui/CurrencyIcon.java @@ -0,0 +1,24 @@ +package com.almasb.fxglgames.td.ui; + +import javafx.scene.Parent; +import javafx.scene.paint.Color; +import javafx.scene.shape.Circle; + +/** + * @author Almas Baimagambetov (almaslvl@gmail.com) + */ +public class CurrencyIcon extends Parent { + + public CurrencyIcon() { + var circleOuter = new Circle(20, Color.YELLOW); + circleOuter.setStroke(Color.BLACK); + circleOuter.setStrokeWidth(4.0); + + var circleInner = new Circle(11, Color.YELLOW.brighter()); + circleInner.setStroke(Color.BLACK); + circleInner.setStrokeWidth(2.0); + circleInner.setTranslateY(-4); + + getChildren().addAll(circleOuter, circleInner); + } +} diff --git a/TowerDefense/src/main/java/com/almasb/fxglgames/td/ui/CurrencyView.java b/TowerDefense/src/main/java/com/almasb/fxglgames/td/ui/CurrencyView.java new file mode 100644 index 00000000..e1a01ca8 --- /dev/null +++ b/TowerDefense/src/main/java/com/almasb/fxglgames/td/ui/CurrencyView.java @@ -0,0 +1,33 @@ +package com.almasb.fxglgames.td.ui; + +import com.almasb.fxgl.dsl.FXGL; +import com.almasb.fxglgames.td.CurrencyService; +import javafx.scene.Parent; +import javafx.scene.paint.Color; +import javafx.scene.shape.Rectangle; + +/** + * @author Almas Baimagambetov (almaslvl@gmail.com) + */ +public class CurrencyView extends Parent { + + public CurrencyView() { + var bg = new Rectangle(100, 34, Color.color(0.5, 0.5, 0.5, 0.75)); + bg.setStroke(Color.color(0, 0, 0, 0.9)); + bg.setStrokeWidth(2.5); + bg.setArcWidth(10); + bg.setArcHeight(10); + + var icon = new CurrencyIcon(); + icon.setTranslateX(15); + icon.setTranslateY(bg.getHeight() / 2.0); + + var text = FXGL.getUIFactoryService().newText("", Color.WHITE, 22.0); + text.setTranslateX(55); + text.setTranslateY(25); + + text.textProperty().bind(FXGL.getService(CurrencyService.class).currencyProperty().asString()); + + getChildren().addAll(bg, icon, text); + } +} diff --git a/TowerDefense/src/main/java/com/almasb/fxglgames/td/ui/scene/TowerDefenseMainMenu.java b/TowerDefense/src/main/java/com/almasb/fxglgames/td/ui/scene/TowerDefenseMainMenu.java index 69f607e2..7c850037 100644 --- a/TowerDefense/src/main/java/com/almasb/fxglgames/td/ui/scene/TowerDefenseMainMenu.java +++ b/TowerDefense/src/main/java/com/almasb/fxglgames/td/ui/scene/TowerDefenseMainMenu.java @@ -11,6 +11,7 @@ import com.almasb.fxglgames.td.TowerDefenseApp; import com.almasb.fxglgames.td.TowerDefenseFactory; import com.almasb.fxglgames.td.data.LevelData; +import com.almasb.fxglgames.td.ui.CurrencyView; import javafx.scene.Group; import javafx.scene.Node; import javafx.scene.Parent; @@ -155,6 +156,10 @@ public TowerDefenseMainMenu() { contentBox.setTranslateX(bgInnerRight.getTranslateX() + 25); contentBox.setTranslateY(220); + var currencyView = new CurrencyView(); + currencyView.setTranslateX(getAppWidth() - 300); + currencyView.setTranslateY(15); + getContentRoot().getChildren().addAll( bg, bgInnerLeft, @@ -162,7 +167,8 @@ public TowerDefenseMainMenu() { menuBox, contentBox, title, - version + version, + currencyView ); }