aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/common.hpp1
-rw-r--r--include/components.hpp38
-rw-r--r--include/engine.hpp9
-rw-r--r--include/entities.hpp1
-rw-r--r--include/texture.hpp36
5 files changed, 83 insertions, 2 deletions
diff --git a/include/common.hpp b/include/common.hpp
index 69e6a11..e7ed8e1 100644
--- a/include/common.hpp
+++ b/include/common.hpp
@@ -14,6 +14,7 @@
#include <algorithm>
#include <list>
#include <iterator>
+#include <unordered_map>
// alternative windows thread library
#ifndef __WIN32__
diff --git a/include/components.hpp b/include/components.hpp
index 5a638de..31ff283 100644
--- a/include/components.hpp
+++ b/include/components.hpp
@@ -10,6 +10,7 @@
#define COMPONENTS_HPP
#include <entityx/entityx.h>
+#include <common.hpp>
/**
* @struct Position
@@ -91,7 +92,11 @@ struct Solid {
};
struct SpriteData {
- uint sheetID;
+
+ SpriteData(uint64_t sid = 0, vec2 offset = 0.0f, vec2 size = 0.0f):
+ sheetID(sid), offset(offset), size(size) {}
+
+ uint64_t sheetID;
vec2 offset;
vec2 size;
};
@@ -148,4 +153,35 @@ struct Input {
};
+/**
+ * @struct Visible
+ * @brief If an entity is visible we want to be able to draw it.
+ */
+struct Visible {
+ /**
+ * @brief Decide what layer to draw the entity on.
+ * When stuff is drawn, it is drawn on a "layer". This layer gives more of a 3D effect to the world.
+ * @param z The desired "layer" of the entity.
+ */
+ Visible(float z = 0.0f): z(z) {}
+
+ float z; /**< The value along the z axis the entity will be drawn on */
+};
+
+/**
+ * SYSTEMS
+ */
+
+class MovementSystem : public entityx::System<MovementSystem> {
+private:
+public:
+ void update(entityx::EntityManager &en, entityx::EventManager &ev, entityx::TimeDelta dt) override;
+};
+
+class RenderSystem : public entityx::System<RenderSystem> {
+private:
+public:
+ void update(entityx::EntityManager &en, entityx::EventManager &ev, entityx::TimeDelta dt) override;
+};
+
#endif //COMPONENTS_HPP
diff --git a/include/engine.hpp b/include/engine.hpp
index 2bde6de..e564691 100644
--- a/include/engine.hpp
+++ b/include/engine.hpp
@@ -2,9 +2,14 @@
#define ENGINE_HPP_
#include <entityx/entityx.h>
+#include "entityx/deps/Dependencies.h"
+#include <texture.hpp>
+#include <components.hpp>
#include <events.hpp>
+//game::engine::Systems->add<entityx::deps::Dependency<Visible, Sprite>>();
+
class Engine : public entityx::Receiver<Engine> {
private:
bool gameRunning;
@@ -38,7 +43,7 @@ public:
namespace game {
- extern entityx::EventManager events;
+ extern entityx::EventManager events;
extern entityx::EntityManager entities;
extern Engine engine;
@@ -46,6 +51,8 @@ namespace game {
inline void endGame(void) {
events.emit<GameEndEvent>();
}
+
+ extern SpriteLoader sprite_l;
}
diff --git a/include/entities.hpp b/include/entities.hpp
index 49598bd..95cbff7 100644
--- a/include/entities.hpp
+++ b/include/entities.hpp
@@ -517,6 +517,7 @@ public:
void receive(const KeyUpEvent &kue);
};
+void entityxTest();
#endif // ENTITIES_H
diff --git a/include/texture.hpp b/include/texture.hpp
index 7f22a79..7426a46 100644
--- a/include/texture.hpp
+++ b/include/texture.hpp
@@ -35,6 +35,42 @@ namespace Texture {
dim2 imageDim(std::string fileName);
}
+class SpriteLoader {
+private:
+ std::unordered_map<uint64_t, GLuint> sprites;
+ std::unordered_map<std::string, uint64_t> spritesLoc;
+
+ uint64_t freeID = 0;
+ uint64_t increaseID() {
+ uint64_t id_t = 0;
+ while (1) {
+ try {
+ sprites.at(id_t);
+ } catch (const std::out_of_range& oor) {
+ freeID = id_t;
+ return freeID;
+ }
+ id_t++;
+ }
+ }
+public:
+ uint64_t loadSprite(std::string s) {
+ uint64_t tex_e;
+ try {
+ tex_e = spritesLoc.at(s);
+ } catch (const std::out_of_range& oor) {
+ sprites.emplace(increaseID(), Texture::loadTexture (s));
+ spritesLoc.emplace(s, freeID);
+ return freeID;
+ }
+ return tex_e;
+ }
+
+ GLuint getSprite(uint64_t id) {
+ return sprites.at(id);
+ }
+};
+
/**
* DRAFT texture iterator?
*/