/* * Copyright 2016 Nathan Howard * * This file is part of OpenGrave * * OpenGrave is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * OpenGrave is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with OpenGrave. If not, see <http://www.gnu.org/licenses/>. */ package com.opengrave.og.states; import com.opengrave.common.MenuInfo; import com.opengrave.common.PopupMenuOption; import com.opengrave.common.event.EventDispatcher; import com.opengrave.common.event.EventHandler; import com.opengrave.common.event.EventHandlerPriority; import com.opengrave.common.event.EventListener; import com.opengrave.og.MainThread; import com.opengrave.og.gui.ElementData; import com.opengrave.og.gui.PopupMenu; import com.opengrave.og.gui.callback.PopupOptionChosen; import com.opengrave.og.input.InputMain; import com.opengrave.og.resources.GUIXML; public class SettingState extends BaseState implements EventListener { // CheckButton allowOtherJoinSession; // CheckButton showDebugMenu; // CheckButton capFPS; // NumberRoller capFPSNum; // Button menu, auto; private MenuInfo settingMenu; @Override public void start() { EventDispatcher.addHandler(this); GUIXML mainMenuFile = new GUIXML("gui/loading.xml"); screen = mainMenuFile.getGUI(); /* * allowOtherJoinSession = (CheckButton) screen.getElementById("otherjoinsession"); * allowOtherJoinSession.setChecked(HGMainThread.config.getBoolean("otherjoinsession", true)); * showDebugMenu = (CheckButton) screen.getElementById("debugmenu"); * showDebugMenu.setChecked(HGMainThread.config.getBoolean("debugmenu", false)); * capFPS = (CheckButton) screen.getElementById("capfps"); * capFPS.setChecked(HGMainThread.config.getBoolean("capfps", true)); * capFPSNum = (NumberRoller) screen.getElementById("capfpsnum"); * capFPSNum.setNumber(HGMainThread.config.getInteger("fpslimit", 40)); * capFPSNum.setRange(15, 120); * menu = (Button) screen.getElementById("menu"); * auto = (Button) screen.getElementById("auto"); */ popup(); } public void popup() { String allow = MainThread.config.getBoolean("otherjoinsession", false) ? "tex/guitick.png" : "tex/guicross.png"; String vsync = MainThread.config.getBoolean("capfps", false) ? "tex/guitick.png" : "tex/guicross.png"; String bgmute = MainThread.config.getBoolean("bgmute", false) ? "tex/guitick.png" : "tex/guicross.png"; String sfxmute = MainThread.config.getBoolean("sfxmute", false) ? "tex/guitick.png" : "tex/guicross.png"; settingMenu = new MenuInfo(); settingMenu.addOptions("main", new PopupMenuOption("menu:gameplay", "none", "Gameplay"), new PopupMenuOption("menu:graphics", "none", "Graphics"), new PopupMenuOption("menu:sound", "none", "Sound"), new PopupMenuOption("menu:controls", "none", "Controls")); settingMenu.addOptions("gameplay", new PopupMenuOption("allowothers", allow, "Friends only in MP")); // TODO Quality levels, FPS Cap, Shadow QL settingMenu.addOptions("graphics", new PopupMenuOption("vsync", vsync, "VSync")); settingMenu.addOptions("sound", new PopupMenuOption("bgmute", bgmute, "Mute Music"), new PopupMenuOption("sfxmute", sfxmute, "Mute Sounds")); settingMenu.addOptions("controls", new PopupMenuOption("gamepad", "none", "Reconfigure Gamepad"), new PopupMenuOption("controls", "none", "Assign Controls")); PopupMenu pm = new PopupMenu(new ElementData()); pm.setMenuOptions("main", 0, settingMenu, MainThread.lastW / 2, MainThread.lastH / 2, this); screen.showPopup(pm); } @EventHandler(priority = EventHandlerPriority.EARLY) public void onMenuChosen(PopupOptionChosen event) { if (!isActive()) { return; } if (event.getReference() == this) { String id = event.getId(); if (id.equals("allowothers")) { boolean b = !MainThread.config.getBoolean("otherjoinsession", false); event.getPopupMenuChoice().setImage(b ? "tex/guitick.png" : "tex/guicross.png"); MainThread.config.setBoolean("otherjoinsession", b); } else if (id.equals("vsync")) { boolean b = !MainThread.config.getBoolean("capfps", false); event.getPopupMenuChoice().setImage(b ? "tex/guitick.png" : "tex/guicross.png"); MainThread.config.setBoolean("capfps", b); MainThread.main.fpsCap = b ? 60 : -1; } else if (id.equals("bgmute")) { boolean b = !MainThread.config.getBoolean("bgmute", false); event.getPopupMenuChoice().setImage(b ? "tex/guitick.png" : "tex/guicross.png"); MainThread.config.setBoolean("bgmute", b); } else if (id.equals("sfxmute")) { boolean b = !MainThread.config.getBoolean("sfxmute", false); event.getPopupMenuChoice().setImage(b ? "tex/guitick.png" : "tex/guicross.png"); MainThread.config.setBoolean("sfxmute", b); } else if (id.equals("cancel")) { if (event.getMenuName().equals("main")) { // Closed top leve MainThread.changeState(new MenuState()); } else { popup(); event.setConsumed(); } } else if (id.equals("gamepad")) { if (InputMain.cl == null || InputMain.c == null) { return; } MainThread.changeState(new ControllerSetupState(InputMain.cl, InputMain.c)); } else if (id.equals("controls")) { MainThread.changeState(new BindingState()); } } } @Override public void stop() { MainThread.config.save(); } @Override public void update(float delta) { } }