using System; 
 | 
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] UIEffectPlayer openCloseAnim; 
 | 
    [SerializeField] FillTween cdTween; 
 | 
    [SerializeField] Text hammerText; 
 | 
     
 | 
    bool isForcePlayFightUIAnim = true; //强制播放战斗锤子框动画 
 | 
  
 | 
    public static event Action TabChangeEvent; 
 | 
    protected override void InitComponent() 
 | 
    { 
 | 
        base.InitComponent(); 
 | 
  
 | 
        avatarCell.button.AddListener(() => { }); 
 | 
    } 
 | 
  
 | 
    void Display() 
 | 
    { 
 | 
        UpdateCurrency(); 
 | 
        UpdatePlayerInfo(); 
 | 
        RefreshFightBtn(); 
 | 
    } 
 | 
  
 | 
    protected override void OnPreOpen() 
 | 
    { 
 | 
        PlayerDatas.Instance.playerDataRefreshEvent += PlayerDataRefresh; 
 | 
        AutoFightModel.Instance.OnFightEvent += OnSkillCast; 
 | 
        base.OnPreOpen(); 
 | 
  
 | 
        // 刷新UI 
 | 
        Display(); 
 | 
    } 
 | 
  
 | 
    protected override void OnPreClose() 
 | 
    { 
 | 
        PlayerDatas.Instance.playerDataRefreshEvent -= PlayerDataRefresh; 
 | 
        AutoFightModel.Instance.OnFightEvent -= OnSkillCast; 
 | 
        base.OnPreClose(); 
 | 
        isForcePlayFightUIAnim = true; 
 | 
    } 
 | 
  
 | 
  
 | 
    void DisplayTopBar() 
 | 
    { 
 | 
        topBar.SetActive(functionOrder == 0 || functionOrder == 2); 
 | 
    } 
 | 
  
 | 
   
 | 
    //战斗按钮动画 
 | 
    void ClickAnimation(int index) 
 | 
    { 
 | 
        //强制播放 
 | 
        if (isForcePlayFightUIAnim) 
 | 
        { 
 | 
            openCloseAnim.onComplete = () => 
 | 
            { 
 | 
                openCloseAnim.SetEnabled(true); 
 | 
            }; 
 | 
            openCloseAnim.PlayByArrIndex(index == 0 ? 1 : 0); 
 | 
  
 | 
            isForcePlayFightUIAnim = false; 
 | 
            return; 
 | 
        } 
 | 
  
 | 
        //切换显示 
 | 
        if (functionOrder != 0 && index == 0) 
 | 
        { 
 | 
            //切回战斗场景 
 | 
            openCloseAnim.onComplete = () => 
 | 
            { 
 | 
                openCloseAnim.SetEnabled(true); 
 | 
            }; 
 | 
            openCloseAnim.PlayByArrIndex(1); 
 | 
  
 | 
        } 
 | 
        else if (functionOrder <= 0 && index != 0) 
 | 
        { 
 | 
            //切出战斗场景 
 | 
            openCloseAnim.onComplete = () => 
 | 
            { 
 | 
                openCloseAnim.SetEnabled(true); 
 | 
            }; 
 | 
            openCloseAnim.PlayByArrIndex(0); 
 | 
        } 
 | 
    } 
 | 
  
 | 
  
 | 
    /// <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(); 
 | 
            } 
 | 
        } 
 | 
        else if (index == 4 && !PlayerDatas.Instance.fairyData.HasFairy) 
 | 
        { 
 | 
            //未加入公会不切换标签,打开申请界面 
 | 
            UIManager.Instance.OpenWindow<GuildJoinWin>(); 
 | 
            return; 
 | 
        } 
 | 
  
 | 
  
 | 
        SelectBottomTab(index); 
 | 
    } 
 | 
  
 | 
    protected override void SelectBottomTab(int index) 
 | 
    { 
 | 
        if (index == 3) 
 | 
        { 
 | 
            //挑战特殊显示逻辑 
 | 
            UIManager.Instance.OpenWindow<ChallengeTabWin>(); 
 | 
            return; 
 | 
        } 
 | 
  
 | 
        // 如果点击当前已选中的标签,不做处理 
 | 
        if (functionOrder == index && currentSubUI != null) 
 | 
        { 
 | 
            return; 
 | 
        } 
 | 
         
 | 
  
 | 
        ClickAnimation(index); 
 | 
        // 更新当前选中的标签索引 
 | 
        functionOrder = index; 
 | 
        TabChangeEvent?.Invoke(); 
 | 
  
 | 
        DisplayTopBar(); 
 | 
  
 | 
        // 关闭当前打开的子界面 
 | 
        CloseCurrentSubUI(); 
 | 
  
 | 
        // 根据选中的标签打开对应的界面 
 | 
        OpenSubUIByTabIndex(); 
 | 
  
 | 
    } 
 | 
  
 | 
    /// <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>(); 
 | 
                break; 
 | 
            case 1: 
 | 
                currentSubUI = UIManager.Instance.OpenWindow<AffairBaseWin>(); 
 | 
                break; 
 | 
            case 2: 
 | 
                currentSubUI = UIManager.Instance.OpenWindow<HeroBaseWin>(0); 
 | 
                break; 
 | 
            // case 3: 
 | 
            //     挑战界面不跳转 
 | 
            //     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); 
 | 
            fightOtherWinWarnImg.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(); 
 | 
        } 
 | 
    } 
 | 
  
 | 
    #region 外部调用 
 | 
    //外部调用点击功能 
 | 
    public void ClickFunc(int functionOrder) 
 | 
    { 
 | 
        tabButtons[functionOrder].SelectBtn(); 
 | 
        tabButtons[functionOrder].onClick.Invoke(); 
 | 
    } 
 | 
  
 | 
  
 | 
    //恢复功能按钮状态 
 | 
    public void RestoreFuncBtn() 
 | 
    { 
 | 
        if (functionOrder == -1) 
 | 
        { 
 | 
            if (lastWinOrder == -1) 
 | 
            { 
 | 
                functionOrder = 0; 
 | 
            } 
 | 
            else 
 | 
            { 
 | 
                functionOrder = lastWinOrder; 
 | 
            } 
 | 
        } 
 | 
  
 | 
  
 | 
        tabButtons[functionOrder].SelectBtn(); 
 | 
    } 
 | 
  
 | 
    // 外部关闭子界面 
 | 
    int lastWinOrder = -1; 
 | 
    public void CloseSubUI() 
 | 
    { 
 | 
        if (currentSubUI != null) 
 | 
        { 
 | 
            lastWinOrder = functionOrder; 
 | 
            currentSubUI.CloseWindow(); 
 | 
            currentSubUI = null; 
 | 
            functionOrder = -1; 
 | 
            isForcePlayFightUIAnim = true; 
 | 
            DisplayTopBar(); 
 | 
        } 
 | 
    } 
 | 
  
 | 
    // 外部恢复子界面 
 | 
    public void RestoreSubUI() 
 | 
    { 
 | 
        if (functionOrder != -1) 
 | 
            return; 
 | 
        if (lastWinOrder == -1) 
 | 
        { 
 | 
            lastWinOrder = 0; 
 | 
        } 
 | 
        OnTabButtonClicked(lastWinOrder); 
 | 
    } 
 | 
  
 | 
     
 | 
    #endregion 
 | 
} 
 |