2025-07-31 19:36:32 +08:00

184 lines
6.4 KiB
Plaintext
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.

--> 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