Merge branch 'dev' of ssh://sceneapi@island.sciencesim.com/home/sceneapi/sceneapi into dev
commit
b7dc2af5e6
|
@ -245,10 +245,12 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
|||
Watchdog.StartThread(IncomingPacketHandler, "Incoming Packets (" + m_scene.RegionInfo.RegionName + ")", ThreadPriority.Normal, false);
|
||||
Watchdog.StartThread(OutgoingPacketHandler, "Outgoing Packets (" + m_scene.RegionInfo.RegionName + ")", ThreadPriority.Normal, false);
|
||||
m_elapsedMSSinceLastStatReport = Environment.TickCount;
|
||||
/*
|
||||
System.Timers.Timer packet_type_timer = new System.Timers.Timer(60000);
|
||||
packet_type_timer.Elapsed +=new System.Timers.ElapsedEventHandler(packet_type_timer_Elapsed);
|
||||
packet_type_timer.AutoReset = true;
|
||||
packet_type_timer.Start();
|
||||
*/
|
||||
}
|
||||
|
||||
void packet_type_timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
|
||||
|
@ -256,7 +258,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
|||
for (int i = 0; i < 9; ++i)
|
||||
{
|
||||
int val = Interlocked.Exchange(ref OutgoingPacket.CatCounts[i], 0);
|
||||
m_log.WarnFormat("OutgoingPacket type {0} count = {1}", i, val);
|
||||
m_log.DebugFormat("OutgoingPacket type {0} count = {1}", i, val);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -13,6 +13,7 @@ using OpenSim.Region.CoreModules.Framework.InterfaceCommander;
|
|||
using OpenSim.Region.Framework.Interfaces;
|
||||
using OpenSim.Region.Framework.Scenes;
|
||||
using OpenSim.Region.Framework.Scenes.Serialization;
|
||||
using OpenSim.Region.Physics.Manager;
|
||||
using OpenSim.Services.Interfaces;
|
||||
using log4net;
|
||||
using System.Net;
|
||||
|
@ -618,6 +619,9 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
|
|||
case EventManager.EventNames.Attach:
|
||||
OnLocalAttach((uint)evArgs[0], (UUID)evArgs[1], (UUID)evArgs[2]);
|
||||
return;
|
||||
case EventManager.EventNames.PhysicsCollision:
|
||||
OnLocalPhysicsCollision((UUID)evArgs[0], (OSDArray)evArgs[1]);
|
||||
return;
|
||||
default:
|
||||
return;
|
||||
}
|
||||
|
@ -1749,6 +1753,7 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
|
|||
case SymmetricSyncMessage.MsgType.ObjectGrabbing:
|
||||
case SymmetricSyncMessage.MsgType.ObjectDeGrab:
|
||||
case SymmetricSyncMessage.MsgType.Attach:
|
||||
case SymmetricSyncMessage.MsgType.PhysicsCollision:
|
||||
{
|
||||
HandleRemoteEvent(msg, senderActorID);
|
||||
return;
|
||||
|
@ -2198,6 +2203,9 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
|
|||
case SymmetricSyncMessage.MsgType.Attach:
|
||||
HandleRemoteEvent_OnAttach(init_actorID, evSeqNum, data);
|
||||
break;
|
||||
case SymmetricSyncMessage.MsgType.PhysicsCollision:
|
||||
HandleRemoteEvent_PhysicsCollision(init_actorID, evSeqNum, data);
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -2504,7 +2512,33 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
|
|||
|
||||
uint localID = part.LocalId;
|
||||
m_scene.EventManager.TriggerOnAttachLocally(localID, itemID, avatarID);
|
||||
}
|
||||
|
||||
private void HandleRemoteEvent_PhysicsCollision(string actorID, ulong evSeqNum, OSDMap data)
|
||||
{
|
||||
UUID primUUID = data["primUUID"].AsUUID();
|
||||
OSDArray collisionLocalIDs = (OSDArray)data["collisionLocalIDs"];
|
||||
|
||||
SceneObjectPart part = m_scene.GetSceneObjectPart(primUUID);
|
||||
if (part == null)
|
||||
{
|
||||
m_log.WarnFormat("{0}: HandleRemoteEvent_PhysicsCollision: no part with UUID {1} found", LogHeader, primUUID);
|
||||
return;
|
||||
}
|
||||
if (collisionLocalIDs == null)
|
||||
{
|
||||
m_log.WarnFormat("{0}: HandleRemoteEvent_PhysicsCollision: no collisionLocalIDs", LogHeader);
|
||||
return;
|
||||
}
|
||||
|
||||
// Build up the collision list. The contact point is ignored so we generate some default.
|
||||
CollisionEventUpdate e = new CollisionEventUpdate();
|
||||
foreach (uint collisionID in collisionLocalIDs)
|
||||
{
|
||||
// e.addCollider(collisionID, new ContactPoint());
|
||||
e.addCollider(collisionID, new ContactPoint(Vector3.Zero, Vector3.UnitX, 0.03f));
|
||||
}
|
||||
part.PhysicsCollisionLocally(e);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -2655,6 +2689,14 @@ 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 OnLocalGrabObject(uint localID, uint originalID, Vector3 offsetPos, IClientAPI remoteClient, SurfaceTouchEventArgs surfaceArgs)
|
||||
{
|
||||
/*
|
||||
|
|
|
@ -47,6 +47,7 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
|
|||
ObjectGrabbing,
|
||||
ObjectDeGrab,
|
||||
Attach,
|
||||
PhysicsCollision,
|
||||
//contorl command
|
||||
SyncStateReport,
|
||||
}
|
||||
|
|
|
@ -60,7 +60,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
ObjectGrabbing,
|
||||
ObjectDeGrab,
|
||||
Attach, //attaching object to avatar
|
||||
|
||||
PhysicsCollision,
|
||||
}
|
||||
|
||||
public EventManager(Scene scene)
|
||||
|
|
|
@ -2202,7 +2202,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
{
|
||||
}
|
||||
|
||||
public void PhysicsCollision(EventArgs e)
|
||||
public virtual void PhysicsCollision(EventArgs e)
|
||||
{
|
||||
// single threaded here
|
||||
if (e == null)
|
||||
|
@ -5502,6 +5502,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
}
|
||||
|
||||
localPart.AggregateScriptEvents = updatedPart.AggregateScriptEvents;
|
||||
aggregateScriptEventSubscriptions();
|
||||
|
||||
m_bucketSyncInfoList[bucketName].LastUpdateTimeStamp = updatedPart.BucketSyncInfoList[bucketName].LastUpdateTimeStamp;
|
||||
m_bucketSyncInfoList[bucketName].LastUpdateActorID = updatedPart.BucketSyncInfoList[bucketName].LastUpdateActorID;
|
||||
|
@ -5525,6 +5526,36 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
m_bucketSyncInfoList[bucketName].TaintBucketBySync();
|
||||
}
|
||||
|
||||
// Do any subscriptions based on the AggregateScriptEvents
|
||||
protected void aggregateScriptEventSubscriptions()
|
||||
{
|
||||
if (
|
||||
((AggregateScriptEvents & scriptEvents.collision) != 0) ||
|
||||
((AggregateScriptEvents & scriptEvents.collision_end) != 0) ||
|
||||
((AggregateScriptEvents & scriptEvents.collision_start) != 0) ||
|
||||
((AggregateScriptEvents & scriptEvents.land_collision_start) != 0) ||
|
||||
((AggregateScriptEvents & scriptEvents.land_collision) != 0) ||
|
||||
((AggregateScriptEvents & scriptEvents.land_collision_end) != 0) ||
|
||||
(CollisionSound != UUID.Zero)
|
||||
)
|
||||
{
|
||||
// subscribe to physics updates.
|
||||
if (PhysActor != null)
|
||||
{
|
||||
PhysActor.OnCollisionUpdate += PhysicsCollision;
|
||||
PhysActor.SubscribeEvents(1000);
|
||||
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (PhysActor != null)
|
||||
{
|
||||
PhysActor.UnSubscribeEvents();
|
||||
PhysActor.OnCollisionUpdate -= PhysicsCollision;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//NOTE: only touch the properties and BucketSyncInfo that is related to the given bucketName. Other properties and
|
||||
//buckets may not be filled at all in "updatedPart".
|
||||
|
@ -5951,6 +5982,30 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public override void PhysicsCollision(EventArgs e)
|
||||
{
|
||||
if (m_parentGroup.Scene.RegionSyncModule != null)
|
||||
{
|
||||
CollisionEventUpdate a = (CollisionEventUpdate)e;
|
||||
Dictionary<uint, ContactPoint> collisionswith = a.m_objCollisionList;
|
||||
OSDArray collisionLocalIDs = new OSDArray();
|
||||
foreach (uint collisionObject in collisionswith.Keys)
|
||||
{
|
||||
collisionLocalIDs.Add(collisionObject);
|
||||
}
|
||||
object[] eventArgs = new object[2];
|
||||
eventArgs[0] = this.UUID;
|
||||
eventArgs[1] = collisionLocalIDs;
|
||||
m_parentGroup.Scene.RegionSyncModule.PublishSceneEvent(EventManager.EventNames.PhysicsCollision, eventArgs);
|
||||
}
|
||||
PhysicsCollisionLocally(e);
|
||||
}
|
||||
|
||||
public void PhysicsCollisionLocally(EventArgs e)
|
||||
{
|
||||
base.PhysicsCollision(e);
|
||||
}
|
||||
}
|
||||
|
||||
//end of SYMMETRIC SYNC
|
||||
|
|
Loading…
Reference in New Issue