]> code.bitgloo.com Git - clyne/gamedev.git/commitdiff
ui cleaning, docs
authorClyne Sullivan <tullivan99@gmail.com>
Sun, 18 Dec 2016 01:13:43 +0000 (20:13 -0500)
committerClyne Sullivan <tullivan99@gmail.com>
Sun, 18 Dec 2016 01:13:43 +0000 (20:13 -0500)
include/player.hpp
include/ui.hpp
src/ui.cpp
src/ui_menu.cpp
src/world.cpp

index 59d6368e57d3b8001adeba6a8a7a6701d056ac59..85dc8212a999a19bd5dcab69adbfa9b82eac4722 100644 (file)
@@ -1,3 +1,8 @@
+/**
+ * @file player.hpp
+ * @brief The player system
+ */
+
 #ifndef PLAYER_HPP_
 #define PLAYER_HPP_
 
@@ -8,8 +13,15 @@
 #include <components.hpp>
 #include <common.hpp>
 
+/**
+ * The constant velocity the player is given when moved with the arrow keys.
+ */
 constexpr const float PLAYER_SPEED_CONSTANT = 0.15f;
 
+/**
+ * @class PlayerSystem
+ * Controls a player, with keyboard and stuff.
+ */
 class PlayerSystem : public entityx::System<PlayerSystem>, public entityx::Receiver<PlayerSystem> {
 private:
     entityx::Entity player;
@@ -23,18 +35,50 @@ public:
     PlayerSystem(void)
         : moveLeft(false), moveRight(false), speed(1.0f) {}
 
+       /**
+        * Creates the player, adding it to the entity system.
+        */
        void create(void);
 
+       /**
+        * Configures events for use with the entity system.
+        */
     void configure(entityx::EventManager&);
 
+       /**
+        * Updates the player, mainly the player's velocity.
+        */
     void update(entityx::EntityManager &en, entityx::EventManager &ev, entityx::TimeDelta dt) override;
 
+       /**
+        * Handles key up events for the player.
+        * @param kue key up event data
+        */
     void receive(const KeyUpEvent&);
+
+       /**
+        * Handles key down events for the player.
+        * @param kde key down event data
+        */
     void receive(const KeyDownEvent&);
 
+       /**
+        * Gets the player's position.
+        * @return the player's position
+        */
     vec2 getPosition(void) const;
+
+       /**
+        * Sets the player's X coordinate.
+        * @param x the x coordinate to give the player
+        */
        inline void setX(const float& x)
        { player.component<Position>().get()->x = x; }
+
+       /**
+        * Gets the width of the player.
+        * @return the player's width, according to its sprite
+        */
     inline float getWidth(void) const
     { return game::entities.component<Solid>(player.id())->width; }
 };
index 8d517c79f0989ce261e52b7baf0035e0a5a95c34..519d2596d1ea45046d9f61f6fa5c457a493e1868 100644 (file)
@@ -39,8 +39,8 @@
 ** The UI namespace
 ** --------------------------------------------------------------------------*/
 
-void setControl(unsigned int index, SDL_Keycode key);
-SDL_Keycode getControl(unsigned int index);
+void setControl(int index, SDL_Keycode key);
+SDL_Keycode getControl(int index);
 
 #include <entityx/entityx.h>
 
