PGRData/Script/matrix/xui/xuidormcomponent/XUiGridDialogBox.lua

91 lines
No EOL
2.6 KiB
Lua

local XUiGridDialogBox = XClass(XLuaBehaviour, "XUiGridDialogBox")
function XUiGridDialogBox:Ctor(rootUi, ui)
self.GameObject = ui.gameObject
self.Transform = ui.transform
XTool.InitUiObject(self)
end
function XUiGridDialogBox:RefreshContext(contextId)
self.DailogConfig = XDormConfig.GetCharacterDialogConfig(contextId)
if not self.DailogConfig or #self.DailogConfig.Content <= 0 then
return
end
self:PlayDialog(1)
end
function XUiGridDialogBox:PlayDialog(index)
-- 播放完对话
if index > #self.DailogConfig.Content then
if self.Cb then
self.Cb()
end
return
end
local context = self.DailogConfig.Content[index] or ""
if XDataCenter.DormManager.CheckInTouch() then
self.TxtTouchDesc.text = string.gsub(context, "\\n", "\n")
else
self.TxtDesc.text = string.gsub(context, "\\n", "\n")
end
local time = self.DailogConfig.Time[index] or 0
XScheduleManager.ScheduleOnce(function()
if XTool.UObjIsNil(self.Transform) or not self.GameObject.activeSelf then
return
end
index = index + 1
self:PlayDialog(index)
end, time)
end
function XUiGridDialogBox:UpdateTransform(transform)
local pos = transform.position + self.Offset
local viewPos = XHomeDormManager.GetWorldToViewPoint(self.CurRoomId, pos)
self.Transform.localPosition = viewPos
end
function XUiGridDialogBox:Show(curRoomId, characterId, contextId, transform, cb)
self.CurRoomId = curRoomId
self.Cb = cb
self.TargetTransform = transform
local styleConfig = XDormConfig.GetCharacterStyleConfigById(characterId)
if XDataCenter.DormManager.CheckInTouch() then
self.PanelBoxNamorl.gameObject:SetActive(false)
self.PanelBoxTouch.gameObject:SetActive(true)
self.Offset = CS.UnityEngine.Vector3(0, styleConfig.DailogTouchHight, 0)
else
self.PanelBoxNamorl.gameObject:SetActive(true)
self.PanelBoxTouch.gameObject:SetActive(false)
self.Offset = CS.UnityEngine.Vector3(0, styleConfig.DailogWidgetHight, 0)
end
self:RefreshContext(contextId)
self:UpdateTransform(self.TargetTransform)
self.GameObject:SetActive(true)
end
function XUiGridDialogBox:Hide()
self.TargetTransform = nil
self.GameObject:SetActive(false)
end
function XUiGridDialogBox:Update()
if XTool.UObjIsNil(self.Transform) or not self.GameObject.activeSelf then
return
end
if XTool.UObjIsNil(self.TargetTransform) then
return
end
self:UpdateTransform(self.TargetTransform)
end
return XUiGridDialogBox