public static SceneObject FromFile(string FilePath, Scene CurrentScene) { if (!File.Exists(FilePath)) { return(null); } SceneObject New = null; if (FilePath.ToUpper().EndsWith(".OBJ") && CurrentScene.Type == SceneType.Scene3D) { OBJContainer OBJ = new OBJContainer(); OBJ.Load(FilePath, null); if (OBJ.Geometries[0].Normals.Count == 0) { OBJ.RecalculateNormals(); } OBJ.Repack(); Actor NewActor = new Actor(OBJ, Path.GetFileNameWithoutExtension(FilePath)); NewActor.Scale = new Vertex(0.001f, 0.001f, 0.001f); New = new DrawnSceneObject(NewActor.Name, NewActor); New.ParentScene = CurrentScene; } return(New); }
protected override object LoadObject(string DirPath, Type FileType) { if (FileType == null) { object[] Config = ReadConfig(DirPath + "data.conf"); string FileTypeString = Config[1] as string; Assembly ASM = typeof(Game).Assembly; FileType = ASM.GetType(FileTypeString); } XmlSerializer Deserializer = new XmlSerializer(FileType); TextReader Reader = new StreamReader(DirPath + "data.xml"); object CurrentObject = Deserializer.Deserialize(Reader); Reader.Close(); List <string> Files = new List <string>(Directory.EnumerateFiles(DirPath)); List <string> Directories = new List <string>(Directory.EnumerateDirectories(DirPath)); if (FileType == typeof(Actor)) { Actor Current = CurrentObject as Actor; for (int i = 0; Files.Contains(DirPath + "Geometries_" + i + ".obj"); i++) { OBJContainer OBJ = new OBJContainer(); OBJ.Load(DirPath + "Geometries_" + i + ".obj", null); for (int j = 0; j < OBJ.Geometries.Count; j++) { Current.Geometries.Add(OBJ.Geometries[j]); } } } if (FileType == typeof(SpriteSet)) { SpriteSet Current = CurrentObject as SpriteSet; for (int i = 0; Files.Contains(DirPath + "Sprite_" + i + ".png"); i++) { Bitmap SpriteImage = null; using (Image Img = Image.FromFile(DirPath + "Sprite_" + i + ".png")) { SpriteImage = new Bitmap(Img); } Current.Sprite.Add(SpriteImage); } } if (FileType == typeof(Sprite)) { Sprite Current = CurrentObject as Sprite; for (int i = 0; Directories.Contains(DirPath + "SpriteSets_" + i); i++) { SpriteSet Child = (SpriteSet)LoadObject(DirPath + "SpriteSets_" + i + "/", typeof(SpriteSet)); Current.SpriteSets.Add(Child); } for (int i = 0; Directories.Contains(DirPath + "SubSprites_" + i); i++) { Sprite Child = (Sprite)LoadObject(DirPath + "SubSprites_" + i + "/", typeof(Sprite)); Current.SubSprites.Add(Child); } } if (FileType == typeof(DrawnSceneObject)) { DrawnSceneObject Current = CurrentObject as DrawnSceneObject; Current.Visual = (DrawObject)LoadObject(DirPath + "Visual/", null); } if (FileType == typeof(Scene2D) || FileType == typeof(Scene3D)) { Scene Current = CurrentObject as Scene; for (int i = 0; Directories.Contains(DirPath + "Objects_" + i); i++) { SceneObject Child = (SceneObject)LoadObject(DirPath + "Objects_" + i + "/", null); Current.Objects.Add(Child); } } if (FileType == typeof(Game)) { Game Current = CurrentObject as Game; for (int i = 0; Directories.Contains(DirPath + "Scenes_" + i); i++) { Scene Child = (Scene)LoadObject(DirPath + "Scenes_" + i + "/", null); Current.Scenes.Add(Child); } } return(CurrentObject); }