local MJPlayerCardInfoView = import(".MJPlayerCardInfoView") local PlayerSelfView = { _dragCom = nil, _carViewList = {} } local M = PlayerSelfView function PlayerSelfView.new(view, mainView, record, direction) setmetatable(M, { __index = MJPlayerCardInfoView }) local self = setmetatable({}, { __index = M }) self._view = view self._mainView = mainView self.direction = direction self:init() return self end function M:init() MJPlayerCardInfoView.init(self) self._view_getCard = self._view:GetChild('Btn_HandCard') self._view_FZTips = self._view:GetChild('Comp_FZTips') self._area_allDown = self._view:GetChild('area_allDown') self._viewBtn_guoHu = self._view:GetChild('btn_guohu') self._viewBtn_buGuoHu = self._view:GetChild('btn_buguohu') self._ctr_seletedGet = self._view:GetController('seletedGetCard') self._ctr_tip = self._view:GetController('tip') self._ctr_showGuoHu = self._view:GetController('showGuoHu') self._area_allDown.onClick:Set(function() self:ClearChoose() end) self._viewBtn_buGuoHu.onClick:Set(function() self._ctr_tip.selectedIndex = 1 end) --动态分配一下子项的宽度 -- self._view_handCardList.itemRenderer = function(index, obj) -- obj.width = self._view_handCardList.width / 13 -- end end function M:ShowHuTip(card_list) printlog("ShowHuTip") local tingList = CardCheck.MuiltiplteCaculateTingPai(card_list, true, DataManager.CurrenRoom.room_config.Qidui, DataManager.CurrenRoom.room_config.Laizi) pt(tingList) if #tingList > 0 then if DataManager.CurrenRoom.laiziInfo and #DataManager.CurrenRoom.laiziInfo > 0 then for i = 1, #DataManager.CurrenRoom.laiziInfo do if IsHasDictionary(DataManager.CurrenRoom.laiziInfo[i], tingList) == false then table.insert(tingList, DataManager.CurrenRoom.laiziInfo[i]) end end end end self._mainView._hu_tip:FillData(tingList) end function M:UpdateHandCard(getcard, mp) local _carViewList = self._carViewList local card_list = DataManager.CurrenRoom.self_player.card_list getcard = getcard or false mp = mp or false self.getcard = getcard if self._view_handCardList.numItems > 0 then self._view_handCardList:RemoveChildren() end if self._view_getCard.numItems > 0 then self._view_getCard:RemoveChildren() end for i = 0, (#card_list) - 1 do local tem_card = card_list[i + 1] local btn_card if getcard and i == (#card_list) - 1 then btn_card = self._view_getCard:AddItemFromPool() btn_card.onClick:Add(function(context) self:ChangeMarkOutCards(context.sender.data.card_item) self:__OnClickGetCard(context) end) printlog("lingmeng getCard", self._view_getCard.width) else btn_card = self._view_handCardList:AddItemFromPool() btn_card.width = (GRoot.inst.width * 0.88 - self._view_handCardList.columnGap * 12) / 13 end -- btn_card.sound = "ui://Main_Majiang/click" self:FillHandCard(i, btn_card, tem_card, true) -- btn_card.onClick:Set(handler(self, self.__OnClickHandCard)) end if getcard then self._ctr_getCard.selectedIndex = 1 else self._ctr_getCard.selectedIndex = 0 end self._view_handCardList.onClickItem:Set(function(context) self._mainView:PlayMJSound("clickCard.mp3") self:ChangeMarkOutCards(context.data.data.card_item) self:__OnClickHandCard(context) end) self:ClearMove() end function M:UpdateHandCardWitness(getcard) self._view_handCardList.columnGap = -10 MJPlayerCardInfoView.UpdateHandCardWitness(self, getcard, true) end function M:onTouchBegin(context) self.touch = true local button = context.sender self.touchPos = Vector2.New(context.inputEvent.x, context.inputEvent.y) self._last_chooseIndex = -1 end function M:onTouchMove(context) local button = context.sender local xy = self._view_handCardList:GlobalToLocal(Vector2.New(context.inputEvent.x, context.inputEvent.y)) self.touchStart = true if xy.y <= -35 or self.isMoive then self.isMoive = true if self.touch then if self.ischoose then if self._ctr_seletedGet.selectedIndex == 0 then button = self._view_getCard:GetChildAt(0) else button = self._view_handCardList:GetChildAt(self._view_handCardList.selectedIndex) end end local xy_event = Vector2.New(context.inputEvent.x, context.inputEvent.y) local xy_btnCard = self._view_getCard:GlobalToLocal(Vector2.New(context.inputEvent.x, context.inputEvent.y)) if self.__OnDragStart then self:__OnDragStart(button, xy_event) end self.touch = false end self:outCardMove(context) else local touchPos = self._view_handCardList:GetChildAt(0):GlobalToLocal(Vector2.New(context.inputEvent.x, context.inputEvent.y)) if touchPos.x < 0 then return end local cardWidth = button.width; local grap = self._view_handCardList.columnGap local chooseIndex = math.floor(touchPos.x / (cardWidth + grap)) if self._last_chooseIndex ~= chooseIndex and self._view_handCardList.selectedIndex ~= chooseIndex then self._last_chooseIndex = chooseIndex self._mainView:PlayMJSound("clickCard.mp3") end if chooseIndex >= self._view_handCardList.numItems then self.ischoose = true if touchPos.x > cardWidth + (cardWidth + grap) * (self._view_handCardList.numItems - 1) and self.getcard then self:ChooseOut() else if self._view_handCardList.selectedIndex ~= self._view_handCardList.numItems - 1 then self:ChooseHand(self._view_handCardList.numItems - 1) end end else print("lingmengonTouchMove", chooseIndex, self._view_handCardList.numItems) self.ischoose = true if self._view_handCardList.selectedIndex ~= chooseIndex then self:ChooseHand(chooseIndex) else end end end -- local card = button.data -- local xy = GRoot.inst:GlobalToLocal(Vector2.New(context.inputEvent.x, context.inputEvent.y)) -- button.xy = xy - card.touch_pos end function M:__OnDragStart(button, xy_event, isGet) button:GetController('move').selectedIndex = 1 local card = button.data --复制一个按钮 local btn_card = self._view_getCard:GetFromPool(nil) self._outCardMove = btn_card self:FillHandCard(card.index, btn_card, card.card_item, false) local xy = GRoot.inst:GlobalToLocal(xy_event) --将虚影按钮替换移动的按钮 -- GRoot.inst:BringToFront(button) GRoot.inst:AddChild(btn_card) self._outCardMove.data = card self._outCardMove.xy = xy - card.touch_pos --设置弹起 -- if isGet then -- self._view_handCardList.selectedIndex = -1 -- self._ctr_seletedGet.selectedIndex = 0 -- else -- self._view_handCardList.selectedIndex = card.index -- self._ctr_seletedGet.selectedIndex = 1 -- end end function M:__OnDragEnd(context) if not self.touchStart then return end local button = context.sender if self.ischoose then if self._ctr_seletedGet.selectedIndex == 0 then button = self._view_getCard:GetChildAt(0) else button = self._view_handCardList:GetChildAt(self._view_handCardList.selectedIndex) end end local card = button.data local _room = DataManager.CurrenRoom if not _room or _room:GetReloadStatus() then return end local xy = self._view_handCardList:GlobalToLocal(Vector2.New(context.inputEvent.x, context.inputEvent.y)) local cardHeight = button.height if ((xy.y < -35 or (context.inputEvent.y - self.touchPos.y < -cardHeight * 0.2)) and _room.curren_outcard_seat == _room.self_player.seat) then -- if ((xy.y < -35 or (self.ischoose and self._ctr_seletedGet.selectedIndex == 0) or (context.inputEvent.y - self.touchPos.y < -cardHeight * 0.2)) and _room.curren_outcard_seat == _room.self_player.seat) then self._mainView:OutCard(card.card_item) self.outcard_button = button self:ClearChoose() else button:GetController('move').selectedIndex = 0 end if self._outCardMove then self._outCardMove:Dispose() end self.isMoive = false self.touch = false self.ischoose = false self.touchStart = false end function M:outCardMove(context) local card = self._outCardMove.data local xy = GRoot.inst:GlobalToLocal(Vector2.New(context.inputEvent.x, context.inputEvent.y)) self._outCardMove.xy = xy - card.touch_pos end function M:ChangeMarkOutCards(card) local lastCard if self._click_index == -1 and self._flag_seletedGet == 0 then self._mainView:markOutCards(true, card) return elseif self._click_index ~= -1 then lastCard = self._view_handCardList:GetChildAt(self._click_index).data.card_item elseif self._flag_seletedGet ~= 0 then lastCard = self._view_getCard:GetChildAt(0).data.card_item end self._mainView:markOutCards(false, lastCard) self._mainView:markOutCards(true, card) end function M:__OnClickHandCard(context) self._ctr_seletedGet.selectedIndex = 1 self._flag_seletedGet = 0 local button = context.data local _room = DataManager.CurrenRoom if _room.curren_outcard_seat == _room.self_player.seat then if self._mainView.clickMode == "single" or Utils.IsDoubleClick(context) or self._click_index == self._view_handCardList.selectedIndex then local card = button.data self._mainView:OutCard(card.card_item) self:ClearChoose() return end end self._click_index = self._view_handCardList.selectedIndex --[[ if ((Utils.IsDoubleClick(context) or self._click_index == self._view_handCardList.selectedIndex) and _room.curren_outcard_seat == _room.self_player.seat) then local card = button.data self._mainView:OutCard(card.card_item) self:ClearChoose() end self._click_index = self._view_handCardList.selectedIndex ]] end function M:__OnClickGetCard(context, flag) self._view_handCardList.selectedIndex = -1 self._click_index = self._view_handCardList.selectedIndex local button = context.sender local _room = DataManager.CurrenRoom if _room.curren_outcard_seat == _room.self_player.seat then if self._mainView.clickMode == "single" or Utils.IsDoubleClick(context) or self._flag_seletedGet == 1 then local card = button.data self._mainView:OutCard(card.card_item) self:ClearChoose() return end end self._flag_seletedGet = 1 --[[ if ((Utils.IsDoubleClick(context) or self._flag_seletedGet == 1) and _room.curren_outcard_seat == _room.self_player.seat) then local card = button.data self._mainView:OutCard(card.card_item) self:ClearChoose() return end ]] end function M:ChooseHand(index) self:ChangeMarkOutCards(self._view_handCardList:GetChildAt(index).data.card_item) self._click_index = index self._view_handCardList.selectedIndex = index self._ctr_seletedGet.selectedIndex = 1 self._flag_seletedGet = 0 end function M:ChooseOut() self:ChangeMarkOutCards(self._view_getCard:GetChildAt(0).data.card_item) self._click_index = -1 self._view_handCardList.selectedIndex = -1 self._ctr_seletedGet.selectedIndex = 0 self._flag_seletedGet = 1 end function M:ClearChoose() if self._click_index and self._click_index ~= -1 then self:ChangeMarkOutCards("") end if self._flag_seletedGet and self._flag_seletedGet ~= -1 and self._view_getCard and self._view_getCard.numItems > 0 then self:ChangeMarkOutCards("") end self._click_index = -1 self._view_handCardList.selectedIndex = -1 self._ctr_seletedGet.selectedIndex = 1 self._flag_seletedGet = 0 end function M:ClearMove() self:ClearChoose() if self._outCardMove then self._outCardMove:Dispose() end self.isMoive = false self.touch = false self.ischoose = false self.touchStart = false end -- 获取手牌资源位置,可以在扩展中复写 function M:GetCardObjPack() return "Main_Majiang" end function M:Clear() MJPlayerCardInfoView.Clear(self) -- self._view_FZTips:RemoveChildren(0, -1, true) self._ctr_seletedGet.selectedIndex = 1 self._ctr_tip.selectedIndex = 0 end return M