@@ -92,7 +92,7 @@ namespace ui {
 
        void setFontFace(const char *ttf);
        void setFontSize(unsigned int size);
-       void setFontColor(unsigned char r,unsigned char g,unsigned char b, unsigned char a);
+       void setFontColor(int r, int g, int b, int a);
        void setFontZ(float z);
 
        /*
@@ -145,8 +145,6 @@ namespace ui {
        void drawFade(void);
        void fadeUpdate(void);
 
-       void quitGame();
-
        /*
         *      Toggle the black overlay thing.
        */
index 0ddc3f271dade8229f254e835b5a972cb87ea1ab..0b22e34bd6860b8bdabc8b2977d4be55735a674e 100644 (file)
@@ -20,14 +20,14 @@ std::array<SDL_Keycode, 6> controlMap = {
        SDLK_w, SDLK_a, SDLK_d, SDLK_LSHIFT, SDLK_LCTRL, SDLK_e
 };
 
-void setControl(unsigned int index, SDL_Keycode key)
+void setControl(int index, SDL_Keycode key)
 {
        controlMap[index] = key;
 }
 
-SDL_Keycode getControl(unsigned int index)
+SDL_Keycode getControl(int index)
 {
-       if (index >= controlMap.size())
+       if (index >= static_cast<int>(controlMap.size()))
                return 0;
 
        return controlMap[index];
@@ -57,7 +57,7 @@ static bool ft24loaded = false;
 static auto *ftdat = &ftdat16;
 static auto *ftex  = &ftex16;
 
-static unsigned char fontColor[4] = {255,255,255,255};
+static Color fontColor (255, 255, 255, 255);
 
 /*
  *     Variables for dialog boxes / options.
@@ -87,57 +87,45 @@ Mix_Chunk *sanic;
 static GLuint pageTex = 0;
 static bool   pageTexReady = false;
 
-void loadFontSize(unsigned int size, std::vector<GLuint> &tex, std::vector<FT_Info> &dat)
+void loadFontSize(int size, std::vector<GLuint> &tex, std::vector<FT_Info> &dat)
 {
        FT_Set_Pixel_Sizes(ftf,0,size);
 
-       /*
-        *      Pre-render 'all' the characters.
-       */
-
+       // pre-render 'all' the characters
        glDeleteTextures(93, tex.data());
        glGenTextures(93, tex.data());          //      Generate new texture name/locations?
 
-       for(char i=33;i<126;i++) {
-
-               /*
-                *      Load the character from the font family file.
-               */
-
-               if (FT_Load_Char (ftf, i, FT_LOAD_RENDER))
+       for (char i = 33; i < 126; i++) {
+               // load the character from the font family file
+               if (FT_Load_Char(ftf, i, FT_LOAD_RENDER))
                        UserError("Error! Unsupported character " + i);
 
-               /*
-                *      Transfer the character's bitmap (?) to a texture for rendering.
-               */
-
-               glBindTexture(GL_TEXTURE_2D,tex[i-33]);
-               glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S         ,GL_CLAMP_TO_EDGE);
-               glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T         ,GL_CLAMP_TO_EDGE);
-               glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER     ,GL_LINEAR              );
-               glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER     ,GL_LINEAR              );
-               glPixelStorei(GL_UNPACK_ALIGNMENT,1);
-
-               /*
-                *      The just-created texture will render red-on-black if we don't do anything to it, so
-                *      here we create a buffer 4 times the size and transform the texture into an RGBA array,
-                *      making it white-on-black.
-               */
-
-
-               std::vector<uint32_t> buf (ftf->glyph->bitmap.width * ftf->glyph->bitmap.rows, 0xFFFFFFFF);
-
-               for(unsigned int j = buf.size(); j--;)
-                       buf[j] ^= !ftf->glyph->bitmap.buffer[j] ? buf[j] : 0;
-
-               dat[i - 33].wh.x = ftf->glyph->bitmap.width;
-               dat[i - 33].wh.y = ftf->glyph->bitmap.rows;
-               dat[i - 33].bl.x = ftf->glyph->bitmap_left;
-               dat[i - 33].bl.y = ftf->glyph->bitmap_top;
-               dat[i - 33].ad.x = ftf->glyph->advance.x >> 6;
-               dat[i - 33].ad.y = ftf->glyph->advance.y >> 6;
-
-               glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, ftf->glyph->bitmap.width, ftf->glyph->bitmap.rows,
+               // transfer the character's bitmap (?) to a texture for rendering
+               glBindTexture(GL_TEXTURE_2D, tex[i - 33]);
+               glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S , GL_CLAMP_TO_EDGE);
+               glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T , GL_CLAMP_TO_EDGE);
+               glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER , GL_LINEAR);
+               glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER , GL_LINEAR);
+               glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
+
+               /**
+                * The just-created texture will render red-on-black if we don't do anything to it, so
+                * here we create a buffer 4 times the size and transform the texture into an RGBA array,
+                * making it white-on-black.
+                */
+               auto& g = ftf->glyph;
+               std::vector<uint32_t> buf (g->bitmap.width * g->bitmap.rows, 0xFFFFFFFF);
+               for (auto j = buf.size(); j--;)
+                       buf[j] ^= !g->bitmap.buffer[j] ? buf[j] : 0;
+
+               auto& d = dat[i - 33];
+               d.wh.x = g->bitmap.width;
+               d.wh.y = g->bitmap.rows;
+               d.bl.x = g->bitmap_left;
+               d.bl.y = g->bitmap_top;
+               d.ad.x = g->advance.x >> 6;
+               d.ad.y = g->advance.y >> 6;
+               glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, g->bitmap.width, g->bitmap.rows,
                                  0, GL_RGBA, GL_UNSIGNED_BYTE, buf.data());
        }
 }
