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); }