自动化烹饪流程
This commit is contained in:
		| @ -1,11 +1,31 @@ | ||||
| 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 | ||||
|  | ||||
| @ -14,6 +34,7 @@ function CookingBench:OnInitialized() | ||||
| end | ||||
|  | ||||
| function CookingBench:Construct() | ||||
|     CookManager:Reset() | ||||
|     self:UpdateCookState() | ||||
|     self:UpdateFireState() | ||||
| end | ||||
| @ -27,36 +48,44 @@ end | ||||
|  | ||||
| function CookingBench:OnRabbitClicked() | ||||
|     if self.is_cooking then | ||||
|         local new_value = self.temperature + 8 | ||||
|         if new_value > self.max_temperature then | ||||
|             self.temperature = self.max_temperature | ||||
|         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 = 100 | ||||
|         self.temperature = 50 | ||||
|  | ||||
|         self.burn_timer = KismetSystemLibrary.K2_SetTimerDelegate( | ||||
|             slua.createDelegate(function() | ||||
|                 local new_value = self.temperature - 1 | ||||
|                 if new_value > 0 then | ||||
|                     self.temperature = new_value | ||||
|                 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), | ||||
|             0.1, true, true, 0, 0 | ||||
|             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:SetVisible(true) | ||||
|  | ||||
		Reference in New Issue
	
	Block a user