战役奖励领取

main
yurui 2024-09-05 19:30:05 +08:00
parent ea746145aa
commit ff2afc171b
10 changed files with 5507 additions and 12920 deletions

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 8baf90a13948f344b9522fb1c215aca6
guid: c1aecf2a97a97e545a6a1b935b1f3f8b
PrefabImporter:
externalObjects: {}
userData:

View File

@ -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";

View File

@ -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)
{

View File

@ -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);
}
}

View File

@ -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)

View File

@ -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
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 89020847df6221b4fbb9f51635054022
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -146,7 +146,17 @@
"Id": 600,
"ChapterID": 600,
"LevelDifficulty": 0,
"StarList": [],
"Rewards": []
"StarList": [
100,
300,
1000,
2000
],
"Rewards": [
1001,
1001,
1001,
1001
]
}
]