// This is where all the default material attributes are defined. public static void InitializeFromDefaults(ConfigurationParameters parms) { // Values from http://wiki.secondlife.com/wiki/PRIM_MATERIAL float dDensity = parms.defaultDensity; float dFriction = parms.defaultFriction; float dRestitution = parms.defaultRestitution; Attributes[(int)MaterialAttributes.Material.Stone] = new MaterialAttributes("stone", dDensity, 0.8f, 0.4f); Attributes[(int)MaterialAttributes.Material.Metal] = new MaterialAttributes("metal", dDensity, 0.3f, 0.4f); Attributes[(int)MaterialAttributes.Material.Glass] = new MaterialAttributes("glass", dDensity, 0.2f, 0.7f); Attributes[(int)MaterialAttributes.Material.Wood] = new MaterialAttributes("wood", dDensity, 0.6f, 0.5f); Attributes[(int)MaterialAttributes.Material.Flesh] = new MaterialAttributes("flesh", dDensity, 0.9f, 0.3f); Attributes[(int)MaterialAttributes.Material.Plastic] = new MaterialAttributes("plastic", dDensity, 0.4f, 0.7f); Attributes[(int)MaterialAttributes.Material.Rubber] = new MaterialAttributes("rubber", dDensity, 0.9f, 0.9f); Attributes[(int)MaterialAttributes.Material.Light] = new MaterialAttributes("light", dDensity, dFriction, dRestitution); Attributes[(int)MaterialAttributes.Material.Avatar] = new MaterialAttributes("avatar", 3.5f, 0.2f, 0f); Attributes[(int)MaterialAttributes.Material.Stone + (int)MaterialAttributes.Material.NumberOfTypes] = new MaterialAttributes("stonePhysical", dDensity, 0.8f, 0.4f); Attributes[(int)MaterialAttributes.Material.Metal + (int)MaterialAttributes.Material.NumberOfTypes] = new MaterialAttributes("metalPhysical", dDensity, 0.3f, 0.4f); Attributes[(int)MaterialAttributes.Material.Glass + (int)MaterialAttributes.Material.NumberOfTypes] = new MaterialAttributes("glassPhysical", dDensity, 0.2f, 0.7f); Attributes[(int)MaterialAttributes.Material.Wood + (int)MaterialAttributes.Material.NumberOfTypes] = new MaterialAttributes("woodPhysical", dDensity, 0.6f, 0.5f); Attributes[(int)MaterialAttributes.Material.Flesh + (int)MaterialAttributes.Material.NumberOfTypes] = new MaterialAttributes("fleshPhysical", dDensity, 0.9f, 0.3f); Attributes[(int)MaterialAttributes.Material.Plastic + (int)MaterialAttributes.Material.NumberOfTypes] = new MaterialAttributes("plasticPhysical", dDensity, 0.4f, 0.7f); Attributes[(int)MaterialAttributes.Material.Rubber + (int)MaterialAttributes.Material.NumberOfTypes] = new MaterialAttributes("rubberPhysical", dDensity, 0.9f, 0.9f); Attributes[(int)MaterialAttributes.Material.Light + (int)MaterialAttributes.Material.NumberOfTypes] = new MaterialAttributes("lightPhysical", dDensity, dFriction, dRestitution); Attributes[(int)MaterialAttributes.Material.Avatar + (int)MaterialAttributes.Material.NumberOfTypes] = new MaterialAttributes("avatarPhysical", 3.5f, 0.2f, 0f); }
// All default parameter values are set here. There should be no values set in the // variable definitions. private void GetInitialParameterValues(IConfigSource config) { ConfigurationParameters parms = new ConfigurationParameters(); UnmanagedParams[0] = parms; BSParam.SetParameterDefaultValues(this); if (config != null) { // If there are specifications in the ini file, use those values IConfig pConfig = config.Configs["BulletSim"]; if (pConfig != null) { BSParam.SetParameterConfigurationValues(this, pConfig); // There are two Bullet implementations to choose from BulletEngineName = pConfig.GetString("BulletEngine", "BulletUnmanaged"); // Very detailed logging for physics debugging // TODO: the boolean values can be moved to the normal parameter processing. m_physicsLoggingEnabled = pConfig.GetBoolean("PhysicsLoggingEnabled", false); m_physicsLoggingDir = pConfig.GetString("PhysicsLoggingDir", "."); m_physicsLoggingPrefix = pConfig.GetString("PhysicsLoggingPrefix", "physics-%REGIONNAME%-"); m_physicsLoggingFileMinutes = pConfig.GetInt("PhysicsLoggingFileMinutes", 5); m_physicsLoggingDoFlush = pConfig.GetBoolean("PhysicsLoggingDoFlush", false); m_physicsPhysicalDumpEnabled = pConfig.GetBoolean("PhysicsPhysicalDumpEnabled", false); // Very detailed logging for vehicle debugging VehicleLoggingEnabled = pConfig.GetBoolean("VehicleLoggingEnabled", false); VehiclePhysicalLoggingEnabled = pConfig.GetBoolean("VehiclePhysicalLoggingEnabled", false); // Do any replacements in the parameters m_physicsLoggingPrefix = m_physicsLoggingPrefix.Replace("%REGIONNAME%", RegionName); } // The material characteristics. BSMaterials.InitializeFromDefaults(Params); if (pConfig != null) { // Let the user add new and interesting material property values. BSMaterials.InitializefromParameters(pConfig); } } }
// Initialization and simulation public abstract BulletWorld Initialize(Vector3 maxPosition, ConfigurationParameters parms, int maxCollisions, ref CollisionDesc[] collisionArray, int maxUpdates, ref EntityProperties[] updateArray );