menu_helpers.lua 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. if UiContainer == nil then UiContainer = {} end
  2. print("ADD helpers")
  3. --- Populates a character data.
  4. --
  5. -- @param widget Name of the widget with the character data.
  6. -- @param character The character to get the data from. If nill, the character details will be
  7. -- hidden.
  8. UiContainer.populate_character_data = function(widget, character)
  9. space_pad = function(val, length)
  10. str = tostring(val)
  11. while #(str) < length do
  12. str = " " .. str
  13. end
  14. return str
  15. end
  16. if character == nil then
  17. ui_manager:get_widget(widget):set_visible(false)
  18. return 0
  19. end
  20. -- TODO: When MAX HP and MP values are fixed, use them instead of base.
  21. local char_id = character.char_id
  22. ui_manager:get_widget(widget):set_visible(true)
  23. -- Critical?
  24. if character.stats.hp.current == 0 then
  25. ui_manager:get_widget(widget .. ".Data.HpCurrent"):set_colour(1.0, 0, 0)
  26. elseif character.stats.hp.current <= character.stats.hp.base / 4 then
  27. ui_manager:get_widget(widget .. ".Data.HpCurrent"):set_colour(1.0, 1.0, 0)
  28. else
  29. ui_manager:get_widget(widget .. ".Data.HpCurrent"):set_colour(0.9, 0.9, 0.9)
  30. end
  31. -- Text data
  32. ui_manager:get_widget(widget .. ".Data.Name"):set_text(character.name)
  33. ui_manager:get_widget(widget .. ".Data.LvNumber"):set_text(space_pad(character.level, 3))
  34. ui_manager:get_widget(widget .. ".Data.HpCurrent"):set_text(space_pad(character.stats.hp.current, 5))
  35. ui_manager:get_widget(widget .. ".Data.HpMax"):set_text(space_pad(character.stats.hp.base, 5))
  36. ui_manager:get_widget(widget .. ".Data.MpCurrent"):set_text(space_pad(character.stats.mp.current, 5))
  37. ui_manager:get_widget(widget .. ".Data.MpMax"):set_text(space_pad(character.stats.mp.base, 5))
  38. -- Calculate the HP and MP bar.
  39. local max_hp_width= ui_manager:get_widget(widget .. ".Data.HpLine"):get_width()
  40. local hp_width = character.stats.hp.current * max_hp_width / character.stats.hp.base
  41. ui_manager:get_widget(widget .. ".Data.HpLineCurrent"):set_width(hp_width)
  42. local max_mp_width= ui_manager:get_widget(widget .. ".Data.MpLine"):get_width()
  43. local mp_width = character.stats.mp.current * max_mp_width / character.stats.mp.base
  44. ui_manager:get_widget(widget .. ".Data.MpLineCurrent"):set_width(mp_width)
  45. -- Status (Fury/Sadness)
  46. local fury = false
  47. local sadness = false
  48. for _, st in ipairs(character.status) do
  49. if st == 4 then
  50. sadness = true
  51. break
  52. elseif st == 5 then
  53. fury = true
  54. break
  55. end
  56. end
  57. if fury == true then
  58. ui_manager:get_widget(widget .. ".Data.Status"):set_colour(0.8, 0, 1)
  59. ui_manager:get_widget(widget .. ".Data.Status"):set_text("Fury")
  60. elseif sadness == true then
  61. ui_manager:get_widget(widget .. ".Data.Status"):set_colour(0.8, 0, 1)
  62. ui_manager:get_widget(widget .. ".Data.Status"):set_text("Sadness")
  63. elseif sadness == false and fury == false then
  64. ui_manager:get_widget(widget .. ".Data.Status"):set_colour(0.8, 0, 1)
  65. ui_manager:get_widget(widget .. ".Data.Status"):set_text("")
  66. end
  67. return 0
  68. end