jx_client_neibu/lua_probject/main_project/main/majiang/MJPlayerSelfCardInfoView.lua

373 lines
12 KiB
Lua

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:RemoverCardListByIndexGetCardList(index)
local card_list = DataManager.CurrenRoom.self_player.card_list
local tempCardList = {}
for i = 0, (#card_list) - 1 do
if i ~= index then
table.insert(tempCardList, card_list[i + 1])
end
end
return tempCardList
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
self:FillHandCard(i, btn_card, tem_card, true)
local tingList = {}
if getcard then
tingList = self:GetTingList(self:RemoverCardListByIndexGetCardList(i))
end
btn_card:GetController('ting').selectedIndex = (tingList and #tingList > 0) and 1 or 0
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
self:ShowHuTip(self:RemoverCardListByIndexGetCardList(self._view_handCardList.selectedIndex))
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