示例#1
0
        public string GetCustomCodeTemplateCode(ElementSave element)
        {
            // Example:

            /*
             * using System;
             * using System.Collections.Generic;
             * using System.Linq;
             *
             * namespace DesktopGlForms.GumRuntimes.DefaultForms
             * {
             * public partial class ButtonRuntime
             * {
             * partial void CustomInitialize()
             * {
             *
             * }
             * }
             * }
             *
             */


            ICodeBlock codeBlock = new CodeBlockBase(null);
            var        toReturn  = codeBlock;

            codeBlock.Line("using System;");
            codeBlock.Line("using System.Collections.Generic;");
            codeBlock.Line("using System.Linq;");
            codeBlock.Line();
            codeBlock = codeBlock.Namespace(GetFullRuntimeNamespaceFor(element));
            {
                string runtimeClassName = GetUnqualifiedRuntimeTypeFor(element);

                codeBlock = codeBlock.Class("public partial", runtimeClassName);
                {
                    codeBlock = codeBlock.Function("partial void", "CustomInitialize");
                }
            }
            return(toReturn.ToString());
        }
示例#2
0
        private static string GetCameraSetupCsContents()
        {
            bool shouldGenerateNew = GlueState.Self.CurrentGlueProject.DisplaySettings != null;

            string fileContents = null;

            ICodeBlock classContents = new CodeBlockBase(null);

            classContents.Line("// This is a generated file created by Glue. To change this file, edit the camera settings in Glue.");
            classContents.Line("// To access the camera settings, push the camera icon.");
            if (shouldGenerateNew == false)
            {
                classContents.TabCount = 2;
                fileContents           = GetDisplaySetupOld(classContents);
            }
            else
            {
                fileContents = GetDisplaySetupNew(classContents);
            }
            return(fileContents);
        }
示例#3
0
        public string GenerateCodeFor(ElementSave elementSave)
        {
            if (elementSave == null)
            {
                throw new ArgumentNullException(nameof(elementSave));
            }

            CodeBlockBase topBlock =
                new CodeBlockBase(null);

            // It's much easier to add the LINQ usings here instead of using the qualified method names in code gen below
            topBlock.Line("using System.Linq;");

            var fullNamespace = GetFullRuntimeNamespaceFor(elementSave);

            ICodeBlock currentBlock = topBlock.Namespace(fullNamespace);

            bool generated = false;

            if (elementSave is StandardElementSave)
            {
                generated = StandardsCodeGenerator.Self.GenerateStandardElementSaveCodeFor(elementSave as StandardElementSave, currentBlock);
            }
            else
            {
                bool doesElementSaveHaveDefaultState = elementSave.DefaultState != null;
                // If the element has no default state that may mean that the element is referenced
                // by the Gum project, but that the file (such as the .gusx or gucx) is missing from
                // the file system. Therefore we should not try to generate code for it.
                if (doesElementSaveHaveDefaultState)
                {
                    GenerateScreenAndComponentCodeFor(elementSave, currentBlock);
                    // for now always true
                    generated = true;
                }
                else
                {
                    generated = false;
                }
            }

            if (generated)
            {
                return(topBlock.ToString());
            }
            else
            {
                return(null);
            }
        }
示例#4
0
        public string GenerateCodeFor(ElementSave elementSave)
        {
            if (elementSave == null)
            {
                throw new ArgumentNullException(nameof(elementSave));
            }

            CodeBlockBase topBlock =
                new CodeBlockBase(null);

            // It's much easier to add the LINQ usings here instead of using the qualified method names in code gen below
            topBlock.Line("using System.Linq;");

            ICodeBlock currentBlock = topBlock.Namespace(GueRuntimeNamespace);

            bool generated = false;

            if (elementSave is StandardElementSave)
            {
                generated = StandardsCodeGenerator.Self.GenerateStandardElementSaveCodeFor(elementSave as StandardElementSave, currentBlock);
            }
            else
            {
                GenerateScreenAndComponentCodeFor(elementSave, currentBlock);
                // for now always true
                generated = true;
            }

            if (generated)
            {
                return(topBlock.ToString());
            }
            else
            {
                return(null);
            }
        }
