From aff1681f6638f591e2c8281f63847550115a2a19 Mon Sep 17 00:00:00 2001 From: Andy Date: Wed, 19 Oct 2016 10:46:12 -0400 Subject: CATATATATATATATTTTT (basic entities) --- include/common.hpp | 1 + include/components.hpp | 38 +++++++++++++++++++++++++++++++++++++- include/engine.hpp | 9 ++++++++- include/entities.hpp | 1 + include/texture.hpp | 36 ++++++++++++++++++++++++++++++++++++ 5 files changed, 83 insertions(+), 2 deletions(-) (limited to 'include') 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 #include #include +#include // 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 +#include /** * @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 { +private: +public: + void update(entityx::EntityManager &en, entityx::EventManager &ev, entityx::TimeDelta dt) override; +}; + +class RenderSystem : public entityx::System { +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 +#include "entityx/deps/Dependencies.h" +#include +#include #include +//game::engine::Systems->add>(); + class Engine : public entityx::Receiver { 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(); } + + 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 sprites; + std::unordered_map 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? */ -- cgit v1.2.3