@@ -232,6 +220,7 @@ namespace ui {
 #ifdef DEBUG
                DEBUG_printf("Using font %s\n",ttf);
 #endif // DEBUG
+
                ft16loaded = false;
                ft24loaded = false;
        }
@@ -241,42 +230,24 @@ namespace ui {
        */
 
        void setFontSize(unsigned int size) {
-               (void)size;
-               if (size == 16) {
-                       if (!ft16loaded) {
-                               loadFontSize(fontSize = size, ftex16, ftdat16);
-                               ft16loaded = true;
-                       }
-                       ftex = &ftex16;
-                       ftdat = &ftdat16;
-                       fontSize = 16;
-               } else if (size == 24) {
-                       if (!ft24loaded) {
-                               loadFontSize(fontSize = size, ftex24, ftdat24);
-                               ft24loaded = true;
-                       }
-                       ftex = &ftex24;
-                       ftdat = &ftdat24;
-                       fontSize = 24;
+               auto& loaded = (size == 16) ? ft16loaded : ft24loaded;
+               auto& tex = (size == 16) ? ftex16 : ftex24;
+               auto& dat = (size == 16) ? ftdat16 : ftdat24;
+
+               if (!loaded) {
+                       loadFontSize(fontSize = size, tex, dat);
+                       loaded = true;
                }
+               ftex = &tex;
+               ftdat = &dat;
+               fontSize = size;
        }
 
        /*
         *      Set a color for font rendering (default: white).
-       */
-
-       void setFontColor(unsigned char r,unsigned char g,unsigned char b) {
-               fontColor[0]=r;
-               fontColor[1]=g;
-               fontColor[2]=b;
-               fontColor[3]=255;
-       }
-
-       void setFontColor(unsigned char r,unsigned char g,unsigned char b, unsigned char a) {
-               fontColor[0]=r;
-               fontColor[1]=g;
-               fontColor[2]=b;
-               fontColor[3]=a;
+        */
+       void setFontColor(int r, int g, int b, int a = 255) {
+               fontColor = Color(r, g, b, a);
        }
 
        /*
@@ -288,65 +259,53 @@ namespace ui {
 
        /*
         *      Draws a character at the specified coordinates, aborting if the character is unknown.
-       */
-
+        */
        vec2 putChar(float xx,float yy,char c){
-               vec2 c1,c2;
-
+               const auto& ch = (*ftdat)[c - 33];
                int x = xx, y = yy;
 
-               /*
-                *      Get the width and height of the rendered character.
-               */
-
-               c1={(float)floor(x)+(*ftdat)[c-33].bl.x,
-                   (float)floor(y)+(*ftdat)[c-33].bl.y};
-               c2=(*ftdat)[c-33].wh;
-
-               /*
-                *      Draw the character:
-               */
+               // get dimensions of the rendered character
+               vec2 c1 = {
+                       static_cast<float>(floor(x) + ch.bl.x),
+                       static_cast<float>(floor(y) + ch.bl.y)
+               };
 
+               const auto& c2 = ch.wh;
 
+               // draw the character
                glActiveTexture(GL_TEXTURE0);
-               glBindTexture(GL_TEXTURE_2D,(*ftex)[c-33]);
+               glBindTexture(GL_TEXTURE_2D, (*ftex)[c - 33]);
                glUniform1i(Render::textShader.uniform[WU_texture], 0);
                glUniform4f(Render::textShader.uniform[WU_tex_color], 1.0f, 1.0f, 1.0f, 1.0f);
 
-               //glDisable(GL_DEPTH_TEST);
-
                Render::textShader.use();
                Render::textShader.enable();
-
                GLfloat tex_coord[] = {
                        0.0, 1.0,                               //bottom left
                        1.0, 1.0,                               //bottom right
                        1.0, 0.0,                               //top right
-
                        1.0, 0.0,                               //top right
                        0.0, 0.0,                               //top left
                        0.0, 1.0,                               //bottom left
-
                };
 
                GLfloat text_vert[] = {
                        c1.x,           c1.y     -c2.y, fontZ,  //bottom left
                        c1.x+c2.x,      c1.y     -c2.y, fontZ,  //bottom right
                        c1.x+c2.x,      c1.y+c2.y-c2.y, fontZ,  //top right
-
                        c1.x+c2.x,      c1.y+c2.y-c2.y, fontZ,  //top right
                        c1.x,           c1.y+c2.y-c2.y, fontZ,  //top left
                        c1.x,           c1.y     -c2.y, fontZ   //bottom left
                };
 
         glUniform4f(Render::textShader.uniform[WU_tex_color],
-                    static_cast<float>(fontColor[0]/255),
-                    static_cast<float>(fontColor[1]/255),
-                    static_cast<float>(fontColor[2]/255),
-                    static_cast<float>(fontColor[3]/255));
+                    static_cast<float>(fontColor.red / 255),
+                    static_cast<float>(fontColor.green / 255),
+                    static_cast<float>(fontColor.blue / 255),
+                    static_cast<float>(fontColor.alpha / 255));
 
                glVertexAttribPointer(Render::textShader.coord, 3, GL_FLOAT, GL_FALSE, 0, text_vert);
-               glVertexAttribPointer(Render::textShader.tex,   2, GL_FLOAT, GL_FALSE, 0, tex_coord);
+               glVertexAttribPointer(Render::textShader.tex, 2, GL_FLOAT, GL_FALSE, 0, tex_coord);
                glDrawArrays(GL_TRIANGLES, 0, 6);
 
         glUniform4f(Render::textShader.uniform[WU_tex_color], 1.0, 1.0, 1.0, 1.0);
@@ -354,10 +313,8 @@ namespace ui {
                Render::textShader.disable();
                Render::textShader.unuse();
 
-               //glEnable(GL_DEPTH_TEST);
-
                // return the width.
-               return (*ftdat)[c-33].ad;
+               return ch.ad;
        }
 
        /*
@@ -368,13 +325,9 @@ namespace ui {
                unsigned int i = 0, nl = 1;
                vec2 add, o = {x, y};
 
-               /*
-                * Loop on each character:
-                */
-
+               // loop on each character
                do {
                        if (dialogBoxExists && i > textWrapLimit * nl) {
-
                                o.y -= fontSize * 1.05f;
                                o.x = x;
                                ++nl;
@@ -385,14 +338,13 @@ namespace ui {
                        }
 
                        switch (s[i]) {
+                       case '\r':
+                       case '\t':
+                               break;
                        case '\n':
                                o.y -= fontSize * 1.05f;
                                o.x = x;
                                break;
-                       case '\r':
-                               break;
-                       case '\t':
-                               break;
                        case '\b':
                                o.x -= add.x;
                                break;
@@ -407,7 +359,7 @@ namespace ui {
                        }
                } while (s[++i]);
 
-               return o.x;     // i.e. the string width
+               return o.x;     // the string width
        }
 
        float putStringCentered(const float x, const float y, std::string s) {
@@ -505,40 +457,36 @@ namespace ui {
         *      Draw a formatted string to the specified coordinates.
        */
 
-       float putText(const float x, const float y, const char *str, ...) {
-               va_list args;
+       std::string uisprintf(const char *s, va_list args) {
                std::unique_ptr<char[]> buf (new char[512]);
+               vsnprintf(buf.get(), 512, s, args);
+               std::string ret (buf.get());
+               return ret;
+       }
 
-               // zero out the buffer
-               memset(buf.get(),0,512*sizeof(char));
-
-               /*
-                *      Handle the formatted string, printing it to the buffer.
-                */
-
+       float putText(const float x, const float y, const char *str, ...) {
+               va_list args;
+       
                va_start(args,str);
-               vsnprintf(buf.get(),512,str,args);
+               auto s = uisprintf(str, args);
                va_end(args);
 
                // draw the string and return the width
-               return putString(x, y, buf.get());
+               return putString(x, y, s);
        }
 
        void putTextL(vec2 c, const char *str, ...) {
                va_list args;
-               std::unique_ptr<char[]> buf (new char[512]);
-               memset(buf.get(), 0, 512 * sizeof(char));
 
                va_start(args, str);
-               vsnprintf(buf.get(), 512, str, args);
+               auto s = uisprintf(str, args);
                va_end(args);
 
-               textToDraw.push_back(std::make_pair(c, buf.get()));
+               textToDraw.push_back(std::make_pair(c, s));
        }
 
        void dialogBox(std::string name, std::string opt, bool passive, std::string text, ...) {
-               va_list dialogArgs;
-               std::unique_ptr<char[]> printfbuf (new char[512]);
+               va_list args;
 
                dialogPassive = passive;
 
@@ -546,14 +494,14 @@ namespace ui {
                dialogBoxText = name + ": ";
 
                // handle the formatted string
-               va_start(dialogArgs, text);
-               vsnprintf(printfbuf.get(), 512, text.c_str(), dialogArgs);
-               va_end(dialogArgs);
-               dialogBoxText += printfbuf.get();
+               va_start(args, text);
+               auto s = uisprintf(text.c_str(), args);
+               va_end(args);
+
+               dialogBoxText += s;
 
                // setup option text
                dialogOptText.clear();
-
                dialogOptChosen = 0;
 
                if (!opt.empty()) {
@@ -566,10 +514,7 @@ namespace ui {
                        }
                }
 
-               /*
-                *      Tell draw() that the box is ready.
-               */
-
+               // tell draw() that the box is ready
                dialogBoxExists = true;
                dialogImportant = false;
 
@@ -599,21 +544,16 @@ namespace ui {
                fadeIntensity = 0;
        }
 
-       void waitForNothing(unsigned int ms) {
-               unsigned int target = millis() + ms;
-               while (millis() < target);
-       }
-
-       void importantText(const char *text,...) {
-               va_list textArgs;
-               std::unique_ptr<char[]> printfbuf (new char[512]);
+       void importantText(const char *text, ...) {
+               va_list args;
 
                dialogBoxText.clear();
 
-               va_start(textArgs,text);
-               vsnprintf(printfbuf.get(),512,text,textArgs);
-               va_end(textArgs);
-               dialogBoxText = printfbuf.get();
+               va_start(args, text);
+               auto s = uisprintf(text, args);
+               va_end(args);
+
+               dialogBoxText = s;
 
                dialogBoxExists = true;
                dialogImportant = true;
@@ -622,15 +562,15 @@ namespace ui {
        }
 
        void passiveImportantText(int duration, const char *text, ...) {
-               va_list textArgs;
-               std::unique_ptr<char[]> printfbuf (new char[512]);
+               va_list args;
 
                dialogBoxText.clear();
 
-               va_start(textArgs,text);
-               vsnprintf(printfbuf.get(),512,text,textArgs);
-               va_end(textArgs);
-               dialogBoxText = printfbuf.get();
+               va_start(args, text);
+               auto s = uisprintf(text, args);
+               va_end(args);
+
+               dialogBoxText = s;
 
                dialogBoxExists = true;
                dialogImportant = true;
@@ -871,13 +811,14 @@ namespace ui {
                                   offset.x - 300, SCREEN_HEIGHT - 600, -6.0,
                                   offset.x - 300, SCREEN_HEIGHT - 100, -6.0};
 
-            GLfloat page_tex[] = {0.0, 0.0,
-                                  1.0, 0.0,
-                                  1.0, 1.0,
-
-                                  1.0, 1.0,
-                                  0.0, 1.0,
-                                  0.0, 0.0};
+            static const GLfloat page_tex[] = {
+                               0.0, 0.0,
+                1.0, 0.0,
+                1.0, 1.0,
+                   1.0, 1.0,
+                0.0, 1.0,
+                0.0, 0.0
+                       };
 
             glActiveTexture(GL_TEXTURE0);
             glBindTexture(GL_TEXTURE_2D, pageTex);
@@ -897,7 +838,7 @@ namespace ui {
                        rtext = typeOut(dialogBoxText);
 
                        if (dialogImportant) {
-                               setFontColor(255,255,255);
+                               setFontColor(255, 255, 255);
                                if (dialogPassive) {
                                        dialogPassiveTime -= game::time::getDeltaTime() * 12;
                                        if (dialogPassiveTime < 0) {
@@ -924,21 +865,21 @@ namespace ui {
                                putString(x + HLINES(2), y - fontSize - game::HLINE, rtext);
 
                                for (i = 0; i < dialogOptText.size(); i++) {
-                                       float tmp;
-                                       setFontColor(255,255,255);
-                                       tmp = putStringCentered(offset.x,dialogOptText[i].second.y,dialogOptText[i].first);
-                                       dialogOptText[i].second.z = offset.x + tmp;
-                                       dialogOptText[i].second.x = offset.x - tmp;
-                                       dialogOptText[i].second.y = y - SCREEN_HEIGHT / 4 + (fontSize + game::HLINE) * (i + 1);
-                                       if (mouse.x > dialogOptText[i].second.x &&
-                                          mouse.x < dialogOptText[i].second.z &&
-                                          mouse.y > dialogOptText[i].second.y &&
-                                          mouse.y < dialogOptText[i].second.y + 16) { // fontSize
-                                                 setFontColor(255,255,0);
-                                                 putStringCentered(offset.x,dialogOptText[i].second.y,dialogOptText[i].first);
+                                       auto& sec = dialogOptText[i].second;
+
+                                       setFontColor(255, 255, 255);
+                                       auto tmp = putStringCentered(offset.x, sec.y,dialogOptText[i].first);
+                                       sec.z = offset.x + tmp;
+                                       sec.x = offset.x - tmp;
+                                       sec.y = y - SCREEN_HEIGHT / 4 + (fontSize + game::HLINE) * (i + 1);
+                                       if (mouse.x > sec.x && mouse.x < sec.z &&
+                                           mouse.y > sec.y && mouse.y < sec.y + 16) { // fontSize
+                                                 setFontColor(255, 255, 0);
+                                                 putStringCentered(offset.x, sec.y, dialogOptText[i].first);
                                        }
                                }
-                               setFontColor(255,255,255);
+
+                               setFontColor(255, 255, 255);
                        }
 
                        static unsigned int rtext_oldsize = 0;
@@ -1035,22 +976,12 @@ namespace ui {
                }
        }
 
-       void quitGame() {
-               dialogBoxExists = false;
-               currentMenu = nullptr;
-               game::config::update();
-               game::config::save();
-               game::endGame();
-       }
-
        void closeBox() {
                dialogBoxExists = false;
                dialogMerchant = false;
        }
 
        void dialogAdvance(void) {
-               unsigned char i;
-
                dialogPassive = false;
                dialogPassiveTime = 0;
 
@@ -1067,17 +998,16 @@ namespace ui {
                        return;
                }
 
-               for(i=0;i<dialogOptText.size();i++) {
-                       if (mouse.x > dialogOptText[i].second.x &&
-                          mouse.x < dialogOptText[i].second.z &&
-                          mouse.y > dialogOptText[i].second.y &&
-                          mouse.y < dialogOptText[i].second.y + 16) { // fontSize
+               for (int i = 0; i < static_cast<int>(dialogOptText.size()); i++) {
+                       const auto& dot = dialogOptText[i].second;
+
+                       if (mouse.x > dot.x && mouse.x < dot.z &&
+                           mouse.y > dot.y && mouse.y < dot.y + 16) { // fontSize
                                dialogOptChosen = i + 1;
-                               goto EXIT;
+                               break;
                        }
                }
 
-EXIT:
                dialogBoxExists = false;
 
                // handle important text
@@ -1088,8 +1018,8 @@ EXIT:
        }
 
        void drawFade(void) {
-               auto SCREEN_WIDTH = game::SCREEN_WIDTH;
-               auto SCREEN_HEIGHT = game::SCREEN_HEIGHT;
+               auto SCREEN_WIDTH2 = game::SCREEN_WIDTH / 2;
+               auto SCREEN_HEIGHT2 = game::SCREEN_HEIGHT / 2;
 
                if (!fadeIntensity) {
                        if (fontSize != 16)
@@ -1097,19 +1027,25 @@ EXIT:
                        return;
                }
 
-               auto fadeTex = Texture::genColor( (fadeWhite ? Color(255, 255, 255, fadeIntensity) :
-                                                              Color(0, 0, 0, fadeIntensity)) );
+               auto ftc = Color(0, 0, 0, fadeIntensity);
+               if (fadeWhite)
+                       ftc.red = ftc.green = ftc.blue = 255;
 
+               auto fadeTex = Texture::genColor(ftc);
 
-        GLfloat tex[] = {0.0, 0.0,
-                        1.0, 0.0,
-                        0.0, 1.0,
-                        1.0, 1.0};
+               static const GLfloat tex[] = {
+                       0.0, 0.0,
+                       1.0, 0.0,
+                       0.0, 1.0,
+                       1.0, 1.0
+               };
 
-        GLfloat backdrop[] = {offset.x - SCREEN_WIDTH / 2 - 1, offset.y - SCREEN_HEIGHT / 2, -7.9,
-                              offset.x + SCREEN_WIDTH / 2, offset.y - SCREEN_HEIGHT / 2,        -7.9,
-                              offset.x - SCREEN_WIDTH / 2 - 1, offset.y + SCREEN_HEIGHT / 2, -7.9,
-                              offset.x + SCREEN_WIDTH / 2, offset.y + SCREEN_HEIGHT / 2,        -7.9};
+        GLfloat backdrop[] = {
+                       offset.x - SCREEN_WIDTH2 - 1, offset.y - SCREEN_HEIGHT2, -7.9,
+                       offset.x + SCREEN_WIDTH2, offset.y - SCREEN_HEIGHT2, -7.9,
+                       offset.x - SCREEN_WIDTH2 - 1, offset.y + SCREEN_HEIGHT2, -7.9,
+                       offset.x + SCREEN_WIDTH2, offset.y + SCREEN_HEIGHT2, -7.9
+               };
 
                setFontZ(-8.2);
         glUniform1i(Render::textShader.uniform[WU_texture], 0);
index d853abc68e8ca8cbd5381b416163a58a49a7020b..9bd702c1f758eb379e3d63935983ee53cad836fd 100644 (file)
@@ -22,8 +22,16 @@ void Menu::gotoParent(void)
        }
 }
 
-inline void segFault() {
-       (*((int *)NULL))++;
+inline void segFault(void)
+{
+       ++*((int *)0);
+}
+
+void quitGame(void)
+{
+       game::config::update();
+       game::config::save();
+       game::endGame();
 }
 
 std::string& deleteWord(std::string& s)
@@ -162,7 +170,7 @@ namespace ui {
                        pauseMenu.items.push_back(ui::menu::createParentButton({-128,100},{256,75},{0.0f,0.0f,0.0f}, "Resume"));
                        pauseMenu.items.push_back(ui::menu::createChildButton({-128, 0},{256,75},{0.0f,0.0f,0.0f}, "Options", &optionsMenu));
                        pauseMenu.items.push_back(ui::menu::createChildButton({-128,-100},{256,75},{0.0f,0.0f,0.0f}, "Controls", &controlsMenu));
-                       pauseMenu.items.push_back(ui::menu::createButton({-128,-200},{256,75},{0.0f,0.0f,0.0f}, "Save and Quit", ui::quitGame));
+                       pauseMenu.items.push_back(ui::menu::createButton({-128,-200},{256,75},{0.0f,0.0f,0.0f}, "Save and Quit", quitGame));
                        pauseMenu.items.push_back(ui::menu::createButton({-128,-300},{256,75},{0.0f,0.0f,0.0f}, "Segfault", segFault));
 
                        // Create the options (sound) menu
index ea2c670a229ba0285a560d7122b0df3bba78d810..df005e46858c159ec4eda219a6da0929c4e324c7 100644 (file)
@@ -218,7 +218,7 @@ void WorldSystem::load(const std::string& file)
                        UserError("XML Error: <include> tag file not given");
                }
 
-               ixml = ixml->NextSiblingElement();
+               break;//ixml = ixml->NextSiblingElement();
        }
 
        if (xmlDoc.Parse(xmlRaw.data()) != XML_NO_ERROR)