Merge branch 'dev' of ssh://island.sciencesim.com/home/sceneapi/sceneapi into dev
commit
3eb13b6664
|
@ -1522,7 +1522,8 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
|
|||
|
||||
if (sop == null || sop.ParentGroup.IsDeleted)
|
||||
{
|
||||
m_log.WarnFormat("{0}: HandleUpdatedPrimProperties -- prim {1} no longer in local SceneGraph", LogHeader, primUUID);
|
||||
m_log.WarnFormat("{0}: HandleUpdatedPrimProperties -- prim {1} no longer in local SceneGraph. SOP == NULL? ({2}), Sender is {3}",
|
||||
LogHeader, primUUID, sop == null, senderActorID);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -1569,12 +1570,28 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
|
|||
//Enqueue the updated SOP and its properties for sync
|
||||
ProcessAndEnqueuePrimUpdatesBySync(sop, propertiesUpdated);
|
||||
|
||||
//Calling SOP.ScheduleFullUpdate(), so that viewers, if any,
|
||||
//Calling SOP.ScheduleFullUpdate() or ScheduleTerseUpdate(), so that viewers, if any,
|
||||
//will receive updates as well.
|
||||
bool allTerseUpdates = true;
|
||||
foreach (SceneObjectPartSyncProperties prop in propertiesUpdated)
|
||||
{
|
||||
if (!PrimSyncInfo.TerseUpdateProperties.Contains(prop))
|
||||
{
|
||||
allTerseUpdates = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (allTerseUpdates)
|
||||
{
|
||||
sop.ScheduleTerseUpdate(null);
|
||||
}
|
||||
else
|
||||
{
|
||||
sop.ScheduleFullUpdate(null);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void HandleSyncLinkObject(SymmetricSyncMessage msg, string senderActorID)
|
||||
{
|
||||
|
@ -2130,7 +2147,16 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
|
|||
m_scene.EventManager.TriggerOnAttachLocally(localID, itemID, avatarID);
|
||||
}
|
||||
|
||||
private int spErrCount = 0;
|
||||
private HashSet<UUID> errUUIDs = new HashSet<UUID>();
|
||||
private void HandleRemoteEvent_PhysicsCollision(string actorID, ulong evSeqNum, OSDMap data)
|
||||
{
|
||||
if (!data.ContainsKey("primUUID") || !data.ContainsKey("collisionUUIDs"))
|
||||
{
|
||||
m_log.ErrorFormat("RemoteEvent_PhysicsCollision: either primUUID or collisionUUIDs is missing in incoming OSDMap");
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
UUID primUUID = data["primUUID"].AsUUID();
|
||||
//OSDArray collisionLocalIDs = (OSDArray)data["collisionLocalIDs"];
|
||||
|
@ -2139,7 +2165,7 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
|
|||
SceneObjectPart part = m_scene.GetSceneObjectPart(primUUID);
|
||||
if (part == null)
|
||||
{
|
||||
m_log.WarnFormat("{0}: HandleRemoteEvent_PhysicsCollision: no part with UUID {1} found", LogHeader, primUUID);
|
||||
m_log.WarnFormat("{0}: HandleRemoteEvent_PhysicsCollision: no part with UUID {1} found, event initiator {2}", LogHeader, primUUID, actorID);
|
||||
return;
|
||||
}
|
||||
if (collisionUUIDs == null)
|
||||
|
@ -2171,6 +2197,22 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
|
|||
{
|
||||
//m_log.WarnFormat("Received collision event for SOP {0},{1} with another SOP/SP {2}, but the latter is not found in local Scene",
|
||||
// part.Name, part.UUID, collidingUUID);
|
||||
if (spErrCount == 100)
|
||||
{
|
||||
string missedUUIDs = "";
|
||||
foreach (UUID cUUID in errUUIDs)
|
||||
{
|
||||
missedUUIDs += cUUID.ToString() + ", ";
|
||||
}
|
||||
m_log.WarnFormat("Have seen errors of collidingUUID not being found {0} times. {1} collidingUUIDs seen so far: {2}", spErrCount, errUUIDs.Count, missedUUIDs);
|
||||
spErrCount = 0;
|
||||
errUUIDs.Clear();
|
||||
}
|
||||
else
|
||||
{
|
||||
spErrCount++;
|
||||
errUUIDs.Add(collidingUUID);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -2184,6 +2226,11 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
|
|||
}
|
||||
part.PhysicsCollisionLocally(e);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
m_log.WarnFormat("HandleRemoteEvent_PhysicsCollision ERROR: {0}", e.Message);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// The handler for (locally initiated) event OnNewScript: triggered by client's RezSript packet, publish it to other actors.
|
||||
|
@ -2304,15 +2351,6 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
|
|||
SendSceneEvent(SymmetricSyncMessage.MsgType.Attach, data);
|
||||
}
|
||||
|
||||
/*
|
||||
private void OnLocalPhysicsCollision(UUID partUUID, OSDArray collisionLocalIDs)
|
||||
{
|
||||
OSDMap data = new OSDMap();
|
||||
data["primUUID"] = OSD.FromUUID(partUUID);
|
||||
data["collisionLocalIDs"] = collisionLocalIDs;
|
||||
SendSceneEvent(SymmetricSyncMessage.MsgType.PhysicsCollision, data);
|
||||
}
|
||||
* */
|
||||
private void OnLocalPhysicsCollision(UUID partUUID, OSDArray collisionUUIDs)
|
||||
{
|
||||
OSDMap data = new OSDMap();
|
||||
|
@ -3747,6 +3785,7 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
|
|||
public static HashSet<SceneObjectPartSyncProperties> PrimPhysActorProperties = SceneObjectPart.GetAllPhysActorProperties();
|
||||
public static HashSet<SceneObjectPartSyncProperties> PrimNonPhysActorProperties = SceneObjectPart.GetAllPrimNonPhysActorProperties();
|
||||
public static HashSet<SceneObjectPartSyncProperties> GroupProperties = SceneObjectPart.GetGroupProperties();
|
||||
public static HashSet<SceneObjectPartSyncProperties> TerseUpdateProperties = SceneObjectPart.GetTerseUpdateProperties();
|
||||
|
||||
private PrimSyncInfoManager m_syncInfoManager;
|
||||
|
||||
|
@ -5876,12 +5915,20 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
|
|||
|
||||
//Also may need to cached PhysActor.Position
|
||||
if (part.PhysActor != null)
|
||||
{
|
||||
if (!m_propertiesSyncInfo.ContainsKey(SceneObjectPartSyncProperties.Position))
|
||||
{
|
||||
Object initValue = GetSOPPropertyValue(part, SceneObjectPartSyncProperties.Position);
|
||||
PropertySyncInfo syncInfo = new PropertySyncInfo(SceneObjectPartSyncProperties.Position, initValue, lastUpdateByLocalTS, syncID);
|
||||
m_propertiesSyncInfo.Add(SceneObjectPartSyncProperties.Position, syncInfo);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!part.PhysActor.Position.Equals(m_propertiesSyncInfo[SceneObjectPartSyncProperties.Position].LastUpdateValue))
|
||||
{
|
||||
m_propertiesSyncInfo[SceneObjectPartSyncProperties.Position].UpdateSyncInfoByLocal(lastUpdateByLocalTS, syncID, (Object)part.PhysActor.Position);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
@ -5893,18 +5940,31 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
|
|||
//PhysActor.Position is just updated by setting GroupPosition
|
||||
//above, so need to update the cached value of Position here.
|
||||
if (part.PhysActor != null)
|
||||
{
|
||||
if (!part.PhysActor.Position.Equals(m_propertiesSyncInfo[SceneObjectPartSyncProperties.Position].LastUpdateValue))
|
||||
{
|
||||
//Set the timestamp and syncID to be the same with GroupPosition
|
||||
long lastUpdateTimestamp = m_propertiesSyncInfo[SceneObjectPartSyncProperties.GroupPosition].LastUpdateTimeStamp;
|
||||
string lastUpdateSyncID = m_propertiesSyncInfo[SceneObjectPartSyncProperties.GroupPosition].LastUpdateSyncID;
|
||||
|
||||
if (!m_propertiesSyncInfo.ContainsKey(SceneObjectPartSyncProperties.Position))
|
||||
{
|
||||
Object initValue = GetSOPPropertyValue(part, SceneObjectPartSyncProperties.Position);
|
||||
PropertySyncInfo syncInfo = new PropertySyncInfo(SceneObjectPartSyncProperties.Position, initValue, lastUpdateTimestamp, lastUpdateSyncID);
|
||||
m_propertiesSyncInfo.Add(SceneObjectPartSyncProperties.Position, syncInfo);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!part.PhysActor.Position.Equals(m_propertiesSyncInfo[SceneObjectPartSyncProperties.Position].LastUpdateValue))
|
||||
{
|
||||
//Set the timestamp and syncID to be the same with GroupPosition
|
||||
//long lastUpdateTimestamp = m_propertiesSyncInfo[SceneObjectPartSyncProperties.GroupPosition].LastUpdateTimeStamp;
|
||||
//string lastUpdateSyncID = m_propertiesSyncInfo[SceneObjectPartSyncProperties.GroupPosition].LastUpdateSyncID;
|
||||
m_propertiesSyncInfo[SceneObjectPartSyncProperties.Position].UpdateSyncInfoByLocal(lastUpdateTimestamp,
|
||||
lastUpdateSyncID, (Object)part.PhysActor.Position);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -5921,11 +5981,20 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
|
|||
m_propertiesSyncInfo[SceneObjectPartSyncProperties.Position].UpdateSyncInfoByLocal(lastUpdateByLocalTS, syncID, (Object)part.PhysActor.Position);
|
||||
|
||||
//Also may need to update SOP.GroupPosition (especially for root parts)
|
||||
if (!m_propertiesSyncInfo.ContainsKey(SceneObjectPartSyncProperties.GroupPosition))
|
||||
{
|
||||
Object initValue = GetSOPPropertyValue(part, SceneObjectPartSyncProperties.GroupPosition);
|
||||
PropertySyncInfo syncInfo = new PropertySyncInfo(SceneObjectPartSyncProperties.GroupPosition, initValue, lastUpdateByLocalTS, syncID);
|
||||
m_propertiesSyncInfo.Add(SceneObjectPartSyncProperties.Position, syncInfo);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!part.GroupPosition.Equals(m_propertiesSyncInfo[SceneObjectPartSyncProperties.GroupPosition].LastUpdateValue))
|
||||
{
|
||||
//Update SOP.GroupPosition
|
||||
m_propertiesSyncInfo[SceneObjectPartSyncProperties.GroupPosition].UpdateSyncInfoByLocal(lastUpdateByLocalTS, syncID, (Object)part.GroupPosition);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
else if (lastUpdateByLocalTS < m_propertiesSyncInfo[SceneObjectPartSyncProperties.Position].LastUpdateTimeStamp)
|
||||
|
@ -5935,17 +6004,28 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
|
|||
|
||||
//GroupPosition may change due to PhysActor.Position changes,
|
||||
//especially for root parts. Sync the value of GroupPosition.
|
||||
long lastUpdateTimestamp = m_propertiesSyncInfo[SceneObjectPartSyncProperties.Position].LastUpdateTimeStamp;
|
||||
string lastUpdateSyncID = m_propertiesSyncInfo[SceneObjectPartSyncProperties.Position].LastUpdateSyncID;
|
||||
if (!m_propertiesSyncInfo.ContainsKey(SceneObjectPartSyncProperties.GroupPosition))
|
||||
{
|
||||
Object initValue = GetSOPPropertyValue(part, SceneObjectPartSyncProperties.GroupPosition);
|
||||
PropertySyncInfo syncInfo = new PropertySyncInfo(SceneObjectPartSyncProperties.GroupPosition, initValue, lastUpdateTimestamp, lastUpdateSyncID);
|
||||
m_propertiesSyncInfo.Add(SceneObjectPartSyncProperties.Position, syncInfo);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!part.GroupPosition.Equals(m_propertiesSyncInfo[SceneObjectPartSyncProperties.GroupPosition].LastUpdateValue))
|
||||
{
|
||||
//Need to reset SOP.GroupPosition to the cached value here
|
||||
//Set the timestamp and syncID to be the same with Position
|
||||
long lastUpdateTimestamp = m_propertiesSyncInfo[SceneObjectPartSyncProperties.Position].LastUpdateTimeStamp;
|
||||
string lastUpdateSyncID = m_propertiesSyncInfo[SceneObjectPartSyncProperties.Position].LastUpdateSyncID;
|
||||
//long lastUpdateTimestamp = m_propertiesSyncInfo[SceneObjectPartSyncProperties.Position].LastUpdateTimeStamp;
|
||||
//string lastUpdateSyncID = m_propertiesSyncInfo[SceneObjectPartSyncProperties.Position].LastUpdateSyncID;
|
||||
m_propertiesSyncInfo[SceneObjectPartSyncProperties.GroupPosition].UpdateSyncInfoByLocal(lastUpdateTimestamp,
|
||||
lastUpdateSyncID, (Object)part.GroupPosition);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3686,7 +3686,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
m_parentGroup.stopLookAt();
|
||||
|
||||
//m_parentGroup.ScheduleGroupForTerseUpdate();
|
||||
m_parentGroup.ScheduleGroupForTerseUpdate(new List<SceneObjectPartSyncProperties>(){SceneObjectPartSyncProperties.None});//in stopLookAt(), PhysicsActor shall already take care of tainting which properties have been updated
|
||||
m_parentGroup.ScheduleGroupForTerseUpdate(null);//in stopLookAt(), PhysicsActor shall already take care of tainting which properties have been updated
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -3710,7 +3710,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
m_parentGroup.stopMoveToTarget();
|
||||
|
||||
//m_parentGroup.ScheduleGroupForTerseUpdate();
|
||||
m_parentGroup.ScheduleGroupForTerseUpdate(new List<SceneObjectPartSyncProperties>(){SceneObjectPartSyncProperties.None}); //in stopMoveToTarget(), PhysicsActor shall already take care of tainting which properties have been updated
|
||||
m_parentGroup.ScheduleGroupForTerseUpdate(null); //in stopMoveToTarget(), PhysicsActor shall already take care of tainting which properties have been updated
|
||||
//m_parentGroup.ScheduleGroupForFullUpdate();
|
||||
}
|
||||
|
||||
|
@ -4271,7 +4271,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
Vector3 newPos = new Vector3(pos.X, pos.Y, pos.Z);
|
||||
GroupPosition = newPos;
|
||||
//ScheduleTerseUpdate();
|
||||
ScheduleFullUpdate(new List<SceneObjectPartSyncProperties>(){SceneObjectPartSyncProperties.GroupPosition});
|
||||
ScheduleTerseUpdate(new List<SceneObjectPartSyncProperties>() { SceneObjectPartSyncProperties.GroupPosition });
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -4304,7 +4304,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
|
||||
OffsetPosition = newPos;
|
||||
//ScheduleTerseUpdate();
|
||||
ScheduleFullUpdate(new List<SceneObjectPartSyncProperties>(){SceneObjectPartSyncProperties.OffsetPosition});
|
||||
ScheduleTerseUpdate(new List<SceneObjectPartSyncProperties>() { SceneObjectPartSyncProperties.OffsetPosition });
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -4613,7 +4613,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
RotationOffset = rot;
|
||||
ParentGroup.HasGroupChanged = true;
|
||||
//ScheduleTerseUpdate();
|
||||
ScheduleFullUpdate(new List<SceneObjectPartSyncProperties>() {SceneObjectPartSyncProperties.RotationOffset});
|
||||
ScheduleTerseUpdate(new List<SceneObjectPartSyncProperties>() { SceneObjectPartSyncProperties.RotationOffset });
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -5169,6 +5169,22 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
return allProperties;
|
||||
}
|
||||
|
||||
public static HashSet<SceneObjectPartSyncProperties> GetTerseUpdateProperties()
|
||||
{
|
||||
HashSet<SceneObjectPartSyncProperties> allProperties = new HashSet<SceneObjectPartSyncProperties>();
|
||||
allProperties.Add(SceneObjectPartSyncProperties.Velocity);
|
||||
allProperties.Add(SceneObjectPartSyncProperties.RotationOffset);
|
||||
allProperties.Add(SceneObjectPartSyncProperties.AngularVelocity);
|
||||
allProperties.Add(SceneObjectPartSyncProperties.OffsetPosition);
|
||||
allProperties.Add(SceneObjectPartSyncProperties.Scale);
|
||||
allProperties.Add(SceneObjectPartSyncProperties.GroupPosition);
|
||||
allProperties.Add(SceneObjectPartSyncProperties.Orientation);
|
||||
allProperties.Add(SceneObjectPartSyncProperties.RotationalVelocity);
|
||||
allProperties.Add(SceneObjectPartSyncProperties.Position);
|
||||
|
||||
return allProperties;
|
||||
}
|
||||
|
||||
#endregion SceneObjectPartSyncProperties categorization
|
||||
|
||||
/*
|
||||
|
|
|
@ -3329,7 +3329,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
m_host.AddScriptLPS(1);
|
||||
m_host.AngularVelocity = new Vector3((float)(axis.x * spinrate), (float)(axis.y * spinrate), (float)(axis.z * spinrate));
|
||||
//m_host.ScheduleTerseUpdate();
|
||||
m_host.ScheduleFullUpdate(new List<SceneObjectPartSyncProperties>(){SceneObjectPartSyncProperties.AngularVelocity});
|
||||
m_host.ScheduleSyncUpdate(new List<SceneObjectPartSyncProperties>() { SceneObjectPartSyncProperties.AngularVelocity });
|
||||
m_host.SendTerseUpdateToAllClients();
|
||||
m_host.ParentGroup.HasGroupChanged = true;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue