aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/common.hpp168
-rw-r--r--include/entities.hpp5
-rw-r--r--include/texture.hpp43
-rw-r--r--include/world.hpp12
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;