diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/common.hpp | 1 | ||||
-rw-r--r-- | include/components.hpp | 38 | ||||
-rw-r--r-- | include/engine.hpp | 9 | ||||
-rw-r--r-- | include/entities.hpp | 1 | ||||
-rw-r--r-- | include/texture.hpp | 36 |
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? */ |