]> code.bitgloo.com Git - clyne/gamedev.git/commitdiff
ui menu fix
authorClyne Sullivan <tullivan99@gmail.com>
Fri, 28 Apr 2017 19:28:18 +0000 (15:28 -0400)
committerClyne Sullivan <tullivan99@gmail.com>
Fri, 28 Apr 2017 19:28:18 +0000 (15:28 -0400)
config/controls.dat
include/ui_menu.hpp
include/world.hpp
main.cpp
src/engine.cpp
src/ui_menu.cpp
src/window.cpp
src/world.cpp

index b5a4720a12ab7353802b82655f7af7f98565776d..c0414cdfb71d446b0bb8521a5144dfe261c7b842 100644 (file)
@@ -1,6 +1,6 @@
 119
 97
 100
-1073742049
 1073742048
-100
+1073742049
+101
index 528816182880223ec2a958a4786abfb0c7f3b953..cf7ffd6e5ac098082594805af9b1ef7f30976284 100644 (file)
@@ -53,6 +53,18 @@ public:
        void gotoParent(void);
 };
 
+class SDLReceiver : public entityx::System<SDLReceiver>, public entityx::Receiver<SDLReceiver>
+{
+public:
+       static bool clicked;
+
+       void configure(entityx::EventManager& ev)
+       { ev.subscribe<MainSDLEvent>(*this); }
+       void receive(const MainSDLEvent& mse);
+       void update(entityx::EntityManager& en, entityx::EventManager& ev, entityx::TimeDelta dt) override 
+       { (void)en, (void)ev, (void)dt; }
+};
+
 namespace ui {
     namespace menu {
         menuItem createButton(vec2 l, dim2 d, Color c, const char* t, MenuAction f);
index 163676dca68b6a97828b80707d01e03be9ceb778..2af464224611da15914d79c5c3c63609b28b2080 100644 (file)
@@ -176,6 +176,8 @@ public:
        static void load(const std::string& file);
 
        void fight(entityx::Entity entity);
+
+       void die(void);
 };
 
 #endif // WORLD_HPP_
index 429bc7f177d585d7a36dd586671dfb24f62b9483..5cd4a4414aad499fa540eae96f30d473f5548a40 100644 (file)
--- a/main.cpp
+++ b/main.cpp
@@ -185,10 +185,10 @@ int main(int argc, char *argv[])
 
        // exit
     Mix_HaltMusic();
-    Mix_CloseAudio();
 
     unloadTextures();
 
+       game::engine.getSystem<WorldSystem>()->die();
        game::engine.getSystem<WindowSystem>()->die();
 
     return 0; // Calls everything passed to atexit
index dc7aa775f990f955ceb10a5fcd75710ee9d4e874..970904b28245952c6cffeeeacce7e4856b83cf74 100644 (file)
@@ -40,6 +40,7 @@ void Engine::init(void) {
        systems.add<AttackSystem>();
 
        systems.add<UISystem>();
+       systems.add<SDLReceiver>();
 
     systems.configure();
 
index b49f0e9e4a3a9f1791e3e6d633e4a45a68bdab21..08d45e709783ff9d43486e829f280ab6247f4110 100644 (file)
@@ -9,10 +9,38 @@
 
 #include <fstream>
 
-extern vec2 offset;
-
 static Menu* currentMenu = nullptr;
 
+void SDLReceiver::receive(const MainSDLEvent& mse)
+{
+       switch (mse.event.type) {
+       case SDL_QUIT:
+               game::endGame();
+               return;
+               break;
+       case SDL_MOUSEMOTION:
+               //ui::premouse.x = e.motion.x;
+               //ui::premouse.y = e.motion.y;
+               break;
+       case SDL_MOUSEBUTTONUP:
+               if (mse.event.button.button & SDL_BUTTON_LEFT)
+                       clicked = true;
+               break;  
+       case SDL_KEYUP:
+               if (currentMenu != nullptr && mse.event.key.keysym.sym == SDLK_ESCAPE) {
+                       currentMenu->gotoParent();
+                       return;
+               }
+               break;
+       default:
+               break;
+       }
+}
+
+bool SDLReceiver::clicked = false;
+
+extern vec2 offset;
+
 static Menu pauseMenu;
 static Menu optionsMenu;
 static Menu controlsMenu;
@@ -216,10 +244,6 @@ namespace ui {
                        auto& SCREEN_WIDTH = game::SCREEN_WIDTH;
                        auto& SCREEN_HEIGHT = game::SCREEN_HEIGHT;
 
-            SDL_Event e;
-
-                       bool clicked = false;
-
                        Render::useShader(&Render::textShader);
 
             game::config::update();
@@ -230,31 +254,6 @@ namespace ui {
             mouse.y = (offset.y+SCREEN_HEIGHT/2)-ui::premouse.y;
 
             //custom event polling for menu's so all other events are ignored
-            while(SDL_PollEvent(&e)) {
-                switch (e.type) {
-                case SDL_QUIT:
-                    game::endGame();
-                    return;
-                    break;
-                case SDL_MOUSEMOTION:
-                    premouse.x=e.motion.x;
-                    premouse.y=e.motion.y;
-                    break;
-                               case SDL_MOUSEBUTTONUP:
-                                       if (e.button.button & SDL_BUTTON_LEFT) {
-                                               clicked = true;
-                                       }
-                                       break;  
-                case SDL_KEYUP:
-                    if (SDL_KEY == SDLK_ESCAPE) {
-                        currentMenu->gotoParent();
-                        return;
-                    }
-                    break;
-                default:break;
-                }
-            }
-
                        static float cMult = 1.0f;
                        static const ColorTex back (Color(0, 0, 0, 204));
 
@@ -283,18 +282,21 @@ namespace ui {
                                                cMult = 0.6f;
 
                         //if the mouse is over the button and clicks
-                        if (clicked) {
-                            switch(m.member) {
-                                case 0: //normal button
-                                    m.button.func();
-                                    break;
-                                case -1:
-                                    currentMenu = m.child;
-                                    break;
-                                case -2:
-                                    currentMenu->gotoParent();
-                                default:break;
+                        if (SDLReceiver::clicked) {
+                            switch (m.member) {
+                            case 0: //normal button
+                                m.button.func();
+                                break;
+                            case -1:
+                                currentMenu = m.child;
+                                break;
+                            case -2:
+                                currentMenu->gotoParent();
+                            default:
+                                                               break;
                             }
+
+                                                       SDLReceiver::clicked = false;
                         }
                     }
 
index 7d8f8e78ba1b472f0809586a907bcbb09f253187..df584be57f16a83f819eeb828561c9b68e23d722 100644 (file)
@@ -35,6 +35,7 @@ WindowSystem::WindowSystem(void)
     }
     Mix_AllocateChannels(8);
     atexit(Mix_Quit);
+       atexit(Mix_CloseAudio);
 
     // create the SDL window object
     window = SDL_CreateWindow(WINDOW_TITLE,
index e87d6d0807df27265858a9c26024b63748dde2c3..29f77a2117fb4483eb81a267592ca0b87c6951df 100644 (file)
@@ -561,6 +561,10 @@ WorldSystem::WorldSystem(void)
 }
 
 WorldSystem::~WorldSystem(void)
+{
+}
+
+void WorldSystem::die(void)
 {
     // SDL2_mixer's object
        if (bgmObj != nullptr)