diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/common.hpp | 168 | ||||
-rw-r--r-- | include/entities.hpp | 5 | ||||
-rw-r--r-- | include/texture.hpp | 43 | ||||
-rw-r--r-- | include/world.hpp | 12 |
4 files changed, 91 insertions, 137 deletions
diff --git a/include/common.hpp b/include/common.hpp index c30f861..3712f62 100644 --- a/include/common.hpp +++ b/include/common.hpp @@ -10,14 +10,9 @@ // holy moly #include <iostream> -#include <cstdlib> #include <string> #include <vector> -#include <string> -#include <fstream> #include <thread> -#include <mutex> -#include <future> #include <cmath> #include <algorithm> @@ -29,55 +24,30 @@ #include <SDL2/SDL_image.h> #include <SDL2/SDL_mixer.h> +#include <config.hpp> + #ifdef __WIN32__ typedef unsigned int uint; #undef near #endif -/** - * Defines how many game ticks should occur in one second, affecting how often - * game logic is handled. - */ - -#define TICKS_PER_SEC 20 +// the number of ticks that should occur in one second +constexpr const unsigned int TICKS_PER_SEC = 20; -/** - * Defines how many milliseconds each game tick will take. - */ - -#define MSEC_PER_TICK (1000 / TICKS_PER_SEC) - -/** - * This flag lets the compuler know that we are testing for segfault locations. - * If this flag is enabled, the function C(x) will print 'x' to terminal - */ +// the number of milliseconds inbetween each tick +constexpr const float MSEC_PER_TICK = 1000.0f / TICKS_PER_SEC; +// segfault-debugging output //#define SEGFAULT -/** - * This flag lets the compiler know that we want to use shaders. - */ - -#define SHADERS - -template<typename N> -N abso(N v) { - if (v < 0) { - return v * -1; - }else - return v; -} - -template<class A> -float averagef(A v) { - float avg = 0; - for(auto &a : v) { - avg += a; - } - avg /= v.size(); - return avg; -} +#ifdef SEGFAULT +#define C(x) std::cout << x << std::endl +#else +#define C(x) +#endif +// printf's a message to the console with file/line info +#define DEBUG_printf(message, ...) DEBUG_prints(__FILE__, __LINE__, message, __VA_ARGS__) extern GLuint colorIndex; // Texture.cpp? @@ -90,6 +60,8 @@ typedef struct { int y; } ivec2; +typedef ivec2 dim2; + struct _vec2 { float x; float y; @@ -115,8 +87,6 @@ typedef struct { float z; } vec3; -typedef ivec2 dim2; - /** * This structure contains two sets of coordinates for ray drawing. */ @@ -126,140 +96,82 @@ typedef struct { vec2 end; } Ray; -struct col { +struct _color { float red; float green; float blue; - col operator-=(float a) { + _color operator-=(float a) { red-=a; green-=a; blue-=a; return{red+a,green+a,blue+a}; } - col operator+=(float a) { + _color operator+=(float a) { return{red+a,green+a,blue+a}; } - col operator=(float a) { + _color operator=(float a) { return{red=a,green=a,blue=a}; } }; -typedef col Color; - -/** - * Define the game's name (displayed in the window title). - */ - -#define GAME_NAME "Independent Study v0.7 alpha - NOW WITH lights and snow and stuff" - -extern bool uiLoop; -extern std::mutex mtx; - -/** - * Define the length of a single HLINE. - * The game has a great amount of elements that need to be drawn or detected, and having each - * of them use specific hard-coded numbers would be painful to debug. As a solution, this - * definition was made. Every item being drawn to the screen and most object detection/physic - * handling is done based off of this number. Increasing it will give the game a zoomed-in - * feel, while decreasing it will do the opposite. - * - */ - -#define HLINES(n) (static_cast<int>(game::HLINE * n)) - -/** - * A 'wrapper' for libc's srand(), as we hope to eventually have our own random number - * generator. - */ - -#define initRand(s) srand(s) - - - -/** - * A 'wrapper' for libc's rand(), as we hope to eventually have our own random number - * generator. - */ +typedef struct _color Color; -#define getRand() rand() +// gets the length of `n` HLINEs +template<typename T> +inline T HLINES(const T &n) +{ + return (static_cast<T>(game::HLINE) * n); +} -#define randGet rand +// random number generator initializer (TODO decide how to random gen. numbers) #define randInit srand -/** - * Included in common.h is a prototype for DEBUG_prints, which writes a formatted - * string to the console containing the callee's file and line number. This macro simplifies - * it to a simple printf call. - * - * DEBUG must be defined for this macro to function. - */ - -#define DEBUG_printf(message, ...) DEBUG_prints(__FILE__, __LINE__, message, __VA_ARGS__) - -#ifdef SEGFAULT -#define C(x) std::cout << x << std::endl -#else -#define C(x) -#endif - -/** - * Defines pi for calculations that need it. - */ - -#define PI 3.1415926535 +// gets random number +#define randGet rand +// defines pi for calculations that need it. +constexpr const float PI = 3.1415926535f; // references the variable in main.cpp, used for drawing with the player extern vec2 offset; -// counts the number of times logic() (see main.cpp) has been called, for animating sprites -extern unsigned int loops; - +// the shader program created in main.cpp extern GLuint shaderProgram; /** * Prints a formatted debug message to the console, along with the callee's file and line * number. */ - void DEBUG_prints(const char* file, int line, const char *s,...); /** * Sets color using glColor3ub(), but handles potential overflow. */ - void safeSetColor(int r,int g,int b); /** * Sets color using glColor4ub(), but handles potential overflow. */ - void safeSetColorA(int r,int g,int b,int a); -/** - * We've encountered many problems when attempting to create delays for triggering - * the logic function. As a result, we decided on using the timing libraries given - * by <chrono> in the standard C++ library. This function simply returns the amount - * of milliseconds that have passed since the epoch. - */ - +// use our own millis function if we can, windows doesn't like <chrono> at the moment... #ifdef __WIN32__ -#define millis() SDL_GetTicks() +#define millis() SDL_GetTicks() #else unsigned int millis(void); #endif // __WIN32__ +// reads the names of files in a directory into the given string vector int getdir(std::string dir, std::vector<std::string> &files); + +// sorts a vector of strings alphabetically void strVectorSortAlpha(std::vector<std::string> *v); +// reads the given file into a buffer and returns a pointer to the buffer const char *readFile(const char *path); -int strCreateFunc(const char *equ); - -template<typename N, size_t s> -size_t arrAmt(N (&)[s]) {return s;} - +// aborts the program, printing the given error void UserError(std::string reason); #endif // COMMON_H diff --git a/include/entities.hpp b/include/entities.hpp index 8620206..f8780df 100644 --- a/include/entities.hpp +++ b/include/entities.hpp @@ -230,10 +230,7 @@ public: GENDER gender; // a texture handler for the entity - Texturec *tex; - - // TODO - Texturec *ntex; + TextureIterator tex; // draws the entity to the screen void draw(void); diff --git a/include/texture.hpp b/include/texture.hpp index 99d2d84..59358f2 100644 --- a/include/texture.hpp +++ b/include/texture.hpp @@ -37,6 +37,49 @@ namespace Texture { } /** + * DRAFT texture iterator? + */ +class TextureIterator { +private: + std::vector<std::pair<GLuint, std::string>> textures; + std::vector<std::pair<GLuint, std::string>>::iterator position; +public: + TextureIterator(void) { + position = std::begin(textures); + } + TextureIterator(const std::vector<std::string> &l) { + for (const auto &s : l) + textures.emplace_back(Texture::loadTexture(s), s); + position = std::begin(textures); + } + void operator++(int) noexcept { + if (++position < std::end(textures)) + glBindTexture(GL_TEXTURE_2D, (*position).first); + else + position = std::end(textures) - 1; + } + void operator--(int) noexcept { + if (--position >= std::begin(textures)) + glBindTexture(GL_TEXTURE_2D, (*position).first); + else + position = std::begin(textures); + } + void operator()(const int &index) { + if (index < 0 || index > static_cast<int>(textures.size())) + throw std::invalid_argument("texture index out of range"); + + position = std::begin(textures) + index; + glBindTexture(GL_TEXTURE_2D, (*position).first); + } + const std::string& getTexturePath(const int &index) { + if (index < 0 || index > static_cast<int>(textures.size())) + throw std::invalid_argument("texture index out of range"); + + return textures[index].second; + } +}; + +/** * The Texturec class. * * This class can handle an array of textures and allows easy binding of those diff --git a/include/world.hpp b/include/world.hpp index daf8ae4..0aea879 100644 --- a/include/world.hpp +++ b/include/world.hpp @@ -66,16 +66,18 @@ extern int worldShade; extern std::string currentXML; // defines how many game ticks it takes for a day to elapse -extern const unsigned int DAY_CYCLE; +constexpr const unsigned int DAY_CYCLE = 12000; // velocity of player when moved by user -extern const float PLAYER_SPEED_CONSTANT; +constexpr const float PLAYER_SPEED_CONSTANT = 0.15f; // maximum pull of gravity in one game tick -extern const float GRAVITY_CONSTANT; +constexpr const float GRAVITY_CONSTANT = 0.001f; // height of the floor in an indoor world -extern const unsigned int INDOOR_FLOOR_HEIGHT; +constexpr const unsigned int INDOOR_FLOOR_THICKNESS = 50; +constexpr const unsigned int INDOOR_FLOOR_HEIGHTT = 400; +constexpr const unsigned int INDOOR_FLOOR_HEIGHT = (INDOOR_FLOOR_HEIGHTT + INDOOR_FLOOR_THICKNESS); /* ---------------------------------------------------------------------------- ** Classes / function prototypes section @@ -110,7 +112,7 @@ protected: int worldStart; // holds / handles textures for background elements - Texturec *bgTex; + TextureIterator bgTex; // defines what type of background is being used WorldBGType bgType; |