diff --git a/OpenSim/Region/CoreModules/RegionSync/RegionSyncModule/RegionSyncServerModule.cs b/OpenSim/Region/CoreModules/RegionSync/RegionSyncModule/RegionSyncServerModule.cs index a2fb25c912..81120bffcc 100644 --- a/OpenSim/Region/CoreModules/RegionSync/RegionSyncModule/RegionSyncServerModule.cs +++ b/OpenSim/Region/CoreModules/RegionSync/RegionSyncModule/RegionSyncServerModule.cs @@ -118,11 +118,11 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule DefaultPort++; //Get sync server info for Physics Engine actors - // string peServerAddr = scene.RegionInfo.RegionName + "_SceneToPESyncServerIP"; - // m_peSyncServeraddr = syncConfig.GetString(peServerAddr, "127.0.0.1"); - // string peServerPort = scene.RegionInfo.RegionName + "_SceneToPESyncServerPort"; - // m_peSyncServerport = syncConfig.GetInt(peServerPort, DefaultPort); - // DefaultPort++; + string peServerAddr = scene.RegionInfo.RegionName + "_SceneToPESyncServerIP"; + m_peSyncServeraddr = syncConfig.GetString(peServerAddr, "127.0.0.1"); + string peServerPort = scene.RegionInfo.RegionName + "_SceneToPESyncServerPort"; + m_peSyncServerport = syncConfig.GetInt(peServerPort, DefaultPort); + DefaultPort++; // m_symsync = syncConfig.GetBoolean("SymSync", false); @@ -190,7 +190,6 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule m_sceneToSESyncServer.Start(); } - /* m_peSyncServeraddr = m_scene.RegionInfo.PhysicsSyncServerAddress; m_peSyncServerport = m_scene.RegionInfo.PhysicsSyncServerPort; if (!m_peSyncServeraddr.Equals(IPAddrUnknown) && m_peSyncServerport != PortUnknown) @@ -200,7 +199,6 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule m_sceneToPESyncServer = new SceneToPhysEngineSyncServer(m_scene, m_peSyncServeraddr, m_peSyncServerport); m_sceneToPESyncServer.Start(); } - */ //m_log.Warn("[REGION SYNC SERVER MODULE] Post-Initialised"); } @@ -273,7 +271,7 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule { m_presenceUpdates[presence.UUID] = presence; } - m_log.WarnFormat("[REGION SYNC SERVER MODULE] QueuePresenceForUpdate: {0}", presence.UUID.ToString()); + m_log.DebugFormat("[REGION SYNC SERVER MODULE] QueuePresenceForUpdate: {0}", presence.UUID.ToString()); } public void SendUpdates() @@ -522,6 +520,11 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule private int m_seSyncServerport; private SceneToScriptEngineSyncServer m_sceneToSESyncServer = null; + //Sync-server for physics engines + private string m_peSyncServeraddr; + private int m_peSyncServerport; + private SceneToPhysEngineSyncServer m_sceneToPESyncServer = null; + //a boolean variable to indicate in symmetric sync is configured //private bool m_symsync = false; diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs index 76ecde7efa..3e127369c8 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.cs @@ -496,27 +496,27 @@ namespace OpenSim.Region.Framework.Scenes /////////////////////////////////////////////////////////////////////////////////////////////// //RA: Physics Engine /////////////////////////////////////////////////////////////////////////////////////////////// - protected IPhysEngineToSceneConnectorModule m_physEngineToSceneConnectorModule = null; - public IPhysEngineToSceneConnectorModule PhysEngineToSceneConnectorModule - { - get { return m_physEngineToSceneConnectorModule; } - set { m_physEngineToSceneConnectorModule = value; } - } - - protected ISceneToPhysEngineServer m_sceneToPhysEngineSyncServer = null; - public ISceneToPhysEngineServer SceneToPhysEngineSyncServer - { - get - { - if (m_sceneToPhysEngineSyncServer == null) - { - // kludge since this module is loaded in postInitialize - m_sceneToPhysEngineSyncServer = RequestModuleInterface(); - } - return m_sceneToPhysEngineSyncServer; - } - set { m_sceneToPhysEngineSyncServer = value; } - } + protected IPhysEngineToSceneConnectorModule m_physEngineToSceneConnectorModule = null; + public IPhysEngineToSceneConnectorModule PhysEngineToSceneConnectorModule + { + get { return m_physEngineToSceneConnectorModule; } + set { m_physEngineToSceneConnectorModule = value; } + } + + protected ISceneToPhysEngineServer m_sceneToPhysEngineSyncServer = null; + public ISceneToPhysEngineServer SceneToPhysEngineSyncServer + { + get + { + if (m_sceneToPhysEngineSyncServer == null) + { + // kludge since this module is loaded in postInitialize + m_sceneToPhysEngineSyncServer = RequestModuleInterface(); + } + return m_sceneToPhysEngineSyncServer; + } + set { m_sceneToPhysEngineSyncServer = value; } + } protected bool IsPhysEngineActor() { @@ -1505,8 +1505,8 @@ namespace OpenSim.Region.Framework.Scenes //REGION SYNC RegionSyncServerModule = RequestModuleInterface(); RegionSyncClientModule = RequestModuleInterface(); - ScriptEngineToSceneConnectorModule = RequestModuleInterface(); - PhysEngineToSceneConnectorModule = RequestModuleInterface(); + ScriptEngineToSceneConnectorModule = RequestModuleInterface(); + PhysEngineToSceneConnectorModule = RequestModuleInterface(); SceneToPhysEngineSyncServer = RequestModuleInterface(); ////////////////////////////////////////////////////////////////////// //SYMMETRIC SYNC (KittyL: started 12/23/2010) diff --git a/OpenSim/Region/Framework/Scenes/SceneGraph.cs b/OpenSim/Region/Framework/Scenes/SceneGraph.cs index 1d6a918f9c..eeca150a5a 100644 --- a/OpenSim/Region/Framework/Scenes/SceneGraph.cs +++ b/OpenSim/Region/Framework/Scenes/SceneGraph.cs @@ -2443,14 +2443,8 @@ namespace OpenSim.Region.Framework.Scenes SceneObjectPart localPart = GetSceneObjectPart(partUUID); if (localPart == null) { - // it's not a prim. Maybe it's a ScenePresence - ScenePresence sp; - if (!m_parentScene.TryGetScenePresence(partUUID, out sp)) - { - m_log.Warn("No SOP found: UUID -- " + partUUID); - return Scene.ObjectUpdateResult.Unchanged; - } - localPart = sp.RegionSyncSOP; + m_log.Warn("No SOP found: UUID -- " + partUUID); + return Scene.ObjectUpdateResult.Unchanged; } return localPart.UpdateBucketProperties(bucketName, updatedPart, bucketSyncInfo); } diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs index 814a65fc62..387b560965 100644 --- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs @@ -112,14 +112,6 @@ namespace OpenSim.Region.Framework.Scenes } protected List m_attachments = new List(); - // SYMMETRIC SYNC: used to make a ScenePresence look like a SceneObjectPart for synchronization - private SceneObjectGroup m_sog; - private SceneObjectPart m_sop; - public SceneObjectPart RegionSyncSOP - { - get { return m_sop; } - } - private Dictionary scriptedcontrols = new Dictionary(); private ScriptControlled IgnoredControls = ScriptControlled.CONTROL_ZERO; private ScriptControlled LastCommands = ScriptControlled.CONTROL_ZERO; @@ -2456,14 +2448,10 @@ namespace OpenSim.Region.Framework.Scenes if (m_scene.IsSyncedServer()) { m_scene.RegionSyncServerModule.QueuePresenceForTerseUpdate(this); - } - if (m_scene.RegionSyncModule.Active) - { - m_sop.PhysicsRequestingTerseUpdate(); - m_scene.RegionSyncModule.QueueSceneObjectPartForUpdate(m_sop); - } - if (m_scene.IsSyncedServer() || m_scene.RegionSyncModule.Active) + // this.PhysicsRequestingTerseUpdate(); + // m_scene.RegionSyncModule.QueueSceneObjectPartForUpdate(this); return; + } m_perfMonMS = Util.EnvironmentTickCount(); @@ -3391,20 +3379,6 @@ namespace OpenSim.Region.Framework.Scenes m_physicsActor.SubscribeEvents(500); m_physicsActor.LocalID = LocalId; m_physicsActor.UUID = this.UUID; - - m_sop = new SceneObjectPart(this.UUID, new PrimitiveBaseShape(), - new Vector3(1f,1f,1f), Quaternion.Identity, new Vector3(2f, 2f, 2f)); - // Vector3.Zero, Quaternion.Identity, Vector3.Zero); - m_sop.PhysActor = m_physicsActor; - m_sop.InitializeBucketSyncInfo(); - // pull the values from the PhysActor into the SOP - Vector3 temp = m_sop.GroupPosition; - temp = m_sop.OffsetPosition; - Quaternion tempq = m_sop.RotationOffset; - - m_sog = new SceneObjectGroup(m_sop, true); - // m_sog.Scene = m_scene; - m_sog.AttachToSceneBySync(m_scene); } private void OutOfBoundsCall(Vector3 pos) diff --git a/OpenSim/Region/Physics/Manager/PhysicsActor.cs b/OpenSim/Region/Physics/Manager/PhysicsActor.cs index 7f30f7ced2..92f6aba4e8 100644 --- a/OpenSim/Region/Physics/Manager/PhysicsActor.cs +++ b/OpenSim/Region/Physics/Manager/PhysicsActor.cs @@ -199,7 +199,7 @@ namespace OpenSim.Region.Physics.Manager get { return m_UUID; } } public PhysActorLastValues lastValues; - // ID of actor which last updated the values. Send if I did the change. + // ID of actor which last updated the values. Send if I did the change. public string ChangingActorID = "YY"; // set to true of prim is updated public bool SyncUpdated; @@ -219,7 +219,7 @@ namespace OpenSim.Region.Physics.Manager public abstract void LockAngularMotion(Vector3 axis); - public void RequestPhysicsterseUpdate() + public virtual void RequestPhysicsterseUpdate() { // Make a temporary copy of the event to avoid possibility of // a race condition if the last subscriber unsubscribes diff --git a/OpenSim/Region/Physics/OdePlugin/ODECharacter.cs b/OpenSim/Region/Physics/OdePlugin/ODECharacter.cs index b04467fa11..c74cf943e2 100644 --- a/OpenSim/Region/Physics/OdePlugin/ODECharacter.cs +++ b/OpenSim/Region/Physics/OdePlugin/ODECharacter.cs @@ -203,6 +203,23 @@ namespace OpenSim.Region.Physics.OdePlugin m_name = avName; } + public override void RequestPhysicsterseUpdate() + { + if (PhysEngineToSceneConnectorModule.IsPhysEngineActorS) + { + // if the values have changed and it was I who changed them, send an update + if (this.lastValues.Changed(this) && ChangingActorID == RegionSyncServerModule.ActorID) + { + // m_log.DebugFormat("[ODE CHARACTER]: Sending terse update for {0}", LocalID); + PhysEngineToSceneConnectorModule.RouteUpdate(this); + } + } + else + { + base.RequestPhysicsterseUpdate(); + } + } + public override int PhysicsActorType { get { return (int) ActorTypes.Agent; } @@ -410,6 +427,7 @@ namespace OpenSim.Region.Physics.OdePlugin get { return _position; } set { + base.ChangingActorID = RegionSyncServerModule.ActorID; if (Body == IntPtr.Zero || Shell == IntPtr.Zero) { if (value.IsFinite()) @@ -455,6 +473,7 @@ namespace OpenSim.Region.Physics.OdePlugin get { return new Vector3(CAPSULE_RADIUS * 2, CAPSULE_RADIUS * 2, CAPSULE_LENGTH); } set { + base.ChangingActorID = RegionSyncServerModule.ActorID; if (value.IsFinite()) { m_pidControllerActive = true; @@ -776,6 +795,7 @@ namespace OpenSim.Region.Physics.OdePlugin { m_pidControllerActive = true; _target_velocity = value; + base.ChangingActorID = RegionSyncServerModule.ActorID; } else { @@ -833,6 +853,7 @@ namespace OpenSim.Region.Physics.OdePlugin { if (force.IsFinite()) { + base.ChangingActorID = RegionSyncServerModule.ActorID; if (pushforce) { m_pidControllerActive = false; diff --git a/OpenSim/Region/Physics/PEPlugin/PECharacter.cs b/OpenSim/Region/Physics/PEPlugin/PECharacter.cs index 35af7a8e6f..b807e08613 100755 --- a/OpenSim/Region/Physics/PEPlugin/PECharacter.cs +++ b/OpenSim/Region/Physics/PEPlugin/PECharacter.cs @@ -121,7 +121,6 @@ public class PECharacter : PhysicsActor public override Vector3 Position { get { return _position; } set { _position = value; - SyncUpdated = true; } } public override float Mass { @@ -134,7 +133,6 @@ public class PECharacter : PhysicsActor public override Vector3 Force { get { return _force; } set { _force = value; - SyncUpdated = true; } } @@ -155,19 +153,16 @@ public class PECharacter : PhysicsActor public override Vector3 Velocity { get { return _velocity; } set { _velocity = value; - SyncUpdated = true; } } public override Vector3 Torque { get { return _torque; } set { _torque = value; - // SyncUpdated = true; } } public override float CollisionScore { get { return _collisionScore; } set { _collisionScore = value; - // SyncUpdated = true; } } public override Vector3 Acceleration { diff --git a/OpenSim/Region/Physics/PEPlugin/PEScene.cs b/OpenSim/Region/Physics/PEPlugin/PEScene.cs index 2fc516c262..94d5889d83 100755 --- a/OpenSim/Region/Physics/PEPlugin/PEScene.cs +++ b/OpenSim/Region/Physics/PEPlugin/PEScene.cs @@ -96,38 +96,43 @@ public class PEScene : PhysicsScene return prim; } - public override void AddPhysicsActorTaint(PhysicsActor prim) - { - prim.SyncUpdated = true; - } + public override void AddPhysicsActorTaint(PhysicsActor prim) { } public override float Simulate(float timeStep) { - // m_log.DebugFormat("[RPE]: Simulate. p={0}, a={1}", m_prims.Count, m_avatars.Count); - lock (m_prims) + // if we are a physics engine server, send update information + if (SceneToPhysEngineSyncServer.IsPhysEngineScene2S()) { - foreach (PEPrim prim in m_prims) - { - // if the values have changed and it was I who changed them, send an update - if (prim.SyncUpdated) - { - prim.SyncUpdated = false; - prim.RequestPhysicsterseUpdate(); - } - } - } - lock (m_avatars) - { - foreach (PECharacter actor in m_avatars) + if (SceneToPhysEngineSyncServer.IsActivePhysEngineScene2S()) { // m_log.DebugFormat("[RPE]: Simulate. p={0}, a={1}", m_prims.Count, m_avatars.Count); - // if the values have changed and it was I who changed them, send an update - if (actor.SyncUpdated) + /* + lock (m_prims) { - actor.SyncUpdated = false; - actor.RequestPhysicsterseUpdate(); + foreach (PEPrim prim in m_prims) + { + // if the values have changed and it was I who changed them, send an update + if (prim.ChangingActorID == RegionSyncServerModule.ActorID && prim.lastValues.Changed(prim)) + { + SceneToPhysEngineSyncServer.RouteUpdate(prim); + } + } + } + */ + lock (m_avatars) + { + foreach (PECharacter actor in m_avatars) + { + // m_log.DebugFormat("[RPE]: Simulate. p={0}, a={1}", m_prims.Count, m_avatars.Count); + // if the values have changed and it was I who changed them, send an update + if (actor.ChangingActorID == RegionSyncServerModule.ActorID && actor.lastValues.Changed(actor)) + { + SceneToPhysEngineSyncServer.RouteUpdate(actor); + } + } } } + return 60f; } /* // code borrowed from BasicPhysics to do just avatar movement