diff options
Diffstat (limited to 'src/common.hpp')
-rw-r--r-- | src/common.hpp | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/src/common.hpp b/src/common.hpp new file mode 100644 index 0000000..aaf1cad --- /dev/null +++ b/src/common.hpp @@ -0,0 +1,70 @@ +#include <iostream> +#include <cstdint> +#include <cmath> +#include <map> +#include <SFML/Graphics.hpp> + +namespace game { + class entity_t { + virtual void render(sf::RenderWindow *window) = 0; + }; +} + +namespace world { + #define SECTOR_SIZE 16 + + class tile_t { + public: + char type; + }; + + class sector_index_t { + public: + int64_t x, y; + + sector_index_t (); + sector_index_t (int64_t x_, int64_t y_); + bool operator<(sector_index_t B) const; + }; + + class sector_t { + std::vector<game::entity_t*> entities; + public: + bool empty = true; + tile_t tiles[SECTOR_SIZE * SECTOR_SIZE]; + + void generate(sector_index_t index); + }; + + class world_t { + std::map<sector_index_t, sector_t> sectors; + + public: + sector_t *get_sector(sector_index_t index); + tile_t *get_tile(ssize_t x, ssize_t y); + + void link(game::entity_t *entity); + void unlink(game::entity_t *entity); + void render(sf::RenderWindow *window); + }; +} + +namespace interface { + class state_t { + struct { + sf::Vector2f center; + int target_zoom = 3; + float zoom = 3.0f; + bool dragging = false; + sf::Vector2f drag_ref; + } camera; + + public: + sf::RenderWindow *window; + world::world_t *world; + + state_t(sf::RenderWindow *window_, world::world_t *world_); + void tick(void); + void render(void); + }; +} |