using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; namespace Snxxz.UI { public class HazyRegionIncidentBehaviour : ScrollItem { [SerializeField] UIAlphaTween m_AlphaTween; [SerializeField] UILinerMove m_LinerMove; [SerializeField] Text m_IncidentTitle; [SerializeField] Text m_DepletionPoint; [SerializeField] Image m_Icon; [SerializeField] Transform m_ContainerCrossServer; [SerializeField] Transform m_ContainerItem; [SerializeField] ItemBehaviour[] m_Items; [SerializeField] Text[] m_ItemDescriptions; [SerializeField] Transform m_ContainerProcessing; [SerializeField] Transform m_ContainerCompleted; [SerializeField] Transform m_ContainerSelect; [SerializeField] Button m_Select; [Header("Boss")] [SerializeField] Transform m_ContainerBoss; [SerializeField] Text m_BossName; [SerializeField] Text m_PlayerCount; [SerializeField] Text m_RebornTime; public UIAlphaTween alphaTween { get { return m_AlphaTween; } } public UILinerMove linerMove { get { return m_LinerMove; } } HazyRegionModel model { get { return ModelCenter.Instance.GetModel(); } } int incidentId = 0; HazyRegionIncidentType incidentType = HazyRegionIncidentType.Adventure; private void Awake() { m_Select.SetListener(OnSelect); } public override void Display(object _data) { base.Display(_data); incidentId = (int)_data; var config = HazyRegionConfig.Get(incidentId); incidentType = (HazyRegionIncidentType)config.incidentType; DisplayBase(); DisplayItems(); DisplayState(); DisplaySelect(); DisplayBoss(); model.selectIncidentRefresh -= SelectIncidentRefresh; model.selectIncidentRefresh += SelectIncidentRefresh; model.onHazyRegionIncidentRefresh -= OnHazyRegionIncidentRefresh; model.onHazyRegionIncidentRefresh += OnHazyRegionIncidentRefresh; } void DisplayBase() { var config = HazyRegionConfig.Get(incidentId); m_DepletionPoint.text = Language.Get("HazyRegionPoint", config.point); m_IncidentTitle.text = config.name; m_Icon.SetSprite(config.PortraitID); m_Icon.SetNativeSize(); m_ContainerCrossServer.gameObject.SetActive(config.crossServer == 1); } void DisplayItems() { var config = HazyRegionConfig.Get(incidentId); for (int i = 0; i < m_Items.Length; i++) { if (config.reward != null && i < config.reward.Length) { m_Items[i].gameObject.SetActive(true); m_Items[i].SetItem(config.reward[i], 1); m_ItemDescriptions[i].gameObject.SetActive(true); m_ItemDescriptions[i].text = config.rewardState[i] == 0 ? string.Empty : Language.Get(StringUtility.Contact("HazyRegionItemState_", config.rewardState[i])); } else { m_Items[i].gameObject.SetActive(false); m_ItemDescriptions[i].gameObject.SetActive(false); } } } void DisplayBoss() { m_ContainerBoss.gameObject.SetActive(incidentType == HazyRegionIncidentType.DemonKing); var config = HazyRegionConfig.Get(incidentId); if (incidentType == HazyRegionIncidentType.DemonKing) { var npcConfig = NPCConfig.Get(config.npcId); m_BossName.text = npcConfig.charName; } DisplayBossState(); } void DisplayBossState() { if (incidentType == HazyRegionIncidentType.DemonKing) { if (model.InFakeHazyRegion) { var fighting = ClientDungeonStageUtility.isClientDungeon; m_PlayerCount.gameObject.SetActive(true); m_RebornTime.gameObject.SetActive(false); m_PlayerCount.text = Language.Get("HazyDemonKingPlayerCount", fighting ? 1 : 0); } else { m_PlayerCount.gameObject.SetActive(false); m_RebornTime.gameObject.SetActive(false); } } } void DisplayState() { HazyRegionModel.Incident incident; if (model.TryGetIncident(incidentId, out incident)) { m_ContainerCompleted.gameObject.SetActive(incident.state == HazyRegionModel.IncidentState.Complete); m_ContainerProcessing.gameObject.SetActive(incident.state == HazyRegionModel.IncidentState.Processing); } } void DisplaySelect() { m_ContainerSelect.gameObject.SetActive(incidentId == model.selectIncident); } private void SelectIncidentRefresh() { DisplaySelect(); } private void OnHazyRegionIncidentRefresh() { DisplayState(); } private void OnSelect() { model.selectIncident = incidentId; } public override void Dispose() { base.Dispose(); model.selectIncidentRefresh -= SelectIncidentRefresh; model.onHazyRegionIncidentRefresh -= OnHazyRegionIncidentRefresh; } } }