local UILiveRoomView = require("UILiveRoom/UILiveRoomView_Generate") local IconItemCtr = require("Common/IconItemCtr") local LIVEROOM_STAGE_NULL = 0 local LIVEROOM_STAGE_IDLE = 1 local LIVEROOM_STAGE_READY = 2 local LIVEROOM_STAGE_SHOW = 3 local LIVEROOM_STAGE_RESULT = 4 local LIVEROOM_TYPE_CARD = 1 local LIVEROOM_TYPE_SELL = 2 local LIVEROOM_TYPE_ANSWER = 3 local LIVEROOM_TYPE_GAME = 4 local LIVEROOM_TYPE_BID = 5 local LIVEROOM_NUM = 5 local uid2info = {} local liveRoomCfg = ManagerContainer.CfgMgr:GetLiveRoomCfg() local talkCfg = ManagerContainer.CfgMgr:GetLiveRoomTalkCfg() local giftCfg = ManagerContainer.CfgMgr:GetLiveRoomGiftCfg() local sellCfg = ManagerContainer.CfgMgr:GetLiveRoomSellCfg() local bidCfg = ManagerContainer.CfgMgr:GetLiveRoomBidCfg() local questionCfg = ManagerContainer.CfgMgr:GetLiveRoomQuestionCfg() local chat_Records = { [1] = {}, [2] = {}, [3] = {}, [4] = {}, [5] = {} } local gift_Records = { [1] = {}, [2] = {}, [3] = {}, [4] = {}, [5] = {} } --region 生命周期 function UILiveRoomView:OnAwake(data) self.controller = require("UILiveRoom/UILiveRoomCtr"):new() self.controller:Init(self) self.controller:SetData(data) end function UILiveRoomView:FillContent(data, uiBase) self.uiBase = uiBase local gameObject = self.uiBase:GetRoot() if gameObject ~= nil then self.gameObject = gameObject self.transform = gameObject.transform end self:InitGenerate(self.transform, data) self:Init() end function UILiveRoomView:Init() self:LoadRes() self.upSafeOffset = UnityEngine.Screen.height - UnityEngine.Screen.safeArea.yMax end function UILiveRoomView:AddEventListener() ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name) --Join ack ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name, UIEventNames.SC_LIVE_ROOM_JOIN_ACK, function(data) LogWarning("tzy_join_ack") self:RefreshRoom() self:ResetReceiveGift_OnJoin(data.room_id) self:ResetChat_OnJoin(data.room_id) if data.room_type == LIVEROOM_TYPE_SELL or data.room_type == LIVEROOM_TYPE_BID then local cfgid = tonumber(string.split(data.room_state, ":")[2]) or nil if cfgid then self:SetReadyItem(data.room_id, cfgid) end end end) ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name, UIEventNames.SC_LIVE_ROOM_LEAVE_ACK, function() end) ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name, UIEventNames.SC_LIVE_ROOM_GET_READY_ACK, function(error) self:RefreshRoom() end) --准备 数据 ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name, UIEventNames.SC_LIVE_ROOM_GET_READY_NTF, function(data) self.answer_player_list = {} self.game_player_list = {} for k, v in pairs(data.ready_player_info_list) do local info = { uid = v.uid, head_id = v.head_id, name = v.nickname, level = v.level } uid2info[v.uid] = info self.answer_player_list[v.uid] = info self.game_player_list[v.uid] = info end LogWarning("tzy_ready_ntf: " .. Inspect(data)) self:RefreshRoom() local itemlua = self:GetCurrPageLua() self:ReadyPad_Head(itemlua, data.ready_player_info_list) end) --聊天 回调 ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name, UIEventNames.SC_LIVE_ROOM_CHAT_NTF, function(data) LogWarning("tzy_chat_ntf: " .. Inspect(data)) local room_id = data.room_id chat_Records[room_id][#chat_Records[room_id] + 1] = data.chat_data self:Refresh_ChatRecords(room_id) end) --阶段变更 ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name, UIEventNames.SC_LIVE_ROOM_STAGE_NTF, function(data) LogWarning("tzy_stage_ntf: " .. Inspect(data)) self:OnStageChanged(data) self:RefreshRoom() end) ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name, UIEventNames.SC_LIVE_ROOM_CMD_PLAY_NTF, function() self:RefreshRoom() end) --主播 动作、说话 ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name, UIEventNames.SC_LIVE_ROOM_CMD_TALK_NTF, function(data) LogWarning("tzy_talk_ntf: " .. Inspect(data)) local info = self:String2Table(data.talk_params) local itemlua = self:GetCurrPageLua() self:Set_Streamer_Animation(data.room_id, info.act) self:Set_Streamer_Talk(data.talk_id, info.talk) end) --进行中 数据 ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name, UIEventNames.SC_LIVE_ROOM_SHOW_DATA_NTF, function(data) LogWarning("tzy_show_: " .. Inspect(data)) local itemlua = self:GetCurrPageLua() if data.room_id == LIVEROOM_TYPE_CARD then elseif data.room_id == LIVEROOM_TYPE_SELL then --self:Show_Sell_Cfg(itemlua, data.show_data_list[1].key) self:Show_Sell_Progress(itemlua, data.show_data_list[1]) elseif data.room_id == LIVEROOM_TYPE_ANSWER then self:Show_Answer_Result(itemlua, data) elseif data.room_id == LIVEROOM_TYPE_GAME then if self.game_player_list[data.uid] == nil then self:Show_Game_View(itemlua, data.show_data_list) end elseif data.room_id == LIVEROOM_TYPE_BID then if data.show_data_list and data.show_data_list[1] then self:Show_Bid_Rank(itemlua, data) end end end) --结算 数据 ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name, UIEventNames.SC_LIVE_ROOM_RESULT_NTF, function(data) LogWarning("tzy_result_: " .. Inspect(data)) local itemlua = self:GetCurrPageLua() if data.room_id == LIVEROOM_TYPE_CARD then self:Result_Card(itemlua, data) elseif data.room_id == LIVEROOM_TYPE_SELL then self:Result_Sell(itemlua, data) elseif data.room_id == LIVEROOM_TYPE_ANSWER then self:Result_Answer(itemlua, data) elseif data.room_id == LIVEROOM_TYPE_GAME then self:Result_Game(itemlua, data) elseif data.room_id == LIVEROOM_TYPE_BID then self:Result_Bid(itemlua, data) end end) --收到礼物 ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name, UIEventNames.SC_LIVE_ROOM_SEND_GIFT_NTF, function(data) local room_id = data.room_id LogWarning("tzy_收到礼物: " .. Inspect(data)) gift_Records[room_id][#gift_Records[room_id] + 1] = data.send_gift_info self:Refresh_GiftRecords(room_id) end) --submit ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name, UIEventNames.SC_LIVE_ROOM_SHOW_SUBMIT_ACK, function(data) LogWarning("tzy_submit_ack: " .. Inspect(data)) if data.submit_result and data.submit_result[1] then local info = data.submit_result[1] LogWarning("tzy_submit_ack: " .. Inspect(info)) if info.value ~= 0 and info.value2 ~= 0 and info.str_val ~= "" then local itemlua = self:GetCurrPageLua() self:Show_Bid_Submit(itemlua, info.value2, info.value, info.str_val) end end end) ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name, UIEventNames.SC_LIVE_ROOM_ADD_HEART_ACK, function(data) local heart = data.heart local itemlua = self:GetCurrPageLua() self:RefreshHeart(itemlua) end) end function UILiveRoomView:RemoveEventListener() ManagerContainer.LuaEventMgr:Unregister(self.uiData.name) end function UILiveRoomView:AddUIEventListener() -- local roomType = 1 -- self.uiBase:AddButtonUniqueEventListener(self.testBtn.button, self, function() -- self:SwitchRoom(roomType) -- roomType = roomType + 1 -- if roomType > LIVEROOM_TYPE_GAME then -- roomType = 1 -- end -- end) end function UILiveRoomView:OnHide() end function UILiveRoomView:OnShow(data) self.controller:SetData(data) end function UILiveRoomView:OnClose() end function UILiveRoomView:OnDispose() self.controller:OnDispose() end --endregion 生命周期 --初始化时调用加载资源 function UILiveRoomView:LoadRes() ManagerContainer.LuaEventMgr:RegisterEvent(UIEventNames.LIVEROOM_RES_STREAMER_LOAD_OK, self, self.OnStreamerGoLoaded) self.res = {} local partResPaths = { "Streamer_1", "Streamer_2", "Streamer_3", "Streamer_4", "Streamer_5", "Game_FlappyBird" } local seqId = ManagerContainer.ResMgr:LoadAssetGameObjects(Constants.StreamerPath, ELoadType.OTHER, function(objs) for i = 1, #partResPaths do local k = partResPaths[i] local obj = objs[i - 1] self.res[k] = obj end ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.LIVEROOM_RES_STREAMER_LOAD_OK, objs) end, unpack(partResPaths)) end --加载完成时 function UILiveRoomView:OnStreamerGoLoaded(objs) ManagerContainer.LuaEventMgr:UnregisterEvent(UIEventNames.LIVEROOM_RES_STREAMER_LOAD_OK, self, self.OnStreamerGoLoaded) self:InitRoom() self:SetRoomCount(LIVEROOM_NUM) ManagerContainer.LuaTimerMgr:AddTimer(500, 1, nil, function() self.sv_room.loopListView:MovePanelToItemIndex(0, 0) end, nil) end --region 房间 listview相关 --初始化房间loopview function UILiveRoomView:InitRoom() if self.sv_room.loopListView.ListViewInited == false then self.sv_room.loopListView:InitListView(-1, function(loopview, index) return self:GetLiveRoomItem(loopview, index) end) end end --设置房间总数并刷新内容 function UILiveRoomView:SetRoomCount(count) self.roomCount = count self.sv_room.loopListView:RefreshAllShownItem() end --生成房间 function UILiveRoomView:GetLiveRoomItem(loopview, index) LogError("GetLiveRoomItem: " .. tostring(index)) local index2 = index % self.roomCount local item = loopview:NewListViewItem("LiveRoomItem") local itemlua = CommonUtil.BindGridViewItem2Lua(self, "LiveRoomItem", item.gameObject) local go = item.gameObject go.name = "LiveRoomItem_" .. index2 --根据loopview大小重设房间大小 local rect = go:GetComponent(Enum.TypeInfo.RectTransform) local loopviewRect = loopview:GetComponent(Enum.TypeInfo.RectTransform) rect.sizeDelta = Vector2(loopviewRect.rect.width, loopviewRect.rect.height) local roomType = index2 + 1 self:InitReceiveGift(itemlua, roomType) self:InitChat(itemlua, roomType) self:ConfigRoom(itemlua, roomType) self:SwitchRoom(itemlua) self:SetReadyPad(itemlua, roomType) self:SetShowPad(itemlua, roomType) self:SetResultPad(itemlua, roomType) return item end --endregion 房间 listview相关 --region 房间 配置相关 --获取当前页面 function UILiveRoomView:GetCurrPageLua() local pageId = self.sv_room.loopListView.CurSnapNearestItemIndex local item = self.sv_room.loopListView:GetShownItemByItemIndex(pageId) local itemlua = CommonUtil.GetBindGridViewItem2Lua(self, "LiveRoomItem", item.gameObject) return itemlua end --延时向服务器发送请求:退出旧房间,加入新房间 function UILiveRoomView:SwitchRoom(liveRoomItemLua) if self.switchRoomWaitTimer then ManagerContainer.LuaTimerMgr:RemoveTimer(self.switchRoomWaitTimer) self.switchRoomWaitTimer = nil end self.switchRoomWaitTimer = ManagerContainer.LuaTimerMgr:AddLuaTimer(300, 1, function() local pageId = self.sv_room.loopListView.CurSnapNearestItemIndex local roomType = pageId % self.roomCount + 1 LogError("SwitchRoom: roomType=" .. roomType) -- 退出当前房间 local data = ManagerContainer.DataMgr.LiveRoomData:GetData() local oldRoomId = data["room_id"] if oldRoomId then ManagerContainer.DataMgr.LiveRoomData:LeaveReq(oldRoomId) end -- 加入新房间 ManagerContainer.DataMgr.LiveRoomData:JoinReq(roomType) end) end --配置当前房间 function UILiveRoomView:ConfigRoom(itemLua, roomType) local itemCount = LIVEROOM_NUM --销毁所有房间的某些资源() self.gameGos = self.gameGos or {} for k, v in pairs(self.gameGos) do CommonUtil.DestroyGO(v) end self.gameGos = {} self.streamerGos = self.streamerGos or {} for k, v in pairs(self.streamerGos) do CommonUtil.DestroyGO(v) end self.streamerGos = {} --从json读数据:Assets\Lua\Config\LiveRoomCfg.lua local liveRoomCfg = ManagerContainer.CfgMgr:GetLiveRoomCfg() local roomCfg = liveRoomCfg[roomType] itemLua.roomTitleBar.roomName.text.text = roomCfg["RoomDesp"] itemLua.roomTitleBar.streamerHead.nickname.text.text = roomCfg["RoomDesp"] --[[ CommonUtil.LoadIcon(self, "PlayerHeads/" .. roomCfg["StreamerHead"], function(sprite) itemLua.roomTitleBar.streamerHead.headImg.image.sprite = sprite end) CommonUtil.LoadIcon(self, "LiveRoomBg/LiveRoomBg_" .. roomType, function(sprite) itemLua.roomBg.bg.image.sprite = sprite end) ]] self:LoadIcon_SetSprite(itemLua.roomTitleBar.streamerHead.headImg, "PlayerHeads/" .. roomCfg["StreamerHead"]) self:LoadIcon_SetSprite(itemLua.roomBg.bg, "LiveRoomBg/LiveRoomBg_" .. roomType) --[[ --从文件设置rect local readyPadRect = itemLua.readyPad.rectTransform readyPadRect.sizeDelta = Vector2(readyPadRect.sizeDelta.x, roomCfg["ReadyPadHeight"]) readyPadRect.anchoredPosition = Vector2(0, roomCfg["ReadyPadOffset"]) local showPadRect = itemLua.showPad.rectTransform showPadRect.sizeDelta = Vector2(showPadRect.sizeDelta.x, roomCfg["ShowPadHeight"]) showPadRect.anchoredPosition = Vector2(0, roomCfg["ShowPadOffset"]) local resultPadRect = itemLua.resultPad.rectTransform resultPadRect.sizeDelta = Vector2(resultPadRect.sizeDelta.x, roomCfg["ResultPadHeight"]) resultPadRect.anchoredPosition = Vector2(0, roomCfg["ResultPadOffset"]) ]] itemLua.idlePad:SetActive(false) itemLua.readyPad:SetActive(false) itemLua.showPad:SetActive(false) itemLua.resultPad:SetActive(false) --事件挂载 self.uiBase:AddButtonUniqueEventListener(itemLua.roomTitleBar.closeBtn.button, self, self.OnCloseBtn) end --按钮,关闭uiliveroom function UILiveRoomView:OnCloseBtn() if self.currStageTimer then ManagerContainer.LuaTimerMgr:RemoveTimer(self.currStageTimer) self.currStageTimer = nil end local data = ManagerContainer.DataMgr.LiveRoomData:GetData() local oldRoomId = data["room_id"] if oldRoomId then ManagerContainer.DataMgr.LiveRoomData:LeaveReq(oldRoomId) end ManagerContainer.DataMgr.LiveRoomData:Clear() if self.sv_room.loopListView.ListViewInited then self.sv_room.loopListView:Dispose() end self:UIClose() end function UILiveRoomView:OnStageChanged(data) --LogWarning("tzy_OnStageChanged") local room_id = data.room_id local stage = data.stage local itemlua = self:GetCurrPageLua() --LogWarning("tzy_OnStage" .. itemlua.gameObject.name) if stage == LIVEROOM_STAGE_IDLE then elseif stage == LIVEROOM_STAGE_READY then self:ReadyPad_Head(itemlua, nil) itemlua.readyPad.readyitem:SetActive(false) if room_id == LIVEROOM_TYPE_SELL or room_id == LIVEROOM_TYPE_BID then local cfgid = tonumber(string.split(data.stage_params, ":")[2]) or nil if cfgid then self:SetReadyItem(data.room_id, cfgid) if room_id == LIVEROOM_TYPE_SELL then self:Show_Sell_Cfg(itemlua, cfgid) elseif room_id == LIVEROOM_TYPE_BID then self:Show_Bid_Cfg(itemlua, cfgid) end end end elseif stage == LIVEROOM_STAGE_SHOW then --Show if room_id == LIVEROOM_TYPE_CARD then elseif room_id == LIVEROOM_TYPE_SELL then local cfgid = tonumber(string.split(data.stage_params, ":")[2]) or nil if cfgid then --self:Show_Sell_Cfg(itemlua, cfgid) end elseif room_id == LIVEROOM_TYPE_ANSWER then if self.answer_player_list[data.uid] ~= nil then if data.stage_params then local str = string.split(data.stage_params, ";") local cfgid = tonumber(string.split(str[1], ":")[2]) local opt_sort1 = string.split(string.split(str[2], ":")[2], "-") local opt_sort2 = {} for i = 1, #opt_sort1 do opt_sort2[i] = tonumber(opt_sort1[i]) end LogWarning("tzy_opt_sort: " .. cfgid .. " " .. Inspect(opt_sort2)) self:Show_Answer_Cfg(itemlua, cfgid, opt_sort2) end end elseif room_id == LIVEROOM_TYPE_GAME then --循环发送游戏分数 if not self.showpad_game_timer or self.showpad_game_timer == nil then self.showpad_game_timer = ManagerContainer.LuaTimerMgr:AddLuaTimer(1000, -1, function() --LogWarning("tzy_test_timer") self:Show_SendGameScore(room_id) end) end elseif room_id == LIVEROOM_TYPE_BID then local cfgid = tonumber(string.split(data.stage_params, ":")[2]) or nil if cfgid then --self:Show_Bid_Cfg(itemlua, cfgid) self:Result_Bid_Cfg(itemlua, cfgid) end end elseif stage == LIVEROOM_STAGE_RESULT then --停止发送游戏分数 if self.showpad_game_timer then ManagerContainer.LuaTimerMgr:RemoveTimer(self.showpad_game_timer) self.showpad_game_timer = nil end end end --刷新房间 --[[ 事件: SC_LIVE_ROOM_JOIN_ACK 加入房间请求 SC_LIVE_ROOM_GET_READY_ACK 准备请求 SC_LIVE_ROOM_GET_READY_NTF 准备回调 SC_LIVE_ROOM_STAGE_NTF 阶段回调 SC_LIVE_ROOM_CMD_PLAY_NTF 播放回调 ]] function UILiveRoomView:RefreshRoom() LogError("------------------ RefreshRoom ------------------") local itemLua = self:GetCurrPageLua() itemLua.idlePad:SetActive(false) itemLua.readyPad:SetActive(false) itemLua.showPad:SetActive(false) itemLua.resultPad:SetActive(false) itemLua.bg_talk:SetActive(false) --itemLua.roomBg.bg:SetActive(true) local data = ManagerContainer.DataMgr.LiveRoomData:GetData() local room_id = data["room_id"] local room_type = data["room_type"] local stage = data["stage"] local is_ready = data["is_ready"] local stage_sec = data["stage_sec"] or 0 local ready_player_info_list = data["ready_player_info_list"] or {} self:InitTopBar(itemLua, room_id) self:LoadStreamer(itemLua, room_type) self:ResetStageTimer(stage_sec) if stage == LIVEROOM_STAGE_IDLE then itemLua.idlePad:SetActive(true) elseif stage == LIVEROOM_STAGE_READY then itemLua.readyPad:SetActive(true) itemLua.readyPad.readyBtn:SetActive(not is_ready) elseif stage == LIVEROOM_STAGE_SHOW then itemLua.showPad:SetActive(true) if is_ready then -- 自己参与模式 if room_type == LIVEROOM_TYPE_GAME then -- 加载游戏 self.gameGos = self.gameGos or {} if not self.gameGos[room_type] then local prefab = self.res["Game_FlappyBird"] local game = CommonUtil.Instantiate(prefab, itemLua.showPad.transform) local rectTransform = game:GetComponent(Enum.TypeInfo.RectTransform) rectTransform.localRotation = Quaternion.identity rectTransform.localScale = Vector3(1, 1, 1) rectTransform.anchorMin = Vector2(0, 0) rectTransform.anchorMax = Vector2(1.0, 1.0) rectTransform.pivot = Vector2(0.5, 0.5) rectTransform.anchoredPosition = Vector3(0, 0, 0) rectTransform.sizeDelta = Vector2(0, 0) self.gameGos[room_type] = game end end else -- 观战模式 end elseif stage == LIVEROOM_STAGE_RESULT then itemLua.resultPad:SetActive(true) if room_type == LIVEROOM_TYPE_GAME then -- 删除游戏物体 if self.gameGos and self.gameGos[room_type] then CommonUtil.DestroyGO(self.gameGos[room_type]) self.gameGos[room_type] = nil end end end self:RefreshHeart(itemLua) end function UILiveRoomView:RefreshHeart(itemlua) local liveRoomData = ManagerContainer.DataMgr.LiveRoomData:GetData() itemlua.roomTitleBar.text_sign.text.text = liveRoomData.heart end --加载模型 function UILiveRoomView:LoadStreamer(itemLua, roomType) if not roomType then return end local liveRoomCfg = ManagerContainer.CfgMgr:GetLiveRoomCfg() local roomCfg = liveRoomCfg[roomType] if self.streamerGos[roomType] then --CommonUtil.DestroyGO(itemLua.streamerGo) --itemLua.streamerGo = nil return end local prefabName = "Streamer_" .. roomType local streamerPrefab = self.res[prefabName] local streamerGo = CommonUtil.Instantiate(streamerPrefab, itemLua.liveStreamer.transform) local rectTransform = streamerGo:GetComponent(Enum.TypeInfo.RectTransform) rectTransform.localRotation = Quaternion.identity rectTransform.localScale = Vector3(roomCfg["StreamerScale"], roomCfg["StreamerScale"], roomCfg["StreamerScale"]) --rectTransform.anchorMin = Vector2(0, 0) --rectTransform.anchorMax = Vector2(1.0, 1.0) rectTransform.pivot = Vector2(0.5, 0.5) rectTransform.anchoredPosition = Vector2(roomCfg["StreamerOffset"][1], roomCfg["StreamerOffset"][2]) --rectTransform.sizeDelta = Vector2(0, 0) self.streamerGos = self.streamerGos or {} self.streamerGos[roomType] = streamerGo end --endregion 房间 配置相关 function UILiveRoomView:String2Table(str) local t1 = string.split(str, ";") local data = {} for i = 1, #t1 do local t2 = string.split(t1[i], ":") local num = tonumber(t2[2]) data[t2[1]] = num or t2[2] end --LogWarning("tzy_String2Table: ".. Inspect(data)) return data end --工具 LoadIcon function UILiveRoomView:LoadIcon_SetSprite(go, path) CommonUtil.LoadIcon(self, path, function(sprite) go.image.sprite = sprite end) end --工具 点击IconItem function UILiveRoomView:OnClickIconItem(btn, params) local logicData = params[0] ManagerContainer.LuaUIMgr:OpenTips(logicData) end --region 房间 顶部 function UILiveRoomView:InitTopBar(itemlua, room_id) local liveRoomData = ManagerContainer.DataMgr.LiveRoomData:GetData() local roomname, name, sign, head, audhead1, audhead2, audhead3, audcount, notice roomname = itemlua.roomTitleBar.roomName.text name = itemlua.roomTitleBar.streamerHead.nickname.text sign = itemlua.roomTitleBar.text_sign.text head = itemlua.roomTitleBar.streamerHead.headImg.image itemlua.roomTitleBar.audiencehead1:SetActive(false) itemlua.roomTitleBar.audiencehead2:SetActive(false) itemlua.roomTitleBar.audiencehead3:SetActive(false) audhead1 = itemlua.roomTitleBar.audiencehead1.head_img.image audhead2 = itemlua.roomTitleBar.audiencehead2.head_img.image audhead3 = itemlua.roomTitleBar.audiencehead3.head_img.image audcount = itemlua.roomTitleBar.text_audiencecount.text audcount.text = ""..liveRoomData["room_user_num"] for i=1, #liveRoomData["room_user_heads"] do local headId = liveRoomData["room_user_heads"][i] itemlua.roomTitleBar["audiencehead"..i]:SetActive(true) CommonUtil.LoadIcon(self, "PlayerHeads/player_head_"..headId, function(sprite) itemlua.roomTitleBar["audiencehead"..i].head_img.image.sprite = sprite end) end notice = itemlua.roomTitleBar.text_notice.text.text end --endregion 房间 顶部 --region 房间 主播说话、动作 function UILiveRoomView:Set_Streamer_Animation(room_id, act) if self.streamerGos == nil or self.streamerGos[room_id] == nil then return end local streamer = self.streamerGos[room_id]:GetComponent(Enum.TypeInfo.SkeletonGraphic) local cfg = liveRoomCfg[room_id]["StreamerActs"] local name = cfg[act][1] local time = cfg[act][2] if name == "Stand" then return end LogWarning("tzy_act: " .. name .. " time: " .. time) streamer.AnimationState:SetAnimation(0, name, false) if not self.streamer_act_timer or self.streamer_act_timer == nil then self.streamer_act_timer = ManagerContainer.LuaTimerMgr:AddLuaTimer(time * 1000, 1, function() streamer.AnimationState:SetAnimation(0, "Stand", true) ManagerContainer.LuaTimerMgr:RemoveTimer(self.streamer_act_timer) self.streamer_act_timer = nil end) end end function UILiveRoomView:Set_Streamer_Talk(talk, talk_params) local talk_str = talkCfg[talk].Params2[talk_params] local itemlua = self:GetCurrPageLua() itemlua.bg_talk:SetActive(true) itemlua.bg_talk.text_talk.text.text = talk_str end --endregion 房间 主播说话、动作 --region 房间 聊天 聊天 function UILiveRoomView:ResetChat_OnJoin(room_id) chat_Records[room_id] = ManagerContainer.DataMgr.LiveRoomData:GetData().chat_records LogWarning("tzy_chat_Records1: " .. Inspect(chat_Records)) self:Refresh_ChatRecords(room_id) end function UILiveRoomView:Refresh_ChatRecords(room_id) LogWarning("tzy_chat_Records2: " .. Inspect(chat_Records[room_id])) local itemlua = self:GetCurrPageLua() local count = #chat_Records[room_id] itemlua.sv_chat.loopListView:SetListItemCount(count) itemlua.sv_chat.loopListView:RefreshAllShownItem() itemlua.sv_chat.loopListView:MovePanelToItemIndex(count - 1, 0) end function UILiveRoomView:InitChat(itemlua, room_id) local idx = room_id itemlua.sv_chat.loopListView:Dispose() itemlua.sv_chat.loopListView:InitListView(0, function(loopview, Index) return self:GenChatItem(loopview, Index, idx) end) self.uiBase:AddButtonUniqueEventListener(itemlua.inputBar.btn_send_chat.button, self, function() self:Btn_Send_Chat(itemlua, idx) end) --表情 itemlua.inputBar.sv_emoji.loopGridView:Dispose() itemlua.inputBar.sv_emoji.loopGridView:InitGridView(80, function(loopview, index, row, col) return self:Gen_Emoji(loopview, index, row, col, idx) end, nil) --礼物 itemlua.inputBar.sv_gift.loopGridView:Dispose() itemlua.inputBar.sv_gift.loopGridView:InitGridView(0, function(loopview, index, row, col) return self:Gen_Gift(loopview, index, row, col, idx) end, nil) itemlua.inputBar.sv_gift.loopGridView:SetListItemCount(#giftCfg) --爱心 self:Init_FloatingHeart(itemlua) self.uiBase:AddButtonUniqueEventListener(itemlua.inputBar.btn_send_emoji.button, self, function() self:Btn_Send_Emoji(itemlua) end) self.uiBase:AddButtonUniqueEventListener(itemlua.inputBar.btn_send_gift.button, self, function() self:Btn_Send_Gift(itemlua) end) self.uiBase:AddButtonUniqueEventListener(itemlua.inputBar.btn_send_like.button, self, function() ManagerContainer.DataMgr.LiveRoomData:AddHeart() --点击爱心 self:Gen_FloatingHeart(itemlua) end) itemlua.inputBar.sv_emoji:SetActive(false) itemlua.inputBar.sv_gift:SetActive(false) end function UILiveRoomView:GenChatItem(loopview, index, room_id) if index < 0 then return nil end local item = loopview:NewListViewItem("LiveRoomChatItem") local itemlua = CommonUtil.BindGridViewItem2Lua(self, "LiveRoomChatItem", item.gameObject) local go = item.gameObject go.name = "LiveRoomChatItem_" .. index local id = index + 1 local data = chat_Records[room_id][id] if not data then return nil end local name = tostring(data.player_info.nickname) local vip = tostring(data.player_info.vip_level or 0) if name == "" then name = "穿越者" end local level = tostring(data.player_info.level) local content = data.chat_content itemlua.text_vip.text.text = vip or "0" itemlua.text_name.text.text = name .. ":" --.. ".Lv" .. level .. ":" --设置大小 local c_sizename = StringUtil.GetTMTextWidth(itemlua.text_name.text, name .. ":") itemlua.text_name.rectTransform.sizeDelta = Vector2(c_sizename, 50) itemlua.rect1.rectTransform.sizeDelta = Vector2(112 + 20 + c_sizename, 85) local c_sizeother = 47 + 112 + 20 + c_sizename local c_sizeMax = 1020 - c_sizeother itemlua.text_chat.text.text = content local c_size = StringUtil.GetTMTextWidth(itemlua.text_chat.text, content) local linecount = math.floor(c_size / c_sizeMax) --LogWarning("c_sizeMax:" .. c_sizeMax .. " c_size:" .. c_size .. " linecount:" .. linecount) if linecount == 0 then itemlua.text_chat.rectTransform.sizeDelta = Vector2(c_size, 85) itemlua.rectTransform.sizeDelta = Vector2(c_sizeother + c_size, 85) end if linecount > 0 then itemlua.text_chat.rectTransform.sizeDelta = Vector2(c_sizeMax, 85 * (linecount + 1)) itemlua.rectTransform.sizeDelta = Vector2(1020, 85 * (linecount + 1)) end return item end function UILiveRoomView:GenRandomChatContent(room_id) local idx = room_id --local size=math.random(2,10) local data = {} for i = 1, idx do --data[i] = "测试消息 随机数: " .. tostring(idx) .. " " .. tostring(i) .. " " .. tostring(math.random(1, 100)) ManagerContainer.DataMgr.LiveRoomData:ChatReq(room_id) end chat_Records[idx] = data end function UILiveRoomView:Btn_Send_Chat(itemlua, room_id) local idx = room_id local text = itemlua.inputBar.inputfield_chat.tMP_InputField.text if text ~= "" then ManagerContainer.DataMgr.LiveRoomData:ChatReq(idx, text) end itemlua.inputBar.inputfield_chat.tMP_InputField.text = "" end --endregion 房间 聊天 聊天 --region 房间 聊天 发表情 --start 425 end 504 total 80 function UILiveRoomView:Btn_Send_Emoji(itemlua) itemlua.inputBar.sv_gift:SetActive(false) if itemlua.inputBar.sv_emoji.gameObject.activeSelf then itemlua.inputBar.sv_emoji:SetActive(false) else itemlua.inputBar.sv_emoji:SetActive(true) end end function UILiveRoomView:Gen_Emoji(loopview, index, row, col, room_id) local item = loopview:NewListViewItem("LiveRoomEmojiItem") local itemlua = CommonUtil.BindGridViewItem2Lua(self, "LiveRoomEmojiItem", item.gameObject) local go = item.gameObject local start = 425 local id = start + index go.name = "LiveRoomEmojiItem" .. index itemlua.emoji.text.text = "" self.uiBase:AddButtonUniqueEventListener(itemlua.btn.button, self, function() self:OnEmojiClick(room_id, id) end) return item end function UILiveRoomView:OnEmojiClick(room_id, idx) local itemlua = self:GetCurrPageLua() local str = "" --此处复制到聊天框 itemlua.inputBar.inputfield_chat.tMP_InputField.text = itemlua.inputBar.inputfield_chat.tMP_InputField.text .. str itemlua.inputBar.sv_emoji:SetActive(false) end --endregion 房间 聊天 发表情 --region 房间 聊天 发礼物 function UILiveRoomView:Btn_Send_Gift(itemlua) itemlua.inputBar.sv_emoji:SetActive(false) if itemlua.inputBar.sv_gift.gameObject.activeSelf then itemlua.inputBar.sv_gift:SetActive(false) else itemlua.inputBar.sv_gift:SetActive(true) end end function UILiveRoomView:Gen_Gift(loopview, index, row, col, room_id) local item = loopview:NewListViewItem("LiveRoomGiftItem") local itemlua = CommonUtil.BindGridViewItem2Lua(self, "LiveRoomGiftItem", item.gameObject) local go = item.gameObject local id = index + 1 go.name = "LiveRoomGiftItem" .. id local info = giftCfg[id] --LogWarning("info: " .. Inspect(info)) --设置价格 local cost_str = string.split(info.Price, ":")[2] .. "游戏币" --LogWarning("cost_str: " .. Inspect(cost_str)) itemlua.text_price_off.text.text = cost_str itemlua.text_price_on.text.text = cost_str itemlua.text_name.text.text = info.Name --设置图标 local iconpath = "LiveRoomGift/" .. info.Icon self:LoadIcon_SetSprite(itemlua.img_gift, iconpath) self.uiBase:AddButtonUniqueEventListener(itemlua.btn_send.button, self, function() self:OnGiftClick(room_id, id) itemlua.rect_send:SetActive(false) end) return item end function UILiveRoomView:OnGiftClick(room_id, idx) local itemlua = self:GetCurrPageLua() itemlua.inputBar.sv_gift:SetActive(false) ManagerContainer.DataMgr.LiveRoomData:SendGiftReq(room_id, idx) end --endregion 房间 聊天 发礼物 --region 房间 收礼物 function UILiveRoomView:ResetReceiveGift_OnJoin(room_id) gift_Records[room_id] = ManagerContainer.DataMgr.LiveRoomData:GetData().gift_records self:Refresh_GiftRecords(room_id) end function UILiveRoomView:Refresh_GiftRecords(room_id) LogWarning("tzy_gift_records: " .. Inspect(gift_Records[room_id])) local itemlua = self:GetCurrPageLua() local count = #gift_Records[room_id] itemlua.giftRank.sv_r_gift.loopListView:SetListItemCount(count) itemlua.giftRank.sv_r_gift.loopListView:RefreshAllShownItem() itemlua.giftRank.sv_r_gift.loopListView:MovePanelToItemIndex(count - 1, 0) itemlua.giftRank.sv_r_gift.scrollRect.vertical = false end function UILiveRoomView:InitReceiveGift(itemlua, room_id) local btn_hour = itemlua.giftRank.btn_hour.button local btn_day = itemlua.giftRank.btn_day.button local btn_month = itemlua.giftRank.btn_month.button local loopview = itemlua.giftRank.sv_r_gift.loopListView local testgift_hour = { { name = "小时1" }, { name = "小时2" } } local testgift_day = { { name = "日1" }, { name = "日2" }, { name = "日3" }, { name = "日4" }, } local testgift_month = { { name = "月1" }, { name = "月2" }, { name = "月3" }, { name = "月4" }, { name = "月5" }, { name = "月6" }, } local curdata loopview:Dispose() loopview:InitListView(0, function(loopview, index) return self:Gen_Receive_Gift(loopview, index, room_id) end) self.uiBase:AddButtonUniqueEventListener(btn_hour, self, function() curdata = testgift_hour loopview:SetListItemCount(#curdata) loopview:RefreshAllShownItem() end) self.uiBase:AddButtonUniqueEventListener(btn_day, self, function() curdata = testgift_day loopview:SetListItemCount(#curdata) loopview:RefreshAllShownItem() end) self.uiBase:AddButtonUniqueEventListener(btn_month, self, function() curdata = testgift_month loopview:SetListItemCount(#curdata) loopview:RefreshAllShownItem() end) end function UILiveRoomView:Gen_Receive_Gift(loopview, index, room_id) if index < 0 then return nil end local item = loopview:NewListViewItem("LiveRoomReceiveGiftItem") local itemlua = CommonUtil.BindGridViewItem2Lua(self, "LiveRoomReceiveGiftItem", item.gameObject) local go = item.gameObject go.name = "LiveRoomReceiveGiftItem" .. index local id = index + 1 local data = gift_Records[room_id][id] if not data then return item end local gift_id = giftCfg[self:String2Table(data.data).gift].Icon local iconpath = "LiveRoomGift/" .. gift_id local name = data.nickname itemlua.text_name.text.text = name self:LoadIcon_SetSprite(itemlua.img_gift, iconpath) return item end --endregion 房间 收礼物 --region 房间 准备 function UILiveRoomView:SetReadyPad(itemlua, room_id) local room_type = room_id local title local readybtn = itemlua.readyPad.readyBtn.button local card = itemlua.readyPad.card_bg self.uiBase:AddButtonUniqueEventListener(readybtn, self, function() self:OnReadyBtn(room_id) end) card:SetActive(false) local heads = { [1] = itemlua.readyPad.head1, [2] = itemlua.readyPad.head2, [3] = itemlua.readyPad.head3, [4] = itemlua.readyPad.head4, [5] = itemlua.readyPad.head5, [6] = itemlua.readyPad.head6, [7] = itemlua.readyPad.head7, [8] = itemlua.readyPad.head8, [9] = itemlua.readyPad.head9, [10] = itemlua.readyPad.head10, } for i = 1, 10 do heads[i]:SetActive(false) heads[i].head_img:SetActive(false) --self:LoadIcon_SetSprite(heads[i], "NpcHeads/npc_head_" .. i) end if room_type == LIVEROOM_TYPE_CARD then title = "抽卡准备中" card:SetActive(true) for i = 1, 5 do heads[i]:SetActive(true) end elseif room_type == LIVEROOM_TYPE_SELL then title = "售卖准备中" for i = 1, 5 do heads[i]:SetActive(true) end elseif room_type == LIVEROOM_TYPE_ANSWER then title = "答题准备中" for i = 1, 5 do heads[i]:SetActive(true) end elseif room_type == LIVEROOM_TYPE_GAME then title = "游戏准备中" for i = 1, 10 do heads[i]:SetActive(true) end elseif room_type == LIVEROOM_TYPE_BID then title = "拍卖准备中" for i = 1, 5 do heads[i]:SetActive(true) end end itemlua.readyPad.text_title.text.text = title itemlua.readyPad.readyitem:SetActive(false) end --回调事件,获取准备玩家的数据 function UILiveRoomView:ReadyPad_Head(itemlua, data) local heads = { [1] = itemlua.readyPad.head1.head_img, [2] = itemlua.readyPad.head2.head_img, [3] = itemlua.readyPad.head3.head_img, [4] = itemlua.readyPad.head4.head_img, [5] = itemlua.readyPad.head5.head_img, [6] = itemlua.readyPad.head6.head_img, [7] = itemlua.readyPad.head7.head_img, [8] = itemlua.readyPad.head8.head_img, [9] = itemlua.readyPad.head9.head_img, [10] = itemlua.readyPad.head10.head_img, } if data ~= nil then for i = 1, 10 do if i <= #data then local headpath = "PlayerHeads/player_head_" .. (data[i].head_id or 1) self:LoadIcon_SetSprite(heads[i], headpath) heads[i].gameObject:SetActive(true) else heads[i].gameObject:SetActive(false) end end else for i = 1, 10 do heads[i].gameObject:SetActive(false) end end end --按钮,发送准备请求 function UILiveRoomView:OnReadyBtn(room_id) --local data = ManagerContainer.DataMgr.LiveRoomData:GetData() --local room_id = data["room_id"] ManagerContainer.DataMgr.LiveRoomData:GetReadyReq(room_id) end function UILiveRoomView:SetReadyItem(room_id, cfgid) local itemlua = self:GetCurrPageLua() if room_id == LIVEROOM_TYPE_SELL then self:SetReadyItem_Sell(itemlua, cfgid) elseif room_id == LIVEROOM_TYPE_BID then self:SetReadyItem_Bid(itemlua, cfgid) end end function UILiveRoomView:SetReadyItem_Sell(itemlua, id) local readyitem = itemlua.readyPad.readyitem local data = sellCfg[id] or {} readyitem.title_bid:SetActive(false) readyitem.title_sell:SetActive(false) if data then readyitem:SetActive(true) readyitem.bg.image.sprite = readyitem.bg.switchSprite:GetSprite("bg_sell") readyitem.title_sell:SetActive(true) local name, coin1, coin2 name = data.Name coin1 = string.split(data.Price, ":")[2] coin2 = string.split(data.CutPrice, ":")[2] readyitem.text_name.text.text = name readyitem.text_info1.text.text = "原价: " .. coin1 .. "金币" readyitem.text_info2.text.text = "秒杀价: " .. coin2 .. "金币" for i = 1, 3 do if data.Items[i] then local info = { cfgId = data.Items[i][1], num = data.Items[i][2] } IconItemCtr:SetData(self, readyitem["item" .. i], info, Enum.ItemIEnterType.Bag, self, self.OnClickIconItem) else readyitem["item" .. i]:SetActive(false) end end else readyitem:SetActive(false) end end function UILiveRoomView:SetReadyItem_Bid(itemlua, id) local readyitem = itemlua.readyPad.readyitem local data = bidCfg[id] or {} readyitem.title_bid:SetActive(false) readyitem.title_sell:SetActive(false) if data then readyitem:SetActive(true) readyitem.bg.image.sprite = readyitem.bg.switchSprite:GetSprite("bg_bid") readyitem.title_bid:SetActive(true) local name, coin1, coin2 name = data.Name coin1 = string.split(data.Price, ":")[2] coin2 = data.AddPrice readyitem.text_name.text.text = name readyitem.text_info1.text.text = "底价: " .. coin1 .. "金币" readyitem.text_info2.text.text = "每次加价: ≥" .. coin2 .. "金币" for i = 1, 3 do if data.Items[i] then local info = { cfgId = data.Items[i][1], num = data.Items[i][2] } IconItemCtr:SetData(self, readyitem["item" .. i], info, Enum.ItemIEnterType.Bag, self, self.OnClickIconItem) else readyitem["item" .. i]:SetActive(false) end end else readyitem:SetActive(false) end end --endregion 房间 准备 --region 房间 进行中 function UILiveRoomView:SetShowPad(itemlua, room_id) local room_type = room_id itemlua.showPad.rect_card:SetActive(false) itemlua.showPad.rect_sell:SetActive(false) itemlua.showPad.rect_answer:SetActive(false) itemlua.showPad.rect_game:SetActive(false) itemlua.showPad.rect_bid:SetActive(false) if room_type == LIVEROOM_TYPE_CARD then elseif room_type == LIVEROOM_TYPE_SELL then elseif room_type == LIVEROOM_TYPE_ANSWER then elseif room_type == LIVEROOM_TYPE_GAME then --self:Show_Game_View(itemlua, nil) elseif room_type == LIVEROOM_TYPE_BID then end end function UILiveRoomView:Show_SendGameScore(room_id) local uid = ManagerContainer.DataMgr.UserData:GetUserId() local score = ManagerContainer.LuaGameMgr.FunnyGameScore local submit_data = { { key = uid, value = tostring(score) } }; ManagerContainer.DataMgr.LiveRoomData:SubmitReq(room_id, submit_data) end --进行中 游戏 function UILiveRoomView:Show_Game_View(itemlua, data) local r_game = itemlua.showPad.rect_game r_game:SetActive(true) local title = r_game.text_title title.text.text = "小游戏实时分数" local view_items = { [1] = r_game.item1, [2] = r_game.item2, [3] = r_game.item3, [4] = r_game.item4, [5] = r_game.item5, [6] = r_game.item6, [7] = r_game.item7, [8] = r_game.item8, [9] = r_game.item9, } local scroedata if data ~= nil then scroedata = data or {} --LogWarning("tzy_Show_Game_View_scroedata: " .. Inspect(scroedata)) for i = 1, 9 do if i <= #scroedata then local info = uid2info[scroedata[i].key] --LogWarning("tzy_Show_Game_View_info: ".. Inspect(info)) local headpath = "PlayerHeads/player_head_" .. (info.head_id or 1) self:LoadIcon_SetSprite(view_items[i].head_img, headpath) view_items[i].head_img:SetActive(true) view_items[i].text_name.text.text = info.name view_items[i].text_score.text.text = scroedata[i].value else view_items[i].head_img:SetActive(false) view_items[i].text_name.text.text = "" view_items[i].text_score.text.text = "" end end else for i = 1, 9 do view_items[i].head_img:SetActive(false) view_items[i].text_name.text.text = "" view_items[i].text_score.text.text = "" end end end --进行中 出售 仅配置 进度条默认0 function UILiveRoomView:Show_Sell_Cfg(itemlua, cfgid) local r_sell = itemlua.showPad.rect_sell r_sell:SetActive(true) local items_go = { [1] = r_sell.rect.item1, [2] = r_sell.rect.item2, [3] = r_sell.rect.item3, } local cfgdata = sellCfg[cfgid] --LogWarning("tzy_sell 1: " .. data.key .. " " .. Inspect(data)) --LogWarning("tzy_sell 2: " .. Inspect(sellCfg)) LogWarning("tzy_sell 3: " .. Inspect(cfgdata)) local price_old = string.split(cfgdata.Price, ":")[2] local price_new = string.split(cfgdata.CutPrice, ":")[2] --名称 r_sell.text_name.text.text = cfgdata.Name --购买数量进度条 local percent = 0 / cfgdata.SellNum r_sell.bar_sellnum.slider.value = 0.08 + percent * 0.93 r_sell.text_sellnum1.text.text = "已抢" .. math.floor(percent * 100) .. "% " r_sell.text_sellnum2.text.text = "已抢" .. math.floor(percent * 100) .. "% " --价格 r_sell.text_coin_old.text.text = "原价" .. price_old .. "金币" r_sell.text_coin_old.contentSizeFitter:SetLayoutHorizontal() r_sell.text_coin_new.text.text = "秒杀价 " .. price_new .. "金币" --购买按钮 self.uiBase:AddButtonUniqueEventListener(r_sell.btn_buy.button, self, function() --点击购买后逻辑 local coin = ManagerContainer.DataMgr.UserData:GetOwnCoin() if coin < tonumber(price_new) then --金币不足逻辑 return end local uid = ManagerContainer.DataMgr.UserData:GetUserId() local submit_data = { { key = uid, value = "" } }; ManagerContainer.DataMgr.LiveRoomData:SubmitReq(LIVEROOM_TYPE_SELL, submit_data) end) --礼包大图 r_sell.rect.img_gift.image.sprite --礼包iconitem for i = 1, 3 do if cfgdata.Items and cfgdata.Items[i] then local info = { cfgId = cfgdata.Items[i][1], num = cfgdata.Items[i][2] } IconItemCtr:SetData(self, items_go[i], info, Enum.ItemIEnterType.Bag, self, self.OnClickIconItem) items_go[i]:SetActive(true) else items_go[i]:SetActive(false) end end end function UILiveRoomView:Show_Sell_Progress(itemlua, data) local r_sell = itemlua.showPad.rect_sell local cfgdata = sellCfg[data.key] --购买数量进度条 local percent = data.value / cfgdata.SellNum r_sell.bar_sellnum.slider.value = 0.08 + percent * 0.93 r_sell.text_sellnum1.text.text= "已抢".. math.floor(percent * 100).. "% " r_sell.text_sellnum2.text.text= "已抢".. math.floor(percent * 100).. "% " end --进行中 竞拍 仅配置 function UILiveRoomView:Show_Bid_Cfg(itemlua, cfgid) local r_bid = itemlua.showPad.rect_bid r_bid:SetActive(true) local items_go = { [1] = r_bid.rect.item1, [2] = r_bid.rect.item2, [3] = r_bid.rect.item3, } local cfgdata = bidCfg[cfgid] self.bid_price_base = tonumber(string.split(cfgdata.Price, ":")[2]) self.bid_price_add = cfgdata.AddPrice self.bid_price_cur = self.bid_price_base self.bid_price_curmax = 0 --名称 r_bid.text_name.text.text = cfgdata.Name --竞拍 r_bid.text_bid1.text.text = "" .. 0 .. "金币" r_bid.text_bid2.text.text = "" .. 0 .. "金币" r_bid.text_num.text.text = self.bid_price_cur for i = 1, 3 do if cfgdata.Items and cfgdata.Items[i] then local info = { cfgId = cfgdata.Items[i][1], num = cfgdata.Items[i][2] } IconItemCtr:SetData(self, items_go[i], info, Enum.ItemIEnterType.Bag, self, self.OnClickIconItem) items_go[i]:SetActive(true) else items_go[i]:SetActive(false) end end --sub按钮 self.uiBase:AddButtonUniqueEventListener(r_bid.btn_sub.button, self, function() self.bid_price_cur = self.bid_price_cur - self.bid_price_add if self.bid_price_cur < self.bid_price_base then self.bid_price_cur = self.bid_price_base end r_bid.text_num.text.text = tostring(self.bid_price_cur) end) --add按钮 self.uiBase:AddButtonUniqueEventListener(r_bid.btn_add.button, self, function() self.bid_price_cur = self.bid_price_cur + self.bid_price_add r_bid.text_num.text.text = tostring(self.bid_price_cur) end) --购买按钮 self.uiBase:AddButtonUniqueEventListener(r_bid.btn_buy.button, self, function() --点击购买后逻辑 local coin = ManagerContainer.DataMgr.UserData:GetOwnCoin() if coin < self.bid_price_cur then --金币不足逻辑 return end local uid = ManagerContainer.DataMgr.UserData:GetUserId() --LogWarning("tzy_show bid_price_cur1: " .. self.bid_price_cur) local value = "" .. self.bid_price_cur local submit_data = { { key = uid, value = value } }; ManagerContainer.DataMgr.LiveRoomData:SubmitReq(LIVEROOM_TYPE_BID, submit_data) --LogWarning("tzy_show bid_price_cur2: " .. self.bid_price_cur) end) self.bid_rank = {} r_bid.sv_bid.loopListView:Dispose() r_bid.sv_bid.loopListView:InitListView(0, function(loopview, index) return self:Gen_Bid_Rank_Item(loopview, index) end) end function UILiveRoomView:Gen_Bid_Rank_Item(loopview, index) if index < 0 then return nil end local item = loopview:NewListViewItem("LiveRoomBidRankItem") local itemlua = CommonUtil.BindGridViewItem2Lua(self, "LiveRoomBidRankItem", item.gameObject) local go = item.gameObject go.name = "LiveRoomBidRankItem" .. index local info = self.bid_rank[index + 1] local headpath = "PlayerHeads/player_head_" .. info.head_id self:LoadIcon_SetSprite(itemlua.head_img, headpath) itemlua.text_name.text.text = info.name itemlua.text_coin.text.text = "" .. info.price .. "金币" return item end --列表和当前最高价格 function UILiveRoomView:Show_Bid_Rank(itemlua, data) LogWarning("tzy_show_bid_rank: " .. Inspect(data)) local r_bid = itemlua.showPad.rect_bid if data.show_data_list and data.show_data_list[1] then local str_val = data.show_data_list[1].str_val local head_id = string.split(string.split(str_val, ";")[1], ":")[2] local name = string.split(string.split(str_val, ";")[2], ":")[2] local info = { head_id = head_id, name = name, price = data.show_data_list[1].value, } table.insert(self.bid_rank, 1, info) LogWarning("tzy_show_bid_rank: " .. Inspect(self.bid_rank)) end if #self.bid_rank > 10 then r_bid.sv_bid.loopListView:SetListItemCount(10) else r_bid.sv_bid.loopListView:SetListItemCount(#self.bid_rank) end end --个人最高 function UILiveRoomView:Show_Bid_Submit(itemlua, selfvalue, maxvalue, maxinfo) local r_bid = itemlua.showPad.rect_bid if selfvalue > self.bid_price_curmax then self.bid_price_curmax = selfvalue end local price1 = maxvalue local price2 = self.bid_price_curmax local head_id = string.split(string.split(maxinfo, ";")[1], ":")[2] local name = string.split(string.split(maxinfo, ";")[2], ":")[2] r_bid.text_bid1.text.text = "【" .. name .. "】" .. price1 .. "金币" r_bid.text_bid2.text.text = "" .. price2 .. "金币" end function UILiveRoomView:Show_Answer_Cfg(itemlua, cfgid, opt_sort) local r_answer = itemlua.showPad.rect_answer local cfgdata = questionCfg[cfgid] r_answer:SetActive(true) r_answer.answer:SetActive(true) r_answer.result:SetActive(false) --题目左图 layout =1 local top1 = { item = r_answer.top1, img = r_answer.top1.img_q, text = r_answer.top1.text_q, } --题目上图 layout =2 local top2 = { item = r_answer.top2, img = r_answer.top2.img_q, text = r_answer.top2.text_q, } --题目文字 layout =3 local top3 = { item = r_answer.top3, text = r_answer.top3.text_q, } --选项 图片 .image .switchSprite .button .img.sprite local op1 = { [1] = r_answer.options1.item1, [2] = r_answer.options1.item2, [3] = r_answer.options1.item3, [4] = r_answer.options1.item4 } --选项 文字 .image .switchSprite .button .text.text local op2 = { [1] = r_answer.options2.item1, [2] = r_answer.options2.item2, [3] = r_answer.options2.item3, [4] = r_answer.options2.item4 } top1.item:SetActive(false) top2.item:SetActive(false) top3.item:SetActive(false) r_answer.options1:SetActive(false) r_answer.options2:SetActive(false) if cfgdata.Layout == 1 then top1.item:SetActive(true) top1.text.text.text = cfgdata.Question --local imgpath = "QuestionHeads/question_head_" .. cfgid local imgpath = "LiveRoomQuestion/" .. cfgdata.QuestionPic self:LoadIcon_SetSprite(top1.img, imgpath) top1.img.image:SetNativeSize() elseif cfgdata.Layout == 2 then top2.item:SetActive(true) top2.text.text.text = cfgdata.Question --local imgpath = "QuestionHeads/question_head_" .. cfgid local imgpath = "LiveRoomQuestion/" .. cfgdata.QuestionPic self:LoadIcon_SetSprite(top2.img, imgpath) top2.img.image:SetNativeSize() elseif cfgdata.Layout == 3 then top3.item:SetActive(true) top3.text.text.text = cfgdata.Question end if cfgdata.Type == 1 then r_answer.options1:SetActive(true) for i = 1, 4 do self:Show_Answer_SetOption(op1[i], 1, opt_sort[i], cfgid) end elseif cfgdata.Type == 2 then r_answer.options2:SetActive(true) for i = 1, 4 do self:Show_Answer_SetOption(op2[i], 2, opt_sort[i], cfgid) end end end --s function UILiveRoomView:Show_Answer_SetOption(item, type, index, cfgid) --LogWarning("tzy_show_answer_: "..Inspect(item)) local data = questionCfg[cfgid] --图片 if type == 1 then --local imgpath=data["Option"..index.."Pic"] local imgpath = "LiveRoomQuestion/" .. data["Option" .. index .. "Pic"] self:LoadIcon_SetSprite(item.img, imgpath) item.img.image:SetNativeSize() --文字 elseif type == 2 then local text = data["Option" .. index] item.text.text.text = text end --点击 self.uiBase:AddButtonUniqueEventListener(item.button, self, function() local value = "" .. index local submit_data = { { key = cfgid, value = value } }; ManagerContainer.DataMgr.LiveRoomData:SubmitReq(LIVEROOM_TYPE_ANSWER, submit_data) end) end function UILiveRoomView:Show_Answer_Result(itemlua, data) local r_answer = itemlua.showPad.rect_answer.result r_answer:SetActive(false) local heads = { [1] = r_answer.head1, [2] = r_answer.head2, [3] = r_answer.head3, [4] = r_answer.head4, [5] = r_answer.head5, [6] = r_answer.head6, [7] = r_answer.head7, [8] = r_answer.head8, [9] = r_answer.head9, [10] = r_answer.head10, } if data ~= nil and #data.show_data_list > 0 then r_answer:SetActive(true) itemlua.showPad.rect_answer.answer:SetActive(false) for i = 1, 10 do if i <= #data.show_data_list then local info = data.show_data_list[i] heads[i]:SetActive(true) --mark heads[i].img_true:SetActive(false) heads[i].img_false:SetActive(false) if info.value == 1 then heads[i].img_true:SetActive(true) else heads[i].img_false:SetActive(true) end local headpath = "PlayerHeads/player_head_" .. (uid2info[info.key].head_id or 1) local name = uid2info[info.key].name or "穿越者" heads[i].text_name.text.text = name self:LoadIcon_SetSprite(heads[i].img_head, headpath) else heads[i]:SetActive(false) end end else for i = 1, 10 do heads[i]:SetActive(false) end end end --endregion 房间 进行中 --region 房间 结算 function UILiveRoomView:SetResultPad(itemlua, room_id) local room_type = room_id itemlua.resultPad.rect_card:SetActive(false) itemlua.resultPad.rect_sell:SetActive(false) itemlua.resultPad.rect_answer:SetActive(false) itemlua.resultPad.rect_game:SetActive(false) itemlua.resultPad.rect_bid:SetActive(false) if room_type == LIVEROOM_TYPE_CARD then self:Result_Card(itemlua, nil) elseif room_type == LIVEROOM_TYPE_SELL then self:Result_Sell(itemlua, nil) elseif room_type == LIVEROOM_TYPE_ANSWER then self:Result_Answer(itemlua, nil) elseif room_type == LIVEROOM_TYPE_GAME then self:Result_Game(itemlua, nil) elseif room_type == LIVEROOM_TYPE_BID then self:Result_Bid(itemlua, nil) end end --结算 抽卡 function UILiveRoomView:Result_Card(itemlua, data) local r_card = itemlua.resultPad.rect_card r_card:SetActive(true) local title = r_card.text_title title.text.text = "测试抽卡结算信息" local items = { [1] = r_card.carditem1, [2] = r_card.carditem2, [3] = r_card.carditem3, [4] = r_card.carditem4, [5] = r_card.carditem5 } local result_list if data ~= nil then result_list = data.player_reward_list or {} for i = 1, 5 do if i <= #result_list then self:Result_Card_SetItem(items[i], result_list[i], i) items[i]:SetActive(true) else self:Result_Card_SetItem(items[i], nil, i) items[i]:SetActive(false) end end else for i = 1, 5 do self:Result_Card_SetItem(items[i], nil, i) items[i]:SetActive(false) end end -- 先将所有25个物体的位置设置为x=1000 for row = 1, 5 do for col = 1, 5 do local item = items[row]["item" .. col] local c = item.gameObject:GetComponent(Enum.TypeInfo.CanvasGroup) c.alpha = 0 end end --动画 local seq = DG.Tweening.DOTween.Sequence() --:SetId("seq1"):Pause(); local seq_distance = 900 local seq_time = 0.12 for i = 1, 5 do local t1 = items[1]["item" .. i] local t1c = t1.gameObject:GetComponent(Enum.TypeInfo.CanvasGroup) seq:Append(t1c:DOFade(1, 0)) seq:Append(t1.transform:DOLocalMoveX(seq_distance, seq_time):From()) local t2 = items[2]["item" .. i] local t2c = t2.gameObject:GetComponent(Enum.TypeInfo.CanvasGroup) seq:Append(t2c:DOFade(1, 0)) seq:Append(t2.transform:DOLocalMoveX(seq_distance, seq_time):From()) local t3 = items[3]["item" .. i] local t3c = t3.gameObject:GetComponent(Enum.TypeInfo.CanvasGroup) seq:Append(t3c:DOFade(1, 0)) seq:Append(t3.transform:DOLocalMoveX(seq_distance, seq_time):From()) local t4 = items[4]["item" .. i] local t4c = t4.gameObject:GetComponent(Enum.TypeInfo.CanvasGroup) seq:Append(t4c:DOFade(1, 0)) seq:Append(t4.transform:DOLocalMoveX(seq_distance, seq_time):From()) local t5 = items[5]["item" .. i] local t5c = t5.gameObject:GetComponent(Enum.TypeInfo.CanvasGroup) seq:Append(t5c:DOFade(1, 0)) seq:Append(t5.transform:DOLocalMoveX(seq_distance, seq_time):From()) seq:AppendInterval(0.15) end --DG.Tweening.DOTween.Play("seq1"); end function UILiveRoomView:Result_Card_SetItem(itemlua, data, index) local name = itemlua.text_name local head = itemlua.head local items = { [1] = itemlua.item1, [2] = itemlua.item2, [3] = itemlua.item3, [4] = itemlua.item4, [5] = itemlua.item5, } -- 解析字符串格式的data local reward_list = {} if data ~= nil then name.text.text = uid2info[data.key].name local headpath = "PlayerHeads/player_head_" .. (uid2info[data.key].head_id or 1) self:LoadIcon_SetSprite(head, headpath) local reward_strs = string.split(data.str_val, ";") for i, reward_str in ipairs(reward_strs) do local cfgId, num = string.match(reward_str, "(%d+):(%d+)") if cfgId and num then reward_list[i] = { cfgId = tonumber(cfgId), num = tonumber(num) } end end --LogWarning("tzy_Result_Card_SetItem: " .. Inspect(reward_list)) for i = 1, 5 do local reward = { cfgId = reward_list[i].cfgId, num = reward_list[i].num } IconItemCtr:SetData(self, items[i], reward, Enum.ItemIEnterType.Bag, self, self.OnClickIconItem) end end end --结算 出售 function UILiveRoomView:Result_Sell(itemlua, data) local r_sell = itemlua.resultPad.rect_sell r_sell:SetActive(true) local heads = { [1] = r_sell.head1, [2] = r_sell.head2, [3] = r_sell.head3, [4] = r_sell.head4, [5] = r_sell.head5, [6] = r_sell.head6, [7] = r_sell.head7, [8] = r_sell.head8, [9] = r_sell.head9, [10] = r_sell.head10, } if data ~= nil then local result_list = data.player_result_list or {} for i = 1, 10 do if i <= #result_list then heads[i].text_name.text.text = result_list[i].nickname local headpath = "PlayerHeads/player_head_" .. (result_list[i].head_id or 1) self:LoadIcon_SetSprite(heads[i].img_head, headpath) heads[i]:SetActive(true) else heads[i]:SetActive(false) end end else for i = 1, 10 do heads[i]:SetActive(false) end end end --结算 答题 function UILiveRoomView:Result_Answer(itemlua, data) local r_answer = itemlua.resultPad.rect_answer r_answer:SetActive(true) local heads = { [1] = r_answer.head1, [2] = r_answer.head2, [3] = r_answer.head3, [4] = r_answer.head4, [5] = r_answer.head5, [6] = r_answer.head6, [7] = r_answer.head7, [8] = r_answer.head8, [9] = r_answer.head9, [10] = r_answer.head10, } if data ~= nil then r_answer:SetActive(true) for i = 1, 10 do if i <= #data.player_result_list then local info = data.player_result_list[i] heads[i]:SetActive(true) --mark heads[i].img_true:SetActive(false) heads[i].img_false:SetActive(false) if info.data == "1" then heads[i].img_true:SetActive(true) else heads[i].img_false:SetActive(true) end local headpath = "PlayerHeads/player_head_" .. (uid2info[info.uid].head_id or 1) local name = uid2info[info.uid].name or "穿越者" heads[i].text_name.text.text = name self:LoadIcon_SetSprite(heads[i].img_head, headpath) else heads[i]:SetActive(false) end end else for i = 1, 10 do heads[i]:SetActive(false) end end end --结算 游戏 function UILiveRoomView:Result_Game(itemlua, data) local r_game = itemlua.resultPad.rect_game r_game:SetActive(true) local title = r_game.text_title title.text.text = "小游戏结算信息" local rank = r_game.rank local rank_head = { [1] = rank.head1.head_img, [2] = rank.head2.head_img, [3] = rank.head3.head_img, [4] = rank.head4.head_img, [5] = rank.head5.head_img, [6] = rank.head6.head_img, } local rank_name = { [1] = rank.name1, [2] = rank.name2, [3] = rank.name3, [4] = rank.name4, [5] = rank.name5, [6] = rank.name6, } for i = 1, 6 do self:LoadIcon_SetSprite(rank_head[i], "NpcHeads/npc_head_" .. i) rank_name[i].text.text = "测试名称" .. i end local result_list, reward_list if data ~= nil then result_list = data.player_result_list or {} reward_list = data.player_reward_list or {} for i = 1, 3 do if i <= #result_list then local info = result_list[i] local headpath = "PlayerHeads/player_head_" .. (info.head_id or 1) self:LoadIcon_SetSprite(rank_head[i], headpath) rank_head[i]:SetActive(true) rank_name[i].text.text = info.nickname self:LoadIcon_SetSprite(rank_head[i + 3], headpath) rank_head[i + 3]:SetActive(true) local rank_str if i==1 then rank_str="S" elseif i==2 then rank_str="A" elseif i==3 then rank_str="B" end rank_name[i + 3].text.text = "【"..info.nickname.."】获得"..rank_str.."级奖励" else rank_head[i]:SetActive(false) rank_name[i].text.text = "" rank_head[i + 3]:SetActive(false) rank_name[i + 3].text.text = "" end end else for i = 1, 6 do rank_head[i]:SetActive(false) rank_name[i].text.text = "" end end end --结算 拍卖 function UILiveRoomView:Result_Bid(itemlua, data) local r_bid = itemlua.resultPad.rect_bid r_bid:SetActive(true) local heads = { [1] = r_bid.head1, [2] = r_bid.head2, [3] = r_bid.head3, [4] = r_bid.head4, [5] = r_bid.head5, } if data ~= nil then local result_list = data.player_result_list or {} --价格 local price = string.split(string.split(result_list[1].data, ";")[1], ":")[2] r_bid.text1.text.text = "以" .. price .. "金币的价格获得" --头像 for i = 1, 5 do if i <= #result_list then heads[i].text_name.text.text = result_list[i].nickname local headpath = "PlayerHeads/player_head_" .. (result_list[i].head_id or 1) self:LoadIcon_SetSprite(heads[i].img_head, headpath) heads[i]:SetActive(true) else heads[i]:SetActive(false) end end else for i = 1, 5 do heads[i]:SetActive(false) end end end --结算 拍卖 仅配置 function UILiveRoomView:Result_Bid_Cfg(itemlua, cfgid) local r_bid = itemlua.resultPad.rect_bid local items_go = { [1] = r_bid.item1, [2] = r_bid.item2, [3] = r_bid.item3, } local cfgdata = bidCfg[cfgid] --名称 r_bid.text2.text.text = cfgdata.Name for i = 1, 3 do if cfgdata.Items and cfgdata.Items[i] then local info = { cfgId = cfgdata.Items[i][1], num = cfgdata.Items[i][2] } IconItemCtr:SetData(self, items_go[i], info, Enum.ItemIEnterType.Bag, self, self.OnClickIconItem) items_go[i]:SetActive(true) else items_go[i]:SetActive(false) end end end --endregion 房间 结算 --region 计时器相关 local istimerhide=false local timerhidetime=0.6 function UILiveRoomView:ResetStageTimer(timerVal) self.currStageTimerVal = timerVal if self.currStageTimer then ManagerContainer.LuaTimerMgr:RemoveTimer(self.currStageTimer) self.currStageTimer = nil end self:RefreshStageTimer(timerVal) self.currStageTimer = ManagerContainer.LuaTimerMgr:AddTimer(1000, self.currStageTimerVal, self, self .OnStageTimerTick, nil) end function UILiveRoomView:OnStageTimerTick() self.currStageTimerVal = self.currStageTimerVal - 1 self:RefreshStageTimer(self.currStageTimerVal) end function UILiveRoomView:RefreshStageTimer(timerVal) local data = ManagerContainer.DataMgr.LiveRoomData:GetData() local stage = data["stage"] local itemLua = self:GetCurrPageLua() local name if stage == LIVEROOM_STAGE_IDLE then name = "等待中" elseif stage == LIVEROOM_STAGE_READY then name = "准备中" elseif stage == LIVEROOM_STAGE_SHOW then name = "进行中" elseif stage == LIVEROOM_STAGE_RESULT then name = "结算中" end itemLua.timer.text_name.text.text = name itemLua.timer.text_time.text.text = tostring(timerVal) if timerVal <= (timerhidetime + 1) then self:OnTimerHide() end if timerVal>(2+timerhidetime) and istimerhide then self:OnTimerShow() end end --endregion 计时器相关 function UILiveRoomView:OnTimerHide() if istimerhide==true then return end local timer = self:GetCurrPageLua().timer local seq=DG.Tweening.DOTween.Sequence() seq:Append(timer.transform:DOAnchorPosX( 300, timerhidetime)) seq:OnComplete(function() istimerhide = true end) end function UILiveRoomView:OnTimerShow() if istimerhide==false then return end local timer = self:GetCurrPageLua().timer local seq=DG.Tweening.DOTween.Sequence() seq:Append(timer.transform:DOAnchorPosX(0, timerhidetime)) seq:OnComplete(function() istimerhide = false end) end function UILiveRoomView:Init_FloatingHeart(itemlua) self.FloatingHeart = { [1] = itemlua.floatingHeart.item1, [2] = itemlua.floatingHeart.item2, [3] = itemlua.floatingHeart.item3, [4] = itemlua.floatingHeart.item4, [5] = itemlua.floatingHeart.item5 } for k, v in pairs(self.FloatingHeart) do v.active = false v.canvasGroup.alpha = 0 end end function UILiveRoomView:Gen_FloatingHeart(itemlua) self.FloatingHeart = { [1] = itemlua.floatingHeart.item1, [2] = itemlua.floatingHeart.item2, [3] = itemlua.floatingHeart.item3, [4] = itemlua.floatingHeart.item4, [5] = itemlua.floatingHeart.item5 } local id; for k, v in pairs(self.FloatingHeart) do if not v.active then id = k v.active = true break end end if id then local center = itemlua.floatingHeart.rectTransform.anchoredPosition LogWarning("center:"..center.x..","..center.y) --center.x = center.x + math.random(-30, 30) --center.y = center.y + math.random(-30, 30) local screenWidth = UnityEngine.Screen.width local screenHeight = UnityEngine.Screen.height local endPos = Vector2(-screenWidth+145-center.x, screenHeight-100-center.y) local item = self.FloatingHeart[id] item.transform.localPosition = Vector2(0,0) local time1 = 0.5 local seq = DG.Tweening.DOTween.Sequence() seq:Append(item.transform:DOLocalMoveY(70, time1)) seq:Join(item.canvasGroup:DOFade(1, time1 * 0.6)) --seq:AppendInterval(0.3) seq:Append(item.transform:DOLocalMove(endPos,2)) seq:Append(item.canvasGroup:DOFade(0, time1)) seq:OnComplete(function() item.active = false end) end end return UILiveRoomView