summaryrefslogtreecommitdiff
path: root/src/common.hpp
diff options
context:
space:
mode:
authorPaweł Redman <pawel.redman@gmail.com>2017-10-10 19:33:33 +0200
committerPaweł Redman <pawel.redman@gmail.com>2017-10-10 19:33:33 +0200
commit753f71536339b78c49468ba6452c96d6b3c345b2 (patch)
tree0f3edbef6b2a34a738dc37cc8dd8c11a98e54c85 /src/common.hpp
parentff4929c650e6ed446b6faff9f6b0f078d0a3644c (diff)
Finish work on world entities, start experimenting with world generation.
Diffstat (limited to 'src/common.hpp')
-rw-r--r--src/common.hpp24
1 files changed, 16 insertions, 8 deletions
diff --git a/src/common.hpp b/src/common.hpp
index 6a30f9e..06e9d9f 100644
--- a/src/common.hpp
+++ b/src/common.hpp
@@ -1,7 +1,9 @@
#include <iostream>
#include <cstdint>
#include <cmath>
+#include <cassert>
#include <map>
+#include <list>
#include <unordered_set>
#include <SFML/Graphics.hpp>
@@ -45,6 +47,7 @@ namespace world {
sector_index_t ();
sector_index_t (int64_t x_, int64_t y_);
+ sector_index_t (float x_, float y_);
bool operator<(sector_index_t B) const;
};
@@ -52,6 +55,7 @@ namespace world {
class sector_t {
public:
+ sector_index_t index;
sf::FloatRect bounds;
std::unordered_set<entity_t*> ents;
@@ -64,6 +68,7 @@ namespace world {
procgen::perlin_noise_t perlin;
std::map<sector_index_t, sector_t> sectors;
+ void generate_tile(ssize_t lx, ssize_t ly, tile_t *tile);
void generate(sector_t *sector, sector_index_t index);
public:
@@ -71,7 +76,13 @@ namespace world {
sector_t *get_sector(sector_index_t index);
tile_t *get_tile(ssize_t x, ssize_t y);
+ // FIXME: iterators instead of returning std::lists
+ std::list<sector_t*> get_sectors(sf::FloatRect rect);
+ std::list<entity_t*> get_entities(sf::FloatRect rect);
+
void render(sf::RenderWindow *window);
+
+ void debug_point(sf::Vector2f point);
};
class entity_t {
@@ -80,6 +91,10 @@ namespace world {
void link_to_sector(sector_t *sector);
+ protected:
+ friend world_t;
+ size_t cookie = 0;
+
public:
sf::FloatRect bounds;
@@ -92,9 +107,9 @@ namespace world {
namespace game {
class state_t {
+ public:
world::world_t world;
- public:
void start(void);
void tick(void);
void render(sf::RenderWindow *window_);
@@ -142,13 +157,6 @@ T divide_rmi(T x, T y, T *rem)
return rv;
}
-// Modulo operation. y is expected to be positive.
-template <typename T>
-T mod(T x, T y)
-{
- return (x % y) + (x < 0 ? y : 0);
-}
-
// Linear interpolation.
template <typename T>
T lerp(T a, T b, T x)