mapcreator git · master
SDL3 2.5D game and engine using assets, with map editor
C++ 99.3%git clone https://git.christianimmanuel.de/sdl-graphics/mapcreator.gitwget https://git.christianimmanuel.de/sdl-graphics/mapcreator/archive/mapcreator.tar.gzAdd water meadow anim
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;