local CookingBench = {} local Utils = require("GamePlay.Utils") local Emitter = require("Utils.Emitter") local CookManager = require("GamePlay.CookSystem.CookManager") local KismetSystemLibrary = import("KismetSystemLibrary") local ESlateVisibility = import("ESlateVisibility") --- 获取每次tick温度下降速度 local function GetCoolingRate(wco) return 0.5 end --- 获取每次点火的效率 local function GetHeatingEfficiency(wco) return 8 end local function GetMaxTemperature(wco) return 210 end function CookingBench:ctor() self.is_cooking = false self.temperature = 0 self.max_temperature = 200 self.burn_timer = nil end function CookingBench:OnInitialized() self.WBP_Rabbit.OnClicked:Add(function() self:OnRabbitClicked()end) end function CookingBench:Construct() CookManager:Reset() self:UpdateCookState() self:UpdateFireState() end function CookingBench:Destruct() self.is_cooking = false self:UpdateFireState() end function CookingBench:OnRabbitClicked() if self.is_cooking then local max = GetMaxTemperature(self) local once = GetHeatingEfficiency(self) local new_value = self.temperature + once if new_value > max then self.temperature = max else self.temperature = new_value end else self.is_cooking = true self.temperature = 50 self.burn_timer = KismetSystemLibrary.K2_SetTimerDelegate( slua.createDelegate(function() self:CookTick() end), 1 / 30, true, true, 0, 0 ) end self:UpdateCookState() self:UpdateFireState() end --- 每秒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 function CookingBench:UpdateCookState() if self.temperature > 0 then self.WBP_CookingProcess:BP_SetVisible(true) local percent = self.temperature / self.max_temperature self.WBP_CookingProcess.TemperatureProcess:SetPercent(percent) else self.WBP_CookingProcess:BP_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)