menu_helpers.lua 3.4 KB

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