using System;
using System.Collections.Generic;
using System.Linq;
using Cysharp.Threading.Tasks;
using UnityEngine;
using UnityEngine.UI;
///
/// 淘金派遣总管理
///
public class GoldRushWorkerWin : UIBase
{
[SerializeField] GroupButtonEx workMgrBtn; //派遣管理
[SerializeField] GroupButtonEx workersBtn; //监工人员管理
[SerializeField] Transform workMgrRect;
[SerializeField] Transform workersRect;
//派遣管理
[SerializeField] ScrollerController workMgrScroller;
[SerializeField] Transform workMgrEmpty;
[SerializeField] Text lazyWorkerCntText; //空闲监工数量
[SerializeField] Text warehouseCntText; //仓库数量
[SerializeField] Button getAllAwardBtn;
//监工人员管理
[SerializeField] ScrollerController workersScroller;
[SerializeField] Text unlockWorkerCntText; //解锁监工数量
[SerializeField] Text totalWorkFinishCount; //淘金完成总次数
[NonSerialized] public List goldRushMissionList = new List();
protected override void InitComponent()
{
workMgrBtn.AddListener(OnWorkMgrBtnClick);
workersBtn.AddListener(OnWorkerBtnClick);
getAllAwardBtn.AddListener(GetAllAward);
}
protected override void OnPreOpen()
{
CreateWorkersScroller();
GoldRushManager.Instance.OnGoldRushCampEvent += OnGoldRushCampEvent;
GoldRushManager.Instance.OnGoldRushInfoEvent += OnGoldRushInfoEvent;
workMgrScroller.OnRefreshCell += OnRefreshWorkMgrCell;
workersScroller.OnRefreshCell += OnRefreshWorkersCell;
GlobalTimeEvent.Instance.secondEvent += OnSecondEvent;
PlayerDatas.Instance.playerDataRefreshEvent += OnPlayerDataRefreshEvent;
if (functionOrder == 0)
{
workMgrBtn.SelectBtn();
}
else
{
workersBtn.SelectBtn();
}
Display();
}
protected override void OnPreClose()
{
GoldRushManager.Instance.OnGoldRushCampEvent -= OnGoldRushCampEvent;
GoldRushManager.Instance.OnGoldRushInfoEvent -= OnGoldRushInfoEvent;
workMgrScroller.OnRefreshCell -= OnRefreshWorkMgrCell;
workersScroller.OnRefreshCell -= OnRefreshWorkersCell;
GlobalTimeEvent.Instance.secondEvent -= OnSecondEvent;
PlayerDatas.Instance.playerDataRefreshEvent -= OnPlayerDataRefreshEvent;
}
void OnPlayerDataRefreshEvent(PlayerDataType type)
{
if (type == GoldRushManager.Instance.unLockMoneyType)
{
workersScroller.m_Scorller.RefreshActiveCellViews();
}
}
void Display()
{
if (functionOrder == 0)
{
RefreshWorkingList();
CreateManagerScroller();
DispalyWorkMgr();
}
else
{
DispalyWorkers();
}
}
//派遣中管理
void DispalyWorkMgr()
{
workMgrRect.SetActive(true);
workersRect.SetActive(false);
int workingCnt = GoldRushManager.Instance.GetWarehouseCnt();
if (workingCnt == 0)
{
workMgrScroller.SetActive(false);
workMgrEmpty.SetActive(true);
getAllAwardBtn.SetActive(false);
}
else
{
workMgrScroller.SetActive(true);
workMgrEmpty.SetActive(false);
getAllAwardBtn.SetActive(true);
}
lazyWorkerCntText.text = Language.Get("GoldRush20") + GoldRushManager.Instance.GetEmptyWorkerCount() + "/" + GoldRushManager.Instance.maxWorkerCount;
warehouseCntText.text = Language.Get("GoldRush21") + workingCnt + "/" + GoldRushManager.Instance.warehouseMaxCnt;
workMgrScroller.m_Scorller.RefreshActiveCellViews();
}
//派遣中的队列 + 完成的队列,动态变化的
void CreateManagerScroller()
{
if (workMgrScroller.GetNumberOfCells(workMgrScroller.m_Scorller) == goldRushMissionList.Count)
return;
workMgrScroller.Refresh();
for (int i = 0; i < goldRushMissionList.Count; ++i)
{
workMgrScroller.AddCell(ScrollerDataType.Header, i);
}
workMgrScroller.Restart();
}
//派遣中的队列 + 完成的队列,动态变化的
//ID组成
// 派遣中类型1*100000 + campid*100 + 0
// 完成类型2*100000 + goldid*100 + 索引
void RefreshWorkingList()
{
goldRushMissionList.Clear();
var keys = GoldRushManager.Instance.campInfoDict.Keys.ToList();
for (int i = 0; i < keys.Count; i++)
{
var campInfo = GoldRushManager.Instance.campInfoDict[keys[i]];
if (campInfo.GoldID == 0 || campInfo.EndTime == 0)
{
continue;
}
goldRushMissionList.Add(100000 * 1 + campInfo.CampID * 100 + 0);
}
for (int i = 0; i < GoldRushManager.Instance.warehouseIDList.Length; i++)
{
if (GoldRushManager.Instance.warehouseIDList[i] == 0)
{
continue;
}
goldRushMissionList.Add(100000 * 2 + GoldRushManager.Instance.warehouseIDList[i] * 100 + i);
}
}
void OnRefreshWorkMgrCell(ScrollerDataType type, CellView cell)
{
var _cell = cell as GoldRushWorkCell;
if (cell.index >= goldRushMissionList.Count)
{
_cell.Display(-1);
}
else
{
_cell.Display(goldRushMissionList[cell.index]);
}
}
void OnSecondEvent()
{
if (functionOrder == 0)
{
workMgrScroller.m_Scorller.RefreshActiveCellViews();
}
}
void DispalyWorkers()
{
workMgrRect.SetActive(false);
workersRect.SetActive(true);
unlockWorkerCntText.text = Language.Get("GoldRush39") + GoldRushManager.Instance.maxWorkerCount + "/" + GoldRushManager.Instance.m_MaxWorkerCount;
totalWorkFinishCount.text = Language.Get("GoldRush40") + GoldRushManager.Instance.panningCnt;
workersScroller.m_Scorller.RefreshActiveCellViews();
}
void CreateWorkersScroller()
{
workersScroller.Refresh();
var keys = GoldRushWorkerConfig.GetKeys().ToList();
for (int i = 0; i < keys.Count; ++i)
{
workersScroller.AddCell(ScrollerDataType.Header, keys[i]);
}
workersScroller.Restart();
}
void OnRefreshWorkersCell(ScrollerDataType type, CellView cell)
{
var _cell = cell as GoldRushWorkerCell;
_cell.Display(cell.index);
}
void OnWorkMgrBtnClick()
{
functionOrder = 0;
Display();
}
void OnWorkerBtnClick()
{
functionOrder = 1;
Display();
}
void GetAllAward()
{
if (GoldRushManager.Instance.GetFinishGoldRushCount() == 0)
{
return;
}
GoldRushManager.Instance.SendGoldRushWarehouseAward(0, 1);
}
void OnGoldRushCampEvent(int campID)
{
Display();
}
void OnGoldRushInfoEvent()
{
Display();
}
}