326 lines
8.6 KiB
C#
326 lines
8.6 KiB
C#
|
using System.Collections;
|
|||
|
using System.Collections.Generic;
|
|||
|
using Module.Log;
|
|||
|
using UnityEngine;
|
|||
|
using UnityEngine.UI;
|
|||
|
|
|||
|
public class BuffersSelectCtr : MonoBehaviour {
|
|||
|
|
|||
|
#region Single
|
|||
|
|
|||
|
private static BuffersSelectCtr _instance;
|
|||
|
public static BuffersSelectCtr Instance
|
|||
|
{
|
|||
|
get
|
|||
|
{
|
|||
|
if (_instance != null)
|
|||
|
{
|
|||
|
return _instance;
|
|||
|
}
|
|||
|
|
|||
|
return null;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
#endregion
|
|||
|
|
|||
|
public List<BufferItem> ownBuffers; // 拥有的Buffer
|
|||
|
public List<BufferItem> newBuffers; // 可替换的新Buffer
|
|||
|
public Button closeBtn; // 关闭按钮
|
|||
|
public Text replaceTips; // 替换提示
|
|||
|
public Text remainTimeObj; // 当前剩余时间(仅时间)
|
|||
|
public Text remainTimeDesc; // 当前剩余时间描述
|
|||
|
public UIBackRayBehind behindMask; // 空白点击面板
|
|||
|
|
|||
|
private BufferItem curSelectItem; // 当前选择的BufferItem;
|
|||
|
private int selOwnIndex = -1; // 选中自身buff的槽位索引,用于替换
|
|||
|
private int selNewIndex = -1; // 选中新buff的槽位索引
|
|||
|
private const float PreparaTime = 15.0f; // 剩余时间
|
|||
|
private float remainTime;
|
|||
|
|
|||
|
private void Awake()
|
|||
|
{
|
|||
|
if(_instance == null)
|
|||
|
{
|
|||
|
_instance = this;
|
|||
|
}
|
|||
|
|
|||
|
if (ownBuffers.Count != newBuffers.Count)
|
|||
|
{
|
|||
|
LogModule.ErrorLog("ownBuffers.Count != newBuffers.Count, please check !!!");
|
|||
|
}
|
|||
|
|
|||
|
for(int i = 0; i < ownBuffers.Count; ++i)
|
|||
|
{
|
|||
|
ownBuffers[i]._PanelClickEvent += OnOwnBufferClick;
|
|||
|
newBuffers[i]._PanelClickEvent += OnNewBufferClick;
|
|||
|
}
|
|||
|
|
|||
|
closeBtn.onClick.AddListener(Close);
|
|||
|
behindMask._BackClick.AddListener(CancelSelect);
|
|||
|
}
|
|||
|
|
|||
|
// 仅在替换是可用
|
|||
|
private void CancelSelect()
|
|||
|
{
|
|||
|
if(EmptyIndexOfOwn() == -1 && selNewIndex != -1 && selOwnIndex == -1)
|
|||
|
{
|
|||
|
selNewIndex = -1;
|
|||
|
curSelectItem = null;
|
|||
|
replaceTips.gameObject.SetActive(false);
|
|||
|
SetMask();
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
private void OnEnable()
|
|||
|
{
|
|||
|
remainTime = PreparaTime;
|
|||
|
curSelectItem = null;
|
|||
|
selOwnIndex = -1;
|
|||
|
selNewIndex = -1;
|
|||
|
replaceTips.gameObject.SetActive(false);
|
|||
|
remainTimeObj.gameObject.SetActive(false);
|
|||
|
}
|
|||
|
|
|||
|
private void OnDestroy()
|
|||
|
{
|
|||
|
_instance = null;
|
|||
|
}
|
|||
|
|
|||
|
// Use this for initialization
|
|||
|
void Start () {
|
|||
|
if(ownBuffers.Count != newBuffers.Count)
|
|||
|
{
|
|||
|
LogModule.ErrorLog("ownBuffers.Count != newBuffers.Count, please check !!!");
|
|||
|
}
|
|||
|
|
|||
|
for(int i = 0; i < ownBuffers.Count; ++i)
|
|||
|
{
|
|||
|
ownBuffers[i].Show(null);
|
|||
|
newBuffers[i].Show(null);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
// 自身Buffer点击后的回调
|
|||
|
private void OnOwnBufferClick(UIBase item)
|
|||
|
{
|
|||
|
// 仅当需要替换时,对拥有的Buffer做出反应
|
|||
|
if (curSelectItem != null && EmptyIndexOfOwn() == -1)
|
|||
|
{
|
|||
|
BufferItem replaceItem = item as BufferItem;
|
|||
|
if(replaceItem == null)
|
|||
|
{
|
|||
|
LogModule.ErrorLog("Replace buffer is null, please check !!!");
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
selOwnIndex = ownBuffers.IndexOf(replaceItem);
|
|||
|
|
|||
|
if (selOwnIndex == -1)
|
|||
|
{
|
|||
|
LogModule.ErrorLog("Can't find replace buffer Index, please check !!!");
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
Hashtable info_newBuffer = new Hashtable();
|
|||
|
info_newBuffer["Info"] = curSelectItem.BuffInfo.ImpactID;
|
|||
|
|
|||
|
ownBuffers[selOwnIndex].Show(info_newBuffer);
|
|||
|
|
|||
|
remainTime = 3.0f;
|
|||
|
replaceTips.gameObject.SetActive(false);
|
|||
|
|
|||
|
SetMask();
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
// 新的可调换Buffer点击回调
|
|||
|
private void OnNewBufferClick(UIBase item)
|
|||
|
{
|
|||
|
BufferItem tempSelect = item as BufferItem;
|
|||
|
if(tempSelect == null)
|
|||
|
{
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
if(curSelectItem != null)
|
|||
|
{
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
selNewIndex = newBuffers.IndexOf(tempSelect);
|
|||
|
|
|||
|
curSelectItem = tempSelect;
|
|||
|
int emptyIndex = EmptyIndexOfOwn();
|
|||
|
if(emptyIndex != -1)
|
|||
|
{
|
|||
|
Hashtable hash = new Hashtable();
|
|||
|
hash["Info"] = curSelectItem.BuffInfo.ImpactID;
|
|||
|
ownBuffers[emptyIndex].Show(hash);
|
|||
|
selOwnIndex = emptyIndex;
|
|||
|
remainTime = 3.0f;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
replaceTips.gameObject.SetActive(true);
|
|||
|
}
|
|||
|
|
|||
|
SetMask();
|
|||
|
}
|
|||
|
|
|||
|
#region 消息接收与发送
|
|||
|
|
|||
|
public void ReceiveNewBuffers(object packet)
|
|||
|
{
|
|||
|
ReqTestingOptionBuff info = packet as ReqTestingOptionBuff;
|
|||
|
if(info == null)
|
|||
|
{
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
this.gameObject.SetActive(true);
|
|||
|
for (int i = 0; i < ownBuffers.Count; ++i)
|
|||
|
{
|
|||
|
if (i < info._OwnBuffId.Count)
|
|||
|
{
|
|||
|
Hashtable hash = new Hashtable() { { "Info", info._OwnBuffId[i] } };
|
|||
|
ownBuffers[i].Show(hash);
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
ownBuffers[i].Show(null);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
for(int i = 0; i < info._OptionBuffId.Count; ++i)
|
|||
|
{
|
|||
|
Hashtable hash = new Hashtable() { { "Info", info._OptionBuffId[i] } };
|
|||
|
newBuffers[i].Show(hash);
|
|||
|
}
|
|||
|
|
|||
|
StartCoroutine("CountDown");
|
|||
|
SetMask();
|
|||
|
}
|
|||
|
|
|||
|
private IEnumerator CountDown()
|
|||
|
{
|
|||
|
remainTimeObj.gameObject.SetActive(true);
|
|||
|
for(; remainTime > 0.0f; remainTime -= Time.deltaTime)
|
|||
|
{
|
|||
|
remainTimeDesc.text = ((int)remainTime).ToString();
|
|||
|
yield return 0;
|
|||
|
}
|
|||
|
|
|||
|
Close();
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
// 确认所选的Buff
|
|||
|
public void ConfimBuffers()
|
|||
|
{
|
|||
|
if(curSelectItem == null)
|
|||
|
{
|
|||
|
// 拥有空槽位时,随机选取一个Buff
|
|||
|
if(EmptyIndexOfOwn() != -1)
|
|||
|
{
|
|||
|
int r = Random.Range(0, newBuffers.Count - 1);
|
|||
|
Hashtable hash = new Hashtable() { { "Info", newBuffers[r].BuffInfo.ImpactID } };
|
|||
|
ownBuffers[EmptyIndexOfOwn()].Show(hash);
|
|||
|
TestingCopyBuffInfoCtr.Instance.SetBuffer(newBuffers[r].BuffInfo.ImpactID);
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
if(EmptyIndexOfOwn() != -1)
|
|||
|
{
|
|||
|
TestingCopyBuffInfoCtr.Instance.SetBuffer(curSelectItem.BuffInfo.ImpactID);
|
|||
|
}
|
|||
|
else if(selOwnIndex != -1)
|
|||
|
{
|
|||
|
TestingCopyBuffInfoCtr.Instance.SetBuffer(curSelectItem.BuffInfo.ImpactID, selOwnIndex);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
// 发送信息确认新buff
|
|||
|
List<int> curBuffs = new List<int>();
|
|||
|
for(int i = 0; i < ownBuffers.Count; ++i)
|
|||
|
{
|
|||
|
if(ownBuffers[i].BuffInfo != null)
|
|||
|
{
|
|||
|
curBuffs.Add(ownBuffers[i].BuffInfo.ImpactID);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
RetTestingOptionBuff packet = new RetTestingOptionBuff();
|
|||
|
packet._BuffId = curBuffs;
|
|||
|
packet.SendMsg();
|
|||
|
}
|
|||
|
|
|||
|
#endregion
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 获得自身Buffer槽中的空槽位索引
|
|||
|
/// </summary>
|
|||
|
/// <returns>空位索引,当为 -1 表示已满</returns>
|
|||
|
private int EmptyIndexOfOwn()
|
|||
|
{
|
|||
|
for(int i = 0; i < ownBuffers.Count; ++i)
|
|||
|
{
|
|||
|
if(ownBuffers[i].BuffInfo == null)
|
|||
|
{
|
|||
|
return i;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
return -1;
|
|||
|
}
|
|||
|
|
|||
|
public void Close()
|
|||
|
{
|
|||
|
ConfimBuffers();
|
|||
|
this.gameObject.SetActive(false);
|
|||
|
}
|
|||
|
|
|||
|
private void SetMask()
|
|||
|
{
|
|||
|
|
|||
|
//for(int i = 0; i < ownBuffers.Count; ++i)
|
|||
|
//{
|
|||
|
// ownBuffers[i].SetMask(ownBuffers[i].BuffInfo == null);
|
|||
|
//}
|
|||
|
|
|||
|
if(selOwnIndex == -1)
|
|||
|
{
|
|||
|
if(selNewIndex == -1)
|
|||
|
{
|
|||
|
for (int i = 0; i < newBuffers.Count; ++i)
|
|||
|
{
|
|||
|
newBuffers[i].SetMask(false);
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
for (int i = 0; i < newBuffers.Count; ++i)
|
|||
|
{
|
|||
|
if(selNewIndex == i)
|
|||
|
{
|
|||
|
newBuffers[i].SetMask(false);
|
|||
|
newBuffers[i].Selected();
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
newBuffers[i].SetMask(true);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
for (int i = 0; i < newBuffers.Count; ++i)
|
|||
|
{
|
|||
|
newBuffers[i].SetMask(true);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|