forked from endernon/PGRData
209 lines
No EOL
7.6 KiB
Lua
209 lines
No EOL
7.6 KiB
Lua
local XUiAssignSelectCharacter = XLuaUiManager.Register(XLuaUi, "UiAssignSelectCharacter")
|
||
|
||
local XUiPanelCharacterOwnedInfo = require("XUi/XUiCharacter/XUiPanelCharacterOwnedInfo")
|
||
local XUiGridSelectCharacter = require("XUi/XUiAssign/XUiGridSelectCharacter")
|
||
local XUiGridCondition = require("XUi/XUiExhibition/XUiGridCondition")
|
||
local XUiPanelRoleModel = require("XUi/XUiCharacter/XUiPanelRoleModel")
|
||
local ConditionDesNum = 2
|
||
|
||
function XUiAssignSelectCharacter:OnAwake()
|
||
self:InitButton()
|
||
self:InitModel()
|
||
self:InitDynamicTable()
|
||
|
||
self.CurrCharacter = nil
|
||
self.CurrListIndex = 1
|
||
self.ConditionGrids = {}
|
||
end
|
||
|
||
function XUiAssignSelectCharacter:OnStart(chapterId, targetCharacter)
|
||
self.ChapterId = chapterId
|
||
self.TargetCharacter = targetCharacter
|
||
|
||
self.Chapter = XDataCenter.FubenAssignManager.GetChapterDataById(self.ChapterId)
|
||
end
|
||
|
||
function XUiAssignSelectCharacter:InitButton()
|
||
XUiHelper.RegisterClickEvent(self, self.BtnBack, self.Close)
|
||
XUiHelper.RegisterClickEvent(self, self.BtnMainUi, function() XLuaUiManager.RunMain() end)
|
||
XUiHelper.RegisterClickEvent(self, self.BtnJoin, self.OnBtnJoinClick)
|
||
XUiHelper.RegisterClickEvent(self, self.BtnQuit, self.OnBtnQuitClick)
|
||
|
||
self.AssetPanel = XUiPanelAsset.New(self, self.PanelAsset, XDataCenter.ItemManager.ItemId.FreeGem, XDataCenter.ItemManager.ItemId.ActionPoint, XDataCenter.ItemManager.ItemId.Coin)
|
||
|
||
-- 装备面板
|
||
self.PanelCharacterOwnedInfo = XUiPanelCharacterOwnedInfo.New(self, self.Transform)
|
||
self.PanelCharacterOwnedInfo:Init()
|
||
end
|
||
|
||
function XUiAssignSelectCharacter:InitModel()
|
||
local root = self.UiModelGo.transform
|
||
self.PanelRoleModel = root:FindTransform("PanelRoleModel")
|
||
self.ImgEffectHuanren = root:FindTransform("ImgEffectHuanren")
|
||
self.ImgEffectHuanren1 = root:FindTransform("ImgEffectHuanren1")
|
||
self.RoleModelPanel = XUiPanelRoleModel.New(self.PanelRoleModel, self.Name, nil, true, nil, true)
|
||
end
|
||
|
||
function XUiAssignSelectCharacter:InitDynamicTable()
|
||
self.DynamicTable = XDynamicTableNormal.New(self.SViewCharacterList)
|
||
self.DynamicTable:SetProxy(XUiGridSelectCharacter, self)
|
||
self.DynamicTable:SetDelegate(self)
|
||
end
|
||
|
||
function XUiAssignSelectCharacter:OnEnable()
|
||
self:UpdateCharacters()
|
||
self:UpdateRightCharacterInfo()
|
||
end
|
||
|
||
function XUiAssignSelectCharacter:RoleSortFun(list)
|
||
local currOccList = {} --当前chapter驻守的
|
||
local unInOccList = {} -- 符合条件 未驻守
|
||
local inOccupyList = {} -- 符合条件 已驻守在其他chapter
|
||
local unConditionList = {} -- 不符合条件
|
||
for k, character in pairs(list) do
|
||
if self.Chapter:IsCharConditionMatch(character.Id) then
|
||
if XDataCenter.FubenAssignManager.CheckCharacterInOccupy(character.Id) then
|
||
if XDataCenter.FubenAssignManager.GetCharacterOccupyChapterId(character.Id) == self.ChapterId then
|
||
table.insert(currOccList, character)
|
||
else
|
||
table.insert(inOccupyList, character)
|
||
end
|
||
else
|
||
table.insert(unInOccList, character)
|
||
end
|
||
else
|
||
table.insert(unConditionList, character)
|
||
end
|
||
end
|
||
|
||
local tempList = appendArray(currOccList, unInOccList)
|
||
tempList = appendArray(tempList, inOccupyList)
|
||
tempList = appendArray(tempList, unConditionList)
|
||
return tempList
|
||
end
|
||
|
||
-- 刷新左边角色列表
|
||
function XUiAssignSelectCharacter:UpdateCharacters()
|
||
local roleList = XDataCenter.CharacterManager.GetOwnCharacterList()
|
||
roleList = self:RoleSortFun(roleList)
|
||
local index = 1
|
||
if self.TargetCharacter then
|
||
for k, character in pairs(roleList) do
|
||
if self.TargetCharacter == character then
|
||
index = k
|
||
end
|
||
end
|
||
end
|
||
self:UpdateDynamicTable(roleList, index)
|
||
end
|
||
|
||
function XUiAssignSelectCharacter:UpdateDynamicTable(list, index)
|
||
self.CurrShowList = list
|
||
self.CurrListIndex = index
|
||
self.DynamicTable:SetDataSource(list)
|
||
self.DynamicTable:ReloadDataASync(index or 1)
|
||
end
|
||
|
||
-- 角色被选中
|
||
function XUiAssignSelectCharacter:OnGridSelected(character)
|
||
if character == self.CurrCharacter then
|
||
return
|
||
end
|
||
|
||
self.CurrCharacter = character
|
||
self:UpdateRightCharacterInfo()
|
||
self:UpdateRoleModel()
|
||
end
|
||
|
||
-- 刷新条件解锁信息
|
||
function XUiAssignSelectCharacter:UpdateConditionInfo()
|
||
local conditionIds = self.Chapter:GetSelectCharCondition()
|
||
for i = 1, ConditionDesNum do
|
||
local conditionGrid = self.ConditionGrids[i]
|
||
if not conditionGrid then
|
||
conditionGrid = XUiGridCondition.New(self["GridCondition" .. i])
|
||
self.ConditionGrids[i] = conditionGrid
|
||
end
|
||
conditionGrid:Refresh(conditionIds[i], self.CurrCharacter.Id)
|
||
end
|
||
end
|
||
|
||
-- 刷新右边角色信息
|
||
function XUiAssignSelectCharacter:UpdateRightCharacterInfo()
|
||
if not self.CurrCharacter then
|
||
return
|
||
end
|
||
|
||
local characterId = self.CurrCharacter.Id
|
||
|
||
-- 装备面板
|
||
self.PanelCharacterOwnedInfo:UpdateView(characterId)
|
||
|
||
local isOccupyChar = self.Chapter:GetCharacterId() == self.CurrCharacter.Id
|
||
self.BtnJoin.gameObject:SetActiveEx(not isOccupyChar and self.Chapter:IsCharConditionMatch(self.CurrCharacter.Id))
|
||
self.BtnQuit.gameObject:SetActiveEx(isOccupyChar)
|
||
self.TxtConditionTitle.text = CS.XTextManager.GetText("AssignSendMemberCalled")
|
||
|
||
self:UpdateConditionInfo()
|
||
end
|
||
|
||
-- 刷新3D模型
|
||
function XUiAssignSelectCharacter:UpdateRoleModel()
|
||
if not self.CurrCharacter then
|
||
return
|
||
end
|
||
|
||
self.ImgEffectHuanren.gameObject:SetActiveEx(false)
|
||
local cb = function(model)
|
||
self.PanelDrag.Target = model.transform
|
||
self.ImgEffectHuanren.gameObject:SetActiveEx(true)
|
||
end
|
||
|
||
--MODEL_UINAME对应UiModelTransform表,设置模型位置
|
||
self.RoleModelPanel:UpdateCharacterModel(self.CurrCharacter.Id, self.PanelRoleModel, XModelManager.MODEL_UINAME.XUiSuperSmashBrosCharacter, cb)
|
||
end
|
||
|
||
function XUiAssignSelectCharacter:OnDynamicTableEvent(event, index, grid)
|
||
if event == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_ATINDEX then
|
||
local isCurrSelected = self.CurrListIndex == index
|
||
grid:Refresh(self.CurrShowList[index], self.Chapter)
|
||
grid:SetSelect(isCurrSelected)
|
||
if isCurrSelected then
|
||
self.CurrGrid = grid
|
||
end
|
||
elseif event == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_TOUCHED then
|
||
self.CurrGrid:SetSelect(false)
|
||
grid:SetSelect(true)
|
||
self.CurrGrid = grid
|
||
self.CurrListIndex = index
|
||
end
|
||
end
|
||
|
||
function XUiAssignSelectCharacter:OnBtnJoinClick()
|
||
local selectCharacterId = self.CurrCharacter.Id
|
||
|
||
if not self.Chapter:IsCharConditionMatch(selectCharacterId) then
|
||
XUiManager.TipMsg(CS.XTextManager.GetText("AssignSelectNotMatch")) -- "该成员不符合条件"
|
||
return
|
||
end
|
||
|
||
local inOtherChapterId = XDataCenter.FubenAssignManager.GetCharacterOccupyChapterId(selectCharacterId)
|
||
if inOtherChapterId and inOtherChapterId ~= self.ChapterId then
|
||
XUiManager.TipMsg(CS.XTextManager.GetText("AssignSelectIsUsed")) -- "该成员已在其他区域驻守"
|
||
return
|
||
end
|
||
|
||
XDataCenter.FubenAssignManager.AssignSetCharacterRequest(self.ChapterId, selectCharacterId, function()
|
||
self:Close()
|
||
XUiManager.TipMsg(CS.XTextManager.GetText("AssignOccupySelected")) -- 驻守成功
|
||
end)
|
||
end
|
||
|
||
function XUiAssignSelectCharacter:OnBtnQuitClick()
|
||
local selectCharacterId = 0
|
||
|
||
XDataCenter.FubenAssignManager.AssignSetCharacterRequest(self.ChapterId, selectCharacterId, function()
|
||
self:Close()
|
||
XUiManager.TipMsg(CS.XTextManager.GetText("AssignOccupyUnselected")) -- 卸下成功
|
||
end)
|
||
end |