using System.Collections;
using System.Collections.Generic;
using Cysharp.Threading.Tasks;
using UnityEngine;
using UnityEngine.UI;
///
/// 内政 - 基本用于淘金
///
public class AffairBaseWin : UIBase
{
[SerializeField] Button bagBtn;
//淘金相关
[SerializeField] GameObject fullGoldRush;
[SerializeField] Image goldRushIcon;
[SerializeField] Text goldRushCountText;
[SerializeField] Button goldRushItemBtn;
[SerializeField] Image goldRushItemProcess;
[SerializeField] Text autoText;
[SerializeField] GameObject flowAutoEffect;
[SerializeField] Button autoBtn;
//NPC对话相关
[SerializeField] HeroSkinModel[] funcNPCs;
[SerializeField] Transform[] talkRects;
[SerializeField] Text[] talkTexts;
[SerializeField] UIEffectPlayer autoMGEffect;
protected override void InitComponent()
{
bagBtn.AddListener(() =>
{
UIManager.Instance.OpenWindowAsync().Forget();
}
);
goldRushIcon.SetIconWithMoneyType(52);
goldRushItemBtn.AddListener(() =>
{
ItemTipUtility.ShowMoneyTip(52, false);
}
);
autoBtn.AddListener(() =>
{
if (FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.GoldRush, true))
{
UIManager.Instance.OpenWindowAsync().Forget();
}
}
);
}
protected override void OnPreOpen()
{
GoldRushManager.Instance.OnGoldRushInfoEvent += OnGoldRushInfoEvent;
GoldRushManager.Instance.OnAutoWorkingEvent += OnAutoWorkingEvent;
GlobalTimeEvent.Instance.secondEvent += OnSecondEvent;
PlayerDatas.Instance.playerDataRefreshEvent += PlayerDataRefreshEvent;
GlobalTimeEvent.Instance.fiveSecondEvent += OnFiveSecondEvent;
MinggeManager.Instance.ChangeAutoEvent += ChangeAutoEvent;
Display();
if (GoldRushManager.Instance.openAutoGoldRush)
{
GoldRushManager.Instance.GetAllAward();
}
ChangeAutoEvent();
}
protected override void OnPreClose()
{
GoldRushManager.Instance.OnGoldRushInfoEvent -= OnGoldRushInfoEvent;
GoldRushManager.Instance.OnAutoWorkingEvent -= OnAutoWorkingEvent;
GlobalTimeEvent.Instance.secondEvent -= OnSecondEvent;
PlayerDatas.Instance.playerDataRefreshEvent -= PlayerDataRefreshEvent;
GlobalTimeEvent.Instance.fiveSecondEvent -= OnFiveSecondEvent;
MinggeManager.Instance.ChangeAutoEvent -= ChangeAutoEvent;
}
void ChangeAutoEvent()
{
if (!FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.Mingge))
{
return;
}
if (MinggeManager.Instance.isStartAuto)
{
autoMGEffect.Play();
funcNPCs[5].GetModel().PlayAnimation("suanming", true);
}
else
{
autoMGEffect.Stop();
funcNPCs[5].GetModel().PlayAnimation("idle", true);
}
}
protected override void OnOpen()
{
GoldRushManager.Instance.ResumeAutoWorking();
}
void Display()
{
fullGoldRush.SetActive(GoldRushManager.Instance.GetFinishGoldRushCount() >= GoldRushManager.Instance.warehouseMaxCnt);
RefreshGoldRushMoney();
autoText.text = Language.Get(GoldRushManager.Instance.isAutoWorking ? "GoldRush34" : "GoldRush24");
if (FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.GoldRush))
{
autoBtn.SetActive(true);
goldRushItemBtn.SetActive(true);
}
else
{
autoBtn.SetActive(false);
goldRushItemBtn.SetActive(false);
}
foreach (var npc in funcNPCs)
{
var key = npc.heroSkinID;
if (!FuncOpen.Instance.IsFuncOpen(FuncNPCManager.Instance.funcNPCToFuncID[key]))
{
npc.SetActive(false);
}
else
{
npc.SetActive(true);
}
}
}
void OnGoldRushInfoEvent()
{
fullGoldRush.SetActive(GoldRushManager.Instance.GetFinishGoldRushCount() >= GoldRushManager.Instance.warehouseMaxCnt);
}
void OnSecondEvent()
{
RefreshGoldRushMoney();
}
void OnAutoWorkingEvent()
{
if (GoldRushManager.Instance.isAutoWorking)
{
autoText.text = Language.Get("GoldRush34");
flowAutoEffect.SetActive(true);
}
else
{
autoText.text = Language.Get("GoldRush24");
flowAutoEffect.SetActive(false);
}
}
void RefreshGoldRushMoney()
{
var count = UIHelper.GetMoneyCnt(52);
if (count > 0)
{
goldRushCountText.text = count + "/" + GoldRushManager.Instance.goldRushMissionMaxCnt;
}
else
{
//倒计时
goldRushCountText.text = TimeUtility.SecondsToMS(GoldRushManager.Instance.restoreMissionSeconds - (TimeUtility.AllSeconds - GoldRushManager.Instance.lastRecoverTime));
}
goldRushItemProcess.fillAmount = (float)count / GoldRushManager.Instance.goldRushMissionMaxCnt;
}
void PlayerDataRefreshEvent(PlayerDataType type)
{
if (type == PlayerDataType.GoldRush)
{
RefreshGoldRushMoney();
}
}
void OnFiveSecondEvent()
{
var skinID = FuncNPCManager.Instance.GetRandomAffairNpcTalk();
var talk = FuncNPCManager.Instance.GetAffairTalk(skinID);
var index = 0;
for (int i = 0; i < funcNPCs.Length; i++)
{
if (funcNPCs[i].heroSkinID == skinID)
{
index = i;
break;
}
}
if (talk != null)
{
talkTexts[index].text = Language.Get(talk);
talkRects[index].SetActive(true);
}
var npc = funcNPCs[index].GetModel();
npc.PlayAnimation("hanhua", true);
Talk(index).Forget();
}
async UniTask Talk(int index)
{
await UniTask.Delay(5000);
if (this == null) return; // destroyed during await
talkRects[index].SetActive(false);
var npc = funcNPCs[index].GetModel();
npc.PlayAnimation("idle", true);
}
}