using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
///
/// 游戏主界面底部功能按钮
///
public class MainWin : FunctionsBaseWin
{
//头像区
[SerializeField] GameObject topBar;
[SerializeField] AvatarCell avatarCell;
[SerializeField] Text playerNameText;
[SerializeField] Text powerText;
[SerializeField] OfficialTitleCell officialRankText;
//战斗按钮
[SerializeField] Image fightOtherWinBG; //切换其他界面的显示
[SerializeField] Image fightOtherWinWarnImg; //切换其他界面 如果是战斗中泛红提示
[SerializeField] GameObject fightBG; //战斗界面显示
[SerializeField] Image restImg; //休息状态
[SerializeField] GameObject fightGo; //战斗状态
[SerializeField] Image fightHeroImg; //战斗显示英雄
[SerializeField] ScaleTween fightHeroScale; //战斗显示英雄缩放
[SerializeField] UIEffectPlayer fightEffect;
[SerializeField] FillTween cdTween;
public Text hammerText;
protected override void InitComponent()
{
base.InitComponent();
avatarCell.button.AddListener(() => { });
}
public override void Refresh()
{
UpdateCurrency();
UpdatePlayerInfo();
RefreshFightBtn();
}
protected override void OnPreOpen()
{
PlayerDatas.Instance.playerDataRefreshEvent += PlayerDataRefresh;
AutoFightModel.Instance.OnFightEvent += OnSkillCast;
base.OnPreOpen();
// 刷新UI
Refresh();
}
protected override void OnPreClose()
{
PlayerDatas.Instance.playerDataRefreshEvent -= PlayerDataRefresh;
AutoFightModel.Instance.OnFightEvent -= OnSkillCast;
base.OnPreClose();
}
protected override void SelectBottomTab(int index)
{
if (index == 3)
{
//挑战特殊显示逻辑
return;
}
topBar.SetActive(index == 0 || index == 2);
// 如果点击当前已选中的标签,不做处理
if (functionOrder == index && currentSubUI != null)
{
return;
}
// 更新当前选中的标签索引
functionOrder = index;
// 关闭当前打开的子界面
CloseCurrentSubUI();
// 根据选中的标签打开对应的界面
OpenSubUIByTabIndex();
}
///
/// 更新玩家信息
///
private void UpdatePlayerInfo()
{
// 从玩家数据中获取信息并更新UI
avatarCell.InitUI(AvatarHelper.GetAvatarModel((int)PlayerDatas.Instance.baseData.PlayerID,
PlayerDatas.Instance.baseData.face,
PlayerDatas.Instance.baseData.facePic));
playerNameText.text = PlayerDatas.Instance.baseData.PlayerName;
powerText.text = UIHelper.ReplaceLargeArtNum(PlayerDatas.Instance.baseData.FightPower);
officialRankText.InitUI(PlayerDatas.Instance.baseData.realmLevel, PlayerDatas.Instance.baseData.TitleID);
}
void PlayerDataRefresh(PlayerDataType type)
{
switch (type)
{
case PlayerDataType.FightPower:
powerText.text = UIHelper.ReplaceLargeArtNum(PlayerDatas.Instance.baseData.FightPower);
break;
case PlayerDataType.RealmLevel:
officialRankText.InitUI(PlayerDatas.Instance.baseData.realmLevel, PlayerDatas.Instance.baseData.TitleID);
break;
case PlayerDataType.Face:
case PlayerDataType.FacePic:
avatarCell.InitUI(AvatarHelper.GetAvatarModel((int)PlayerDatas.Instance.baseData.PlayerID,
PlayerDatas.Instance.baseData.face,
PlayerDatas.Instance.baseData.facePic));
break;
case PlayerDataType.default26:
hammerText.text = UIHelper.GetMoneyCnt(41).ToString();
break;
}
}
///
/// 更新货币信息
///
private void UpdateCurrency()
{
hammerText.text = UIHelper.GetMoneyCnt(41).ToString();
}
///
/// 底部标签按钮点击
///
protected override void OnTabButtonClicked(int index)
{
if (index == 0)
{
if (currentSubUI != null && currentSubUI.name == "HomeWin")
{
//手动自动一起处理
AutoFightModel.Instance.StartFight();
}
}
SelectBottomTab(index);
}
///
/// 根据标签索引打开对应的子界面
///
protected override void OpenSubUIByTabIndex()
{
Debug.Log("打开子界面 : " + functionOrder);
// 主城 内政 武将 挑战 公会
//根据索引打开不同的界面
switch (functionOrder)
{
case 0:
// 打开主页界面
if (!UIManager.Instance.IsOpened())
{
BattleWin battleWin = UIManager.Instance.OpenWindow();
battleWin.SetBattleField(BattleManager.Instance.storyBattleField);
}
else
{
BattleWin battleWin = UIManager.Instance.GetUI();
battleWin.SetBattleField(BattleManager.Instance.storyBattleField);
}
currentSubUI = UIManager.Instance.OpenWindow();
Debug.Log("打开主城界面");
break;
case 1:
currentSubUI = UIManager.Instance.OpenWindow();
Debug.Log("打开内政界面");
break;
case 2:
currentSubUI = UIManager.Instance.OpenWindow(0);
Debug.Log("打开武将界面");
break;
// case 3:
// // currentSubUI = UIManager.Instance.OpenUI();
// Debug.Log("打开挑战界面");
// break;
case 4:
currentSubUI = UIManager.Instance.OpenWindow();
break;
default:
Debug.LogWarning("未知的标签索引: " + functionOrder);
break;
}
RefreshFightBtn();
}
///战斗按钮显示规则
/// 1.在主线战斗界面下:
/// 1.1.休息状态的按钮
/// 1.2.战斗状态的按钮 :显示下一个要攻击的武将头像,按位置顺序推算显示头像;严谨情况下需判断下一个武将是否可攻击如被眩晕等
/// 有蒙版:默认显示播放其他战斗的状态,眩晕的状态等比较多(大多是蒙版显示的情况,根据实际看是否需要)
/// 无蒙版:结束一个小通知的时候(B425)可以释放的去掉蒙版;有怒气的时候是否特殊表现(循环火特效?)
/// 转圈:点击释放 播放特效且蒙版转圈,转圈结束后显示蒙版 -- 同时上方卡牌播放特效和转圈?
/// 2.在非主线战斗界面下:
/// 1. 休息显示关闭状态 无特效
/// 2. 战斗中,显示泛红特效
/// 上方卡牌 攻击时播放特效和转圈,有怒气的时候显示怒气特效?
void RefreshFightBtn()
{
if (functionOrder == 0)
{
//主城界面
fightOtherWinBG.SetActive(false);
fightBG.SetActive(true);
if (BattleManager.Instance.storyBattleField != null &&
BattleManager.Instance.storyBattleField.GetBattleMode() == BattleMode.Stop)
{
fightGo.SetActive(false);
restImg.SetActive(true);
}
else
{
fightGo.SetActive(true);
restImg.SetActive(false);
RefreshFightIng();
}
}
else
{
//非主城界面
fightOtherWinBG.SetActive(true);
fightBG.SetActive(false);
if (BattleManager.Instance.storyBattleField != null &&
BattleManager.Instance.storyBattleField.GetBattleMode() == BattleMode.Stop)
{
fightOtherWinWarnImg.SetActive(false);
}
else
{
fightOtherWinWarnImg.SetActive(true);
}
}
}
void RefreshFightIng(bool isfighting = false)
{
if (isfighting)
{
fightEffect.Play();
cdTween.SetStartState();
cdTween.Play(() =>
{
AutoFightModel.Instance.fightingHeroSkinID = TeamManager.Instance.GetTeam(TeamType.Story).GetNextServerHero(AutoFightModel.Instance.heroGuid).SkinID;
fightHeroImg.SetOrgSprite(HeroSkinConfig.Get(AutoFightModel.Instance.fightingHeroSkinID).SquareIcon, "HeroHead");
});
fightHeroScale.SetStartState();
fightHeroScale.Play();
}
else
{
fightEffect.Stop();
cdTween.Stop();
cdTween.SetEndState();
fightHeroScale.Stop();
}
if (AutoFightModel.Instance.fightingHeroSkinID == 0)
{
AutoFightModel.Instance.fightingHeroSkinID = TeamManager.Instance.GetTeam(TeamType.Story).GetNextServerHero(AutoFightModel.Instance.heroGuid).SkinID;
}
fightHeroImg.SetOrgSprite(HeroSkinConfig.Get(AutoFightModel.Instance.fightingHeroSkinID).SquareIcon, "HeroHead");
}
void OnSkillCast(bool isfighting)
{
if (functionOrder != 0)
return;
if (isfighting)
{
RefreshFightIng(isfighting);
}
else
{
RefreshFightBtn();
}
}
}