2025-06-04 05:12:01 +08:00

149 lines
3.3 KiB
Plaintext

LocalNPC = class("LocalNPC", ReusableObject)
if not LocalNPC.LocalNPC_inited then
LocalNPC.LocalNPC_inited = true
LocalNPC.PoolSize = 20
end
local tempVector3 = LuaVector3.zero
function LocalNPC.Create( obj )
return ReusableObject.Create( LocalNPC, true, obj )
end
function LocalNPC:ctor()
end
function LocalNPC:GetID()
return self.ID
end
function LocalNPC:GetNPCID()
return self.staticData.id
end
-- override begin
function LocalNPC:DoConstruct(asArray, obj)
local npcID = tonumber(obj:GetProperty(0))
local staticData = Table_Npc[npcID]
if nil == staticData then
staticData = Table_Monster[npcID]
if nil == staticData then
return
end
end
local ID = obj.ID
local idleAction = obj:GetProperty(1)
local accessable = ("true" == obj:GetProperty(2))
local parent = obj:GetComponentProperty(0)
local name = staticData.NameZh or staticData.Name
if nil == name or "" == name then
name = string.format("LocalNPC_%d", npcID)
end
local parts = Asset_RoleUtility.CreateRoleParts(staticData)
local assetRole = Asset_Role.Create(parts)
Asset_Role.DestroyPartArray(parts)
parts = nil
assetRole:SetGUID(ID)
assetRole:SetName(name)
assetRole:SetClickPriority(0)
assetRole:SetShadowEnable(staticData.move ~= 1)
assetRole:SetColliderEnable(accessable)
assetRole:SetWeaponDisplay(true)
assetRole:SetMountDisplay(true)
assetRole:SetActionSpeed(1)
-- assetRole:SetActionConfig(Game.Config_NPCAction)
assetRole:PlayAction_Simple(idleAction)
if nil ~= parent then
assetRole:SetParent(parent)
assetRole:SetPosition(LuaGeometry.Const_V3_zero)
assetRole:SetEulerAngleY(0)
assetRole:SetScale(1)
else
local t = obj.transform
tempVector3:Set(LuaGameObject.GetPosition(t))
assetRole:SetPosition(tempVector3)
tempVector3:Set(LuaGameObject.GetEulerAngles(t))
assetRole:SetEulerAngles(tempVector3)
tempVector3:Set(LuaGameObject.GetScale(t))
assetRole:SetScale(tempVector3[2])
end
self.ID = ID
self.staticData = staticData
self.assetRole = assetRole
end
function LocalNPC:DoDeconstruct(asArray)
self.staticData = nil
if nil ~= self.assetRole then
self.assetRole:Destroy()
self.assetRole = nil
end
end
-- override end
GOManager_LocalNPC = class("GOManager_LocalNPC")
function GOManager_LocalNPC:ctor()
self.npcDatas = {}
self.npcs = {}
end
function GOManager_LocalNPC:_AddNPC(obj, ID)
local oldNPC = self.npcs[ID]
if nil ~= oldNPC then
oldNPC:Destroy()
end
if nil ~= obj then
self.npcs[ID] = LocalNPC.Create(obj)
else
self.npcs[ID] = nil
end
end
function GOManager_LocalNPC:Clear()
TableUtility.TableClear(self.npcDatas)
for k,v in pairs(self.npcs) do
v:Destroy()
self.npcs[k] = nil
end
end
function GOManager_LocalNPC:SetNPCData(obj, ID)
self.npcDatas[ID] = obj
self:_AddNPC(obj, ID)
end
function GOManager_LocalNPC:ClearNPCData(obj)
local objID = obj.ID
local npcData = self.npcDatas[objID]
if nil ~= npcData and npcData == obj then
self:SetNPCData(nil, objID)
return true
end
return false
end
function GOManager_LocalNPC:RegisterGameObject(obj)
local objID = obj.ID
Debug_AssertFormat(0 < objID, "RegisterLocalNPC({0}) invalid id: {1}", obj, objID)
self:SetNPCData(obj, objID)
return true
end
function GOManager_LocalNPC:UnregisterGameObject(obj)
if not self:ClearNPCData(obj) then
Debug_AssertFormat(false, "UnregisterLocalNPC({0}) failed: {1}", obj, obj.ID)
return false
end
return true
end