using System;
|
using System.Collections;
|
using System.Collections.Generic;
|
using UnityEngine;
|
using UnityEngine.UI;
|
|
namespace Snxxz.UI
|
{
|
public class DungeonGuardSkyBehaviour : MonoBehaviour
|
{
|
[SerializeField] List<Image> m_NpcIcons;
|
[SerializeField] List<Button> m_NpcButtons;
|
[SerializeField] List<Text> m_NpcNames;
|
[SerializeField] List<Slider> m_NpcSliders;
|
[SerializeField] List<Text> m_NpcExpTxts;
|
[SerializeField] List<UIEffect> m_HurtEffects;
|
|
DungeonModel m_Model;
|
DungeonModel model
|
{
|
get
|
{
|
return m_Model ?? (m_Model = ModelCenter.Instance.GetModel<DungeonModel>());
|
}
|
}
|
|
private void Awake()
|
{
|
for (int i = 0; i < m_NpcButtons.Count; i++)
|
{
|
var _index = i;
|
m_NpcButtons[i].onClick.AddListener(() =>
|
{
|
OnNpcClick(_index);
|
});
|
}
|
}
|
|
private void OnNpcClick(int _index)
|
{
|
var _npcId = model.guardSkyGuardNpcs[_index];
|
MapTransferUtility.Instance.MoveToNPC(_npcId);
|
}
|
|
private void OnEnable()
|
{
|
TimeMgr.Instance.OnSyntonyEvent += OnSyntonyEvent;
|
model.updateMissionEvent += UpdateMissionEvent;
|
for (int i = 0; i < model.guardSkyGuardNpcs.Length; i++)
|
{
|
var _npcId = model.guardSkyGuardNpcs[i];
|
var _npcCfg = NPCConfig.Get(_npcId);
|
m_NpcIcons[i].SetSprite(_npcCfg.HeadPortrait);
|
m_NpcNames[i].text = _npcCfg.charName;
|
m_NpcSliders[i].maxValue = 100;
|
m_NpcSliders[i].minValue = 1;
|
}
|
var _expPer = 0;
|
for (int i = 0; i < model.guardSkyBuffIds.Length; i++)
|
{
|
var _buffId = model.guardSkyBuffIds[i];
|
var _skillCfg = SkillConfig.Get(_buffId);
|
if (_expPer == 0)
|
{
|
_expPer = _skillCfg.EffectValue11;
|
}
|
else if (_skillCfg.EffectValue11 < _expPer)
|
{
|
_expPer = _skillCfg.EffectValue11;
|
}
|
}
|
for (int i = 0; i < m_NpcExpTxts.Count; i++)
|
{
|
m_NpcExpTxts[i].text = StringUtility.Contact("EXP+", _expPer / 100, "%");
|
}
|
UpdateMissionEvent();
|
}
|
|
private void OnSyntonyEvent(TimeMgr.SyntonyType _type)
|
{
|
if (_type == TimeMgr.SyntonyType.GuardHurtEffect)
|
{
|
for (int i = 0; i < m_HurtEffects.Count; i++)
|
{
|
m_HurtEffects[i].StopImediatly();
|
}
|
}
|
}
|
|
private void PlayEffect(int _index)
|
{
|
TimeMgr.Instance.Register(TimeMgr.SyntonyType.GuardHurtEffect, 2.0f);
|
if (!m_HurtEffects[_index].IsPlaying)
|
{
|
m_HurtEffects[_index].Play();
|
}
|
}
|
|
private void UpdateMissionEvent()
|
{
|
for (int i = 0; i < m_NpcSliders.Count; i++)
|
{
|
var _npcId = model.guardSkyGuardNpcs[i];
|
var _npcInfo = GetNpcInfo(_npcId);
|
if (_npcInfo.Equals(default(DungeonNPCInfo)) || _npcInfo.HPPer == 0)
|
{
|
m_NpcIcons[i].material = MaterialUtility.GetDefaultSpriteGrayMaterial();
|
m_NpcSliders[i].value = 0;
|
if (i < 2)
|
{
|
m_NpcExpTxts[i].gameObject.SetActive(false);
|
}
|
}
|
else
|
{
|
var _per = _npcInfo.HPPer;
|
if (_per < m_NpcSliders[i].value && _per != 100)
|
{
|
PlayEffect(i);
|
}
|
m_NpcSliders[i].value = _npcInfo.HPPer;
|
m_NpcIcons[i].material = MaterialUtility.GetUIDefaultGraphicMaterial();
|
if (i < 2)
|
{
|
m_NpcExpTxts[i].gameObject.SetActive(true);
|
}
|
}
|
}
|
}
|
|
|
|
private DungeonNPCInfo GetNpcInfo(int _npcId)
|
{
|
if (model.mission.npc == null)
|
{
|
return default(DungeonNPCInfo);
|
}
|
for (int i = 0; i < model.mission.npc.Length; i++)
|
{
|
if (model.mission.npc[i].NPCID == _npcId)
|
{
|
return model.mission.npc[i];
|
}
|
}
|
return default(DungeonNPCInfo);
|
}
|
|
private void OnDisable()
|
{
|
model.updateMissionEvent -= UpdateMissionEvent;
|
TimeMgr.Instance.OnSyntonyEvent -= OnSyntonyEvent;
|
}
|
}
|
}
|