require("Base/Stack") require("Modules/Map/Logic/TileMapController") require("Modules/Map/Logic/TileMapView") require("Modules/Guild/View/GuildMemberView") local _GuildBuildConfig = { [GUILD_MAP_BUILD_TYPE.HOUSE] = { bgImg = "r_gonghui_qizhi", nameImg = "r_gonghui_dating", pos = Vector3.New(1300, -300, 0), namePos = Vector3.New(0, 13.4, 0), rpType = RedPointType.Guild_House, rpPos = Vector3.New(38, 136, 0), }, [GUILD_MAP_BUILD_TYPE.LOGO] = { --图腾 bgImg = "r_gonghui_qizhi", nameImg = "r_gonghui_tuteng", pos = Vector3.New(848, -300, 0), namePos = Vector3.New(0, 13.4, 0), }, [GUILD_MAP_BUILD_TYPE.STORE] = { bgImg = "r_gonghui_qizhi", nameImg = "r_gonghui_shangdian", pos = Vector3.New(1398, -897, 0), namePos = Vector3.New(0, 13.4, 0), rpType = RedPointType.Guild_Shop, rpPos = Vector3.New(38, 136, 0), }, -- [GUILD_MAP_BUILD_TYPE.DOOR] = { --公会战 -- bgImg = "r_gonghui_qizhi", -- nameImg = "r_gonghui_zhao", -- pos = Vector3.New(1344, -1344, 0), -- namePos = Vector3.New(0, 13.4, 0), -- }, [GUILD_MAP_BUILD_TYPE.LOGO_IMG] = { bgImg = "gh_tt_1", nameImg = nil, pos = Vector3.New(495, -750, 0), }, -- [GUILD_MAP_BUILD_TYPE.BOSS] = { --试练 -- bgImg = "r_gonghui_qizhi", -- pos = Vector3.New(1821, -164, 0), -- color = Color.New(0,0,0,0), -- nameImg = "r_gonghui_shouling", -- namePos = Vector3.New(0, -84, 0), -- rpType = RedPointType.Guild_Boss, -- rpPos = Vector3.New(75, -64, 0), -- liveName = "live2d_huyao", -- livePos = Vector3.New(0, -84, 0), -- liveScale = Vector3.New(0.15, 0.15, 0.15), -- }, [GUILD_MAP_BUILD_TYPE.FETE] = { --祭祀 bgImg = "r_gonghui_qizhi", nameImg = "r_gonghui_jisi", pos = Vector3.New(2428, -336, 0), namePos = Vector3.New(0, 13.4, 0), rpType = RedPointType.Guild_Fete, rpPos = Vector3.New(38, 136, 0), }, [GUILD_MAP_BUILD_TYPE.TENPOS] = { --十绝阵 bgImg = "r_gonghui_qizhi", nameImg = "r_gonghui_shijiezhen", pos = Vector3.New(687, -765, 0), namePos = Vector3.New(0, 13.4, 0), rpType = RedPointType.Guild_DeathPos, rpPos=Vector3.New(37.8,136.3,0) }, [GUILD_MAP_BUILD_TYPE.SKILL] = { --技能 bgImg = "r_gonghui_qizhi", nameImg = "r_gonghui_jineng", pos = Vector3.New(566, -158, 0), namePos = Vector3.New(0, 13.4, 0), rpType = RedPointType.Guild_Skill, rpPos = Vector3.New(53, 137, 0), }, [GUILD_MAP_BUILD_TYPE.BOSS] = { --公会副本 bgImg = "r_gonghui_qizhi", nameImg = "r_gonghui_zhao", pos = Vector3.New(266, -158, 0), namePos = Vector3.New(0, 13.4, 0), rpType = RedPointType.Guild_Transcript, rpPos = Vector3.New(53, 137, 0), }, [GUILD_MAP_BUILD_TYPE.AID] = { --援助 bgImg = "r_gonghui_qizhi", nameImg = "r_gonghui_yuanzhu", pos = Vector3.New(1979, -504, 0), namePos = Vector3.New(0, 13.4, 0), rpType = RedPointType.Guild_Aid, rpPos = Vector3.New(53, 137, 0), }, } local this = {} --公会地图数据解析 local function dataParse(str) local ss = string.split(str, "|") local t = {} for i=1, #ss do local item = ss[i] local pss = string.split(item, "#") local n = Map_UV2Pos(tonumber(pss[1]), tonumber(pss[2])) table.insert(t, n) end local newStr = "{" for i=1, #t do if i==#t then newStr = newStr .. tostring(t[i]) .. "}" else newStr = newStr .. tostring(t[i]) .. "," end end return newStr end local dataConfig = { [2] = {257,513,769,1025,1281,2049,2305,2561,2817,3073,5377,5633,5889,6145,6401,6657,7937,8193,8449,8705,8961,9217,9473,9729,9985,258,514,770,1026,1282,2050,2306,2562,2818,3074,5378,5634,5890,6146,6402,6658,7938,8194,8450,8706,8962,9218,9474,9730,9986,259,515,771,1027,1283,2051,2307,2563,2819,3075,5379,5635,5891,6147,6403,6659,7939,8195,8451,8707,8963,9219,9475,9731,9987,260,516,772,1028,1284,2052,2308,2564,2820,3076,5380,5636,5892,6404,6660,7940,8196,8452,8708,8964,9220,9476,9732,9988,261,517,773,1029,1285,5381,7941,8197,8453,8709,8965,9221,9477,9733,9989,262,518,774,1030,1286,5382,8966,9734,9990,263,519,775,1031,1287,5383,6663,6919,7431,7687,7943,9735,9991,264,520,776,1032,1288,1544,1800,2056,2312,2568,2824,3336,3592,3848,4872,5128,5384,6408,7176,8200,8456,265,521,777,1033,1289,2825,6153,8713,8969,266,522,778,1034,1290,2826,3850,4874,5898,8970,267,523,779,1035,1291,2827,3083,5899,8971,268,524,780,1036,1292,2828,5900,8972,269,525,781,1037,1293,2829,5901,8973,270,526,782,1038,1294,2830,3086,3854,4878,5902,7438,7694,8206,8462,8718,271,527,783,1039,1295,1551,1807,2063,2319,2575,2831,3855,4879,5903,6159,6415,7183,7439,7695,9231,272,528,784,1040,1296,1552,1808,2064,2320,2576,2832,3088,3344,3600,5904,6160,6416,7184,7440,7696,9232,273,529,785,1041,1297,1553,1809,2065,2321,2577,2833,3089,3345,3601,6161,7441,8465,8721,274,530,786,1042,1298,1554,1810,2066,2322,2578,2834,3090,3346,3602,8466,8722,275,4883,6419,8467,8723,276,3860,4884,6420,8468,8724,277,3861,4885,7189,8469,8725,278,3862,4886,5142,7190,8470,8726,279,535,791,1047,1303,1559,1815,2071,2327,2583,2839,3095,3351,3607,5143,5399,5655,5911,6167,6423,6679,6935,7191,7447,7703,7959,8215,8471,8727}, [10] = {3329,3585,3841,4097,4353,4609,4865,5121,3330,3586,3842,4098,4354,4610,4866,5122,3331,3587,3843,4099,4355,4611,4867,5123,3332,3588,3844,4100,4356,4612,4868,5124,3333,3589,3845,4101,4357,4613,4869,5125,3334,3590,3846,4102,4614,4870,5126,3335,3591,3847,4871,5127}, [20] = {1545,1801,2057,2313,2569,1546,1802,2058,2314,2570,1547,1803,2059,2315,2571,1548,1804,2060,2316,2572,1549,1805,2061,2317,2573,1550,1806,2062,2318,2574}, [30] = {6664,6920,7432,7688,7944,6409,6665,6921,7177,7433,7689,7945,8201,8457,6154,6410,6666,6922,7178,7434,7690,7946,8202,8458,8714,6155,6411,6667,6923,7179,7435,7691,7947,8203,8459,8715,6156,6412,6668,6924,7180,7436,7692,7948,8204,8460,8716,6157,6413,6669,6925,7181,7437,7693,7949,8205,8461,8717,6158,6414,6670,6926,7182}, [40] = {4372,4117,4373,4629,4118,4374,4630,3863,4119,4375,4631,4887}, } local mapConfig = ConfigManager.GetConfigData(ConfigName.ChallengeMapConfig, 11) local funcCanPass = function(data) return data.val < 1 end local selfAgentView = {agent = nil, callList = Stack.New()} local otherAgentViews = {} local curTargetPos local targetPos local isWalking = true local mapCtrl = "MapCtrl" --local mapPointEventPool = {} local flagEventPool = {} local function clear(agentView) local call = agentView.callList if agentView.tweener then agentView.tweener:Kill() end call:Clear() end local function move(pathList, agentView, isSelf, finalU, finalV) local call = agentView.callList local agent = agentView.agent --Log("清除上次数据"..tostring(isWalking)) clear(agentView) --Log("开始行走"..tostring(isWalking)) --把最终回调最先入栈 call:Push(function () if isSelf then -- 避免连续点击时,多个动画异步运行,导致卡死的问题 isWalking = true end agent:PlayerIdle() end) call:Push(function () local len = #pathList if len < 1 then return end if agentView.tweener then agentView.tweener:Kill() end local Bezier = require("Base.Bezier") local plist = {} local pv3 = TileMapView.GetLiveTilePos(finalU, finalV) local startV2 = Vector2.New(agent.leader.transform.localPosition.x, agent.leader.transform.localPosition.y) local endV2 = Vector2.New(pv3.x, pv3.y) if len > 1 then for i=#pathList-1, 2, -1 do local data = pathList[i] pv3 = TileMapView.GetLiveTilePos(data.u, data.v) pv3.z = -data.v table.insert(plist, Vector2.New(pv3.x, pv3.y)) end end --飞行子弹轨迹 agentView.tweener = DoTween.To(DG.Tweening.Core.DOGetter_float( function () return 0 end), DG.Tweening.Core.DOSetter_float(function (progress) if not isSelf then return end --该标记监听拖动,当正在处理栈事件时,镜头默认居中跟随,此时拖动界面可以打断镜头跟随 if this.DragFlag then return end local lp = Bezier.GetUniformProcess(progress, startV2, endV2, plist) local v2 = Bezier.CalPos(lp, startV2, endV2, plist) local dir = Bezier.CalDir(lp, startV2, endV2, plist) agent:SetRoleDirAction(dir.x, dir.y) agent.leader.transform.localPosition = Vector3.New(v2.x, v2.y, agent.leader.transform.localPosition.z) local v3 = agent.leader.transform.localPosition -- 摄像头跟随 v3.z = TileMapView.ViewCameraPos.z TileMapView.SetCameraPos(v3) TileMapView.UpdateBaseData() end), 1, #pathList*0.2):SetEase(Ease.Linear):OnComplete(function () if call:Count() < 1 then if isSelf then -- 避免连续点击时,多个动画异步运行,导致卡死的问题 isWalking = true end return end agent:RefreshPos(math.round(finalU), math.round(finalV)) if isSelf then -- TileMapView.ClearPathTile(data.u, data.v) isWalking = true end call:Pop()() end) -- local plist = {} --TODO:dotween dopath方案 -- table.insert(plist, agent.leader.transform.localPosition) -- for i=#pathList-1, 2, -1 do -- local data = pathList[i] -- table.insert(plist, TileMapView.GetLiveTilePos(data.u, data.v)) -- end -- table.insert(plist, TileMapView.GetLiveTilePos(finalU, finalV)) -- local lastV3 = agent.leader.transform.localPosition -- agentView.tweener = agent.leader.transform:DOLocalPath(plist, #pathList*0.2, DG.Tweening.PathType.CatmullRom):OnUpdate(function () -- if not isSelf then return end -- --该标记监听拖动,当正在处理栈事件时,镜头默认居中跟随,此时拖动界面可以打断镜头跟随 -- if this.DragFlag then return end -- local dir = agent.leader.transform.localPosition - lastV3 -- agent:SetRoleDirAction(dir.x, dir.y) -- lastV3 = agent.leader.transform.localPosition -- local v3 = agent.leader.transform.localPosition -- 摄像头跟随 -- v3.z = TileMapView.ViewCameraPos.z -- TileMapView.SetCameraPos(v3) -- TileMapView.UpdateBaseData() -- end):SetEase(Ease.Linear):OnComplete(function () -- if call:Count() < 1 then -- if isSelf then -- -- 避免连续点击时,多个动画异步运行,导致卡死的问题 -- isWalking = true -- end -- return -- end -- agent:RefreshPos(math.round(finalU), math.round(finalV)) -- if isSelf then -- -- TileMapView.ClearPathTile(data.u, data.v) -- isWalking = true -- end -- call:Pop()() -- end) if isSelf then isWalking = false end end) -- for i=1, #pathList do -- local data = pathList[i] -- local v3 -- if i == 1 then -- v3 = TileMapView.GetLiveTilePos(finalU, finalV) -- else -- v3 = TileMapView.GetLiveTilePos(data.u, data.v) -- end -- v3.z = -data.v -- call:Push(function () -- agent:SetRoleDirAction(data.u, data.v) -- -- 避免连续点击创建多个动画 -- if agentView.tweener then -- agentView.tweener:Kill() -- end -- --Log(i.."<>"..tostring(v3)) -- local time = 0.2 -- -- 最后一步需要重新计算时间 -- if i == 1 then -- local distance = math.distanceXY(agent.leader.transform.localPosition, v3) -- time = time*distance/0.64 -- end -- agentView.tweener = agent.leader.transform:DOLocalMove(v3, time, false):OnUpdate(function() -- if not isSelf then return end -- --该标记监听拖动,当正在处理栈事件时,镜头默认居中跟随,此时拖动界面可以打断镜头跟随 -- if this.DragFlag then return end -- -- 摄像头跟随 -- local v3 = agent.leader.transform.localPosition -- v3.z = TileMapView.ViewCameraPos.z -- TileMapView.SetCameraPos(v3) -- TileMapView.UpdateBaseData() -- end):OnComplete(function () -- if call:Count() < 1 then -- if isSelf then -- -- 避免连续点击时,多个动画异步运行,导致卡死的问题 -- isWalking = true -- end -- return -- end -- agent:RefreshPos(data.u, data.v) -- if isSelf then -- TileMapView.ClearPathTile(data.u, data.v) -- isWalking = true -- end -- call:Pop()() -- end):SetEase(Ease.Linear) -- if isSelf then -- isWalking = false -- end -- end) -- end if isSelf then call:Push(function () local data = selfAgentView.agent.posData local v3 = TileMapView.GetLiveTilePos(data.u, data.v) v3.z = TileMapView.ViewCameraPos.z if TileMapView.ViewCameraPos ~= v3 then TileMapView.CameraTween(data.u, data.v, 0.5, function () TileMapView.ClearPathTile(data.u, data.v) if call:Count() > 0 then call:Pop()() end end) this.DragFlag = false else TileMapView.ClearPathTile(data.u, data.v) if call:Count() > 0 then call:Pop()() end end end) end if call:Count() > 0 then call:Pop()() end end local function update() -- 点击同一个点时不再请求行走,优化快速点击鬼畜效果 -- if targetPos and curTargetPos and targetPos.u == curTargetPos.u and targetPos.v == curTargetPos.v then -- targetPos = nil -- return -- end -- 避免快速点击进入公会地图,人物还没创建完成,就触发点击事件的问题 if not selfAgentView.agent then return end -- if targetPos and isWalking then isWalking = false -- Log("______update 初始化______"..tostring(isWalking)) local posData = selfAgentView.agent.posData local pathList = TileMapView.ShowPath(posData.u, posData.v, targetPos.u, targetPos.v, funcCanPass) TileMapView.ClearPath() if pathList then table.reverse(pathList,1, #pathList) -- 重新构建数据,避免引用类型数据改变时导致数据异常的问题 local list = {} for _, path in ipairs(pathList) do table.insert(list, {u = path.u, v = path.v}) end -- 判断路径的最终点是否是目标点,不是不需要覆盖uv数据 local len = #list if list[len].u == targetPos.u and list[len].v == targetPos.v then list[#list].u = targetPos._u list[#list].v = targetPos._v end --Log("请求行走") MyGuildManager.RequestWalk(list, function () --table.reverse(pathList, 1, #pathList) --table.remove(pathList, #pathList) --move(pathList, selfAgentView, true) -- 避免连续点击时,服务器会出现不发送indication,导致卡死的问题 -- isWalking = true end) -- 保存数据 curTargetPos = targetPos -- 同一格子内的不同位置 elseif not pathList -- 没有寻路路径 and (posData._u ~= targetPos._u or posData._v ~= targetPos._v) -- 当前位置和目标位置不是统一位置 and posData.u == targetPos.u and posData.v == targetPos.v then -- 在同一个单元格内 pathList = { {u = posData.u, v = posData.v}, {u = targetPos._u, v = targetPos._v}, } MyGuildManager.RequestWalk(pathList, function () -- isWalking = true end) -- 保存数据 curTargetPos = targetPos else isWalking = true --Log("______update 无路径数据______"..tostring(isWalking)) end targetPos = nil end end function this.InitComponent(gameObject) this.DragCtrl = Util.GetGameObject(gameObject, "Ctrl") -- local test = dataParse("17#20|16#21|17#21|18#21|16#22|17#22|18#22|15#23|16#23|17#23|18#23|19#23") -- Log(test) end function this.AddListener() UpdateBeat:Add(update, this) Game.GlobalEvent:AddEvent(GameEvent.Guild.WalkUpdate, this.OnMove) Game.GlobalEvent:AddEvent(GameEvent.Guild.KickOut, this.RemoveMem) Game.GlobalEvent:AddEvent(GameEvent.Guild.MemberDataUpdate, this.OnPosUpdate) end function this.RemoveListener() UpdateBeat:Remove(update, this) Game.GlobalEvent:RemoveEvent(GameEvent.Guild.WalkUpdate, this.OnMove) Game.GlobalEvent:RemoveEvent(GameEvent.Guild.KickOut, this.RemoveMem) Game.GlobalEvent:RemoveEvent(GameEvent.Guild.MemberDataUpdate, this.OnPosUpdate) end function this.Init() UIManager.camera.clearFlags = CameraClearFlags.Depth this.Ctrl = poolManager:LoadAsset(mapCtrl, PoolManager.AssetType.GameObject) this.Ctrl.name = mapCtrl this.Ctrl.transform:SetParent(UIManager.uiRoot.transform.parent) this.Ctrl.transform.position = Vector3.New(0, 0, -100) TileMapView.OnInit = this.OnInit TileMapView.fogSize = 2 TileMapView.AwakeInit(this.Ctrl, 11, nil, Vector2.New(64, 64)) TileMapView.isShowFog = false TileMapController.IsShieldDrag = function() --当栈中有逻辑,则拖动可以打断镜头跟随 this.DragFlag = selfAgentView.callList:Count() > 1 return false end TileMapController.OnClickTile = this.OnClickTile TileMapController.Init(this.Ctrl, this.DragCtrl) TileMapView.Init() -- 加载旗子 this._BuildFlag = {} this._FlagRedpot = {} this._FlagLive = {} for buildType, config in pairs(_GuildBuildConfig) do local go = poolManager:LoadAsset("GuildBuildFlag", PoolManager.AssetType.GameObject) go.transform:SetParent(Util.GetTransform(this.Ctrl, "uiObj#")) go.name = "GuildBuildFlag" go:GetComponent("Image").sprite = Util.LoadSprite(config.bgImg) go:GetComponent("Image").color = config.color or Color.New(1, 1, 1, 1) go:GetComponent("Image"):SetNativeSize() go:SetActive(true) go:GetComponent("RectTransform").anchoredPosition3D = config.pos go.transform.localScale = Vector3.one this._BuildFlag[buildType] = go local img = Util.GetGameObject(go, "Image") img:SetActive(config.nameImg ~= nil) if config.nameImg then img:GetComponent("Image").sprite = Util.LoadSprite(config.nameImg) -- img:GetComponent("Image"):SetNativeSize() img:GetComponent("RectTransform").anchoredPosition3D = config.namePos or Vector3.New(0,0,0) end local liveRoot = Util.GetGameObject(go, "liveRoot") if not this._FlagLive[buildType] then if config.liveName then this._FlagLive[buildType] = poolManager:LoadLive(config.liveName, liveRoot.transform, config.liveScale, config.livePos) local SkeletonGraphic = this._FlagLive[buildType]:GetComponent("SkeletonGraphic") local idle = function() SkeletonGraphic.AnimationState:SetAnimation(0, "idle", true) end SkeletonGraphic.AnimationState:SetAnimation(0, "idle", true) SkeletonGraphic.AnimationState.Complete = SkeletonGraphic.AnimationState.Complete + idle poolManager:SetLiveClearCall(config.liveName, this._FlagLive[buildType], function() SkeletonGraphic.AnimationState.Complete = SkeletonGraphic.AnimationState.Complete - idle end) end else this._FlagLive[buildType].transform:SetParent(liveRoot.transform) this._FlagLive[buildType].transform.anchoredPosition3D = config.livePos or Vector3.New(0,0,0) this._FlagLive[buildType].transform.localScale = config.liveScale or Vector3.one end local redpot = Util.GetGameObject(go, "redpot") redpot:SetActive(false) if config.rpType then BindRedPointObject(config.rpType, redpot) this._FlagRedpot[config.rpType] = redpot end if config.rpPos then redpot.transform.localPosition = config.rpPos end end for k,v in pairs(dataConfig) do for i=1, #v do --设置地图数据 TileMapView.GetTileData(Map_Pos2UV(v[i])).val = k end end --mapPointEventPool = {} flagEventPool = {} end local typeState={} --旗子类型 状态容器(用于当有多个旗子需要设置状态的存储容器) --设置旗子的显隐 type公会地图建筑类型 b bool (每次只能设置一个旗子) function this.SetBuildFlagShow(type,b) for buildType, config in pairs(_GuildBuildConfig) do if type==buildType then table.insert(typeState,{type=type,b=b}) this._BuildFlag[buildType].gameObject:SetActive(b) end end end -- 初始化玩家行走数据 function this.InitWalkData() local datas = MyGuildManager.GetMemWalkData() if datas then for k, v in pairs(datas) do --Log("v.path:"..v.path) --Log("v.curPos:"..v.curPos) --Log("v.name:"..v.name) if k == PlayerManager.uid then isWalking = true clear(selfAgentView) Log("初始化角色位置 = "..v.curPos) local gPos = MyGuildManager.GetMyPositionInGuild() -- 获取职位 selfAgentView.agent = GuildMemberView.New(true, v.curPos, v.name, gPos, v.gender, this.Ctrl) TileMapController.LocateToUV(GuildMap_Pos2UV(v.curPos)) if #v.path then local pathList = {} local finalU, finalV for i=#v.path, 1,-1 do local u1, v1, _u, _v = GuildMap_Pos2UV(v.path[i]) table.insert(pathList, TileMapView.GetMapData():GetMapData(u1, v1)) -- 最后一个点为最终位置 if i == #v.path then finalU, finalV = _u, _v end end move(pathList, selfAgentView, true, finalU, finalV) end else local gPos = MyGuildManager.GetMemInfo(v.uid).position otherAgentViews[k] = { agent = GuildMemberView.New(false, v.curPos, v.name, gPos, v.gender, this.Ctrl), callList = Stack.New(), } clear(otherAgentViews[k]) if #v.path then local pathList = {} local finalU, finalV for i=#v.path, 1,-1 do local u, v, _u, _v = GuildMap_Pos2UV(v.path[i]) table.insert(pathList, TileMapView.GetMapData():GetMapData(u, v)) -- 最后一个点为最终位置 if i == #v.path then finalU, finalV = _u, _v end end move(pathList, otherAgentViews[k], false, finalU, finalV) end end end end end -- 增加一个标记点 function this.AddPointFunc(type, clickTipFunc) --mapPointEventPool[type * 10] = clickTipFunc flagEventPool[type] = clickTipFunc end -- 设置公会图腾 function this.SetGuildLogo(logoId) local logoImg = this._BuildFlag[GUILD_MAP_BUILD_TYPE.LOGO_IMG] if logoImg then logoImg:GetComponent("Image").sprite = Util.LoadSprite(GuildManager.GetLogoResName(logoId)) end end function this.OnInit() end function this.SelfMove() end function this.OnClickTile(u, v, fuv) local _u = fuv.x local _v = -fuv.y if TileMapView.IsOutArea(u, v) then return end if this.CheckFlagClick(fuv) or not isWalking then return end -- local data = TileMapView.GetTileData(u, v) --if mapPointEventPool[data.val] then -- mapPointEventPool[data.val]() -- return --end targetPos = {u = u, v = v, _u = _u, _v = _v} local selfAgent = selfAgentView.agent if not selfAgent then return end -- 避免快速点击进入公会地图,人物还没创建完成,就触发点击事件的问题 local posData = selfAgent.posData -- 点击角色 if u == posData.u and v == posData.v then selfAgent:OnClick() return end end -- 检测是否点到旗子上 function this.CheckFlagClick(fuv) local mousePos = TileMapView.GetLiveTilePos(fuv.x, -fuv.y) * 100 for type, node in pairs(this._BuildFlag) do for i, v in pairs(typeState) do --旗子状态检查 当点击该旗子为未激活状态时 取消点击事件 if v.type==type and v.b==false then return false end end local nPos = node.transform.anchoredPosition3D local nRect = node.transform.rect local nPivot = node.transform.pivot local left = nPos.x + nRect.width * (0 - nPivot.x) local right = nPos.x + nRect.width * (1 - nPivot.x) local bottom = nPos.y + nRect.height * (0 - nPivot.y) local top = nPos.y + nRect.height * (1 - nPivot.y) if mousePos.x >= left and mousePos.x <= right and mousePos.y >= bottom and mousePos.y <= top then if flagEventPool[type] then flagEventPool[type]() return true end end end return false end function this.OnMove(msg) local pathList = {} local finalU, finalV for i=#msg.path, 1,-1 do local u, v, _u, _v = GuildMap_Pos2UV(msg.path[i]) table.insert(pathList, TileMapView.GetMapData():GetMapData(u, v)) -- 最后一个点为最终位置 if i == #msg.path then finalU, finalV = _u, _v end end local curU, curV = GuildMap_Pos2UV(msg.curPos) if msg.uid == PlayerManager.uid then selfAgentView.agent:RefreshPos(curU, curV) move(pathList, selfAgentView, true, finalU, finalV) else if not otherAgentViews[msg.uid] then otherAgentViews[msg.uid] = { agent = GuildMemberView.New(false, msg.curPos, msg.name, GUILD_GRANT.MEMBER, msg.gender, this.Ctrl), callList = Stack.New(), } clear(otherAgentViews[msg.uid]) end otherAgentViews[msg.uid].agent:RefreshPos(curU, curV) move(pathList, otherAgentViews[msg.uid], false, finalU, finalV) end end -- 删除角色 function this.RemoveMem(uid) if otherAgentViews[uid] then clear(otherAgentViews[uid]) otherAgentViews[uid].agent:Dispose() otherAgentViews[uid] = nil end end -- 角色改变刷新 function this.OnPosUpdate() local myPos = MyGuildManager.GetMyPositionInGuild() if myPos then selfAgentView.agent:SetGuildPos(myPos) end for uid, agentView in pairs(otherAgentViews) do local memData = MyGuildManager.GetMemInfo(uid) if memData then agentView.agent:SetGuildPos(memData.position) end end end function this.Dispose() UIManager.camera.clearFlags = CameraClearFlags.Skybox TileMapView.Exit() TileMapController.Exit() poolManager:UnLoadAsset(mapCtrl, this.Ctrl, PoolManager.AssetType.GameObject) this.Ctrl = nil targetPos = nil if selfAgentView.agent then clear(selfAgentView) selfAgentView.agent:Dispose() end for k, v in pairs(otherAgentViews) do clear(otherAgentViews[k]) otherAgentViews[k].agent:Dispose() otherAgentViews[k] = nil end -- 解除红点 if this._FlagRedpot then for rpType, redpot in pairs(this._FlagRedpot) do ClearRedPointObject(rpType, redpot) end this._FlagRedpot = nil end -- 回收旗子前先回收live2d for type, live in pairs(this._FlagLive) do poolManager:UnLoadLive(_GuildBuildConfig[type].liveName, live) end -- 旗子回收 for _, flag in pairs(this._BuildFlag) do Util.AddOnceClick(flag, function()end) poolManager:UnLoadAsset("GuildBuildFlag", flag, PoolManager.AssetType.GameObject) end this._BuildFlag = {} end return this