PGRData/Script/matrix/xui/xuifubenroguelike/XUiRogueLikeStoryEntrance.lua

268 lines
No EOL
11 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

local XUiRogueLikeStoryEntrance = XClass(nil, "XUiRogueLikeStoryEntrance")
function XUiRogueLikeStoryEntrance:Ctor(ui, uiRoot)
self.GameObject = ui.gameObject
self.Transform = ui.transform
self.UiRoot = uiRoot
XTool.InitUiObject(self)
self.OptionsList = {}
end
function XUiRogueLikeStoryEntrance:UpdateByNode(node)
self.Node = node
self.NodeTemplate = XFubenRogueLikeConfig.GetNodeTemplateById(self.Node.Id)
self.NodeConfig = XFubenRogueLikeConfig.GetNodeConfigteById(self.Node.Id)
local sectionInfo = XDataCenter.FubenRogueLikeManager.GetCurSectionInfo()
local selectNodeInfo = sectionInfo.SelectNodeInfo[self.Node.Id]
if not selectNodeInfo then return end
self.EventId = selectNodeInfo.EventId
self.EventTemplate = XFubenRogueLikeConfig.GetEventTemplateById(self.EventId)
if not self.EventTemplate then return end
self.TxtName.text = self.NodeConfig.Name
self.RImgIcon:SetRawImage(self.NodeConfig.Icon)
self.TxtStory.text = self.NodeConfig.Description
self:ShowSpecialEventGroupView()
--[[不存在单个事件组、统一当成多个事件组
-- 根据事件类型收集
if XFubenRogueLikeConfig.IsSpecialGroupType(self.NodeTemplate.Type) then
self:ShowSpecialEventGroupView()
else
-- 展示event表中的选项拱玩家选择
self:ShowSpecialEventView()
end
--]]
end
-- 显示事件组特殊事件
function XUiRogueLikeStoryEntrance:ShowSpecialEventGroupView()
-- self.SpecailEventGroupTemplate = XFubenRogueLikeConfig.GetSepcialEventGroupTemplateById(self.EventId)
self.SpecialEventGroupConfig = XFubenRogueLikeConfig.GetSpecialEventGroupConfigById(self.EventId)
self.CurrentGroupItemConfig = XFubenRogueLikeConfig.GetSpecialEventGroupItemConfigById(self.SpecialEventGroupConfig.GroupItemId)
self:UpdateSpecialEventGroupItem()
end
-- 更新跳转页面
function XUiRogueLikeStoryEntrance:UpdateSpecialEventGroupItem()
self.SpecialEventGroupList = {}
if self.SpecialEventGroupConfig.IsEnd == 1 then
self.TxtName.text = self.NodeConfig.Name
self.RImgIcon:SetRawImage(self.NodeConfig.Icon)
self.TxtStory.text = self.NodeConfig.Description
for i = 1, #self.EventTemplate.Param do
local groupId = self.EventTemplate.Param[i]
table.insert(self.SpecialEventGroupList, {
OptionId = groupId,
IsEnd = true,
Title = self.SpecialEventGroupConfig.OptionDesc[i],
})
end
if self.SpecialEventGroupConfig.HasLeave == 1 then
table.insert(self.SpecialEventGroupList, {
IsEnd = false,
IsLeave = true,
Title = CS.XTextManager.GetText("RogueLikeOptionLeave")
})
end
elseif self.CurrentGroupItemConfig.IsEnd == 1 then
self.TxtName.text = self.CurrentGroupItemConfig.Title
self.RImgIcon:SetRawImage(self.CurrentGroupItemConfig.Icon)
self.TxtStory.text = self.CurrentGroupItemConfig.Description
for i = 1, #self.CurrentGroupItemConfig.OptionId do
local optionIdx = self.CurrentGroupItemConfig.OptionId[i]
local groupId = self.EventTemplate.Param[optionIdx]
table.insert(self.SpecialEventGroupList, {
OptionId = groupId,
IsEnd = true,
Title = self.SpecialEventGroupConfig.OptionDesc[optionIdx],
})
end
if self.SpecialEventGroupConfig.HasLeave == 1 then
table.insert(self.SpecialEventGroupList, {
IsEnd = false,
IsLeave = true,
Title = CS.XTextManager.GetText("RogueLikeOptionLeave")
})
end
else
self.TxtName.text = self.CurrentGroupItemConfig.Title
self.RImgIcon:SetRawImage(self.CurrentGroupItemConfig.Icon)
self.TxtStory.text = self.CurrentGroupItemConfig.Description
for i = 1, #self.CurrentGroupItemConfig.OptionId do
local optionId = self.CurrentGroupItemConfig.OptionId[i]
table.insert(self.SpecialEventGroupList, {
OptionId = optionId,
IsEnd = false,
Title = self.CurrentGroupItemConfig.OptionDesc[i]
})
end
if self.CurrentGroupItemConfig.HasLeave == 1 then
table.insert(self.SpecialEventGroupList, {
IsEnd = false,
IsLeave = true,
Title = CS.XTextManager.GetText("RogueLikeOptionLeave")
})
end
end
for i = 1, #self.SpecialEventGroupList do
local specialEventGroupItem = self.SpecialEventGroupList[i]
if not self.OptionsList[i] then
local optionUi = CS.UnityEngine.Object.Instantiate(self.BtnOption)
optionUi.transform:SetParent(self.PanelOption.transform, false)
self.OptionsList[i] = optionUi.transform:GetComponent("XUiButton")
self.OptionsList[i].CallBack = function() self:OnSubOptionsClick(i) end
end
self.OptionsList[i].gameObject:SetActiveEx(true)
self.OptionsList[i]:SetNameByGroup(0, specialEventGroupItem.Title)
end
for i = #self.SpecialEventGroupList + 1, #self.OptionsList do
self.OptionsList[i].gameObject:SetActiveEx(false)
end
end
-- 点击特殊事件的子选项
function XUiRogueLikeStoryEntrance:OnSubOptionsClick(index)
if self.SpecialEventGroupList and self.SpecialEventGroupList[index] and self.Node then
local specialEventGroupItem = self.SpecialEventGroupList[index]
-- 离开选项
if specialEventGroupItem.IsLeave then
XDataCenter.FubenRogueLikeManager.FinishNode(self.Node.Id, function()
self.UiRoot:Close()
end)
else
-- 非离开选项
-- 结束
if specialEventGroupItem.IsEnd then
-- 检查兑换物品选项
local specialEventGroupTemplate = XFubenRogueLikeConfig.GetSepcialEventGroupTemplateById(specialEventGroupItem.OptionId)
for i = 1, #specialEventGroupTemplate.EventId do
local currentEventId = specialEventGroupTemplate.EventId[i]
local specialEventTemplate = XFubenRogueLikeConfig.GetSpecialEventTemplateById(currentEventId)
if self:CheckExchangeItem(specialEventTemplate) then
return
end
end
XDataCenter.FubenRogueLikeManager.SelectSpecialEventGroup(self.Node.Id, specialEventGroupItem.OptionId, function()
self.UiRoot:Close()
end)
else
-- 更新选项
self.CurrentGroupItemConfig = XFubenRogueLikeConfig.GetSpecialEventGroupItemConfigById(specialEventGroupItem.OptionId)
self:UpdateSpecialEventGroupItem()
end
end
end
end
-- 显示一般的特殊事件
function XUiRogueLikeStoryEntrance:ShowSpecialEventView()
local eventId = self.NodeTemplate.Param[1]
self.EventTemplate = XFubenRogueLikeConfig.GetEventTemplateById(eventId)
if not self.EventTemplate then
XLog.ErrorTableDataNotFound("XFubenRogueLikeConfig.GetEventTemplateById",
"RogueLikeEvent", "Share/Fuben/RogueLike/RogueLikeEvent.tab", "Id", tostring(eventId))
return
end
self.SpecitalEventList = {}
for i = 1, #self.EventTemplate.Param do
local specialEventId = self.EventTemplate.Param[i]
local specialTemplate = XFubenRogueLikeConfig.GetSpecialEventTemplateById(specialEventId)
local specialConfig = XFubenRogueLikeConfig.GetSpecialEventConfigById(specialEventId)
table.insert(self.SpecitalEventList, {
SpecitalEventId = specialEventId,
SpecialTemplate = specialTemplate,
SpecialConfig = specialConfig,
})
end
for i = 1, #self.SpecitalEventList do
local specailEventItems = self.SpecitalEventList[i]
if not self.OptionsList[i] then
local optionUi = CS.UnityEngine.Object.Instantiate(self.BtnOption)
optionUi.transform:SetParent(self.PanelOption.transform, false)
self.OptionsList[i] = optionUi.transform:GetComponent("XUiButton")
self.OptionsList[i].CallBack = function() self:OnOptionsClick(i) end
end
self.OptionsList[i].gameObject:SetActiveEx(true)
self.OptionsList[i]:SetNameByGroup(0, specailEventItems.SpecialConfig.Title)
end
-- 处理多余的
for i = #self.SpecitalEventList + 1, #self.OptionsList do
self.OptionsList[i].gameObject:SetActiveEx(false)
end
end
-- 点击选项
function XUiRogueLikeStoryEntrance:OnOptionsClick(index)
if self.SpecitalEventList and self.SpecitalEventList[index] and self.Node then
local specialEventId = self.SpecitalEventList[index].SpecitalEventId
local specialTemplate = self.SpecitalEventList[index].SpecialTemplate
-- 检查兑换物品
-- 兑换所需{0}{1}不足
if self:CheckExchangeItem(specialTemplate) then
return
end
XDataCenter.FubenRogueLikeManager.SelectSpecialEvent(self.Node.Id, specialEventId, function()
-- 打开获得界面
self.UiRoot:Close()
XLuaUiManager.Open("UiRogueLikeStoryResult", specialEventId, XFubenRogueLikeConfig.SpecialResultType.SingleEvent)
end)
end
end
-- 检查减少行动点
function XUiRogueLikeStoryEntrance:CheckCostActionPoint(specialTemplate)
if specialTemplate.Type == XFubenRogueLikeConfig.XRLOtherEventType.ActionPoint then
local needActionPoint = specialTemplate.Param[1]
local ownActionPoint = XDataCenter.FubenRogueLikeManager.GetRogueLikeActionPoint()
if needActionPoint > ownActionPoint then
XUiManager.TipMsg(CS.XTextManager.GetText("RogueLikeOutOfActionPoint", needActionPoint))
return true
end
end
return false
end
-- 检查消耗物品
function XUiRogueLikeStoryEntrance:CheckConsumeItem(specialTemplate)
if specialTemplate.Type == XFubenRogueLikeConfig.XRLOtherEventType.ConsumeItem then
local itemId = specialTemplate.Param[1]
local itemName = XDataCenter.ItemManager.GetItemName(itemId)
local itemNum = specialTemplate.Param[2]
local ownCount = XDataCenter.ItemManager.GetCount(itemId)
if itemNum > ownCount then
XUiManager.TipMsg(CS.XTextManager.GetText("RogueLikeCostItemTips", itemNum, itemName))
return true
end
end
return false
end
-- 兑换物品检查
function XUiRogueLikeStoryEntrance:CheckExchangeItem(specialTemplate)
if specialTemplate.Type == XFubenRogueLikeConfig.XRLOtherEventType.ExchangeItem then
local shopItemId = specialTemplate.Param[1]
local shopItemTemplate = XFubenRogueLikeConfig.GetShopItemTemplateById(shopItemId)
local itemId = shopItemTemplate.ConsumeId[1]
local itemName = XDataCenter.ItemManager.GetItemName(itemId)
local itemNum = shopItemTemplate.ConsumeNum[1]
local ownCount = XDataCenter.ItemManager.GetCount(itemId)
if itemNum > ownCount then
XUiManager.TipMsg(CS.XTextManager.GetText("RogueLikeExchangeItemTips", itemNum, itemName))
return true
end
end
return false
end
return XUiRogueLikeStoryEntrance