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
.Field
;
14 import java
.lang
.reflect
.Method
;
15 import java
.util
.List
;
16 import java
.util
.regex
.Matcher
;
17 import java
.util
.regex
.Pattern
;
19 import static ru
.deadsoftware
.cavedroid
.misc
.Assets
.*;
22 public class MenuProc
extends Renderer
{
25 private void startNewGame(int gameMode
) {
26 mMainConfig
.getCaveGame().newGame(gameMode
);
29 public void newGameClicked() {
30 mCurrentMenu
= mMenuNewGame
;
33 public void loadGameClicked() {
34 mMainConfig
.getCaveGame().loadGame();
37 public void optionsClicked() {
38 mCurrentMenu
= mMenuOptions
;
41 public void quitClicked() {
45 public void survivalClicked() {
49 public void creativeClicked() {
53 public void backClicked() {
54 mCurrentMenu
= mMenuMain
;
57 public void toggleDynamicCamera() {
58 mMainConfig
.setUseDynamicCamera(!mMainConfig
.isUseDynamicCamera());
62 private final MainConfig mMainConfig
;
64 private final MenuMain mMenuMain
;
65 private final MenuNewGame mMenuNewGame
;
66 private final MenuOptions mMenuOptions
;
68 private Menu mCurrentMenu
;
72 MainConfig mainConfig
,
73 MenusFactory menusFactory
75 super(mainConfig
.getWidth(), mainConfig
.getHeight());
77 mMainConfig
= mainConfig
;
79 Input menuInput
= new Input();
81 mMenuMain
= menusFactory
.getMainMenu(getWidth(), getHeight(), this::drawButton
, menuInput
);
82 mMenuNewGame
= menusFactory
.getMenuNewGame(getWidth(), getHeight(), this::drawButton
, menuInput
);
83 mMenuOptions
= menusFactory
.getMenuOptions(getWidth(), getHeight(), this::drawButton
, menuInput
);
85 mCurrentMenu
= mMenuMain
;
88 private String
processVariables(String raw
) {
89 final Pattern pattern
= Pattern
.compile("%%([A-Za-z]+)%%", Pattern
.CASE_INSENSITIVE
);
90 final Matcher matcher
= pattern
.matcher(raw
);
91 while (matcher
.find()) {
92 for (int i
= 0; i
< matcher
.groupCount(); i
++) {
94 final String group
= matcher
.group(i
);
95 final String name
= group
.replaceAll("%%", "");
96 final Method method
= mMainConfig
.getClass().getMethod(name
);
97 final String value
= method
.invoke(mMainConfig
).toString();
98 raw
= raw
.replace(group
, value
);
99 } catch (Exception e
) {
100 throw new RuntimeException(e
);
108 private void drawButton(Button button
) {
109 spriter
.draw(textureRegions
.get("button_" + button
.getType()), button
.getX(), button
.getY());
110 setFontColor(255, 255, 255);
112 String label
= processVariables(button
.getLabel());
115 (button
.getX() + button
.getWidth() / 2) - (float) getStringWidth(label
) / 2,
116 (button
.getY() + button
.getHeight() / 2) - (float) getStringHeight(label
) / 2);
120 public boolean touchUp(int screenX
, int screenY
, int pointer
, int mb
) {
121 screenX
*= getWidth() / Gdx
.graphics
.getWidth();
122 screenY
*= getHeight() / Gdx
.graphics
.getHeight();
123 for (ObjectMap
.Entry
<String
, Button
> entry
: mCurrentMenu
.getButtons()) {
124 Button button
= entry
.value
;
125 if (button
.getRect().contains(screenX
, screenY
)) {
126 if (button
.getType() > 0) {
136 public void render(float delta
) {
138 mCurrentMenu
.draw(spriter
);
139 drawString("CaveDroid " + CaveGame
.VERSION
, 0,
140 getHeight() - getStringHeight("CaveDroid " + CaveGame
.VERSION
) * 1.5f);
144 public void reset() {
145 mCurrentMenu
= mMenuMain
;