战役奖励领取
parent
ea746145aa
commit
ff2afc171b
File diff suppressed because it is too large
Load Diff
|
|
@ -1,5 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 8baf90a13948f344b9522fb1c215aca6
|
||||
guid: c1aecf2a97a97e545a6a1b935b1f3f8b
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
File diff suppressed because it is too large
Load Diff
|
|
@ -100,6 +100,7 @@ public partial class UIManager
|
|||
//关卡
|
||||
_WindowMeta(UINameConst.UI_LevelSelect, UIWindowLayer.Normal, UIOpenType.FullScreen, true, true);
|
||||
_WindowMeta(UINameConst.UI_MainStarReward, UIWindowLayer.Normal, UIOpenType.Pop, false, true);
|
||||
_WindowMeta(UINameConst.UI_WarScoreReward, UIWindowLayer.Normal, UIOpenType.Pop, false, true);
|
||||
_WindowMeta(UINameConst.UI_BeforeFight, UIWindowLayer.Normal, UIOpenType.FullScreen, false, true);
|
||||
_WindowMeta(UINameConst.UI_LevelDetail, UIWindowLayer.Normal, UIOpenType.Pop, false, true);
|
||||
|
||||
|
|
@ -269,6 +270,10 @@ public static class UINameConst
|
|||
/// 主线星级奖励界面
|
||||
/// </summary>
|
||||
public static readonly string UI_MainStarReward = "LevelSelect/UI_MainStarReward";
|
||||
/// <summary>
|
||||
/// 战役评分奖励界面
|
||||
/// </summary>
|
||||
public static readonly string UI_WarScoreReward = "LevelSelect/UI_WarScoreReward";
|
||||
public static readonly string UI_BeforeFight = "LevelSelect/UI_BeforeFight";
|
||||
|
||||
public static readonly string UI_Setting = "Interface/UI_Setting";
|
||||
|
|
|
|||
|
|
@ -35,7 +35,7 @@ namespace Gameplay.Level
|
|||
DebugUtil.LogError($"找不到level配置,id:{id}");
|
||||
return null;
|
||||
}
|
||||
return string.Format(Constants.LEVEL_CONFIG_FORMAT_PATH,cfg.LevelData);
|
||||
return string.Format(Constants.LEVEL_CONFIG_FORMAT_PATH, cfg.LevelData);
|
||||
}
|
||||
|
||||
public static LevelData LoadLevelData(int id)
|
||||
|
|
@ -56,7 +56,7 @@ namespace Gameplay.Level
|
|||
case CharacterToward.TopLeft:
|
||||
{
|
||||
return 0f;
|
||||
|
||||
|
||||
}
|
||||
case CharacterToward.TopRight:
|
||||
{
|
||||
|
|
@ -126,18 +126,7 @@ namespace Gameplay.Level
|
|||
return E_WarRating.C;
|
||||
}
|
||||
|
||||
int max = levelInfo.ScoreMax;
|
||||
float percentage = 0 >= max ? 0f : (float)levelInfo.Score / max;
|
||||
List<float> listRating = TableManager.Instance.Tables.GlobalConfig.CampaignScoreClass;
|
||||
for (int i = listRating.Count - 1; i >= 0; --i)
|
||||
{
|
||||
if (percentage < listRating[i])
|
||||
continue;
|
||||
|
||||
return (E_WarRating)i;
|
||||
}
|
||||
|
||||
return E_WarRating.C;
|
||||
return GetRatingByScore(levelInfo.Score, levelInfo.ScoreMax);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
|
@ -173,8 +162,18 @@ namespace Gameplay.Level
|
|||
return E_WarRating.C;
|
||||
}
|
||||
|
||||
int max = levelGroupInfo.ScoreMax;
|
||||
float percentage = 0 >= max ? 0f : (float)levelGroupInfo.Score / max;
|
||||
return GetRatingByScore(levelGroupInfo.Score, levelGroupInfo.ScoreMax);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取评级根据分数
|
||||
/// </summary>
|
||||
/// <param name="score"></param>
|
||||
/// <param name="maxScore"></param>
|
||||
/// <returns></returns>
|
||||
public static E_WarRating GetRatingByScore(int score, int maxScore)
|
||||
{
|
||||
float percentage = 0 >= maxScore ? 0f : (float)score / maxScore;
|
||||
List<float> listRating = TableManager.Instance.Tables.GlobalConfig.CampaignScoreClass;
|
||||
for (int i = listRating.Count - 1; i >= 0; --i)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1289,7 +1289,7 @@ public class UI_LevelSelectController : UIWindow
|
|||
imageScore = GetComponent<Image>("Image_War/Image_RatingLevel");
|
||||
goGetRewardOff = FindObj("Button_GetRewardOff");
|
||||
|
||||
BindButton(buttonGetReward, OnStarReward);
|
||||
BindButton(buttonGetReward, OnScoreReward);
|
||||
}
|
||||
|
||||
public override async void SetInfo(ChapterInfo info)
|
||||
|
|
@ -1326,14 +1326,14 @@ public class UI_LevelSelectController : UIWindow
|
|||
}
|
||||
|
||||
/// <summary>
|
||||
/// 星级奖励
|
||||
/// 评分奖励
|
||||
/// </summary>
|
||||
private async void OnStarReward()
|
||||
private async void OnScoreReward()
|
||||
{
|
||||
if (!chapterInfo.TryGetGroupInfo(levelDifficulty, out LevelGroupInfo groupInfo))
|
||||
return;
|
||||
|
||||
await UI_MainStarRewardController.Open(groupInfo);
|
||||
await UI_WarScoreRewardController.Open(groupInfo);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@ public class UI_MainStarRewardController : UIWindow
|
|||
/// <summary>
|
||||
/// 星级列表
|
||||
/// </summary>
|
||||
private class StarListItem : UIGameObjectWrapper
|
||||
private class RewardListItem : UIGameObjectWrapper
|
||||
{
|
||||
/// <summary>
|
||||
/// 星级数量
|
||||
|
|
@ -40,7 +40,7 @@ public class UI_MainStarRewardController : UIWindow
|
|||
/// </summary>
|
||||
private readonly List<GenericItem_LevelStarReward> listReward = new();
|
||||
|
||||
public StarListItem(GameObject root) : base(root)
|
||||
public RewardListItem(GameObject root) : base(root)
|
||||
{
|
||||
textStarCount = GetComponent<TMP_Text>("Text_CountStar");
|
||||
|
||||
|
|
@ -106,11 +106,11 @@ public class UI_MainStarRewardController : UIWindow
|
|||
/// <summary>
|
||||
/// 星级列表字典
|
||||
/// </summary>
|
||||
private readonly Dictionary<int, StarListItem> dicStarListItem = new();
|
||||
private readonly Dictionary<int, RewardListItem> dicRewardListItem = new();
|
||||
/// <summary>
|
||||
/// 下一目标奖励列表
|
||||
/// </summary>
|
||||
private List<GenericItem_LevelStarReward> listReward = new();
|
||||
private readonly List<GenericItem_LevelStarReward> listReward = new();
|
||||
/// <summary>
|
||||
/// 关卡组信息
|
||||
/// </summary>
|
||||
|
|
@ -213,10 +213,10 @@ public class UI_MainStarRewardController : UIWindow
|
|||
/// </summary>
|
||||
private void RefreshItem(GameObject cell, int index)
|
||||
{
|
||||
if (!dicStarListItem.TryGetValue(cell.GetInstanceID(), out StarListItem starListItem))
|
||||
if (!dicRewardListItem.TryGetValue(cell.GetInstanceID(), out RewardListItem starListItem))
|
||||
{
|
||||
starListItem = new(cell);
|
||||
dicStarListItem.Add(cell.GetInstanceID(), starListItem);
|
||||
dicRewardListItem.Add(cell.GetInstanceID(), starListItem);
|
||||
}
|
||||
|
||||
if (null == levelGroupInfo)
|
||||
|
|
|
|||
|
|
@ -0,0 +1,279 @@
|
|||
using cfg.ActorCfg;
|
||||
using Cysharp.Threading.Tasks;
|
||||
using Framework;
|
||||
using Gameplay;
|
||||
using Gameplay.Level;
|
||||
using Gameplay.Net;
|
||||
using PhxhSDK;
|
||||
using System.Collections.Generic;
|
||||
using TMPro;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
|
||||
/// <summary>
|
||||
/// 战役评分奖励
|
||||
/// </summary>
|
||||
public class UI_WarScoreRewardController : UIWindow
|
||||
{
|
||||
/// <summary>
|
||||
/// 打开战役评分奖励界面
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public static async UniTask<UIWindow> Open(LevelGroupInfo levelGroupInfo)
|
||||
{
|
||||
await CommonUtils.CaptureScreenshot();
|
||||
|
||||
return await UIManager.Instance.CreateAndOpenWindow(UINameConst.UI_WarScoreReward, levelGroupInfo);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 奖励列表
|
||||
/// </summary>
|
||||
private class RewardListItem : UIGameObjectWrapper
|
||||
{
|
||||
/// <summary>
|
||||
/// 分数
|
||||
/// </summary>
|
||||
private TMP_Text textScore;
|
||||
/// <summary>
|
||||
/// 评级
|
||||
/// </summary>
|
||||
private Image imageRating;
|
||||
|
||||
/// <summary>
|
||||
/// 奖励列表
|
||||
/// </summary>
|
||||
private readonly List<GenericItem_LevelStarReward> listReward = new();
|
||||
|
||||
public RewardListItem(GameObject root) : base(root)
|
||||
{
|
||||
textScore = GetComponent<TMP_Text>("Text_Grades");
|
||||
imageRating = GetComponent<Image>("Image_LevelIcon");
|
||||
|
||||
Transform tsItemRoot = FindObj("RewardList").transform;
|
||||
for (int i = 0; i < tsItemRoot.childCount; ++i)
|
||||
{
|
||||
listReward.Add(new GenericItem_LevelStarReward(tsItemRoot.GetChild(i).gameObject));
|
||||
}
|
||||
}
|
||||
|
||||
public async void SetInfo(int score, int scoreMax, int rewardId, bool isGet)
|
||||
{
|
||||
textScore.text = score.ToString();
|
||||
Reward reward = RewardManager.Instance.Get(rewardId);
|
||||
if (null == reward)
|
||||
{
|
||||
DebugUtil.LogError($"获取不到id为{rewardId}的奖励配置");
|
||||
return;
|
||||
}
|
||||
|
||||
for (int i = 0; i < listReward.Count; ++i)
|
||||
{
|
||||
if (i < reward.ItemList.Count)
|
||||
{
|
||||
listReward[i].SetInfo(reward.ItemList.GetItem(i), isGet);
|
||||
listReward[i].IsActive = true;
|
||||
}
|
||||
else
|
||||
listReward[i].IsActive = false;
|
||||
}
|
||||
|
||||
await AssetManager.Instance.WaitAllPreloads();
|
||||
|
||||
E_WarRating warRating = LevelUtils.GetRatingByScore(score, scoreMax);
|
||||
imageRating.sprite = AssetManager.Instance.GetPreLoadResult<Sprite>(CommonUtils.GetWarRatingIconPath(warRating));
|
||||
|
||||
IsScaleShow = true;
|
||||
}
|
||||
}
|
||||
|
||||
#region UI
|
||||
/// <summary>
|
||||
/// 高斯模糊遮罩
|
||||
/// </summary>
|
||||
private RawImage rawImageGaussianBlurMask;
|
||||
/// <summary>
|
||||
/// 评级
|
||||
/// </summary>
|
||||
private Image imageRating;
|
||||
/// <summary>
|
||||
/// 关闭
|
||||
/// </summary>
|
||||
private Button buttonClose;
|
||||
/// <summary>
|
||||
/// 领取奖励按钮
|
||||
/// </summary>
|
||||
private Button buttonGet;
|
||||
/// <summary>
|
||||
/// 下一目标评分
|
||||
/// </summary>
|
||||
private TMP_Text textScore;
|
||||
/// <summary>
|
||||
/// 循环列表
|
||||
/// </summary>
|
||||
private RecycleView recycleView;
|
||||
/// <summary>
|
||||
/// 不能领取按钮表现
|
||||
/// </summary>
|
||||
private GameObject goGetOff;
|
||||
#endregion
|
||||
|
||||
/// <summary>
|
||||
/// 星级列表字典
|
||||
/// </summary>
|
||||
private readonly Dictionary<int, RewardListItem> dicRewardListItem = new();
|
||||
/// <summary>
|
||||
/// 下一目标奖励列表
|
||||
/// </summary>
|
||||
private readonly List<GenericItem_LevelStarReward> listReward = new();
|
||||
/// <summary>
|
||||
/// 关卡组信息
|
||||
/// </summary>
|
||||
private LevelGroupInfo levelGroupInfo;
|
||||
|
||||
/// <summary>
|
||||
/// 是否可以领取
|
||||
/// </summary>
|
||||
public bool IsGet
|
||||
{
|
||||
set
|
||||
{
|
||||
buttonGet.gameObject.IsScaleShow(value);
|
||||
goGetOff.IsScaleShow(!value);
|
||||
}
|
||||
}
|
||||
|
||||
public override void PreLoad(object data = null)
|
||||
{
|
||||
CommonUtils.PreLoadOrUnloadWarRatingIcon(true);
|
||||
}
|
||||
|
||||
public override void OnInit()
|
||||
{
|
||||
rawImageGaussianBlurMask = GetComponent<RawImage>("GaussianBlurMask");
|
||||
imageRating = GetComponent<Image>("Image_Bg/Image_NextTarget/Image_LevelIcon");
|
||||
buttonClose = GetComponent<Button>("Image_Bg/Button_Close");
|
||||
buttonGet = GetComponent<Button>("Image_Bg/Button_GetRewardOn");
|
||||
textScore = GetComponent<TMP_Text>("Image_Bg/Image_NextTarget/Text_Grades");
|
||||
recycleView = GetComponent<RecycleView>("Image_Bg/RecycleView");
|
||||
goGetOff = FindObj("Image_Bg/Button_GetRewardOff");
|
||||
|
||||
Transform tsRewardRoot = FindObj("Image_Bg/Image_NextTarget/Scroll View/Viewport/Content").transform;
|
||||
for (int i = 0; i < tsRewardRoot.childCount; ++i)
|
||||
{
|
||||
listReward.Add(new GenericItem_LevelStarReward(tsRewardRoot.GetChild(i).gameObject));
|
||||
}
|
||||
|
||||
rawImageGaussianBlurMask.texture = CommonUtils.GetScreenTexture2D();
|
||||
|
||||
recycleView.Init(RefreshItem);
|
||||
|
||||
BindButton(buttonClose, OnClose);
|
||||
BindButton(buttonGet, OnGet);
|
||||
|
||||
EventManager.Instance.Register(EventManager.EventName.GetLevelRewarf, RefreshUI);
|
||||
}
|
||||
|
||||
protected override void OnShowWindow(object data)
|
||||
{
|
||||
base.OnShowWindow(data);
|
||||
|
||||
if (data is not LevelGroupInfo groupInfo)
|
||||
return;
|
||||
|
||||
levelGroupInfo = groupInfo;
|
||||
|
||||
RefreshUI();
|
||||
}
|
||||
|
||||
public override void OnRelease()
|
||||
{
|
||||
EventManager.Instance.Unregister(EventManager.EventName.GetLevelRewarf, RefreshUI);
|
||||
|
||||
CommonUtils.ScreenshotReset();
|
||||
CommonUtils.PreLoadOrUnloadWarRatingIcon(false);
|
||||
|
||||
base.OnRelease();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 刷新
|
||||
/// </summary>
|
||||
private async void RefreshUI()
|
||||
{
|
||||
if (levelGroupInfo.Cfg.StarList.Length != levelGroupInfo.Cfg.Rewards.Length)
|
||||
{
|
||||
DebugUtil.LogError($"关卡组星级列表数量({levelGroupInfo.Cfg.StarList.Length})和奖励列表数量({levelGroupInfo.Cfg.Rewards.Length})不一致");
|
||||
return;
|
||||
}
|
||||
|
||||
IsGet = levelGroupInfo.IsHasGetRewards;
|
||||
int nextTargerScoreIndex = levelGroupInfo.NextTargerStarIndex;
|
||||
int nextTargetScore = levelGroupInfo.Cfg.StarList[nextTargerScoreIndex];
|
||||
textScore.text = nextTargetScore.ToString();
|
||||
Reward reward = RewardManager.Instance.Get(levelGroupInfo.Cfg.Rewards[nextTargerScoreIndex]);
|
||||
if (null == reward)
|
||||
{
|
||||
DebugUtil.LogError($"获取不到id为{levelGroupInfo.Cfg.Rewards[nextTargerScoreIndex]}的奖励配置");
|
||||
return;
|
||||
}
|
||||
for (int i = 0; i < listReward.Count; ++i)
|
||||
{
|
||||
if (i < reward.ItemList.Count)
|
||||
{
|
||||
listReward[i].SetInfo(reward.ItemList.GetItem(i), levelGroupInfo.IsHasGetReward(nextTargerScoreIndex + 1));
|
||||
listReward[i].IsActive = true;
|
||||
}
|
||||
else
|
||||
listReward[i].IsActive = false;
|
||||
}
|
||||
|
||||
await AssetManager.Instance.WaitAllPreloads();
|
||||
|
||||
E_WarRating warRating = LevelUtils.GetRatingByScore(nextTargetScore, levelGroupInfo.ScoreMax);
|
||||
imageRating.sprite = AssetManager.Instance.GetPreLoadResult<Sprite>(CommonUtils.GetWarRatingIconPath(warRating));
|
||||
|
||||
recycleView.ShowList(levelGroupInfo.Cfg.StarList.Length);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 动态列表刷新
|
||||
/// </summary>
|
||||
private void RefreshItem(GameObject cell, int index)
|
||||
{
|
||||
if (!dicRewardListItem.TryGetValue(cell.GetInstanceID(), out RewardListItem starListItem))
|
||||
{
|
||||
starListItem = new(cell);
|
||||
dicRewardListItem.Add(cell.GetInstanceID(), starListItem);
|
||||
}
|
||||
|
||||
if (null == levelGroupInfo)
|
||||
{
|
||||
DebugUtil.LogError("关卡组无效");
|
||||
return;
|
||||
}
|
||||
|
||||
if (index < 0 || index >= levelGroupInfo.Cfg.StarList.Length)
|
||||
{
|
||||
DebugUtil.LogError("越界");
|
||||
return;
|
||||
}
|
||||
|
||||
starListItem.SetInfo(levelGroupInfo.Cfg.StarList[index], levelGroupInfo.ScoreMax, levelGroupInfo.Cfg.Rewards[index], levelGroupInfo.IsGetReward(index + 1));
|
||||
}
|
||||
|
||||
#region 按钮回调
|
||||
private void OnClose()
|
||||
{
|
||||
CloseWindow();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 领取所有奖励
|
||||
/// </summary>
|
||||
private void OnGet()
|
||||
{
|
||||
NetHelper.LevelGroupReward((uint)levelGroupInfo.Cfg.Id);
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 89020847df6221b4fbb9f51635054022
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
|
@ -146,7 +146,17 @@
|
|||
"Id": 600,
|
||||
"ChapterID": 600,
|
||||
"LevelDifficulty": 0,
|
||||
"StarList": [],
|
||||
"Rewards": []
|
||||
"StarList": [
|
||||
100,
|
||||
300,
|
||||
1000,
|
||||
2000
|
||||
],
|
||||
"Rewards": [
|
||||
1001,
|
||||
1001,
|
||||
1001,
|
||||
1001
|
||||
]
|
||||
}
|
||||
]
|
||||
Loading…
Reference in New Issue