diff --git a/IdleDemo-game/core/src/main/java/hundun/gdxgame/idledemo/DemoIdleGame.java b/IdleDemo-game/core/src/main/java/hundun/gdxgame/idledemo/DemoIdleGame.java index b181bcd..7479b46 100644 --- a/IdleDemo-game/core/src/main/java/hundun/gdxgame/idledemo/DemoIdleGame.java +++ b/IdleDemo-game/core/src/main/java/hundun/gdxgame/idledemo/DemoIdleGame.java @@ -69,7 +69,7 @@ protected void createStage1() { childGameConfig ); this.getSaveHandler().registerSubHandler(idleGameplayExport); - saveHandler.systemSettingLoadOrNew(); + saveHandler.systemSettingLoadOrStarter(); } @Override diff --git a/IdleDemo-game/core/src/main/java/hundun/gdxgame/idledemo/logic/DemoGameDictionary.java b/IdleDemo-game/core/src/main/java/hundun/gdxgame/idledemo/logic/DemoGameDictionary.java index 60846c4..ad9a11c 100644 --- a/IdleDemo-game/core/src/main/java/hundun/gdxgame/idledemo/logic/DemoGameDictionary.java +++ b/IdleDemo-game/core/src/main/java/hundun/gdxgame/idledemo/logic/DemoGameDictionary.java @@ -84,9 +84,9 @@ public String constructionIdToDetailDescroptionConstPart(Language language, Stri public List getMemuScreenTexts(Language language) { switch (language) { case CN: - return JavaFeatureForGwt.arraysAsList("Idle样例", "新游戏", "继续游戏"); + return JavaFeatureForGwt.arraysAsList("Idle样例", "新游戏", "继续游戏", "语言", "重启后生效"); default: - return JavaFeatureForGwt.arraysAsList("Demo游戏", "新游戏", "继续游戏"); + return JavaFeatureForGwt.arraysAsList("IdleDemo", "New Game", "Continue", "Language", "Take effect after restart"); } } } diff --git a/IdleDemo-game/core/src/main/java/hundun/gdxgame/idledemo/logic/DemoSaveHandler.java b/IdleDemo-game/core/src/main/java/hundun/gdxgame/idledemo/logic/DemoSaveHandler.java index b1b2aa8..f9fe0c7 100644 --- a/IdleDemo-game/core/src/main/java/hundun/gdxgame/idledemo/logic/DemoSaveHandler.java +++ b/IdleDemo-game/core/src/main/java/hundun/gdxgame/idledemo/logic/DemoSaveHandler.java @@ -6,7 +6,7 @@ import hundun.gdxgame.gamelib.base.IFrontend; import hundun.gdxgame.gamelib.base.save.ISaveTool; import hundun.gdxgame.gamelib.base.util.JavaFeatureForGwt; -import hundun.gdxgame.gamelib.starter.save.StarterSaveHandler; +import hundun.gdxgame.gamelib.starter.save.PairChildrenSaveHandler; import hundun.gdxgame.idleshare.gamelib.framework.data.ConstructionSaveData; import hundun.gdxgame.idleshare.gamelib.framework.data.GameplaySaveData; import hundun.gdxgame.idleshare.gamelib.framework.data.SystemSettingSaveData; @@ -16,10 +16,10 @@ * @author hundun * Created on 2023/02/17 */ -public class DemoSaveHandler extends StarterSaveHandler { +public class DemoSaveHandler extends PairChildrenSaveHandler { public DemoSaveHandler(IFrontend frontEnd, ISaveTool saveTool) { - super(frontEnd, RootSaveData.Factory.INSTANCE, saveTool); + super(frontEnd, RootSaveData.RootSaveExtension.INSTANCE, saveTool); } @@ -44,4 +44,5 @@ protected RootSaveData genereateStarterRootSaveData() { .build(); } + } diff --git a/IdleDemo-game/core/src/main/java/hundun/gdxgame/idledemo/logic/RootSaveData.java b/IdleDemo-game/core/src/main/java/hundun/gdxgame/idledemo/logic/RootSaveData.java index 30d5876..194ce09 100644 --- a/IdleDemo-game/core/src/main/java/hundun/gdxgame/idledemo/logic/RootSaveData.java +++ b/IdleDemo-game/core/src/main/java/hundun/gdxgame/idledemo/logic/RootSaveData.java @@ -1,7 +1,7 @@ package hundun.gdxgame.idledemo.logic; -import hundun.gdxgame.gamelib.starter.save.StarterSaveHandler.IFactory; +import hundun.gdxgame.gamelib.starter.save.IRootSaveExtension; import hundun.gdxgame.idleshare.gamelib.framework.data.GameplaySaveData; import hundun.gdxgame.idleshare.gamelib.framework.data.SystemSettingSaveData; import hundun.gdxgame.idleshare.gamelib.framework.util.text.Language; @@ -23,9 +23,9 @@ public class RootSaveData { GameplaySaveData gameplaySave; SystemSettingSaveData systemSettingSaveData; - public static final class Factory implements IFactory { + public static final class RootSaveExtension implements IRootSaveExtension { - public static final Factory INSTANCE = new Factory(); + public static final RootSaveExtension INSTANCE = new RootSaveExtension(); @Override public SystemSettingSaveData getSystemSave(RootSaveData rootSaveData) { diff --git a/IdleDemo-game/core/src/main/java/hundun/gdxgame/idledemo/ui/screen/DemoMenuScreen.java b/IdleDemo-game/core/src/main/java/hundun/gdxgame/idledemo/ui/screen/DemoMenuScreen.java index 8c4065a..894b7f5 100644 --- a/IdleDemo-game/core/src/main/java/hundun/gdxgame/idledemo/ui/screen/DemoMenuScreen.java +++ b/IdleDemo-game/core/src/main/java/hundun/gdxgame/idledemo/ui/screen/DemoMenuScreen.java @@ -15,11 +15,10 @@ public class DemoMenuScreen extends BaseIdleMenuScreen, T_SAVE> extends BaseHundunScreen { +public abstract class BaseIdleMenuScreen, T_SAVE> + extends BaseHundunScreen { // private MenuComponent menu; @@ -40,8 +43,9 @@ public abstract class BaseIdleMenuScreen, T_ TextButton buttonNewGame; TextButton buttonIntoSettingScreen; + + public BaseIdleMenuScreen(T_GAME game, - String titleText, InputListener buttonContinueGameInputListener, InputListener buttonNewGameInputListener) { super(game, game.getSharedViewport()); @@ -75,7 +79,7 @@ private void initScene2d() { uiRootTable.add(titleLabel) .row(); - if (game.getSaveHandler().gameHasSave()) { + if (game.getSaveHandler().hasContinuedGameplaySave()) { uiRootTable.add(buttonContinueGame) .height(BUTTON_BIG_HEIGHT) .fillY() @@ -84,12 +88,24 @@ private void initScene2d() { } uiRootTable.add(buttonNewGame) - .height(game.getSaveHandler().gameHasSave() ? BUTTON_SMALL_HEIGHT : BUTTON_BIG_HEIGHT) + .height(game.getSaveHandler().hasContinuedGameplaySave() ? BUTTON_SMALL_HEIGHT : BUTTON_BIG_HEIGHT) .fillY() .padTop(10) .row(); - uiRootTable.debugAll(); + uiRootTable.add(new LanguageSwitchBoard<>(this, + Language.values(), + game.getIdleGameplayExport().getLanguage(), + memuScreenTexts.get(3), + memuScreenTexts.get(4), + it -> game.getIdleGameplayExport().setLanguage(it)) + ) + .padTop(10); + + if (game.debugMode) { + uiRootTable.debugAll(); + } + } @Override diff --git a/idleshare/core/src/hundun/gdxgame/idleshare/core/starter/ui/screen/menu/LanguageSwitchBoard.java b/idleshare/core/src/hundun/gdxgame/idleshare/core/starter/ui/screen/menu/LanguageSwitchBoard.java new file mode 100644 index 0000000..27f056f --- /dev/null +++ b/idleshare/core/src/hundun/gdxgame/idleshare/core/starter/ui/screen/menu/LanguageSwitchBoard.java @@ -0,0 +1,66 @@ +package hundun.gdxgame.idleshare.core.starter.ui.screen.menu; + +import java.util.function.Consumer; +import java.util.function.Function; + +import com.badlogic.gdx.scenes.scene2d.Actor; +import com.badlogic.gdx.scenes.scene2d.ui.ImageButton; +import com.badlogic.gdx.scenes.scene2d.ui.Label; +import com.badlogic.gdx.scenes.scene2d.ui.SelectBox; +import com.badlogic.gdx.scenes.scene2d.ui.SelectBox.SelectBoxStyle; +import com.badlogic.gdx.scenes.scene2d.utils.ChangeListener; +import com.badlogic.gdx.scenes.scene2d.utils.ChangeListener.ChangeEvent; +import com.badlogic.gdx.scenes.scene2d.ui.Table; + +import hundun.gdxgame.corelib.base.util.DrawableFactory; +import hundun.gdxgame.idleshare.core.framework.BaseIdleGame; +import hundun.gdxgame.idleshare.gamelib.framework.util.text.Language; +import lombok.Getter; + +/** + * @author hundun + * Created on 2023/03/02 + */ +public class LanguageSwitchBoard, T_SAVE> extends Table { + + BaseIdleMenuScreen parent; + @Getter + SelectBox selectBox; + Label restartHintLabel; + + LanguageSwitchBoard(BaseIdleMenuScreen parent, + Language[] values, + Language current, + String startText, + String hintText, + Consumer onSelect + ) { + this.parent = parent; + this.setBackground(DrawableFactory.getSimpleBoardBackground()); + + + this.add(new Label(startText, parent.getGame().getMainSkin())); + + + this.selectBox = new SelectBox<>(parent.getGame().getMainSkin()); + selectBox.setItems(values); + selectBox.setSelected(current); + selectBox.addListener(new ChangeListener() { + @Override + public void changed(ChangeEvent event, Actor actor) { + restartHintLabel.setVisible(true); + onSelect.accept(selectBox.getSelected()); + } + }); + this.add(selectBox).row(); + + this.restartHintLabel = new Label(hintText, parent.getGame().getMainSkin()); + restartHintLabel.setVisible(false); + this.add(restartHintLabel); + + + } + + + +} diff --git a/idleshare/gamelib/src/hundun/gdxgame/idleshare/gamelib/export/IdleGameplayExport.java b/idleshare/gamelib/src/hundun/gdxgame/idleshare/gamelib/export/IdleGameplayExport.java index d0b9c22..3a896c2 100644 --- a/idleshare/gamelib/src/hundun/gdxgame/idleshare/gamelib/export/IdleGameplayExport.java +++ b/idleshare/gamelib/src/hundun/gdxgame/idleshare/gamelib/export/IdleGameplayExport.java @@ -7,8 +7,8 @@ import hundun.gdxgame.gamelib.base.IFrontend; import hundun.gdxgame.gamelib.starter.listerner.ILogicFrameListener; -import hundun.gdxgame.gamelib.starter.save.StarterSaveHandler.ISubGameplaySaveHandler; -import hundun.gdxgame.gamelib.starter.save.StarterSaveHandler.ISubSystemSettingSaveHandler; +import hundun.gdxgame.gamelib.starter.save.PairChildrenSaveHandler.ISubGameplaySaveHandler; +import hundun.gdxgame.gamelib.starter.save.PairChildrenSaveHandler.ISubSystemSettingSaveHandler; import hundun.gdxgame.idleshare.gamelib.framework.IdleGameplayContext; import hundun.gdxgame.idleshare.gamelib.framework.data.ChildGameConfig; import hundun.gdxgame.idleshare.gamelib.framework.data.GameplaySaveData; @@ -39,6 +39,7 @@ public class IdleGameplayExport implements ILogicFrameListener, private ChildGameConfig childGameConfig; @Getter private IGameDictionary gameDictionary; + @Setter @Getter private Language language; @@ -155,7 +156,7 @@ public boolean constructionCanChangeWorkingLevel(String id, int delta) { } @Override - public void applyGameSaveData(GameplaySaveData gameplaySaveData) { + public void applyGameplaySaveData(GameplaySaveData gameplaySaveData) { Collection constructions = gameplayContext.getConstructionFactory().getConstructions(); for (BaseConstruction construction : constructions) { if (gameplaySaveData.getConstructionSaveDataMap().containsKey(construction.getId())) { @@ -169,7 +170,7 @@ public void applyGameSaveData(GameplaySaveData gameplaySaveData) { } @Override - public void currentSituationToSaveData(GameplaySaveData gameplaySaveData) { + public void currentSituationToGameplaySaveData(GameplaySaveData gameplaySaveData) { Collection constructions = gameplayContext.getConstructionFactory().getConstructions(); gameplaySaveData.setConstructionSaveDataMap(constructions.stream() .collect(Collectors.toMap( diff --git a/idleshare/gamelib/src/hundun/gdxgame/idleshare/gamelib/framework/IdleGameplayContext.java b/idleshare/gamelib/src/hundun/gdxgame/idleshare/gamelib/framework/IdleGameplayContext.java index d65a2ce..3f26129 100644 --- a/idleshare/gamelib/src/hundun/gdxgame/idleshare/gamelib/framework/IdleGameplayContext.java +++ b/idleshare/gamelib/src/hundun/gdxgame/idleshare/gamelib/framework/IdleGameplayContext.java @@ -5,7 +5,6 @@ import java.util.stream.Collectors; import hundun.gdxgame.gamelib.base.IFrontend; -import hundun.gdxgame.gamelib.starter.save.StarterSaveHandler.ISubGameplaySaveHandler; import hundun.gdxgame.idleshare.gamelib.framework.data.ChildGameConfig; import hundun.gdxgame.idleshare.gamelib.framework.data.GameplaySaveData; import hundun.gdxgame.idleshare.gamelib.framework.model.construction.BaseConstructionFactory;