PGRData/Script/matrix/xentity/xguilddorm/furniture/XGuildDormFurniture.lua
2024-09-01 22:49:41 +02:00

247 lines
8 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

local XRLGuildDormFurniture = require("XEntity/XGuildDorm/Furniture/XRLGuildDormFurniture")
local XBaseSceneObj = require("XEntity/XGuildDorm/Base/XGuildDormBaseSceneObj")
local XFurnitureModel = require("XEntity/XGuildDorm/Furniture/XGuildDormFurnitureModel")
local XGDComponentManager = require("XEntity/XGuildDorm/Base/XGDComponentManager")
---@class XGuildDormFurniture : XGuildDormBaseSceneObj
local XGuildDormFurniture = XClass(XBaseSceneObj, "XGuildDormFurniture")
--================
--获取默认家具表的Id(GuildDormDefaultFurniture)
--================
function XGuildDormFurniture:GetId()
return self.Id
end
--================
--获取家具对应的房间
--================
function XGuildDormFurniture:GetRoom()
local roomId = self.FurnitureModel and self.FurnitureModel.RoomId
if not roomId then return nil end
---@type XGuildDormScene
local currentScene = XDataCenter.GuildDormManager.SceneManager.GetCurrentScene()
return currentScene and currentScene:GetRoomById(roomId)
end
--================
--获取家具表Id(GuildDormFurniture)
--================
function XGuildDormFurniture:GetFurnitureId()
return self.FurnitureModel and self.FurnitureModel.FurnitureId
end
--================
--获取家具名称
--================
function XGuildDormFurniture:GetName()
return self.FurnitureModel and self.FurnitureModel.Name
end
--================
--获取家具交互信息列表
--================
function XGuildDormFurniture:GetInteractInfoList()
return self.FurnitureModel and self.FurnitureModel:GetInteractInfoList()
end
--===================
-- 检测交互点是否能交互
--===================
function XGuildDormFurniture:CheckCanInteract()
return self.FurnitureModel and self.FurnitureModel.InteractPos > 0
end
--===================
-- 获取家具特效组Id
--===================
function XGuildDormFurniture:GetEffectGroupId()
return self.FurnitureModel and self.FurnitureModel.EffectGroupId
end
--===========
--构造函数
--@param id默认家具表Id
--===========
function XGuildDormFurniture:Ctor(id)
self.Id = id
self.ServerData = nil
-- 家具特效
---@type UnityEngine.GameObject[]
self.FurnitureEffectList = {}
-- 组件 XGDComponet
self.GDComponentManager = XGDComponentManager.New()
-- 表现数据
---@type XGuildDormFurnitureModel
self.FurnitureModel = XFurnitureModel.New(self.Id)
-- 配置表
local cfg = XGuildDormConfig.GetCfgByIdKey(XGuildDormConfig.TableKey.DefaultFurniture, id)
self.Config = XGuildDormConfig.GetCfgByIdKey(XGuildDormConfig.TableKey.Furniture, cfg.FurnitureId)
self.IsAllocatedReward = false
self.ExtralSpecialUiArgs = {}
if not string.IsNilOrEmpty(self.Config.RedPointCondition) then
self:AddExtralSpecialUiArg({
SpecialUiName = "PanelSummerGift",
UiNameProxyPath = "XUi/XUiGuildDorm/XUiGuildDormRewardUi",
SpecialUiNameHeightOffset = self.Config.RewardHeightOffset,
Type = XGuildDormConfig.SpecialRewardUiType.RedPointReward
})
end
-- 特效
local effectGroupId = self:GetEffectGroupId()
if XTool.IsNumberValid(effectGroupId) then
-- 增加特效管理组件
local XGDFurnitureEffectComponent = require("XEntity/XGuildDorm/Components/XGDFurnitureEffectComponent")
self.GDComponentManager:AddComponent(XGDFurnitureEffectComponent.New(self))
end
end
function XGuildDormFurniture:SetGameObject(go)
self.FurnitureModel:SetGameObject(go)
XDataCenter.GuildDormManager.SceneManager.AddSceneObj(self.FurnitureModel.GameObject, self)
end
function XGuildDormFurniture:LoadAsset(modelPath, root)
self.FurnitureModel:LoadAsset(modelPath, root)
end
function XGuildDormFurniture:Update(dt)
self.GDComponentManager:Update(dt)
end
function XGuildDormFurniture:UpdateWithServerData(data)
self.ServerData = data
end
function XGuildDormFurniture:ResetNavmeshObstacle()
self.FurnitureModel:ResetNavmeshObstacle()
end
function XGuildDormFurniture:Dispose()
self.FurnitureModel:Dispose()
self.GDComponentManager:Dispose()
-- 隐藏特效
for _, effectObj in pairs(self.FurnitureEffectList) do
if effectObj and effectObj:Exist() then
effectObj:SetActiveEx(false)
end
end
end
function XGuildDormFurniture:CheckIsShowName()
return self.Config.IsShowName
end
function XGuildDormFurniture:CheckIsGetReward()
return self.Config.IsGetReward
end
function XGuildDormFurniture:GetEntityId()
return self.Id .. "_XGuildDormFurniture"
end
function XGuildDormFurniture:GetRLEntity()
return self.FurnitureModel
end
function XGuildDormFurniture:GetNameHeightOffset()
return self.Config.NameHeightOffset or 0
end
function XGuildDormFurniture:GetName()
return self.Config.Name
end
function XGuildDormFurniture:GetTriangleType()
return XGuildDormConfig.TriangleType.None
end
function XGuildDormFurniture:GetSpecialUiNames()
local result = {}
result = appendArray(result, self.Config.SpecialUiNames)
for _, v in ipairs(self.ExtralSpecialUiArgs) do
table.insert(result, v.SpecialUiName)
end
return result
end
function XGuildDormFurniture:GetUiNameProxyPath(index)
if index > #self.Config.SpecialUiNames then
return self.ExtralSpecialUiArgs[index - #self.Config.SpecialUiNames].UiNameProxyPath
end
return self.Config.UiNameProxyPaths[index]
end
function XGuildDormFurniture:GetSpecialUiNameHeightOffset(index)
if index > #self.Config.SpecialUiNames then
return self.ExtralSpecialUiArgs[index - #self.Config.SpecialUiNames].SpecialUiNameHeightOffset
end
return self.Config.SpecialUiNameHeightOffset[index]
end
function XGuildDormFurniture:CheckIsAllocatedReward()
return self.IsAllocatedReward
end
function XGuildDormFurniture:SetIsAllocatedReward(value)
self.IsAllocatedReward = value
if value then
self:AddExtralSpecialUiArg({
SpecialUiName = "PanelSummerGift",
UiNameProxyPath = nil,
SpecialUiNameHeightOffset = self.Config.RewardHeightOffset,
Type = XGuildDormConfig.SpecialRewardUiType.RandomReward
})
else
for i = #self.ExtralSpecialUiArgs, 1, -1 do
if self.ExtralSpecialUiArgs[i].Type == XGuildDormConfig.SpecialRewardUiType.RandomReward then
table.remove(self.ExtralSpecialUiArgs, i)
end
end
end
end
function XGuildDormFurniture:GetUiShowDistance()
return self.Config.UiShowDistance or 0
end
--[[
{
SpecialUiName : string
UiNameProxyPath : string
SpecialUiNameHeightOffset : number
}
]]
function XGuildDormFurniture:AddExtralSpecialUiArg(value)
table.insert(self.ExtralSpecialUiArgs, value)
end
-- 播放特效
function XGuildDormFurniture:FurniturePlayEffect(effectId, localPosition, specialNode, specialNodeName)
local transform = self.FurnitureModel:GetTransform()
local effectObj = self.FurnitureEffectList[effectId] or nil
if not effectObj then
local furnitureEffectCfg = XGuildDormConfig.GetEffectCfgById(effectId)
-- 创建一个特效节点
effectObj = CS.UnityEngine.GameObject("Effect" .. effectId)
effectObj.transform:SetParent(transform, false)
effectObj.transform:LoadPrefab(furnitureEffectCfg.Path)
self.FurnitureEffectList[effectId] = effectObj
else
effectObj:SetActiveEx(false)
end
-- 有特殊节点
if specialNode then
local parent = transform:FindTransform(specialNodeName)
if parent and parent:Exist() then
effectObj.transform:SetParent(parent, false)
end
end
effectObj.transform.localPosition = localPosition
effectObj:SetActiveEx(true)
end
-- 隐藏特效
function XGuildDormFurniture:FurnitureHideEffect(effectIds)
for _, effectId in pairs(effectIds or {}) do
local effectObj = self.FurnitureEffectList[effectId] or nil
if effectObj and effectObj:Exist() then
effectObj:SetActiveEx(false)
end
end
end
return XGuildDormFurniture