diff --git a/core/src/ru/deadsoftware/cavedroid/menu/MenuProc.java b/core/src/ru/deadsoftware/cavedroid/menu/MenuProc.java
index f96d4d42756545c2d13cfc20de9a74655f986c15..aa3888a5b0c26181b38f1102694b8344e6ba7b9b 100644 (file)
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
public class Input {
private void startNewGame(int gameMode) {
- mMainConfig.getCaveGame().newGame();
+ mMainConfig.getCaveGame().newGame(gameMode);
}
public void newGameClicked() {
mMainConfig.getCaveGame().loadGame();
}
+ public void optionsClicked() {
+ mCurrentMenu = mMenuOptions;
+ }
+
public void quitClicked() {
Gdx.app.exit();
}
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) {
+ public MenuProc(
+ MainConfig mainConfig,
+ MenusFactory menusFactory
+ ) {
super(mainConfig.getWidth(), mainConfig.getHeight());
mMainConfig = mainConfig;
Input menuInput = new Input();
- mMenuMain = new MenuMain(getWidth(), getHeight(), this::drawButton, mainConfig, menuInput);
- mMenuNewGame = new MenuNewGame(getWidth(), getHeight(), this::drawButton, mainConfig, 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