Nimbin[12]?SDL & Graphics / mapcreator / commits / a9bd058

mapcreator git · master

SDL3 2.5D game and engine using assets, with map editor

sdl3 c++ game engine map-editor cmake · first commit 2025-10-31 · last commit 2026-09-07 (1 month ago) · synced 3 days ago · upstream: git.ide3.de/hsnr/sdl-spieleentwicklung/map_creator

C++ 99.3%
git clone https://git.christianimmanuel.de/sdl-graphics/mapcreator.gitwget https://git.christianimmanuel.de/sdl-graphics/mapcreator/archive/mapcreator.tar.gz

Add water meadow anim

Christian Immanuel · 2025-12-17 10:13 · a9bd058912c0558899dd70ba4b133458b490b934

 src/game/game.cpp |  6 +++---
 src/map/map.cpp   | 34 +++++++++++++++++++++++++++++++++-
 src/map/map.hpp   |  7 +++++++
 3 files changed, 43 insertions(+), 4 deletions(-)

diff --git a/src/game/game.cpp b/src/game/game.cpp
index 2b898b2..53dd8ba 100644
--- a/src/game/game.cpp
+++ b/src/game/game.cpp
@@ -231,9 +231,9 @@ void Game::handle_Events() {
                 break;
             case SDL_EVENT_MOUSE_WHEEL:
                 if (event.wheel.y > 0)
-                    Default::game_scale += 0.1f;
+                    Default::game_scale += 0.2f;
                 else if (event.wheel.y < 0)
-                    Default::game_scale -= 0.1f;
+                    Default::game_scale -= 0.2f;
 
                 if (Default::game_scale < 0.5)
                     Default::game_scale = 0.5;
@@ -324,7 +324,7 @@ void Game::Update() {
 }
 
 void Game::Render() {
-    SDL_SetRenderDrawColor(renderer, 0, 128, 255, 255);
+    SDL_SetRenderDrawColor(renderer, 62, 146, 209, 255);
     SDL_RenderClear(renderer);
 
     Map::draw_MapTiles(this);
diff --git a/src/map/map.cpp b/src/map/map.cpp
index ded05f3..ba189ee 100644
--- a/src/map/map.cpp
+++ b/src/map/map.cpp
@@ -30,6 +30,14 @@ namespace Map {
 
     std::vector<bool> tile_collission_map;
 
+    int   frame_water = 0;
+    float frame_water_time = 0.0f;
+    float frame_water_time_max = 0.6f;
+
+    int   frame_meadow = 0;
+    float frame_meadow_time = 0.0f;
+    float frame_meadow_time_max = 0.6f;
+
     void
     Init() {
             tile_map.resize(static_cast<size_t>(Map::size.x * Map::size.y));
@@ -625,6 +633,7 @@ namespace Map {
 
     void
     draw_MapTiles(Game* game) {
+        // std::cout << "FL " << Map::offset.x << " " << Map::offset.y << " " << Default::game_scale << std::endl;
         SDL_Renderer* renderer = game->renderer;
         Input& input = game->input;
         Character& player = *game->state_playing->player;
@@ -637,6 +646,23 @@ namespace Map {
 
         int size = Tile::get_Size();
 
+        frame_water_time += Default::delta_time;
+        if (frame_water_time >= frame_water_time_max) {
+            frame_water = frame_water > 0 ? frame_water-1 : 3;
+            frame_water_time = 0.0f;
+            if (frame_water == 0)
+                frame_water_time_max = 0.3f + ((float)rand() / (float)RAND_MAX) * 1.2f;
+            //std::cout << "frame_water_time_max: " << frame_water_time_max << std::endl;
+        }
+        frame_meadow_time += Default::delta_time;
+        if (frame_meadow_time >= frame_meadow_time_max) {
+            frame_meadow++;
+            frame_meadow %= 3;
+            frame_meadow_time = 0.0f;
+            if (frame_meadow == 0)
+                frame_meadow_time_max = 0.3f + ((float)rand() / (float)RAND_MAX) * 1.2f;
+            //std::cout << "frame_meadow_time_max: " << frame_meadow_time_max << std::endl;
+        }
         for (size_t i = 0; i < Map::tile_map.size(); ++i) {
             // START draw background tiles
             Tile_s& tile = Map::tile_map[i].background;
@@ -659,13 +685,19 @@ namespace Map {
             float yf = world_y + Map::offset.y;
 
             SDL_FRect dst {
-                Scale(xf),
+                    Scale(xf),
                     Scale(yf),
                     Scale(size),
                     Scale(size)
             };
 
             SDL_Point set_position = tile.set_position;
+            if (tile.set_category == TileCategory::TILE_WATER && set_position.y < 5) {
+                set_position.x += (frame_water + y_i+x_i) % 4*6;
+            } else
+            if (tile.set_category == TileCategory::TILE_GROUND && set_position.y == 10) {
+                set_position.x += (frame_meadow + y_i+x_i) % 3;
+            }
             SDL_FRect src {
                     static_cast<float>(set_position.x) * Tile::tile_size,
                     static_cast<float>(set_position.y) * Tile::tile_size,
diff --git a/src/map/map.hpp b/src/map/map.hpp
index 96b8443..15afe13 100644
--- a/src/map/map.hpp
+++ b/src/map/map.hpp
@@ -33,6 +33,13 @@ namespace Map {
     extern SDL_Point offset;
     extern SDL_Point size;
 
+    extern int   frame_water;
+    extern float frame_water_time;
+    extern float frame_water_time_max;
+    extern int   frame_meadow;
+    extern float frame_meadow_time;
+    extern float frame_meadow_time_max;
+
     extern std::vector<TileMap> tile_map;
     extern std::vector<bool> tile_collission_map;