using System; using System.Collections.Generic; using Continentis.MainGame.Card; using DynamicExpresso; using UnityEngine; namespace Continentis.MainGame { public static partial class CardTextInterpreter { private static readonly Interpreter TextInterpreter; static CardTextInterpreter() { TextInterpreter = new Interpreter(); DynamicTextInterpreter.InitializeInterpreter(ref TextInterpreter); foreach (KeyValuePair keyword in MainGameManager.Instance.keywordData.interpretedKeywords) { TextInterpreter.SetVariable(keyword.Key, keyword.Key); } } public static void InterpretText(CardInstance card, bool overrideDescription = false) { //card.contentSubmodule.keywords.Clear(); foreach (KeyValuePair attribute in card.attributeSubmodule.attributeGroup.current) { TextInterpreter.SetVariable(attribute.Key, attribute.Value); } TextInterpreter.SetFunction("RemoveWhenSelecting", new Func((toRemove) => RemoveWhenSelecting(card, toRemove))); TextInterpreter.SetFunction("Attribute", new Func((name) => GetAttribute(card, name, true, false))); TextInterpreter.SetFunction("Attribute", new Func((name, high) => GetAttribute(card, name, high, false))); TextInterpreter.SetFunction("Attribute", new Func((name, high, percent) => GetAttribute(card, name, high, percent))); string descriptionToParse = card.contentSubmodule.originalFunctionText; string result = DynamicTextInterpreter.Parse(TextInterpreter, descriptionToParse); card.contentSubmodule.interpretedFunctionText = result; Debug.Log($"Interpreted Description: {result}"); } } public static partial class CardTextInterpreter { private static string GetAttribute(CardInstance card, string attributeName, bool higherIsBetter, bool inPercent) { string displayName = "Display" + attributeName; string baseName = "Base" + attributeName; string baseOffsetName = "Base" + attributeName + "Offset"; if (!inPercent) { int displayValue = card.GetAttribute(displayName); int baseValue = card.GetAttribute(baseName) + card.GetAttribute(baseOffsetName); return DynamicTextInterpreter.GetValue(displayValue, baseValue, higherIsBetter, false); } else { float rawDisplayValue = card.GetRawAttribute(displayName); float rawBaseValue = card.GetRawAttribute(baseName) + card.GetRawAttribute(baseOffsetName); return DynamicTextInterpreter.GetValue(rawDisplayValue, rawBaseValue, higherIsBetter, true); } } private static string GetAttribute(CardInstance card, string attributeName, bool inPercent) { string displayName = "Display" + attributeName; int displayValue = card.GetAttribute(displayName); return DynamicTextInterpreter.GetValue(displayValue, inPercent); } private static string RemoveWhenSelecting(CardInstance card, string toRemove) { return card.handCardView != null && card.handCardView.isSelecting ? "" : toRemove; } } }