2023-07-14 19:35:33 +00:00
|
|
|
|
local XGuildDormRoleFSMFactory = require("XEntity/XGuildDorm/Role/FSM/XGuildDormRoleFSMFactory")
|
|
|
|
|
local XGuildDormBaseSceneObj = require("XEntity/XGuildDorm/Base/XGuildDormBaseSceneObj")
|
2024-09-01 20:49:41 +00:00
|
|
|
|
---@class XGuildDormRoom : XGuildDormBaseSceneObj
|
2023-07-14 19:35:33 +00:00
|
|
|
|
local XGuildDormRoom = XClass(XGuildDormBaseSceneObj, "XGuildDormRoom")
|
|
|
|
|
local XRoomBuild = require("XEntity/XGuildDorm/Room/XGuildDormRoomBuild")
|
|
|
|
|
local XGuildDormRole = require("XEntity/XGuildDorm/Role/XGuildDormRole")
|
2024-09-01 20:49:41 +00:00
|
|
|
|
local XGDComponentManager = require("XEntity/XGuildDorm/Base/XGDComponentManager")
|
|
|
|
|
|
2023-07-14 19:35:33 +00:00
|
|
|
|
--===========
|
|
|
|
|
--获取房间建筑管理控件
|
|
|
|
|
--===========
|
|
|
|
|
function XGuildDormRoom:GetRoomBuild()
|
|
|
|
|
return self.RoomBuild
|
|
|
|
|
end
|
|
|
|
|
--===========
|
|
|
|
|
--获取房间数据
|
|
|
|
|
--===========
|
|
|
|
|
function XGuildDormRoom:GetRoomData()
|
|
|
|
|
return self.RoomBuild and self.RoomBuild.Data
|
|
|
|
|
end
|
|
|
|
|
--===========
|
|
|
|
|
--获取房间名称
|
|
|
|
|
--===========
|
|
|
|
|
function XGuildDormRoom:GetRoomName()
|
|
|
|
|
local roomData = self:GetRoomData()
|
|
|
|
|
return roomData and roomData.Name or "UnNamed"
|
|
|
|
|
end
|
|
|
|
|
--===========
|
|
|
|
|
--获取房间模型外壳生成根节点
|
|
|
|
|
--===========
|
|
|
|
|
function XGuildDormRoom:GetSurfaceRoot()
|
|
|
|
|
return self.RoomBuild and self.RoomBuild.SurfaceRoot
|
|
|
|
|
end
|
|
|
|
|
--===========
|
|
|
|
|
--获取房间模型角色生成根节点
|
|
|
|
|
--===========
|
|
|
|
|
function XGuildDormRoom:GetCharacterRoot()
|
|
|
|
|
return self.RoomBuild and self.RoomBuild.CharacterRoot
|
|
|
|
|
end
|
|
|
|
|
--===========
|
2024-09-01 20:49:41 +00:00
|
|
|
|
--获取房间npc交互生成根节点
|
|
|
|
|
--===========
|
|
|
|
|
function XGuildDormRoom:GetNpcInteractRoot()
|
|
|
|
|
return self.RoomBuild and self.RoomBuild.NpcInteractRoot
|
|
|
|
|
end
|
|
|
|
|
--===========
|
2023-07-14 19:35:33 +00:00
|
|
|
|
--获取房间模型家具生成根节点
|
|
|
|
|
--===========
|
|
|
|
|
function XGuildDormRoom:GetFurnitureRoot()
|
|
|
|
|
return self.RoomBuild and self.RoomBuild.FurnitureRoot
|
|
|
|
|
end
|
|
|
|
|
--=============
|
|
|
|
|
--根据家具Id获取家具控件
|
|
|
|
|
--=============
|
|
|
|
|
function XGuildDormRoom:GetFurnitureById(id)
|
|
|
|
|
return self.RoomBuild and self.RoomBuild.Data:GetFurniture(id)
|
|
|
|
|
end
|
|
|
|
|
--===========
|
|
|
|
|
--获取房间游戏对象
|
|
|
|
|
--===========
|
|
|
|
|
function XGuildDormRoom:GetGameObject()
|
|
|
|
|
return self.GameObject
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XGuildDormRoom:GetSyncTime()
|
|
|
|
|
return self.SyncTime
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XGuildDormRoom:GetRunTime()
|
|
|
|
|
return self.RunTime
|
|
|
|
|
end
|
|
|
|
|
--================
|
|
|
|
|
--根据家具id获取家具交互信息列表
|
|
|
|
|
--================
|
|
|
|
|
function XGuildDormRoom:GetInteractInfoByFurnitureId(id)
|
|
|
|
|
local furniture = self:GetFurnitureById(id)
|
|
|
|
|
if not furniture then return {} end
|
2024-09-01 20:49:41 +00:00
|
|
|
|
return furniture:GetInteractInfoList()
|
2023-07-14 19:35:33 +00:00
|
|
|
|
end
|
2024-09-01 20:49:41 +00:00
|
|
|
|
---@param roomData XGuildDormRoomData
|
2023-07-14 19:35:33 +00:00
|
|
|
|
function XGuildDormRoom:Ctor(roomData)
|
2024-09-01 20:49:41 +00:00
|
|
|
|
---@type XGuildDormRole[]
|
2023-07-14 19:35:33 +00:00
|
|
|
|
self.Roles = {}
|
|
|
|
|
self.PlayerId2RoleDic = {}
|
|
|
|
|
-- 同步到服务器的时间
|
|
|
|
|
self.SyncTime = XGuildDormConfig.GetSyncServerTime()
|
|
|
|
|
-- 运行时间
|
|
|
|
|
self.RunTime = 0
|
|
|
|
|
self.GuildDormManager = XDataCenter.GuildDormManager
|
|
|
|
|
self.IsInit = false
|
2024-09-01 20:49:41 +00:00
|
|
|
|
---@type XGuildDormRoomBuild
|
2023-07-14 19:35:33 +00:00
|
|
|
|
self.RoomBuild = XRoomBuild.New(roomData)
|
|
|
|
|
self.Running = nil
|
|
|
|
|
self.IsShow = false
|
2024-09-01 20:49:41 +00:00
|
|
|
|
-- 组件 XGDComponet
|
|
|
|
|
self.GDComponentManager = XGDComponentManager.New()
|
2023-07-14 19:35:33 +00:00
|
|
|
|
end
|
|
|
|
|
|
2024-09-01 20:49:41 +00:00
|
|
|
|
function XGuildDormRoom:GetId()
|
|
|
|
|
return self:GetRoomData().Id
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
---@param role XGuildDormRole
|
2023-07-14 19:35:33 +00:00
|
|
|
|
function XGuildDormRoom:AddRole(role)
|
|
|
|
|
local playerId = role:GetPlayerId()
|
|
|
|
|
if self:GetRoleByPlayerId(playerId) then
|
|
|
|
|
XLog.Error("XGuildDormRoom.AddRole 重复增加角色:" .. playerId)
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
table.insert(self.Roles, role)
|
|
|
|
|
self.PlayerId2RoleDic[playerId] = role
|
|
|
|
|
end
|
|
|
|
|
|
2024-09-01 20:49:41 +00:00
|
|
|
|
---@return XGuildDormRole[]
|
2023-07-14 19:35:33 +00:00
|
|
|
|
function XGuildDormRoom:GetRoles()
|
|
|
|
|
return self.Roles
|
|
|
|
|
end
|
|
|
|
|
|
2024-09-01 20:49:41 +00:00
|
|
|
|
function XGuildDormRoom:GetFurnitureDic()
|
|
|
|
|
return self.RoomBuild:GetRoomData():GetAllFurnitures()
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XGuildDormRoom:GetNpcs(withRL)
|
|
|
|
|
local npcManagerCom = self.GDComponentManager:GetComponent("XGDNpcManagerComponent")
|
|
|
|
|
return npcManagerCom:GetNpcs(withRL)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XGuildDormRoom:GetNpc(npcId)
|
|
|
|
|
local npcManagerCom = self.GDComponentManager:GetComponent("XGDNpcManagerComponent")
|
|
|
|
|
return npcManagerCom:GetNpc(npcId)
|
|
|
|
|
end
|
|
|
|
|
|
2023-07-14 19:35:33 +00:00
|
|
|
|
function XGuildDormRoom:GetIsInit()
|
|
|
|
|
return self.IsInit
|
|
|
|
|
end
|
|
|
|
|
|
2024-09-01 20:49:41 +00:00
|
|
|
|
function XGuildDormRoom:SetIsInit(value)
|
|
|
|
|
self.IsInit = value
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
---@return XGuildDormRole
|
2023-07-14 19:35:33 +00:00
|
|
|
|
function XGuildDormRoom:GetRoleByPlayerId(value)
|
|
|
|
|
return self.PlayerId2RoleDic[value]
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
-- 设置宿舍内3D坐标 对应2D坐标
|
|
|
|
|
function XGuildDormRoom:SetViewPosToTransformLocalPosition(setTransform, fromTransform, offset)
|
|
|
|
|
local camera = XDataCenter.GuildDormManager.SceneManager.GetCurrentScene():GetCamera()
|
|
|
|
|
if XTool.UObjIsNil(camera) then
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
CS.XGuildDormHelper.SetViewPosToTransformLocalPosition(camera, setTransform, fromTransform, offset)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XGuildDormRoom:UpdateRolesPosition()
|
|
|
|
|
local playerDatas = XDataCenter.GuildDormManager.GetPlayerDatas()
|
|
|
|
|
-- 转换字典
|
|
|
|
|
local playerDataDic = {}
|
|
|
|
|
for _, data in ipairs(playerDatas) do
|
|
|
|
|
playerDataDic[data.PlayerId] = data
|
|
|
|
|
end
|
|
|
|
|
local role, playerData
|
|
|
|
|
for i = #self.Roles, 1, -1 do
|
|
|
|
|
role = self.Roles[i]
|
|
|
|
|
playerData = playerDataDic[role:GetPlayerId()]
|
|
|
|
|
if playerData then
|
|
|
|
|
if not role:GetIsInteracting() then
|
2024-09-01 20:49:41 +00:00
|
|
|
|
if not role:CheckIsSelfPlayer() then
|
|
|
|
|
role:GetRLRole():UpdateTransform(playerData.Position.X
|
|
|
|
|
, playerData.Position.Y
|
|
|
|
|
, playerData.Position.Z
|
|
|
|
|
, playerData.Position.Angle)
|
|
|
|
|
else
|
|
|
|
|
role:SyncToServer()
|
|
|
|
|
end
|
2023-07-14 19:35:33 +00:00
|
|
|
|
end
|
|
|
|
|
else
|
|
|
|
|
self:DeleteRole(role:GetPlayerId())
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XGuildDormRoom:CreateRoles(playerDatas, containerGo)
|
|
|
|
|
if XTool.UObjIsNil(containerGo) then
|
|
|
|
|
XLog.Error("XGuildDormRoom.CreateRoles : containerGo参数不能为空!")
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
-- debug 满员角色情况
|
|
|
|
|
if XGuildDormConfig.DebugFullRole then
|
|
|
|
|
local testPlayerData = playerDatas[1]
|
|
|
|
|
local allCharacterDatas = XDataCenter.GuildDormManager.GetCharacterDatas(0)
|
|
|
|
|
for i = 1, XGuildDormConfig.DebugFullRoleCount do
|
|
|
|
|
local testAddPlayerData = XTool.Clone(testPlayerData)
|
|
|
|
|
testAddPlayerData.PlayerId = testAddPlayerData.PlayerId .. i
|
|
|
|
|
testAddPlayerData.CharacterId = allCharacterDatas[i].CharacterId
|
|
|
|
|
table.insert(playerDatas, testAddPlayerData)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
for _, playerData in ipairs(playerDatas) do
|
|
|
|
|
self:CreateRole(playerData, containerGo)
|
|
|
|
|
end
|
|
|
|
|
-- 创建运行中
|
|
|
|
|
local XGuildDormRunning = require("XEntity/XGuildDorm/XGuildDormRunning")
|
2024-09-01 20:49:41 +00:00
|
|
|
|
---@type XGuildDormRunning
|
2023-07-14 19:35:33 +00:00
|
|
|
|
self.Running = XGuildDormRunning.New(self:GetGameObject())
|
|
|
|
|
self.Running:SetData(self)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XGuildDormRoom:CreateRole(playerData, containerGo)
|
|
|
|
|
if self:GetRoleByPlayerId(playerData.PlayerId) then
|
|
|
|
|
XLog.Error("XGuildDormRoom.CreateRole 重复创建角色:" .. playerData.PlayerId)
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
local XGDInputCompoent = require("XEntity/XGuildDorm/Components/XGDInputCompoent")
|
|
|
|
|
local XGDMoveComponent = require("XEntity/XGuildDorm/Components/XGDMoveComponent")
|
|
|
|
|
local XGDSyncToServerComponent = require("XEntity/XGuildDorm/Components/XGDSyncToServerComponent")
|
|
|
|
|
local XGDInteractCheckComponent = require("XEntity/XGuildDorm/Components/XGDInteractCheckComponent")
|
|
|
|
|
local XGDFurnitureInteractComponent = require("XEntity/XGuildDorm/Components/XGDFurnitureInteractComponent")
|
2024-09-01 20:49:41 +00:00
|
|
|
|
local XGDNpcInteractComponent = require("XEntity/XGuildDorm/Components/XGDNpcInteractComponent")
|
2023-07-14 19:35:33 +00:00
|
|
|
|
local XGDSyncToClientComponent = require("XEntity/XGuildDorm/Components/XGDSyncToClientComponent")
|
|
|
|
|
local XGDActionPlayComponent = require("XEntity/XGuildDorm/Components/XGDActionPlayComponent")
|
|
|
|
|
-- 创建角色数据
|
2024-09-01 20:49:41 +00:00
|
|
|
|
---@type XGuildDormRole
|
2023-07-14 19:35:33 +00:00
|
|
|
|
local role = XGuildDormRole.New(playerData.CharacterId)
|
|
|
|
|
-- 更新数据
|
|
|
|
|
role:UpdateWithServerData(playerData)
|
|
|
|
|
-- 获取RL角色数据
|
|
|
|
|
local rlRole = role:GetRLRole()
|
|
|
|
|
-- 加载角色模型
|
|
|
|
|
rlRole:LoadModel(containerGo)
|
|
|
|
|
-- 出生
|
2024-09-01 20:49:41 +00:00
|
|
|
|
rlRole:Born(playerData.Position.X, playerData.Position.Y, playerData.Position.Z
|
2023-07-14 19:35:33 +00:00
|
|
|
|
, playerData.Position.Angle, self:GetIsShow())
|
|
|
|
|
self:AddRole(role)
|
|
|
|
|
if XPlayer.Id == playerData.PlayerId then
|
|
|
|
|
-- 创建角色控制器,只有自身玩家才有
|
|
|
|
|
rlRole:CreateCharacterController()
|
|
|
|
|
role:AddComponent(XGDInputCompoent.New())
|
|
|
|
|
role:AddComponent(XGDMoveComponent.New(role))
|
|
|
|
|
role:AddComponent(XGDSyncToServerComponent.New(role, self))
|
|
|
|
|
role:AddComponent(XGDInteractCheckComponent.New(role, self))
|
|
|
|
|
role:AddComponent(XGDFurnitureInteractComponent.New(role))
|
2024-09-01 20:49:41 +00:00
|
|
|
|
role:AddComponent(XGDNpcInteractComponent.New(role, self))
|
2023-07-14 19:35:33 +00:00
|
|
|
|
role:AddComponent(XGDActionPlayComponent.New(role))
|
|
|
|
|
-- 设置摄像机跟随角色
|
|
|
|
|
rlRole:UpdateCameraFollow()
|
|
|
|
|
else
|
|
|
|
|
role:AddComponent(XGDSyncToClientComponent.New(role, self))
|
|
|
|
|
role:AddComponent(XGDFurnitureInteractComponent.New(role))
|
|
|
|
|
role:AddComponent(XGDActionPlayComponent.New(role))
|
|
|
|
|
rlRole:DisableColliders()
|
|
|
|
|
-- 处理已经在交互的角色
|
|
|
|
|
local furnitureData = XDataCenter.GuildDormManager.GetFurnitureDataByPlayerId(playerData.PlayerId)
|
|
|
|
|
if furnitureData then
|
|
|
|
|
role:BeginInteract(furnitureData.Id, true)
|
|
|
|
|
end
|
2024-09-01 20:49:41 +00:00
|
|
|
|
rlRole:SetTransparent(XDataCenter.GuildDormManager.GetHideOtherPlayers() and 0 or 1)
|
2023-07-14 19:35:33 +00:00
|
|
|
|
end
|
2024-09-01 20:49:41 +00:00
|
|
|
|
rlRole:UpdateCurrentStepCueId(self:GetWalkCueId())
|
|
|
|
|
XEventManager.DispatchEvent(XEventId.EVENT_GUILD_DORM_ENTITY_ENTER, role)
|
2023-07-14 19:35:33 +00:00
|
|
|
|
XEventManager.DispatchEvent(XEventId.EVENT_GUILD_DORM_PLAYER_ENTER, role)
|
|
|
|
|
return role
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XGuildDormRoom:DeleteRole(playerId)
|
|
|
|
|
local role = self:GetRoleByPlayerId(playerId)
|
|
|
|
|
if role == nil then return end
|
|
|
|
|
role:Dispose()
|
|
|
|
|
for i = #self.Roles, 1, -1 do
|
|
|
|
|
if self.Roles[i]:GetPlayerId() == playerId then
|
|
|
|
|
table.remove(self.Roles, i)
|
|
|
|
|
break
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
self.PlayerId2RoleDic[playerId] = nil
|
|
|
|
|
XEventManager.DispatchEvent(XEventId.EVENT_GUILD_DORM_PLAYER_EXIT, playerId)
|
2024-09-01 20:49:41 +00:00
|
|
|
|
XEventManager.DispatchEvent(XEventId.EVENT_GUILD_DORM_ENTITY_EXIT, playerId)
|
2023-07-14 19:35:33 +00:00
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XGuildDormRoom:Init()
|
|
|
|
|
self.IsInit = true
|
2024-09-01 20:49:41 +00:00
|
|
|
|
-- 增加npc管理组件
|
|
|
|
|
local XGDNpcManagerComponent = require("XEntity/XGuildDorm/Components/XGDNpcManagerComponent")
|
|
|
|
|
self.GDComponentManager:AddComponent(XGDNpcManagerComponent.New())
|
|
|
|
|
-- 增加透明管理组件
|
|
|
|
|
local XGDNpcRenderingComponent = require("XEntity/XGuildDorm/Components/XGDNpcRenderingComponent")
|
|
|
|
|
self.GDComponentManager:AddComponent(XGDNpcRenderingComponent.New())
|
2023-07-14 19:35:33 +00:00
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XGuildDormRoom:Update(dt)
|
|
|
|
|
self.RunTime = self.RunTime + dt
|
2024-09-01 20:49:41 +00:00
|
|
|
|
self.GDComponentManager:Update(dt)
|
2023-07-14 19:35:33 +00:00
|
|
|
|
for _, role in ipairs(self.Roles) do
|
|
|
|
|
role:Update(dt)
|
|
|
|
|
end
|
2024-09-01 20:49:41 +00:00
|
|
|
|
for _, furniture in pairs(self:GetFurnitureDic()) do
|
|
|
|
|
furniture:Update(dt)
|
|
|
|
|
end
|
2023-07-14 19:35:33 +00:00
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XGuildDormRoom:OnLoadComplete(loadtype)
|
|
|
|
|
self.RoomBuild:OnLoadComplete(self.Transform)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
-- 设置房间数据
|
|
|
|
|
function XGuildDormRoom:SetData(data, loadtype)
|
|
|
|
|
self.Data = data
|
|
|
|
|
self.CurLoadType = loadtype
|
|
|
|
|
--self:CleanRoom()
|
|
|
|
|
--self:CleanCharacter()
|
|
|
|
|
self.RoomBuild:InitFurnitures()
|
|
|
|
|
--暂时不需要网格
|
|
|
|
|
--self.RoomBuild:GenerateRoomMap()
|
|
|
|
|
--self:LoadCharacter()
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XGuildDormRoom:OnEnterRoom()
|
|
|
|
|
self.RoomBuild:OnEnter()
|
|
|
|
|
XEventManager.DispatchEvent(XEventId.EVENT_GUILD_DORM_ON_ENTER_ROOM, self)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XGuildDormRoom:OnLeaveRoom()
|
|
|
|
|
self.RoomBuild:OnLeave()
|
|
|
|
|
XEventManager.DispatchEvent(XEventId.EVENT_GUILD_DORM_ON_LEAVE_ROOM, self)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XGuildDormRoom:ResetNavmeshObstacle()
|
|
|
|
|
self.RoomBuild:ResetNavmeshObstacle()
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XGuildDormRoom:Dispose()
|
|
|
|
|
self.RoomBuild:Dispose()
|
|
|
|
|
self:DisposeWithoutGo()
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XGuildDormRoom:DisposeWithoutGo()
|
|
|
|
|
if self.Running then
|
|
|
|
|
self.Running:Dispose()
|
|
|
|
|
self.Running = nil
|
|
|
|
|
end
|
|
|
|
|
if self.Roles then
|
|
|
|
|
for _, role in ipairs(self.Roles) do
|
|
|
|
|
role:Dispose()
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
self.Roles = nil
|
|
|
|
|
self.Roles = {}
|
|
|
|
|
self.PlayerId2RoleDic = nil
|
|
|
|
|
self.PlayerId2RoleDic = {}
|
|
|
|
|
self.IsInit = false
|
|
|
|
|
self.RunTime = 0
|
2024-09-01 20:49:41 +00:00
|
|
|
|
self.GDComponentManager:Dispose()
|
2023-07-14 19:35:33 +00:00
|
|
|
|
XGuildDormRoleFSMFactory.Dispose()
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XGuildDormRoom:GetRoleByFurnitureId(id)
|
|
|
|
|
local furnitureDatas = XDataCenter.GuildDormManager.GetFurnitureDatas()
|
|
|
|
|
for _, data in pairs(furnitureDatas) do
|
|
|
|
|
if data.Id == id then
|
|
|
|
|
return self:GetRoleByPlayerId(data.PlayerId)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XGuildDormRoom:CheckPlayerIsInteract(playerId)
|
|
|
|
|
local furnitureDatas = XDataCenter.GuildDormManager.GetFurnitureDatas()
|
|
|
|
|
for _, data in ipairs(furnitureDatas) do
|
|
|
|
|
if data.PlayerId == playerId then
|
|
|
|
|
return true
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
return false
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XGuildDormRoom:GetRunning()
|
|
|
|
|
return self.Running
|
|
|
|
|
end
|
|
|
|
|
--============
|
|
|
|
|
--获取房间是否正在显示
|
|
|
|
|
--============
|
|
|
|
|
function XGuildDormRoom:GetIsShow()
|
|
|
|
|
return self.IsShow
|
|
|
|
|
end
|
|
|
|
|
--============
|
|
|
|
|
--设置房间是否正在显示
|
|
|
|
|
--============
|
|
|
|
|
function XGuildDormRoom:SetIsShow(value)
|
|
|
|
|
if self.IsShow == value then return end
|
|
|
|
|
self.IsShow = value
|
2024-09-01 20:49:41 +00:00
|
|
|
|
---@param role XGuildDormRole
|
2023-07-14 19:35:33 +00:00
|
|
|
|
for _, role in pairs(self.Roles) do
|
2024-09-01 20:49:41 +00:00
|
|
|
|
role:GetRLRole():SetMeshRenderersIsEnable(value)
|
|
|
|
|
if not role:CheckIsSelfPlayer() then
|
|
|
|
|
role:GetRLRole():SetTransparent(XDataCenter.GuildDormManager.GetHideOtherPlayers() and 0 or 1)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
for _, com in ipairs(self.GDComponentManager:GetComponents()) do
|
|
|
|
|
if com.CheckRoomIsShow then
|
|
|
|
|
com:CheckRoomIsShow(value)
|
|
|
|
|
end
|
2023-07-14 19:35:33 +00:00
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
--============
|
|
|
|
|
--显示房间GameObject
|
|
|
|
|
--============
|
|
|
|
|
function XGuildDormRoom:Show()
|
|
|
|
|
self.RoomBuild:Show()
|
|
|
|
|
self.IsShow = true
|
|
|
|
|
end
|
|
|
|
|
--============
|
|
|
|
|
--隐藏房间GameObject
|
|
|
|
|
--============
|
|
|
|
|
function XGuildDormRoom:Hide()
|
|
|
|
|
self.RoomBuild:Hide()
|
|
|
|
|
self.IsShow = false
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XGuildDormRoom:SetRolesMeshRendererIsEnable(value)
|
|
|
|
|
for _, role in ipairs(self.Roles) do
|
|
|
|
|
role:GetRLRole():SetMeshRenderersIsEnable(value)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
2024-09-01 20:49:41 +00:00
|
|
|
|
-- 播放镜头切换 (已废弃)
|
|
|
|
|
function XGuildDormRoom:PlayCameraSwitchAnim(targetTrans, finishedCb)
|
|
|
|
|
-- 获取原先镜头
|
|
|
|
|
local camera = XDataCenter.GuildDormManager.SceneManager.GetCurrentScene():GetCamera()
|
|
|
|
|
local cameraController = XDataCenter.GuildDormManager.SceneManager.GetCurrentScene():GetCameraController()
|
|
|
|
|
-- 获取切换主镜头,设置相同位置,旋转,大小
|
|
|
|
|
local switchMainCamera = self.RoomBuild:GetSwitchMainCamera()
|
|
|
|
|
local orginCamera = self.RoomBuild:GetSwitchCameraByName("NearCamera1")
|
|
|
|
|
local targetCamera = self.RoomBuild:GetSwitchCameraByName("NearCamera2")
|
|
|
|
|
-- 获取指定名称的镜头,设置相同偏移,隐藏原镜头
|
|
|
|
|
orginCamera.transform.position = camera.transform.position
|
|
|
|
|
orginCamera.transform.rotation = camera.transform.rotation
|
|
|
|
|
orginCamera.transform.localScale = camera.transform.localScale
|
|
|
|
|
orginCamera.m_Lens = CS.Cinemachine.LensSettings.FromCamera(camera)
|
|
|
|
|
-- 设置目标镜头的位置信息
|
|
|
|
|
targetCamera.transform.position = targetTrans.position
|
|
|
|
|
targetCamera.transform.rotation = targetTrans.rotation
|
|
|
|
|
-- 设置禁用相关
|
|
|
|
|
cameraController.enabled = false
|
|
|
|
|
switchMainCamera.enabled = true
|
|
|
|
|
orginCamera.gameObject:SetActiveEx(true)
|
|
|
|
|
XScheduleManager.ScheduleOnce(function()
|
|
|
|
|
targetCamera.gameObject:SetActiveEx(true)
|
|
|
|
|
local time = XCameraHelper.GetBlendTime(switchMainCamera, 0)
|
|
|
|
|
XScheduleManager.ScheduleOnce(finishedCb, math.ceil(time * 1000))
|
|
|
|
|
end, 1)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
-- 恢复镜头控制 (已废弃)
|
|
|
|
|
function XGuildDormRoom:ResetCameraController(finishedCb)
|
|
|
|
|
-- 获取切换主镜头
|
|
|
|
|
local camera = XDataCenter.GuildDormManager.SceneManager.GetCurrentScene():GetCamera()
|
|
|
|
|
local cameraController = XDataCenter.GuildDormManager.SceneManager.GetCurrentScene():GetCameraController()
|
|
|
|
|
local switchMainCamera = self.RoomBuild:GetSwitchMainCamera()
|
|
|
|
|
local orginCamera = self.RoomBuild:GetSwitchCameraByName("NearCamera1")
|
|
|
|
|
local targetCamera = self.RoomBuild:GetSwitchCameraByName("NearCamera2")
|
|
|
|
|
targetCamera.gameObject:SetActiveEx(false)
|
|
|
|
|
local time = XCameraHelper.GetBlendTime(switchMainCamera, 1)
|
|
|
|
|
XScheduleManager.ScheduleOnce(function()
|
|
|
|
|
switchMainCamera.enabled = false
|
|
|
|
|
cameraController.enabled = true
|
|
|
|
|
if finishedCb then finishedCb() end
|
|
|
|
|
end, math.ceil(time * 1000))
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XGuildDormRoom:DestroyNpc(npc)
|
|
|
|
|
local npcManagerCom = self.GDComponentManager:GetComponent("XGDNpcManagerComponent")
|
|
|
|
|
npcManagerCom:DestroyNpc(npc)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XGuildDormRoom:GetSpecialUiEntities()
|
|
|
|
|
local result = {}
|
|
|
|
|
for _, v in pairs(self:GetFurnitureDic()) do
|
|
|
|
|
if #v:GetSpecialUiNames() > 0 then
|
|
|
|
|
table.insert(result, v)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
return result
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
-- 更新家具随机奖励
|
|
|
|
|
function XGuildDormRoom:UpdateFurnitureRandomReward()
|
|
|
|
|
local remaindCount = XDataCenter.GuildDormManager.GetRemaindRewardCount()
|
|
|
|
|
local furnitures = {}
|
|
|
|
|
for _, v in pairs(self:GetFurnitureDic()) do
|
|
|
|
|
if v:CheckIsAllocatedReward() then
|
|
|
|
|
remaindCount = remaindCount - 1
|
|
|
|
|
else
|
|
|
|
|
if v:CheckIsGetReward() then
|
|
|
|
|
table.insert(furnitures, v)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
remaindCount = math.max(remaindCount, 0)
|
|
|
|
|
if #furnitures <= 0 then return end
|
|
|
|
|
local index = nil
|
|
|
|
|
while remaindCount > 0 do
|
|
|
|
|
index = XTool.Random(1, #furnitures)
|
|
|
|
|
furnitures[index]:SetIsAllocatedReward(true)
|
|
|
|
|
remaindCount = remaindCount - 1
|
|
|
|
|
table.remove(furnitures, index)
|
|
|
|
|
if #furnitures <= 0 then return end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XGuildDormRoom:GetWalkCueId()
|
|
|
|
|
return XDataCenter.GuildDormManager.GetThemeCfg().StepCueId
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XGuildDormRoom:GetCurrentThemeId()
|
|
|
|
|
return XDataCenter.GuildDormManager.GetThemeCfg().Id
|
|
|
|
|
end
|
|
|
|
|
|
2023-07-14 19:35:33 +00:00
|
|
|
|
return XGuildDormRoom
|