Advertisement
Guest User

title menu

a guest
Jul 26th, 2017
139
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 14.66 KB | None | 0 0
  1. package rewind.client.menu;
  2.  
  3. import javafx.application.Application;
  4. import javafx.application.Platform;
  5. import javafx.geometry.Insets;
  6. import javafx.scene.Node;
  7. import javafx.scene.Group;
  8. import javafx.scene.SubScene;
  9. import javafx.scene.control.*;
  10. import javafx.scene.layout.GridPane;
  11. import javafx.scene.input.KeyEvent;
  12. import javafx.scene.input.KeyCode;
  13. import javafx.event.EventHandler;
  14. import javafx.stage.Stage;
  15. import javafx.util.Pair;
  16. import rewind.basicrooms.TestRoom;
  17. import rewind.client.jfx.UI;
  18. import rewind.client.network.NetworkTest;
  19. //map creator link
  20. import rewind.client.mapCreator.mapCreator;
  21. // credits scroll link
  22. import rewind.client.creditsScroll.CreditsScroll;
  23.  
  24. public class TitleMenu extends MenuGroup {
  25.  
  26. public TitleMenu(Stage ps, Group g){
  27. super(ps,g);
  28. //todo - keymapping class
  29. //enables esc key to toggle menu.
  30. getPrimaryStage().addEventHandler(KeyEvent.KEY_PRESSED, new EventHandler<KeyEvent>
  31. () {
  32.  
  33. @Override
  34. public void handle(KeyEvent t) {
  35. if(t.getCode()==KeyCode.ESCAPE)
  36. {
  37. escToMenu();
  38. }
  39. }
  40. });
  41.  
  42. generateMenu();
  43. }
  44.  
  45.  
  46.  
  47. /**
  48. * generates the main menu.
  49. */
  50. public void generateMenu(){
  51. // child nodes must be added above parent nodes.
  52. // the function of the button and conditions when it is displayed can be overridden.
  53.  
  54. //MISC
  55. MenuNode goBack = new MenuNode("Back"){
  56. @Override
  57. public void selectItem() {
  58. backMenu();
  59. //todo - keymap escape button to this
  60. }
  61. };
  62. menuList.add(goBack);
  63.  
  64. //KEYBOARD SETTINGS SUBMENU
  65. MenuNode gameKeyMap = new MenuNode("In Game Key mappings"){
  66. @Override
  67. public void selectItem() {
  68.  
  69. }
  70. };
  71. menuList.add(gameKeyMap);
  72.  
  73. MenuNode levelEditorKeyMap = new MenuNode("Level Editor Keymap"){
  74. @Override
  75. public void selectItem() {
  76. mapCreator.main(null);
  77. }
  78. };
  79. menuList.add(levelEditorKeyMap);
  80.  
  81. //Added a level editor button
  82. MenuNode levelEditor = new MenuNode("Level Editor") {
  83. @Override
  84. public void selectItem() {
  85. mapCreator.main(null);
  86. }
  87. };
  88. menuList.add(levelEditor);
  89.  
  90.  
  91. //CONTROL SETTINGS SUBMENU
  92. MenuNode keyboardSetupSubmenu =
  93. new MenuNode(new MenuNode[]{gameKeyMap,levelEditorKeyMap,goBack}, "Keyboard Setup"){
  94. @Override
  95. public void selectItem() {
  96. refreshMenu(this);
  97. }
  98. };
  99. menuList.add(keyboardSetupSubmenu);
  100.  
  101.  
  102. //SETTINGS SUBMENU
  103. MenuNode networkTest = new MenuNode("Network Test"){
  104. @Override
  105. public void selectItem() {
  106. rewind.client.network.NetworkTest.setupTestUI(getPrimaryStage());
  107. }
  108. };
  109. menuList.add(networkTest);
  110.  
  111. MenuNode chatSeting = new MenuNode(new MenuNode[]{goBack}, "Chat Settings"){
  112. @Override
  113. public void selectItem() {
  114. System.out.println("chat settings");
  115. }
  116. };
  117. menuList.add(chatSeting);
  118.  
  119. MenuNode displaySetting = new MenuNode(new MenuNode[]{goBack}, "Display Settings"){
  120. @Override
  121. public void selectItem() {
  122. System.out.println("display settings");
  123. }
  124. };
  125. menuList.add(displaySetting);
  126.  
  127. MenuNode controlSettingSubMenu =
  128. new MenuNode(new MenuNode[]{keyboardSetupSubmenu,goBack}, "Control Settings"){
  129. @Override
  130. public void selectItem() {
  131. refreshMenu(this);
  132. }
  133. };
  134. menuList.add(controlSettingSubMenu);
  135.  
  136. MenuNode settings = new MenuNode(
  137. new MenuNode[]{controlSettingSubMenu,displaySetting,chatSeting,networkTest,goBack}
  138. , "Settings"){
  139. @Override
  140. public void selectItem() {
  141. refreshMenu(this);
  142. }
  143. };
  144. menuList.add(settings);
  145.  
  146. MenuNode viewCredits = new MenuNode("View credits"){
  147. @Override
  148. public void selectItem() {
  149. Application scroll = new CreditsScroll();
  150. Stage scrollStage = new Stage();
  151. try {
  152. scroll.start(scrollStage);
  153. } catch (Exception e) {
  154. e.printStackTrace();
  155. }
  156. }
  157. };
  158. menuList.add(viewCredits);
  159.  
  160. MenuNode exitGame = new MenuNode("Exit Game"){
  161. @Override
  162. public void selectItem() {
  163.  
  164. // Exit the program
  165. System.exit(0);
  166. }
  167. };
  168. menuList.add(exitGame);
  169.  
  170. MenuNode contMultiGame = new MenuNode("Continue Multiplayer Game"){
  171. @Override
  172. public void selectItem() {
  173. hideMenu();
  174. getGroup().getChildren().remove(GameState.getCurrentGame());
  175. GameState.setCurrentGame(GameState.getMultiGame());
  176. getGroup().getChildren().add(GameState.getSingleGame());
  177. }
  178. @Override
  179. public boolean showMenuNode(){
  180. return GameState.hasMultiGame();
  181. }
  182. };
  183. menuList.add(contMultiGame);
  184.  
  185.  
  186. MenuNode newMultiGame = new MenuNode("New Multiplayer Game"){
  187. @Override
  188. public void selectItem() {
  189. System.out.println("Pass in multiplayer subscreen here. See singleplayer example");
  190. }
  191. @Override
  192. public boolean showMenuNode(){
  193. return !GameState.hasMultiGame();
  194. }
  195. };
  196. menuList.add(newMultiGame);
  197.  
  198. MenuNode contSingGame = new MenuNode("Continue Single Player Game"){
  199. @Override
  200. public void selectItem() {
  201. hideMenu();
  202. GameState.getCurrentGame().setEffect(null);
  203. getGroup().getChildren().remove(GameState.getCurrentGame());
  204. GameState.setCurrentGame(GameState.getSingleGame());
  205. getGroup().getChildren().add(GameState.getSingleGame());
  206. }
  207. @Override
  208. public boolean showMenuNode(){return GameState.hasSingleGame();}
  209. };
  210. menuList.add(contSingGame);
  211.  
  212.  
  213. MenuNode newGame = new MenuNode("New Game"){
  214. @Override
  215. public void selectItem() {
  216. //UI ui = new UI();
  217. //SubScene old = new SubScene(ui.setupMainScreen(),1920,1080)
  218. TestRoom game = new TestRoom(getPrimaryStage());
  219. GameState.storeSingleGame(game.start());
  220. GameState.setCurrentGame(GameState.getSingleGame());
  221. getGroup().getChildren().add(GameState.getCurrentGame());
  222. hideMenu();
  223. }
  224. @Override
  225. public boolean showMenuNode(){return !GameState.hasSingleGame();}
  226. };
  227. menuList.add(newGame);
  228.  
  229.  
  230. MenuNode register = new MenuNode("Register") {
  231. @Override
  232. public void selectItem() {
  233.  
  234. // Creating the dialog.
  235. Dialog<Pair<String, String>> registerDialog = new Dialog<>();
  236. registerDialog.setTitle("Register Dialog");
  237. registerDialog.setHeaderText("Please register to play Rewind");
  238.  
  239. // Set the button types.
  240. ButtonType registerButtonType = new ButtonType("Register", ButtonBar.ButtonData.OK_DONE);
  241. registerDialog.getDialogPane().getButtonTypes().addAll(registerButtonType, ButtonType.CANCEL);
  242.  
  243. // Create the username and password labels and fields.
  244. GridPane grid = new GridPane();
  245. grid.setHgap(10);
  246. grid.setVgap(10);
  247. grid.setPadding(new Insets(20, 150, 10, 10));
  248.  
  249. TextField username = new TextField();
  250. username.setPromptText("Username");
  251. PasswordField password = new PasswordField();
  252. password.setPromptText("Password");
  253. PasswordField confirmPassword = new PasswordField();
  254. confirmPassword.setPromptText("Confirm password");
  255.  
  256. grid.add(new Label("Username:"), 0, 0);
  257. grid.add(username, 1, 0);
  258. grid.add(new Label("Password:"), 0, 1);
  259. grid.add(password, 1, 1);
  260. grid.add(new Label("Confirm password:"), 0, 2 );
  261. grid.add(confirmPassword, 1, 2 );
  262.  
  263. // Enable/Disable register button depending on whether a username was entered.
  264. Node registerButton = registerDialog.getDialogPane().lookupButton(registerButtonType);
  265. registerButton.setDisable(true);
  266.  
  267. // Do some validation (using the Java 8 lambda syntax).
  268. username.textProperty().addListener((observable, oldValue, newValue) -> {
  269. registerButton.setDisable(newValue.trim().isEmpty());
  270. });
  271.  
  272. registerDialog.getDialogPane().setContent(grid);
  273.  
  274. // Focus on the username field by default.
  275. Platform.runLater(() -> username.requestFocus());
  276.  
  277. registerDialog.show();
  278.  
  279.  
  280. //todo - implement Changelistener for focusedProperty to check if username entered is available
  281.  
  282. //todo - validate equality of password and confirmPassword
  283.  
  284. // Convert the result to a username-password-pair when the register button is clicked.
  285. registerDialog.setResultConverter(dialogButton -> {
  286. if (dialogButton == registerButtonType) {
  287. System.out.printf("username: %s, password: %s", username.getText(), password.getText());
  288. return new Pair<>(username.getText(), password.getText());
  289. }
  290. return null;
  291. });
  292.  
  293. //todo - on registerButton action store <username, password> pair in DB
  294.  
  295. }
  296. @Override
  297. public boolean showMenuNode(){
  298. return true;
  299. }
  300. };
  301. menuList.add(register);
  302.  
  303.  
  304. MenuNode login = new MenuNode("Login") {
  305. @Override
  306. public void selectItem() {
  307.  
  308. // Creating the dialog.
  309. Dialog<Pair<String, String>> loginDialog = new Dialog<>();
  310. loginDialog.setTitle("Login Dialog");
  311. loginDialog.setHeaderText("Please log in to play Rewind");
  312.  
  313. // Set the button types.
  314. ButtonType loginButtonType = new ButtonType("Login", ButtonBar.ButtonData.OK_DONE);
  315. loginDialog.getDialogPane().getButtonTypes().addAll(loginButtonType, ButtonType.CANCEL);
  316.  
  317. // Create the username and password labels and fields.
  318. GridPane grid = new GridPane();
  319. grid.setHgap(10);
  320. grid.setVgap(10);
  321. grid.setPadding(new Insets(20, 150, 10, 10));
  322.  
  323. TextField username = new TextField();
  324. username.setPromptText("Username");
  325. PasswordField password = new PasswordField();
  326. password.setPromptText("Password");
  327.  
  328. //CheckBox remember = new CheckBox();
  329.  
  330. grid.add(new Label("Username:"), 0, 0);
  331. grid.add(username, 1, 0);
  332. grid.add(new Label("Password:"), 0, 1);
  333. grid.add(password, 1, 1);
  334. //grid.add(new Label("Remember me"), 0, 2);
  335. //grid.add(remember, 1, 2);
  336.  
  337.  
  338.  
  339. // Enable/Disable register button depending on whether a username was entered.
  340. Node loginButton = loginDialog.getDialogPane().lookupButton(loginButtonType);
  341. loginButton.setDisable(true);
  342.  
  343. // Do some validation (using the Java 8 lambda syntax).
  344. username.textProperty().addListener((observable, oldValue, newValue) -> {
  345. loginButton.setDisable(newValue.trim().isEmpty());
  346. });
  347.  
  348. loginDialog.getDialogPane().setContent(grid);
  349.  
  350. // Focus on the username field by default.
  351. Platform.runLater(() -> username.requestFocus());
  352.  
  353. loginDialog.show();
  354.  
  355. // Convert the result to a username-password-pair when the login button is clicked.
  356. loginDialog.setResultConverter(dialogButton -> {
  357. if (dialogButton == loginButtonType) {
  358. System.out.printf("username: %s, password: %s", username.getText(), password.getText());
  359. return new Pair<>(username.getText(), password.getText());
  360. }
  361. return null;
  362. });
  363.  
  364. //todo - check <username, password> pair in DB
  365.  
  366. //todo - implement 'remember me' functionality
  367.  
  368. }
  369. @Override
  370. public boolean showMenuNode(){
  371. // todo - get login status
  372. return true;
  373. }
  374. };
  375. menuList.add(login);
  376.  
  377. // Create a TestRoom for developing player controls.
  378. // To be removed when actual rooms are added to the game.
  379. MenuNode testControls = new MenuNode("Test Controls"){
  380. @Override
  381. public void selectItem() {
  382. System.out.println("Test Controls");
  383. TestRoom game = new TestRoom(getPrimaryStage());
  384. GameState.storeSingleGame(game.start());
  385. GameState.setCurrentGame(GameState.getSingleGame());
  386. getGroup().getChildren().add(GameState.getCurrentGame());
  387. hideMenu();
  388.  
  389. }
  390. @Override
  391. public boolean showMenuNode(){
  392. return true;
  393. }
  394. };
  395. menuList.add(testControls);
  396.  
  397.  
  398.  
  399. MenuNode rootNode = new MenuNode(this,
  400. new MenuNode[]{login,register,newGame,contSingGame,newMultiGame,contMultiGame,settings,viewCredits,exitGame,testControls}) {
  401. @Override
  402. public void selectItem() {
  403. System.out.printf("menu root created");
  404. }
  405. };
  406. menuList.add(rootNode);
  407.  
  408.  
  409.  
  410. refreshMenu(getCrumb());
  411. }
  412. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement