| 
									
										
										
										
											2025-07-09 01:08:35 +08:00
										 |  |  | local SubSystem = {} | 
					
						
							|  |  |  | local Reactive = require("Core.Reactive") | 
					
						
							|  |  |  | local Library = import("BusyGamePlayLibrary") | 
					
						
							|  |  |  | local GameplayStatics = import("GameplayStatics") | 
					
						
							|  |  |  | local BusyGamePlayLibrary = import("BusyGamePlayLibrary") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | local function CreateItemGenerator(level_config_data) | 
					
						
							|  |  |  |     local Generator = require("GamePlay.Level.BusyLevelItemGenerator") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     local item_data = {} | 
					
						
							|  |  |  |     local period = level_config_data.Period | 
					
						
							|  |  |  |     for k, v in pairs(level_config_data.LevelItemIds) do | 
					
						
							|  |  |  |         item_data[k] = v.CountOfPeriod | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |     return Generator(period, item_data) | 
					
						
							|  |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-07-12 13:07:01 +08:00
										 |  |  | function SubSystem:Bp_ShouldCreateSubsystem(world) | 
					
						
							|  |  |  |     return false | 
					
						
							|  |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-07-09 01:08:35 +08:00
										 |  |  | function SubSystem:ReceiveSubSystemInitialize() | 
					
						
							|  |  |  |     local world = BusyGamePlayLibrary.K2_GetWorld(self) | 
					
						
							|  |  |  |     self.start_time = GameplayStatics.GetTimeSeconds(world) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     self.proxy = Reactive.ReactiveProperty({ | 
					
						
							|  |  |  |         current_seconds = 0 | 
					
						
							|  |  |  |     }) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function SubSystem:ReceiveWorldBeginPlay() | 
					
						
							|  |  |  |     local BusyActorManagerSubSystem = import("BusyActorManagerSubSystem").Get(self) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     -- 读取关卡配置 | 
					
						
							|  |  |  |     local is_suc, row_data = Library.GetLevelBaseConfig("Default", nil) | 
					
						
							|  |  |  |     assert(is_suc == true, "Can't find level base config") | 
					
						
							|  |  |  |     self.level_base_config = row_data | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     -- 创建物品生成器 | 
					
						
							|  |  |  |     self.generator = CreateItemGenerator(row_data) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     -- 创建初始篝火 | 
					
						
							|  |  |  |     local bonfire = BusyActorManagerSubSystem:SpawnBonfire(row_data.FirstBonfirePosition) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     -- 创建角色 | 
					
						
							|  |  |  |     local role = BusyActorManagerSubSystem:SpawnRole(bonfire) | 
					
						
							|  |  |  |     GameplayStatics.GetPlayerController(self, 0):Possess(role) | 
					
						
							|  |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function SubSystem:ReceiveSubSystemTick(DeltaTime) | 
					
						
							|  |  |  |     -- local proxy = self.proxy | 
					
						
							|  |  |  |     -- local world = BusyGamePlayLibrary.K2_GetWorld(self) | 
					
						
							|  |  |  |     -- local current_time = GameplayStatics.GetTimeSeconds(world) | 
					
						
							|  |  |  |     -- local escapse_time = math.floor(current_time - self.start_time) | 
					
						
							|  |  |  |     -- if escapse_time > proxy.current_seconds then | 
					
						
							|  |  |  |     --     self:TrySpawnLevelItem() | 
					
						
							|  |  |  |     --     proxy.current_seconds = escapse_time | 
					
						
							|  |  |  |     --     print(proxy.current_seconds) | 
					
						
							|  |  |  |     -- end | 
					
						
							|  |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function SubSystem:TrySpawnLevelItem() | 
					
						
							|  |  |  |     local BusyActorManagerSubSystem = import("BusyActorManagerSubSystem").Get(self) | 
					
						
							|  |  |  |     local items = self.generator:Generate() | 
					
						
							|  |  |  |     for i, item_id in pairs(items) do | 
					
						
							|  |  |  |         BusyActorManagerSubSystem:SpawnLevelItem(item_id) | 
					
						
							|  |  |  |         print(i, item_id) | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | return Class(nil, nil, SubSystem) |