public static List <LinkedRenderer> LoadLinkedRenderers(List <string> filepaths) { CompilerResults compilationResults = null; List <LinkedRenderer> validRenders = new List <LinkedRenderer>(); CodeDomProvider codeProvider = GetCodeDomProvider(); try { CompilerParameters parms = GetParameters("LinkedRenders.dll"); compilationResults = codeProvider.CompileAssemblyFromFile(parms, filepaths.ToArray()); Assembly assembly = compilationResults.CompiledAssembly; foreach (var type in assembly.ExportedTypes) { var rawResult = assembly.CreateInstance(type.ToString()); if (rawResult is LinkedRenderer) { LinkedRenderer result = (LinkedRenderer)rawResult; if (result != null) { validRenders.Add(result); } } } codeProvider.Dispose(); return(validRenders); } catch (Exception ex) { InterpretException(ex, compilationResults, codeProvider); codeProvider.Dispose(); return(validRenders); } }
public static void DrawLinked(DevicePanel d, Classes.Scene.EditorEntity _entity) { if (ProgramBase.IsDebug) { Call(); } else { try { Call(); } catch (Exception ex) { string note = "This object will no longer render it's linked render until reloaded!"; string error = string.Format("Linked Entity Rendering Error on Object {0}:{1}{2}{1}{3}{1}{1}{4})", _entity.Object.Name.Name, Environment.NewLine, ex.Message, ex.StackTrace, note); MessageBox.Show(error); _entity.DoesLinkedRenderHaveErrors = true; } } void Call() { if (!_entity.DoesLinkedRenderHaveErrors) { var structure = new Structures.LinkedEntityRenderProp(d, _entity); if (_entity.CurrentLinkedRender == null) { LinkedRenderer renderer = LinkedEntityRenderers.Where(t => t.GetObjectName() == _entity.Object.Name.Name.ToString()).FirstOrDefault(); _entity.CurrentLinkedRender = renderer; } if (_entity.CurrentLinkedRender != null) { _entity.CurrentLinkedRender.Draw(structure); } } } }