DEADSOFTWARE

Update version script
[cavedroid.git] / core / src / ru / deadsoftware / cavedroid / menu / MenuProc.java
1 package ru.deadsoftware.cavedroid.menu;
3 import com.badlogic.gdx.Gdx;
4 import com.badlogic.gdx.utils.ObjectMap;
5 import ru.deadsoftware.cavedroid.CaveGame;
6 import ru.deadsoftware.cavedroid.MainConfig;
7 import ru.deadsoftware.cavedroid.menu.objects.Button;
8 import ru.deadsoftware.cavedroid.menu.submenus.*;
9 import ru.deadsoftware.cavedroid.misc.Renderer;
11 import javax.inject.Inject;
13 import java.lang.reflect.Method;
14 import java.util.regex.Matcher;
15 import java.util.regex.Pattern;
17 import static ru.deadsoftware.cavedroid.misc.Assets.*;
19 @MenuScope
20 public class MenuProc extends Renderer {
22 public class Input {
23 private void startNewGame(int gameMode) {
24 mMainConfig.getCaveGame().newGame(gameMode);
25 }
27 public void newGameClicked() {
28 mCurrentMenu = mMenuNewGame;
29 }
31 public void loadGameClicked() {
32 mMainConfig.getCaveGame().loadGame();
33 }
35 public void optionsClicked() {
36 mCurrentMenu = mMenuOptions;
37 }
39 public void quitClicked() {
40 Gdx.app.exit();
41 }
43 public void survivalClicked() {
44 startNewGame(0);
45 }
47 public void creativeClicked() {
48 startNewGame(1);
49 }
51 public void backClicked() {
52 mCurrentMenu = mMenuMain;
53 }
55 public void setPreference(String key, Object value) {
56 mMainConfig.setPreference(key, value.toString());
57 }
58 }
60 private final MainConfig mMainConfig;
62 private final MenuMain mMenuMain;
63 private final MenuNewGame mMenuNewGame;
64 private final MenuOptions mMenuOptions;
66 private Menu mCurrentMenu;
68 @Inject
69 public MenuProc(
70 MainConfig mainConfig,
71 MenusFactory menusFactory
72 ) {
73 super(mainConfig.getWidth(), mainConfig.getHeight());
75 mMainConfig = mainConfig;
77 Input menuInput = new Input();
79 mMenuMain = menusFactory.getMainMenu(getWidth(), getHeight(), this::drawButton, menuInput);
80 mMenuNewGame = menusFactory.getMenuNewGame(getWidth(), getHeight(), this::drawButton, menuInput);
81 mMenuOptions = menusFactory.getMenuOptions(getWidth(), getHeight(), this::drawButton, menuInput);
83 mCurrentMenu = mMenuMain;
84 }
86 private String processVariables(String raw) {
87 final Pattern pattern = Pattern.compile("%%([A-Za-z]+)%%", Pattern.CASE_INSENSITIVE);
88 final Matcher matcher = pattern.matcher(raw);
89 while (matcher.find()) {
90 for (int i = 0; i < matcher.groupCount(); i++) {
91 try {
92 final String group = matcher.group(i);
93 final String name = group.replaceAll("%%", "");
94 final Method method = mMainConfig.getClass().getMethod(name);
95 final String value = method.invoke(mMainConfig).toString();
96 raw = raw.replace(group, value);
97 } catch (Exception e) {
98 throw new RuntimeException(e);
99 }
103 return raw;
106 private void drawButton(Button button) {
107 spriter.draw(textureRegions.get("button_" + button.getType()), button.getX(), button.getY());
108 setFontColor(255, 255, 255);
110 String label = processVariables(button.getLabel());
112 drawString(label,
113 (button.getX() + button.getWidth() / 2) - (float) getStringWidth(label) / 2,
114 (button.getY() + button.getHeight() / 2) - (float) getStringHeight(label) / 2);
117 @Override
118 public boolean touchUp(int screenX, int screenY, int pointer, int mb) {
119 screenX *= getWidth() / Gdx.graphics.getWidth();
120 screenY *= getHeight() / Gdx.graphics.getHeight();
121 for (ObjectMap.Entry<String, Button> entry : mCurrentMenu.getButtons()) {
122 Button button = entry.value;
123 if (button.getRect().contains(screenX, screenY)) {
124 if (button.getType() > 0) {
125 button.clicked();
127 break;
130 return false;
133 @Override
134 public void render(float delta) {
135 spriter.begin();
136 mCurrentMenu.draw(spriter);
137 drawString("CaveDroid " + CaveGame.VERSION, 0,
138 getHeight() - getStringHeight("CaveDroid " + CaveGame.VERSION) * 1.5f);
139 spriter.end();
142 public void reset() {
143 mCurrentMenu = mMenuMain;