private AssetTypeInfo GetAtiFor(ElementSave element) { AssetTypeInfo newAti = FlatRedBall.IO.FileManager.CloneObject <AssetTypeInfo>(GraphicalUiElementAti); newAti.QualifiedRuntimeTypeName = new PlatformSpecificType() { QualifiedType = GueDerivingClassCodeGenerator.GetQualifiedRuntimeTypeFor(element) }; if (element is ComponentSave) { newAti.Extension = GumProjectSave.ComponentExtension; newAti.CustomLoadMethod = ComponentAti.CustomLoadMethod + " as " + GueDerivingClassCodeGenerator.GetQualifiedRuntimeTypeFor(element); } string unqualifiedName = element.Name + "Runtime"; newAti.FriendlyName = unqualifiedName; newAti.FindByNameSyntax = "GetGraphicalUiElementByName(\"OBJECTNAME\") as " + newAti.QualifiedRuntimeTypeName.QualifiedType; if (newAti.ExtraVariablesPattern.EndsWith(";") == false) { newAti.ExtraVariablesPattern += ";"; } newAti.ExtraVariablesPattern = ""; // 9/24/2014 // Jesse was getting // the plugin to crash // on this line of code // with a NullReferenceException. // I'm going to wrap this in if-s to be sure it's safe. if (element != null && element.DefaultState != null && element.DefaultState.Variables != null) { foreach (var variable in element.DefaultState.Variables.Where(item => !string.IsNullOrEmpty(item.ExposedAsName) || string.IsNullOrEmpty(item.SourceObject))) { var variableDefinition = new VariableDefinition(); variableDefinition.Category = variable.Category; variableDefinition.DefaultValue = variable.Value?.ToString(); variableDefinition.Name = variable.ExposedAsName ?? variable.Name; variableDefinition.Type = variable.Type; newAti.VariableDefinitions.Add(variableDefinition); } } return(newAti); }
public CodeGeneratorManager() { mGueDerivingClassCodeGenerator = new GueDerivingClassCodeGenerator(); behaviorCodeGenerator = new BehaviorCodeGenerator(); }
private AssetTypeInfo GetAtiFor(ElementSave element) { if (element == null) { throw new ArgumentNullException(nameof(element)); } AssetTypeInfo newAti = FlatRedBall.IO.FileManager.CloneObject <AssetTypeInfo>(GraphicalUiElementAti); newAti.AddToManagersFunc = GraphicalUiElementAti.AddToManagersFunc; newAti.QualifiedRuntimeTypeName = new PlatformSpecificType() { QualifiedType = GueDerivingClassCodeGenerator.GetQualifiedRuntimeTypeFor(element) }; if (element is ComponentSave) { newAti.Extension = GumProjectSave.ComponentExtension; newAti.CustomLoadMethod = ComponentAti.CustomLoadMethod + " as " + GueDerivingClassCodeGenerator.GetQualifiedRuntimeTypeFor(element); } string unqualifiedName = element.Name + "Runtime"; newAti.FriendlyName = unqualifiedName; newAti.ConstructorFunc = GetGumElementConstructorFunct; newAti.FindByNameSyntax = "GetGraphicalUiElementByName(\"OBJECTNAME\") as " + newAti.QualifiedRuntimeTypeName.QualifiedType; newAti.ExtraVariablesPattern = ""; // 9/24/2014 // Jesse was getting // the plugin to crash // on this line of code // with a NullReferenceException. // I'm going to wrap this in if-s to be sure it's safe. // 7/19/2018 // Turns out this can crash if the lement's DefaultState is null // This happens if the backing file (like gutx) is not on disk. // Let's put a warning if (element != null && element.DefaultState == null) { GlueCommands.Self.PrintError("Could not find default state for Gum element " + element.Name + ". This can happen if the file is missing on disk"); } if (element != null & element.DefaultState != null) { var states = new List <Gum.DataTypes.Variables.StateSave>(); states.Add(element.DefaultState); var parentElement = Gum.Managers.ObjectFinder.Self.GetElementSave(element.BaseType); while (parentElement != null) { states.Add(parentElement.DefaultState); parentElement = Gum.Managers.ObjectFinder.Self.GetElementSave(parentElement.BaseType); } foreach (var state in states) { var variablesForState = state.Variables.Where(item => !string.IsNullOrEmpty(item.ExposedAsName) || string.IsNullOrEmpty(item.SourceObject)).ToArray(); foreach (var variable in variablesForState) { string variableName = (variable.ExposedAsName ?? variable.Name).Replace(" ", ""); var hasAlreadyBeenAdded = newAti.VariableDefinitions.Any(item => item.Name == variableName); if (!hasAlreadyBeenAdded) { var variableDefinition = new VariableDefinition(); variableDefinition.Category = variable.Category; variableDefinition.DefaultValue = variable.Value?.ToString(); variableDefinition.Name = variableName; // gum variables can have spaces, but Glue variables can't variableDefinition.Type = QualifyGumVariableType(variable, element); ChangePositionUnitTypes(variableDefinition); newAti.VariableDefinitions.Add(variableDefinition); } } } } return(newAti); }
public bool HandleTryAddContainedObjects(string absoluteFile, List <string> availableObjects) { string extension = FileManager.GetExtension(absoluteFile); bool toReturn = extension == GumProjectSave.ComponentExtension || extension == GumProjectSave.ScreenExtension; // We don't want the "Entire File" option // Victor Chelaru Feb 24 // Why not? This clears out // all entire objects! Like if // the user selects a .scnx file. // This is bad, so we should not clear // this unless the file is a .gumx or .gusx // or .gucx or .gutx // Update March 11, 2015 // Actually we're no longer // going to use the weird "this" // syntax and instead just use the // entire file syntax. //if (extension == GumProjectSave.ScreenExtension || // extension == GumProjectSave.ComponentExtension || // extension == GumProjectSave.StandardExtension || // extension == GumProjectSave.ProjectExtension) //{ // availableObjects.Clear(); //} // Update March 12, 2015 // Actually we do want to clear everything if it's a .gucx, and only add the Entire File with the runtime type if (extension == GumProjectSave.ComponentExtension) { availableObjects.Clear(); } if (toReturn) { ElementSave element = null; if (extension == GumProjectSave.ComponentExtension) { element = FileManager.XmlDeserialize <ComponentSave>(absoluteFile); } else { element = FileManager.XmlDeserialize <ScreenSave>(absoluteFile); } // Victor Chelaru, November 1, 2015 // Initially I used a "this" syntax to // get access to the Screen casted as its // current type. But I didn't like the "this" // syntax, so I removed it to replace it with "Entire File". // Unfortunately, Entire File does a simple assignment, but screens // are loaded as IDB's, not as their runtime type. Maybe this should change // in the future (which would require their runtime types to inherit from IDBs), // but in the meantime, I'm going to revert back to using the "this" syntax so that // Screens can be casted appropriately: //availableObjects.Add("Entire File (" + element.Name + "Runtime" + ")"); availableObjects.Add("this (" + GueDerivingClassCodeGenerator.GetQualifiedRuntimeTypeFor(element) + ")"); foreach (var instance in element.Instances) { var elementSave = Gum.Managers.ObjectFinder.Self.GetElementSave(instance.BaseType); string gueType = ""; if (GueDerivingClassCodeGenerator.Self.ShouldGenerateRuntimeFor(elementSave)) { gueType = GueDerivingClassCodeGenerator.GetQualifiedRuntimeTypeFor(instance); } else { gueType = "Gum.Wireframe.GraphicalUiElement"; } availableObjects.Add(instance.Name + " (" + gueType + ")"); } } return(toReturn); }