Войти
ПодсказкиСтатьи

Элементарный способ сделать динамичный GUI

Автор:

Различные эффекты можно реализовывать добавляя кучу bool и if внутрь элемента, но не все вещи можно предусмотреть да и не нужно. Просто добавляем коллбэк который будет вызываться например при рисовании, и делаем все манипуляции в нём.

Мне кажется это единственный верный способ делать подобные вещи
bandicam-2021-03-31-11-53-22-604 | Элементарный способ сделать динамичный GUI

Просто устанавливаем коллбэки в нужное время. И удаляем когда завершили анимацию.

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_color = ColorRed;
    else
      m_examples[i]->m_guiTextTitle->m_color = ColorWhite;*/

    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)