X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;ds=sidebyside;f=core%2Fsrc%2Fru%2Fdeadsoftware%2Fcavedroid%2Fmenu%2FMenuProc.java;h=aa3888a5b0c26181b38f1102694b8344e6ba7b9b;hb=76a3b56287b1262f78f3b43a4aac5660338d67ad;hp=6accb5726147700119cb351f1d327d7760df4937;hpb=b62c3a39c63a5a558352627026c6019ff6110071;p=cavedroid.git diff --git a/core/src/ru/deadsoftware/cavedroid/menu/MenuProc.java b/core/src/ru/deadsoftware/cavedroid/menu/MenuProc.java index 6accb57..aa3888a 100644 --- a/core/src/ru/deadsoftware/cavedroid/menu/MenuProc.java +++ b/core/src/ru/deadsoftware/cavedroid/menu/MenuProc.java @@ -5,13 +5,15 @@ import com.badlogic.gdx.utils.ObjectMap; import ru.deadsoftware.cavedroid.CaveGame; import ru.deadsoftware.cavedroid.MainConfig; import ru.deadsoftware.cavedroid.menu.objects.Button; -import ru.deadsoftware.cavedroid.menu.submenus.Menu; -import ru.deadsoftware.cavedroid.menu.submenus.MenuMain; -import ru.deadsoftware.cavedroid.menu.submenus.MenuNewGame; +import ru.deadsoftware.cavedroid.menu.submenus.*; import ru.deadsoftware.cavedroid.misc.Renderer; import javax.inject.Inject; +import java.lang.reflect.Method; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + import static ru.deadsoftware.cavedroid.misc.Assets.*; @MenuScope @@ -30,6 +32,10 @@ public class MenuProc extends Renderer { mMainConfig.getCaveGame().loadGame(); } + public void optionsClicked() { + mCurrentMenu = mMenuOptions; + } + public void quitClicked() { Gdx.app.exit(); } @@ -45,20 +51,24 @@ public class MenuProc extends Renderer { public void backClicked() { mCurrentMenu = mMenuMain; } + + public void setPreference(String key, Object value) { + mMainConfig.setPreference(key, value.toString()); + } } private final MainConfig mMainConfig; private final MenuMain mMenuMain; private final MenuNewGame mMenuNewGame; + private final MenuOptions mMenuOptions; private Menu mCurrentMenu; @Inject public MenuProc( MainConfig mainConfig, - MenuMain.Factory menuMainFactory, - MenuNewGame.Factory menuNewGameFactory + MenusFactory menusFactory ) { super(mainConfig.getWidth(), mainConfig.getHeight()); @@ -66,18 +76,42 @@ public class MenuProc extends Renderer { Input menuInput = new Input(); - mMenuMain = menuMainFactory.get(getWidth(), getHeight(), this::drawButton, menuInput); - mMenuNewGame = menuNewGameFactory.get(getWidth(), getHeight(), this::drawButton, menuInput); + mMenuMain = menusFactory.getMainMenu(getWidth(), getHeight(), this::drawButton, menuInput); + mMenuNewGame = menusFactory.getMenuNewGame(getWidth(), getHeight(), this::drawButton, menuInput); + mMenuOptions = menusFactory.getMenuOptions(getWidth(), getHeight(), this::drawButton, menuInput); mCurrentMenu = mMenuMain; } + private String processVariables(String raw) { + final Pattern pattern = Pattern.compile("%%([A-Za-z]+)%%", Pattern.CASE_INSENSITIVE); + final Matcher matcher = pattern.matcher(raw); + while (matcher.find()) { + for (int i = 0; i < matcher.groupCount(); i++) { + try { + final String group = matcher.group(i); + final String name = group.replaceAll("%%", ""); + final Method method = mMainConfig.getClass().getMethod(name); + final String value = method.invoke(mMainConfig).toString(); + raw = raw.replace(group, value); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + } + + return raw; + } + private void drawButton(Button button) { spriter.draw(textureRegions.get("button_" + button.getType()), button.getX(), button.getY()); setFontColor(255, 255, 255); - drawString(button.getLabel(), - (button.getX() + button.getWidth() / 2) - (float) getStringWidth(button.getLabel()) / 2, - (button.getY() + button.getHeight() / 2) - (float) getStringHeight(button.getLabel()) / 2); + + String label = processVariables(button.getLabel()); + + drawString(label, + (button.getX() + button.getWidth() / 2) - (float) getStringWidth(label) / 2, + (button.getY() + button.getHeight() / 2) - (float) getStringHeight(label) / 2); } @Override