X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=core%2Fsrc%2Fru%2Fdeadsoftware%2Fcavedroid%2Fmenu%2Fsubmenus%2FMenu.java;h=7e793b7b1db1d77a21a85dbb2faf30e4437974bd;hb=19b878cb64fd7153355fbdf748707726765a434a;hp=dcb06d3d937877a2cf3aa8ea4dd8daf05ad119f9;hpb=59d48c1b28c570755327a8fb0827fa57e7fd3914;p=cavedroid.git diff --git a/core/src/ru/deadsoftware/cavedroid/menu/submenus/Menu.java b/core/src/ru/deadsoftware/cavedroid/menu/submenus/Menu.java index dcb06d3..7e793b7 100644 --- a/core/src/ru/deadsoftware/cavedroid/menu/submenus/Menu.java +++ b/core/src/ru/deadsoftware/cavedroid/menu/submenus/Menu.java @@ -1,26 +1,34 @@ package ru.deadsoftware.cavedroid.menu.submenus; +import com.badlogic.gdx.Application; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.files.FileHandle; import com.badlogic.gdx.graphics.g2d.SpriteBatch; import com.badlogic.gdx.graphics.g2d.TextureRegion; import com.badlogic.gdx.utils.ArrayMap; import com.badlogic.gdx.utils.JsonValue; -import ru.deadsoftware.cavedroid.CaveGame; -import ru.deadsoftware.cavedroid.GameScreen; +import kotlin.text.StringsKt; +import ru.deadsoftware.cavedroid.MainConfig; +import ru.deadsoftware.cavedroid.menu.MenuProc; +import ru.deadsoftware.cavedroid.menu.objects.BooleanOptionButton; import ru.deadsoftware.cavedroid.menu.objects.Button; import ru.deadsoftware.cavedroid.menu.objects.ButtonEventListener; import ru.deadsoftware.cavedroid.menu.objects.ButtonRenderer; import ru.deadsoftware.cavedroid.misc.Assets; +import ru.deadsoftware.cavedroid.misc.utils.AssetLoader; import java.util.HashMap; public abstract class Menu { - private ButtonRenderer buttonRenderer; + protected final MainConfig mMainConfig; + protected final MenuProc.Input mMenuInput; + protected final AssetLoader mAssetLoader; - private float width; - private float height; + private final ButtonRenderer mButtonRenderer; + + private final float mWidth; + private final float mHeight; /** * {@link ArrayMap} of {@link Button Buttons} of this menu screen @@ -32,10 +40,18 @@ public abstract class Menu { * @param height Viewport height * @param buttonRenderer {@link ButtonRenderer} that will draw the buttons of this menu */ - Menu(float width, float height, ButtonRenderer buttonRenderer) { - this.width = width; - this.height = height; - this.buttonRenderer = buttonRenderer; + Menu(float width, + float height, + ButtonRenderer buttonRenderer, + MainConfig mainConfig, + MenuProc.Input menuInput, + AssetLoader assetLoader) { + mWidth = width; + mHeight = height; + mButtonRenderer = buttonRenderer; + mMainConfig = mainConfig; + mMenuInput = menuInput; + mAssetLoader = assetLoader; initButtons(); } @@ -61,15 +77,29 @@ public abstract class Menu { } HashMap eventListeners = getButtonEventListeners(); JsonValue json = Assets.jsonReader.parse(jsonFile); - int y = (int) height / 4; + int y = (int) mHeight / 4; for (JsonValue key = json.child(); key != null; key = key.next(), y += Button.HEIGHT + 10) { - buttons.put(key.name(), - new Button(Assets.getStringFromJson(key, "label", ""), - (int) width / 2 - Button.WIDTH / 2, - Assets.getIntFromJson(key, "y", y), - Assets.getIntFromJson(key, "type", Button.NORMAL), - eventListeners.containsKey(key.name()) ? eventListeners.get(key.name()) : () -> { - })); + + if (Gdx.app.getType() == Application.ApplicationType.Android && + !Assets.getBooleanFromJson(key, "visible_on_android", true)) { + continue; + } + + String optionType = Assets.getStringFromJson(key, "option_type", ""); + String label = Assets.getStringFromJson(key, "label", ""); + int x = (int) mWidth / 2 - Button.WIDTH / 2; + int type = Assets.getIntFromJson(key, "type", Button.NORMAL); + String defaultValue = Assets.getStringFromJson(key, "default_value", ""); + + + Button button = switch (optionType) { + case "boolean" -> + new BooleanOptionButton(mMainConfig, key.name(), Boolean.parseBoolean(defaultValue), label, x, y, type); + default -> + new Button(label, x, y, type, eventListeners.containsKey(key.name()) ? eventListeners.get(key.name()) : () -> {}); + }; + + buttons.put(key.name(), button); } } @@ -82,24 +112,24 @@ public abstract class Menu { TextureRegion background = Assets.textureRegions.get("background"); TextureRegion gamelogo = Assets.textureRegions.get("gamelogo"); - for (int x = 0; x <= width / 16; x++) { - for (int y = 0; y <= height / 16; y++) { + for (int x = 0; x <= mWidth / 16; x++) { + for (int y = 0; y <= mHeight / 16; y++) { spriter.draw(background, x * 16, y * 16); } } - spriter.draw(gamelogo, width / 2 - (float) gamelogo.getRegionWidth() / 2, 8); + spriter.draw(gamelogo, mWidth / 2 - (float) gamelogo.getRegionWidth() / 2, 8); - float inputX = Gdx.input.getX() * width / GameScreen.getWidth(); - float inputY = Gdx.input.getY() * height / GameScreen.getHeight(); + float inputX = Gdx.input.getX() * mWidth / Gdx.graphics.getWidth(); + float inputY = Gdx.input.getY() * mHeight / Gdx.graphics.getHeight(); for (Button button : buttons.values()) { if (button.getType() > 0) { - if (button.getRect().contains(inputX, inputY) && (!CaveGame.TOUCH || Gdx.input.isTouched())) { + if (button.getRect().contains(inputX, inputY) && (/*!CaveGame.TOUCH || */Gdx.input.isTouched())) { button.setType(2); } else { button.setType(1); } } - button.draw(buttonRenderer); + button.draw(mButtonRenderer); } }