184 lines
6.4 KiB
Plaintext
184 lines
6.4 KiB
Plaintext
--> Services
|
||
local ReplicatedStorage = game:GetService("ReplicatedStorage")
|
||
|
||
--> Dependencies
|
||
local UIWindow = require(ReplicatedStorage.Base.UIWindow)
|
||
local UIEnums = require(ReplicatedStorage.Base.UIEnums)
|
||
|
||
--> Json
|
||
local JsonLevel = require(ReplicatedStorage.Json.Level)
|
||
local JsonForge = require(ReplicatedStorage.Json.Forge)
|
||
|
||
local Utils = require(ReplicatedStorage.Tools.Utils)
|
||
|
||
--> Events
|
||
local RE_ChallengeBoss = ReplicatedStorage.Events.RE_ChallengeBoss
|
||
|
||
local LocalPlayer = game:GetService("Players").LocalPlayer
|
||
|
||
--------------------------------------------------------------------------------
|
||
|
||
local MainWindow = {}
|
||
MainWindow.__index = MainWindow
|
||
setmetatable(MainWindow, {__index = UIWindow})
|
||
|
||
function MainWindow:Init(UIManager: table, Data: table?)
|
||
local self = UIWindow:Init(UIManager, Data)
|
||
setmetatable(self, MainWindow)
|
||
self.Variables = {
|
||
["_btnMainCreate"] = 0,
|
||
["_btnMainCha"] = 0,
|
||
["_btnMainAttributeUpgrade"] = 0,
|
||
|
||
-- 关卡
|
||
["_tmpNowLevel"] = 0,
|
||
["_imgBoss"] = 0,
|
||
["_btnChallengeBoss"] = 0,
|
||
|
||
-- 锻造条
|
||
["_goForgeBar"] = 0,
|
||
["_goForgeFill"] = 0,
|
||
["_tmpForgeMoney"] = 0,
|
||
["_tmpForgeTime"] = 0,
|
||
}
|
||
self.UIRootName = "ui_w_main"
|
||
self.UIParentName = UIEnums.UIParent.UIRoot
|
||
|
||
return self
|
||
end
|
||
|
||
-- 设置关卡显示
|
||
function MainWindow:SetShowLevel(level: number)
|
||
self.Variables["_tmpNowLevel"].Text = string.format("第%d关", level)
|
||
local levelData = Utils:GetIdDataFromJson(JsonLevel, level)
|
||
if levelData.type == 2 then
|
||
self.Variables["_imgBoss"].Visible = true
|
||
else
|
||
self.Variables["_imgBoss"].Visible = false
|
||
end
|
||
end
|
||
|
||
-- 设置boss挑战按钮显示
|
||
function MainWindow:SetShowBossChallenge(newValue: number)
|
||
local playerDataFolder = game.Workspace:WaitForChild("Level"):WaitForChild(LocalPlayer.UserId)
|
||
local ProgressFolder = playerDataFolder:WaitForChild("Progress")
|
||
local mainValue = ProgressFolder:FindFirstChild("Main").Value
|
||
local levelIdValue = playerDataFolder:WaitForChild("Challenge"):WaitForChild("LevelId").Value
|
||
|
||
if levelIdValue == mainValue then
|
||
self.Variables["_btnChallengeBoss"].Visible = false
|
||
else
|
||
self.Variables["_btnChallengeBoss"].Visible = (newValue == mainValue)
|
||
end
|
||
end
|
||
|
||
-- 手动点击按钮,挑战boss
|
||
function MainWindow:OnClickChallengeBoss()
|
||
RE_ChallengeBoss:FireServer()
|
||
|
||
self.Variables["_btnChallengeBoss"].Visible = false
|
||
end
|
||
|
||
function MainWindow:SetShowForgeBar(nowForgeTime : number, moneyValue: number)
|
||
local maxForgeId = Utils:GetMaxIdFromJson(JsonForge)
|
||
local forgeTime = nowForgeTime > maxForgeId and maxForgeId or nowForgeTime
|
||
local forgeData = Utils:GetIdDataFromJson(JsonForge, forgeTime)
|
||
|
||
-- 进度条
|
||
self.Variables["_goForgeFill"].Size = UDim2.new(math.min(moneyValue / forgeData.cost[2], 1), 0, 1, 0)
|
||
self.Variables["_tmpForgeMoney"].Text = string.format("%d/%d", moneyValue, forgeData.cost[2])
|
||
|
||
-- 右上角红点
|
||
local timeRecorder = math.ceil(moneyValue / forgeData.cost[2])
|
||
if timeRecorder > 0 then
|
||
self.Variables["_tmpForgeTime"].Visible = true
|
||
self.Variables["_tmpForgeTime"].Text = timeRecorder
|
||
else
|
||
self.Variables["_tmpForgeTime"].Visible = false
|
||
end
|
||
end
|
||
|
||
function MainWindow:OnOpenWindow()
|
||
UIWindow.OnOpenWindow(self)
|
||
|
||
local createCon = self.Variables["_btnMainCreate"].Activated:Connect(function()
|
||
self.UIManager:OpenWindow("CreateWindow")
|
||
end)
|
||
local chaCon = self.Variables["_btnMainCha"].Activated:Connect(function()
|
||
self.UIManager:OpenWindow("ChaWindow")
|
||
end)
|
||
local attributeUpgradeCon = self.Variables["_btnMainAttributeUpgrade"].Activated:Connect(function()
|
||
self.UIManager:OpenWindow("AttributeLvupWindow")
|
||
end)
|
||
local challengeBossCon = self.Variables["_btnChallengeBoss"].Activated:Connect(function()
|
||
self:OnClickChallengeBoss()
|
||
end)
|
||
|
||
table.insert(self.Connections, createCon)
|
||
table.insert(self.Connections, chaCon)
|
||
table.insert(self.Connections, attributeUpgradeCon)
|
||
table.insert(self.Connections, challengeBossCon)
|
||
|
||
-- TODO: 暂时用主关卡数显示,我记得之前这里主要是记录的,Challenge中才是正在挑战的内容
|
||
-- TODO: 之后LevelProxy也应该挪到ReplicatedStorage下,之前可能是因为觉得Challenge是临时的内容所以放在workspace下,但是逻辑做的不统一
|
||
local playerDataFolder = game.Workspace:WaitForChild("Level"):WaitForChild(LocalPlayer.UserId)
|
||
local StatsFolder = playerDataFolder:WaitForChild("Challenge")
|
||
local ProgressFolder = playerDataFolder:WaitForChild("Progress")
|
||
|
||
local levelCon = StatsFolder.LevelId.Changed:Connect(function(newValue)
|
||
self:SetShowLevel(newValue)
|
||
self:SetShowBossChallenge(ProgressFolder.BossFail.Value)
|
||
end)
|
||
local bossChallengeCon = ProgressFolder.BossFail.Changed:Connect(function(newValue)
|
||
self:SetShowBossChallenge(newValue)
|
||
end)
|
||
|
||
-- 初始值设置
|
||
self:SetShowLevel(StatsFolder.LevelId.Value)
|
||
self:SetShowBossChallenge(ProgressFolder.BossFail.Value)
|
||
|
||
table.insert(self.Connections, levelCon)
|
||
table.insert(self.Connections, bossChallengeCon)
|
||
|
||
|
||
-- 货币进度条显示
|
||
local rePlayerDataFolder = Utils:GetPlayerDataFolder(LocalPlayer)
|
||
local playerInfoFolder = rePlayerDataFolder:WaitForChild("PlayerInfo")
|
||
local forgeInstance = playerInfoFolder:WaitForChild("Stats"):WaitForChild("forge")
|
||
|
||
local itemFolder = playerInfoFolder:WaitForChild("Items")
|
||
local hasItem = playerInfoFolder:FindFirstChild("2")
|
||
|
||
-- 设置锻造货币变动链接
|
||
local function SetForgeCostChange()
|
||
local costChangeCon = hasItem.Changed:Connect(function(newValue)
|
||
self:SetShowForgeBar(forgeInstance.Value, newValue)
|
||
end)
|
||
table.insert(self.Connections, costChangeCon)
|
||
end
|
||
|
||
if hasItem then
|
||
-- 后续变动设置
|
||
SetForgeCostChange()
|
||
-- 初始化设置
|
||
self:SetShowForgeBar(forgeInstance.Value, hasItem.Value)
|
||
else
|
||
-- 没有货币时监听设置
|
||
local addCon
|
||
addCon = itemFolder.ChildAdded:Connect(function(child)
|
||
if child.Name == "2" then
|
||
self:SetShowForgeBar(forgeInstance.Value, child.Value)
|
||
addCon:Disconnect()
|
||
addCon = nil
|
||
|
||
SetForgeCostChange()
|
||
end
|
||
end)
|
||
table.insert(self.Connections, addCon)
|
||
end
|
||
|
||
end
|
||
|
||
|
||
|
||
return MainWindow |