Exemple #1
0
        private static void DetermineWhatToGenerate(string propertyName, PlatformerEntityViewModel viewModel,
                                                    out bool shouldGenerateCsv, out bool shouldGenerateEntity, out bool shouldAddMovementVariables)
        {
            var entity = GlueState.Self.CurrentEntitySave;

            shouldGenerateCsv          = false;
            shouldGenerateEntity       = false;
            shouldAddMovementVariables = false;
            if (entity != null)
            {
                switch (propertyName)
                {
                case nameof(PlatformerEntityViewModel.IsPlatformer):
                    entity.Properties.SetValue(propertyName, viewModel.IsPlatformer);
                    // Don't generate a CSV if it's not a platformer
                    shouldGenerateCsv          = viewModel.IsPlatformer;
                    shouldAddMovementVariables = viewModel.IsPlatformer;
                    shouldGenerateEntity       = true;
                    break;

                case nameof(PlatformerEntityViewModel.PlatformerValues):
                    shouldGenerateCsv = true;
                    // I don't think we need this...yet
                    shouldGenerateEntity       = false;
                    shouldAddMovementVariables = false;
                    break;
                }
            }
        }
        private string GetCsvContents(EntitySave entity, PlatformerEntityViewModel viewModel)
        {
            List <PlatformerValues> values = new List <PlatformerValues>();

            foreach (var valuesViewModel in viewModel.PlatformerValues)
            {
                values.Add(valuesViewModel.ToValues());
            }

            RuntimeCsvRepresentation rcr = RuntimeCsvRepresentation.FromList(values);

            var nameHeader = rcr.Headers[0];

            nameHeader.IsRequired = true;
            // Setting it to IsRequired is not sufficient, need to
            // modify the "Original Text" prop
            // chop off the closing quote, and add ", required)"
            nameHeader.OriginalText = nameHeader.OriginalText.Substring(0, nameHeader.OriginalText.Length - 1) + ", required)";

            rcr.Headers[0] = nameHeader;

            var toReturn = rcr.GenerateCsvString();

            return(toReturn);
        }
        internal void GenerateFor(EntitySave entity, PlatformerEntityViewModel viewModel)
        {
            string contents = GetCsvContents(entity, viewModel);

            string fileName = CsvFileFor(entity);

            int  numberOfTimesToTry = 4;
            int  numberOfFailures   = 0;
            bool succeeded          = false;

            while (numberOfFailures < numberOfTimesToTry)
            {
                try
                {
                    FileManager.SaveText(contents, fileName);

                    succeeded = true;
                    break;
                }
                catch (Exception e)
                {
                    numberOfFailures++;
                    if (numberOfFailures == numberOfTimesToTry)
                    {
                        PluginManager.ReceiveError(e.ToString());
                    }
                }
            }
        }
Exemple #4
0
        private static void GenerateCsv(EntitySave entity, PlatformerEntityViewModel viewModel)
        {
            TaskManager.Self.AddAsyncTask(
                () => CsvGenerator.Self.GenerateFor(entity, viewModel),
                "Generating Platformer CSV for " + entity.Name);


            TaskManager.Self.AddAsyncTask(
                () =>
            {
                string rfsName      = entity.Name.Replace("\\", "/") + "/" + CsvGenerator.RelativeCsvFile;
                bool isAlreadyAdded = entity.ReferencedFiles.FirstOrDefault(item => item.Name == rfsName) != null;

                if (!isAlreadyAdded)
                {
                    GlueCommands.Self.GluxCommands.AddSingleFileTo(
                        CsvGenerator.Self.CsvFileFor(entity),
                        CsvGenerator.RelativeCsvFile,
                        "",
                        null,
                        false,
                        null,
                        entity,
                        null
                        );
                }

                var rfs = entity.ReferencedFiles.FirstOrDefault(item => item.Name == rfsName);

                if (rfs != null && rfs.CreatesDictionary == false)
                {
                    rfs.CreatesDictionary = true;
                    GlueCommands.Self.GluxCommands.SaveGlux();
                    GlueCommands.Self.GenerateCodeCommands.GenerateElementCode(entity);
                }

                const string customClassName = "PlatformerValues";
                if (GlueState.Self.CurrentGlueProject.CustomClasses.Any(item => item.Name == customClassName) == false)
                {
                    CustomClassSave throwaway;
                    GlueCommands.Self.GluxCommands.AddNewCustomClass(customClassName, out throwaway);
                }

                var customClass = GlueState.Self.CurrentGlueProject.CustomClasses
                                  .FirstOrDefault(item => item.Name == customClassName);

                if (customClass != null && customClass.CsvFilesUsingThis.Contains(rfs.Name) == false)
                {
                    if (rfs != null)
                    {
                        Glue.CreatedClass.CustomClassController.Self.SetCsvRfsToUseCustomClass(rfs, customClass, force: true);
                    }
                }
            },
                "Adding csv to platformer entity"
                );
        }
Exemple #5
0
        internal void GenerateFor(EntitySave entity, PlatformerEntityViewModel viewModel)
        {
            string contents = GetCsvContents(entity, viewModel);

            string fileName = CsvFileFor(entity);

            GlueCommands.Self.TryMultipleTimes(() =>
            {
                FileManager.SaveText(contents, fileName);
            });
        }
Exemple #6
0
        public MainControl GetControl()
        {
            if (mainControl == null)
            {
                viewModel = new PlatformerEntityViewModel();
                viewModel.PropertyChanged += HandleViewModelPropertyChange;
                mainControl = new MainControl();

                mainControl.DataContext = viewModel;
            }

            return(mainControl);
        }