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()); } } } }
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" ); }
internal void GenerateFor(EntitySave entity, PlatformerEntityViewModel viewModel) { string contents = GetCsvContents(entity, viewModel); string fileName = CsvFileFor(entity); GlueCommands.Self.TryMultipleTimes(() => { FileManager.SaveText(contents, fileName); }); }
public MainControl GetControl() { if (mainControl == null) { viewModel = new PlatformerEntityViewModel(); viewModel.PropertyChanged += HandleViewModelPropertyChange; mainControl = new MainControl(); mainControl.DataContext = viewModel; } return(mainControl); }