Просто устанавливаем коллбэки в нужное время. И удаляем когда завершили анимацию.
void Demo_TextTitle_onDraw_toRed(yyGUIElement* elem, s32 m_id) {
f32 sp = 5.f * g_demo->m_dt;
elem->m_color.m_data[1] -= sp;
elem->m_color.m_data[2] -= sp;
if (elem->m_color.m_data[1] < 0.f)
elem->m_color.m_data[1] = 0.f;
if (elem->m_color.m_data[2] < 0.f)
elem->m_color.m_data[2] = 0.f;
elem->m_offset.x += 1.f;
if (elem->m_offset.x > 5.f)
elem->m_offset.x = 5.f;
if (elem->m_color.m_data[1] == 0.f && elem->m_color.m_data[2] == 0.f)
{
elem->m_onDraw = 0;
}
}
void Demo_TextTitle_onDraw_toWhite(yyGUIElement* elem, s32 m_id) {
f32 sp = 5.f * g_demo->m_dt;
elem->m_color.m_data[1] += sp;
elem->m_color.m_data[2] += sp;
if (elem->m_color.m_data[1] > 1.f)
elem->m_color.m_data[1] = 1.f;
if (elem->m_color.m_data[2] > 1.f)
elem->m_color.m_data[2] = 1.f;
elem->m_offset.x -= 1.f;
if (elem->m_offset.x < 0.f)
elem->m_offset.x = 0.f;
if (elem->m_color.m_data[1] == 1.f && elem->m_color.m_data[2] == 1.f)
{
elem->m_onDraw = 0;
}
}
void Demo::_SelectExampleUpdateColors(){
for (u16 i = 0, sz = m_examples.size(); i < sz; ++i)
{
if (i == m_selectedExample)
m_examples[i]->m_guiTextTitle->m_onDraw = Demo_TextTitle_onDraw_toRed;
else
m_examples[i]->m_guiTextTitle->m_onDraw = Demo_TextTitle_onDraw_toWhite;
}
}
Далее m_onDraw вызывается там где рисуются элементы.
#GUI
31 марта 2021
(Обновление: 9 апр 2021)