equip_menu.lua 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513
  1. if UiContainer == nil then UiContainer = {} end
  2. --- The item menu.
  3. UiContainer.EquipMenu = {
  4. --- Current cursor position in the equip slots (1-3).
  5. equip_position = 1,
  6. --- Max cursor position in the equip slots.
  7. equip_position_total = 3,
  8. --- ID of the character the menu is open for.
  9. char_id = -1,
  10. --- The type of item currently being selected.
  11. --
  12. -- Inventory.ITEM_TYPE.WEAPON, Inventory.ITEM_TYPE.ARMOR, or Inventory.ITEM_TYPE.ACCESSORY.
  13. selecting_slot = Inventory.ITEM_TYPE.WEAPON,
  14. --- List of owned weapons equipable by the current characters.
  15. --
  16. -- Only one of each, nevermind the owned quantity.
  17. avail_weapons = {},
  18. --- List of owned armors equipable by the current characters.
  19. --
  20. -- Only one of each, nevermind the owned quantity.
  21. avail_armors = {},
  22. --- List of owned accessories equipable by the current characters.
  23. --
  24. -- Only one of each, nevermind the owned quantity.
  25. avail_accessories = {},
  26. --- First visible position in the item list.
  27. --
  28. -- I.e. How many position the list is scrolled down + 1
  29. list_first_visible = 1,
  30. --- Cursor position in the list.
  31. list_position = 1,
  32. --- Maximum slots in the item list.
  33. list_position_total = 10,
  34. --- highlighted position in the current item list.
  35. list_item_selected = 1,
  36. --- Run when the menu is creaded.
  37. --
  38. -- It does nothing.
  39. on_start = function(self)
  40. return 0
  41. end,
  42. --- Handles button events.
  43. --
  44. -- For the current submenu, handles directional keys, enter and escape events.
  45. -- @param button Pressed button string key. Config.CONTROLS.UP, Config.CONTROLS.LEFT, Config.CONTROLS.ACTION and Config.CONTROLS.CANCEL are handled.
  46. -- @param event Trigger event. Normally, "Press".
  47. on_button = function(self, button, event)
  48. if UiContainer.current_menu == "equip" then
  49. if UiContainer.current_submenu == "" then
  50. -- TODO: Handle L1/R1 (change character)
  51. -- TODO: Handle square: Materia menu
  52. if button == Config.CONTROLS.CANCEL and event == "Press" then
  53. audio_manager:play_sound("Back")
  54. UiContainer.current_menu = "main"
  55. script:request_end_sync(Script.UI, "EquipMenu", "hide", 0)
  56. elseif button == Config.CONTROLS.DOWN then
  57. audio_manager:play_sound("Cursor")
  58. self.equip_position = self.equip_position + 1
  59. if self.equip_position > self.equip_position_total then
  60. self.equip_position = 1
  61. end
  62. ui_manager:get_widget("EquipMenu.Container.Character.Cursor"):set_default_animation("Position" .. self.equip_position)
  63. self.populate_details(self, false)
  64. elseif button == Config.CONTROLS.UP then
  65. audio_manager:play_sound("Cursor")
  66. self.equip_position = self.equip_position - 1
  67. if self.equip_position < 1 then
  68. self.equip_position = self.equip_position_total
  69. end
  70. ui_manager:get_widget("EquipMenu.Container.Character.Cursor"):set_default_animation("Position" .. self.equip_position)
  71. self.populate_details(self, false)
  72. elseif button == Config.CONTROLS.ACTION then
  73. if self.equip_position == 1 then
  74. self.selecting_slot = Inventory.ITEM_TYPE.WEAPON
  75. elseif self.equip_position == 2 then
  76. self.selecting_slot = Inventory.ITEM_TYPE.ARMOR
  77. elseif self.equip_position == 3 then
  78. self.selecting_slot = Inventory.ITEM_TYPE.ACCESSORY
  79. end
  80. audio_manager:play_sound("Cursor")
  81. self.submenu_select(self)
  82. else
  83. return 0
  84. end
  85. elseif UiContainer.current_submenu == "item_select" then
  86. local list
  87. if self.selecting_slot == Inventory.ITEM_TYPE.WEAPON then
  88. list = self.avail_weapons
  89. elseif self.selecting_slot == Inventory.ITEM_TYPE.ARMOR then
  90. list = self.avail_armors
  91. elseif self.selecting_slot == Inventory.ITEM_TYPE.ACCESSORY then
  92. list = self.avail_accessories
  93. end
  94. if button == Config.CONTROLS.CANCEL and event == "Press" then
  95. audio_manager:play_sound("Back")
  96. self.submenu_none(self)
  97. elseif button == Config.CONTROLS.DOWN then
  98. audio_manager:play_sound("Cursor")
  99. -- Move one position down only if there is a next item
  100. if #(list) <= self.list_item_selected + 1 then
  101. return 0
  102. end
  103. self.list_item_selected = self.list_item_selected + 1
  104. -- Move cursor...
  105. if self.list_position < self.list_position_total then
  106. -- ... by moving it one position down.
  107. self.list_position = self.list_position + 1
  108. ui_manager:get_widget("EquipMenu.Container.List.Cursor"):set_default_animation("Position" .. self.list_position)
  109. else
  110. -- ... by scrolling the list.
  111. self.list_first_visible = self.list_first_visible + 1
  112. self.populate_item_list(self)
  113. end
  114. self.populate_details(self, true)
  115. self.calculate_stat_diffs(self)
  116. elseif button == Config.CONTROLS.UP then
  117. audio_manager:play_sound("Cursor")
  118. -- Move one position up only if not in the first.
  119. if self.list_item_selected <= 1 then
  120. return 0
  121. end
  122. self.list_item_selected = self.list_item_selected - 1
  123. -- Move cursor...
  124. if self.list_position > 1 then
  125. -- ... by moving it one position up
  126. self.list_position = self.list_position - 1
  127. ui_manager:get_widget("EquipMenu.Container.List.Cursor"):set_default_animation("Position" .. self.list_position)
  128. else
  129. -- ... by scrolling the list.
  130. self.list_first_visible = self.list_first_visible - 1
  131. self.populate_item_list(self)
  132. end
  133. self.populate_details(self, true)
  134. self.calculate_stat_diffs(self)
  135. elseif button == Config.CONTROLS.ACTION and event == "Press" then
  136. -- Equip the seleced item
  137. local item_id = nil
  138. if self.selecting_slot == Inventory.ITEM_TYPE.WEAPON then
  139. item_id = self.avail_weapons[self.list_item_selected + 1]
  140. elseif self.selecting_slot == Inventory.ITEM_TYPE.ARMOR then
  141. item_id = self.avail_armors[self.list_item_selected + 1]
  142. elseif self.selecting_slot == Inventory.ITEM_TYPE.ACCESSORY then
  143. item_id = self.avail_accessories[self.list_item_selected + 1]
  144. end
  145. if Characters.equip(self.char_id, item_id) == false then
  146. audio_manager:play_sound("Error")
  147. return 0
  148. end
  149. -- TODO: Replace for "Equip" sound
  150. audio_manager:play_sound("Cursor")
  151. self.submenu_none(self)
  152. end
  153. end
  154. end
  155. return 0
  156. end,
  157. --- Opens the equip menu.
  158. --
  159. -- Populates and updates displayed data before opening.
  160. show = function(self)
  161. self.char_id = UiContainer.current_character_id
  162. ui_manager:get_widget("EquipMenu"):set_visible(true)
  163. UiContainer.current_menu = "equip"
  164. UiContainer.current_submenu = ""
  165. self.equip_position = 1
  166. self.submenu_none(self)
  167. return 0;
  168. end,
  169. --- Enters or returns to the main equip menu.
  170. submenu_none = function(self)
  171. UiContainer.current_submenu = ""
  172. UiContainer.populate_character_data("EquipMenu.Container.Character", Characters[self.char_id])
  173. ui_manager:get_widget("EquipMenu.Container.Character.Portrait"):set_image("characters/" .. tostring(self.char_id) .. ".png")
  174. -- TODO: Do something for chars 9 and 10
  175. ui_manager:get_widget("EquipMenu.Container.Character.WpnIcon"):set_image("icons/item_weapon_" .. tostring(self.char_id) .. ".png")
  176. ui_manager:get_widget("EquipMenu.Container.Character.WpnLbl"):set_text(Game.Items[Characters[self.char_id].weapon.id].name)
  177. ui_manager:get_widget("EquipMenu.Container.Character.ArmLbl"):set_text(Game.Items[Characters[self.char_id].armor.id].name)
  178. if Characters[self.char_id].accessory == nil then
  179. ui_manager:get_widget("EquipMenu.Container.Character.AccLbl"):set_text("")
  180. else
  181. ui_manager:get_widget("EquipMenu.Container.Character.AccLbl"):set_text(Game.Items[Characters[self.char_id].accessory].name)
  182. end
  183. self.load_availables(self)
  184. self.populate_details(self, false)
  185. self.populate_current_stats(self)
  186. self.calculate_stat_diffs(self)
  187. -- Hide stat arrows and difs
  188. ui_manager:get_widget("EquipMenu.Container.Stats.AtkDif"):set_visible(false)
  189. ui_manager:get_widget("EquipMenu.Container.Stats.AccDif"):set_visible(false)
  190. ui_manager:get_widget("EquipMenu.Container.Stats.DefDif"):set_visible(false)
  191. ui_manager:get_widget("EquipMenu.Container.Stats.EvaDif"):set_visible(false)
  192. ui_manager:get_widget("EquipMenu.Container.Stats.MAtkDif"):set_visible(false)
  193. ui_manager:get_widget("EquipMenu.Container.Stats.MDefDif"):set_visible(false)
  194. ui_manager:get_widget("EquipMenu.Container.Stats.MEvaDif"):set_visible(false)
  195. ui_manager:get_widget("EquipMenu.Container.Stats.AtkArw"):set_visible(false)
  196. ui_manager:get_widget("EquipMenu.Container.Stats.AccArw"):set_visible(false)
  197. ui_manager:get_widget("EquipMenu.Container.Stats.DefArw"):set_visible(false)
  198. ui_manager:get_widget("EquipMenu.Container.Stats.EvaArw"):set_visible(false)
  199. ui_manager:get_widget("EquipMenu.Container.Stats.MAtkArw"):set_visible(false)
  200. ui_manager:get_widget("EquipMenu.Container.Stats.MDefArw"):set_visible(false)
  201. ui_manager:get_widget("EquipMenu.Container.Stats.MEvaArw"):set_visible(false)
  202. ui_manager:get_widget("EquipMenu.Container.List.Cursor"):set_visible(false)
  203. for i = 1, self.list_position_total do
  204. ui_manager:get_widget("EquipMenu.Container.List.Item" .. tostring(i)):set_text("")
  205. end
  206. end,
  207. --- Initializzes the item selection submenu
  208. submenu_select = function(self)
  209. -- Populate the list
  210. self.list_first_visible = 1
  211. self.list_position = 1
  212. self.list_item_selected = 1
  213. if self.populate_item_list(self) == false then
  214. audio_manager:play_sound("Error")
  215. return
  216. end
  217. UiContainer.current_submenu = "item_select"
  218. ui_manager:get_widget("EquipMenu.Container.List.Cursor"):set_visible(true)
  219. ui_manager:get_widget("EquipMenu.Container.List.Cursor"):set_default_animation("Position" .. self.list_position)
  220. -- TODO: Description and details of first item
  221. self.populate_details(self, true)
  222. self.calculate_stat_diffs(self)
  223. end,
  224. populate_item_list = function(self)
  225. local list
  226. if self.selecting_slot == Inventory.ITEM_TYPE.WEAPON then
  227. list = self.avail_weapons
  228. elseif self.selecting_slot == Inventory.ITEM_TYPE.ARMOR then
  229. list = self.avail_armors
  230. elseif self.selecting_slot == Inventory.ITEM_TYPE.ACCESSORY then
  231. list = self.avail_accessories
  232. else
  233. for i = 1, self.list_position_total do
  234. ui_manager:get_widget("EquipMenu.Container.List.Item" .. tostring(i)):set_text("")
  235. end
  236. return false
  237. end
  238. if list == nil or #(list) == 0 then
  239. -- No items for the list
  240. return false
  241. end
  242. for i = 1, self.list_position_total do
  243. if #(list) >= i + self.list_first_visible then
  244. local name = Game.Items[list[i + self.list_first_visible]].name
  245. ui_manager:get_widget("EquipMenu.Container.List.Item" .. tostring(i)):set_text(name)
  246. else
  247. ui_manager:get_widget("EquipMenu.Container.List.Item" .. tostring(i)):set_text("")
  248. end
  249. end
  250. end,
  251. --- Loads the list of equipment available for the current character.
  252. --
  253. -- Currently equiped items are not added, even if more of them are in the inventory.
  254. load_availables = function(self)
  255. self.avail_weapons = {}
  256. self.avail_armors = {}
  257. self.avail_accessories = {}
  258. for _, item in ipairs(Inventory) do
  259. if item.item ~= nil then
  260. local item_type = Game.Items[item.item].type
  261. if item_type == Inventory.ITEM_TYPE.WEAPON or item_type == Inventory.ITEM_TYPE.ARMOR or item_type == Inventory.ITEM_TYPE.ACCESSORY then
  262. local equip = Game.Items[item.item].users
  263. for _, ch in ipairs(equip) do
  264. if ch == self.char_id then
  265. if item_type == Inventory.ITEM_TYPE.WEAPON then
  266. if item.item ~= Characters[self.char_id].weapon.id then
  267. table.insert(self.avail_weapons, item.item)
  268. end
  269. elseif item_type == Inventory.ITEM_TYPE.ARMOR then
  270. if item.item ~= Characters[self.char_id].armor.id then
  271. table.insert(self.avail_armors, item.item)
  272. end
  273. elseif item_type == Inventory.ITEM_TYPE.ACCESSORY then
  274. if item.item ~= Characters[self.char_id].accessory then
  275. table.insert(self.avail_accessories, item.item)
  276. end
  277. end
  278. end
  279. end
  280. end
  281. end
  282. end
  283. end,
  284. populate_current_stats = function(self)
  285. -- TODO: Cap at 255?
  286. local stats = Characters[self.char_id].stats
  287. ui_manager:get_widget("EquipMenu.Container.Stats.Atk"):set_text(UiContainer.pad_value(stats.atk, 4))
  288. ui_manager:get_widget("EquipMenu.Container.Stats.Acc"):set_text(UiContainer.pad_value(stats.acc, 4))
  289. ui_manager:get_widget("EquipMenu.Container.Stats.Def"):set_text(UiContainer.pad_value(stats.def, 4))
  290. ui_manager:get_widget("EquipMenu.Container.Stats.Eva"):set_text(UiContainer.pad_value(stats.eva, 4))
  291. ui_manager:get_widget("EquipMenu.Container.Stats.MAtk"):set_text(UiContainer.pad_value(stats.matk, 4))
  292. ui_manager:get_widget("EquipMenu.Container.Stats.MDef"):set_text(UiContainer.pad_value(stats.mdef, 4))
  293. ui_manager:get_widget("EquipMenu.Container.Stats.MEva"):set_text(UiContainer.pad_value(stats.meva, 4))
  294. end,
  295. --- Populated the details of the highlighted item.
  296. --
  297. -- @param from_list If true, data will be read from the item higlighted in the list on the
  298. -- right. If false, data wil be red from the currently equipped items.
  299. populate_details = function(self, from_list)
  300. local type
  301. local item
  302. if (from_list == false) then
  303. if self.equip_position == 1 then
  304. type = Inventory.ITEM_TYPE.WEAPON
  305. item = Game.Items[Characters[self.char_id].weapon.id]
  306. ui_manager:get_widget("EquipMenu.Container.Help.Help"):set_text(Game.Items[Characters[self.char_id].weapon.id].description)
  307. elseif self.equip_position == 2 then
  308. type = Inventory.ITEM_TYPE.ARMOR
  309. item = Game.Items[Characters[self.char_id].armor.id]
  310. ui_manager:get_widget("EquipMenu.Container.Help.Help"):set_text(Game.Items[Characters[self.char_id].armor.id].description)
  311. elseif self.equip_position == 3 then
  312. type = Inventory.ITEM_TYPE.ACCESSORY
  313. item = Game.Items[Characters[self.char_id].accessory]
  314. --elseif self.equip_position == 3 and Characters[self.char_id].accessory ~= nil then
  315. -- ui_manager:get_widget("EquipMenu.Container.Help.Help"):set_text(Game.Items[Characters[self.char_id].accessory].description)
  316. end
  317. else
  318. -- Selecting from the list
  319. if self.selecting_slot == Inventory.ITEM_TYPE.WEAPON then
  320. item = Game.Items[self.avail_weapons[self.list_item_selected + 1]]
  321. type = Inventory.ITEM_TYPE.WEAPON
  322. elseif self.selecting_slot == Inventory.ITEM_TYPE.ARMOR then
  323. item = Game.Items[self.avail_armors[self.list_item_selected + 1]]
  324. type = Inventory.ITEM_TYPE.ARMOR
  325. elseif self.selecting_slot == Inventory.ITEM_TYPE.ACCESSORY then
  326. item = Game.Items[self.avail_accessories[self.list_item_selected + 1]]
  327. type = Inventory.ITEM_TYPE.ACCESSORY
  328. end
  329. end
  330. -- Show description
  331. if item ~= nil then
  332. ui_manager:get_widget("EquipMenu.Container.Help.Help"):set_text(item.description)
  333. else
  334. ui_manager:get_widget("EquipMenu.Container.Help.Help"):set_text("")
  335. end
  336. -- If accessory, hide all details and return
  337. if type == Inventory.ITEM_TYPE.ACCESSORY then
  338. ui_manager:get_widget("EquipMenu.Container.SlotsEmpty"):set_visible(true)
  339. return 0
  340. end
  341. ui_manager:get_widget("EquipMenu.Container.SlotsEmpty"):set_visible(false)
  342. ui_manager:get_widget("EquipMenu.Container.Slots.Growth0"):set_visible(false)
  343. ui_manager:get_widget("EquipMenu.Container.Slots.Growth1"):set_visible(false)
  344. ui_manager:get_widget("EquipMenu.Container.Slots.Growth2"):set_visible(false)
  345. ui_manager:get_widget("EquipMenu.Container.Slots.Growth3"):set_visible(false)
  346. if item.growth >= 0 and item.growth <= 3 then
  347. ui_manager:get_widget("EquipMenu.Container.Slots.Growth" .. item.growth):set_visible(true)
  348. else
  349. ui_manager:get_widget("EquipMenu.Container.Slots.Growth1"):set_visible(true)
  350. end
  351. for s = 1, 8 do
  352. if #(item.slots) < s then
  353. ui_manager:get_widget("EquipMenu.Container.Slots.Slot" .. tostring(s)):set_visible(false)
  354. else
  355. ui_manager:get_widget("EquipMenu.Container.Slots.Slot" .. tostring(s)):set_visible(true)
  356. if item.growth == 0 then
  357. ui_manager:get_widget("EquipMenu.Container.Slots.Slot" .. tostring(s)):set_image("icons/materia_slot_no_growth.png")
  358. else
  359. ui_manager:get_widget("EquipMenu.Container.Slots.Slot" .. tostring(s)):set_image("icons/materia_slot.png")
  360. end
  361. end
  362. if s % 2 ~= 0 then
  363. -- At every odd slot, if there is a next slot and its linked, show linker.
  364. if #(item.slots) > s and item.slots[s] == 1 then
  365. ui_manager:get_widget("EquipMenu.Container.Slots.Link" .. tostring(math.floor(s / 2) + 1)):set_visible(true)
  366. else
  367. ui_manager:get_widget("EquipMenu.Container.Slots.Link" .. tostring(math.floor(s / 2) + 1)):set_visible(false)
  368. end
  369. end
  370. end
  371. end,
  372. --- Populates the stat difference panel.
  373. calculate_stat_diffs = function(self)
  374. local item
  375. local cur_item
  376. if self.selecting_slot == Inventory.ITEM_TYPE.WEAPON then
  377. item = Game.Items[self.avail_weapons[self.list_item_selected + 1]]
  378. cur_item = Game.Items[Characters[self.char_id].weapon.id]
  379. elseif self.selecting_slot == Inventory.ITEM_TYPE.ARMOR then
  380. item = Game.Items[self.avail_armors[self.list_item_selected + 1]]
  381. cur_item = Game.Items[Characters[self.char_id].armor.id]
  382. end
  383. ui_manager:get_widget("EquipMenu.Container.Stats.AtkDif"):set_visible(false)
  384. ui_manager:get_widget("EquipMenu.Container.Stats.AccDif"):set_visible(false)
  385. ui_manager:get_widget("EquipMenu.Container.Stats.DefDif"):set_visible(false)
  386. ui_manager:get_widget("EquipMenu.Container.Stats.EvaDif"):set_visible(false)
  387. ui_manager:get_widget("EquipMenu.Container.Stats.MAtkDif"):set_visible(false)
  388. ui_manager:get_widget("EquipMenu.Container.Stats.MDefDif"):set_visible(false)
  389. ui_manager:get_widget("EquipMenu.Container.Stats.MEvaDif"):set_visible(false)
  390. ui_manager:get_widget("EquipMenu.Container.Stats.AtkArw"):set_visible(false)
  391. ui_manager:get_widget("EquipMenu.Container.Stats.AccArw"):set_visible(false)
  392. ui_manager:get_widget("EquipMenu.Container.Stats.DefArw"):set_visible(false)
  393. ui_manager:get_widget("EquipMenu.Container.Stats.EvaArw"):set_visible(false)
  394. ui_manager:get_widget("EquipMenu.Container.Stats.MAtkArw"):set_visible(false)
  395. ui_manager:get_widget("EquipMenu.Container.Stats.MDefArw"):set_visible(false)
  396. ui_manager:get_widget("EquipMenu.Container.Stats.MEvaArw"):set_visible(false)
  397. if item == nil or cur_item == nil then
  398. return 0
  399. end
  400. if item.type == Inventory.ITEM_TYPE.WEAPON then
  401. if item.power > cur_item.power then
  402. ui_manager:get_widget("EquipMenu.Container.Stats.AtkArw"):set_visible(true)
  403. ui_manager:get_widget("EquipMenu.Container.Stats.AtkDif"):set_colour(1, 1, 0)
  404. local val = tostring(Characters[self.char_id].stats.atk - cur_item.power + item.power)
  405. ui_manager:get_widget("EquipMenu.Container.Stats.AtkDif"):set_text(val)
  406. ui_manager:get_widget("EquipMenu.Container.Stats.AtkDif"):set_visible(true)
  407. elseif item.power < cur_item.power then
  408. ui_manager:get_widget("EquipMenu.Container.Stats.AtkArw"):set_visible(true)
  409. ui_manager:get_widget("EquipMenu.Container.Stats.AtkDif"):set_colour(1, 0, 0)
  410. local val = tostring(Characters[self.char_id].stats.atk - cur_item.power + item.power)
  411. ui_manager:get_widget("EquipMenu.Container.Stats.AtkDif"):set_text(val)
  412. ui_manager:get_widget("EquipMenu.Container.Stats.AtkDif"):set_visible(true)
  413. end
  414. if item.accuracy > cur_item.accuracy then
  415. ui_manager:get_widget("EquipMenu.Container.Stats.AccArw"):set_visible(true)
  416. ui_manager:get_widget("EquipMenu.Container.Stats.AccDif"):set_colour(1, 1, 0)
  417. local val = tostring(Characters[self.char_id].stats.acc - cur_item.accuracy + item.accuracy)
  418. ui_manager:get_widget("EquipMenu.Container.Stats.AccDif"):set_text(val)
  419. ui_manager:get_widget("EquipMenu.Container.Stats.AccDif"):set_visible(true)
  420. elseif item.accuracy < cur_item.accuracy then
  421. ui_manager:get_widget("EquipMenu.Container.Stats.AccArw"):set_visible(true)
  422. ui_manager:get_widget("EquipMenu.Container.Stats.AccDif"):set_colour(1, 0, 0)
  423. local val = tostring(Characters[self.char_id].stats.acc - cur_item.accuracy + item.accuracy)
  424. ui_manager:get_widget("EquipMenu.Container.Stats.AccDif"):set_text(val)
  425. ui_manager:get_widget("EquipMenu.Container.Stats.AccDif"):set_visible(true)
  426. end
  427. elseif item.type == Inventory.ITEM_TYPE.ARMOR then
  428. if item.defense.physical > cur_item.defense.physical then
  429. ui_manager:get_widget("EquipMenu.Container.Stats.DefArw"):set_visible(true)
  430. ui_manager:get_widget("EquipMenu.Container.Stats.DefDif"):set_colour(1, 1, 0)
  431. local val = tostring(Characters[self.char_id].stats.def - cur_item.defense.physical + item.defense.physical)
  432. ui_manager:get_widget("EquipMenu.Container.Stats.DefDif"):set_text(val)
  433. ui_manager:get_widget("EquipMenu.Container.Stats.DefDif"):set_visible(true)
  434. elseif item.defense.physical < cur_item.defense.physical then
  435. ui_manager:get_widget("EquipMenu.Container.Stats.DefArw"):set_visible(true)
  436. ui_manager:get_widget("EquipMenu.Container.Stats.DefDif"):set_colour(1, 0, 0)
  437. local val = tostring(Characters[self.char_id].stats.def - cur_item.defense.physical + item.defense.physical)
  438. ui_manager:get_widget("EquipMenu.Container.Stats.DefDif"):set_text(val)
  439. ui_manager:get_widget("EquipMenu.Container.Stats.DefDif"):set_visible(true)
  440. end
  441. if item.defense.magical > cur_item.defense.magical then
  442. ui_manager:get_widget("EquipMenu.Container.Stats.MDefArw"):set_visible(true)
  443. ui_manager:get_widget("EquipMenu.Container.Stats.MDefDif"):set_colour(1, 1, 0)
  444. local val = tostring(Characters[self.char_id].stats.mdef - cur_item.defense.magical + item.defense.magical)
  445. ui_manager:get_widget("EquipMenu.Container.Stats.MDefDif"):set_text(val)
  446. ui_manager:get_widget("EquipMenu.Container.Stats.MDefDif"):set_visible(true)
  447. elseif item.defense.magical < cur_item.defense.magical then
  448. ui_manager:get_widget("EquipMenu.Container.Stats.MDefArw"):set_visible(true)
  449. ui_manager:get_widget("EquipMenu.Container.Stats.MDefDif"):set_colour(1, 0, 0)
  450. local val = tostring(Characters[self.char_id].stats.mdef - cur_item.defense.magical + item.defense.magical)
  451. ui_manager:get_widget("EquipMenu.Container.Stats.MDefDif"):set_text(val)
  452. ui_manager:get_widget("EquipMenu.Container.Stats.MDefDif"):set_visible(true)
  453. end
  454. if item.evasion.physical > cur_item.evasion.physical then
  455. ui_manager:get_widget("EquipMenu.Container.Stats.EvaArw"):set_visible(true)
  456. ui_manager:get_widget("EquipMenu.Container.Stats.EvaDif"):set_colour(1, 1, 0)
  457. local val = tostring(Characters[self.char_id].stats.eva - cur_item.evasion.physical + item.evasion.physical)
  458. ui_manager:get_widget("EquipMenu.Container.Stats.EvaDif"):set_text(val)
  459. ui_manager:get_widget("EquipMenu.Container.Stats.EvaDif"):set_visible(true)
  460. elseif item.evasion.physical < cur_item.evasion.physical then
  461. ui_manager:get_widget("EquipMenu.Container.Stats.EvaArw"):set_visible(true)
  462. ui_manager:get_widget("EquipMenu.Container.Stats.EvaDif"):set_colour(1, 0, 0)
  463. local val = tostring(Characters[self.char_id].stats.eva - cur_item.evasion.physical + item.evasion.physical)
  464. ui_manager:get_widget("EquipMenu.Container.Stats.EvaDif"):set_text(val)
  465. ui_manager:get_widget("EquipMenu.Container.Stats.EvaDif"):set_visible(true)
  466. end
  467. if item.evasion.magical > cur_item.evasion.magical then
  468. ui_manager:get_widget("EquipMenu.Container.Stats.MEvaArw"):set_visible(true)
  469. ui_manager:get_widget("EquipMenu.Container.Stats.MEvaDif"):set_colour(1, 1, 0)
  470. local val = tostring(Characters[self.char_id].stats.mdef - cur_item.evasion.magical + item.evasion.magical)
  471. ui_manager:get_widget("EquipMenu.Container.Stats.MEvaDif"):set_text(val)
  472. ui_manager:get_widget("EquipMenu.Container.Stats.MEvaDif"):set_visible(true)
  473. elseif item.evasion.magical < cur_item.evasion.magical then
  474. ui_manager:get_widget("EquipMenu.Container.Stats.MEvaArw"):set_visible(true)
  475. ui_manager:get_widget("EquipMenu.Container.Stats.MEvaDif"):set_colour(1, 0, 0)
  476. local val = tostring(Characters[self.char_id].stats.mdef - cur_item.evasion.magical + item.evasion.magical)
  477. ui_manager:get_widget("EquipMenu.Container.Stats.MEvaDif"):set_text(val)
  478. ui_manager:get_widget("EquipMenu.Container.Stats.MEvaDif"):set_visible(true)
  479. end
  480. end
  481. end,
  482. --- Hides the item menu and goes back to the main menu.
  483. hide = function(self)
  484. ui_manager:get_widget("EquipMenu"):set_visible(false)
  485. UiContainer.current_menu = "main"
  486. UiContainer.current_submenu = ""
  487. return 0;
  488. end,
  489. }