DarkLayerProxy.lua 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. local RemoteProxy = requireProxy("remote/RemoteProxy")
  2. local DarkLayerProxy = class("DarkLayerProxy", RemoteProxy)
  3. DarkLayerProxy.NAME = global.ProxyTable.DarkLayerProxy
  4. DarkLayerProxy.MODE = {
  5. day = 0, -- 全天白天
  6. dark = 1 -- 有黑夜
  7. }
  8. -- 0-白天,1-黑夜,2-日出,3-傍晚
  9. DarkLayerProxy.STATE = {
  10. daytime = 0, -- 白天
  11. night = 1, -- 晚上
  12. sunrise = 2, -- 日出
  13. evening = 3 -- 傍晚
  14. }
  15. DarkLayerProxy.Opacity = {
  16. [DarkLayerProxy.STATE.daytime] = 0,
  17. [DarkLayerProxy.STATE.night] = 1,
  18. [DarkLayerProxy.STATE.sunrise] = 0.5,
  19. [DarkLayerProxy.STATE.evening] = 0.5
  20. }
  21. DarkLayerProxy.LIGHT_TYPE = {
  22. Default = {r = 2.5, w = 1.5}, -- 自身默认
  23. Two_Skill = {r = 2, w = 1.9 }, --
  24. Custom1 = {r = 1 , w = 1},
  25. Sneak = {r = 0, w = 0}, --隐藏
  26. }
  27. function DarkLayerProxy:ctor()
  28. DarkLayerProxy.super.ctor(self)
  29. self._state = DarkLayerProxy.STATE.daytime
  30. self._mode = DarkLayerProxy.MODE.day
  31. self.lastState = DarkLayerProxy.STATE.daytime
  32. end
  33. function DarkLayerProxy:setLastState(state)
  34. if self.lastState ~= state then
  35. self.lastState = state
  36. end
  37. end
  38. function DarkLayerProxy:getLastState()
  39. return self.lastState
  40. end
  41. function DarkLayerProxy:onRegister()
  42. DarkLayerProxy.super.onRegister(self)
  43. end
  44. function DarkLayerProxy:handle_MSG_SC_DAYSTATE(msg)
  45. local header = msg:GetHeader()
  46. local state = header.param2 --0-白天,1-黑夜,2-日出,3-傍晚
  47. dump(header, "handle_MSG_SC_DAYSTATE___")
  48. self:setState(state)
  49. local mode = header.param1--0 全域白天 1 以地图设定为优先级 地图未设定 以时间为准
  50. self:setMode(mode)
  51. SL.onLUAEvent(LUA_EVENT_DARK_STATE_CHANGE)
  52. end
  53. function DarkLayerProxy:GetLightData(num, actorID)
  54. -- 啥也没带
  55. if num == 0 then
  56. if global.gamePlayerController:GetMainPlayerID() == actorID then
  57. return DarkLayerProxy.LIGHT_TYPE.Default
  58. else
  59. return nil
  60. end
  61. else
  62. local t = clone(DarkLayerProxy.LIGHT_TYPE.Custom1)
  63. t.r = t.r + num
  64. return t
  65. end
  66. end
  67. function DarkLayerProxy:handle_MSG_SC_CHANGECANDLE(msg)
  68. local header = msg:GetHeader()
  69. local num = header.param1--人物携带蜡烛状态 格子数
  70. dump(header, "handle_MSG_SC_CHANGECANDLE___")
  71. local msgLen = msg:GetDataLength()
  72. local actorID = msg:GetData():ReadString(msgLen)
  73. local actor = global.actorManager:GetActor(actorID)
  74. if not actor then
  75. return false
  76. end
  77. local lightData
  78. -- 啥也没带
  79. if num == 0 then
  80. if global.gamePlayerController:GetMainPlayerID() == actorID then
  81. lightData = DarkLayerProxy.LIGHT_TYPE.Default
  82. elseif actor:IsHero() and actor:GetMasterID() == global.gamePlayerController:GetMainPlayerID() then
  83. lightData = DarkLayerProxy.LIGHT_TYPE.Default
  84. end
  85. else
  86. local t = clone(DarkLayerProxy.LIGHT_TYPE.Custom1)
  87. t.r = t.r + num
  88. t.w = t.w + num
  89. lightData = t
  90. end
  91. local lightID = actor:GetLightID()
  92. if lightID then
  93. if lightData then
  94. global.darkNodeManager:updateNode(lightID, {r = lightData.r, w = lightData.w})
  95. else
  96. global.darkNodeManager:removeNode(lightID)
  97. actor:SetLightID(nil)
  98. end
  99. elseif lightData then
  100. local actorPos = global.sceneManager:MapPos2WorldPos(actor:GetMapX(), actor:GetMapY(), true)
  101. lightID = global.darkNodeManager:createNode({x = actorPos.x, y = actorPos.y, r = lightData.r, w = lightData.w , offset = cc.p(0, global.MMO.PLAYER_AVATAR_OFFSET.y)})
  102. actor:SetLightID(lightID)
  103. end
  104. if lightID and actor:IsPlayer() and not actor:IsMainPlayer() and actor:GetValueByKey(global.MMO.HUD_SNEAK) then
  105. global.darkNodeManager:updateNode(lightID, {r = DarkLayerProxy.LIGHT_TYPE.Sneak.r, w = DarkLayerProxy.LIGHT_TYPE.Sneak.w, isLast = true})
  106. end
  107. end
  108. function DarkLayerProxy:getUnit()
  109. return math.max(global.MMO.MapGridWidth, global.MMO.MapGridHeight)
  110. end
  111. -- state --0-白天,1-黑夜,2-日出,3-傍晚
  112. function DarkLayerProxy:setState(state)
  113. if state ~= self._state then
  114. self._state = state
  115. end
  116. end
  117. function DarkLayerProxy:getOpacity()
  118. return DarkLayerProxy.Opacity[self:getCurState()]
  119. end
  120. -- 获取当前状态
  121. function DarkLayerProxy:getState()
  122. return self._state
  123. end
  124. -- 获取当前状态 (根据地图属性 模式等)
  125. function DarkLayerProxy:getCurState()
  126. local mode = self:getMode()
  127. local state = self:getState()
  128. local MapProxy = global.Facade:retrieveProxy(global.ProxyTable.Map)
  129. local mapFlag = MapProxy:GetFlag()
  130. local mapnight = bit.band(bit.rshift(mapFlag, 9), 1) == 1
  131. local mapday = bit.band(bit.rshift(mapFlag, 10), 1) == 1
  132. if mapnight or mapday then--优先以地图的时间状态为准
  133. if mapnight then--优先黑夜
  134. state = DarkLayerProxy.STATE.night
  135. else
  136. state = DarkLayerProxy.STATE.daytime
  137. end
  138. end
  139. if mode == DarkLayerProxy.MODE.day then--全域白天
  140. state = DarkLayerProxy.STATE.daytime
  141. end
  142. return state
  143. end
  144. --mode 0 全域白天 1 以地图设定为优先级 地图未设定 以时间为准
  145. function DarkLayerProxy:setMode(mode)
  146. if mode == 0 then
  147. self._mode = DarkLayerProxy.MODE.day
  148. elseif mode == 1 then
  149. self._mode = DarkLayerProxy.MODE.dark
  150. end
  151. end
  152. function DarkLayerProxy:getMode()
  153. return self._mode
  154. end
  155. function DarkLayerProxy:RegisterMsgHandler()
  156. DarkLayerProxy.super.RegisterMsgHandler(self)
  157. local msgType = global.MsgType
  158. LuaRegisterMsgHandler(msgType.MSG_SC_DAYSTATE, handler(self, self.handle_MSG_SC_DAYSTATE)) -- 昼夜状态
  159. LuaRegisterMsgHandler(msgType.MSG_SC_CHANGECANDLE, handler(self, self.handle_MSG_SC_CHANGECANDLE)) -- 切换蜡烛状态
  160. end
  161. return DarkLayerProxy