private void RunScript(string file) { if (script != null) { script.Stop(); } script = LunaScript.CompileScript(file); if (script != null) { script.Start(luna); } }
public static LunaScript CompileScript(string fileName) { string code; try { code = File.ReadAllText(fileName); } catch { MessageBox.Show("Błąd wczytywania pliku", "Błąd wczytywania pliku", MessageBoxButtons.OK, MessageBoxIcon.Error); return(null); } Microsoft.CSharp.CSharpCodeProvider csProvider = new Microsoft.CSharp.CSharpCodeProvider(); CompilerParameters options = new CompilerParameters() { GenerateExecutable = false, GenerateInMemory = true, }; options.ReferencedAssemblies.Add(Assembly.GetExecutingAssembly().Location); options.ReferencedAssemblies.Add("System.dll"); CompilerResults result; result = csProvider.CompileAssemblyFromSource(options, code); if (result.Errors.HasErrors) { StringBuilder builder = new StringBuilder(); foreach (var err in result.Errors) { builder.AppendLine(err.ToString()); } MessageBox.Show(builder.ToString(), "Błędy kompilacji", MessageBoxButtons.OK, MessageBoxIcon.Error); return(null); } if (result.Errors.HasWarnings) { StringBuilder builder = new StringBuilder(); foreach (var err in result.Errors) { builder.AppendLine(err.ToString()); } MessageBox.Show(builder.ToString(), "Ostrzeżenia kompilacji", MessageBoxButtons.OK, MessageBoxIcon.Warning); } foreach (Type type in result.CompiledAssembly.GetExportedTypes()) { if (typeof(LunaScript).IsAssignableFrom(type.BaseType)) { ConstructorInfo constructor = type.GetConstructor(System.Type.EmptyTypes); if (constructor != null && constructor.IsPublic) { LunaScript scriptObject = constructor.Invoke(null) as LunaScript; if (scriptObject != null) { return(scriptObject); } else { MessageBox.Show("Wystąpił błąd.", "Błąd", MessageBoxButtons.OK, MessageBoxIcon.Error); } } else { MessageBox.Show("Nie znaleziono konstruktora.", "Błąd", MessageBoxButtons.OK, MessageBoxIcon.Error); } } } MessageBox.Show("Nie znaleziono klasy implementującej interfejs LunaScript.\n" + @"namespace Luna { public interface LunaScript { void Run(double[] leftPixels, double[] rightPixels, ref double leftWhite, ref double rightWhite); } }", "Błąd", MessageBoxButtons.OK, MessageBoxIcon.Error); return(null); }
private void switchTo(int index) { switch (previousTabIndex) { case 0: script.Stop(); break; case 1: script.Stop(); break; case 2: previewControl1.StopRenderLoop(); break; case 3: script.Stop(); break; case 4: script.Stop(); break; case 5: script.Stop(); break; case 6: script.Stop(); break; } previousTabIndex = index; switch (previousTabIndex) { case 0: script = new SettingsScript(); script.Start(luna); break; case 1: script = new LightScript(); script.Start(luna); break; case 2: previewControl1.StartRenderLoop(); break; case 4: script = new SoundScript(); (script as SoundScript).spectrumViz = spectrumVisualizerControl1; script.Start(luna); break; case 5: script = new FlameScript(); script.Start(luna); break; case 6: script = new PlasmaScript(); script.Start(luna); break; } }
private void StopButton_Click(object sender, EventArgs e) { script.Stop(); script = null; }
private void RunScript(string file) { if (script != null) { script.Stop(); } script = LunaScript.CompileScript(file); if (script != null) { script.Start(luna); } }
private void switchTo(int index) { switch (previousTabIndex) { case 0: script.Stop(); break; case 1: script.Stop(); break; case 2: previewControl1.StopRenderLoop(); break; case 3: script.Stop(); break; case 4: script.Stop(); break; case 5: script.Stop(); break; case 6: script.Stop(); break; } previousTabIndex = index; switch (previousTabIndex) { case 0: script = new SettingsScript(); script.Start(luna); break; case 1: script = new LightScript(); script.Start(luna); break; case 2: previewControl1.StartRenderLoop(); break; case 4: script = new SoundScript(); (script as SoundScript).spectrumViz = spectrumVisualizerControl1; script.Start(luna); break; case 5: script = new FlameScript(); script.Start(luna); break; case 6: script = new PlasmaScript(); script.Start(luna); break; } }
private void StopButton_Click(object sender, EventArgs e) { script.Stop(); script = null; }