源战役客户端
Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

107 rader
3.9 KiB

4 veckor sedan
  1. PsionicWashAttrItem = PsionicWashAttrItem or BaseClass(BaseItem)
  2. local PsionicWashAttrItem = PsionicWashAttrItem
  3. local WordManager = WordManager
  4. function PsionicWashAttrItem:__init(parent_wnd,prefab_asset,layer_name)
  5. self.base_file = "psionic"
  6. self.layout_file = "PsionicWashAttrItem"
  7. self.parent_wnd = parent_wnd
  8. self.layer_name = layer_name
  9. self.last_slot = 0
  10. self.last_val_data = 0
  11. self.no_effect = true
  12. self.model = PsionicModel:getInstance()
  13. self:Load()
  14. end
  15. function PsionicWashAttrItem:Load_callback()
  16. local nodes = {
  17. "attr_icon:img",
  18. "fill:img",
  19. "attr_val:tmp", "attr_name:tmp",
  20. "attr_effect_con",
  21. }
  22. self:GetChildren(nodes)
  23. self:AddEvents()
  24. if self.need_refreshData then
  25. self:UpdateView()
  26. end
  27. end
  28. function PsionicWashAttrItem:AddEvents( )
  29. end
  30. -- 需特殊处理隐藏时的特效表现
  31. function PsionicWashAttrItem:SetVisible(state, force_hide)
  32. BaseItem.SetVisible(self, state, force_hide)
  33. if not state then
  34. self:ClearUIEffect(self.attr_effect_con)
  35. self.showing_attr_effect = false
  36. end
  37. end
  38. function PsionicWashAttrItem:SetData( slot, data, cur_attr_val )
  39. if self.last_slot ~= slot then -- 切换槽位时清空数据
  40. self.last_val_data = 0
  41. self.last_slot = slot
  42. self.no_effect = true
  43. end
  44. self.data = data
  45. self.cur_attr_val = cur_attr_val -- 当前属性值
  46. if self.is_loaded then
  47. self.need_refreshData = false
  48. self:UpdateView()
  49. else
  50. self.need_refreshData = true
  51. end
  52. end
  53. function PsionicWashAttrItem:UpdateView( )
  54. if self.data then
  55. SetAttrIconByColorType(self, self.attr_icon_img, self.data[1], true, 1)
  56. self.fill_img.fillAmount = self.last_val_data / self.data[2]
  57. local temp_last_val_data = self.last_val_data
  58. self.attr_name_tmp.text = WordManager:GetProperties(self.data[1])
  59. local function final_result()
  60. self.attr_val_tmp.text = string.format("<color=%s>%s</color>/%s", ColorUtil.GREEN_DARK,
  61. WordManager:GetPropertyValue(self.data[1], self.cur_attr_val), WordManager:GetPropertyValue(self.data[1], self.data[2]))
  62. self.fill_img.fillAmount = self.cur_attr_val / self.data[2]
  63. end
  64. if temp_last_val_data == self.cur_attr_val then -- 值没有变化,直接用最终结果
  65. final_result()
  66. else
  67. local function duration_callback(percent)
  68. if percent < 1 then
  69. self.attr_val_tmp.text = string.format("<color=%s>%s</color>/%s", ColorUtil.GREEN_DARK,
  70. WordManager:GetPropertyValue(self.data[1], (self.cur_attr_val - temp_last_val_data) * percent + temp_last_val_data),
  71. WordManager:GetPropertyValue(self.data[1], self.data[2]))
  72. else
  73. final_result()
  74. end
  75. end
  76. local function end_callback()
  77. duration_callback(1)
  78. end
  79. local last_progress = self.cur_attr_val / self.data[2]
  80. ImageProgressAction(self.fill, 0, last_progress, 0.5, duration_callback, end_callback)
  81. -- 出现属性变化的洗练item需要每次都播放特效
  82. if not self.no_effect and not self.showing_attr_effect then
  83. local function call_back()
  84. self.showing_attr_effect = false
  85. end
  86. self:ClearUIEffect(self.attr_effect_con)
  87. self:AddUIEffect("ui_jinjiejindu", self.attr_effect_con, self.layer_name, Vector3(-130,0,0), 1, false, 0.75, nil, call_back)
  88. self.showing_attr_effect = true
  89. end
  90. end
  91. self.last_val_data = self.cur_attr_val
  92. -- 加载完第一次后才可以播放特效
  93. self.no_effect = false
  94. end
  95. end
  96. function PsionicWashAttrItem:__delete( )
  97. self:ClearUIEffect(self.attr_effect_con)
  98. end