fill data for llDetected funtions of collisions closer to the event. (xengine wasn't update with this on merge bc was not used there). fix some parameters
parent
60b08b51b6
commit
9102f6e5da
|
@ -2712,8 +2712,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
detobj.velVector = obj.Velocity;
|
detobj.velVector = obj.Velocity;
|
||||||
detobj.colliderType = 0;
|
detobj.colliderType = 0;
|
||||||
detobj.groupUUID = obj.GroupID;
|
detobj.groupUUID = obj.GroupID;
|
||||||
detobj.linkNumber = LinkNum; // pass my link number
|
detobj.linkNumber = LinkNum;
|
||||||
|
|
||||||
return detobj;
|
return detobj;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2726,9 +2725,13 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
detobj.posVector = av.AbsolutePosition;
|
detobj.posVector = av.AbsolutePosition;
|
||||||
detobj.rotQuat = av.Rotation;
|
detobj.rotQuat = av.Rotation;
|
||||||
detobj.velVector = av.Velocity;
|
detobj.velVector = av.Velocity;
|
||||||
detobj.colliderType = 0;
|
detobj.colliderType = av.isNPC ? 0x20 : 0x1; // OpenSim\Region\ScriptEngine\Shared\Helpers.cs
|
||||||
|
if(av.IsSatOnObject)
|
||||||
|
detobj.colliderType |= 0x4; //passive
|
||||||
|
else if(detobj.velVector != Vector3.Zero)
|
||||||
|
detobj.colliderType |= 0x2; //active
|
||||||
detobj.groupUUID = av.ControllingClient.ActiveGroupId;
|
detobj.groupUUID = av.ControllingClient.ActiveGroupId;
|
||||||
detobj.linkNumber = LinkNum; // pass my link number
|
detobj.linkNumber = LinkNum;
|
||||||
|
|
||||||
return detobj;
|
return detobj;
|
||||||
}
|
}
|
||||||
|
@ -2842,7 +2845,8 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
if (ParentGroup.Scene == null || ParentGroup.IsDeleted)
|
if (ParentGroup.Scene == null || ParentGroup.IsDeleted)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// single threaded here
|
// this a thread from physics ( heartbeat )
|
||||||
|
|
||||||
CollisionEventUpdate a = (CollisionEventUpdate)e;
|
CollisionEventUpdate a = (CollisionEventUpdate)e;
|
||||||
Dictionary<uint, ContactPoint> collissionswith = a.m_objCollisionList;
|
Dictionary<uint, ContactPoint> collissionswith = a.m_objCollisionList;
|
||||||
List<uint> thisHitColliders = new List<uint>();
|
List<uint> thisHitColliders = new List<uint>();
|
||||||
|
@ -2860,7 +2864,6 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
}
|
}
|
||||||
m_lastColliders.Clear();
|
m_lastColliders.Clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
List<CollisionForSoundInfo> soundinfolist = new List<CollisionForSoundInfo>();
|
List<CollisionForSoundInfo> soundinfolist = new List<CollisionForSoundInfo>();
|
||||||
|
@ -5256,7 +5259,7 @@ SendFullUpdateToClient(remoteClient, Position) ignores position parameter
|
||||||
{
|
{
|
||||||
// subscribe to physics updates.
|
// subscribe to physics updates.
|
||||||
pa.OnCollisionUpdate += PhysicsCollision;
|
pa.OnCollisionUpdate += PhysicsCollision;
|
||||||
pa.SubscribeEvents(50); // 20 reports per second
|
pa.SubscribeEvents(100); // 10 reports per second
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
@ -6037,7 +6037,11 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
detobj.posVector = av.AbsolutePosition;
|
detobj.posVector = av.AbsolutePosition;
|
||||||
detobj.rotQuat = av.Rotation;
|
detobj.rotQuat = av.Rotation;
|
||||||
detobj.velVector = av.Velocity;
|
detobj.velVector = av.Velocity;
|
||||||
detobj.colliderType = 0;
|
detobj.colliderType = av.isNPC ? 0x20 : 0x1; // OpenSim\Region\ScriptEngine\Shared\Helpers.cs
|
||||||
|
if(av.IsSatOnObject)
|
||||||
|
detobj.colliderType |= 0x4; //passive
|
||||||
|
else if(detobj.velVector != Vector3.Zero)
|
||||||
|
detobj.colliderType |= 0x2; //active
|
||||||
detobj.groupUUID = av.ControllingClient.ActiveGroupId;
|
detobj.groupUUID = av.ControllingClient.ActiveGroupId;
|
||||||
detobj.linkNumber = 0;
|
detobj.linkNumber = 0;
|
||||||
|
|
||||||
|
@ -6129,9 +6133,6 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
List<uint> thisHitColliders = new List<uint>();
|
List<uint> thisHitColliders = new List<uint>();
|
||||||
List<uint> endedColliders = new List<uint>();
|
List<uint> endedColliders = new List<uint>();
|
||||||
List<uint> startedColliders = new List<uint>();
|
List<uint> startedColliders = new List<uint>();
|
||||||
List<CollisionForSoundInfo> soundinfolist = new List<CollisionForSoundInfo>();
|
|
||||||
CollisionForSoundInfo soundinfo;
|
|
||||||
ContactPoint curcontact;
|
|
||||||
|
|
||||||
if (coldata.Count == 0)
|
if (coldata.Count == 0)
|
||||||
{
|
{
|
||||||
|
@ -6144,30 +6145,41 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
}
|
}
|
||||||
m_lastColliders.Clear();
|
m_lastColliders.Clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
bool candoparcelSound = ParcelAllowThisAvatarSounds;
|
List<CollisionForSoundInfo> soundinfolist = new List<CollisionForSoundInfo>();
|
||||||
|
if(ParcelAllowThisAvatarSounds)
|
||||||
foreach (uint id in coldata.Keys)
|
|
||||||
{
|
{
|
||||||
thisHitColliders.Add(id);
|
CollisionForSoundInfo soundinfo;
|
||||||
if (!m_lastColliders.Contains(id))
|
ContactPoint curcontact;
|
||||||
|
|
||||||
|
foreach (uint id in coldata.Keys)
|
||||||
{
|
{
|
||||||
startedColliders.Add(id);
|
thisHitColliders.Add(id);
|
||||||
curcontact = coldata[id];
|
if (!m_lastColliders.Contains(id))
|
||||||
if (candoparcelSound && Math.Abs(curcontact.RelativeSpeed) > 0.2)
|
|
||||||
{
|
{
|
||||||
soundinfo = new CollisionForSoundInfo();
|
startedColliders.Add(id);
|
||||||
soundinfo.colliderID = id;
|
curcontact = coldata[id];
|
||||||
soundinfo.position = curcontact.Position;
|
if (Math.Abs(curcontact.RelativeSpeed) > 0.2)
|
||||||
soundinfo.relativeVel = curcontact.RelativeSpeed;
|
{
|
||||||
soundinfolist.Add(soundinfo);
|
soundinfo = new CollisionForSoundInfo();
|
||||||
|
soundinfo.colliderID = id;
|
||||||
|
soundinfo.position = curcontact.Position;
|
||||||
|
soundinfo.relativeVel = curcontact.RelativeSpeed;
|
||||||
|
soundinfolist.Add(soundinfo);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//m_log.Debug("[SCENE PRESENCE]: Collided with:" + localid.ToString() + " at depth of: " + collissionswith[localid].ToString());
|
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
foreach (uint id in coldata.Keys)
|
||||||
|
{
|
||||||
|
thisHitColliders.Add(id);
|
||||||
|
if (!m_lastColliders.Contains(id))
|
||||||
|
startedColliders.Add(id);
|
||||||
|
}
|
||||||
|
}
|
||||||
// calculate things that ended colliding
|
// calculate things that ended colliding
|
||||||
foreach (uint localID in m_lastColliders)
|
foreach (uint localID in m_lastColliders)
|
||||||
{
|
{
|
||||||
|
|
|
@ -213,24 +213,6 @@ namespace OpenSim.Region.ScriptEngine.Shared
|
||||||
if (presence.PresenceType == PresenceType.Npc)
|
if (presence.PresenceType == PresenceType.Npc)
|
||||||
Type = 0x20;
|
Type = 0x20;
|
||||||
|
|
||||||
// Cope Impl. We don't use OS_NPC.
|
|
||||||
//if (presence.PresenceType != PresenceType.Npc)
|
|
||||||
//{
|
|
||||||
// Type = AGENT;
|
|
||||||
//}
|
|
||||||
//else
|
|
||||||
//{
|
|
||||||
// Type = OS_NPC;
|
|
||||||
|
|
||||||
// INPCModule npcModule = scene.RequestModuleInterface<INPCModule>();
|
|
||||||
// INPC npcData = npcModule.GetNPC(presence.UUID, presence.Scene);
|
|
||||||
|
|
||||||
// if (npcData.SenseAsAgent)
|
|
||||||
// {
|
|
||||||
// Type |= AGENT;
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
|
|
||||||
if (presence.Velocity != Vector3.Zero)
|
if (presence.Velocity != Vector3.Zero)
|
||||||
Type |= ACTIVE;
|
Type |= ACTIVE;
|
||||||
|
|
||||||
|
@ -267,6 +249,64 @@ namespace OpenSim.Region.ScriptEngine.Shared
|
||||||
|
|
||||||
Velocity = new LSL_Types.Vector3(part.Velocity);
|
Velocity = new LSL_Types.Vector3(part.Velocity);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void Populate(Scene scene, DetectedObject obj)
|
||||||
|
{
|
||||||
|
if(obj.keyUUID == UUID.Zero) // land
|
||||||
|
{
|
||||||
|
Position = new LSL_Types.Vector3(obj.posVector);
|
||||||
|
Rotation.s = 1.0;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if((obj.colliderType & 0x21) != 0) // avatar or npc
|
||||||
|
{
|
||||||
|
ScenePresence presence = scene.GetScenePresence(obj.keyUUID);
|
||||||
|
if (presence == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
Name = obj.nameStr;
|
||||||
|
Owner = obj.keyUUID;
|
||||||
|
Group = obj.groupUUID;
|
||||||
|
Position = new LSL_Types.Vector3(obj.posVector);
|
||||||
|
Rotation = new LSL_Types.Quaternion(obj.rotQuat);
|
||||||
|
Velocity = new LSL_Types.Vector3(obj.velVector);
|
||||||
|
LinkNum = obj.linkNumber;
|
||||||
|
Type = obj.colliderType;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
SceneObjectPart part = scene.GetSceneObjectPart(obj.keyUUID);
|
||||||
|
if(part == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
Name = obj.nameStr;
|
||||||
|
Owner = obj.keyUUID;
|
||||||
|
Group = obj.groupUUID;
|
||||||
|
Position = new LSL_Types.Vector3(obj.posVector);
|
||||||
|
Rotation = new LSL_Types.Quaternion(obj.rotQuat);
|
||||||
|
Velocity = new LSL_Types.Vector3(obj.velVector);
|
||||||
|
LinkNum = obj.linkNumber;
|
||||||
|
if(obj.velVector == Vector3.Zero)
|
||||||
|
Type = 4;
|
||||||
|
else
|
||||||
|
Type = 2;
|
||||||
|
|
||||||
|
part = part.ParentGroup.RootPart;
|
||||||
|
foreach (SceneObjectPart p in part.ParentGroup.Parts)
|
||||||
|
{
|
||||||
|
if (p.Inventory.ContainsScripts())
|
||||||
|
{
|
||||||
|
// at sl a physical prim is active also if has active scripts
|
||||||
|
// assuming all scripts are in run state to save time
|
||||||
|
if((part.Flags & PrimFlags.Physics) != 0 )
|
||||||
|
Type = 10; // script + active
|
||||||
|
else
|
||||||
|
Type |= SCRIPTED; // Scripted
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
@ -244,7 +244,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
|
||||||
{
|
{
|
||||||
DetectParams d = new DetectParams();
|
DetectParams d = new DetectParams();
|
||||||
d.Key =detobj.keyUUID;
|
d.Key =detobj.keyUUID;
|
||||||
d.Populate(myScriptEngine.World);
|
d.Populate(myScriptEngine.World, detobj);
|
||||||
d.LinkNum = detobj.linkNumber; // do it here since currently linknum is collided part
|
d.LinkNum = detobj.linkNumber; // do it here since currently linknum is collided part
|
||||||
det.Add(d);
|
det.Add(d);
|
||||||
}
|
}
|
||||||
|
@ -264,9 +264,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
|
||||||
foreach (DetectedObject detobj in col.Colliders)
|
foreach (DetectedObject detobj in col.Colliders)
|
||||||
{
|
{
|
||||||
DetectParams d = new DetectParams();
|
DetectParams d = new DetectParams();
|
||||||
d.Key =detobj.keyUUID;
|
d.Populate(myScriptEngine.World, detobj);
|
||||||
d.Populate(myScriptEngine.World);
|
|
||||||
d.LinkNum = detobj.linkNumber; // do it here since currently linknum is collided part
|
|
||||||
det.Add(d);
|
det.Add(d);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -284,9 +282,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
|
||||||
foreach (DetectedObject detobj in col.Colliders)
|
foreach (DetectedObject detobj in col.Colliders)
|
||||||
{
|
{
|
||||||
DetectParams d = new DetectParams();
|
DetectParams d = new DetectParams();
|
||||||
d.Key =detobj.keyUUID;
|
d.Populate(myScriptEngine.World, detobj);
|
||||||
d.Populate(myScriptEngine.World);
|
|
||||||
d.LinkNum = detobj.linkNumber; // do it here since currently linknum is collided part
|
|
||||||
det.Add(d);
|
det.Add(d);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -304,8 +300,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
|
||||||
foreach (DetectedObject detobj in col.Colliders)
|
foreach (DetectedObject detobj in col.Colliders)
|
||||||
{
|
{
|
||||||
DetectParams d = new DetectParams();
|
DetectParams d = new DetectParams();
|
||||||
d.Position = detobj.posVector;
|
d.Populate(myScriptEngine.World, detobj);
|
||||||
d.Populate(myScriptEngine.World);
|
|
||||||
det.Add(d);
|
det.Add(d);
|
||||||
myScriptEngine.PostObjectEvent(localID, new EventParams(
|
myScriptEngine.PostObjectEvent(localID, new EventParams(
|
||||||
"land_collision_start",
|
"land_collision_start",
|
||||||
|
@ -322,8 +317,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
|
||||||
foreach (DetectedObject detobj in col.Colliders)
|
foreach (DetectedObject detobj in col.Colliders)
|
||||||
{
|
{
|
||||||
DetectParams d = new DetectParams();
|
DetectParams d = new DetectParams();
|
||||||
d.Position = detobj.posVector;
|
d.Populate(myScriptEngine.World,detobj);
|
||||||
d.Populate(myScriptEngine.World);
|
|
||||||
det.Add(d);
|
det.Add(d);
|
||||||
myScriptEngine.PostObjectEvent(localID, new EventParams(
|
myScriptEngine.PostObjectEvent(localID, new EventParams(
|
||||||
"land_collision",
|
"land_collision",
|
||||||
|
@ -339,8 +333,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
|
||||||
foreach (DetectedObject detobj in col.Colliders)
|
foreach (DetectedObject detobj in col.Colliders)
|
||||||
{
|
{
|
||||||
DetectParams d = new DetectParams();
|
DetectParams d = new DetectParams();
|
||||||
d.Position = detobj.posVector;
|
d.Populate(myScriptEngine.World,detobj);
|
||||||
d.Populate(myScriptEngine.World);
|
|
||||||
det.Add(d);
|
det.Add(d);
|
||||||
myScriptEngine.PostObjectEvent(localID, new EventParams(
|
myScriptEngine.PostObjectEvent(localID, new EventParams(
|
||||||
"land_collision_end",
|
"land_collision_end",
|
||||||
|
|
Loading…
Reference in New Issue