NLDClient-yudde/ProjectNLD/Assets/Code/Scripts/Gameplay/Reward/FightRewardManager.cs

178 lines
4.5 KiB
C#
Raw Normal View History

2023-10-19 15:00:19 +08:00
using System.Collections;
using System.Collections.Generic;
using cfg.ActorCfg;
using Framework;
using Gameplay.Level;
using Gameplay.Net;
public class FightRewardManager
{
private static FightRewardManager _instance;
private Dictionary<int, List<DataRewards>> _rewardsMap = new Dictionary<int, List<DataRewards>>();
public static FightRewardManager Instance
{
get
{
if (_instance == null)
{
_instance = new FightRewardManager();
_instance.Init();
}
return _instance;
}
}
public enum FightResult
{
Success,
Fail
}
public static FightResult CurFightResult;
public struct FightRewardPreviewData
{
public int itemID;
public int num;
}
//奖励的类型
public enum RewardType
{
Normal, //常规奖励
First, //首次通关奖励
Star1, //一星奖励
Star2, //二星奖励
Star3 //三星奖励
}
private void Init()
{
TranslateRewardDataList();
}
private void Release()
{
_rewardsMap.Clear();
_instance = null;
}
//传入itemIDArray作为需要输出的道具ID数组
private void ParseRewardList(int[] rewards, int[] itemIDArray)
{
if (rewards == null || rewards.Length <= 0)
{
DebugUtil.LogError("==== 需要解析的将鼓励列表无内容,请检查!!! ====");
return;
}
for (int i = 0; i < rewards.Length; i++)
{
var rewardData = GetItemID(rewards[i]);
foreach (var item in rewardData)
{
itemIDArray[itemIDArray.Length + 1] = item.itemID;
}
}
}
private List<FightRewardPreviewData> GetItemID(int rewardID)
{
List<FightRewardPreviewData> preDataList = new List<FightRewardPreviewData>();
var rewardDataL = _rewardsMap[rewardID];
for (int i = 0; i < rewardDataL.Count; i++)
{
var type = rewardDataL[i].RewardType;
var preData = new FightRewardPreviewData()
{
itemID = rewardDataL[i].ItemID
};
switch (rewardDataL[i].RewardType)
{
case (cfg.ActorCfg.RewardType.Ensure):
{
preData.num = rewardDataL[i].MaxCount;
break;
}
case (cfg.ActorCfg.RewardType.WeightRandom):
{
preData.num = -1;
break;
}
}
preDataList.Add(preData);
}
return preDataList;
}
//解析一遍配置表内容
private void TranslateRewardDataList()
{
var rewardDataList = TableManager.Instance.Tables.Rewards.DataList;
_rewardsMap.Clear();
int curID = -1;
for (int i = 0; i < rewardDataList.Count; i++)
{
var curReward = rewardDataList[i];
if (curReward.Id != curID)
{
curID = curReward.Id;
_rewardsMap.Add(curID, new List<DataRewards>());
}
_rewardsMap[curID].Add(curReward);
}
}
private int[] GetLevelRewards(int levelID, RewardType rewardType)
{
var levelData = TableManager.Instance.Tables.Level.GetOrDefault(levelID);
if (levelData != null)
{
int[] rewards = null;
switch (rewardType)
{
case (RewardType.Normal):
{
rewards = levelData.NormalRewardID;
break;
}
case (RewardType.First):
{
rewards = levelData.FristRewardID;
break;
}
case (RewardType.Star1):
{
rewards = levelData.StarRewardID1;
break;
}
case (RewardType.Star2):
{
rewards = levelData.StarRewardID2;
break;
}
case (RewardType.Star3):
{
rewards = levelData.StarRewardID3;
break;
}
}
return rewards;
}
return null;
}
/****** 公有方法 ******/
public List<int> GetRewardItems(int levelID)
{
return null;
}
}