LCOV - code coverage report
Current view: top level - core/animations - AnimationData.cpp (source / functions) Coverage Total Hit
Test: coverage-src.info Lines: 0.0 % 84 0
Test Date: 2025-05-27 23:26:07 Functions: 0.0 % 4 0

            Line data    Source code
       1              : #include "core/animations/AnimationData.hpp"
       2              : 
       3              : #include "core/utility/Getline.hpp"
       4              : 
       5              : #include "spdlog/spdlog.h"
       6              : 
       7              : #include <algorithm>
       8              : #include <ranges>
       9              : #include <string_view>
      10              : #include <array>
      11              : 
      12              : namespace Soldank
      13              : {
      14            0 : void AnimationDataManager::LoadAnimationData(AnimationType animation_type,
      15              :                                              const std::string& file_path,
      16              :                                              bool looped,
      17              :                                              int speed,
      18              :                                              const IFileReader& file_reader)
      19              : {
      20            0 :     spdlog::info("LoadAnimationData");
      21              : 
      22            0 :     auto file_data = file_reader.Read(file_path);
      23            0 :     if (!file_data.has_value()) {
      24            0 :         spdlog::critical("Animation file not found {}", file_path);
      25            0 :         std::string message = "Could not open file: " + file_path;
      26            0 :         throw std::runtime_error(message.c_str());
      27            0 :     }
      28            0 :     std::stringstream data_buffer{ *file_data };
      29            0 :     spdlog::info("Animation: {}", file_path);
      30              : 
      31            0 :     std::string line;
      32            0 :     std::vector<glm::vec2> positions;
      33            0 :     std::vector<AnimationFrame> frames;
      34              : 
      35            0 :     GetlineSafe(data_buffer, line);
      36            0 :     while (!data_buffer.eof() && (line != "ENDFILE")) {
      37            0 :         if (line == "NEXTFRAME") {
      38            0 :             frames.push_back({ positions });
      39            0 :             positions.clear();
      40              :         } else {
      41            0 :             unsigned int point = std::stoul(line);
      42            0 :             if (point != positions.size() + 1) {
      43            0 :                 spdlog::error("Error in Animation loading: {} != {}", point, positions.size() + 1);
      44              :             }
      45              : 
      46            0 :             GetlineSafe(data_buffer, line);
      47            0 :             float x = std::stof(line);
      48            0 :             GetlineSafe(data_buffer, line); // y is not used for some reason
      49            0 :             GetlineSafe(data_buffer, line);
      50            0 :             float z = std::stof(line);
      51              : 
      52            0 :             positions.emplace_back(-3.0F * x / 1.1F, -3.0 * z);
      53              :         }
      54              : 
      55            0 :         GetlineSafe(data_buffer, line);
      56              :     }
      57              : 
      58            0 :     frames.push_back({ positions });
      59              : 
      60            0 :     animation_datas_.push_back(
      61            0 :       std::make_shared<AnimationData>(animation_type, looped, speed, frames));
      62            0 : }
      63              : 
      64            0 : void AnimationDataManager::LoadAllAnimationDatas(const IFileReader& file_reader)
      65              : {
      66            0 :     const auto get_file_path = [](std::string_view file_name) {
      67            0 :         return std::string{ ANIMATION_BASE_DIRECTORY_PATH } + std::string{ file_name };
      68              :     };
      69              :     // clang-format off
      70            0 :     LoadAnimationData(AnimationType::Stand,          get_file_path(ANIMATION_STAND_FILE),           true,  3, file_reader);
      71            0 :     LoadAnimationData(AnimationType::Run,            get_file_path(ANIMATION_RUN_FILE),             true,  1, file_reader);
      72            0 :     LoadAnimationData(AnimationType::RunBack,        get_file_path(ANIMATION_RUN_BACK_FILE),        true,  1, file_reader);
      73            0 :     LoadAnimationData(AnimationType::Jump,           get_file_path(ANIMATION_JUMP_FILE),            false, 1, file_reader);
      74            0 :     LoadAnimationData(AnimationType::JumpSide,       get_file_path(ANIMATION_JUMP_SIDE_FILE),       false, 1, file_reader);
      75            0 :     LoadAnimationData(AnimationType::Fall,           get_file_path(ANIMATION_FALL_FILE),            false, 1, file_reader);
      76            0 :     LoadAnimationData(AnimationType::Crouch,         get_file_path(ANIMATION_CROUCH_FILE),          false, 1, file_reader);
      77            0 :     LoadAnimationData(AnimationType::CrouchRun,      get_file_path(ANIMATION_CROUCH_RUN_FILE),      true,  2, file_reader);
      78            0 :     LoadAnimationData(AnimationType::Reload,         get_file_path(ANIMATION_RELOAD_FILE),          false, 2, file_reader);
      79            0 :     LoadAnimationData(AnimationType::Throw,          get_file_path(ANIMATION_THROW_FILE),           false, 1, file_reader);
      80            0 :     LoadAnimationData(AnimationType::Recoil,         get_file_path(ANIMATION_RECOIL_FILE),          false, 1, file_reader);
      81            0 :     LoadAnimationData(AnimationType::SmallRecoil,    get_file_path(ANIMATION_SMALL_RECOIL_FILE),    false, 1, file_reader);
      82            0 :     LoadAnimationData(AnimationType::Shotgun,        get_file_path(ANIMATION_SHOTGUN_FILE),         false, 1, file_reader);
      83            0 :     LoadAnimationData(AnimationType::ClipOut,        get_file_path(ANIMATION_CLIP_OUT_FILE),        false, 3, file_reader);
      84            0 :     LoadAnimationData(AnimationType::ClipIn,         get_file_path(ANIMATION_CLIP_IN_FILE),         false, 3, file_reader);
      85            0 :     LoadAnimationData(AnimationType::SlideBack,      get_file_path(ANIMATION_SLIDE_BACK_FILE),      false, 2, file_reader);
      86            0 :     LoadAnimationData(AnimationType::Change,         get_file_path(ANIMATION_CHANGE_FILE),          false, 1, file_reader);
      87            0 :     LoadAnimationData(AnimationType::ThrowWeapon,    get_file_path(ANIMATION_THROW_WEAPON_FILE),    false, 1, file_reader);
      88            0 :     LoadAnimationData(AnimationType::WeaponNone,     get_file_path(ANIMATION_WEAPON_NONE_FILE),     false, 3, file_reader);
      89            0 :     LoadAnimationData(AnimationType::Punch,          get_file_path(ANIMATION_PUNCH_FILE),           false, 1, file_reader);
      90            0 :     LoadAnimationData(AnimationType::ReloadBow,      get_file_path(ANIMATION_RELOAD_BOW_FILE),      false, 1, file_reader);
      91            0 :     LoadAnimationData(AnimationType::Barret,         get_file_path(ANIMATION_BARRET_FILE),          false, 9, file_reader);
      92            0 :     LoadAnimationData(AnimationType::Roll,           get_file_path(ANIMATION_ROLL_FILE),            false, 1, file_reader);
      93            0 :     LoadAnimationData(AnimationType::RollBack,       get_file_path(ANIMATION_ROLL_BACK_FILE),       false, 1, file_reader);
      94            0 :     LoadAnimationData(AnimationType::CrouchRunBack,  get_file_path(ANIMATION_CROUCH_RUN_BACK_FILE), true,  2, file_reader);
      95            0 :     LoadAnimationData(AnimationType::Cigar,          get_file_path(ANIMATION_CIGAR_FILE),           false, 3, file_reader);
      96            0 :     LoadAnimationData(AnimationType::Match,          get_file_path(ANIMATION_MATCH_FILE),           false, 3, file_reader);
      97            0 :     LoadAnimationData(AnimationType::Smoke,          get_file_path(ANIMATION_SMOKE_FILE),           false, 4, file_reader);
      98            0 :     LoadAnimationData(AnimationType::Wipe,           get_file_path(ANIMATION_WIPE_FILE),            false, 4, file_reader);
      99            0 :     LoadAnimationData(AnimationType::Groin,          get_file_path(ANIMATION_GROIN_FILE),           false, 2, file_reader);
     100            0 :     LoadAnimationData(AnimationType::Piss,           get_file_path(ANIMATION_PISS_FILE),            false, 8, file_reader);
     101            0 :     LoadAnimationData(AnimationType::Mercy,          get_file_path(ANIMATION_MERCY_FILE),           false, 3, file_reader);
     102            0 :     LoadAnimationData(AnimationType::Mercy2,         get_file_path(ANIMATION_MERCY2_FILE),          false, 3, file_reader);
     103            0 :     LoadAnimationData(AnimationType::TakeOff,        get_file_path(ANIMATION_TAKE_OFF_FILE),        false, 2, file_reader);
     104            0 :     LoadAnimationData(AnimationType::Prone,          get_file_path(ANIMATION_PRONE_FILE),           false, 1, file_reader);
     105            0 :     LoadAnimationData(AnimationType::Victory,        get_file_path(ANIMATION_VICTORY_FILE),         false, 3, file_reader);
     106            0 :     LoadAnimationData(AnimationType::Aim,            get_file_path(ANIMATION_AIM_FILE),             false, 2, file_reader);
     107            0 :     LoadAnimationData(AnimationType::HandsUpAim,     get_file_path(ANIMATION_HANDS_UP_AIM_FILE),    false, 2, file_reader);
     108            0 :     LoadAnimationData(AnimationType::ProneMove,      get_file_path(ANIMATION_PRONE_MOVE_FILE),      true,  2, file_reader);
     109            0 :     LoadAnimationData(AnimationType::GetUp,          get_file_path(ANIMATION_GET_UP_FILE),          false, 1, file_reader);
     110            0 :     LoadAnimationData(AnimationType::AimRecoil,      get_file_path(ANIMATION_AIM_RECOIL_FILE),      false, 1, file_reader);
     111            0 :     LoadAnimationData(AnimationType::HandsUpRecoil,  get_file_path(ANIMATION_HANDS_UP_RECOIL_FILE), false, 1, file_reader);
     112            0 :     LoadAnimationData(AnimationType::Melee,          get_file_path(ANIMATION_MELEE_FILE),           false, 1, file_reader);
     113            0 :     LoadAnimationData(AnimationType::Own,            get_file_path(ANIMATION_OWN_FILE),             false, 3, file_reader);
     114              :     // clang-format on
     115            0 : }
     116              : 
     117            0 : std::shared_ptr<const AnimationData> AnimationDataManager::Get(AnimationType animation_type) const
     118              : {
     119            0 :     for (const auto& animation_data : animation_datas_) {
     120            0 :         if (animation_data->GetAnimationType() == animation_type) {
     121            0 :             return animation_data;
     122              :         }
     123              :     }
     124              : 
     125              :     // TODO: error handling
     126              :     std::unreachable();
     127              : }
     128              : } // namespace Soldank
        

Generated by: LCOV version 2.0-1