summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorilotterytea <iltsu@alright.party>2022-12-09 19:15:55 +0600
committerilotterytea <iltsu@alright.party>2022-12-09 19:15:55 +0600
commit07381c027833b8f170c893a1fe7cb7a074b67437 (patch)
tree4275d7155cd326cd783fbe83ec31f6d564d8970f
parentbd5cbc55f5daacca1936cb4c4da2200dba49737d (diff)
ещё немножко и доработаю менюе
-rw-r--r--core/src/com/ilotterytea/maxoning/screens/MenuScreen.java214
-rw-r--r--core/src/com/ilotterytea/maxoning/ui/SaveGameWidget.java89
-rw-r--r--core/src/com/ilotterytea/maxoning/ui/SavegameInfo.kt124
3 files changed, 192 insertions, 235 deletions
diff --git a/core/src/com/ilotterytea/maxoning/screens/MenuScreen.java b/core/src/com/ilotterytea/maxoning/screens/MenuScreen.java
index 56b21d0..4be257d 100644
--- a/core/src/com/ilotterytea/maxoning/screens/MenuScreen.java
+++ b/core/src/com/ilotterytea/maxoning/screens/MenuScreen.java
@@ -5,6 +5,7 @@ import com.badlogic.gdx.audio.Music;
import com.badlogic.gdx.files.FileHandle;
import com.badlogic.gdx.graphics.*;
import com.badlogic.gdx.graphics.g2d.TextureAtlas;
+import com.badlogic.gdx.graphics.g2d.TextureRegion;
import com.badlogic.gdx.math.Interpolation;
import com.badlogic.gdx.scenes.scene2d.InputEvent;
import com.badlogic.gdx.scenes.scene2d.Stage;
@@ -19,14 +20,14 @@ import com.badlogic.gdx.utils.Align;
import com.badlogic.gdx.utils.viewport.FillViewport;
import com.ilotterytea.maxoning.MaxonConstants;
import com.ilotterytea.maxoning.MaxonGame;
+import com.ilotterytea.maxoning.anim.SpriteUtils;
import com.ilotterytea.maxoning.player.MaxonSavegame;
+import com.ilotterytea.maxoning.player.utils.PetUtils;
import com.ilotterytea.maxoning.ui.*;
import com.ilotterytea.maxoning.utils.I18N;
-import com.ilotterytea.maxoning.utils.formatters.NumberFormatter;
import com.ilotterytea.maxoning.utils.serialization.GameDataSystem;
import java.awt.*;
-import java.io.IOException;
import java.util.ArrayList;
import java.util.Locale;
@@ -36,7 +37,7 @@ public class MenuScreen implements Screen {
final Stage stage;
final Skin skin;
- TextureAtlas brandAtlas;
+ TextureAtlas brandAtlas, mainAtlas;
Image brandLogo;
@@ -50,15 +51,27 @@ public class MenuScreen implements Screen {
MaxonSavegame sav;
+ ArrayList<SavegameInfo> savInfos;
+ ArrayList<Image> savImgs;
+
+ int curSav;
+ SavegameInfo curSavInfo;
+ Image curSavImg;
+
private final MovingChessBackground bg;
public MenuScreen(final MaxonGame game) {
this.game = game;
+ savInfos = new ArrayList<>();
+ savImgs = new ArrayList<>();
+ curSav = -1;
+
// Stage and skin:
this.stage = new Stage(new FillViewport(Gdx.graphics.getWidth(), Gdx.graphics.getHeight()));
this.skin = game.assetManager.get("MainSpritesheet.skin", Skin.class);
brandAtlas = game.assetManager.get("sprites/gui/brand.atlas", TextureAtlas.class);
+ mainAtlas = game.assetManager.get("MainSpritesheet.atlas", TextureAtlas.class);
sav = GameDataSystem.load("00.maxon");
@@ -99,46 +112,6 @@ public class MenuScreen implements Screen {
stage.addActor(menuTable);
- // // Press start:
- startBtn = new TextButton(game.locale.TranslatableText("menu.pressStart"), skin, "text");
- startBtn.setPosition((stage.getWidth() / 2f) - (startBtn.getWidth() / 2f), 8f);
-
- startBtn.addListener(new ClickListener() {
- @Override
- public void clicked(InputEvent event, float x, float y) {
- try {
- game.setScreen(new GameScreen(
- game,
- (sav == null) ? new MaxonSavegame() : sav,
- 0
- ));
- } catch (IOException | ClassNotFoundException e) {
- throw new RuntimeException(e);
- }
- }
- });
-
- startBtn.addAction(
- Actions.repeat(
- -1,
- Actions.sequence(
- Actions.fadeIn(1f),
- Actions.delay(2f),
- Actions.fadeOut(1f),
- Actions.delay(2f)
- )
- )
- );
-
- stage.addActor(startBtn);
-
- // // Savegame:
- savLabel = new Label(
- (sav == null) ? game.locale.TranslatableText("menu.last_savegame.empty") : game.locale.FormattedText("menu.last_savegame.found", sav.petName, NumberFormatter.format(sav.points), NumberFormatter.format(sav.multiplier), String.valueOf(sav.inv.size())), skin);
- savLabel.setPosition((stage.getWidth() / 2f) - (savLabel.getWidth() / 2f), 8f + startBtn.getY() + startBtn.getHeight());
-
- stage.addActor(savLabel);
-
// // Logo:
brandLogo = new Image(brandAtlas.findRegion("brand"));
brandLogo.setPosition(
@@ -185,6 +158,42 @@ public class MenuScreen implements Screen {
skin.getDrawable("tile_01"),
skin.getDrawable("tile_02")
);
+
+ generateSaves();
+
+ updateCurrentVisualSavegame(false);
+
+ // Save control buttons:
+ ImageButton rArrowBtn = new ImageButton(skin, "right_arrow");
+ rArrowBtn.setPosition(
+ stage.getWidth() - (rArrowBtn.getWidth() + 64f),
+ (stage.getHeight() / 2f) - (rArrowBtn.getHeight() / 2f)
+ );
+ rArrowBtn.addListener(new ClickListener() {
+ @Override
+ public void clicked(InputEvent event, float x, float y) {
+ Gdx.app.log("TEST", String.format("%s - %s", savImgs.size(), savInfos.size()));
+ updateCurrentVisualSavegame(false);
+ }
+ });
+
+ stage.addActor(rArrowBtn);
+
+
+ // Save control buttons:
+ ImageButton lArrowBtn = new ImageButton(skin, "left_arrow");
+ lArrowBtn.setPosition(
+ lArrowBtn.getWidth() + 64f,
+ (stage.getHeight() / 2f) - (lArrowBtn.getHeight() / 2f)
+ );
+ lArrowBtn.addListener(new ClickListener() {
+ @Override
+ public void clicked(InputEvent event, float x, float y) {
+ updateCurrentVisualSavegame(true);
+ }
+ });
+
+ stage.addActor(lArrowBtn);
}
@Override public void show() {
@@ -511,61 +520,72 @@ public class MenuScreen implements Screen {
actTable.add(saveBtn).pad(5f);
}
- /*private void loadSavegamesToTable(Table table) {
- for (int i = 0; i < 3; i++) {
- if (new File(MaxonConstants.GAME_SAVEGAME_FOLDER + String.format("/0%s.maxon", i)).exists()) {
- final MaxonSavegame sav = GameDataSystem.load("0" + i + ".maxon");
- SaveGameWidget widget = new SaveGameWidget(
- skin, sav
- );
- final int finalI = i;
- widget.addListener(new ClickListener() {
- @Override
- public void clicked(InputEvent event, float x, float y) {
- try {
- game.setScreen(new GameScreen(game, sav, finalI));
- } catch (IOException | ClassNotFoundException e) {
- throw new RuntimeException(e);
- }
- dispose();
- }
- });
- table.add(widget).width(512f).padBottom(8f).row();
- } else {
-
- final MaxonSavegame sav = new MaxonSavegame();
- final SaveGameWidget widget = new SaveGameWidget(
- skin, widgetSkin, null
- );
- final int finalI = i;
- widget.addListener(new ClickListener() {
- @Override
- public void clicked(InputEvent event, float x, float y) {
- sav.petId = 0;
- sav.inv = new ArrayList<>();
- sav.multiplier = 5;
- sav.points = 0;
- sav.roomId = 0;
- sav.seed = System.currentTimeMillis();
- sav.name = "SAVE " + (finalI + 1);
- sav.elapsedTime = 0;
- sav.lastTimestamp = System.currentTimeMillis();
- sav.outInv = new ArrayList<>();
-
- GameDataSystem.save(sav, "0" + finalI + ".maxon");
-
- try {
- game.setScreen(new GameScreen(game, sav, finalI));
- } catch (IOException | ClassNotFoundException e) {
- throw new RuntimeException(e);
- }
- dispose();
- }
- });
- table.add(widget).width(512f).padBottom(8f).row();
- }
+ private void generateSaves() {
+ ArrayList<MaxonSavegame> saves = GameDataSystem.getSavegames();
+ int i = -1;
+
+ for (MaxonSavegame sav : saves) {
+ i++;
+
+ savInfos.add(new SavegameInfo(game, skin, sav, i));
+ savImgs.add(new Image(
+ PetUtils.animatedImageById(game.assetManager, sav.petId).getDrawable()
+ )
+ );
+ }
+
+ savInfos.add(new SavegameInfo(game, skin, null, i + 1));
+ savImgs.add(new Image(
+ mainAtlas.findRegion("unknown")
+ ));
+ }
+
+ private void updateCurrentVisualSavegame(boolean indexNegative) {
+ if (indexNegative) curSav--;
+ else curSav++;
+
+ if (curSav < 0) {
+ curSav = savInfos.size() - 1;
}
- }*/
+
+ if (savInfos.size() - 1 < curSav || savImgs.size() - 1 < curSav) {
+ curSav = 0;
+ }
+
+ // Set the image:
+ if (curSavImg != null) {
+ curSavImg.remove();
+ curSavImg.setSize(
+ curSavImg.getWidth() / 2f,
+ curSavImg.getHeight() / 2f
+ );
+ }
+ curSavImg = savImgs.get(curSav);
+
+ curSavImg.setSize(
+ curSavImg.getWidth() * 2f,
+ curSavImg.getHeight() * 2f
+ );
+
+ curSavImg.setPosition(
+ (stage.getWidth() / 2f) - (curSavImg.getWidth() / 2f),
+ (stage.getHeight() / 2f) - (curSavImg.getHeight() / 2f)
+ );
+
+ stage.addActor(curSavImg);
+
+ // Set the info:
+ if (curSavInfo != null) curSavInfo.remove();
+
+ curSavInfo = savInfos.get(curSav);
+
+ curSavInfo.setPosition(
+ (stage.getWidth() / 2f) - (curSavInfo.getWidth() / 2f),
+ 6f
+ );
+
+ stage.addActor(curSavInfo);
+ }
@Override public void pause() {}
@Override public void resume() {}
diff --git a/core/src/com/ilotterytea/maxoning/ui/SaveGameWidget.java b/core/src/com/ilotterytea/maxoning/ui/SaveGameWidget.java
deleted file mode 100644
index e52d1a3..0000000
--- a/core/src/com/ilotterytea/maxoning/ui/SaveGameWidget.java
+++ /dev/null
@@ -1,89 +0,0 @@
-package com.ilotterytea.maxoning.ui;
-
-
-import com.badlogic.gdx.graphics.Color;
-import com.badlogic.gdx.scenes.scene2d.ui.*;
-import com.badlogic.gdx.utils.Align;
-import com.badlogic.gdx.utils.Null;
-import com.ilotterytea.maxoning.player.MaxonSavegame;
-import com.ilotterytea.maxoning.utils.formatters.NumberFormatter;
-
-public class SaveGameWidget extends Button {
- public SaveGameWidget(
- Skin skin,
- @Null MaxonSavegame sav
- ) {
- // Setting the stack:
- super(skin, "slot");
-
- // // // Save slot data:
- // // Info row:
- Table infoTable = new Table();
-
- // Top left label (name):
- Label topleftLabel = new Label((sav != null) ? sav.name : "[EMPTY]", skin);
- topleftLabel.setAlignment(Align.left);
- infoTable.add(topleftLabel).width(256f);
-
- // Top right label (elapsed time):
- String time = "--:--";
-
- if (sav != null) {
- long h = sav.elapsedTime / 1000 / 60 / 60;
- long m = sav.elapsedTime / 1000 / 60;
-
- time = String.format(
- "%s:%s",
- ((h < 10) ? "0" : "") + h,
- ((m < 10) ? "0" : "") + m
- );
- }
-
- Label toprightLabel = new Label(
- time,
- skin
- );
- toprightLabel.setAlignment(Align.right);
- infoTable.add(toprightLabel).width(256f);
-
- // // Description row:
- Table descTable = new Table();
-
- // Bottom left label (purchased items):
- Label bottomleftLabel = new Label(
- String.format(
- "%s purchased items",
- (sav != null) ? sav.inv.size() : "?"
- ),
- skin
- );
- bottomleftLabel.setAlignment(Align.left);
- descTable.add(bottomleftLabel).width(256f);
-
- // Bottom right label (points/multiplier):
- Label pointsLabel = new Label(
- String.format(
- "%s$/x%s",
- (sav != null) ? NumberFormatter.format(sav.points) : "---",
- (sav != null) ? NumberFormatter.format(sav.multiplier) : "0"
- ),
- skin
- );
- pointsLabel.setAlignment(Align.right);
- descTable.add(pointsLabel).width(256f);
-
- // Adding the tables to main table:
- Table summaryTable = new Table();
- summaryTable.add(infoTable).pad(5f).row();
- summaryTable.add(descTable).pad(5f).row();
-
- if (sav == null) {
- topleftLabel.setColor(Color.DARK_GRAY);
- toprightLabel.setColor(Color.DARK_GRAY);
- bottomleftLabel.setColor(Color.DARK_GRAY);
- pointsLabel.setColor(Color.DARK_GRAY);
- }
-
- super.add(summaryTable);
- }
-}
diff --git a/core/src/com/ilotterytea/maxoning/ui/SavegameInfo.kt b/core/src/com/ilotterytea/maxoning/ui/SavegameInfo.kt
index df4936d..e210ca8 100644
--- a/core/src/com/ilotterytea/maxoning/ui/SavegameInfo.kt
+++ b/core/src/com/ilotterytea/maxoning/ui/SavegameInfo.kt
@@ -17,7 +17,7 @@ import com.ilotterytea.maxoning.utils.formatters.NumberFormatter
class SavegameInfo(
game: MaxonGame,
skin: Skin,
- sav: MaxonSavegame,
+ sav: MaxonSavegame?,
savId: Int
) : Table(skin) {
init {
@@ -26,64 +26,90 @@ class SavegameInfo(
this.height = 324f
this.align(Align.top)
- val title = Label("Save $savId (${sav.name})", skin, "with_background")
+ val title = Label(if (sav != null) "Save ${savId + 1}" else "New Game", skin, "with_background")
this.add(title).width(506f).pad(6f).row()
val content = Table()
content.align(Align.top)
this.add(content).width(506f).maxWidth(506f).pad(6f).expandY().row()
- // - - - P O I N T S - - - :
- // Label for points:
- val pointsLabel = Label("Points", skin)
- content.add(pointsLabel).width(246f).pad(4f)
- // Label for points count:
- val pointsCLabel = Label(NumberFormatter.format(sav.points.toLong()), skin)
- pointsCLabel.setAlignment(Align.right)
- content.add(pointsCLabel).width(246f).pad(4f).row()
-
- // - - - M U L T I P L I E R - - - :
- // Label for multiplier:
- val mpLabel = Label("Multiplier", skin)
- content.add(mpLabel).width(246f).pad(4f)
- // Label for multiplier count:
- val mpCLabel = Label("+${NumberFormatter.format(sav.multiplier.toLong())}/click", skin)
- mpCLabel.setAlignment(Align.right)
- content.add(mpCLabel).width(246f).pad(4f).row()
-
- // - - - P U R C H A S E D I T E M S - - - :
- // Label for purchased items:
- val piLabel = Label("Inventory size", skin)
- content.add(piLabel).width(246f).pad(4f)
- // Label for purchased items count:
- val piCLabel = Label(sav.inv.size.toString(), skin)
- piCLabel.setAlignment(Align.right)
- content.add(piCLabel).width(246f).pad(4f).row()
-
// - - - A C T I O N S - - - :
val actions = Table()
this.add(actions).width(508f).row()
- // Deletion button:
- val delButton = ImageButton(skin, "delete")
-
- delButton.addListener(object : ClickListener() {
- override fun clicked(event: InputEvent?, x: Float, y: Float) {
- super.clicked(event, x, y)
- }
- })
-
- actions.add(delButton).pad(4f)
- // Play button:
- val playButton = TextButton("Play!", skin)
-
- playButton.addListener(object : ClickListener() {
- override fun clicked(event: InputEvent, x: Float, y: Float) {
- game.screen = GameScreen(game, sav, savId)
- }
- })
-
- actions.add(playButton).width(444f)
+ if (sav != null) {
+ // - - - P O I N T S - - - :
+ // Label for points:
+ val pointsLabel = Label("Points", skin)
+ content.add(pointsLabel).width(246f).pad(4f)
+ // Label for points count:
+ val pointsCLabel = Label(NumberFormatter.format(sav.points.toLong()), skin)
+ pointsCLabel.setAlignment(Align.right)
+ content.add(pointsCLabel).width(246f).pad(4f).row()
+
+ // - - - M U L T I P L I E R - - - :
+ // Label for multiplier:
+ val mpLabel = Label("Multiplier", skin)
+ content.add(mpLabel).width(246f).pad(4f)
+ // Label for multiplier count:
+ val mpCLabel = Label("+${NumberFormatter.format(sav.multiplier.toLong())}/click", skin)
+ mpCLabel.setAlignment(Align.right)
+ content.add(mpCLabel).width(246f).pad(4f).row()
+
+ // - - - P U R C H A S E D I T E M S - - - :
+ // Label for purchased items:
+ val piLabel = Label("Inventory size", skin)
+ content.add(piLabel).width(246f).pad(4f)
+ // Label for purchased items count:
+ val piCLabel = Label(sav.inv.size.toString(), skin)
+ piCLabel.setAlignment(Align.right)
+ content.add(piCLabel).width(246f).pad(4f).row()
+
+ // Deletion button:
+ val delButton = ImageButton(skin, "delete")
+
+ delButton.addListener(object : ClickListener() {
+ override fun clicked(event: InputEvent?, x: Float, y: Float) {
+ super.clicked(event, x, y)
+ }
+ })
+
+ actions.add(delButton).pad(4f)
+
+ // Play button:
+ val playButton = TextButton("Play!", skin)
+
+ playButton.addListener(object : ClickListener() {
+ override fun clicked(event: InputEvent, x: Float, y: Float) {
+ game.screen = GameScreen(game, sav, savId)
+ }
+ })
+
+ actions.add(playButton).width(444f)
+ } else {
+ // - - - N A M E - - - :
+ // Label for points:
+ val nameLabel = Label("Your name", skin)
+ content.add(nameLabel).width(246f).pad(4f)
+ // Label for points count:
+ val nameField = TextField("test", skin)
+ content.add(nameField).width(246f).pad(4f).row()
+
+
+ // Play button:
+ val playButton = TextButton("START!", skin)
+
+ playButton.addListener(object : ClickListener() {
+ override fun clicked(event: InputEvent, x: Float, y: Float) {
+ val _sav = MaxonSavegame()
+ _sav.name = nameField.messageText
+
+ game.screen = GameScreen(game, _sav, savId)
+ }
+ })
+
+ actions.add(playButton).width(502f)
+ }
}