/// <summary> /// Get a physics scene for the given physics engine and mesher. /// </summary> /// <param name = "physEngineName"></param> /// <param name = "meshEngineName"></param> /// <param name = "config"></param> /// <returns></returns> public PhysicsScene GetPhysicsScene(string physEngineName, string meshEngineName, IConfigSource config, RegionInfo region, IRegistryCore registry) { if (String.IsNullOrEmpty(physEngineName)) { return(new NullPhysicsScene()); } if (String.IsNullOrEmpty(meshEngineName)) { return(new NullPhysicsScene()); } IMesher meshEngine = null; if (_MeshPlugins.ContainsKey(meshEngineName)) { MainConsole.Instance.Debug("[Physics]: Loading meshing engine: " + meshEngineName); meshEngine = _MeshPlugins[meshEngineName].GetMesher(config); } else { MainConsole.Instance.WarnFormat("[Physics]: Couldn't find meshing engine: {0}", meshEngineName); throw new ArgumentException(String.Format("couldn't find meshing engine: {0}", meshEngineName)); } if (_PhysPlugins.ContainsKey(physEngineName)) { MainConsole.Instance.Debug("[Physics]: Loading physics engine: " + physEngineName); PhysicsScene result = _PhysPlugins[physEngineName].GetScene(region.RegionName); result.Initialise(meshEngine, region, registry); result.PostInitialise(config); return(result); } else { MainConsole.Instance.WarnFormat("[Physics]: Couldn't find physics engine: {0}", physEngineName); throw new ArgumentException(String.Format("couldn't find physics engine: {0}", physEngineName)); } }