using System;
|
using System.Collections;
|
using System.Collections.Generic;
|
using UnityEngine;
|
using UnityEngine.UI;
|
|
namespace vnxbqy.UI
|
{
|
public class RuneHoleBehaviour : MonoBehaviour
|
{
|
[SerializeField] Image m_Icon;
|
[SerializeField] Text m_Level;
|
[SerializeField] Transform m_ContainerRune;
|
[SerializeField] Transform m_ContainerLock;
|
[SerializeField] Transform m_ContainerSelect;
|
[SerializeField] Button m_ContainerAddSign;
|
[SerializeField] UIEffect m_MultiPropertyEffect;
|
[SerializeField] Button m_Select;
|
[SerializeField] RedpointBehaviour m_Redpoint;
|
|
int hole = 0;
|
|
Coroutine coroutine = null;
|
|
RuneModel model { get { return ModelCenter.Instance.GetModel<RuneModel>(); } }
|
|
private void Awake()
|
{
|
m_Select.AddListener(OnSelect);
|
}
|
|
public void Display(int hole)
|
{
|
this.hole = hole;
|
model.onSelectHoleRefresh += OnSelectHoleRefresh;
|
model.onOpenNewHole += OnOpenNewHole;
|
model.onRuneHoleRefresh += OnRuneHoleRefresh;
|
|
DisplayBase();
|
DisplaySelect();
|
|
RuneModel.RuneHoleRedpoint redpoint;
|
if (model.TryGetRedpoint(hole, out redpoint))
|
{
|
m_Redpoint.redpointId = redpoint.redpoint.id;
|
}
|
}
|
|
public void Dispose()
|
{
|
model.onSelectHoleRefresh -= OnSelectHoleRefresh;
|
model.onOpenNewHole -= OnOpenNewHole;
|
model.onRuneHoleRefresh -= OnRuneHoleRefresh;
|
|
if (coroutine != null)
|
{
|
StopCoroutine(coroutine);
|
}
|
}
|
|
void DisplayBase()
|
{
|
var isHoleOpne = model.IsRuneHoleOpen(hole, model.holeState);
|
m_ContainerLock.SetActive(!isHoleOpne);
|
|
RuneItem runeItem;
|
var existRune = model.TryGetRuneHoleItem(hole, out runeItem);
|
m_ContainerAddSign.RemoveAllListeners();
|
m_ContainerAddSign.SetActive(isHoleOpne && !existRune);
|
if (isHoleOpne && !existRune)
|
m_ContainerAddSign.AddListener(OpenRunePack);
|
m_ContainerRune.SetActive(isHoleOpne && existRune);
|
|
m_MultiPropertyEffect.StopImediatly();
|
|
if (existRune)
|
{
|
var config = ItemConfig.Get(runeItem.id);
|
m_Icon.SetSprite(config.IconKey);
|
m_Level.text = Language.Get("Z1024", runeItem.level);
|
m_Level.color = UIHelper.GetUIColor(config.ItemColor);
|
if (model.IsMultiPropertyRune(runeItem.id))
|
{
|
m_MultiPropertyEffect.Play();
|
}
|
}
|
}
|
|
private void OpenRunePack()
|
{
|
OnSelect();
|
RunePackWin.selectHole = model.selectHole;
|
WindowCenter.Instance.Open<RunePackWin>();
|
}
|
|
void DisplaySelect()
|
{
|
m_ContainerSelect.SetActive(model.selectHole == hole);
|
}
|
|
private void OnOpenNewHole(int _hole)
|
{
|
if (hole == _hole && hole == model.specialHole)
|
{
|
coroutine = StartCoroutine(Co_DisplayHole());
|
}
|
}
|
|
private void OnRuneHoleRefresh()
|
{
|
if (hole == model.specialHole && model.unlockingSpecialHole)
|
{
|
return;
|
}
|
DisplayBase();
|
}
|
|
IEnumerator Co_DisplayHole()
|
{
|
yield return WaitingForSecondConst.WaitMS800;
|
DisplayBase();
|
coroutine = null;
|
}
|
|
private void OnSelectHoleRefresh()
|
{
|
DisplaySelect();
|
}
|
|
private void OnSelect()
|
{
|
if (model.IsRuneHoleOpen(hole, model.holeState) || hole == model.specialHole)
|
{
|
model.selectHole = hole;
|
}
|
else
|
{
|
RuneHoleCondition condition;
|
if (model.TryGetRuneHoleCondition(hole, out condition))
|
{
|
var config = RuneTowerFloorConfig.Get(condition.runeTowerFloor);
|
var tower = RuneTowerConfig.Get(config.TowerId);
|
SysNotifyMgr.Instance.ShowTip("RuneUnlock", StringUtility.Contact(tower.TowerName, config.FloorName));
|
}
|
}
|
}
|
}
|
}
|
|