Skip to content

Commit a788c0d

Browse files
committed
Added Unity menu item to generate with CLI
1 parent 85f9386 commit a788c0d

File tree

2 files changed

+82
-0
lines changed

2 files changed

+82
-0
lines changed

Addons/Entitas.CodeGeneration.CodeGenerator/Entitas.CodeGeneration.CodeGenerator/CodeGenerator/CodeGeneratorConfig.cs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ namespace Entitas.CodeGeneration.CodeGenerator {
66
public class CodeGeneratorConfig : AbstractConfigurableConfig {
77

88
const string SEARCH_PATHS_KEY = "Entitas.CodeGeneration.CodeGenerator.SearchPaths";
9+
const string MONO_KEY = "Entitas.CodeGeneration.CodeGenerator.Mono";
10+
const string CLI_KEY = "Entitas.CodeGeneration.CodeGenerator.CLI";
911
const string PLUGINS_PATHS_KEY = "Entitas.CodeGeneration.CodeGenerator.Plugins";
1012

1113
const string DATA_PROVIDERS_KEY = "Entitas.CodeGeneration.CodeGenerator.DataProviders";
@@ -23,6 +25,8 @@ public override Dictionary<string, string> defaultProperties {
2325
"/Applications/Unity/Unity.app/Contents/Mono/lib/mono/unity, " +
2426
"/Applications/Unity/Unity.app/Contents/UnityExtensions/Unity/GUISystem" },
2527

28+
{ MONO_KEY, "/Applications/Unity/Unity.app/Contents/MonoBleedingEdge/bin/mono" },
29+
{ CLI_KEY, "CodeGenerator/entitas.exe" },
2630
{ PLUGINS_PATHS_KEY, "Entitas.CodeGeneration.Plugins, " +
2731
"Entitas.VisualDebugging.CodeGeneration.Plugins" },
2832

@@ -38,6 +42,16 @@ public string[] searchPaths {
3842
set { _preferences[SEARCH_PATHS_KEY] = value.ToCSV(); }
3943
}
4044

45+
public string mono {
46+
get { return _preferences[MONO_KEY]; }
47+
set { _preferences[MONO_KEY] = value; }
48+
}
49+
50+
public string cli {
51+
get { return _preferences[CLI_KEY]; }
52+
set { _preferences[CLI_KEY] = value; }
53+
}
54+
4155
public string[] plugins {
4256
get { return _preferences[PLUGINS_PATHS_KEY].ArrayFromCSV(); }
4357
set { _preferences[PLUGINS_PATHS_KEY] = value.ToCSV(); }

Addons/Entitas.CodeGeneration.Unity.Editor/Entitas.CodeGeneration.Unity.Editor/Editor/UnityCodeGenerator.cs

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System;
2+
using System.IO;
23
using System.Linq;
34
using Entitas.CodeGeneration.CodeGenerator;
45
using Entitas.Utils;
@@ -74,5 +75,72 @@ static void checkCanGenerate() {
7475
Debug.Log("There are compile errors! Generated code will be based on last compiled executable.");
7576
}
7677
}
78+
79+
[MenuItem("Tools/Entitas/Generate with CLI %&g", false, 101)]
80+
public static void GenerateWithCLI() {
81+
Debug.Log("Generating...");
82+
83+
Preferences.sharedInstance.Refresh();
84+
var config = new CodeGeneratorConfig();
85+
config.Configure(Preferences.sharedInstance);
86+
87+
var projectRoot = Application.dataPath.Substring(0, Application.dataPath.Length - "/Assets".Length);
88+
var cli = Path.Combine(projectRoot, config.cli);
89+
if (!File.Exists(cli)) {
90+
Debug.Log(cli + " does not exist!");
91+
return;
92+
}
93+
94+
if (Application.platform == RuntimePlatform.WindowsEditor) {
95+
runCommand(cli, "gen", projectRoot);
96+
} else {
97+
runCommand(config.mono, cli + " gen", projectRoot);
98+
}
99+
100+
Debug.Log("Generating done.");
101+
102+
AssetDatabase.Refresh();
103+
}
104+
105+
static void runCommand(string fileName, string arguments, string workingDirectory) {
106+
var startInfo = createStartInfo(workingDirectory);
107+
startInfo.FileName = fileName;
108+
startInfo.Arguments = arguments;
109+
startProcess(startInfo);
110+
}
111+
112+
static System.Diagnostics.ProcessStartInfo createStartInfo(string workingDirectory) {
113+
var startInfo = new System.Diagnostics.ProcessStartInfo();
114+
startInfo.WorkingDirectory = workingDirectory;
115+
startInfo.RedirectStandardOutput = true;
116+
startInfo.RedirectStandardError = true;
117+
startInfo.UseShellExecute = false;
118+
startInfo.CreateNoWindow = true;
119+
return startInfo;
120+
}
121+
122+
static void startProcess(System.Diagnostics.ProcessStartInfo startInfo) {
123+
var process = new System.Diagnostics.Process();
124+
process.StartInfo = startInfo;
125+
process.OutputDataReceived += OnDataReceivedEventHandler;
126+
process.ErrorDataReceived += OnErrorReceivedEventHandler;
127+
process.Start();
128+
process.BeginErrorReadLine();
129+
process.BeginOutputReadLine();
130+
process.WaitForExit();
131+
process.Close();
132+
}
133+
134+
static void OnDataReceivedEventHandler(object sender, System.Diagnostics.DataReceivedEventArgs e) {
135+
if (e.Data != null) {
136+
UnityEngine.Debug.Log(e.Data);
137+
}
138+
}
139+
140+
static void OnErrorReceivedEventHandler(object sender, System.Diagnostics.DataReceivedEventArgs e) {
141+
if (e.Data != null) {
142+
UnityEngine.Debug.Log(e.Data);
143+
}
144+
}
77145
}
78146
}

0 commit comments

Comments
 (0)