285 lines
7.2 KiB
C#
285 lines
7.2 KiB
C#
// ***********************************************************************
|
|
// Assembly : Game
|
|
// Author : Kimch
|
|
// Created : 2020-09-08
|
|
// Description :
|
|
// Last Modified By :
|
|
// Last Modified On :
|
|
// ***********************************************************************
|
|
// <copyright file= "MapPanel.LevelWidget" company="Kimch"></copyright>
|
|
// <summary></summary>
|
|
// ***********************************************************************
|
|
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
using UnityEngine.UI;
|
|
using Text = TMPro.TextMeshProUGUI;
|
|
|
|
namespace G.UI
|
|
{
|
|
partial class MapPanel
|
|
{
|
|
/// <summary>
|
|
/// 关卡组件
|
|
/// </summary>
|
|
class LevelWidget : KUIWidget
|
|
{
|
|
#region Field
|
|
#pragma warning disable CS0649 // 从未对字段赋值,字段将一直保持其默认值 null
|
|
[KUIFlag]
|
|
GameObject _goMajor;
|
|
//[KUIFlag]
|
|
//Image _imgIcon;
|
|
[KUIFlag]
|
|
KUIImage _imgState;
|
|
[KUIFlag]
|
|
Button _btnOpen;
|
|
[KUIFlag]
|
|
Text _tmpName;
|
|
[KUIFlag]
|
|
Image _imgFigure;
|
|
[KUIFlag]
|
|
GameObject _goMinor;
|
|
//[KUIFlag]
|
|
//Image _imgMnOver;
|
|
//[KUIFlag]
|
|
//Image _imgMnOpen;
|
|
//[KUIFlag]
|
|
//Image _imgMnBeing;
|
|
[KUIFlag]
|
|
KUIImage _imgMnIcon;
|
|
[KUIFlag]
|
|
GameObject _goUnlock;
|
|
[KUIFlag]
|
|
Image _imgUnlockIcon;
|
|
[KUIFlag]
|
|
Text _tmpLevel;
|
|
[KUIFlag]
|
|
Text _tmpMnLevel;
|
|
#pragma warning restore CS0649 // 从未对字段赋值,字段将一直保持其默认值 null
|
|
|
|
#endregion
|
|
|
|
#region Method
|
|
|
|
public override void Refresh()
|
|
{
|
|
if (this.data is ItemLevel levelItem)
|
|
{
|
|
_tmpName.text = levelItem.name;
|
|
|
|
if (!string.IsNullOrEmpty(levelItem.figure))
|
|
{
|
|
SetState(levelItem, true);
|
|
StartCoroutine(SetFigure(levelItem.chapter.atlas, levelItem.figure));
|
|
|
|
//var spriteAddr = $"{levelItem.chapter.atlas}[{levelItem.figure}]";
|
|
//var spriteAddr = "sa_chapter";
|
|
//AssetProxy.Instance.TryGetGlobalAssetAsync<UnityEngine.U2D.SpriteAtlas>(spriteAddr).Completed += (handle) =>
|
|
//{
|
|
// if (handle.Status == UnityEngine.ResourceManagement.AsyncOperations.AsyncOperationStatus.Succeeded)
|
|
// {
|
|
// _imgFigure.gameObject.SetActive(true);
|
|
// _imgFigure.overrideSprite = handle.Result.GetSprite(levelItem.figure);
|
|
// _imgFigure.SetNativeSize();
|
|
// }
|
|
// else
|
|
// {
|
|
// _imgFigure.gameObject.SetActive(false);
|
|
// }
|
|
//};
|
|
}
|
|
else
|
|
{
|
|
SetState(levelItem, false);
|
|
}
|
|
}
|
|
}
|
|
|
|
private IEnumerator SetFigure(string atlas, string figure)
|
|
{
|
|
//var spriteAddr = "sa_chapter";
|
|
var handle = AssetProxy.Instance.TryGetGlobalAssetAsync<UnityEngine.U2D.SpriteAtlas>(atlas);
|
|
yield return handle;
|
|
if (handle.Status == UnityEngine.ResourceManagement.AsyncOperations.AsyncOperationStatus.Succeeded)
|
|
{
|
|
_imgFigure.gameObject.SetActive(true);
|
|
_imgFigure.overrideSprite = handle.Result.GetSprite(figure);
|
|
_imgFigure.SetNativeSize();
|
|
}
|
|
else
|
|
{
|
|
_imgFigure.gameObject.SetActive(false);
|
|
}
|
|
}
|
|
|
|
private void SetUnlockSystem(ItemLevel levelItem)
|
|
{
|
|
if (GlobalVar.ShowUnlockSystemLevelId == levelItem.id && levelItem.unlockIcon != null && levelItem.unlockIcon.Length > 0)
|
|
{
|
|
_goUnlock.SetActive(true);
|
|
IconProxy.Instance.SetSprite(_imgUnlockIcon, levelItem.unlockIcon);
|
|
}
|
|
else
|
|
{
|
|
_goUnlock.SetActive(false);
|
|
}
|
|
}
|
|
|
|
private void OnUnlockTipsClick()
|
|
{
|
|
if (this.data is ItemLevel levelItem)
|
|
{
|
|
PostNotification(GlobalDefine.EVENT_LEVEL_TIPS, KLocalization.GetLocalString(levelItem.unlockTips));
|
|
}
|
|
}
|
|
|
|
private void SetState(ItemLevel levelItem, bool major)
|
|
{
|
|
_goMajor.SetActive(major);
|
|
_goMinor.SetActive(!major);
|
|
|
|
if (levelItem.isCompleted)
|
|
{
|
|
if (major)
|
|
{
|
|
//_imgIcon.gameObject.SetActive(false);
|
|
_imgState.ShowSprite(2);
|
|
SetGray(false, true);
|
|
_goUnlock.SetActive(false);
|
|
|
|
_tmpLevel.text = levelItem.id.ToString();
|
|
_tmpLevel.color = new Color32(219, 255, 211, 255);
|
|
}
|
|
else
|
|
{
|
|
//_imgMnIcon.gameObject.SetActive(false);
|
|
_tmpMnLevel.text = "";// levelItem.id.ToString();
|
|
|
|
_imgMnIcon.ShowSprite(2);
|
|
//_imgMnOver.gameObject.SetActive(true);
|
|
//_imgMnOpen.gameObject.SetActive(false);
|
|
//_imgMnBeing.gameObject.SetActive(false);
|
|
}
|
|
}
|
|
else if (levelItem.isUnlock)
|
|
{
|
|
if (major)
|
|
{
|
|
//_imgIcon.gameObject.SetActive(true);
|
|
_imgState.ShowSprite(1);
|
|
SetGray(false, false);
|
|
|
|
SetUnlockSystem(levelItem);
|
|
|
|
_tmpLevel.text = levelItem.id.ToString();
|
|
_tmpLevel.color = new Color32(255, 246, 231, 255);
|
|
}
|
|
else
|
|
{
|
|
_imgMnIcon.ShowSprite(0);
|
|
//_imgMnIcon.gameObject.SetActive(true);
|
|
_tmpMnLevel.text = levelItem.id.ToString();
|
|
//_imgMnOver.gameObject.SetActive(false);
|
|
//_imgMnOpen.gameObject.SetActive(true);
|
|
//_imgMnBeing.gameObject.SetActive(false);
|
|
}
|
|
PostNotification(GlobalDefine.EVENT_LEVEL_ITEM_SHOW, this.transform, major ? "major" : "minor");
|
|
}
|
|
else
|
|
{
|
|
if (major)
|
|
{
|
|
//_imgIcon.gameObject.SetActive(false);
|
|
_imgState.ShowSprite(0);
|
|
SetGray(true, false);
|
|
|
|
SetUnlockSystem(levelItem);
|
|
|
|
_tmpLevel.text = levelItem.id.ToString();
|
|
_tmpLevel.color = new Color32(187, 200, 206, 255);
|
|
}
|
|
else
|
|
{
|
|
//_imgMnIcon.gameObject.SetActive(false);
|
|
_tmpMnLevel.text = levelItem.id.ToString();
|
|
|
|
_imgMnIcon.ShowSprite(1);
|
|
//_imgMnOver.gameObject.SetActive(false);
|
|
//_imgMnOpen.gameObject.SetActive(false);
|
|
//_imgMnBeing.gameObject.SetActive(true);
|
|
}
|
|
}
|
|
}
|
|
|
|
void SetGray(bool gray, bool completed)
|
|
{
|
|
if (gray)
|
|
{
|
|
_imgFigure.color = new Color32(179, 196, 200, 255);
|
|
_tmpName.color = new Color32(151, 165, 172, 255);
|
|
}
|
|
else
|
|
{
|
|
_imgFigure.color = Color.white;
|
|
if (completed)
|
|
_tmpName.color = new Color32(232, 245, 214, 255);
|
|
else
|
|
_tmpName.color = new Color32(255, 246, 231, 255);
|
|
}
|
|
_imgFigure.GetComponent<KUIImage>().ShowGray(gray);
|
|
}
|
|
|
|
private void OnOpenBtnClick()
|
|
{
|
|
SoundProxy.PlayFxAsync(GlobalDefine.BUTTON_CLICK_SOUND);
|
|
if (this.data is ItemLevel level)
|
|
{
|
|
if (!level.isUnlock)
|
|
{
|
|
ToastBox.ShowText("关卡未解锁");
|
|
return;
|
|
}
|
|
|
|
if (level.stories != null && level.stories.Length > 0 && level.stories[0] != null && level.stories[0].Length > 0)
|
|
{
|
|
if (StoryProxy.Instance.TriggerStory(level.stories[0][0], () =>
|
|
{
|
|
KUIWindow.OpenWindow<LevelDetailBox>(level);
|
|
}))
|
|
{
|
|
return;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
KUIWindow.OpenWindow<LevelDetailBox>(level);
|
|
KStatistics.Instance.ReportEvent("show_window", $"{{\"open_page\":\"LevelInfo\",\"level_id\":{level.id}}}");
|
|
}
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Unity
|
|
|
|
// Use this for initialization
|
|
private void Awake()
|
|
{
|
|
SetViewData();
|
|
_btnOpen.onClick.AddListener(this.OnOpenBtnClick);
|
|
_imgMnIcon.GetComponent<Button>().onClick.AddListener(this.OnOpenBtnClick);
|
|
_goUnlock.GetComponent<Button>().onClick.AddListener(this.OnUnlockTipsClick);
|
|
}
|
|
|
|
// Update is called once per frame
|
|
private void Update()
|
|
{
|
|
}
|
|
|
|
#endregion
|
|
}
|
|
}
|
|
}
|