GetInstance() public method

public GetInstance ( string name ) : InstanceSave
name string
return InstanceSave
        public static TypeConverter GetTypeConverter(this VariableSave variableSave, ElementSave container = null)
        {
            ElementSave       categoryContainer;
            StateSaveCategory category;

            if (variableSave.CustomTypeConverter != null)
            {
                return(variableSave.CustomTypeConverter);
            }
            else if (variableSave.IsFont)
            {
                return(new FontTypeConverter());
            }
            else if (variableSave.Name == "Guide")
            {
                AvailableGuidesTypeConverter availableGuidesTypeConverter = new AvailableGuidesTypeConverter();
                availableGuidesTypeConverter.GumProjectSave = ObjectFinder.Self.GumProjectSave;
                availableGuidesTypeConverter.ShowNewGuide   = false;
                return(availableGuidesTypeConverter);
            }
            else if (variableSave.IsState(container, out categoryContainer, out category))
            {
                string categoryName = null;

                if (category != null)
                {
                    categoryName = category.Name;
                }

                AvailableStatesConverter converter = new AvailableStatesConverter(categoryName);
                converter.ElementSave = categoryContainer;
                return(converter);
            }
            else
            {
                // We should see if it's an exposed variable, and if so, let's look to the source object's type converters
                bool foundInRoot = false;
                if (!string.IsNullOrEmpty(variableSave.SourceObject) && container != null)
                {
                    InstanceSave instance = container.GetInstance(variableSave.SourceObject);

                    if (instance != null)
                    {
                        // see if the instance has a variable
                        var foundElementSave = ObjectFinder.Self.GetRootStandardElementSave(instance);

                        if (foundElementSave != null)
                        {
                            VariableSave rootVariableSave = foundElementSave.DefaultState.GetVariableSave(variableSave.GetRootName());

                            if (rootVariableSave != null)
                            {
                                return(rootVariableSave.GetTypeConverter((ElementSave)null));
                            }
                        }
                    }
                }
            }
            Type type = variableSave.GetRuntimeType();

            return(variableSave.GetTypeConverter(type));
        }
        public static bool IsState(this VariableSave variableSave, ElementSave container, out ElementSave categoryContainer, out StateSaveCategory category, bool recursive = true)
        {
            category          = null;
            categoryContainer = null;

            var variableName = variableSave.GetRootName();

            // This is called a lot so let's try to make it faster:
            bool endsWithState = variableName.Length >= 5 &&
                                 variableName[variableName.Length - 1] == 'e' &&
                                 variableName[variableName.Length - 2] == 't' &&
                                 variableName[variableName.Length - 3] == 'a' &&
                                 variableName[variableName.Length - 4] == 't' &&
                                 variableName[variableName.Length - 5] == 'S';

            ///////////////Early Out
            if (endsWithState == false && string.IsNullOrEmpty(variableSave.SourceObject))
            {
                return(false);
            }
            /////////////End early out

            // what about uncategorized

            string categoryName = null;

            if (endsWithState)
            {
                categoryName = variableName.Substring(0, variableName.Length - "State".Length);
            }

            if (string.IsNullOrEmpty(variableSave.SourceObject) == false)
            {
                var instanceSave = container.GetInstance(variableSave.SourceObject);

                if (instanceSave != null)
                {
                    var element = ObjectFinder.Self.GetElementSave(instanceSave.BaseType);

                    if (element != null)
                    {
                        var defaultState = element.DefaultState;
                        if (defaultState == null)
                        {
                            throw new NullReferenceException(
                                      $"Could not find a default state for {element} - this happens if the element wasn't initialized, or if its file was not loaded properly.");
                        }
                        // let's try going recursively:
                        var subVariable = element.DefaultState.Variables.FirstOrDefault(item => item.ExposedAsName == variableSave.GetRootName());

                        if (subVariable != null && recursive)
                        {
                            return(subVariable.IsState(element, out categoryContainer, out category));
                        }
                        else
                        {
                            if (variableName == "State")
                            {
                                categoryContainer = element;
                                category          = null;
                                return(true);
                            }
                            else
                            {
                                category = element.GetStateSaveCategoryRecursively(categoryName, out categoryContainer);
                                return(category != null);
                            }
                        }
                    }
                }
            }
            else
            {
                if (variableName == "State")
                {
                    return(true);
                }
                else
                {
                    category = container.GetStateSaveCategoryRecursively(categoryName, out categoryContainer);

                    return(category != null);
                }
            }

            return(false);
        }
        public static bool IsState(this VariableSave variableSave, ElementSave container, out ElementSave categoryContainer, out StateSaveCategory category, bool recursive = true)
        {
            category          = null;
            categoryContainer = null;

            var variableName = variableSave.GetRootName();

            ///////////////Early Out
            if (variableName.EndsWith("State") == false && string.IsNullOrEmpty(variableSave.SourceObject))
            {
                return(false);
            }
            /////////////End early out

            // what about uncategorized

            string categoryName = null;

            if (variableName.EndsWith("State"))
            {
                categoryName = variableName.Substring(0, variableName.Length - "State".Length);
            }

            if (string.IsNullOrEmpty(variableSave.SourceObject) == false)
            {
                var instanceSave = container.GetInstance(variableSave.SourceObject);

                if (instanceSave != null)
                {
                    var element = ObjectFinder.Self.GetElementSave(instanceSave.BaseType);

                    if (element != null)
                    {
                        // let's try going recursively:
                        var subVariable = element.DefaultState.Variables.FirstOrDefault(item => item.ExposedAsName == variableSave.GetRootName());

                        if (subVariable != null && recursive)
                        {
                            return(subVariable.IsState(element, out categoryContainer, out category));
                        }
                        else
                        {
                            if (variableName == "State")
                            {
                                categoryContainer = element;
                                category          = null;
                                return(true);
                            }
                            else
                            {
                                category = element.GetStateSaveCategoryRecursively(categoryName, out categoryContainer);
                                return(category != null);
                            }
                        }
                    }
                }
            }
            else
            {
                if (variableName == "State")
                {
                    return(true);
                }
                else
                {
                    category = container.GetStateSaveCategoryRecursively(categoryName, out categoryContainer);

                    return(category != null);
                }
            }

            return(false);
        }
        public static TypeConverter GetTypeConverter(this VariableSave variableSave, ElementSave container = null)
        {
            ElementSave categoryContainer;
            StateSaveCategory category;

            if (variableSave.CustomTypeConverter != null)
            {
                return variableSave.CustomTypeConverter;
            }
            else if (variableSave.IsFont)
            {
                return new FontTypeConverter();
            }
            else if (variableSave.Name == "Guide")
            {
                AvailableGuidesTypeConverter availableGuidesTypeConverter = new AvailableGuidesTypeConverter();
                availableGuidesTypeConverter.GumProjectSave = ObjectFinder.Self.GumProjectSave;
                availableGuidesTypeConverter.ShowNewGuide = false;
                return availableGuidesTypeConverter;
            }
            else if(variableSave.IsState(container, out categoryContainer, out category ))
            {
                string categoryName = null;

                if(category != null)
                {
                    categoryName = category.Name;
                }

                AvailableStatesConverter converter = new AvailableStatesConverter(categoryName);
                converter.ElementSave = categoryContainer;
                return converter;
            }
            else
            {
                // We should see if it's an exposed variable, and if so, let's look to the source object's type converters
                bool foundInRoot = false;
                if (!string.IsNullOrEmpty(variableSave.SourceObject) && container != null)
                {
                    InstanceSave instance = container.GetInstance(variableSave.SourceObject);

                    if (instance != null)
                    {
                        // see if the instance has a variable
                        var foundElementSave = ObjectFinder.Self.GetRootStandardElementSave(instance);

                        if (foundElementSave != null)
                        {
                            VariableSave rootVariableSave = foundElementSave.DefaultState.GetVariableSave(variableSave.GetRootName());

                            if (rootVariableSave != null)
                            {
                                return rootVariableSave.GetTypeConverter((ElementSave)null);
                            }
                        }
                    }
                }

            }
            Type type = variableSave.GetRuntimeType();
            return variableSave.GetTypeConverter(type);
            
        }
        public static bool IsState(this VariableSave variableSave, ElementSave container, out ElementSave categoryContainer, out StateSaveCategory category, bool recursive = true)
        {
            category = null;
            categoryContainer = null;

            var variableName = variableSave.GetRootName();

            ///////////////Early Out
            if(variableName.EndsWith("State") == false && string.IsNullOrEmpty(variableSave.SourceObject ))
            {
                return false;                
            }
            /////////////End early out

            // what about uncategorized

            string categoryName = null;

            if (variableName.EndsWith("State"))
            {
                categoryName = variableName.Substring(0, variableName.Length - "State".Length);
            }

            if(string.IsNullOrEmpty( variableSave.SourceObject) == false)
            {
                var instanceSave = container.GetInstance(variableSave.SourceObject);

                if(instanceSave != null)
                {
                    var element = ObjectFinder.Self.GetElementSave(instanceSave.BaseType);

                    if(element != null)
                    {
                        // let's try going recursively:
                        var subVariable = element.DefaultState.Variables.FirstOrDefault(item => item.ExposedAsName == variableSave.GetRootName());

                        if (subVariable != null && recursive)
                        {
                            return subVariable.IsState(element, out categoryContainer, out category);   
                        }
                        else
                        {
                            if (variableName == "State")
                            {
                                categoryContainer = element;
                                category = null;
                                return true;
                            }
                            else
                            {

                                category = element.GetStateSaveCategoryRecursively(categoryName, out categoryContainer);
                                return category != null;
                            }
                        }
                    }
                }
            }
            else
            {
                if (variableName == "State")
                {
                    return true;
                }
                else
                {

                    category = container.GetStateSaveCategoryRecursively(categoryName, out categoryContainer);

                    return category != null;
                }
            }

            return false;
        }
        private float GetAnimationLength(ElementSave element, AnimationSave animation)
        {
            float max = 0;

            if (animation.States.Count != 0)
            {
                max = animation.States.Max(item => item.Time);
            }
            if(animation.Events.Count != 0)
            {
                max = System.Math.Max(
                    max,
                    animation.Events.Max(item => item.Time));
            }
            foreach (var item in animation.Animations)
            {
                AnimationSave subAnimation = null;
                ElementSave subElement = null;

                if(!string.IsNullOrEmpty( item.SourceObject))
                {
                    var instance = element.GetInstance(item.SourceObject);

                    // This may refer to an instance that was deleted at some point:
                    if (instance != null)
                    {
                        subElement = Gum.Managers.ObjectFinder.Self.GetElementSave(instance);
                    }

                    if (subElement != null)
                    {
                        subAnimation = GetAnimationsFor(subElement).Animations.FirstOrDefault(candidate => candidate.Name == item.RootName);
                    }
                }
                else
                {
                    subElement = element;
                    subAnimation = GetAnimationsFor(element).Animations.FirstOrDefault(candidate => candidate.Name == item.RootName);
                }

                if (subElement != null && subAnimation != null)
                {
                    max = Math.Max(max, item.Time + GetAnimationLength(subElement, subAnimation));
                }
            }

            return max;
        }