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

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

Bug fixing doubleplant and sprint without sprinting

Christian Immanuel · 2025-12-14 14:34 · e942927cf6c37072dab2d2a47e5f11efabd04347

 src/character/character.cpp | 44 +++++++++++++++++++++++++++++++++++++-------
 1 file changed, 37 insertions(+), 7 deletions(-)

diff --git a/src/character/character.cpp b/src/character/character.cpp
index 85e4571..32f36ed 100644
--- a/src/character/character.cpp
+++ b/src/character/character.cpp
@@ -841,9 +841,13 @@ Character::plant_Start() {
     std::cout << "Plant Start\n";
     if (stats.stamina <= 0)
         return;
-
     if (!Farm::soil_IsMaptile(tile_world))
         return;
+    if (Map::tile_map[static_cast<size_t>(Map::get_IdFromTilePoint(tile_world))].objects.size() > 0) {
+        std::cout << "SIZE:: " << Map::tile_map[static_cast<size_t>(Map::get_IdFromTilePoint(tile_world))].objects.size() << std::endl;
+        return;
+    }
+
     set_Status(CharacterStatus::PLANTING);
     handle_Animation();
     planting_logic.is_planting = true;
@@ -1297,10 +1301,10 @@ Character::handle_Input(Input& input, SDL_Rect win_size) {
             case ObjectCategory::FARM_CROP:
                 collect_Start(map_object_p, tile_point);
                 std::cout << "STAT: " << (int)status << std::endl;
-                break;
+                return;
             case ObjectCategory::BUILDING:
                 interact_WithBuilding(static_cast<Building*>(object));
-                break;
+                return;
             default: break;
         }
     }
@@ -1327,8 +1331,10 @@ Character::handle_Input(Input& input, SDL_Rect win_size) {
                 }
             } else
             if (selected_item->object_type == InventoryObjectType::VEGETABLE) {
-                if (!planting_logic.is_planting)
+                if (!planting_logic.is_planting) {
                     plant_Start();
+                    return;
+                }
             }
         } else
         // RIGHT CLICK
@@ -1357,14 +1363,38 @@ Character::handle_Input(Input& input, SDL_Rect win_size) {
     }
     if (status == CharacterStatus::COLLECT) {
         collect_Object();
+    } else if (collecting_logic.is_collecting) {
+        collect_Stop();
     }
 
-    if (input.pressed_shift && stats.stamina > 0) {
-        // SPRINT START
-        stats.stamina -= 0.05;
+    if (input.pressed_shift && stats.stamina > 0 &&
+        (status == CharacterStatus::WALK || status == CharacterStatus::RUN)) {
+
+        // START SPRINT
+        double stamina_drain = 0.05;
+
+        if (sprintstart_logic.is_starting) {
+            double elapsed = Default::get_TimeSinceStartInSec() - sprintstart_logic.started_gamesec;
+
+            double t = elapsed / sprintstart_logic.starting_duration;
+            if (t > 1.0)
+                t = 1.0;
+
+            // quadratic ramp
+            stamina_drain *= (t * t);
+
+            if (t >= 1.0) {
+                sprintstart_logic.has_started = true;
+                sprintstart_logic.is_starting = false;
+                std::cout << "SPRINTING..\n";
+            }
+        }
+
+        stats.stamina -= stamina_drain;
         if (stats.stamina <= 0)
             stamina_StopReg();
         else {
+        // END SPRINT
             is_sprinting = true;
             if (!sprintstart_logic.is_starting && !sprintstart_logic.has_started) {
                 // begin sprint acceleration