示例#5
0
        public override string GetCode()
        {
            string entityClassName = FileManager.RemovePath(FileManager.RemoveExtension(EntitySave.Name));

            string baseEntityName = null;

            if (!string.IsNullOrEmpty(EntitySave.BaseEntity))
            {
                EntitySave rootEntitySave = EntitySave.GetRootBaseEntitySave();

                // There could be an invalid inheritance chain.  We don't want Glue to bomb if so, so
                // we'll check for this.
                if (rootEntitySave != null && rootEntitySave != EntitySave)
                {
                    baseEntityName = rootEntitySave.Name;
                }
            }


            string factoryClassName = ClassName;

            ClassProperties classProperties = new ClassProperties();

            classProperties.NamespaceName = ProjectManager.ProjectNamespace + ".Factories";
            classProperties.ClassName     = factoryClassName + " : IEntityFactory";

            classProperties.Members = new List <FlatRedBall.Instructions.Reflection.TypedMemberBase>();

            classProperties.UntypedMembers = new Dictionary <string, string>();
            string positionedObjectListType = string.Format("FlatRedBall.Math.PositionedObjectList<{0}>", entityClassName);

            // Factories used to be always static but we're going to make them singletons instead
            //classProperties.IsStatic = true;

            classProperties.UsingStatements = new List <string>();
            classProperties.UsingStatements.Add(GlueCommands.Self.GenerateCodeCommands.GetNamespaceForElement(EntitySave));
            classProperties.UsingStatements.Add("System");

            if (!string.IsNullOrEmpty(baseEntityName))
            {
                EntitySave baseEntity = ObjectFinder.Self.GetEntitySave(baseEntityName);
                classProperties.UsingStatements.Add(GlueCommands.Self.GenerateCodeCommands.GetNamespaceForElement(baseEntity));
            }


            classProperties.UsingStatements.Add("FlatRedBall.Math");
            classProperties.UsingStatements.Add("FlatRedBall.Graphics");
            classProperties.UsingStatements.Add(ProjectManager.ProjectNamespace + ".Performance");


            ICodeBlock codeContent = CodeWriter.CreateClass(classProperties);

            const int numberOfInstancesToPool = 20;

            var methodTag = codeContent.GetTag("Methods")[0];

            var methodBlock = GetAllFactoryMethods(factoryClassName, baseEntityName, numberOfInstancesToPool,
                                                   ShouldPoolObjects);

            methodTag.InsertBlock(methodBlock);

            var codeBlock = new CodeBlockBase(null);

            codeBlock.Line("static string mContentManagerName;");
            codeBlock.Line("static System.Collections.Generic.List<System.Collections.IList> ListsToAddTo = new System.Collections.Generic.List<System.Collections.IList>();");

            codeBlock.Line(string.Format("static PoolList<{0}> mPool = new PoolList<{0}>();", entityClassName));

            codeBlock.Line(string.Format("public static Action<{0}> EntitySpawned;", entityClassName));

            ImplementIEntityFactory(factoryClassName, codeBlock);

            #region Self and mSelf
            codeBlock.Line("static " + factoryClassName + " mSelf;");

            var selfProperty = codeBlock.Property("public static " + factoryClassName, "Self");
            var selfGet      = selfProperty.Get();
            selfGet.If("mSelf == null")
            .Line("mSelf = new " + entityClassName + "Factory" + "();");
            selfGet.Line("return mSelf;");
            #endregion

            ((codeContent.BodyCodeLines.Last() as CodeBlockBase).BodyCodeLines.Last() as CodeBlockBase).InsertBlock(codeBlock);
            return(codeContent.ToString());
        }