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.gzBug fixing doubleplant and sprint without sprinting
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