using GeometryTD.CustomUtility; using GeometryTD.Definition; using Newtonsoft.Json.Linq; using UnityGameFramework.Runtime; namespace GeometryTD.Factory { public static class EventRequirementFactory { public static EventRequirementBase Create(string rawType, JObject param) { if (string.IsNullOrWhiteSpace(rawType)) { return null; } EventRequirementType type = EnumUtility.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.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(); } } 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(); } } }