-
Автор темы
- #1
C++:
#include "local_animations.h"
constexpr float WEIGHT_CYCLE_RESET = 0.0f; // Сброс веса цикла нахуй
constexpr int KEY_BIND_STATE = 20; // Состояние привязки к хую
enum LayerIndex {
LAYER_FAKE_WEIGHT = 3, // Вес нахуй для фейкового леера
LAYER_FAKE_CYCLE = 3, // Цикл нахуй для фейкового леера
LAYER_YAW_WEIGHT = 12 // Вес блять для yaw
};
constexpr int ANIMATION_LAYERS_COUNT = 13; // Количество нахуй аним лееров
constexpr int POSE_PARAMETERS_COUNT = 24; // Количество нахуй поз параметров
void local_animations::run(ClientFrameStage_t stage)
{
if (stage == FRAME_NET_UPDATE_END)
{
update_animations(); // Обновляем анимации ебать
}
else if (stage == FRAME_RENDER_START)
{
auto animstate = g_ctx.local()->get_animation_state();
if (!animstate)
return;
reset_and_update_animations(animstate); // Сбрасываем и обновляем анимации к хуям
}
}
void local_animations::reset_and_update_animations(c_baseplayeranimationstate* animstate)
{
reset_anim_layers(); // Сбрасываем нахуй аним лееры
update_server_time(real_simulation_time, real_server_update); // Обновляем время к ебеням
update_local_animations(*animstate); // Обновляем локальные анимации нахуй
if (fakelag::get().condition && key_binds::get().get_key_bind_state(KEY_BIND_STATE))
{
update_server_time(fake_simulation_time, fake_server_update); // Обновляем ебучее время
update_fake_animations(); // Обновляем нахуй не нужные фейковые анимации
}
}
void local_animations::update_animations()
{
update_server_time(fake_simulation_time, fake_server_update); // Обновляем время нахуй
if (!fakelag::get().condition && key_binds::get().get_key_bind_state(KEY_BIND_STATE))
{
reset_anim_layers(); // Сбрасываем нахуй аним лееры
update_fake_animations(); // Обновляем нахуй не нужные фейковые анимации
}
}
void local_animations::update_server_time(float& simulation_time, bool& server_update)
{
server_update = g_ctx.local()->m_flSimulationTime() != simulation_time; // Проверяем обновление серверного времени нахуй
if (server_update)
{
simulation_time = g_ctx.local()->m_flSimulationTime(); // Обновляем время нахуй
}
}
void local_animations::reset_anim_layers()
{
reset_anim_layer(LayerIndex::LAYER_FAKE_WEIGHT); // Сбрасываем леер нахуй
reset_anim_layer(LayerIndex::LAYER_FAKE_CYCLE); // Сбрасываем леер нахуй
reset_anim_layer(LayerIndex::LAYER_YAW_WEIGHT); // Сбрасываем леер нахуй
}
void local_animations::reset_anim_layer(LayerIndex layer)
{
auto& anim_layer = g_ctx.local()->get_animlayers()[static_cast<int>(layer)]; // Получаем аним леер ебать
anim_layer.m_flWeight = WEIGHT_CYCLE_RESET; // Сбрасываем вес нахуй
anim_layer.m_flCycle = WEIGHT_CYCLE_RESET; // Сбрасываем цикл нахуй
}
void local_animations::update_prediction_animations()
{
bool alloc = !local_data.prediction_animstate; // Выделяем память нахуй
bool change = !alloc && handle != &g_ctx.local()->GetRefEHandle(); // Проверяем изменение нахуй
bool reset = !alloc && !change && g_ctx.local()->m_flSpawnTime() != spawntime; // Проверяем сброс нахуй
update_prediction_state(alloc, change, reset); // Обновляем состояние нахуй
if (!alloc && !change && !reset) {
update_prediction_parameters_and_layers(); // Обновляем параметры и слои нахуй
}
}
void local_animations::update_prediction_state(bool alloc, bool change, bool reset)
{
if (change) {
m_memalloc()->Free(local_data.prediction_animstate); // Освобождаем память нахуй
}
if (reset) {
util::reset_state(local_data.prediction_animstate); // Сбрасываем состояние нахуй
spawntime = g_ctx.local()->m_flSpawnTime(); // Обновляем время нахуй
}
if (alloc || change) {
local_data.prediction_animstate = (c_baseplayeranimationstate*)m_memalloc()->Alloc(sizeof(c_baseplayeranimationstate)); // Выделяем память нахуй
if (local_data.prediction_animstate) {
util::create_state(local_data.prediction_animstate, g_ctx.local()); // Создаем состояние нахуй
}
handle = (CBaseHandle*)&g_ctx.local()->GetRefEHandle(); // Обновляем хэндл нахуй
spawntime = g_ctx.local()->m_flSpawnTime(); // Обновляем время нахуй
}
}
void local_animations::update_prediction_parameters_and_layers()
{
float pose_parameter[POSE_PARAMETERS_COUNT];
std::memcpy(pose_parameter, &g_ctx.local()->m_flPoseParameter(), POSE_PARAMETERS_COUNT * sizeof(float)); // Копируем параметры позы нахуй
AnimationLayer layers[ANIMATION_LAYERS_COUNT];
std::memcpy(layers, g_ctx.local()->get_animlayers(), g_ctx.local()->animlayer_count() * sizeof(AnimationLayer)); // Копируем слои анимации нахуй
local_data.prediction_animstate->m_pBaseEntity = g_ctx.local(); // Устанавливаем базовую сущность нахуй
util::update_state(local_data.prediction_animstate, ZERO); // Обновляем состояние нахуй
g_ctx.local()->setup_bones_fixed(g_ctx.globals.prediction_matrix, BONE_USED_BY_HITBOX); // Устанавливаем кости нахуй
std::memcpy(&g_ctx.local()->m_flPoseParameter(), pose_parameter, POSE_PARAMETERS_COUNT * sizeof(float)); // Копируем параметры позы нахуй
std::memcpy(g_ctx.local()->get_animlayers(), layers, g_ctx.local()->animlayer_count() * sizeof(AnimationLayer)); // Копируем слои анимации нахуй
}
void local_animations::update_fake_animations()
{
if (tickcount != m_globals()->m_tickcount)
{
tickcount = m_globals()->m_tickcount;
save_animlayers(); // Сохраняем слои анимации нахуй
update_animstate(); // Обновляем состояние анимации нахуй
update_abs_angles(); // Обновляем абсолютные углы нахуй
save_pose_parameter(); // Сохраняем параметры позы нахуй
}
else
{
update_animstate_framecount(); // Обновляем счетчик кадров нахуй
}
update_goal_feet_yaw(); // Обновляем цель yaw нахуй
update_abs_angles_in_entity(); // Обновляем абсолютные углы в сущности нахуй
restore_pose_parameter(); // Восстанавливаем параметры позы нахуй
}
void local_animations::update_local_animations(c_baseplayeranimationstate& animstate)
{
if (tickcount != m_globals()->m_tickcount)
{
tickcount = m_globals()->m_tickcount;
save_animlayers(); // Сохраняем слои анимации нахуй
update_animstate(animstate); // Обновляем состояние анимации нахуй
update_abs_angles(); // Обновляем абсолютные углы нахуй
save_pose_parameter(); // Сохраняем параметры позы нахуй
}
else
{
animstate.m_iLastClientSideAnimationUpdateFramecount = m_globals()->m_framecount; // Обновляем счетчик кадров нахуй
}
update_goal_feet_yaw(animstate); // Обновляем цель yaw нахуй
update_abs_angles_in_entity(animstate); // Обновляем абсолютные углы в сущности нахуй
restore_pose_parameter(); // Восстанавливаем параметры позы нахуй
}