PGRData/Script/matrix/xui/xuidormcharacterdetail/XUiDormCharacterDetail.lua
2024-09-01 22:49:41 +02:00

160 lines
No EOL
6.6 KiB
Lua

local XUiGridDetailDormCharacter = require("XUi/XUiDormCharacterDetail/XUiGridDetailDormCharacter")
local XUiDormCharacterDetail = XLuaUiManager.Register(XLuaUi, "UiDormCharacterDetail")
function XUiDormCharacterDetail:OnAwake()
self:AddListener()
XUiHelper.SetSceneType(CS.XSceneType.Ui)
XEventManager.AddEventListener(XEventId.EVENT_CHARACTER_MOOD_CHANGED, self.UpdateMoodInfo, self)
XEventManager.AddEventListener(XEventId.EVENT_CHARACTER_VITALITY_CHANGED, self.UpdateVitalityInfo, self)
--这里处理一下场景类型
end
function XUiDormCharacterDetail:OnDisable()
XHomeDormManager.ShowOrHideBuilding(true)
XUiHelper.SetSceneType(CS.XSceneType.Dormitory)
end
function XUiDormCharacterDetail:OnDestroy()
XEventManager.RemoveEventListener(XEventId.EVENT_CHARACTER_MOOD_CHANGED, self.UpdateMoodInfo, self)
XEventManager.RemoveEventListener(XEventId.EVENT_CHARACTER_VITALITY_CHANGED, self.UpdateVitalityInfo, self)
if self.Resource then
self.Resource:Release()
end
if self.Model then
CS.UnityEngine.Object.Destroy(self.Model)
end
end
function XUiDormCharacterDetail:OnStart(characterId, fromDorm)
XHomeDormManager.ShowOrHideBuilding(false)
self.CharacterId = characterId
self.FromDorm = fromDorm
XHomeCharManager.HideAllCharacter()
self:InitStyleInfo()
self:InitModelInfo()
self:InitExpInfo()
self.AssetPanel = XUiPanelAsset.New(self, self.PanelAsset, XDataCenter.ItemManager.ItemId.DormCoin, XDataCenter.ItemManager.ItemId.FurnitureCoin)
end
function XUiDormCharacterDetail:AddListener()
self:RegisterClickEvent(self.BtnBack, self.OnBtnBackClick)
self:RegisterClickEvent(self.BtnMainUi, self.OnBtnMainUiClick)
self:RegisterClickEvent(self.BtnLikeInfo, self.OnBtnLikeInfoClick)
self:RegisterClickEvent(self.BtnFriendInfo, self.OnBtnFriendInfoClick)
end
function XUiDormCharacterDetail:OnBtnMainUiClick()
XHomeCharManager.ShowAllCharacter()
XHomeDormManager.SetIllumination()
XLuaUiManager.RunMain()
end
function XUiDormCharacterDetail:OnBtnBackClick()
XHomeCharManager.ShowAllCharacter()
if self.FromDorm then
XHomeDormManager.SetIllumination()
end
self:Close()
end
function XUiDormCharacterDetail:OnBtnLikeInfoClick()
XLuaUiManager.Open("UiDormCharacterLikeInfo", self.CharacterId)
end
function XUiDormCharacterDetail:OnBtnFriendInfoClick()
-- 暂未开放
XUiManager.TipMsg(CS.XTextManager.GetText("ComingSoon"), XUiManager.UiTipType.Tip)
end
function XUiDormCharacterDetail:InitStyleInfo()
self.GridHostelCharacter.gameObject:SetActive(false)
local charStyleConfig = XDormConfig.GetCharacterStyleConfigById(self.CharacterId)
local loveTypeConfig = XFurnitureConfigs.GetDormFurnitureType(charStyleConfig.LoveType)
local likeTypeConfig = XFurnitureConfigs.GetDormFurnitureType(charStyleConfig.LikeType)
self.TxtName.text = charStyleConfig.NameFrist
self.TxtLastName.text = charStyleConfig.NameLast
self:SetUiSprite(self.ImgLove, loveTypeConfig.TypeIcon)
self:SetUiSprite(self.ImgLike, likeTypeConfig.TypeIcon)
self.TxtLove.text = CS.XTextManager.GetText("DormHight", loveTypeConfig.Color, loveTypeConfig.TypeName)
self.TxtLike.text = CS.XTextManager.GetText("DormMiddle", likeTypeConfig.Color, likeTypeConfig.TypeName)
for i = 1, #charStyleConfig.LikeCharIds do
local grid = CS.UnityEngine.Object.Instantiate(self.GridHostelCharacter)
local gridDormCharacter = XUiGridDetailDormCharacter.New(grid)
gridDormCharacter:Refresh(charStyleConfig.LikeCharIds[i], true)
grid.transform:SetParent(self.PanelLikeConent, false)
gridDormCharacter.GameObject:SetActive(true)
end
for i = 1, #charStyleConfig.HateCharIds do
local grid = CS.UnityEngine.Object.Instantiate(self.GridHostelCharacter)
local gridDormCharacter = XUiGridDetailDormCharacter.New(grid)
gridDormCharacter:Refresh(charStyleConfig.HateCharIds[i], false)
grid.transform:SetParent(self.PanelHateConent, false)
gridDormCharacter.GameObject:SetActive(true)
end
end
function XUiDormCharacterDetail:InitModelInfo()
local charStyleConfig = XDormConfig.GetCharacterStyleConfigById(self.CharacterId)
local root = self.UiModelGo.transform
local target = root:FindTransform("PanelRoleModel")
self.Resource = CS.XResourceManager.Load(charStyleConfig.Model)
self.Model = CS.UnityEngine.Object.Instantiate(self.Resource.Asset)
self.Model.transform:SetParent(target, false)
self.Model.gameObject:SetLayerRecursively(target.gameObject.layer)
self.PanelDrag.Target = self.Model.transform
CS.XShadowHelper.AddShadow(self.Model, true)
local animator = self.Model:GetComponent("Animator")
animator:SetInteger("State", 1)
end
function XUiDormCharacterDetail:InitExpInfo()
local characterData = XDataCenter.DormManager.GetCharacterDataByCharId(self.CharacterId)
self.ImgHpExp.fillAmount = characterData.Vitality / XDormConfig.DORM_VITALITY_MAX_VALUE
self.ImgMoodExp.fillAmount = characterData.Mood / XDormConfig.DORM_MOOD_MAX_VALUE
self.TxtHpCount.text = CS.XTextManager.GetText("DormCharacterHpLeft", characterData.Vitality, XDormConfig.DORM_VITALITY_MAX_VALUE)
self.TxtMoodState.text = XDormConfig.GetMoodStateDesc(characterData.Mood)
self.ImgMoodExp.color = XDormConfig.GetMoodStateColor(characterData.Mood)
XDataCenter.DormManager.GetDormitoryRecoverSpeed(self.CharacterId, function(moodSpeed, vitalitySpeed)
self.TxtMoodRecover.text = CS.XTextManager.GetText("DormCharacterMoodSpeed", moodSpeed)
self.TxtHpRecover.text = CS.XTextManager.GetText("DormCharacterHpSpeed", vitalitySpeed)
end)
end
function XUiDormCharacterDetail:UpdateMoodInfo(characterId)
if not self.CharacterId or self.CharacterId ~= characterId then
return
end
local characterData = XDataCenter.DormManager.GetCharacterDataByCharId(self.CharacterId)
self.ImgMoodExp.fillAmount = characterData.Mood / XDormConfig.DORM_MOOD_MAX_VALUE
self.TxtMoodState.text = XDormConfig.GetMoodStateDesc(characterData.Mood)
self.ImgMoodExp.color = XDormConfig.GetMoodStateColor(characterData.Mood)
end
function XUiDormCharacterDetail:UpdateVitalityInfo(characterId)
if not self.CharacterId or self.CharacterId ~= characterId then
return
end
local characterData = XDataCenter.DormManager.GetCharacterDataByCharId(self.CharacterId)
self.ImgHpExp.fillAmount = characterData.Vitality / XDormConfig.DORM_VITALITY_MAX_VALUE
self.TxtHpCount.text = CS.XTextManager.GetText("DormCharacterHpLeft", characterData.Vitality, XDormConfig.DORM_VITALITY_MAX_VALUE)
end