/// <summary> /// Carga dinamicamente todas las dll de ejemplos de la carpeta de ejemplos /// </summary> /// <param name="exampleDir"></param> /// <returns></returns> public List <TgcExample> loadExamples(string exampleDir) { //Buscar todas las dll que esten en el directorio de ejemplos, evitando las creadas de DEBUG Y BIN por parte del IDE List <string> exampleFiles = getExampleFiles(exampleDir, DIR_SKIP_LISP); List <TgcExample> examples = new List <TgcExample>(); foreach (string file in exampleFiles) { try { Assembly assembly = Assembly.LoadFile(file); foreach (Type type in assembly.GetTypes()) { if (!type.IsClass || type.IsNotPublic || type.IsAbstract) { continue; } /* * Type[] interfaces = type.GetInterfaces(); * if (((IList)interfaces).Contains(typeof(TgcExample))) * { */ if (type.BaseType.Equals(typeof(TgcExample))) { object obj = Activator.CreateInstance(type); TgcExample example = (TgcExample)obj; examples.Add(example); //cargar path del ejemplo example.setExampleDir(file.Substring(0, file.LastIndexOf("\\") + 1)); } } } catch (Exception e) { GuiController.Instance.Logger.logError("No se pudo cargar la dll: " + file, e); } } return(examples); }
/// <summary> /// Deja de ejecutar el ejemplo actual /// </summary> internal void stopCurrentExample() { if (currentExample != null) { currentExample.close(); tgcD3dDevice.resetWorldTransofrm(); Logger.log("Ejemplo " + currentExample.getName() + " terminado"); currentExample = null; elapsedTime = -1; if (FullScreenEnable && fullScreenPanel.Visible) { closeFullScreenPanel(); } } }
/// <summary> /// Arranca a ejecutar un ejemplo. /// Para el ejemplo anterior, si hay alguno. /// </summary> /// <param name="example"></param> internal void executeExample(TgcExample example) { stopCurrentExample(); userVars.clearVars(); modifiers.clear(); resetDefaultConfig(); fpsCamera.resetValues(); rotCamera.resetValues(); thirdPersonCamera.resetValues(); //Ejecutar init try { example.init(); //Ver si abrimos una ventana para modo FullScreen if (FullScreenEnable) { mainForm.removePanel3dFromMainForm(); fullScreenPanel.Controls.Add(panel3d); fullScreenPanel.Show(mainForm); } this.currentExample = example; panel3d.Focus(); mainForm.setCurrentExampleStatus("Ejemplo actual: " + example.getName() ); Logger.log("Ejecutando ejemplo: " + example.getName(), Color.Blue); } catch (Exception e) { Logger.logError("Error en init() de ejemplo: " + example.getName(), e); } }