internal static void LoadZoneFile(string path, EngineCore engine) { using (var zip = ZipFile.OpenRead(path)) { using (var ms = new MemoryStream()) { using (var temp = zip.GetEntry("main.oes")?.Open()) temp?.CopyTo(ms); ms.Position = 0; var zone = OESFile.Read <OESZone>(ms); WriteLine($"Loading {zone.Name}"); engine.Add(FromMeshes(FromSkin(zone.Find <OESSkin>().First(), zip), new[] { Matrix4x4.Identity }, zone.Find <OESStaticMesh>())); var objInstances = zone.Find <OESObject>().ToDictionary(x => x, x => new List <Matrix4x4>()); zone.Find <OESInstance>().ForEach(inst => { objInstances[inst.Object].Add(Matrix4x4.CreateScale(inst.Scale) * Matrix4x4.CreateFromQuaternion(inst.Rotation) * Matrix4x4.CreateTranslation(inst.Position)); }); foreach (var(obj, instances) in objInstances) { engine.Add(FromMeshes( FromSkin(obj.Find <OESSkin>().First(), zip), instances.ToArray(), obj.Find <OESStaticMesh>() )); } zone.Find <OESLight>().ForEach(light => engine.AddLight(light.Position, light.Radius, light.Attenuation, light.Color)); } } }
public void LoadCharacter(string filename, string name) { var model = LastModelLoaded = Loader.LoadCharacter($"../ConverterApp/{filename}_oes.zip", name); var instance = new AniModelInstance(model) { Animation = "C05", Position = vec3(-153, 149, 80) }; Engine.Add(instance); }
static void Main(string[] args) { var engine = new EngineCore(); var zone = new ZoneReader($"../converter/{args[0]}.zip"); var materials = zone.Materials.Select(mat => new Material((MaterialFlag)mat.Flags, mat.Param, mat.Textures.ToArray())).ToArray(); var models = zone.Objects.Select(zobj => BuildModel(zobj, materials)).ToList(); engine.Add(models[0]); zone.Placeables.ForEach(p => { var model = models[p.ObjId].Clone(); model.SetProperties(p.Position, p.Scale, p.Rotation); engine.Add(model); }); /*var smesh = Mesh.Sphere(null); * zone.Lights.ForEach(p => { * WriteLine($"Light {p.Flags:X}"); * var model = new Model(); * model.Add(smesh); * model.SetProperties(p.Position, new Vec3(p.Radius / p.Attenuation * 10), Vec3.Zero); * engine.Add(model); * });*/ engine.Run(); }