Beispiel #1
0
        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);
            }
        }
Beispiel #2
0
        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));
        }
Beispiel #3
0
        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);
        }
Beispiel #4
0
        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);
        }
Beispiel #5
0
        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();
        }
Beispiel #6
0
        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);
            }
        }
Beispiel #7
0
        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;
                }
            }
        }
Beispiel #8
0
            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();
            }
Beispiel #9
0
            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]));
                }
            }
Beispiel #10
0
        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);
        }
Beispiel #11
0
        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);
        }
Beispiel #12
0
            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);
            }
Beispiel #13
0
            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);
            }
Beispiel #14
0
        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);
        }
Beispiel #15
0
 private static EditableDictionary <T> GetNewInstance(EditorController controller, QuestDictionary <T> list)
 {
     return(new EditableDictionary <T>(controller, list));
 }
Beispiel #16
0
 public static EditableDictionary <T> GetInstance(EditorController controller, QuestDictionary <T> list)
 {
     return(s_wrapper.GetInstance(controller, list));
 }
Beispiel #17
0
 public static EditableWrappedItemDictionary <TSource, TWrapped> GetInstance(EditorController controller, QuestDictionary <TSource> list)
 {
     return(s_wrapper.GetInstance(controller, list));
 }
Beispiel #18
0
 private static EditableWrappedItemDictionary <TSource, TWrapped> GetNewInstance(EditorController controller, QuestDictionary <TSource> list)
 {
     return(new EditableWrappedItemDictionary <TSource, TWrapped>(controller, list));
 }
Beispiel #19
0
            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));
            }