-
Автор темы
- #1
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Аналогично с плавным появлением теней можно сделать и плавную окраску мира. Знаю, можно сделать красивее код и меньше копирования кода. Я делаю этот пост чтоб просто показать суть плавности, как это свичится и как сглаживается. Дальше уже свобода вашей фантазии и мастерства
Ну и снова, как я говорил в прошлом посте, функция клемпа здесь костыльная, но фиксится это добавлением пары аргументов. Сделано, опять же, для примера.
Поясняю за 1 и 0: т.к. у конкретно меня цвет задается floatами - его границы от 0.f до 1.f. Если работать с интами то было бы от 0 до 255.
C++:
void __fastcall hk_get_color_modulation(registers, float& r, float& g, float& b) {
o_get_color_modulation(ecx, edx, r, g, b);
if (!g_interfaces.m_engine->IsInGame() || !g_interfaces.m_engine->IsConnected())
return;
const auto get_material = reinterpret_cast<IMaterial*>(ecx);
if (!get_material || get_material->IsErrorMaterial())
return;
const auto get_group = get_hash(get_material->GetTextureGroupName());
if (get_group != utils::get_const(XORSTR("World textures")) && get_group != utils::get_const(XORSTR("StaticProp textures")) && get_group != utils::get_const(XORSTR("SkyBox textures")))
return;
static float world_color[3] = { 0.8f, 0.8f, 0.8f };
static float props_color[3] = { 0.8f, 0.8f, 0.8f };
static float sky_color[3] = { 0.8f, 0.8f, 0.8f };
if (config.misc_world_custom_color_enable)
{
if (get_group == utils::get_const(XORSTR("World textures")))
{
utils::modern_clamp_world(world_color[0], config.color_misc_world[0], g_interfaces.m_globals->m_frame_time / 24.f);
utils::modern_clamp_world(world_color[1], config.color_misc_world[1], g_interfaces.m_globals->m_frame_time / 24.f);
utils::modern_clamp_world(world_color[2], config.color_misc_world[2], g_interfaces.m_globals->m_frame_time / 24.f);
r *= world_color[0],
g *= world_color[1],
b *= world_color[2];
}
else if (get_group == utils::get_const(XORSTR("StaticProp textures")))
{
utils::modern_clamp_world(props_color[0], config.color_misc_static_props[0], g_interfaces.m_globals->m_frame_time / 24.f);
utils::modern_clamp_world(props_color[1], config.color_misc_static_props[1], g_interfaces.m_globals->m_frame_time / 24.f);
utils::modern_clamp_world(props_color[2], config.color_misc_static_props[2], g_interfaces.m_globals->m_frame_time / 24.f);
r *= props_color[0],
g *= props_color[1],
b *= props_color[2];
}
else if (get_group == utils::get_const(XORSTR("SkyBox textures")))
{
utils::modern_clamp_world(sky_color[0], config.color_misc_sky[0], g_interfaces.m_globals->m_frame_time / 24.f);
utils::modern_clamp_world(sky_color[1], config.color_misc_sky[1], g_interfaces.m_globals->m_frame_time / 24.f);
utils::modern_clamp_world(sky_color[2], config.color_misc_sky[2], g_interfaces.m_globals->m_frame_time / 24.f);
r *= sky_color[0],
g *= sky_color[1],
b *= sky_color[2];
}
}
else
{
if (get_group == utils::get_const(XORSTR("World textures")))
{
utils::modern_clamp_world(world_color[0], 0.8f, g_interfaces.m_globals->m_frame_time / 24.f);
utils::modern_clamp_world(world_color[1], 0.8f, g_interfaces.m_globals->m_frame_time / 24.f);
utils::modern_clamp_world(world_color[2], 0.8f, g_interfaces.m_globals->m_frame_time / 24.f);
r *= world_color[0],
g *= world_color[1],
b *= world_color[2];
}
else if (get_group == utils::get_const(XORSTR("StaticProp textures")))
{
utils::modern_clamp_world(props_color[0], 0.8f, g_interfaces.m_globals->m_frame_time / 24.f);
utils::modern_clamp_world(props_color[1], 0.8f, g_interfaces.m_globals->m_frame_time / 24.f);
utils::modern_clamp_world(props_color[2], 0.8f, g_interfaces.m_globals->m_frame_time / 24.f);
r *= props_color[0],
g *= props_color[1],
b *= props_color[2];
}
else if (get_group == utils::get_const(XORSTR("SkyBox textures")))
{
utils::modern_clamp_world(sky_color[0], 0.8f, g_interfaces.m_globals->m_frame_time / 24.f);
utils::modern_clamp_world(sky_color[1], 0.8f, g_interfaces.m_globals->m_frame_time / 24.f);
utils::modern_clamp_world(sky_color[2], 0.8f, g_interfaces.m_globals->m_frame_time / 24.f);
r *= sky_color[0],
g *= sky_color[1],
b *= sky_color[2];
}
}
}
C++:
inline void modern_clamp_world(float& target, float to, float step)
{
if (target > to)
{
target = clamp(target-step, to, 1.f);
}
else if (target < to)
{
target = clamp(target+step, 0.f, to);
}
}