コード例 #1
0
        public static SceneFragment Load(string filename, Scene scene)
        {
            var json    = JsonUtilities.Load("Fragments/" + filename);
            var jStatic = json["Static"];

            // All fragments are required to specify a static mesh.
            Debug.Assert(jStatic != null, $"Fragment {filename} missing static block.");

            var jMap     = jStatic["Map"];
            var jPhysics = jStatic["Physics"];
            var jOrigin  = json["Origin"];
            var jSpawn   = json["Spawn"];

            Debug.Assert(jMap != null, $"Fragment {filename} missing static map.");
            Debug.Assert(jPhysics != null, $"Fragment {filename} missing static physics.");
            Debug.Assert(jOrigin != null, $"Fragment {filename} missing origin.");
            Debug.Assert(jSpawn != null, $"Fragment {filename} missing player spawn point.");

            var origin = Utilities.ParseVec3(jOrigin.Value <string>());
            var model  = new Model(jMap.Value <string>());

            model.Position = origin;

            var shape = TriangleMeshLoader.Load(jPhysics.Value <string>());
            var body  = new RigidBody(shape, RigidBodyTypes.Static);

            body.Position = origin.ToJVector();

            var material = body.Material;

            material.KineticFriction = 0;
            material.StaticFriction  = 0;

            var fragment = new SceneFragment(filename);

            fragment.Entities = LoadEntities(json, scene, origin);
            fragment.MapModel = model;
            fragment.MapBody  = body;
            fragment.Origin   = origin;
            fragment.Spawn    = Utilities.ParseVec3(jSpawn.Value <string>());

            return(fragment);
        }