public void Resolve(GameLoader loader) { foreach (string typeName in m_typeNames) { if (loader.Elements.ContainsKey(typeName)) { m_types.Push(loader.Elements[typeName]); } } foreach (var objectRef in m_objectReferences) { Set(objectRef.Key, loader.Elements[objectRef.Value]); } foreach (var objectList in m_objectLists) { QuestList <Element> newList = new QuestList <Element>(objectList.Value.Select(l => loader.Elements[l])); Set(objectList.Key, newList); } foreach (var objectDict in m_objectDictionaries) { QuestDictionary <Element> newDict = new QuestDictionary <Element>(); foreach (var item in objectDict.Value) { newDict.Add(item.Key, loader.Elements[item.Value]); } Set(objectDict.Key, newDict); } }
private IEditableDictionary <T> CloneInternal(Element parent, string attribute) { QuestDictionary <T> newSource = (QuestDictionary <T>)m_source.Clone(); newSource.Locked = false; parent.Fields.Set(attribute, newSource); newSource = (QuestDictionary <T>)parent.Fields.Get(attribute); return(EditableDictionary <T> .GetNewInstance(m_controller, newSource)); }
private QuestDictionary <Element> ConvertToObjectDictionary(IDictionary <string, string> dictionary) { QuestDictionary <Element> newDictionary = new QuestDictionary <Element>(); foreach (var item in dictionary) { Element element = m_worldModel.Elements.Get(item.Value); newDictionary.Add(item.Key, element); } return(newDictionary); }
private QuestDictionary <IScript> ConvertToScriptDictionary(IDictionary <string, string> dictionary, ScriptFactory scriptFactory) { QuestDictionary <IScript> newDictionary = new QuestDictionary <IScript>(); foreach (var item in dictionary) { IScript newScript = scriptFactory.CreateScript(item.Value); newDictionary.Add(item.Key, newScript); } return(newDictionary); }
public EditableDictionary(EditorController controller, QuestDictionary <T> source) { s_count++; m_id = "dictionary" + s_count; m_controller = controller; m_source = source; m_source.Added += m_source_Added; m_source.Removed += m_source_Removed; PopulateWrappedItems(); }
internal void RemoveReferencesTo(Element e) { List <string> nullifyAttributes = new List <string>(); foreach (var attribute in m_attributes) { Element elementValue = attribute.Value as Element; if (elementValue != null) { if (elementValue == e) { nullifyAttributes.Add(attribute.Key); } continue; } QuestList <Element> listValue = attribute.Value as QuestList <Element>; if (listValue != null) { while (listValue.Contains(e)) { listValue.Remove(e); } continue; } QuestDictionary <Element> dictionaryValue = attribute.Value as QuestDictionary <Element>; if (dictionaryValue != null) { List <string> keysToRemove = new List <string>(); foreach (var item in dictionaryValue) { if (item.Value == e) { keysToRemove.Add(item.Key); } } foreach (string key in keysToRemove) { dictionaryValue.Remove(key); } continue; } } foreach (string attribute in nullifyAttributes) { Set(attribute, null); } }
private void ResolveObjectDictionary(QuestDictionary <object> dictionary, ScriptFactory scriptFactory) { var copy = new Dictionary <string, object>(dictionary); foreach (var item in copy) { object replacement; var replace = ReplaceValue(item.Value, scriptFactory, out replacement); if (replace) { dictionary[item.Key] = replacement; } } }
public void Save(GameXmlWriter writer, Element element, string attribute, object value) { writer.WriteStartElement(attribute); if (element == null || !GameSaver.IsImpliedType(element, attribute, "scriptdictionary")) { writer.WriteAttributeString("type", "scriptdictionary"); } QuestDictionary <IScript> dictionary = (QuestDictionary <IScript>)value; foreach (var item in dictionary) { writer.WriteStartElement("item"); writer.WriteAttributeString("key", item.Key); writer.WriteString(GameSaver.SaveScript(writer, item.Value, 0)); writer.WriteEndElement(); } writer.WriteEndElement(); }
public override void Save(GameWriter writer, Element element, string attribute, object value, bool isFinal) { QuestDictionary <Element> dictionary = (QuestDictionary <Element>)value; if (dictionary.Dictionary.Count == 0) { // Just write a blank dictionary base.WriteAttribute(writer, element, attribute, "new Object()", isFinal); } foreach (var item in dictionary.Dictionary) { writer.AddPostElementScript(element, string.Format( "objectDictionaryReferences.push([\"object_{0}\", \"{1}\", \"{2}\", \"object_{3}\"]);", element.MetaFields[MetaFieldDefinitions.MappedName], attribute, item.Key, item.Value.MetaFields[MetaFieldDefinitions.MappedName])); } }
private static QuestDictionary <string> PopulateInternal(Regex regex, string input) { if (!regex.IsMatch(input)) { throw new Exception(string.Format("String '{0}' is not a match for Regex '{1}'", input, regex.ToString())); } QuestDictionary <string> result = new QuestDictionary <string>(); foreach (string groupName in regex.GetGroupNames()) { if (!TextAdventures.Utility.Strings.IsNumeric(groupName)) { string groupMatch = regex.Match(input).Groups[groupName].Value; result.Add(groupName, groupMatch); } } return(result); }
public static QuestDictionary <string> Populate(string regexPattern, string input) { System.Text.RegularExpressions.Regex regex = new System.Text.RegularExpressions.Regex(regexPattern, System.Text.RegularExpressions.RegexOptions.IgnoreCase); if (!regex.IsMatch(input)) { throw new Exception(string.Format("String '{0}' is not a match for Regex '{1}'", input, regexPattern)); } QuestDictionary <string> result = new QuestDictionary <string>(); foreach (string groupName in regex.GetGroupNames()) { if (!TextAdventures.Utility.Strings.IsNumeric(groupName)) { string groupMatch = regex.Match(input).Groups[groupName].Value; result.Add(groupName, groupMatch); } } return(result); }
public override void Save(GameWriter writer, Element element, string attribute, object value, bool isFinal) { QuestDictionary <T> dictionary = (QuestDictionary <T>)value; string result = "{"; if (dictionary.Dictionary.Count > 0) { int count = 0; foreach (var item in dictionary.Dictionary) { count++; result += string.Format("\"{0}\": {1}{2} ", item.Key, ValueSaver(item.Value), count == dictionary.Dictionary.Count ? "" : ","); } } else { result += string.Format("\"{0}\": {1} ", "__dummyKey", ValueSaver(default(T))); } result += "}"; base.WriteAttribute(writer, element, attribute, result, isFinal); }
public override void Load(Element element, string attribute, string value) { QuestDictionary <string> result = new QuestDictionary <string>(); string[] values = Utility.ListSplit(value); foreach (string pair in values) { if (pair.Length > 0) { string trimmedPair = pair.Trim(); int splitPos = trimmedPair.IndexOf('='); if (splitPos == -1) { GameLoader.AddError(string.Format("Missing '=' in dictionary element '{0}' in '{1}.{2}'", trimmedPair, element.Name, attribute)); return; } string key = trimmedPair.Substring(0, splitPos).Trim(); string dictValue = trimmedPair.Substring(splitPos + 1).Trim(); result.Add(key, dictValue); } } element.Fields.Set(attribute, result); }
private bool ReplaceValue(object value, ScriptFactory scriptFactory, out object replacement) { replacement = null; var genericList = value as QuestList <object>; if (genericList != null) { ResolveObjectList(genericList, scriptFactory); return(false); } var genericDictionary = value as QuestDictionary <object>; if (genericDictionary != null) { ResolveObjectDictionary(genericDictionary, scriptFactory); return(false); } var objRef = value as Types.LazyObjectReference; if (objRef != null) { replacement = m_worldModel.Elements.Get(objRef.ObjectName); return(true); } var objList = value as Types.LazyObjectList; if (objList != null) { replacement = new QuestList <Element>(objList.Objects.Select(o => m_worldModel.Elements.Get(o))); return(true); } var objDictionary = value as Types.LazyObjectDictionary; if (objDictionary != null) { var newDictionary = new QuestDictionary <Element>(); foreach (var kvp in objDictionary.Dictionary) { newDictionary.Add(kvp.Key, m_worldModel.Elements.Get(kvp.Value)); } replacement = newDictionary; return(true); } var script = value as Types.LazyScript; if (script != null) { replacement = scriptFactory.CreateScript(script.Script); return(true); } var scriptDictionary = value as Types.LazyScriptDictionary; if (scriptDictionary != null) { replacement = ConvertToScriptDictionary(scriptDictionary.Dictionary, scriptFactory); return(true); } return(false); }
private static EditableDictionary <T> GetNewInstance(EditorController controller, QuestDictionary <T> list) { return(new EditableDictionary <T>(controller, list)); }
public static EditableDictionary <T> GetInstance(EditorController controller, QuestDictionary <T> list) { return(s_wrapper.GetInstance(controller, list)); }
public static EditableWrappedItemDictionary <TSource, TWrapped> GetInstance(EditorController controller, QuestDictionary <TSource> list) { return(s_wrapper.GetInstance(controller, list)); }
private static EditableWrappedItemDictionary <TSource, TWrapped> GetNewInstance(EditorController controller, QuestDictionary <TSource> list) { return(new EditableWrappedItemDictionary <TSource, TWrapped>(controller, list)); }
public override void Save(GameXmlWriter writer, Element element, string attribute, object value) { QuestDictionary <Element> dictionary = (QuestDictionary <Element>)value; base.WriteAttribute(writer, element, attribute, "objectdictionary", dictionary.SaveString(o => o.Name)); }