C++ Update Player Animations

Gonza

Модератор форума
Модератор
Регистрация
23 Фев 2021
Сообщения
98
Реакции
4
EasyGold (EG)
0
BumpCoin (BC)
0
PostCoin (PC)
0
C++:
C++:
void c_animations_update(CBasePlayer *c_player)
{
    // здесь желательно сделать стор всяких нужных нетваров
  
    float curtime = gpGlobalVars->curtime;
    float frametime = gpGlobalVars->frametime;
  
    gpGlobalVars->curtime = c_player->m_flSimulationTime();
    gpGlobalVars->frametime = gpGlobalVars->intervalPerTick;
  
    CAnimationLayer CAnimLayers[MAX_OVERLAYS];
    float flAnimPoses[MAXSTUDIOPOSEPARAM];
  
    c_player->m_iEFlags &= ~0x1000; // EFL_DIRTY_ABSVELOCITY
    c_player->m_vecAbsVelocity() = c_player->m_vecVelocity();
  
    CCSGOPlayerAnimState *animstate = player->m_PlayerAnimationState();
    // https://github.com/perilouswithadollarsign/cstrike15_src/blob/master/game/shared/cstrike15/csgo_playeranimstate.cpp#L266
    if (animstate->m_iLastClientSideAnimationUpdateFramecount == gpGlobalVars->framecount)
        animstate->m_iLastClientSideAnimationUpdateFramecount -= 1;
  
    if (animstate->m_flLastClientSideAnimationUpdateTime == gpGlobalVars->curtime)
        animstate->m_flLastClientSideAnimationUpdateTime -= 1.f;
  
    memcpy(CAnimLayers, c_player->GetAnimLayers(), sizeof(CAnimationLayer) * MAX_OVERLAYS);
    memcpy(flAnimPoses, &c_player->m_flPoseParameter(), sizeof(float) * MAXSTUDIOPOSEPARAM);
  
    c_player->m_bClientSideAnimation() = true;
    // здесь также нужен вызов вашего p2c ресольвера
    // теперь идёт обновление анимации
    c_player->UpdateClientSideAnimation();
    c_player->m_bClientSideAnimation() = false;
  
    memcpy(c_player->GetAnimLayers(), CAnimLayers, sizeof(CAnimationLayer) * MAX_OVERLAYS);
    memcpy(&c_player->m_flPoseParameter(), flAnimPoses, sizeof(float) * MAXSTUDIOPOSEPARAM);
  
    // здесь ресторим ваши нетвары
  
    gpGlobalVars->curtime = curtime;
    gpGlobalVars->frametime = frametime;
  
    matrix3x4_t m_BoneMatrix[MAXSTUDIOBONES];
  
    // думаю вы сами понимаете, что тут нужно вызывать :D
    c_player->SetupBonesRebuilt(m_BoneMatrix, MAXSTUDIOBONES, BONE_USED_BY_ANYTHING, c_player->m_flSimulationTime());
}
 

M1rtyks

Пользователь
Регистрация
26 Июл 2021
Сообщения
4
Реакции
0
Веб-сайт
donthave.biz
EasyGold (EG)
0
BumpCoin (BC)
0
PostCoin (PC)
0
Хмм, я думаю что для пастеров сойдёт)
 
Сверху