-- 显示玩家间距离 -- Edit by chengy PlayerDistanceView = {} local M = PlayerDistanceView function PlayerDistanceView.new(show_warning,style,callback) setmetatable(M, {__index = BaseWindow}) local self = setmetatable({}, {__index = M}) self.class = "PlayerDistanceView" self._close_destroy = false self._close_zone = true self.callback = callback self:init("ui://Common/com_Distance", show_warning,style) return self end function M:init(url, show_warning,style) BaseWindow.init(self,url) local _mainView = self._view self._view:GetChild("btn_close2").onClick:Add(function() self:Destroy() end) self:ShowPlayerDistance() if show_warning then self._view:GetController("warn").selectedIndex = 1 end style = style or 0 self._view:GetController("style").selectedIndex = style --[[self._view:GetChild("btn_exit").onClick:Set(function() if self.callback then self.callback(false) end end)--]] self._view:GetChild("btn_continue").onClick:Set(function() if self.callback then self.callback(true) end end) end function M:ShowPlayerDistance() local room = DataManager.CurrenRoom local view = self._view local num = room.room_config.people_num local list = room.player_list view:GetController("people").selectedIndex = num - 2 local com_dist = view:GetChild("dist_p" .. num) local p_list = {} local isHidden = false if room and room.playback ~= true and room.room_config and room.room_config.isHidden then isHidden = room.room_config.isHidden == 1 end for i = 1, #list do local u = list[i].self_user local index = ViewUtil.GetPos(room.self_player.seat, list[i].seat, room.room_config.people_num) local btn_head = com_dist:GetChild("btn_head" .. index) if isHidden == false then ImageLoad.Load(u.head_url, btn_head._iconObject) end p_list[index] = list[i] if not u.location or u.location.default then com_dist:GetChild("p" .. index).grayed = true end end -- 需要计算的距离数量 local dis_num = 0 for i = 1, num - 1 do dis_num = dis_num + i end -- 第一个人需要与(所有人 - 1)人比,第二个人需要与(所有人 - 2)人比,以此类推 for i = 1, dis_num do local text_dist = com_dist:GetChild("text_dest" .. i) local tem = 0 -- 判断第i个距离是哪两个user间的 local player1, player2 for j = 1, num - 1 do local tem2 = tem + num - j if i <= tem2 then player1 = p_list[j] player2 = p_list[j + i - tem] local line = com_dist:GetChild("line" .. i) self:ShowDistanceDetail(player1, player2, text_dist, line, com_dist) break end tem = tem2 end end end function M:ShowDistanceDetail(player1, player2, text_dist, line, com_dist) local str = "" local warn_color = self._view:GetChild("tex_warning").color local change_color = false if not player1 or not player2 then str = "未知" change_color = true else local user1 = player1.self_user local user2 = player2.self_user if (user1.location and not user1.location.default) and (user2.location and not user2.location.default) then local dist = user1.location:CalcDistance(user2.location) if dist > 1 then str = math.floor(dist + 0.5) .. "km" else str = math.floor(dist*1000+0.5) .. "m" end if dist < 0.2 then change_color = true end else str = "未知" change_color = true end end text_dist.text = str if change_color then text_dist.color = warn_color line.color = warn_color end end return M