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

            Line data    Source code
       1              : #include "core/physics/SoldierSkeletonPhysics.hpp"
       2              : 
       3              : #include "core/physics/Constants.hpp"
       4              : 
       5              : #include "core/math/Calc.hpp"
       6              : 
       7              : namespace Soldank
       8              : {
       9            0 : void RepositionSoldierSkeletonParts(Soldier& soldier)
      10              : {
      11            0 :     float body_y = 0.0F;
      12            0 :     float arm_s = NAN;
      13              : 
      14            0 :     soldier.skeleton->SetOldPos(21, soldier.skeleton->GetPos(21));
      15            0 :     soldier.skeleton->SetOldPos(23, soldier.skeleton->GetPos(23));
      16              :     // skeleton->SetOldPos(25, skeleton->GetPos(25));
      17            0 :     soldier.skeleton->SetPos(21, soldier.skeleton->GetPos(9));
      18            0 :     soldier.skeleton->SetPos(23, soldier.skeleton->GetPos(12));
      19              :     // skeleton->SetPos(25, skeleton->GetPos(5));
      20              : 
      21            0 :     if (!soldier.dead_meat) {
      22            0 :         soldier.skeleton->SetPos(21, soldier.skeleton->GetPos(21) + soldier.particle.velocity_);
      23            0 :         soldier.skeleton->SetPos(23, soldier.skeleton->GetPos(23) + soldier.particle.velocity_);
      24              :         // skeleton->SetPos(25, skeleton.GetPos(25) + particle.velocity);
      25              :     }
      26            0 :     switch (soldier.stance) {
      27            0 :         case PhysicsConstants::STANCE_STAND:
      28            0 :             body_y = 8.0F;
      29            0 :             break;
      30            0 :         case PhysicsConstants::STANCE_CROUCH:
      31            0 :             body_y = 9.0F;
      32            0 :             break;
      33            0 :         case PhysicsConstants::STANCE_PRONE: {
      34            0 :             if (soldier.body_animation->GetType() == AnimationType::Prone) {
      35            0 :                 if (soldier.body_animation->GetFrame() > 9) {
      36            0 :                     body_y = -2.0F;
      37              :                 } else {
      38            0 :                     body_y = 14.0F - (float)soldier.body_animation->GetFrame();
      39              :                 }
      40              :             } else {
      41            0 :                 body_y = 9.0F;
      42              :             }
      43              : 
      44            0 :             if (soldier.body_animation->GetType() == AnimationType::ProneMove) {
      45            0 :                 body_y = 0.0F;
      46              :             }
      47              :         }
      48              :     }
      49            0 :     if (soldier.body_animation->GetType() == AnimationType::GetUp) {
      50            0 :         if (soldier.body_animation->GetFrame() > 18) {
      51            0 :             body_y = 8.0F;
      52              :         } else {
      53            0 :             body_y = 4.0F;
      54              :         }
      55              :     }
      56              : 
      57            0 :     if ((float)soldier.control.mouse_aim_x >= soldier.particle.position.x) {
      58            0 :         soldier.direction = 1;
      59              :     } else {
      60            0 :         soldier.direction = -1;
      61              :     }
      62              : 
      63            0 :     for (int i = 1; i < 21; i++) {
      64            0 :         if (soldier.skeleton->GetActive(i) && !soldier.dead_meat) {
      65            0 :             glm::vec2 pos = glm::vec2(0.0F, 0.0F);
      66            0 :             soldier.skeleton->SetOldPos(i, soldier.skeleton->GetPos(i));
      67              : 
      68            0 :             if (!soldier.half_dead && ((i >= 1 && i <= 6) || (i == 17) || (i == 18))) {
      69            0 :                 glm::vec2 anim_pos = soldier.legs_animation->GetPosition(i);
      70            0 :                 pos.x = soldier.particle.position.x + anim_pos.x * (float)soldier.direction;
      71            0 :                 pos.y = soldier.particle.position.y + anim_pos.y;
      72              :             }
      73              : 
      74            0 :             if (((i >= 7) && (i <= 16)) || (i == 19) || (i == 20)) {
      75            0 :                 auto anim_pos = soldier.body_animation->GetPosition(i);
      76            0 :                 pos.x = soldier.particle.position.x + anim_pos.x * (float)soldier.direction;
      77            0 :                 pos.y = soldier.particle.position.y + anim_pos.y;
      78              : 
      79            0 :                 if (soldier.half_dead) {
      80            0 :                     pos.y += 9.0F;
      81              :                 } else {
      82            0 :                     pos.y += soldier.skeleton->GetPos(6).y - (soldier.particle.position.y - body_y);
      83              :                 }
      84              :             }
      85              : 
      86            0 :             soldier.skeleton->SetPos(i, pos);
      87              :         }
      88              :     }
      89              : 
      90            0 :     glm::vec2 aim(soldier.control.mouse_aim_x, soldier.control.mouse_aim_y);
      91              : 
      92            0 :     if (!soldier.dead_meat) {
      93            0 :         auto pos = soldier.skeleton->GetPos(9);
      94            0 :         auto r_norm = 0.1F * Calc::Vec2Normalize(soldier.skeleton->GetPos(12) - aim);
      95            0 :         auto dir = (float)soldier.direction;
      96              : 
      97            0 :         soldier.skeleton->SetPos(12, pos + glm::vec2(-dir * r_norm.y, dir * r_norm.x));
      98            0 :         soldier.skeleton->SetPos(23, pos + glm::vec2(-dir * r_norm.y, dir * r_norm.x) * 50.0F);
      99              :     }
     100              : 
     101              :     auto not_aiming_anims = std::vector{
     102              :         AnimationType::Reload,      AnimationType::ReloadBow, AnimationType::ClipIn,
     103              :         AnimationType::ClipOut,     AnimationType::SlideBack, AnimationType::Change,
     104              :         AnimationType::ThrowWeapon, AnimationType::Punch,     AnimationType::Roll,
     105              :         AnimationType::RollBack,    AnimationType::Cigar,     AnimationType::Match,
     106              :         AnimationType::Smoke,       AnimationType::Wipe,      AnimationType::TakeOff,
     107              :         AnimationType::Groin,       AnimationType::Piss,      AnimationType::Mercy,
     108              :         AnimationType::Mercy2,      AnimationType::Victory,   AnimationType::Own,
     109              :         AnimationType::Melee,
     110            0 :     };
     111              : 
     112            0 :     if (soldier.body_animation->GetType() == AnimationType::Throw) {
     113            0 :         arm_s = -5.00F;
     114              :     } else {
     115            0 :         arm_s = -7.00F;
     116              :     }
     117              : 
     118            0 :     if (!soldier.body_animation->IsAny(not_aiming_anims)) {
     119            0 :         auto r_norm = arm_s * Calc::Vec2Normalize(soldier.skeleton->GetPos(15) - aim);
     120            0 :         soldier.skeleton->SetPos(15, soldier.skeleton->GetPos(16) + r_norm);
     121              :     }
     122            0 :     if (soldier.body_animation->GetType() == AnimationType::Throw) {
     123            0 :         arm_s = -6.00F;
     124              :     } else {
     125            0 :         arm_s = -8.00F;
     126              :     }
     127              : 
     128            0 :     if (!soldier.body_animation->IsAny(not_aiming_anims)) {
     129            0 :         auto r_norm = arm_s * Calc::Vec2Normalize(soldier.skeleton->GetPos(19) - aim);
     130            0 :         soldier.skeleton->SetPos(19, soldier.skeleton->GetPos(16) - glm::vec2(0.0F, 4.0F) + r_norm);
     131              :     }
     132            0 : }
     133              : } // namespace Soldank
        

Generated by: LCOV version 2.0-1