175 lines
5.7 KiB
Lua
175 lines
5.7 KiB
Lua
|
local XUiDormSecondHead = XClass(XLuaBehaviour, "XUiDormSecondHead")
|
|||
|
local MAXPERSON = 3
|
|||
|
|
|||
|
function XUiDormSecondHead:Ctor(uiRoot, ui)
|
|||
|
self.GameObject = ui.gameObject
|
|||
|
self.Transform = ui.transform
|
|||
|
self.UiRoot = uiRoot
|
|||
|
|
|||
|
self.characterData = {}
|
|||
|
|
|||
|
XTool.InitUiObject(self)
|
|||
|
end
|
|||
|
|
|||
|
function XUiDormSecondHead:Init()
|
|||
|
XEventManager.AddEventListener(XEventId.EVENT_DORM_EXP_DETAIL_SHOW, self.OnExpDetailShow, self)
|
|||
|
XEventManager.AddEventListener(XEventId.EVENT_DORM_TOUCH_ENTER, self.OnTouchEnter, self)
|
|||
|
XEventManager.AddEventListener(XEventId.EVENT_DORM_TOUCH_HIDE, self.OnTouchHide, self)
|
|||
|
XEventManager.AddEventListener(XEventId.EVENT_CHARACTER_CHANGE_ROOM_CHARACTER, self.OnChangeRoomCharacter, self)
|
|||
|
CsXGameEventManager.Instance:RegisterEvent(XEventId.EVENT_HOME_CHARACTER_STATUS_CHANGE, handler(self, self.OnChangeState))
|
|||
|
|
|||
|
for i=1,MAXPERSON do
|
|||
|
self.UiRoot:RegisterClickEvent(self["Head" .. i], function()
|
|||
|
self:OnBtnHeadClick(i)
|
|||
|
end)
|
|||
|
end
|
|||
|
|
|||
|
for i=1,MAXPERSON do
|
|||
|
self.UiRoot:RegisterClickEvent(self["BtnTouch" .. i], function()
|
|||
|
self:OnBtnTouchClick(i)
|
|||
|
end)
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
function XUiDormSecondHead:OnDestroy()
|
|||
|
XEventManager.RemoveEventListener(XEventId.EVENT_DORM_EXP_DETAIL_SHOW, self.OnExpDetailShow, self)
|
|||
|
XEventManager.RemoveEventListener(XEventId.EVENT_DORM_TOUCH_ENTER, self.OnTouchEnter, self)
|
|||
|
XEventManager.RemoveEventListener(XEventId.EVENT_DORM_TOUCH_HIDE, self.OnTouchHide, self)
|
|||
|
XEventManager.RemoveEventListener(XEventId.EVENT_CHARACTER_CHANGE_ROOM_CHARACTER, self.OnChangeRoomCharacter, self)
|
|||
|
CsXGameEventManager.Instance:RemoveEvent(XEventId.EVENT_HOME_CHARACTER_STATUS_CHANGE, handler(self, self.OnChangeState))
|
|||
|
|
|||
|
self:RemoveTimer()
|
|||
|
end
|
|||
|
|
|||
|
--@region 事件处理相关
|
|||
|
|
|||
|
function XUiDormSecondHead:OnBtnHeadClick(i)
|
|||
|
local character = self.characterData[i]
|
|||
|
if character then
|
|||
|
if not XDataCenter.DormManager.IsWorking(character.CharacterId) then
|
|||
|
local activeCharacter = XHomeCharManager.GetActiveCharacter(character.CharacterId)
|
|||
|
if activeCharacter then
|
|||
|
--角色被点击时先处理OnPointerDown,再处理OnClick,跳过PointerDown可能会导致角色行为状态不能成功改变
|
|||
|
activeCharacter:OnPointerDown()
|
|||
|
activeCharacter:OnClick()
|
|||
|
--点击先默认将红点消掉
|
|||
|
self["Head" .. i]:ShowReddot(false)
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
function XUiDormSecondHead:OnBtnTouchClick(i)
|
|||
|
local character = self.characterData[i]
|
|||
|
XEventManager.DispatchEvent(XEventId.EVENT_DORM_HEAD_TOUCH, self.CharacterId)
|
|||
|
end
|
|||
|
|
|||
|
--通过监听来显示抚摸按钮,因为不一定总是能抚摸
|
|||
|
function XUiDormSecondHead:OnExpDetailShow(characterId, transform)
|
|||
|
local index = self:GetIndexByCharacterId(characterId)
|
|||
|
if index then
|
|||
|
--保证只出现一个抚摸按钮
|
|||
|
for i=1,MAXPERSON do
|
|||
|
self["BtnTouch" .. i].gameObject:SetActiveEx(index == i)
|
|||
|
end
|
|||
|
|
|||
|
self:RemoveTimer()
|
|||
|
self.Timer = XScheduleManager.ScheduleOnce(function()
|
|||
|
self["BtnTouch" .. index].gameObject:SetActiveEx(false)
|
|||
|
end, XDormConfig.DISPPEAR_TIME)
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
function XUiDormSecondHead:OnTouchEnter(characterId)
|
|||
|
local index = self:GetIndexByCharacterId(characterId)
|
|||
|
if index then
|
|||
|
self["BtnTouch" .. index].gameObject:SetActiveEx(false)
|
|||
|
end
|
|||
|
|
|||
|
self.GameObject:SetActive(false)
|
|||
|
end
|
|||
|
|
|||
|
function XUiDormSecondHead:OnTouchHide()
|
|||
|
self.GameObject:SetActive(true)
|
|||
|
end
|
|||
|
|
|||
|
function XUiDormSecondHead:OnChangeState(_, args)
|
|||
|
local characterId = args[0]
|
|||
|
local index = self:GetIndexByCharacterId(characterId)
|
|||
|
if index then
|
|||
|
self["Head" .. index]:ShowReddot(self:IsHaveCharacterEvent(characterId))
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
function XUiDormSecondHead:OnChangeRoomCharacter(characterIds)
|
|||
|
if self.dormId then
|
|||
|
self:Refresh(self.dormId)
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
--@endregion
|
|||
|
|
|||
|
--@region 逻辑处理
|
|||
|
|
|||
|
function XUiDormSecondHead:Refresh(dormId)
|
|||
|
self.dormId = dormId
|
|||
|
self.characterData = self:GetCharacterData(dormId)
|
|||
|
|
|||
|
for i=1,MAXPERSON do
|
|||
|
local character = self.characterData[i]
|
|||
|
local btn = self["Head" .. i]
|
|||
|
if character then
|
|||
|
btn.gameObject:SetActiveEx(true)
|
|||
|
|
|||
|
local iconpath = XDormConfig.GetCharacterStyleConfigQSIconById(character.CharacterId)
|
|||
|
if iconpath then
|
|||
|
self.UiRoot:SetUiSprite(self["ImgHead" .. i], iconpath)
|
|||
|
end
|
|||
|
|
|||
|
btn:ShowReddot(self:IsHaveCharacterEvent(character.CharacterId))
|
|||
|
|
|||
|
self["PanelWorking" .. i].gameObject:SetActiveEx(XDataCenter.DormManager.IsWorking(character.CharacterId))
|
|||
|
else
|
|||
|
btn.gameObject:SetActiveEx(false)
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
function XUiDormSecondHead:GetCharacterData(dormId)
|
|||
|
local data = XDataCenter.DormManager.GetRoomDataByRoomId(self.dormId)
|
|||
|
if data then
|
|||
|
return data:GetCharacter() or {}
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
function XUiDormSecondHead:GetIndexByCharacterId(characterId)
|
|||
|
for i,v in ipairs(self.characterData) do
|
|||
|
if v.CharacterId == characterId then
|
|||
|
return i
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
function XUiDormSecondHead:RemoveTimer()
|
|||
|
if self.Timer then
|
|||
|
XScheduleManager.UnSchedule(self.Timer)
|
|||
|
self.Timer = nil
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
function XUiDormSecondHead:IsHaveCharacterEvent(characterId)
|
|||
|
local eventTemp = XHomeCharManager.GetCharacterEvent(characterId, true)
|
|||
|
if eventTemp then
|
|||
|
if eventTemp.BehaviorId == XHomeBehaviorStatus.REWAWRD
|
|||
|
or eventTemp.BehaviorId == XHomeBehaviorStatus.BORING
|
|||
|
or eventTemp.BehaviorId == XHomeBehaviorStatus.WANTTOUCH then
|
|||
|
return true
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
return false
|
|||
|
end
|
|||
|
|
|||
|
--@endregion
|
|||
|
|
|||
|
return XUiDormSecondHead
|