sceneEffectManager.lua 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. local sceneEffectManager = class("sceneEffectManager")
  2. function sceneEffectManager:ctor()
  3. self.mFireAudioFlag = false
  4. self.mSceneEffectInCurrViewField = {}
  5. self.mSceneEffectMapXYInCurrViewField = {}
  6. end
  7. function sceneEffectManager:destory()
  8. if sceneEffectManager.instance then
  9. sceneEffectManager.instance = nil
  10. end
  11. end
  12. function sceneEffectManager:Inst()
  13. if not sceneEffectManager.instance then
  14. sceneEffectManager.instance = sceneEffectManager.new()
  15. end
  16. return sceneEffectManager.instance
  17. end
  18. -----------------------------------------------------------------------------
  19. function sceneEffectManager:Cleanup()
  20. self.mFireAudioFlag = false
  21. self.mSceneEffectInCurrViewField = {}
  22. self.mSceneEffectMapXYInCurrViewField = {}
  23. end
  24. -----------------------------------------------------------------------------
  25. function sceneEffectManager:AddSceneEffect(effect)
  26. if nil == effect then return -1 end
  27. self.mSceneEffectInCurrViewField[effect:GetID()] = effect
  28. local p = {}
  29. p.x = effect:GetMapX()
  30. p.y = effect:GetMapY()
  31. p.point = 65536 * p.y + p.x
  32. self.mSceneEffectMapXYInCurrViewField[p.point] = effect
  33. self:checkFireAudio( effect, true )
  34. return 1
  35. end
  36. -----------------------------------------------------------------------------
  37. function sceneEffectManager:RmvSceneEffect(effectID)
  38. local it = self.mSceneEffectInCurrViewField[effectID]
  39. if nil == it then
  40. return -1
  41. end
  42. local effect = it
  43. self.mSceneEffectInCurrViewField[effectID] = nil
  44. local p = {}
  45. p.x = effect:GetMapX()
  46. p.y = effect:GetMapY()
  47. p.point = 65536 * p.y + p.x
  48. local itMapXY = self.mSceneEffectMapXYInCurrViewField[p.point]
  49. if nil == itMapXY then
  50. return -2
  51. end
  52. self.mSceneEffectMapXYInCurrViewField[p.point] = nil
  53. self:checkFireAudio( effect, false )
  54. return 1
  55. end
  56. -----------------------------------------------------------------------------
  57. function sceneEffectManager:FindSceneEffectInCurrViewField(recvVec)
  58. for k,v in pairs(self.mSceneEffectInCurrViewField) do
  59. table.insert(recvVec, v)
  60. end
  61. end
  62. -----------------------------------------------------------------------------
  63. function sceneEffectManager:FindSceneEffectInMapXY(X, Y)
  64. local p = {}
  65. p.x = X
  66. p.y = Y
  67. p.point = 65536 * p.y + p.x
  68. local itMapXY = self.mSceneEffectMapXYInCurrViewField[p.point]
  69. if nil == itMapXY then
  70. return nil
  71. end
  72. return itMapXY
  73. end
  74. -----------------------------------------------------------------------------
  75. function sceneEffectManager:IsExistedFireInMapXY(X, Y)
  76. local effect = self:FindSceneEffectInMapXY( X, Y )
  77. if not effect then
  78. return false
  79. end
  80. return (effect:GetEffectType() == global.MMO.EFFECT_TYPE_FIRE)
  81. end
  82. -----------------------------------------------------------------------------
  83. function sceneEffectManager:checkFireAudio(effect, isAdd)
  84. if (not effect) or global.MMO.EFFECT_TYPE_FIRE ~= effect:GetEffectType() then
  85. return
  86. end
  87. if isAdd and not self.mFireAudioFlag then -- play fire audio
  88. self.mFireAudioFlag = true
  89. return
  90. end
  91. if (not isAdd) and self.mFireAudioFlag then -- stop fire audio
  92. local isExistFire = false
  93. for k,v in pairs(self.mSceneEffectInCurrViewField) do
  94. local m = v
  95. if global.MMO.EFFECT_TYPE_FIRE == m:GetEffectType() then
  96. isExistFire = true
  97. break
  98. end
  99. end
  100. if not isExistFire then
  101. self.mFireAudioFlag = false
  102. end
  103. end
  104. end
  105. return sceneEffectManager