--> 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() -- 初始化设置 -- ceshi1 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