using System; using System.Collections; using System.Collections.Generic; using TableConfig; using UnityEngine; using UnityEngine.UI; namespace Snxxz.UI { public class FairyGrabBossBehaviour : ScrollItem { [SerializeField] AutoSelectCyclicScroll m_Scroll; [SerializeField] SmoothMask m_SmoothMask; [SerializeField] RectTransform m_CenterSign; [SerializeField] RectTransform m_ContainerSelect; [SerializeField] RectTransform m_ContainerKilling; [SerializeField] RectTransform m_ContainerKilled; [SerializeField] RectTransform m_ContainerMapName; [SerializeField] Image m_BossPortrait; [SerializeField] Text m_MapName; [SerializeField] Text m_BossType; [SerializeField] Text m_BossName; [SerializeField] Image m_RealmIcon; [SerializeField] Text m_Progress; [SerializeField] Button m_Select; public int bossId { get; private set; } FairyGrabBossModel model { get { return ModelCenter.Instance.GetModel(); } } private void Awake() { m_Select.AddListener(SelectBoss); } private void SelectBoss() { m_Scroll.TrySelectData(bossId); } public override void Display(object _data) { base.Display(_data); bossId = (int)_data; DrawBossBaseInfo(); DisplayProgress(); OnSelected(model.selectBoss); model.bossSelectedEvent -= OnSelected; model.bossSelectedEvent += OnSelected; model.bossProgressUpdate -= BossProgressUpdate; model.bossProgressUpdate += BossProgressUpdate; model.stateUpdate -= StateUpdate; model.stateUpdate += StateUpdate; } public override void Dispose() { base.Dispose(); model.bossSelectedEvent -= OnSelected; model.bossProgressUpdate -= BossProgressUpdate; model.stateUpdate -= StateUpdate; } private void OnSelected(int _bossId) { m_ContainerSelect.gameObject.SetActive(model.selectBoss == bossId); } void DrawBossBaseInfo() { var config = Config.Instance.Get(bossId); var bossInfoConfig = Config.Instance.Get(bossId); var mapConfig = Config.Instance.Get(bossInfoConfig.MapID); var npcConfig = Config.Instance.Get(bossId); m_BossPortrait.SetSprite(config.PortraitID); m_MapName.text = mapConfig.Name; m_BossName.text = npcConfig.charName; var petConfig = Config.Instance.Get(config.petId); m_BossType.text = string.Empty; if (petConfig != null) { m_BossType.text = Language.Get("FairyGrabPet"); m_BossName.color = UIHelper.GetUIColor(petConfig.Quality, true); } var horseConfig = Config.Instance.Get(config.horseId); if (horseConfig != null) { m_BossType.text = Language.Get("FairyGrabHorse"); m_BossName.color = UIHelper.GetUIColor(horseConfig.Quality, true); } var realmConfig = Config.Instance.Get(npcConfig.ClientRealm); if (realmConfig != null) { m_RealmIcon.SetSprite(realmConfig.Img); } } private void BossProgressUpdate(int _bossId) { if (_bossId == bossId) { DisplayProgress(); } } private void StateUpdate() { DisplayProgress(); } void DisplayProgress() { FairyGrabBossModel.BossProgressInfo bossProgress; bool killed = false; bool opened = model.InActivityTime; if (model.TryGetBossProgress(bossId, out bossProgress)) { var progress = 1 - (float)bossProgress.currentHp / bossProgress.totalHp; m_Progress.text = StringUtility.Contact((int)(progress * 100), "%"); killed = progress >= 1; } else { m_Progress.text = StringUtility.Contact(0, "%"); } m_ContainerKilled.gameObject.SetActive(killed && opened); m_ContainerKilling.gameObject.SetActive(!killed && opened); m_BossPortrait.material = opened && !killed ? m_SmoothMask.imageMaterials[0] : m_SmoothMask.imageMaterials[1]; m_ContainerMapName.gameObject.SetActive(!opened); } protected virtual void LateUpdate() { if (m_Scroll.autoSelectable && model.selectBoss != bossId && bossId > 0) { if (Mathf.Abs(m_CenterSign.position.y - rectTransform.position.y) * 100f < rectTransform.rect.height * 0.45f) { model.selectBoss = bossId; } } } } }