local PendulumRule = import('.PendulumRule') AreaOderType = { left_right = "left_right", right_left = "right_left", up_down = "up_down", down_up = "down_up" } local PlayerCardInfoView = { _view = nil, _mainView = nil, _mask_liangpai = nil, _area_outcard_list = nil, _area_handcard_list = nil, } local function NewCardView(card,cardItem,index_X,index_Y) local self = {} setmetatable(self,{__index = CardView}) self.btn_card = card self.card_item = cardItem self.index_X = index_X self.index_Y = index_Y return self end local M = PlayerCardInfoView function M.new(view,mainView) local self = {} setmetatable(self, {__index = M}) self._view = view self._mainView = mainView self:init() return self end function M:init() local view = self._view self._room = DataManager.CurrenRoom self._area_outcard_list = view:GetChild("area_outcard_list") self._area_handcard_list = view:GetChild("area_handcard_list") self._area_fz_list = view:GetChild("area_fz_list") self._area_qipai_list = view:GetChild("windcard_list") self._mask_liangpai = view:GetChild("mask_liangpai") UIPackage.AddPackage("base/main_zipai/ui/Main_RunBeard") end function M:SetPlayer(p) self._player = p end function M:FillData(begin) end function M:Clear() self._area_outcard_list:RemoveChildren(0, -1, true) self._area_fz_list:RemoveChildren(0, -1, true) self._area_handcard_list:RemoveChildren(0, -1, true) self._area_qipai_list:RemoveChildren(0, -1, true) self._mask_liangpai:RemoveChildren(0, -1, true) end function M:fillCard(obj,card_type,card) end function M:ClearOutCard() self._area_outcard_list:RemoveChildren(0, -1, true) end --弃牌 function M:UpdateQiPai( qi_list) self._area_qipai_list:RemoveChildren(0,-1,true) for i=1,#qi_list do local qicards =UIPackage.CreateObjectFromURL("ui://Main_RunBeard/Qipai") qicards:GetChild("icon").icon = self:getCardItem("ui://Main_RunBeard/202_",qi_list[i]) self._area_qipai_list:AddChild(qicards) end end --放字 function M:UpdateFzList( fz_list ) printlog("jefe UpdateFzList=======") pt(fz_list) self._area_fz_list:RemoveChildren(0,-1,true) for i = 1,#fz_list do local fzitem = nil if fz_list[i].type ~= RB_FZType.Kan then fzitem =UIPackage.CreateObjectFromURL("ui://Main_RunBeard/Component1") fzitem:RemoveChildren(0,-1,true) end if fz_list[i].type == RB_FZType.Chi or fz_list[i].type == RB_FZType.Bi then local fzcards =UIPackage.CreateObjectFromURL("ui://Main_RunBeard/Fz_0_3") fzcards:GetController("c2").selectedIndex =1 fzcards:GetChild("card_"..1).icon = self:getCardItem("ui://Main_RunBeard/202_",fz_list[i].active_card) fzcards:GetChild("card_"..2).icon = self:getCardItem("ui://Main_RunBeard/202_",fz_list[i].opcard[1]) fzcards:GetChild("card_"..3).icon = self:getCardItem("ui://Main_RunBeard/202_",fz_list[i].opcard[2]) fzcards.x,fzcards.y = 0,0 fzitem:AddChildAt(fzcards,0) self._area_fz_list:AddChild(fzitem) elseif fz_list[i].type == RB_FZType.Peng then local fzcards =UIPackage.CreateObjectFromURL("ui://Main_RunBeard/Fz_0_3") for j=1,3 do fzcards:GetChild("card_"..j).icon =self:getCardItem("ui://Main_RunBeard/202_",fz_list[i].card) end fzcards.x,fzcards.y = 0,0 fzitem:AddChildAt(fzcards,0) self._area_fz_list:AddChild(fzitem) elseif fz_list[i].type == RB_FZType.Wei then local fzcards =UIPackage.CreateObjectFromURL("ui://Main_RunBeard/Fz_0_3") for j=1,2 do fzcards:GetChild("card_"..j).icon ="ui://Main_RunBeard/202_1_300" end fzcards:GetChild("card_"..3).icon =self:getCardItem("ui://Main_RunBeard/202_",fz_list[i].card) fzcards.x,fzcards.y = 0,0 fzitem:AddChildAt(fzcards,0) self._area_fz_list:AddChild(fzitem) elseif fz_list[i].type == RB_FZType.ChouWei then local fzcards =UIPackage.CreateObjectFromURL("ui://Main_RunBeard/Fz_0_3") for j=1,2 do fzcards:GetChild("card_"..j).icon ="ui://Main_RunBeard/202_1_300" end fzcards:GetChild("card_"..3).icon =self:getCardItem("ui://Main_RunBeard/202_",fz_list[i].card) fzcards.x,fzcards.y = 0,0 fzitem:AddChildAt(fzcards,0) self._area_fz_list:AddChild(fzitem) elseif fz_list[i].type == RB_FZType.Pao then local fzcards =UIPackage.CreateObjectFromURL("ui://Main_RunBeard/Fz_0_4") for j=1,4 do fzcards:GetChild("card_"..j).icon =self:getCardItem("ui://Main_RunBeard/202_",fz_list[i].card) end fzcards.x,fzcards.y = 0,0 fzitem:AddChildAt(fzcards,0) self._area_fz_list:AddChild(fzitem) elseif fz_list[i].type == RB_FZType.Ti then local fzcards =UIPackage.CreateObjectFromURL("ui://Main_RunBeard/Fz_0_4") for j=1,4 do if j==4 then fzcards:GetChild("card_"..j).icon =self:getCardItem("ui://Main_RunBeard/202_",fz_list[i].card) else fzcards:GetChild("card_"..j).icon ="ui://Main_RunBeard/202_1_300" end end fzcards.x,fzcards.y = 0,0 fzitem:AddChildAt(fzcards,0) self._area_fz_list:AddChild(fzitem) end end end --回放手牌 function M:InitHandCard(handcard) self._area_handcard_list:RemoveChildren(0,-1,true) local pokerList =PendulumRule.GetHandCard(handcard) --self:PendulumRule(handcard) self.card_lists ={} for i =1,#pokerList do for j =1,#pokerList[i] do local card_code = pokerList[i][j] local btn_card =UIPackage.CreateObjectFromURL("ui://Main_RunBeard/Qipai") btn_card:GetChild("icon").icon = self:getCardItem("ui://Main_RunBeard/202_",card_code) self._area_handcard_list:AddChild(btn_card) self._area_handcard_list:SetChildIndex(btn_card,5-j) local card_view = NewCardView(btn_card,card_code,i,j) self.card_lists[#self.card_lists+1] = card_view end end for j=#self.card_lists,1,-1 do local card_view = self.card_lists[j] card_view.btn_card:RemoveFromParent() self._area_handcard_list:AddChild(card_view.btn_card) card_view.btn_card.xy = self:GetHandCardPos(card_view,#pokerList) end if self._player.fz_list~=nil then for i=1,#self._player.fz_list do if self._player.fz_list[i].type == RB_FZType.Kan then self:UpdateKan(self._player.fz_list[i].card) end end end end function M:UpdateHandCards( list ) self.card_lists = {} self._area_handcard_list:RemoveChildren(0,-1,true) local CountCards = {} for i=1,#list do CountCards[list[i].index_X]=CountCards[list[i].index_X] == nil and 1 or CountCards[list[i].index_X] + 1 end for i=1,#list do local card_code = list[i].card_item local btn_card =UIPackage.CreateObjectFromURL("ui://Main_RunBeard/Qipai") btn_card:GetChild("icon").icon = self:getCardItem("ui://Main_RunBeard/202_",card_code) local card_view = NewCardView(btn_card,card_code,list[i].index_X,list[i].index_Y) --存牌堆 self.card_lists[#self.card_lists+1] =card_view end for j=#self.card_lists,1,-1 do local card_view = self.card_lists[j] card_view.btn_card:RemoveFromParent() self._area_handcard_list:AddChild(card_view.btn_card) card_view.btn_card.xy = self:GetHandCardPos(card_view,#CountCards) end end --牌位置 function M:GetHandCardPos(cards_view,cards) local x,y = 0,0 local card_width = 42 -- 牌的宽度 local middle_x = self._area_handcard_list.width / 2 local start_x = middle_x - (cards / 2 * (card_width)) x = start_x + (card_width) * (cards_view.index_X - 1) y = 0 - (42*cards_view.index_Y) return Vector2.New(x,y) end function M:UpdateOutCardList(outcard) self._area_outcard_list:RemoveChildren(0,-1,true) local outcards =UIPackage.CreateObjectFromURL("ui://Main_RunBeard/Gcm_OutCard") if outcard==0 then outcards:GetChild("icon").icon ="ui://Main_RunBeard/201_1_300" else outcards:GetChild("icon").icon =self:getCardItem("ui://Main_RunBeard/203_",outcard) end outcards.x,outcards.y = 0,0 self._area_outcard_list:AddChild(outcards) end --摸牌动画 function M:PlayingOutCardAnima(card) if(self._area_outcard_list ~=nil and self._area_outcard_list.numChildren>0)then self._area_outcard_list:GetChildAt(0):GetChild("icon").icon =self:getCardItem("ui://Main_RunBeard/202_",card) self._view:GetTransition("t0"):Play() end coroutine.start(function() coroutine.wait(0.1) self:ClearOutCard() end) -- end --摆牌规则 function M:PendulumRule(handcard) local room = DataManager.CurrenRoom local card_list = handcard local card_count = #card_list local cards_map = {} local CountCards = {} for i=1,#card_list do CountCards[card_list[i]]= CountCards[card_list[i]] == nil and 1 or CountCards[card_list[i]] + 1 end --find4 for k,v in pairs(CountCards) do if (v == 4) then local cs = {} cs[1]= k cs[2]= k cs[3]= k cs[4]= k cards_map[#cards_map+1]=cs CountCards[k] = 0 card_count =card_count- 4 end end --find3 for k,v in pairs(CountCards) do if (v >= 3) then local cs = {} cs[1]= k cs[2]= k cs[3]= k cards_map[#cards_map+1]=cs CountCards[k] = CountCards[k] -3 card_count =card_count- 3 end end --find AAa for i = 201, 210 do if CountCards[i]~=nil and CountCards[i] >= 2 then if CountCards[i-100]~=nil and CountCards[i-100] == 1 then local cs = {} cs[1]= i cs[2]= i cs[3]= i-100 cards_map[#cards_map+1]=cs CountCards[i] = CountCards[i]- 2; CountCards[i - 100] = CountCards[i - 100]-1 card_count = card_count-3 end end end --find aaA for i = 101, 110 do if CountCards[i]~=nil and (CountCards[i] >= 2) then if CountCards[i + 100]~=nil and (CountCards[i + 100] == 1) then local cs = {} cs[1]= i cs[2]= i cs[3]= i+100 cards_map[#cards_map+1]=cs CountCards[i] = CountCards[i]- 2; CountCards[i +100] = CountCards[i +100] - 1 card_count = card_count-3 end end end --find2 for k,v in pairs(CountCards) do if (v >= 2) then local cs = {} cs[1] = k cs[2] = k cards_map[#cards_map+1]=cs CountCards[k] = CountCards[k] - 2 card_count =card_count- 2 end end --find 小 2 7 10 local counta = CountCards[102] if counta ~=nil and counta>0 then for i=1,counta do if CountCards[102]~=nil and CountCards[107]~=nil and CountCards[110]~=nil and CountCards[102] >0 and CountCards[107] >0 and CountCards[110] >0 then local cs = {} cs[1]= 102 cs[2]= 107 cs[3]= 110 cards_map[#cards_map+1] = cs CountCards[102] = CountCards[102]-1 CountCards[107] = CountCards[107]-1 CountCards[110] = CountCards[110]-1 card_count = card_count - 3 end end end --find 大 2 7 10 local countA = CountCards[202] if countA ~=nil and countA>0 then for i=1,countA do if CountCards[202]~=nil and CountCards[207]~=nil and CountCards[210]~=nil and CountCards[202] >0 and CountCards[207] >0 and CountCards[210] >0 then local cs = {} cs[1]= 202 cs[2]= 207 cs[3]= 210 cards_map[#cards_map+1]=cs CountCards[202] = CountCards[202]-1 CountCards[207] = CountCards[207]-1 CountCards[210] = CountCards[210]-1 card_count = card_count - 3 end end end --find abc for i=101,110 do if (CountCards[i] ~=nil and CountCards[i + 1] ~=nil and CountCards[i + 2] ~=nil) and (CountCards[i] > 0 and CountCards[i + 1] > 0 and CountCards[i + 2] > 0) then local cs = {} cs[1]= i cs[2]= i+1 cs[3]= i+2 cards_map[#cards_map+1]=cs CountCards[i] = CountCards[i]-1 CountCards[i+1] = CountCards[i+1]-1 CountCards[i+2] = CountCards[i+2]-1 card_count = card_count - 3 end end --find ABC for i=201,210 do if (CountCards[i] ~=nil and CountCards[i + 1] ~=nil and CountCards[i + 2] ~=nil) and (CountCards[i] > 0 and CountCards[i + 1] > 0 and CountCards[i + 2] > 0) then local cs = {} cs[1]= i cs[2]= i+1 cs[3]= i+2 cards_map[#cards_map+1]=cs CountCards[i] = CountCards[i]-1 CountCards[i+1] = CountCards[i+1]-1 CountCards[i+2] = CountCards[i+2]-1 card_count = card_count - 3 end end --find Aa for i = 201, 210 do if CountCards[i]~=nil and CountCards[i] == 1 then if CountCards[i-100]~=nil and CountCards[i-100] == 1 then local cs = {} cs[1]= i cs[2]= i-100 cards_map[#cards_map+1]=cs CountCards[i] = CountCards[i]- 1; CountCards[i - 100] = CountCards[i - 100]-1 card_count = card_count-2 end end end local r_count = 9 - #cards_map local merge = false merge = r_count