178 lines
4.5 KiB
C#
178 lines
4.5 KiB
C#
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;
|
||
}
|
||
} |