2 using System.Collections.Generic;
6 namespace Entitas.CodeGenerator {
10 public const string DEFAULT_POOL_NAME =
"Pool";
11 public const string COMPONENT_SUFFIX =
"Component";
13 public const string DEFAULT_COMPONENT_LOOKUP_TAG =
"ComponentIds";
14 public const string AUTO_GENERATED_HEADER_FORMAT =
@"//------------------------------------------------------------------------------ 16 // This code was generated by {0}. 18 // Changes to this file may cause incorrect behavior and will be lost if 19 // the code is regenerated. 21 //------------------------------------------------------------------------------ 25 directory = GetSafeDir(directory);
28 var generatedFiles =
new List<CodeGenFile>();
29 var componentInfos = provider.componentInfos;
32 var files = generator.Generate(provider.poolNames);
33 generatedFiles.AddRange(files);
34 writeFiles(directory, files);
38 var files = generator.Generate(componentInfos);
39 generatedFiles.AddRange(files);
40 writeFiles(directory, files);
44 var files = generator.Generate(provider.blueprintNames);
45 generatedFiles.AddRange(files);
46 writeFiles(directory, files);
49 return generatedFiles.ToArray();
52 public static string GetSafeDir(
string directory) {
53 if(!directory.EndsWith(
"/", StringComparison.Ordinal)) {
56 if(!directory.EndsWith(
"Generated/", StringComparison.Ordinal)) {
57 directory +=
"Generated/";
62 public static void CleanDir(
string directory) {
63 directory = GetSafeDir(directory);
64 if(Directory.Exists(directory)) {
65 var files =
new DirectoryInfo(directory).GetFiles(
"*.cs", SearchOption.AllDirectories);
66 foreach(var file
in files) {
68 File.Delete(file.FullName);
70 Console.WriteLine(
"Could not delete file " + file);
74 Directory.CreateDirectory(directory);
78 static void writeFiles(
string directory,
CodeGenFile[] files) {
79 if(!Directory.Exists(directory)) {
80 Directory.CreateDirectory(directory);
82 foreach(var file
in files) {
83 var fileName = directory + file.fileName +
".cs";
84 var fileContent = file.fileContent.Replace(
"\n", Environment.NewLine);
85 var header =
string.Format(AUTO_GENERATED_HEADER_FORMAT, file.generatorName);
86 File.WriteAllText(fileName, header + fileContent);
93 public static bool IsDefaultPoolName(
this string poolName) {
97 public static string PoolPrefix(
this string poolName) {
98 return poolName.IsDefaultPoolName() ?
string.Empty : poolName;
101 public static string[] ComponentLookupTags(
this ComponentInfo componentInfo) {
102 return componentInfo.pools
103 .Select(poolName => poolName.PoolPrefix() +
CodeGenerator.DEFAULT_COMPONENT_LOOKUP_TAG)
107 public static string UppercaseFirst(
this string str) {
108 return char.ToUpper(str[0]) + str.Substring(1);
111 public static string LowercaseFirst(
this string str) {
112 return char.ToLower(str[0]) + str.Substring(1);
115 public static string ToUnixLineEndings(
this string str) {
116 return str.Replace(
"\r\n",
"\n").Replace(
"\r",
"\n");