public void PropagateVariablesInCategory(string changedMember) { var currentCategory = SelectedState.Self.SelectedStateCategorySave; /////////////////////Early Out////////////////////////// if (currentCategory == null) { return; } ///////////////////End Early Out//////////////////////// var defaultState = SelectedState.Self.SelectedElement.DefaultState; var defaultVariable = defaultState.GetVariableSave(changedMember); if (defaultVariable == null) { defaultVariable = defaultState.GetVariableRecursive(changedMember); } // If the user is setting a variable that is a categorized state, the // default may be null. If so, then we need to select the first value // as the default so that values are always set: if (defaultVariable != null && defaultVariable.Value == null) { var variableContainer = SelectedState.Self.SelectedElement; var sourceObjectName = VariableSave.GetSourceObject(changedMember); if (!string.IsNullOrEmpty(sourceObjectName)) { var nos = variableContainer.GetInstance(sourceObjectName); if (nos != null) { variableContainer = ObjectFinder.Self.GetElementSave(nos); } } ElementSave categoryContainer; StateSaveCategory category; var isState = defaultVariable.IsState(variableContainer, out categoryContainer, out category); if (isState) { // we're going to assign a value on the variable, but we don't want to modify the original one so, // let's clone it: defaultVariable = defaultVariable.Clone(); if (category != null) { defaultVariable.Value = category.States.FirstOrDefault()?.Name; } else { defaultVariable.Value = variableContainer.DefaultState?.Name; } } } var defaultValue = defaultVariable?.Value; foreach (var state in currentCategory.States) { var existingVariable = state.GetVariableSave(changedMember); if (existingVariable == null) { if (defaultVariable != null) { VariableSave newVariable = defaultVariable.Clone(); newVariable.Value = defaultValue; newVariable.SetsValue = true; newVariable.Name = changedMember; state.Variables.Add(newVariable); GumCommands.Self.GuiCommands.PrintOutput( $"Adding {changedMember} to {currentCategory.Name}/{state.Name}"); } } else if (existingVariable.SetsValue == false) { existingVariable.SetsValue = true; } } }