public virtual object CreateInstance(Type NativeClass = null) { //If we have a parent script and a native class, instantiate the native class and apply all parent scripts. //If we have a Parent Script and No Native Class, walk up the chain until we find a Native Class (if no class, throw exception) //If we have No Parent Script and a Native Class, create the native class and apply this script. //If we have Neither Parent Script or Native Class, throw an exception. //Find the parent native class Type FoundNativeClass = FindNativeClass() ?? NativeClass; if (FoundNativeClass == null) { throw new MissingRequiredScriptFieldException(string.Format("{0} Has no {1} in any search path", ResourcePtr.ToString(), NativeClassName)); } object o = Activator.CreateInstance(FoundNativeClass); if (o is IPostConstruct) { (o as IPostConstruct).PostConstruct(); } ApplyToObject(o); return(o); }
public override object GetResource(ResourcePtr ptr, Stream stream) { using (TextReader Reader = new StreamReader(stream)) using (JsonReader JReader = new JsonTextReader(Reader)) { MaterialScript ms = Activator.CreateInstance <MaterialScript>(); ms.JObject = JObject.Load(JReader); //Validate that we have required shaders if (ms.FragmentShader == null) { throw new WatertightLoadingFailureException(string.Format("Error loading material: {0}, missing $FragmentShader", ptr.ToString())); } if (ms.VertexShader == null) { throw new WatertightLoadingFailureException(string.Format("Error loading material: {0}, missing $VertexShader", ptr.ToString())); } Material Mat = IEngine.Instance.Renderer.MaterialFactory.Create(ms); //Load the shaders Mat._Shaders[Shader.Stage.Fragment] = GetShader(ms.FragmentShader, Shader.Stage.Fragment); Mat._Shaders[Shader.Stage.Vertex] = GetShader(ms.VertexShader, Shader.Stage.Vertex); Mat.PostLoad(); return(Mat); } }