public override void Initialize(Core.Architecture.Scene scene) { // Setup materials from globals this.adhocMaterials.Clear(); this.materialList = world.Components <MaterialListComponent>().FirstOrDefault(); Debug.Assert(this.materialList != null); var allMaterials = this.materialList.GetPhysicsMaterials(); this.globalMaterials = new Material[allMaterials.Length + 1]; this.globalMaterials[0] = this.defaultMat; Debug.Assert(allMaterials.Length > allMaterials.Max(m => m.Id)); foreach (var mat in allMaterials) { this.GetOrCreateMaterial(mat.Id); } // Cook terrain and static geom meshes var terrains = world.Components <StaticTerrainComponent>(); foreach (var terrain in terrains) { AddTerrain(terrain); } var sceneries = world.Components <StaticGeometryComponent>(); foreach (var scenery in sceneries) { AddStaticGeom(scenery); } var rigidBodies = this.world.Components <RigidBodyComponent>(); foreach (var body in rigidBodies) { AddRigidBodyComponent(body); } var movers = this.world.Components <MoverComponent>(); foreach (var mover in movers) { AddCharacterController(mover); } var triggers = this.world.Components <TriggerGeometryComponent>(); foreach (var trigger in triggers) { AddTrigger(trigger); } scene.OnEntityAdd += this.AddEntity; scene.OnEntityRemove += this.RemoveEntity; }
public Entity FromGlobals() { var globalEntity = new GlobalSettings(); globalEntity.FriendlyName = "Globals"; var globalMaterials = new MaterialListComponent(globalEntity); for (var i = 0; i < this.Map.Globals.MaterialDefinitions.Length; i++) { var def = this.Map.Globals.MaterialDefinitions[i]; var mat = new PhysicsMaterial(i, def.Friction, def.Friction, def.Restitution); globalMaterials.AddPhysicsMaterial(mat); } globalEntity.SetComponents(new Component[] { globalMaterials }); return(globalEntity); }