Esempio n. 1
0
        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));
                }
            }
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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();
        }