Files
JJBB/Assets/Project/Script/GUI/Other/BuffersSelectCtr.cs
2024-08-23 15:49:34 +08:00

326 lines
8.6 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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);
}
}
}
}