using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
///
/// 游戏主界面(主战斗场景)
///
public class HomeWin : UIBase
{
//经验区
[SerializeField] Text playerLevelText;
[SerializeField] SmoothSlider expSlider;
[SerializeField] Button officialUpBtn;
//任务区
[SerializeField] Button taskButton; //引导或者领取任务奖励
[SerializeField] RichText taskText;
[SerializeField] Text taskNumText;
[SerializeField] Image awardIcon;
[SerializeField] Text awardCnt;
[SerializeField] UIEffectPlayer taskEffect;
[SerializeField] UIEffectPlayer lvUPEffect;
//关卡
[SerializeField] Button bossBtn;
[SerializeField] MainLevelWaveCell[] mainLevelWaves;
[SerializeField] ScrollRect mainLevelScrollRect;
[SerializeField] Text levelName;
[SerializeField] GameObject restMark;
[SerializeField] Button restBtn;
[SerializeField] GameObject fightMark;
[SerializeField] ScaleTween bossTween;
[SerializeField] GameObject bossmask; //完成进度遮挡管道 纯显示
[SerializeField] GameObject bossActiveGo;
[SerializeField] GameObject bitemeGo;
[SerializeField] Text processText;
//卡牌
[SerializeField] HeroFightingCardCell[] heroFightingCardCells;
[SerializeField] Button changeHeroPosBtn;
//底部功能
[SerializeField] Button autoBtn;
[SerializeField] Image autoCloseImg;
[SerializeField] UIEffectPlayer autoOpenEffect;
[SerializeField] Button blessLVBtn;
[SerializeField] Text blessLVText;
[SerializeField] Button mailBtn;
//其他功能入口
[SerializeField] Button monthCardBtn;
[SerializeField] Button FirstChargeBtn;
///
/// 初始化组件
///
protected override void InitComponent()
{
taskButton.AddListener(OnClickTaskButton);
bossBtn.AddListener(OnClickEnterBoss);
changeHeroPosBtn.AddListener(() =>
{
HeroUIManager.Instance.selectTeamType = TeamType.Story;
UIManager.Instance.OpenWindow();
});
autoBtn.AddListener(() =>
{
if (!FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.AutoFight, true))
{
return;
}
UIManager.Instance.OpenWindow();
});
monthCardBtn.AddListener(() =>
{
InvestModel.Instance.BuyInvest(InvestModel.monthCardType);
});
FirstChargeBtn.AddListener(() =>
{
UIManager.Instance.OpenWindow();
});
blessLVBtn.AddListener(() =>
{
if (!FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.BlessLV, true))
{
return;
}
UIManager.Instance.OpenWindow();
});
mailBtn.AddListener(() =>
{
UIManager.Instance.OpenWindow();
});
officialUpBtn.AddListener(() =>
{
if (RealmConfig.GetKeys().Count <= PlayerDatas.Instance.baseData.realmLevel)
return;
UIManager.Instance.OpenWindow();
});
restBtn.AddListener(GotoRest);
}
public void Display()
{
UpdatePlayerInfo();
UpdateTask();
RefreshRecharge();
ShowBlessLV();
DisplayAutoFight();
DisplayCard(TeamType.Story);
DisplayLevel();
DisplayRestState();
}
protected override void OnPreOpen()
{
PlayerDatas.Instance.playerDataRefreshEvent += PlayerDataRefresh;
TaskManager.Instance.OnTaskUpdate += UpdateTask;
BlessLVManager.Instance.OnBlessLVUpdateEvent += ShowBlessLV;
AutoFightModel.Instance.ChangeAutoEvent += DisplayAutoFight;
AutoFightModel.Instance.OnFightEvent += ChangeMode;
TeamManager.Instance.OnTeamChange += DisplayCard;
UIManager.Instance.OnCloseWindow += OnCloseWindow;
FuncOpen.Instance.OnFuncStateChangeEvent += OnFuncStateChange;
FirstChargeManager.Instance.OnUpdateFirstChargeInfo += OnUpdateFirstChargeInfo;
GlobalTimeEvent.Instance.secondEvent += OnSecondEvent;
HeroUIManager.Instance.OnUnLockHeroCountEvent += OnUnLockHeroCountEvent;
Display();
DisplayFirstChargeBtn();
// var battleWin = UIManager.Instance.OpenWindow();
// battleWin.SetBattleField(BattleManager.Instance.storyBattleField);
}
protected override void OnPreClose()
{
PlayerDatas.Instance.playerDataRefreshEvent -= PlayerDataRefresh;
TaskManager.Instance.OnTaskUpdate -= UpdateTask;
BlessLVManager.Instance.OnBlessLVUpdateEvent -= ShowBlessLV;
AutoFightModel.Instance.ChangeAutoEvent -= DisplayAutoFight;
AutoFightModel.Instance.OnFightEvent -= ChangeMode;
TeamManager.Instance.OnTeamChange -= DisplayCard;
UIManager.Instance.OnCloseWindow -= OnCloseWindow;
FuncOpen.Instance.OnFuncStateChangeEvent -= OnFuncStateChange;
FirstChargeManager.Instance.OnUpdateFirstChargeInfo -= OnUpdateFirstChargeInfo;
GlobalTimeEvent.Instance.secondEvent -= OnSecondEvent;
HeroUIManager.Instance.OnUnLockHeroCountEvent -= OnUnLockHeroCountEvent;
// 关闭的时候把战斗界面也给关了 虽然是在外面开的
UIManager.Instance.CloseWindow();
}
private void OnClickEnterBoss()
{
// BattleField battleField = BattleManager.Instance.GetBattleFieldByMapID(2); //BOSS战斗
// if (null != battleField)
// {
// StoryBossBattleWin fsBattleWin = UIManager.Instance.OpenWindow();
// fsBattleWin.SetBattleField(battleField);
// return;
// }
UIManager.Instance.OpenWindow();
}
int lastLV = 0;
void PlayerDataRefresh(PlayerDataType type)
{
switch (type)
{
case PlayerDataType.TotalExp:
case PlayerDataType.ExpPoint:
ShowExp();
break;
case PlayerDataType.LV:
if (lastLV != PlayerDatas.Instance.baseData.LV)
{
lastLV = PlayerDatas.Instance.baseData.LV;
lvUPEffect.Play();
}
playerLevelText.text = PlayerDatas.Instance.baseData.LV.ToString();
break;
case PlayerDataType.ExAttr1:
case PlayerDataType.ExAttr2:
DisplayLevel();
break;
}
}
void RefreshRecharge()
{
monthCardBtn.SetActive(!InvestModel.Instance.IsInvested(InvestModel.monthCardType));
}
void ShowBlessLV()
{
blessLVText.text = BlessLVManager.Instance.m_TreeLV.ToString();
}
void DisplayAutoFight()
{
if (AutoFightModel.Instance.isAutoAttackSet)
{
autoCloseImg.SetActive(false);
autoOpenEffect.Play();
}
else
{
autoCloseImg.SetActive(true);
autoOpenEffect.Stop();
}
}
///
/// 更新玩家信息
///
private void UpdatePlayerInfo()
{
playerLevelText.text = PlayerDatas.Instance.baseData.LV.ToString();
ShowExp();
}
void ShowExp()
{
var lvConfig = PlayerLVConfig.Get(PlayerDatas.Instance.baseData.LV);
expSlider.value = (float)PlayerDatas.Instance.baseData.curExp / lvConfig.EXP;
expSlider.Text.text = PlayerDatas.Instance.baseData.curExp + "/" + PlayerLVConfig.Get(PlayerDatas.Instance.baseData.LV).EXP;
}
void UpdateTask()
{
var task = TaskManager.Instance.mainTask;
if (task.TaskID == 0)
{
taskButton.SetActive(false);
}
else
{
taskButton.SetActive(true);
var taskConfig = TaskConfig.Get(task.TaskID);
taskText.text = taskConfig.TaskDescribe;
taskNumText.text = string.Format("({0}/{1})", task.CurValue, taskConfig.NeedValue);
taskNumText.color = task.CurValue >= taskConfig.NeedValue ? UIHelper.GetUIColor(TextColType.NavyYellow) : UIHelper.GetUIColor(TextColType.Red);
if (TaskManager.Instance.GetMainTaskState() == 2)
{
taskEffect.Play();
}
else
{
taskEffect.Stop();
}
awardIcon.SetOrgSprite(ItemConfig.Get(taskConfig.AwardItemList[0][0]).IconKey);
awardCnt.text = taskConfig.AwardItemList[0][1].ToString();
}
}
void OnClickTaskButton()
{
if (TaskManager.Instance.GetMainTaskState() == 2)
{
//领取任务奖励
CA504_tagCMPlayerGetReward getReward = new CA504_tagCMPlayerGetReward();
getReward.RewardType = 66;
getReward.DataEx = (uint)TaskManager.Instance.mainTask.TaskID;
GameNetSystem.Instance.SendInfo(getReward);
}
TaskManager.Instance.ClickTask();
}
void DisplayCard(TeamType teamType)
{
if (teamType != TeamType.Story)
return;
var team = TeamManager.Instance.GetTeam(teamType);
var heros = team.GetHerosOnTeam();
//显示卡牌
for (int i = 0; i < heroFightingCardCells.Length; i++)
{
heroFightingCardCells[i].Display(i, heros);
}
}
private void OnCloseWindow(UIBase closeUI)
{
//其他武将功能产生数据变化,需要刷新武将列表
if (closeUI is HeroTrainWin)
{
DisplayCard(TeamType.Story);
}
}
private void DisplayLevel()
{
var value = PlayerDatas.Instance.baseData.ExAttr2;
var chapterID = value / 10000;
var levelNum = value % 10000 / 100;
var waveID = value % 100;
var config = MainLevelConfig.GetMainLevelConfig(chapterID, levelNum);
var totalWave = MainLevelConfig.GetwaveCount(config);
for (int i = 0; i < mainLevelWaves.Length; i++)
{
if (i < totalWave)
{
mainLevelWaves[i].SetActive(true);
mainLevelWaves[i].Display(i);
}
else
{
mainLevelWaves[i].SetActive(false);
}
}
mainLevelScrollRect.normalizedPosition = new Vector2(waveID > 3 ? 1 : 0, 0);
var chapterConfig = MainChapterConfig.Get(chapterID);
//【普通】关卡名字1-6
levelName.text = Language.Get("mainui7", chapterConfig.Level, chapterConfig.ChapterName, chapterID, levelNum);
bool canChallengeBoss = MainLevelManager.Instance.CanChallengeBoss();
//BOSS
if (canChallengeBoss)
{
bossActiveGo.SetActive(true);
processText.SetActive(false);
bossTween.Play();
bitemeGo.SetActive(true);
bossmask.SetActive(true);
}
else
{
bossActiveGo.SetActive(false);
processText.SetActive(true);
processText.text = (waveID - 1) * 100 / totalWave + "%";
bossTween.Stop();
bitemeGo.SetActive(false);
bossmask.SetActive(false);
}
}
void DisplayRestState()
{
if (BattleManager.Instance.storyBattleField != null &&
BattleManager.Instance.storyBattleField.GetBattleMode() == BattleMode.Stop)
{
//休息中
restMark.SetActive(true);
fightMark.SetActive(false);
}
else
{
//战斗中
restMark.SetActive(false);
fightMark.SetActive(true);
}
}
void ChangeMode(bool isFight)
{
if (isFight)
return;
DisplayRestState();
DisplayLevel();
}
void GotoRest()
{
if (BattleManager.Instance.storyBattleField != null &&
BattleManager.Instance.storyBattleField.GetBattleMode() != BattleMode.Stop)
{
BattleManager.Instance.storyBattleField.HaveRest();
}
}
private void DisplayFirstChargeBtn()
{
bool isFirstChargeFuncOpen = FuncOpen.Instance.IsFuncOpen(FirstChargeManager.FuncID);
if (FirstChargeManager.Instance.IsAllFirstChargeRewardsClaimed() &&
FirstChargeManager.Instance.IsNextDayAfterAllClaimed())
{
FirstChargeBtn.SetActive(false);
}
else
{
FirstChargeBtn.SetActive(isFirstChargeFuncOpen);
}
}
private void OnFuncStateChange(int funcId)
{
if (funcId == FirstChargeManager.FuncID)
{
DisplayFirstChargeBtn();
}
}
private void OnUpdateFirstChargeInfo()
{
DisplayFirstChargeBtn();
}
private void OnSecondEvent()
{
DisplayFirstChargeBtn();
}
void OnUnLockHeroCountEvent()
{
DisplayCard(TeamType.Story);
}
}