源战役客户端
Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

171 рядки
5.6 KiB

1 місяць тому
  1. -- <*
  2. -- @Author: Saber
  3. -- @Description: 经验副本主界面子弹粒子特效容器
  4. -- *>
  5. ExpHangupBulletItem = ExpHangupBulletItem or BaseClass(BaseItem)
  6. local ExpHangupBulletItem = ExpHangupBulletItem
  7. local sin = math.sin
  8. local cos = math.cos
  9. local rad = math.rad
  10. local ClearTrailRenderer = ClearTrailRenderer
  11. local lua_soundM = lua_soundM
  12. function ExpHangupBulletItem:__init(parent_wnd,prefab_asset,layer_name, bullet_type)
  13. self.base_file = "expDun"
  14. self.layout_file = "ExpHangupBulletItem"
  15. self.parent_wnd = parent_wnd
  16. self.layer_name = layer_name
  17. self.bullet_type = bullet_type or 1
  18. self.is_animing = false -- 是否在动画中
  19. self.model = ExpDunModel:getInstance()
  20. self.bullet_sound_shot1 = LuaSoundManager.SOUND_UI.EXPBULLETSHOT1
  21. self.bullet_sound_shot2 = LuaSoundManager.SOUND_UI.EXPBULLETSHOT2
  22. self.bullet_sound_laser = LuaSoundManager.SOUND_UI.EXPBULLETLASER
  23. self:Load()
  24. end
  25. function ExpHangupBulletItem:Load_callback()
  26. local nodes = {
  27. "effect:obj",
  28. "extra_effect1:obj",
  29. "extra_effect2:obj",
  30. }
  31. self:GetChildren(nodes)
  32. self:AddEvents()
  33. if self.need_refreshData then
  34. if self.is_normal_bullet then -- 正常特效子弹
  35. self:UpdateNormalBulletEffect()
  36. else -- 另一种特效子弹
  37. self:StartSlayBulletAnim()
  38. end
  39. end
  40. end
  41. function ExpHangupBulletItem:AddEvents( )
  42. end
  43. function ExpHangupBulletItem:SetData( data )
  44. self.start_pos = data.start_pos
  45. self.anim_time = data.anim_time
  46. self.callback = data.callback
  47. self.show_effect_type = data.show_effect_type
  48. self.is_normal_bullet = data.is_normal_bullet
  49. if self.is_loaded then
  50. self.need_refreshData = false
  51. if self.is_normal_bullet then -- 正常特效子弹
  52. self:UpdateNormalBulletEffect()
  53. else -- 另一种特效子弹
  54. self:StartSlayBulletAnim()
  55. end
  56. else
  57. self.need_refreshData = true
  58. end
  59. end
  60. function ExpHangupBulletItem:SetItemIndex(index)
  61. self.index = index
  62. end
  63. function ExpHangupBulletItem:GetItemIndex( )
  64. return self.index
  65. end
  66. function ExpHangupBulletItem:GetIsAnimating( )
  67. return self.is_animing
  68. end
  69. function ExpHangupBulletItem:UpdateNormalBulletEffect( )
  70. cc.ActionManager:getInstance():removeAllActionsFromTarget(self.transform)
  71. local hited = false
  72. local function hit_anim_druation(percent)
  73. if not hited and percent >= 0.75 then
  74. if self.callback then
  75. self.callback()
  76. self.callback = nil -- 回调执行一次就销毁
  77. end
  78. hited = true
  79. end
  80. if percent >= 1 then
  81. cc.ActionManager:getInstance():removeAllActionsFromTarget(self.transform)
  82. self.is_animing = false
  83. end
  84. end
  85. local hit_anim_action = cc.CustomUpdate.New(self.anim_time, hit_anim_druation)
  86. -- 调整坐标,创建动画
  87. local function load_finished_func()
  88. SetAnchoredPosition(self.transform, self.start_pos.x, self.start_pos.y)
  89. cc.ActionManager:getInstance():addAction(hit_anim_action, self.transform)
  90. end
  91. -- 创建粒子效果
  92. local p_config = {
  93. resname = "effect_fangzhi_attack",
  94. uiTranform = self.effect,
  95. layer_name = self.layer_name,
  96. pos = Vector2(0,0),
  97. scale = 0.7,
  98. is_loop = false,
  99. last_time = -1,
  100. load_finish_func = load_finished_func,
  101. layer = UIPartical.RenderingOther_List.UI,
  102. use_ex_depth = true,
  103. }
  104. self:AddUIEffectConfig(p_config)
  105. -- 播放声音
  106. local random_num = math.random(0, 100)
  107. if random_num < 50 then
  108. lua_soundM:PlayUIEffectSound(self.bullet_sound_shot1)
  109. else
  110. lua_soundM:PlayUIEffectSound(self.bullet_sound_shot2)
  111. end
  112. self.is_animing = true
  113. end
  114. function ExpHangupBulletItem:StartSlayBulletAnim( )
  115. -- 根据类型调整特效
  116. if self.show_effect_type then
  117. self:ClearUIEffect(self.effect)
  118. -- 创建粒子效果
  119. local p_config = {
  120. resname = self.show_effect_type % 2 == 1 and "effect_fangzhi_attack2" or "effect_fangzhi_attack3",
  121. uiTranform = self.show_effect_type % 2 == 1 and self.extra_effect1 or self.extra_effect2,
  122. layer_name = self.layer_name,
  123. pos = Vector2(0,0),
  124. scale = 0.7,
  125. is_loop = false,
  126. last_time = -1,
  127. layer = UIPartical.RenderingOther_List.UI,
  128. use_ex_depth = true,
  129. }
  130. self:AddUIEffectConfig(p_config)
  131. self:ClearUIEffect(self.show_effect_type % 2 == 1 and self.extra_effect2 or self.extra_effect1)
  132. -- 播放声音
  133. if self.show_effect_type % 2 == 1 then
  134. local random_num = math.random(0, 100)
  135. if random_num < 50 then
  136. lua_soundM:PlayUIEffectSound(self.bullet_sound_shot1)
  137. else
  138. lua_soundM:PlayUIEffectSound(self.bullet_sound_shot2)
  139. end
  140. else
  141. lua_soundM:PlayUIEffectSound(self.bullet_sound_laser)
  142. end
  143. end
  144. -- 调整坐标,创建动画
  145. SetAnchoredPosition(self.transform, self.start_pos.x, self.start_pos.y)
  146. end
  147. function ExpHangupBulletItem:StopUnHitBulletAnim( )
  148. if self.unhit_bullet_anim_id then
  149. GlobalTimerQuest:CancelQuest(self.unhit_bullet_anim_id)
  150. self.unhit_bullet_anim_id = nil
  151. end
  152. end
  153. function ExpHangupBulletItem:__delete( )
  154. cc.ActionManager:getInstance():removeAllActionsFromTarget(self.transform)
  155. self:ClearUIEffect(self.effect)
  156. self:ClearUIEffect(self.extra_effect1)
  157. self:ClearUIEffect(self.extra_effect2)
  158. self:StopUnHitBulletAnim()
  159. end