package gui.menu; import java.util.Stack; import imgui.ImGui; import imgui.ImVec2; import imgui.flag.ImGuiKey; import imgui.flag.ImGuiWindowFlags; public class StateMachine { private final Stack menus; public StateMachine() { this.menus = new Stack<>(); } public void clear() { for (BaseView view : menus) { view.onKill(); } menus.clear(); } public void pushState(BaseView menu) { menus.add(menu); } public void popState() { menus.get(menus.size() - 1).onKill(); menus.pop(); } private void checkEscape() { if (ImGui.isKeyPressed(ImGuiKey.Escape) && menus.size() > 1) { popState(); } } public void render() { var displaySize = ImGui.getIO().getDisplaySize(); ImGui.setNextWindowPos(new ImVec2(0.0f, 0.0f)); ImGui.setNextWindowSize(displaySize); ImGui.begin("##Main Window", null, ImGuiWindowFlags.NoDecoration | ImGuiWindowFlags.NoMove | ImGuiWindowFlags.NoSavedSettings | ImGuiWindowFlags.NoBackground); menus.get(menus.size() - 1).render(); ImGui.end(); checkEscape(); } }