local WITH_LUAIDE_DEBUG = true print("import World.lua") if WITH_LUAIDE_DEBUG then require "socket.core" require("LuaPanda").start("127.0.0.1", 8818) end require "GameGlobal" local class = class(GA, "World") function class:ctor() self._uWorldContext = nil self._registerManager = {} end function class:registerLuaManager(key, luaclass) if self[key] then return end local manager = luaclass.new() manager:init() self[key] = manager table.insert(self._registerManager, manager) end function class:registerUManager(key, uclass, script) local manager = self:spawnLuaActor(uclass, script, UE.FVector(0.0, 0.0, 0.0), UE.FRotator(0, 0, 0)) manager:init() self[key] = manager table.insert(self._registerManager, manager) end function class:CreateSubSystem() end function class:ReInitializeWorld(WorldContext) self._uWorldContext = WorldContext end function class:InitializeWorld(WorldContext) self:CreateSubSystem() self._uWorldContext = WorldContext for key, luaclass in pairs(GA.initManagerList) do self:registerLuaManager(key, luaclass) end GA.initManagerList = nil end function class:getWorldContext() return self._uWorldContext end function class:getWorldObject() return self._uWorldContext end function class:getMainController() return UE.UGameplayStatics.GetPlayerController(self._uWorldContext, 0) end function class:getMainPlayer() return UE.UGameplayStatics.GetPlayerPawn(self._uWorldContext, 0) end function class:beginPlay() print("world beginPlay " , self._uWorldContext:GetName()) end function class:tick(dt) for _, manager in pairs(self._registerManager) do if manager.tick then manager:tick(dt) end end end function class:lateTick(dt) for _, manager in pairs(self._registerManager) do if manager.lateTick then manager:lateTick(dt) end end end function class:spawnActor(uclass, uLocation, uRotation, params) local transform = UE.FTransform(uRotation:ToQuat(), uLocation) return self._uWorldContext:SpawnActor(uclass, transform, params and params.collisionHandle or UE.ESpawnActorCollisionHandlingMethod.AlwaysSpawn) end function class:spawnLuaActor(uclass, script, uLocation, uRotation, params) local transform = UE.FTransform(uRotation:ToQuat(), uLocation) return self._uWorldContext:SpawnActor(uclass, transform, params and params.collisionHandle or UE.ESpawnActorCollisionHandlingMethod.AlwaysSpawn, self, self, script) end return class