diff --git a/OpenSim/Region/Application/OpenSimMain.cs b/OpenSim/Region/Application/OpenSimMain.cs index 42f1b941de..e3c326b462 100644 --- a/OpenSim/Region/Application/OpenSimMain.cs +++ b/OpenSim/Region/Application/OpenSimMain.cs @@ -73,6 +73,7 @@ namespace OpenSim protected List m_regionData = new List(); private bool m_verbose; + private bool m_physicalPrim; private readonly string m_logFilename = ("region-console.log"); private bool m_permissions = false; @@ -154,6 +155,7 @@ namespace OpenSim config.Set("gridmode", false); config.Set("physics", "basicphysics"); config.Set("verbose", true); + config.Set("physical_prim", true); config.Set("serverside_object_permissions", false); config.Set("storage_plugin", "OpenSim.DataStore.NullStorage.dll"); @@ -213,6 +215,7 @@ namespace OpenSim m_physicsEngine = startupConfig.GetString("physics", "basicphysics"); m_meshEngineName = startupConfig.GetString("meshing", "Meshmerizer"); m_verbose = startupConfig.GetBoolean("verbose", true); + m_physicalPrim = startupConfig.GetBoolean("physical_prim", true); m_permissions = startupConfig.GetBoolean("serverside_object_permissions", false); m_storageDLL = startupConfig.GetString("storage_plugin", "OpenSim.DataStore.NullStorage.dll"); @@ -365,7 +368,7 @@ namespace OpenSim SceneCommunicationService sceneGridService = new SceneCommunicationService(m_commsManager); return new Scene(regionInfo, circuitManager, m_commsManager, sceneGridService, m_assetCache, storageManager, m_httpServer, - m_moduleLoader, m_dumpAssetsToFile); + m_moduleLoader, m_dumpAssetsToFile, m_physicalPrim); } protected override void Initialize() diff --git a/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs b/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs index f5e6f63715..f840845a0d 100644 --- a/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs +++ b/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs @@ -446,7 +446,7 @@ namespace OpenSim.Region.Environment.Scenes AddEntity(group); group.AbsolutePosition = pos; SceneObjectPart rootPart = group.GetChildPart(group.UUID); - bool UsePhysics = ((rootPart.ObjectFlags & (uint)LLObject.ObjectFlags.Physics) > 0); + bool UsePhysics = (((rootPart.ObjectFlags & (uint)LLObject.ObjectFlags.Physics) > 0)&& m_physicalPrim); if ((rootPart.ObjectFlags & (uint) LLObject.ObjectFlags.Phantom) == 0) { PrimitiveBaseShape pbs = rootPart.Shape; diff --git a/OpenSim/Region/Environment/Scenes/Scene.cs b/OpenSim/Region/Environment/Scenes/Scene.cs index 7e1bbfa619..b4c8b68695 100644 --- a/OpenSim/Region/Environment/Scenes/Scene.cs +++ b/OpenSim/Region/Environment/Scenes/Scene.cs @@ -68,7 +68,7 @@ namespace OpenSim.Region.Environment.Scenes private int m_timeUpdateCount; private readonly Mutex updateLock; - + public bool m_physicalPrim; protected ModuleLoader m_moduleLoader; protected StorageManager m_storageManager; protected AgentCircuitManager m_authenticateHandler; @@ -192,7 +192,7 @@ namespace OpenSim.Region.Environment.Scenes public Scene(RegionInfo regInfo, AgentCircuitManager authen, CommunicationsManager commsMan, SceneCommunicationService sceneGridService, AssetCache assetCach, StorageManager storeManager, BaseHttpServer httpServer, - ModuleLoader moduleLoader, bool dumpAssetsToFile) + ModuleLoader moduleLoader, bool dumpAssetsToFile, bool physicalPrim) { updateLock = new Mutex(false); @@ -207,6 +207,7 @@ namespace OpenSim.Region.Environment.Scenes m_regionName = m_regInfo.RegionName; m_datastore = m_regInfo.DataStore; RegisterRegionWithComms(); + m_physicalPrim = physicalPrim; m_LandManager = new LandManager(this, m_regInfo); m_estateManager = new EstateManager(this, m_regInfo); @@ -522,7 +523,7 @@ namespace OpenSim.Region.Environment.Scenes { AddEntityFromStorage(prim); SceneObjectPart rootPart = prim.GetChildPart(prim.UUID); - bool UsePhysics = ((rootPart.ObjectFlags & (uint)LLObject.ObjectFlags.Physics) > 0); + bool UsePhysics = (((rootPart.ObjectFlags & (uint)LLObject.ObjectFlags.Physics) > 0) && m_physicalPrim); if ((rootPart.ObjectFlags & (uint) LLObject.ObjectFlags.Phantom) == 0) rootPart.PhysActor = phyScene.AddPrimShape( rootPart.Name, @@ -572,7 +573,7 @@ namespace OpenSim.Region.Environment.Scenes rootPart.ObjectFlags += (uint) LLObject.ObjectFlags.Phantom; } // if not phantom, add to physics - bool UsePhysics = ((rootPart.ObjectFlags & (uint)LLObject.ObjectFlags.Physics) > 0); + bool UsePhysics = (((rootPart.ObjectFlags & (uint)LLObject.ObjectFlags.Physics) > 0) && m_physicalPrim); if ((rootPart.ObjectFlags & (uint) LLObject.ObjectFlags.Phantom) == 0) rootPart.PhysActor = phyScene.AddPrimShape( diff --git a/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs b/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs index 7575fad2a7..1604dad173 100644 --- a/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs +++ b/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs @@ -770,7 +770,7 @@ namespace OpenSim.Region.Environment.Scenes { i += 46; //IsLocked = (data[i++] != 0) ? true : false; - UsePhysics = (data[i++] != 0) ? true : false; + UsePhysics = ((data[i++] != 0) && m_parentGroup.m_scene.m_physicalPrim) ? true : false; //System.Console.WriteLine("U" + packet.ToBytes().Length.ToString()); IsTemporary = (data[i++] != 0) ? true : false; IsPhantom = (data[i++] != 0) ? true : false; @@ -782,7 +782,7 @@ namespace OpenSim.Region.Environment.Scenes //Silently ignore it - TODO: FIXME Quick } - if (UsePhysics) + if (UsePhysics ) { AddFlag(LLObject.ObjectFlags.Physics); if (PhysActor != null) @@ -791,9 +791,12 @@ namespace OpenSim.Region.Environment.Scenes } else { - RemFlag(LLObject.ObjectFlags.Physics); - if (PhysActor != null) - PhysActor.OnRequestTerseUpdate -= PhysicsRequestingTerseUpdate; + if (m_parentGroup.m_scene.m_physicalPrim) + { + RemFlag(LLObject.ObjectFlags.Physics); + if (PhysActor != null) + PhysActor.OnRequestTerseUpdate -= PhysicsRequestingTerseUpdate; + } } if (IsPhantom) diff --git a/OpenSim/Region/Environment/Scenes/SceneXmlLoader.cs b/OpenSim/Region/Environment/Scenes/SceneXmlLoader.cs index e0ddec5fac..c2bb019d8e 100644 --- a/OpenSim/Region/Environment/Scenes/SceneXmlLoader.cs +++ b/OpenSim/Region/Environment/Scenes/SceneXmlLoader.cs @@ -44,7 +44,7 @@ namespace OpenSim.Region.Environment.Scenes m_innerScene.AddEntity(obj); SceneObjectPart rootPart = obj.GetChildPart(obj.UUID); - bool UsePhysics = ((rootPart.ObjectFlags & (uint)LLObject.ObjectFlags.Physics) > 0); + bool UsePhysics = (((rootPart.ObjectFlags & (uint)LLObject.ObjectFlags.Physics) > 0) && m_parentScene.m_physicalPrim); if ((rootPart.ObjectFlags & (uint)LLObject.ObjectFlags.Phantom) == 0) rootPart.PhysActor = m_innerScene.PhyScene.AddPrimShape( rootPart.Name, @@ -110,7 +110,7 @@ namespace OpenSim.Region.Environment.Scenes m_innerScene.AddEntityFromStorage(obj); SceneObjectPart rootPart = obj.GetChildPart(obj.UUID); - bool UsePhysics = ((rootPart.ObjectFlags & (uint)LLObject.ObjectFlags.Physics) > 0); + bool UsePhysics = (((rootPart.ObjectFlags & (uint)LLObject.ObjectFlags.Physics) > 0) && m_parentScene.m_physicalPrim); if ((rootPart.ObjectFlags & (uint)LLObject.ObjectFlags.Phantom) == 0) rootPart.PhysActor = m_innerScene.PhyScene.AddPrimShape( rootPart.Name, diff --git a/OpenSim/Region/Examples/SimpleApp/MyWorld.cs b/OpenSim/Region/Examples/SimpleApp/MyWorld.cs index e65868843c..ae2f5adfee 100644 --- a/OpenSim/Region/Examples/SimpleApp/MyWorld.cs +++ b/OpenSim/Region/Examples/SimpleApp/MyWorld.cs @@ -44,8 +44,8 @@ namespace SimpleApp public MyWorld(RegionInfo regionInfo, AgentCircuitManager authen, CommunicationsManager commsMan, SceneCommunicationService sceneGridService, AssetCache assetCach, StorageManager storeMan, BaseHttpServer httpServer, - ModuleLoader moduleLoader) - : base(regionInfo, authen, commsMan, sceneGridService, assetCach, storeMan, httpServer, moduleLoader, false) + ModuleLoader moduleLoader, bool physicalPrim) + : base(regionInfo, authen, commsMan, sceneGridService, assetCach, storeMan, httpServer, moduleLoader, false, true) { m_avatars = new List(); } diff --git a/OpenSim/Region/Examples/SimpleApp/Program.cs b/OpenSim/Region/Examples/SimpleApp/Program.cs index 49fae93829..73b8303a79 100644 --- a/OpenSim/Region/Examples/SimpleApp/Program.cs +++ b/OpenSim/Region/Examples/SimpleApp/Program.cs @@ -172,7 +172,7 @@ namespace SimpleApp SceneCommunicationService sceneGridService = new SceneCommunicationService(m_commsManager); return new MyWorld(regionInfo, circuitManager, m_commsManager, sceneGridService, m_assetCache, storageManager, m_httpServer, - new ModuleLoader(m_log, m_config)); + new ModuleLoader(m_log, m_config), true); } protected override StorageManager CreateStorageManager(RegionInfo regionInfo) diff --git a/bin/OpenSim.ini.example b/bin/OpenSim.ini.example index 3930dd4b1d..49de4c2285 100644 --- a/bin/OpenSim.ini.example +++ b/bin/OpenSim.ini.example @@ -1,63 +1,64 @@ -[Startup] -gridmode = false -physics = basicphysics -; Prim Storage -; if you would like to use sqlite uncomment the following line (and -; comment the NullStorage line) -storage_plugin = "OpenSim.DataStore.MonoSqlite.dll" -;storage_plugin = "OpenSim.DataStore.NullStorage.dll" -startup_console_commands_file = "startup_commands.txt" -shutdown_console_commands_file = "shutdown_commands.txt" -serverside_object_permissions = false - -; asset_database = "db4o" -; to try sqlite as the asset database , comment out the above line, and uncomment following one -asset_database = "sqlite" -verbose = true - -[StandAlone] -accounts_authenticate = true -welcome_message = "Welcome to OpenSim" -inventory_plugin = "OpenSim.Framework.Data.SQLite.dll" -; userDatabase_plugin = "OpenSim.Framework.Data.DB4o.dll" -userDatabase_plugin = "OpenSim.Framework.Data.SQLite.dll" -default_location_x = 1000 -default_location_y = 1000 -dump_assets_to_file = false - -[Network] -http_listener_port = 9000 -remoting_listener_port = 8895 - -grid_server_url = "http://127.0.0.1:8001" -grid_send_key = "null" -grid_recv_key = "null" - -user_server_url = "http://127.0.0.1:8002" -user_send_key = "null" -user_recv_key = "null" - -asset_server_url = "http://127.0.0.1:8003" - -[Chat] -whisper_distance = 10 -say_distance = 30 -shout_distance = 100 - -; Uncomment the following for IRC bridge -; experimental, so if it breaks... keep both parts... yada yada -; also, not good error detection when it fails -;[IRC] -;server = name.of.irc.server.on.the.net -;nick = OpenSimBotNameProbablyMakeThisShorter -;channel = #the_irc_channel_you_want_to_connect_to - -; Uncomment the following to control the progression of daytime -; in the Sim. The defaults are what is shown below -;[Sun] -; number of wall clock hours for an opensim day. 24.0 would mean realtime -;day_length = 0.5 - -; send a Sun update ever frame_rate # of frames. A lower number will -; make for smoother sun transition at the cost of network -;frame_rate = 100 +[Startup] +gridmode = false +physics = basicphysics +; Prim Storage +; if you would like to use sqlite uncomment the following line (and +; comment the NullStorage line) +storage_plugin = "OpenSim.DataStore.MonoSqlite.dll" +;storage_plugin = "OpenSim.DataStore.NullStorage.dll" +startup_console_commands_file = "startup_commands.txt" +shutdown_console_commands_file = "shutdown_commands.txt" +serverside_object_permissions = false + +; asset_database = "db4o" +; to try sqlite as the asset database , comment out the above line, and uncomment following one +asset_database = "sqlite" +verbose = true +physical_prim = true + +[StandAlone] +accounts_authenticate = true +welcome_message = "Welcome to OpenSim" +inventory_plugin = "OpenSim.Framework.Data.SQLite.dll" +; userDatabase_plugin = "OpenSim.Framework.Data.DB4o.dll" +userDatabase_plugin = "OpenSim.Framework.Data.SQLite.dll" +default_location_x = 1000 +default_location_y = 1000 +dump_assets_to_file = false + +[Network] +http_listener_port = 9000 +remoting_listener_port = 8895 + +grid_server_url = "http://127.0.0.1:8001" +grid_send_key = "null" +grid_recv_key = "null" + +user_server_url = "http://127.0.0.1:8002" +user_send_key = "null" +user_recv_key = "null" + +asset_server_url = "http://127.0.0.1:8003" + +[Chat] +whisper_distance = 10 +say_distance = 30 +shout_distance = 100 + +; Uncomment the following for IRC bridge +; experimental, so if it breaks... keep both parts... yada yada +; also, not good error detection when it fails +;[IRC] +;server = name.of.irc.server.on.the.net +;nick = OpenSimBotNameProbablyMakeThisShorter +;channel = #the_irc_channel_you_want_to_connect_to + +; Uncomment the following to control the progression of daytime +; in the Sim. The defaults are what is shown below +;[Sun] +; number of wall clock hours for an opensim day. 24.0 would mean realtime +;day_length = 0.5 + +; send a Sun update ever frame_rate # of frames. A lower number will +; make for smoother sun transition at the cost of network +;frame_rate = 100