git repos / saland

commit 4c2ba641

sago007 · 2017-04-30 20:33
4c2ba64191a282202278b49971ed1365ca3cbf98 patch · browse files
parent 7c62e8255f29136ff1a5cf2042ee509c24702f94

Can now move around the map

Changed files

M data/maps/sample1.tmx before
M src/saland/Game.cpp before
M src/saland/Game.hpp before
A src/saland/model/placeables.hpp
diff --git a/data/maps/sample1.tmx b/data/maps/sample1.tmx index a2a9f1c..84163fd 100644 --- a/data/maps/sample1.tmx +++ b/data/maps/sample1.tmx
@@ -11,4 +11,9 @@
eJztmztvE0EURseh4Q0JUEIBDY8ECIgSJKDgFSBJTZAgBaEj1AgJKAgFzxpo7UgohIgy5A8QkQL4FTikAHrulfey15Nd74y9u0mY70if7F2vYmuO7p2ZtWNMa6YqxjynvKtkXAhKgX0swUfpfKXx/kb5bo07+/gJH6Xzi8b7N+Wj5YR9LMJH6bCP413GnKD8sXwswEfpSH0k+UC/Kp8d5GFnlF1d8fnVtL46TTmTkrMr+LnKpJ35Y5AylJLhNj8Hu9hHuZmSvSYMJ+34uEOZUZlW6Tf+TrJcSEY9/+5aROaPecrWruzrGfYxbpJ9fKDc9fwMN0y2i5B81D3nEF0f4mA8Cnx0Rh/VxDPy8N6jRqQ+pEb4cdrEjorwwR/rkeffXavIPRPX+ybsQ2pCHmei5+ylCB8h1IYgNeLq4wWlx8S1oXtVN+WV5/trH1wH60y4tSH4zuvs5GVCfF0wD0zsYDQ6fqgSmgvGt2fljdRIKPuMLKRnLXquffNC1wicNPCdR/JGzyMhzd+taGd/mBd2jYR03yqNdueRjXTtpiibO6gte+0buhe9P8zyoR3U6fhQpZEfpn03sray17wh968px/36wUrsIC3ipl0vIa95Bb3WalUjLj60l076WOi41IiPDzjpDPlepNV367aPz3TuUiXOvEl3soU9U7bBjxMu931tH72U7ZRuSk8luX7Y2QA99lEO89rawIkrshepp9RIko+jlH7KsRQfvVFtLJmGDzhxJ2u/nuRjkDJEGW7hQ2pDh52gf2Uj80hSz7pozRF632HvSbJ82F7gJhn5vVxajdhOspLlw3YDJ81Iz2r1/To7SVtPdeIDTpKRe1pZ+3UXL74+4GQ5ss5y/Z1WKy/s4zL3QOPn5Ah8/EN61oJDjWiS5hbZD7KTKx5e4KMZ+Z2vy31fTSsnTFatfDENb1fho4lOvs9NctKrxldqJSnwkI6eR9pxou9tDWCcO0avfdPuoYByWenfoYDlyNzuu94CxSA1Uq/gf91WC67f6YLykPso8FEM5yjnKRccr+caecr7NswfHSNjL2EHtyhjlP3G3QnIBxn7ahR2cIAySalFxz614sM1ygjlesK5kYTXQkB8yPhXo2NJLXqtCC/3KHOUkyYedz43G0VeC8nLY8oG0xh37YEdVE3sSJ7n6UXG/pOJndg+5tTroXjhGpk0sQN5PqaOa9bx7Rze9zVlj2mMN48/j/kpE3uYM81utLf/GakRu0/pfqXrROaZPGpEOxEvevyTzt/P4X1XO+JE+pK40HPKpDrHx3nUCMNO3piGF+lfOrpW+DgEHwz3rbS6mFSRa/JeD0ut6HlDfMyq5yH5kDlEasKeN7QTPpdXjQi6f2kv8sheQvMxph61j1rCa3n7YHSdiAPds0LzIb3KrhVxUlPXFOGD0XOK7lu7KW8Les/VBvuQvqTHvmod63VxUT4E8SIJxQWj94Z6HWX74KynTFCerMgnDQd2MuEQeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARfIXqGm/kQ==
</data>
</layer>
+ <layer name="blocking" width="100" height="100">
+ <data encoding="base64" compression="zlib">
+ eJzt0bEJAEAIBEHtv87vQ8w/V2EGLj/YCAAAAAAAAAAA4LKX0w9o3eE3Zuixix4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXFPX2xET
+ </data>
+ </layer>
</map>
diff --git a/src/saland/Game.cpp b/src/saland/Game.cpp index b79502f..756cca6 100644 --- a/src/saland/Game.cpp +++ b/src/saland/Game.cpp
@@ -2,6 +2,7 @@
#include "../sagotmx/tmx_struct.h"
#include "../sago/SagoMisc.hpp"
#include "globals.hpp"
+#include "model/placeables.hpp"
static void Draw(SDL_Renderer* target, SDL_Texture* t, int x, int y, const SDL_Rect& part) {
SDL_Rect pos = {};
@@ -12,7 +13,7 @@ static void Draw(SDL_Renderer* target, SDL_Texture* t, int x, int y, const SDL_R
SDL_RenderCopy(target, t, &part, &pos);
}
-static void DrawLayer(SDL_Renderer* renderer, SDL_Texture* texture, const sago::tiled::TileMap& tm, size_t layer) {
+static void DrawLayer(SDL_Renderer* renderer, SDL_Texture* texture, const sago::tiled::TileMap& tm, size_t layer, int topx, int topy) {
for (int i = 0; i < tm.height; ++i) {
for (int j = 0; j < tm.width; ++j) {
uint32_t gid = sago::tiled::getTileFromLayer(tm, tm.layers.at(layer), i, j);
@@ -21,17 +22,34 @@ static void DrawLayer(SDL_Renderer* renderer, SDL_Texture* texture, const sago::
}
SDL_Rect part{};
getTextureLocationFromGid(tm, gid, nullptr, &part.x, &part.y, &part.w, &part.h);
- Draw(renderer, texture, 32*i, 32*j, part);
+ Draw(renderer, texture, 32*i-topx, 32*j-topy, part);
}
}
}
+struct Game::GameImpl {
+ std::vector<std::shared_ptr<Placeable> > placeables;
+ float time = 0.0;
+ std::shared_ptr<Human> human;
+ int center_x = 0;
+ int center_y = 0;
+ bool drawCollision = true;
+ sago::tiled::TileSet ts;
+ sago::tiled::TileMap tm;
+ float topx = 0.0;
+ float topy = 0.0;
+ char direction = 0;
+ Uint32 lastUpdate = 0;
+};
+
Game::Game() {
+ data.reset(new Game::GameImpl());
std::string tsx_file = sago::GetFileContent("maps/terrain.tsx");
std::string tmx_file = sago::GetFileContent("maps/sample1.tmx");
- ts = sago::tiled::string2tileset(tsx_file);
- tm = sago::tiled::string2tilemap(tmx_file);
- tm.tileset.alternativeSource = &ts;
+ data->ts = sago::tiled::string2tileset(tsx_file);
+ data->tm = sago::tiled::string2tilemap(tmx_file);
+ data->tm.tileset.alternativeSource = &data->ts;
+ data->lastUpdate = SDL_GetTicks();
}
Game::~Game() {
@@ -43,15 +61,48 @@ bool Game::IsActive() {
void Game::Draw(SDL_Renderer* target) {
SDL_Texture* texture = globalData.spriteHolder->GetDataHolder().getTexturePtr("terrain");
- for (size_t i = 0; i < tm.layers.size(); ++i ) {
- DrawLayer(target, texture, tm, i);
+ for (size_t i = 0; i < data->tm.layers.size(); ++i ) {
+ DrawLayer(target, texture, data->tm, i, data->topx, data->topy);
}
}
void Game::ProcessInput(const SDL_Event& event, bool& processed) {
-
+ data->direction = 0;
+ if ( event.type == SDL_KEYDOWN ) {
+ if (event.key.keysym.sym == SDLK_DOWN) {
+ data->direction = 'S';
+ processed = true;
+ }
+ if (event.key.keysym.sym == SDLK_UP) {
+ data->direction = 'N';
+ processed = true;
+ }
+ if (event.key.keysym.sym == SDLK_LEFT) {
+ data->direction = 'W';
+ processed = true;
+ }
+ if (event.key.keysym.sym == SDLK_RIGHT) {
+ data->direction = 'E';
+ processed = true;
+ }
+ }
}
void Game::Update() {
+ Uint32 nowTime = SDL_GetTicks();
+ Uint32 deltaTime = nowTime - data->lastUpdate;
+ if (data->direction == 'S') {
+ data->topy += deltaTime/10.0f;
+ }
+ if (data->direction == 'N') {
+ data->topy -= deltaTime/10.0f;
+ }
+ if (data->direction == 'E') {
+ data->topx += deltaTime/10.0f;
+ }
+ if (data->direction == 'W') {
+ data->topx -= deltaTime/10.0f;
+ }
+ data->lastUpdate = nowTime;
}
diff --git a/src/saland/Game.hpp b/src/saland/Game.hpp index f74db04..917ee15 100644 --- a/src/saland/Game.hpp +++ b/src/saland/Game.hpp
@@ -1,6 +1,8 @@
#ifndef GAME_HPP
#define GAME_HPP
+#include <memory>
+
#include "../sago/GameStateInterface.hpp"
#include "../sagotmx/tmx_struct.h"
@@ -13,8 +15,8 @@ public:
virtual void Update() override;
virtual ~Game();
private:
- sago::tiled::TileSet ts;
- sago::tiled::TileMap tm;
+ struct GameImpl;
+ std::unique_ptr<GameImpl> data;
};
#endif /* GAME_HPP */
diff --git a/src/saland/model/placeables.hpp b/src/saland/model/placeables.hpp new file mode 100644 index 0000000..3068991 --- /dev/null +++ b/src/saland/model/placeables.hpp
@@ -0,0 +1,35 @@
+#ifndef PLACEABLES_HPP
+#define PLACEABLES_HPP
+
+#include <string>
+
+class Placeable {
+public:
+ float X = 20.0;
+ float Y = 20.0;
+ float Radius = 0.0;
+ virtual bool isStatic() {return true; }
+};
+
+class MistItem : public Placeable {
+public:
+ std::string sprite;
+};
+
+class Creature : public Placeable {
+public:
+ float health = 10.0;
+ float stinema = 10.0;
+ float mana = 10.0;
+ char direction = 'S';
+ bool moving = false;
+ virtual bool isStatic() override { return false; }
+};
+
+class Human : public Creature {
+public:
+ std::string race = "male";
+};
+
+#endif /* PLACEABLES_HPP */
+