2025-08-01 00:33:26 +08:00
|
|
|
local CookingBench = {}
|
2025-08-07 00:15:18 +08:00
|
|
|
local Utils = require("GamePlay.Utils")
|
|
|
|
|
local Emitter = require("Utils.Emitter")
|
|
|
|
|
local CookManager = require("GamePlay.CookSystem.CookManager")
|
2025-08-01 00:33:26 +08:00
|
|
|
local KismetSystemLibrary = import("KismetSystemLibrary")
|
|
|
|
|
local ESlateVisibility = import("ESlateVisibility")
|
|
|
|
|
|
2025-08-07 00:15:18 +08:00
|
|
|
|
|
|
|
|
--- 获取每次tick温度下降速度
|
|
|
|
|
local function GetCoolingRate(wco)
|
|
|
|
|
return 0.5
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--- 获取每次点火的效率
|
|
|
|
|
local function GetHeatingEfficiency(wco)
|
|
|
|
|
return 8
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local function GetMaxTemperature(wco)
|
|
|
|
|
return 210
|
|
|
|
|
end
|
|
|
|
|
|
2025-08-01 00:33:26 +08:00
|
|
|
function CookingBench:ctor()
|
|
|
|
|
self.is_cooking = false
|
|
|
|
|
self.temperature = 0
|
|
|
|
|
self.max_temperature = 200
|
2025-08-07 00:15:18 +08:00
|
|
|
|
|
|
|
|
|
2025-08-01 00:33:26 +08:00
|
|
|
self.burn_timer = nil
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function CookingBench:OnInitialized()
|
|
|
|
|
self.WBP_Rabbit.OnClicked:Add(function() self:OnRabbitClicked()end)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function CookingBench:Construct()
|
2025-08-07 00:15:18 +08:00
|
|
|
CookManager:Reset()
|
2025-08-01 00:33:26 +08:00
|
|
|
self:UpdateCookState()
|
|
|
|
|
self:UpdateFireState()
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function CookingBench:Destruct()
|
|
|
|
|
self.is_cooking = false
|
|
|
|
|
self:UpdateFireState()
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function CookingBench:OnRabbitClicked()
|
|
|
|
|
if self.is_cooking then
|
2025-08-07 00:15:18 +08:00
|
|
|
local max = GetMaxTemperature(self)
|
|
|
|
|
local once = GetHeatingEfficiency(self)
|
|
|
|
|
local new_value = self.temperature + once
|
|
|
|
|
if new_value > max then
|
|
|
|
|
self.temperature = max
|
2025-08-01 00:33:26 +08:00
|
|
|
else
|
|
|
|
|
self.temperature = new_value
|
|
|
|
|
end
|
|
|
|
|
else
|
|
|
|
|
self.is_cooking = true
|
2025-08-07 00:15:18 +08:00
|
|
|
self.temperature = 50
|
|
|
|
|
|
2025-08-01 00:33:26 +08:00
|
|
|
self.burn_timer = KismetSystemLibrary.K2_SetTimerDelegate(
|
2025-08-07 00:15:18 +08:00
|
|
|
slua.createDelegate(function() self:CookTick() end),
|
|
|
|
|
1 / 30, true, true, 0, 0
|
2025-08-01 00:33:26 +08:00
|
|
|
)
|
|
|
|
|
end
|
|
|
|
|
self:UpdateCookState()
|
|
|
|
|
self:UpdateFireState()
|
|
|
|
|
end
|
|
|
|
|
|
2025-08-07 00:15:18 +08:00
|
|
|
--- 每秒30次tick
|
|
|
|
|
function CookingBench:CookTick()
|
|
|
|
|
local drop_value = GetCoolingRate(self)
|
|
|
|
|
local new_value = self.temperature - drop_value
|
|
|
|
|
if new_value > 0 then
|
|
|
|
|
self.temperature = new_value
|
|
|
|
|
CookManager:Tick(self.temperature, 1 / 30)
|
|
|
|
|
else
|
|
|
|
|
self.temperature = 0
|
|
|
|
|
self.is_cooking = false
|
|
|
|
|
KismetSystemLibrary.K2_ClearTimerHandle(self, self.burn_timer)
|
|
|
|
|
self.burn_timer = nil
|
|
|
|
|
end
|
|
|
|
|
self:UpdateCookState()
|
|
|
|
|
self:UpdateFireState()
|
|
|
|
|
end
|
|
|
|
|
|
2025-08-01 00:33:26 +08:00
|
|
|
function CookingBench:UpdateCookState()
|
|
|
|
|
if self.temperature > 0 then
|
|
|
|
|
self.WBP_CookingProcess:SetVisible(true)
|
|
|
|
|
local percent = self.temperature / self.max_temperature
|
|
|
|
|
self.WBP_CookingProcess.TemperatureProcess:SetPercent(percent)
|
|
|
|
|
else
|
|
|
|
|
self.WBP_CookingProcess:SetVisible(false)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function CookingBench:UpdateFireState()
|
|
|
|
|
if self.is_cooking == true then
|
|
|
|
|
self.CookingFireImg:SetVisibility(ESlateVisibility.SelfHitTestInvisible)
|
|
|
|
|
else
|
|
|
|
|
self.CookingFireImg:SetVisibility(ESlateVisibility.Collapsed)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return Class(nil, nil, CookingBench)
|