| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186 |
- local RemoteProxy = requireProxy("remote/RemoteProxy")
- local DarkLayerProxy = class("DarkLayerProxy", RemoteProxy)
- DarkLayerProxy.NAME = global.ProxyTable.DarkLayerProxy
- DarkLayerProxy.MODE = {
- day = 0, -- 全天白天
- dark = 1 -- 有黑夜
- }
- -- 0-白天,1-黑夜,2-日出,3-傍晚
- DarkLayerProxy.STATE = {
- daytime = 0, -- 白天
- night = 1, -- 晚上
- sunrise = 2, -- 日出
- evening = 3 -- 傍晚
- }
- DarkLayerProxy.Opacity = {
- [DarkLayerProxy.STATE.daytime] = 0,
- [DarkLayerProxy.STATE.night] = 1,
- [DarkLayerProxy.STATE.sunrise] = 0.5,
- [DarkLayerProxy.STATE.evening] = 0.5
- }
- DarkLayerProxy.LIGHT_TYPE = {
- Default = {r = 2.5, w = 1.5}, -- 自身默认
- Two_Skill = {r = 2, w = 1.9 }, --
- Custom1 = {r = 1 , w = 1},
- Sneak = {r = 0, w = 0}, --隐藏
- }
- function DarkLayerProxy:ctor()
- DarkLayerProxy.super.ctor(self)
- self._state = DarkLayerProxy.STATE.daytime
- self._mode = DarkLayerProxy.MODE.day
- self.lastState = DarkLayerProxy.STATE.daytime
- end
- function DarkLayerProxy:setLastState(state)
- if self.lastState ~= state then
- self.lastState = state
- end
- end
- function DarkLayerProxy:getLastState()
- return self.lastState
- end
- function DarkLayerProxy:onRegister()
- DarkLayerProxy.super.onRegister(self)
- end
- function DarkLayerProxy:handle_MSG_SC_DAYSTATE(msg)
- local header = msg:GetHeader()
- local state = header.param2 --0-白天,1-黑夜,2-日出,3-傍晚
- dump(header, "handle_MSG_SC_DAYSTATE___")
- self:setState(state)
- local mode = header.param1--0 全域白天 1 以地图设定为优先级 地图未设定 以时间为准
- self:setMode(mode)
- SL.onLUAEvent(LUA_EVENT_DARK_STATE_CHANGE)
- end
- function DarkLayerProxy:GetLightData(num, actorID)
- -- 啥也没带
- if num == 0 then
- if global.gamePlayerController:GetMainPlayerID() == actorID then
- return DarkLayerProxy.LIGHT_TYPE.Default
- else
- return nil
- end
- else
- local t = clone(DarkLayerProxy.LIGHT_TYPE.Custom1)
- t.r = t.r + num
- return t
- end
- end
- function DarkLayerProxy:handle_MSG_SC_CHANGECANDLE(msg)
- local header = msg:GetHeader()
- local num = header.param1--人物携带蜡烛状态 格子数
- dump(header, "handle_MSG_SC_CHANGECANDLE___")
- local msgLen = msg:GetDataLength()
- local actorID = msg:GetData():ReadString(msgLen)
- local actor = global.actorManager:GetActor(actorID)
- if not actor then
- return false
- end
- local lightData
- -- 啥也没带
- if num == 0 then
- if global.gamePlayerController:GetMainPlayerID() == actorID then
- lightData = DarkLayerProxy.LIGHT_TYPE.Default
- elseif actor:IsHero() and actor:GetMasterID() == global.gamePlayerController:GetMainPlayerID() then
- lightData = DarkLayerProxy.LIGHT_TYPE.Default
- end
- else
- local t = clone(DarkLayerProxy.LIGHT_TYPE.Custom1)
- t.r = t.r + num
- t.w = t.w + num
- lightData = t
- end
- local lightID = actor:GetLightID()
- if lightID then
- if lightData then
- global.darkNodeManager:updateNode(lightID, {r = lightData.r, w = lightData.w})
- else
- global.darkNodeManager:removeNode(lightID)
- actor:SetLightID(nil)
- end
- elseif lightData then
- local actorPos = global.sceneManager:MapPos2WorldPos(actor:GetMapX(), actor:GetMapY(), true)
- 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)})
- actor:SetLightID(lightID)
- end
- if lightID and actor:IsPlayer() and not actor:IsMainPlayer() and actor:GetValueByKey(global.MMO.HUD_SNEAK) then
- global.darkNodeManager:updateNode(lightID, {r = DarkLayerProxy.LIGHT_TYPE.Sneak.r, w = DarkLayerProxy.LIGHT_TYPE.Sneak.w, isLast = true})
- end
- end
- function DarkLayerProxy:getUnit()
- return math.max(global.MMO.MapGridWidth, global.MMO.MapGridHeight)
- end
- -- state --0-白天,1-黑夜,2-日出,3-傍晚
- function DarkLayerProxy:setState(state)
- if state ~= self._state then
- self._state = state
- end
- end
- function DarkLayerProxy:getOpacity()
- return DarkLayerProxy.Opacity[self:getCurState()]
- end
- -- 获取当前状态
- function DarkLayerProxy:getState()
- return self._state
- end
- -- 获取当前状态 (根据地图属性 模式等)
- function DarkLayerProxy:getCurState()
- local mode = self:getMode()
- local state = self:getState()
- local MapProxy = global.Facade:retrieveProxy(global.ProxyTable.Map)
- local mapFlag = MapProxy:GetFlag()
- local mapnight = bit.band(bit.rshift(mapFlag, 9), 1) == 1
- local mapday = bit.band(bit.rshift(mapFlag, 10), 1) == 1
- if mapnight or mapday then--优先以地图的时间状态为准
- if mapnight then--优先黑夜
- state = DarkLayerProxy.STATE.night
- else
- state = DarkLayerProxy.STATE.daytime
- end
- end
- if mode == DarkLayerProxy.MODE.day then--全域白天
- state = DarkLayerProxy.STATE.daytime
- end
- return state
- end
- --mode 0 全域白天 1 以地图设定为优先级 地图未设定 以时间为准
- function DarkLayerProxy:setMode(mode)
- if mode == 0 then
- self._mode = DarkLayerProxy.MODE.day
- elseif mode == 1 then
- self._mode = DarkLayerProxy.MODE.dark
- end
- end
- function DarkLayerProxy:getMode()
- return self._mode
- end
- function DarkLayerProxy:RegisterMsgHandler()
- DarkLayerProxy.super.RegisterMsgHandler(self)
- local msgType = global.MsgType
- LuaRegisterMsgHandler(msgType.MSG_SC_DAYSTATE, handler(self, self.handle_MSG_SC_DAYSTATE)) -- 昼夜状态
- LuaRegisterMsgHandler(msgType.MSG_SC_CHANGECANDLE, handler(self, self.handle_MSG_SC_CHANGECANDLE)) -- 切换蜡烛状态
- end
- return DarkLayerProxy
|