75 lines
2.5 KiB
C#
75 lines
2.5 KiB
C#
using GeometryTD.CustomUtility;
|
|
using Newtonsoft.Json.Linq;
|
|
using UnityGameFramework.Runtime;
|
|
|
|
namespace GeometryTD.Definition
|
|
{
|
|
public static class EventRequirementFactory
|
|
{
|
|
public static EventRequirementBase Create(string rawType, JObject param)
|
|
{
|
|
if (string.IsNullOrWhiteSpace(rawType))
|
|
{
|
|
return null;
|
|
}
|
|
|
|
EventRequirementType type = EnumUtility<EventRequirementType>.Get(rawType);
|
|
switch (type)
|
|
{
|
|
case EventRequirementType.GoldAtLeast:
|
|
{
|
|
int count = GetInt(param, "Count", "Gold");
|
|
return new GoldAtLeastRequirement(new GoldAtLeastParam(count));
|
|
}
|
|
case EventRequirementType.CompCountAtLeast:
|
|
{
|
|
int count = GetInt(param, "Count");
|
|
RarityType rarity = EnumUtility<RarityType>.Get(GetString(param, "Rarity"));
|
|
return new CompCountAtLeastRequirement(new CompCountAtLeastParam(count, rarity));
|
|
}
|
|
case EventRequirementType.TowerCountAtLeast:
|
|
{
|
|
int count = GetInt(param, "Count");
|
|
return new TowerCountAtLeastRequirement(new TowerCountAtLeastParam(count));
|
|
}
|
|
case EventRequirementType.HasRelic:
|
|
{
|
|
int relicId = GetInt(param, "RelicId", "Id");
|
|
return new HasRelicRequirement(new HasRelicParam(relicId));
|
|
}
|
|
default:
|
|
Log.Warning("Unsupported EventRequirementType '{0}'.", rawType);
|
|
return null;
|
|
}
|
|
}
|
|
|
|
private static int GetInt(JObject param, params string[] keys)
|
|
{
|
|
if (param == null)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
foreach (string key in keys)
|
|
{
|
|
if (param.TryGetValue(key, out JToken token) && token.Type != JTokenType.Null)
|
|
{
|
|
return token.Value<int>();
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
private static string GetString(JObject param, string key)
|
|
{
|
|
if (param == null || !param.TryGetValue(key, out JToken token) || token.Type == JTokenType.Null)
|
|
{
|
|
return string.Empty;
|
|
}
|
|
|
|
return token.Value<string>();
|
|
}
|
|
}
|
|
}
|