| 
									
										
										
										
											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 | 
					
						
							| 
									
										
										
										
											2025-08-19 03:23:36 +08:00
										 |  |  |         self.WBP_CookingProcess:BP_SetVisible(true) | 
					
						
							| 
									
										
										
										
											2025-08-01 00:33:26 +08:00
										 |  |  |         local percent = self.temperature / self.max_temperature | 
					
						
							|  |  |  |         self.WBP_CookingProcess.TemperatureProcess:SetPercent(percent) | 
					
						
							|  |  |  |     else | 
					
						
							| 
									
										
										
										
											2025-08-19 03:23:36 +08:00
										 |  |  |         self.WBP_CookingProcess:BP_SetVisible(false) | 
					
						
							| 
									
										
										
										
											2025-08-01 00:33:26 +08:00
										 |  |  |     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) |