using System.Collections;
|
using System.Collections.Generic;
|
using UnityEngine;
|
using UnityEngine.UI;
|
|
/// <summary>
|
/// 游戏主界面底部功能按钮
|
/// </summary>
|
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();
|
}
|
|
|
|
/// <summary>
|
/// 更新玩家信息
|
/// </summary>
|
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;
|
|
}
|
|
}
|
|
|
/// <summary>
|
/// 更新货币信息
|
/// </summary>
|
private void UpdateCurrency()
|
{
|
hammerText.text = UIHelper.GetMoneyCnt(41).ToString();
|
}
|
|
/// <summary>
|
/// 底部标签按钮点击
|
/// </summary>
|
protected override void OnTabButtonClicked(int index)
|
{
|
if (index == 0)
|
{
|
if (currentSubUI != null && currentSubUI.name == "HomeWin")
|
{
|
//手动自动一起处理
|
AutoFightModel.Instance.StartFight();
|
}
|
}
|
SelectBottomTab(index);
|
}
|
|
|
/// <summary>
|
/// 根据标签索引打开对应的子界面
|
/// </summary>
|
protected override void OpenSubUIByTabIndex()
|
{
|
|
Debug.Log("打开子界面 : " + functionOrder);
|
// 主城 内政 武将 挑战 公会
|
//根据索引打开不同的界面
|
switch (functionOrder)
|
{
|
case 0:
|
// 打开主页界面
|
if (!UIManager.Instance.IsOpened<BattleWin>())
|
{
|
BattleWin battleWin = UIManager.Instance.OpenWindow<BattleWin>();
|
battleWin.SetBattleField(BattleManager.Instance.storyBattleField);
|
}
|
else
|
{
|
BattleWin battleWin = UIManager.Instance.GetUI<BattleWin>();
|
battleWin.SetBattleField(BattleManager.Instance.storyBattleField);
|
}
|
currentSubUI = UIManager.Instance.OpenWindow<HomeWin>();
|
Debug.Log("打开主城界面");
|
break;
|
case 1:
|
currentSubUI = UIManager.Instance.OpenWindow<AffairBaseWin>();
|
Debug.Log("打开内政界面");
|
break;
|
case 2:
|
currentSubUI = UIManager.Instance.OpenWindow<HeroBaseWin>(0);
|
Debug.Log("打开武将界面");
|
break;
|
// case 3:
|
// // currentSubUI = UIManager.Instance.OpenUI<QuestUI>();
|
// Debug.Log("打开挑战界面");
|
// break;
|
case 4:
|
currentSubUI = UIManager.Instance.OpenWindow<GuildBaseWin>();
|
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();
|
}
|
}
|
}
|