public override object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            var components     = (IEnumerable <EntityComponent>)value;
            var componentTypes = components.Select(x => x.GetType());
            var compToUse      = StrideDefaultAssetsPlugin.GetHighestOrderComponent(componentTypes);

            return(TypeToResource.FetchResourceFromType(compToUse, true));
        }
Example #2
0
        private static PackageSession GenerateSample(UDirectory outputPath, Guid templateGuid, string sampleName, LoggerResult logger)
        {
            // Make output path absolute
            if (!outputPath.IsAbsolute)
            {
                outputPath = UPath.Combine(Environment.CurrentDirectory, outputPath);
            }

            Console.WriteLine(@"Bootstrapping: " + sampleName);

            var session   = new PackageSession();
            var generator = TemplateSampleGenerator.Default;

            // Ensure progress is shown while it is happening.
            logger.MessageLogged += (sender, eventArgs) => Console.WriteLine(eventArgs.Message.Text);

            var parameters = new SessionTemplateGeneratorParameters {
                Session = session
            };

            parameters.Unattended = true;
            TemplateSampleGenerator.SetParameters(
                parameters,
                AssetRegistry.SupportedPlatforms.Where(x => x.Type == Core.PlatformType.Windows).Select(x => new SelectedSolutionPlatform(x, x.Templates.FirstOrDefault())).ToList(),
                addGamesTesting: true);

            session.SolutionPath = UPath.Combine <UFile>(outputPath, sampleName + ".sln");

            // Properly delete previous version
            if (Directory.Exists(outputPath))
            {
                try
                {
                    Directory.Delete(outputPath, true);
                }
                catch (Exception)
                {
                    logger.Warning($"Unable to delete directory [{outputPath}]");
                }
            }

            // Load templates
            StrideDefaultAssetsPlugin.LoadDefaultTemplates();
            var strideTemplates = TemplateManager.FindTemplates(session);

            parameters.Description     = strideTemplates.First(x => x.Id == templateGuid);
            parameters.Name            = sampleName;
            parameters.Namespace       = sampleName;
            parameters.OutputDirectory = outputPath;
            parameters.Logger          = logger;

            if (!generator.PrepareForRun(parameters).Result)
            {
                logger.Error("PrepareForRun returned false for the TemplateSampleGenerator");
            }

            if (!generator.Run(parameters))
            {
                logger.Error("Run returned false for the TemplateSampleGenerator");
            }

            var updaterTemplate = strideTemplates.First(x => x.FullPath.ToString().EndsWith("UpdatePlatforms.sdtpl"));

            parameters.Description = updaterTemplate;

            if (logger.HasErrors)
            {
                throw new InvalidOperationException($"Error generating sample {sampleName} from template:\r\n{logger.ToText()}");
            }

            return(session);
        }