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 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; }