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
.*;
20 public class MenuProc
extends Renderer
{
23 private void startNewGame(int gameMode
) {
24 mMainConfig
.getCaveGame().newGame(gameMode
);
27 public void newGameClicked() {
28 mCurrentMenu
= mMenuNewGame
;
31 public void loadGameClicked() {
32 mMainConfig
.getCaveGame().loadGame();
35 public void optionsClicked() {
36 mCurrentMenu
= mMenuOptions
;
39 public void quitClicked() {
43 public void survivalClicked() {
47 public void creativeClicked() {
51 public void backClicked() {
52 mCurrentMenu
= mMenuMain
;
55 public void setPreference(String key
, Object value
) {
56 mMainConfig
.setPreference(key
, value
.toString());
60 private final MainConfig mMainConfig
;
62 private final MenuMain mMenuMain
;
63 private final MenuNewGame mMenuNewGame
;
64 private final MenuOptions mMenuOptions
;
66 private Menu mCurrentMenu
;
70 MainConfig mainConfig
,
71 MenusFactory menusFactory
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
;
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
++) {
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
);
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());
113 (button
.getX() + button
.getWidth() / 2) - (float) getStringWidth(label
) / 2,
114 (button
.getY() + button
.getHeight() / 2) - (float) getStringHeight(label
) / 2);
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) {
134 public void render(float delta
) {
136 mCurrentMenu
.draw(spriter
);
137 drawString("CaveDroid " + CaveGame
.VERSION
, 0,
138 getHeight() - getStringHeight("CaveDroid " + CaveGame
.VERSION
) * 1.5f);
142 public void reset() {
143 mCurrentMenu
= mMenuMain
;