From 750ad2d3afd6fcf32a9e04794d860e117559a78f Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Fri, 14 Dec 2012 22:15:40 +0000
Subject: Fix issue where calling llVolumeDetect(FALSE) would not remove
phantom flag, causing subsequent issues if physics was re-enabled.
Added regression tests
Addresses http://opensimulator.org/mantis/view.php?id=6365
---
OpenSim/Region/Framework/Scenes/SceneObjectPart.cs | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
(limited to 'OpenSim/Region/Framework/Scenes/SceneObjectPart.cs')
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
index f79ac96..ff67d6d 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
@@ -3993,13 +3993,14 @@ namespace OpenSim.Region.Framework.Scenes
VolumeDetectActive = true;
}
}
- else
+ else if (SetVD != wasVD)
{
// Remove VolumeDetect in any case. Note, it's safe to call SetVolumeDetect as often as you like
// (mumbles, well, at least if you have infinte CPU powers :-))
if (pa != null)
pa.SetVolumeDetect(0);
+ RemFlag(PrimFlags.Phantom);
VolumeDetectActive = false;
}
--
cgit v1.1
From 494e6a5f114372ca417607ff6af3c6d5a3aaae9e Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Sat, 15 Dec 2012 00:30:17 +0000
Subject: minor: If the physics module tells us that an object has gone out of
bounds, more helpfully log the name, id, position and region of that object.
---
OpenSim/Region/Framework/Scenes/SceneObjectPart.cs | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
(limited to 'OpenSim/Region/Framework/Scenes/SceneObjectPart.cs')
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
index ff67d6d..af7fae3 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
@@ -2266,11 +2266,14 @@ namespace OpenSim.Region.Framework.Scenes
public void PhysicsOutOfBounds(Vector3 pos)
{
- m_log.Error("[PHYSICS]: Physical Object went out of bounds.");
+ // Note: This is only being called on the root prim at this time.
+
+ m_log.ErrorFormat(
+ "[SCENE OBJECT PART]: Physical object {0}, localID {1} went out of bounds at {2} in {3}. Stopping at {4} and making non-physical.",
+ Name, LocalId, pos, ParentGroup.Scene.Name, AbsolutePosition);
RemFlag(PrimFlags.Physics);
DoPhysicsPropertyUpdate(false, true);
- //ParentGroup.Scene.PhysicsScene.AddPhysicsActorTaint(PhysActor);
}
public void PhysicsRequestingTerseUpdate()
--
cgit v1.1
From d15bfcf61404914c3d64c965db9e66295655bea5 Mon Sep 17 00:00:00 2001
From: Robert Adams
Date: Tue, 18 Dec 2012 14:59:41 -0800
Subject: Replace axis rotation numeric constants (STATUS_ROTATE_XYZ) with
symbols. Also made it so llSetStatus() can individually enable disable
rotation axi using the bitmask of flags.
---
OpenSim/Region/Framework/Scenes/SceneObjectPart.cs | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
(limited to 'OpenSim/Region/Framework/Scenes/SceneObjectPart.cs')
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
index af7fae3..7a97e5f 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
@@ -1918,11 +1918,11 @@ namespace OpenSim.Region.Framework.Scenes
public int GetAxisRotation(int axis)
{
//Cannot use ScriptBaseClass constants as no referance to it currently.
- if (axis == 2)//STATUS_ROTATE_X
+ if (axis == (int)SceneObjectGroup.axisSelect.STATUS_ROTATE_X)
return STATUS_ROTATE_X;
- if (axis == 4)//STATUS_ROTATE_Y
+ if (axis == (int)SceneObjectGroup.axisSelect.STATUS_ROTATE_Y)
return STATUS_ROTATE_Y;
- if (axis == 8)//STATUS_ROTATE_Z
+ if (axis == (int)SceneObjectGroup.axisSelect.STATUS_ROTATE_Z)
return STATUS_ROTATE_Z;
return 0;
@@ -2671,13 +2671,13 @@ namespace OpenSim.Region.Framework.Scenes
ParentGroup.SetAxisRotation(axis, rotate);
//Cannot use ScriptBaseClass constants as no referance to it currently.
- if (axis == 2)//STATUS_ROTATE_X
+ if ((axis & (int)SceneObjectGroup.axisSelect.STATUS_ROTATE_X) != 0)
STATUS_ROTATE_X = rotate;
- if (axis == 4)//STATUS_ROTATE_Y
+ if ((axis & (int)SceneObjectGroup.axisSelect.STATUS_ROTATE_Y) != 0)
STATUS_ROTATE_Y = rotate;
- if (axis == 8)//STATUS_ROTATE_Z
+ if ((axis & (int)SceneObjectGroup.axisSelect.STATUS_ROTATE_Z) != 0)
STATUS_ROTATE_Z = rotate;
}
--
cgit v1.1
From 9503383887d6af871e843cbcbb141a50df56f551 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Fri, 4 Jan 2013 20:34:39 +0000
Subject: Fix llGetLinkKey() to return the last sat avatar as the last link
number.
As per http://wiki.secondlife.com/wiki/LlGetLinkKey
This is done by keeping a scene-object wide list of sitters.
This also fixes bugs in this function where linknums 0 and 1 weren't treated properly if there were sitting avatars on a single prim.
This also fixes a minor race condition for multiple concurrent sitters on a prim with no current sitters by locking on the object-wide list rather than individual sop lists
Addresses http://opensimulator.org/mantis/view.php?id=6477
---
OpenSim/Region/Framework/Scenes/SceneObjectPart.cs | 79 +++++++++++-----------
1 file changed, 39 insertions(+), 40 deletions(-)
(limited to 'OpenSim/Region/Framework/Scenes/SceneObjectPart.cs')
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
index 7a97e5f..232861e 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
@@ -1256,7 +1256,7 @@ namespace OpenSim.Region.Framework.Scenes
public UUID SitTargetAvatar { get; set; }
///
- /// IDs of all avatars start on this object part.
+ /// IDs of all avatars sat on this part.
///
///
/// We need to track this so that we can stop sat upon prims from being attached.
@@ -4504,18 +4504,22 @@ namespace OpenSim.Region.Framework.Scenes
///
protected internal bool AddSittingAvatar(UUID avatarId)
{
- if (IsSitTargetSet && SitTargetAvatar == UUID.Zero)
- SitTargetAvatar = avatarId;
+ lock (ParentGroup.m_sittingAvatars)
+ {
+ if (IsSitTargetSet && SitTargetAvatar == UUID.Zero)
+ SitTargetAvatar = avatarId;
- HashSet sittingAvatars = m_sittingAvatars;
+ if (m_sittingAvatars == null)
+ m_sittingAvatars = new HashSet();
- if (sittingAvatars == null)
- sittingAvatars = new HashSet();
+ if (m_sittingAvatars.Add(avatarId))
+ {
+ ParentGroup.m_sittingAvatars.Add(avatarId);
- lock (sittingAvatars)
- {
- m_sittingAvatars = sittingAvatars;
- return m_sittingAvatars.Add(avatarId);
+ return true;
+ }
+
+ return false;
}
}
@@ -4529,27 +4533,26 @@ namespace OpenSim.Region.Framework.Scenes
///
protected internal bool RemoveSittingAvatar(UUID avatarId)
{
- if (SitTargetAvatar == avatarId)
- SitTargetAvatar = UUID.Zero;
-
- HashSet sittingAvatars = m_sittingAvatars;
+ lock (ParentGroup.m_sittingAvatars)
+ {
+ if (SitTargetAvatar == avatarId)
+ SitTargetAvatar = UUID.Zero;
- // This can occur under a race condition where another thread
- if (sittingAvatars == null)
- return false;
+ if (m_sittingAvatars == null)
+ return false;
- lock (sittingAvatars)
- {
- if (sittingAvatars.Remove(avatarId))
+ if (m_sittingAvatars.Remove(avatarId))
{
- if (sittingAvatars.Count == 0)
+ if (m_sittingAvatars.Count == 0)
m_sittingAvatars = null;
+ ParentGroup.m_sittingAvatars.Remove(avatarId);
+
return true;
}
- }
- return false;
+ return false;
+ }
}
///
@@ -4559,16 +4562,12 @@ namespace OpenSim.Region.Framework.Scenes
/// A hashset of the sitting avatars. Returns null if there are no sitting avatars.
public HashSet GetSittingAvatars()
{
- HashSet sittingAvatars = m_sittingAvatars;
-
- if (sittingAvatars == null)
- {
- return null;
- }
- else
+ lock (ParentGroup.m_sittingAvatars)
{
- lock (sittingAvatars)
- return new HashSet(sittingAvatars);
+ if (m_sittingAvatars == null)
+ return null;
+ else
+ return new HashSet(m_sittingAvatars);
}
}
@@ -4579,13 +4578,13 @@ namespace OpenSim.Region.Framework.Scenes
///
public int GetSittingAvatarsCount()
{
- HashSet sittingAvatars = m_sittingAvatars;
-
- if (sittingAvatars == null)
- return 0;
-
- lock (sittingAvatars)
- return sittingAvatars.Count;
+ lock (ParentGroup.m_sittingAvatars)
+ {
+ if (m_sittingAvatars == null)
+ return 0;
+ else
+ return m_sittingAvatars.Count;
+ }
}
}
-}
+}
\ No newline at end of file
--
cgit v1.1
From daacd4deed9630b67738b342078f0b334e74aa4b Mon Sep 17 00:00:00 2001
From: Robert Adams
Date: Wed, 9 Jan 2013 17:40:22 -0800
Subject: Fix exception reporting in SceneObjectPart so it logs what the
exception is rather than just saying it happened.
---
OpenSim/Region/Framework/Scenes/SceneObjectPart.cs | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
(limited to 'OpenSim/Region/Framework/Scenes/SceneObjectPart.cs')
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
index 232861e..44e8fdf 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
@@ -4050,9 +4050,9 @@ namespace OpenSim.Region.Framework.Scenes
rigidBody,
m_localId);
}
- catch
+ catch (Exception e)
{
- m_log.ErrorFormat("[SCENE]: caught exception meshing object {0}. Object set to phantom.", m_uuid);
+ m_log.ErrorFormat("[SCENE]: caught exception meshing object {0}. Object set to phantom. e={1}", m_uuid, e);
pa = null;
}
--
cgit v1.1
From 95c53ecae708c8f915e02c4f872c931efdd6c29a Mon Sep 17 00:00:00 2001
From: Robert Adams
Date: Mon, 21 Jan 2013 15:55:54 -0800
Subject: Have SOP and LSL_Api call the proper GetCenterOfMass and
GetGeometricCenter routines on the physics engine. Won't make a difference
for any existing scripts since ODE always returned Vector3.Zero.
---
OpenSim/Region/Framework/Scenes/SceneObjectPart.cs | 10 ++++++++++
1 file changed, 10 insertions(+)
(limited to 'OpenSim/Region/Framework/Scenes/SceneObjectPart.cs')
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
index 44e8fdf..e0ea344 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
@@ -1952,6 +1952,16 @@ namespace OpenSim.Region.Framework.Scenes
PhysicsActor pa = PhysActor;
if (pa != null)
+ return new Vector3(pa.GeometricCenter.X, pa.GeometricCenter.Y, pa.GeometricCenter.Z);
+ else
+ return new Vector3(0, 0, 0);
+ }
+
+ public Vector3 GetCenterOfMass()
+ {
+ PhysicsActor pa = PhysActor;
+
+ if (pa != null)
return new Vector3(pa.CenterOfMass.X, pa.CenterOfMass.Y, pa.CenterOfMass.Z);
else
return new Vector3(0, 0, 0);
--
cgit v1.1
From 878df52515ea3519130ba646a050c8d8c1f09b29 Mon Sep 17 00:00:00 2001
From: teravus
Date: Wed, 23 Jan 2013 21:58:51 -0500
Subject: * This makes the non-physics llCastRay 'better'. It's not
'correctly working', and if you look deep enough, you see that the results
are not really stable depending on the direction of the ray.
---
OpenSim/Region/Framework/Scenes/SceneObjectPart.cs | 1 +
1 file changed, 1 insertion(+)
(limited to 'OpenSim/Region/Framework/Scenes/SceneObjectPart.cs')
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
index e0ea344..6720635 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
@@ -3628,6 +3628,7 @@ namespace OpenSim.Region.Framework.Scenes
result.distance = distance2;
result.HitTF = true;
result.ipoint = q;
+ result.face = i;
//m_log.Info("[FACE]:" + i.ToString());
//m_log.Info("[POINT]: " + q.ToString());
//m_log.Info("[DIST]: " + distance2.ToString());
--
cgit v1.1
From 1bd0b06ec1a0a5a7d6302d8017edcea7faf557e0 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Mon, 16 Aug 2010 20:38:20 +0100
Subject: Implement Dynamic Attributes for SOP and PBS. Implement storage in
SQLite
---
OpenSim/Region/Framework/Scenes/SceneObjectPart.cs | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
(limited to 'OpenSim/Region/Framework/Scenes/SceneObjectPart.cs')
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
index 6720635..2a9b99e 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
@@ -37,6 +37,7 @@ using System.Xml.Serialization;
using log4net;
using OpenMetaverse;
using OpenMetaverse.Packets;
+using OpenMetaverse.StructuredData;
using OpenSim.Framework;
using OpenSim.Region.Framework.Interfaces;
using OpenSim.Region.Framework.Scenes.Scripting;
@@ -124,6 +125,11 @@ namespace OpenSim.Region.Framework.Scenes
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
+ ///
+ /// Dynamic attributes can be created and deleted as required.
+ ///
+ public DynAttrsOSDMap DynAttrs { get; set; }
+
///
/// Is this a root part?
///
@@ -335,6 +341,7 @@ namespace OpenSim.Region.Framework.Scenes
m_particleSystem = Utils.EmptyBytes;
Rezzed = DateTime.UtcNow;
Description = String.Empty;
+ DynAttrs = new DynAttrsOSDMap();
// Prims currently only contain a single folder (Contents). From looking at the Second Life protocol,
// this appears to have the same UUID (!) as the prim. If this isn't the case, one can't drag items from
@@ -4598,4 +4605,4 @@ namespace OpenSim.Region.Framework.Scenes
}
}
}
-}
\ No newline at end of file
+}
--
cgit v1.1
From a6d9c263650cc23d60f941718f87a64aa2f360b2 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Mon, 16 Aug 2010 22:21:46 +0100
Subject: Encapsulate an OSDMap in DAMap (was DynAttrsOSDMap) rather than
inheriting from it
This is the easier way to give us control over locking, rather than asking that OSDMap IDictionary methods be virtual
---
OpenSim/Region/Framework/Scenes/SceneObjectPart.cs | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
(limited to 'OpenSim/Region/Framework/Scenes/SceneObjectPart.cs')
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
index 2a9b99e..27f3a4d 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
@@ -128,7 +128,7 @@ namespace OpenSim.Region.Framework.Scenes
///
/// Dynamic attributes can be created and deleted as required.
///
- public DynAttrsOSDMap DynAttrs { get; set; }
+ public DAMap DynAttrs { get; set; }
///
/// Is this a root part?
@@ -341,7 +341,7 @@ namespace OpenSim.Region.Framework.Scenes
m_particleSystem = Utils.EmptyBytes;
Rezzed = DateTime.UtcNow;
Description = String.Empty;
- DynAttrs = new DynAttrsOSDMap();
+ DynAttrs = new DAMap();
// Prims currently only contain a single folder (Contents). From looking at the Second Life protocol,
// this appears to have the same UUID (!) as the prim. If this isn't the case, one can't drag items from
--
cgit v1.1
From af6a7cf95df76708d013932d8ef92c9bbeda0e5d Mon Sep 17 00:00:00 2001
From: Oren Hurvitz
Date: Tue, 22 Jan 2013 11:59:20 +0200
Subject: Added DynAttrs to the serialized XML format of prims. When copying
prims, use deep copy for DynAttrs.
---
OpenSim/Region/Framework/Scenes/SceneObjectPart.cs | 2 ++
1 file changed, 2 insertions(+)
(limited to 'OpenSim/Region/Framework/Scenes/SceneObjectPart.cs')
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
index 27f3a4d..189d298 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
@@ -1625,6 +1625,8 @@ namespace OpenSim.Region.Framework.Scenes
Array.Copy(Shape.ExtraParams, extraP, extraP.Length);
dupe.Shape.ExtraParams = extraP;
+ dupe.DynAttrs.CopyFrom(DynAttrs);
+
if (userExposed)
{
/*
--
cgit v1.1
From 2ce8a050e4181c2f2a9ee215a400c02678d88865 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Wed, 6 Feb 2013 02:15:54 +0000
Subject: Remove very long unused IScriptHost and NullScriptHost
---
OpenSim/Region/Framework/Scenes/SceneObjectPart.cs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
(limited to 'OpenSim/Region/Framework/Scenes/SceneObjectPart.cs')
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
index 189d298..19e6d37 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
@@ -116,7 +116,7 @@ namespace OpenSim.Region.Framework.Scenes
#endregion Enumerations
- public class SceneObjectPart : IScriptHost, ISceneEntity
+ public class SceneObjectPart : ISceneEntity
{
///
/// Denote all sides of the prim
--
cgit v1.1
From e5beb480eaf23fa7454728724de80b2a67ded1e8 Mon Sep 17 00:00:00 2001
From: Melanie
Date: Wed, 6 Feb 2013 08:03:04 +0000
Subject: Partial port of Avination's support for the new physics parameters.
Implements the parameters as properties, the serialization and database
storage (MySQL only). Implements llSetPrimitiveParams for prim physics shape
and the other 4 extra params. Only the prim shape type "None" is currently
functional. No support for the Viewer UI (yet), that will be ported in due
course. Lots more to port, this is a large-ish changeset.
---
OpenSim/Region/Framework/Scenes/SceneObjectPart.cs | 96 +++++++++++++++++++++-
1 file changed, 93 insertions(+), 3 deletions(-)
(limited to 'OpenSim/Region/Framework/Scenes/SceneObjectPart.cs')
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
index 19e6d37..55b5462 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
@@ -302,6 +302,13 @@ namespace OpenSim.Region.Framework.Scenes
protected Vector3 m_lastAcceleration;
protected Vector3 m_lastAngularVelocity;
protected int m_lastTerseSent;
+
+ protected byte m_physicsShapeType = (byte)PhysShapeType.prim;
+ // TODO: Implement these
+ //protected float m_density = 1000.0f; // in kg/m^3
+ //protected float m_gravitymod = 1.0f;
+ //protected float m_friction = 0.6f; // wood
+ //protected float m_bounce = 0.5f; // wood
///
/// Stores media texture data
@@ -1322,6 +1329,69 @@ namespace OpenSim.Region.Framework.Scenes
set { m_collisionSoundVolume = value; }
}
+ public byte DefaultPhysicsShapeType()
+ {
+ byte type;
+
+ if (Shape != null && (Shape.SculptType == (byte)SculptType.Mesh))
+ type = (byte)PhysShapeType.convex;
+ else
+ type = (byte)PhysShapeType.prim;
+
+ return type;
+ }
+
+ public byte PhysicsShapeType
+ {
+ get { return m_physicsShapeType; }
+ set
+ {
+ byte oldv = m_physicsShapeType;
+
+ if (value >= 0 && value <= (byte)PhysShapeType.convex)
+ {
+ if (value == (byte)PhysShapeType.none && ParentGroup != null && ParentGroup.RootPart == this)
+ m_physicsShapeType = DefaultPhysicsShapeType();
+ else
+ m_physicsShapeType = value;
+ }
+ else
+ m_physicsShapeType = DefaultPhysicsShapeType();
+
+ if (m_physicsShapeType != oldv && ParentGroup != null)
+ {
+ if (m_physicsShapeType == (byte)PhysShapeType.none)
+ {
+ if (PhysActor != null)
+ {
+ Velocity = new Vector3(0, 0, 0);
+ Acceleration = new Vector3(0, 0, 0);
+ if (ParentGroup.RootPart == this)
+ AngularVelocity = new Vector3(0, 0, 0);
+ ParentGroup.Scene.RemovePhysicalPrim(1);
+ RemoveFromPhysics();
+ }
+ }
+ else if (PhysActor == null)
+ {
+ ApplyPhysics((uint)Flags, VolumeDetectActive);
+ }
+ else
+ {
+ // TODO: Update physics actor
+ }
+
+ if (ParentGroup != null)
+ ParentGroup.HasGroupChanged = true;
+ }
+ }
+ }
+
+ public float Density { get; set; }
+ public float GravityModifier { get; set; }
+ public float Friction { get; set; }
+ public float Bounciness { get; set; }
+
#endregion Public Properties with only Get
private uint ApplyMask(uint val, bool set, uint mask)
@@ -1523,9 +1593,8 @@ namespace OpenSim.Region.Framework.Scenes
if (!ParentGroup.Scene.CollidablePrims)
return;
-// m_log.DebugFormat(
-// "[SCENE OBJECT PART]: Applying physics to {0} {1}, m_physicalPrim {2}",
-// Name, LocalId, UUID, m_physicalPrim);
+ if (PhysicsShapeType == (byte)PhysShapeType.none)
+ return;
bool isPhysical = (rootObjectFlags & (uint) PrimFlags.Physics) != 0;
bool isPhantom = (rootObjectFlags & (uint) PrimFlags.Phantom) != 0;
@@ -3878,6 +3947,26 @@ namespace OpenSim.Region.Framework.Scenes
}
}
+ public void UpdateExtraPhysics(ExtraPhysicsData physdata)
+ {
+ if (physdata.PhysShapeType == PhysShapeType.invalid || ParentGroup == null)
+ return;
+
+ if (PhysicsShapeType != (byte)physdata.PhysShapeType)
+ {
+ PhysicsShapeType = (byte)physdata.PhysShapeType;
+
+ }
+
+ if(Density != physdata.Density)
+ Density = physdata.Density;
+ if(GravityModifier != physdata.GravitationModifier)
+ GravityModifier = physdata.GravitationModifier;
+ if(Friction != physdata.Friction)
+ Friction = physdata.Friction;
+ if(Bounciness != physdata.Bounce)
+ Bounciness = physdata.Bounce;
+ }
///
/// Update the flags on this prim. This covers properties such as phantom, physics and temporary.
///
@@ -3949,6 +4038,7 @@ namespace OpenSim.Region.Framework.Scenes
if (SetPhantom
|| ParentGroup.IsAttachment
+ || PhysicsShapeType == (byte)PhysShapeType.none
|| (Shape.PathCurve == (byte)Extrusion.Flexible)) // note: this may have been changed above in the case of joints
{
AddFlag(PrimFlags.Phantom);
--
cgit v1.1
From 6504e3d4cee1573115e8a83c06227a297a32f093 Mon Sep 17 00:00:00 2001
From: Melanie
Date: Thu, 7 Feb 2013 03:30:02 +0000
Subject: Rename "Bounciness" to "Restitution"
---
OpenSim/Region/Framework/Scenes/SceneObjectPart.cs | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
(limited to 'OpenSim/Region/Framework/Scenes/SceneObjectPart.cs')
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
index 55b5462..b00f388 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
@@ -1390,7 +1390,7 @@ namespace OpenSim.Region.Framework.Scenes
public float Density { get; set; }
public float GravityModifier { get; set; }
public float Friction { get; set; }
- public float Bounciness { get; set; }
+ public float Restitution { get; set; }
#endregion Public Properties with only Get
@@ -3964,8 +3964,8 @@ namespace OpenSim.Region.Framework.Scenes
GravityModifier = physdata.GravitationModifier;
if(Friction != physdata.Friction)
Friction = physdata.Friction;
- if(Bounciness != physdata.Bounce)
- Bounciness = physdata.Bounce;
+ if(Restitution != physdata.Bounce)
+ Restitution = physdata.Bounce;
}
///
/// Update the flags on this prim. This covers properties such as phantom, physics and temporary.
--
cgit v1.1
From 6aa876a83b08390ab057eb012fd2c730010f79d8 Mon Sep 17 00:00:00 2001
From: Melanie
Date: Thu, 7 Feb 2013 03:40:48 +0000
Subject: Rename Bounciness to Restitution
---
OpenSim/Region/Framework/Scenes/SceneObjectPart.cs | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
(limited to 'OpenSim/Region/Framework/Scenes/SceneObjectPart.cs')
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
index 05b69c1..415a82b 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
@@ -1736,7 +1736,7 @@ namespace OpenSim.Region.Framework.Scenes
}
}
- public float Bounciness
+ public float Restitution
{
get { return m_bounce; }
set
@@ -4494,8 +4494,8 @@ namespace OpenSim.Region.Framework.Scenes
GravityModifier = physdata.GravitationModifier;
if(Friction != physdata.Friction)
Friction = physdata.Friction;
- if(Bounciness != physdata.Bounce)
- Bounciness = physdata.Bounce;
+ if(Restitution != physdata.Bounce)
+ Restitution = physdata.Bounce;
}
///
/// Update the flags on this prim. This covers properties such as phantom, physics and temporary.
--
cgit v1.1
From c658fa1c0dd83f23c66ccfedb12e8ab02ff01d0a Mon Sep 17 00:00:00 2001
From: Robert Adams
Date: Thu, 7 Feb 2013 11:05:21 -0800
Subject: Add plumbing for physics properties to get to the physics engine.
Addition of entries to PhysicsActor and setting code in SceneObjectPart.
---
OpenSim/Region/Framework/Scenes/SceneObjectPart.cs | 56 +++++++++++++++++++---
1 file changed, 50 insertions(+), 6 deletions(-)
(limited to 'OpenSim/Region/Framework/Scenes/SceneObjectPart.cs')
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
index b00f388..a3c7ed3 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
@@ -1387,10 +1387,46 @@ namespace OpenSim.Region.Framework.Scenes
}
}
- public float Density { get; set; }
- public float GravityModifier { get; set; }
- public float Friction { get; set; }
- public float Restitution { get; set; }
+ private float m_density = 10f;
+ public float Density {
+ get { return m_density; }
+ set
+ {
+ m_density = value;
+ if (PhysActor != null)
+ PhysActor.Density = m_density;
+ }
+ }
+ private float m_gravityModifier = 1f;
+ public float GravityModifier {
+ get { return m_gravityModifier; }
+ set
+ {
+ m_gravityModifier = value;
+ if (PhysActor != null)
+ PhysActor.GravityModifier = m_gravityModifier;
+ }
+ }
+ private float m_friction = 0.5f;
+ public float Friction {
+ get { return m_friction; }
+ set
+ {
+ m_friction = value;
+ if (PhysActor != null)
+ PhysActor.Friction = m_friction;
+ }
+ }
+ private float m_restitution = 0f;
+ public float Restitution {
+ get { return m_restitution; }
+ set
+ {
+ m_restitution = value;
+ if (PhysActor != null)
+ PhysActor.Restitution = m_restitution;
+ }
+ }
#endregion Public Properties with only Get
@@ -1896,8 +1932,18 @@ namespace OpenSim.Region.Framework.Scenes
{
ParentGroup.Scene.AddPhysicalPrim(1);
+ // Update initial values for various physical properties
+ pa.SetMaterial(Material);
+ pa.Density = Density;
+ pa.Friction = Friction;
+ pa.Restitution = Restitution;
+ pa.GravityModifier = GravityModifier;
+
+ // Link up callbacks for property updates from the physics engine
pa.OnRequestTerseUpdate += PhysicsRequestingTerseUpdate;
pa.OnOutOfBounds += PhysicsOutOfBounds;
+
+ // If this is a child prim, tell the physics engine about the parent
if (ParentID != 0 && ParentID != LocalId)
{
PhysicsActor parentPa = ParentGroup.RootPart.PhysActor;
@@ -4062,7 +4108,6 @@ namespace OpenSim.Region.Framework.Scenes
if (pa != null)
{
- pa.SetMaterial(Material);
DoPhysicsPropertyUpdate(UsePhysics, true);
if (
@@ -4175,7 +4220,6 @@ namespace OpenSim.Region.Framework.Scenes
if (pa != null)
{
pa.SOPName = this.Name; // save object into the PhysActor so ODE internals know the joint/body info
- pa.SetMaterial(Material);
DoPhysicsPropertyUpdate(rigidBody, true);
}
--
cgit v1.1
From 9089757ea2cabe49f40de64b7e6befa13a4553c1 Mon Sep 17 00:00:00 2001
From: Melanie
Date: Thu, 7 Feb 2013 21:05:58 +0000
Subject: Revert "Add plumbing for physics properties to get to the physics
engine."
This reverts commit c658fa1c0dd83f23c66ccfedb12e8ab02ff01d0a.
---
OpenSim/Region/Framework/Scenes/SceneObjectPart.cs | 56 +++-------------------
1 file changed, 6 insertions(+), 50 deletions(-)
(limited to 'OpenSim/Region/Framework/Scenes/SceneObjectPart.cs')
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
index a3c7ed3..b00f388 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
@@ -1387,46 +1387,10 @@ namespace OpenSim.Region.Framework.Scenes
}
}
- private float m_density = 10f;
- public float Density {
- get { return m_density; }
- set
- {
- m_density = value;
- if (PhysActor != null)
- PhysActor.Density = m_density;
- }
- }
- private float m_gravityModifier = 1f;
- public float GravityModifier {
- get { return m_gravityModifier; }
- set
- {
- m_gravityModifier = value;
- if (PhysActor != null)
- PhysActor.GravityModifier = m_gravityModifier;
- }
- }
- private float m_friction = 0.5f;
- public float Friction {
- get { return m_friction; }
- set
- {
- m_friction = value;
- if (PhysActor != null)
- PhysActor.Friction = m_friction;
- }
- }
- private float m_restitution = 0f;
- public float Restitution {
- get { return m_restitution; }
- set
- {
- m_restitution = value;
- if (PhysActor != null)
- PhysActor.Restitution = m_restitution;
- }
- }
+ public float Density { get; set; }
+ public float GravityModifier { get; set; }
+ public float Friction { get; set; }
+ public float Restitution { get; set; }
#endregion Public Properties with only Get
@@ -1932,18 +1896,8 @@ namespace OpenSim.Region.Framework.Scenes
{
ParentGroup.Scene.AddPhysicalPrim(1);
- // Update initial values for various physical properties
- pa.SetMaterial(Material);
- pa.Density = Density;
- pa.Friction = Friction;
- pa.Restitution = Restitution;
- pa.GravityModifier = GravityModifier;
-
- // Link up callbacks for property updates from the physics engine
pa.OnRequestTerseUpdate += PhysicsRequestingTerseUpdate;
pa.OnOutOfBounds += PhysicsOutOfBounds;
-
- // If this is a child prim, tell the physics engine about the parent
if (ParentID != 0 && ParentID != LocalId)
{
PhysicsActor parentPa = ParentGroup.RootPart.PhysActor;
@@ -4108,6 +4062,7 @@ namespace OpenSim.Region.Framework.Scenes
if (pa != null)
{
+ pa.SetMaterial(Material);
DoPhysicsPropertyUpdate(UsePhysics, true);
if (
@@ -4220,6 +4175,7 @@ namespace OpenSim.Region.Framework.Scenes
if (pa != null)
{
pa.SOPName = this.Name; // save object into the PhysActor so ODE internals know the joint/body info
+ pa.SetMaterial(Material);
DoPhysicsPropertyUpdate(rigidBody, true);
}
--
cgit v1.1
From 7bf33d333af6e7393a05940d1ab436f5dce73814 Mon Sep 17 00:00:00 2001
From: Melanie
Date: Thu, 7 Feb 2013 22:25:28 +0000
Subject: Plumb the path from the client to the extra physics params and back
---
OpenSim/Region/Framework/Scenes/SceneObjectPart.cs | 1 +
1 file changed, 1 insertion(+)
(limited to 'OpenSim/Region/Framework/Scenes/SceneObjectPart.cs')
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
index b00f388..cd40b29 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
@@ -1042,6 +1042,7 @@ namespace OpenSim.Region.Framework.Scenes
}
public UpdateRequired UpdateFlag { get; set; }
+ public bool UpdatePhysRequired { get; set; }
///
/// Used for media on a prim.
--
cgit v1.1
From 22675e6b14ce1b180f517c1ab92627d283192032 Mon Sep 17 00:00:00 2001
From: Melanie
Date: Thu, 7 Feb 2013 23:22:00 +0000
Subject: Add some more code from Avination. This changes physics actor stuff
around to work with the new params. Not actually plumbed just yet.
---
OpenSim/Region/Framework/Scenes/SceneObjectPart.cs | 189 +++++++++++++++++----
1 file changed, 152 insertions(+), 37 deletions(-)
(limited to 'OpenSim/Region/Framework/Scenes/SceneObjectPart.cs')
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
index cd40b29..9f602f7 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
@@ -304,11 +304,10 @@ namespace OpenSim.Region.Framework.Scenes
protected int m_lastTerseSent;
protected byte m_physicsShapeType = (byte)PhysShapeType.prim;
- // TODO: Implement these
- //protected float m_density = 1000.0f; // in kg/m^3
- //protected float m_gravitymod = 1.0f;
- //protected float m_friction = 0.6f; // wood
- //protected float m_bounce = 0.5f; // wood
+ protected float m_density = 1000.0f; // in kg/m^3
+ protected float m_gravitymod = 1.0f;
+ protected float m_friction = 0.6f; // wood
+ protected float m_bounce = 0.5f; // wood
///
/// Stores media texture data
@@ -1379,19 +1378,92 @@ namespace OpenSim.Region.Framework.Scenes
}
else
{
- // TODO: Update physics actor
+ PhysActor.PhysicsShapeType = m_physicsShapeType;
}
if (ParentGroup != null)
ParentGroup.HasGroupChanged = true;
}
+
+ if (m_physicsShapeType != value)
+ {
+ UpdatePhysRequired = true;
+ }
}
}
- public float Density { get; set; }
- public float GravityModifier { get; set; }
- public float Friction { get; set; }
- public float Restitution { get; set; }
+ public float Density // in kg/m^3
+ {
+ get { return m_density; }
+ set
+ {
+ if (value >=1 && value <= 22587.0)
+ {
+ m_density = value;
+ UpdatePhysRequired = true;
+ }
+
+ ScheduleFullUpdateIfNone();
+
+ if (ParentGroup != null)
+ ParentGroup.HasGroupChanged = true;
+ }
+ }
+
+ public float GravityModifier
+ {
+ get { return m_gravitymod; }
+ set
+ {
+ if( value >= -1 && value <=28.0f)
+ {
+ m_gravitymod = value;
+ UpdatePhysRequired = true;
+ }
+
+ ScheduleFullUpdateIfNone();
+
+ if (ParentGroup != null)
+ ParentGroup.HasGroupChanged = true;
+
+ }
+ }
+
+ public float Friction
+ {
+ get { return m_friction; }
+ set
+ {
+ if (value >= 0 && value <= 255.0f)
+ {
+ m_friction = value;
+ UpdatePhysRequired = true;
+ }
+
+ ScheduleFullUpdateIfNone();
+
+ if (ParentGroup != null)
+ ParentGroup.HasGroupChanged = true;
+ }
+ }
+
+ public float Restitution
+ {
+ get { return m_bounce; }
+ set
+ {
+ if (value >= 0 && value <= 1.0f)
+ {
+ m_bounce = value;
+ UpdatePhysRequired = true;
+ }
+
+ ScheduleFullUpdateIfNone();
+
+ if (ParentGroup != null)
+ ParentGroup.HasGroupChanged = true;
+ }
+ }
#endregion Public Properties with only Get
@@ -1589,8 +1661,10 @@ namespace OpenSim.Region.Framework.Scenes
///
///
///
- public void ApplyPhysics(uint rootObjectFlags, bool VolumeDetectActive)
+ public void ApplyPhysics(uint rootObjectFlags, bool _VolumeDetectActive)
{
+ VolumeDetectActive = _VolumeDetectActive;
+
if (!ParentGroup.Scene.CollidablePrims)
return;
@@ -1600,28 +1674,22 @@ namespace OpenSim.Region.Framework.Scenes
bool isPhysical = (rootObjectFlags & (uint) PrimFlags.Physics) != 0;
bool isPhantom = (rootObjectFlags & (uint) PrimFlags.Phantom) != 0;
+ if (_VolumeDetectActive)
+ isPhantom = true;
+
if (IsJoint())
{
DoPhysicsPropertyUpdate(isPhysical, true);
}
else
{
- // Special case for VolumeDetection: If VolumeDetection is set, the phantom flag is locally ignored
- if (VolumeDetectActive)
- isPhantom = false;
-
- // The only time the physics scene shouldn't know about the prim is if it's phantom or an attachment, which is phantom by definition
- // or flexible
- if (!isPhantom && !ParentGroup.IsAttachment && !(Shape.PathCurve == (byte)Extrusion.Flexible))
+ if ((!isPhantom || isPhysical || _VolumeDetectActive) && !ParentGroup.IsAttachment
+ && !(Shape.PathCurve == (byte)Extrusion.Flexible))
{
- // Added clarification.. since A rigid body is an object that you can kick around, etc.
- bool rigidBody = isPhysical && !isPhantom;
-
- PhysicsActor pa = AddToPhysics(rigidBody);
-
- if (pa != null)
- pa.SetVolumeDetect(VolumeDetectActive ? 1 : 0);
+ AddToPhysics(isPhysical, isPhantom, isPhysical);
}
+ else
+ PhysActor = null; // just to be sure
}
}
@@ -2503,6 +2571,19 @@ namespace OpenSim.Region.Framework.Scenes
APIDTarget = Quaternion.Identity;
}
+
+
+ public void ScheduleFullUpdateIfNone()
+ {
+ if (ParentGroup == null)
+ return;
+
+// ??? ParentGroup.HasGroupChanged = true;
+
+ if (UpdateFlag != UpdateRequired.FULL)
+ ScheduleFullUpdate();
+ }
+
///
/// Schedules this prim for a full update
///
@@ -4059,7 +4140,9 @@ namespace OpenSim.Region.Framework.Scenes
if (ParentGroup.Scene.CollidablePrims && pa == null)
{
- pa = AddToPhysics(UsePhysics);
+ AddToPhysics(UsePhysics, SetPhantom, false);
+ pa = PhysActor;
+
if (pa != null)
{
@@ -4146,10 +4229,13 @@ namespace OpenSim.Region.Framework.Scenes
///
/// The physics actor. null if there was a failure.
///
- private PhysicsActor AddToPhysics(bool rigidBody)
+ private void AddToPhysics(bool isPhysical, bool isPhantom, bool applyDynamics)
{
PhysicsActor pa;
+ Vector3 velocity = Velocity;
+ Vector3 rotationalVelocity = AngularVelocity;;
+
try
{
pa = ParentGroup.Scene.PhysicsScene.AddPrimShape(
@@ -4157,8 +4243,10 @@ namespace OpenSim.Region.Framework.Scenes
Shape,
AbsolutePosition,
Scale,
- RotationOffset,
- rigidBody,
+ GetWorldRotation(),
+ isPhysical,
+ isPhantom,
+ PhysicsShapeType,
m_localId);
}
catch (Exception e)
@@ -4167,20 +4255,47 @@ namespace OpenSim.Region.Framework.Scenes
pa = null;
}
- // FIXME: Ideally we wouldn't set the property here to reduce situations where threads changing physical
- // properties can stop on each other. However, DoPhysicsPropertyUpdate() currently relies on PhysActor
- // being set.
- PhysActor = pa;
-
- // Basic Physics can also return null as well as an exception catch.
if (pa != null)
{
pa.SOPName = this.Name; // save object into the PhysActor so ODE internals know the joint/body info
pa.SetMaterial(Material);
- DoPhysicsPropertyUpdate(rigidBody, true);
+
+ if (VolumeDetectActive) // change if not the default only
+ pa.SetVolumeDetect(1);
+ // we are going to tell rest of code about physics so better have this here
+ PhysActor = pa;
+
+ if (isPhysical)
+ {
+ ParentGroup.Scene.AddPhysicalPrim(1);
+
+ pa.OnRequestTerseUpdate += PhysicsRequestingTerseUpdate;
+ pa.OnOutOfBounds += PhysicsOutOfBounds;
+
+ if (ParentID != 0 && ParentID != LocalId)
+ {
+ PhysicsActor parentPa = ParentGroup.RootPart.PhysActor;
+
+ if (parentPa != null)
+ {
+ pa.link(parentPa);
+ }
+ }
+ }
+
+ if (applyDynamics)
+ // do independent of isphysical so parameters get setted (at least some)
+ {
+ Velocity = velocity;
+ AngularVelocity = rotationalVelocity;
+// pa.Velocity = velocity;
+ pa.RotationalVelocity = rotationalVelocity;
+ }
+
+ ParentGroup.Scene.PhysicsScene.AddPhysicsActorTaint(pa);
}
- return pa;
+ PhysActor = pa;
}
///
--
cgit v1.1
From a2dad09172ce462ea38ff77b684f07ae4b22fbd8 Mon Sep 17 00:00:00 2001
From: Melanie
Date: Thu, 7 Feb 2013 23:34:47 +0000
Subject: Actually plumb the new values to physics.
---
OpenSim/Region/Framework/Scenes/SceneObjectPart.cs | 20 ++++++++++++++++++++
1 file changed, 20 insertions(+)
(limited to 'OpenSim/Region/Framework/Scenes/SceneObjectPart.cs')
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
index 9f602f7..9b29973 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
@@ -1407,6 +1407,10 @@ namespace OpenSim.Region.Framework.Scenes
if (ParentGroup != null)
ParentGroup.HasGroupChanged = true;
+
+ PhysicsActor pa = PhysActor;
+ if (pa != null)
+ pa.Density = Density;
}
}
@@ -1426,6 +1430,9 @@ namespace OpenSim.Region.Framework.Scenes
if (ParentGroup != null)
ParentGroup.HasGroupChanged = true;
+ PhysicsActor pa = PhysActor;
+ if (pa != null)
+ pa.GravModifier = GravityModifier;
}
}
@@ -1444,6 +1451,10 @@ namespace OpenSim.Region.Framework.Scenes
if (ParentGroup != null)
ParentGroup.HasGroupChanged = true;
+
+ PhysicsActor pa = PhysActor;
+ if (pa != null)
+ pa.Friction = Friction;
}
}
@@ -1462,6 +1473,10 @@ namespace OpenSim.Region.Framework.Scenes
if (ParentGroup != null)
ParentGroup.HasGroupChanged = true;
+
+ PhysicsActor pa = PhysActor;
+ if (pa != null)
+ pa.Restitution = Restitution;
}
}
@@ -4260,6 +4275,11 @@ namespace OpenSim.Region.Framework.Scenes
pa.SOPName = this.Name; // save object into the PhysActor so ODE internals know the joint/body info
pa.SetMaterial(Material);
+ pa.Density = Density;
+ pa.GravModifier = GravityModifier;
+ pa.Friction = Friction;
+ pa.Restitution = Restitution;
+
if (VolumeDetectActive) // change if not the default only
pa.SetVolumeDetect(1);
// we are going to tell rest of code about physics so better have this here
--
cgit v1.1
From 5920abbf8d1b1770c03bc6232f1afe0551b4a331 Mon Sep 17 00:00:00 2001
From: Robert Adams
Date: Thu, 14 Feb 2013 09:48:11 -0800
Subject: Add EventManager events triggered when a SOP is added or removed from
the physical scene. Invocations added in SceneObjectPart.
---
OpenSim/Region/Framework/Scenes/SceneObjectPart.cs | 2 ++
1 file changed, 2 insertions(+)
(limited to 'OpenSim/Region/Framework/Scenes/SceneObjectPart.cs')
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
index 9b29973..cce8b21 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
@@ -4316,6 +4316,7 @@ namespace OpenSim.Region.Framework.Scenes
}
PhysActor = pa;
+ ParentGroup.Scene.EventManager.TriggerObjectAddedToPhysicalScene(this);
}
///
@@ -4328,6 +4329,7 @@ namespace OpenSim.Region.Framework.Scenes
///
public void RemoveFromPhysics()
{
+ ParentGroup.Scene.EventManager.TriggerObjectRemovedFromPhysicalScene(this);
ParentGroup.Scene.PhysicsScene.RemovePrim(PhysActor);
PhysActor = null;
}
--
cgit v1.1
From f954c53ddb009009e386a4046857cc20d0fd656c Mon Sep 17 00:00:00 2001
From: teravus
Date: Wed, 6 Mar 2013 17:02:53 -0500
Subject: * Separate two if trees that got merged into one if tree with borked
logic.
---
OpenSim/Region/Framework/Scenes/SceneObjectPart.cs | 27 ++++++++++++++++++++--
1 file changed, 25 insertions(+), 2 deletions(-)
(limited to 'OpenSim/Region/Framework/Scenes/SceneObjectPart.cs')
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
index 7cab841..e22cf47 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
@@ -4574,7 +4574,8 @@ namespace OpenSim.Region.Framework.Scenes
if (ParentGroup.RootPart == this)
AngularVelocity = new Vector3(0, 0, 0);
}
- else if (SetVD != wasVD)
+
+ else
{
if (ParentGroup.Scene.CollidablePrims)
{
@@ -4620,9 +4621,31 @@ namespace OpenSim.Region.Framework.Scenes
UpdatePhysicsSubscribedEvents();
}
}
-
+ if (SetVD)
+ {
+ // If the above logic worked (this is urgent candidate to unit tests!)
+ // we now have a physicsactor.
+ // Defensive programming calls for a check here.
+ // Better would be throwing an exception that could be catched by a unit test as the internal
+ // logic should make sure, this Physactor is always here.
+ if (pa != null)
+ {
+ pa.SetVolumeDetect(1);
+ AddFlag(PrimFlags.Phantom); // We set this flag also if VD is active
+ VolumeDetectActive = true;
+ }
// m_log.Debug("Update: PHY:" + UsePhysics.ToString() + ", T:" + IsTemporary.ToString() + ", PHA:" + IsPhantom.ToString() + " S:" + CastsShadows.ToString());
+ }
+ else if (SetVD != wasVD)
+ {
+ // Remove VolumeDetect in any case. Note, it's safe to call SetVolumeDetect as often as you like
+ // (mumbles, well, at least if you have infinte CPU powers :-))
+ if (pa != null)
+ pa.SetVolumeDetect(0);
+ RemFlag(PrimFlags.Phantom);
+ VolumeDetectActive = false;
+ }
// and last in case we have a new actor and not building
if (ParentGroup != null)
--
cgit v1.1
From 5097437e1174d19d3dcb68e936581e60e4ef49cc Mon Sep 17 00:00:00 2001
From: teravus
Date: Fri, 8 Mar 2013 19:32:47 -0500
Subject: * Apparently, sometimes texture entries come in from the wire with no
default texture defined.. so apply better fallback protection against that.
The net result is clients will have their selected textures set when they
would have previously had an ignored exception.
---
OpenSim/Region/Framework/Scenes/SceneObjectPart.cs | 17 +++++++++++++++++
1 file changed, 17 insertions(+)
(limited to 'OpenSim/Region/Framework/Scenes/SceneObjectPart.cs')
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
index cce8b21..3e9a6fa 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
@@ -4503,8 +4503,25 @@ namespace OpenSim.Region.Framework.Scenes
Changed changeFlags = 0;
+ Primitive.TextureEntryFace fallbackNewFace = newTex.DefaultTexture;
+ Primitive.TextureEntryFace fallbackOldFace = oldTex.DefaultTexture;
+
+ // On Incoming packets, sometimes newText.DefaultTexture is null. The assumption is that all
+ // other prim-sides are set, but apparently that's not always the case. Lets assume packet/data corruption at this point.
+ if (fallbackNewFace == null)
+ {
+ fallbackNewFace = new Primitive.TextureEntry(Util.BLANK_TEXTURE_UUID).CreateFace(0);
+ newTex.DefaultTexture = fallbackNewFace;
+ }
+ if (fallbackOldFace == null)
+ {
+ fallbackOldFace = new Primitive.TextureEntry(Util.BLANK_TEXTURE_UUID).CreateFace(0);
+ oldTex.DefaultTexture = fallbackOldFace;
+ }
+
for (int i = 0 ; i < GetNumberOfSides(); i++)
{
+
Primitive.TextureEntryFace newFace = newTex.DefaultTexture;
Primitive.TextureEntryFace oldFace = oldTex.DefaultTexture;
--
cgit v1.1
From 5c53660a7f055be9ed41f30893de673acac8a0f1 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Wed, 13 Mar 2013 22:59:06 +0000
Subject: Add prototype dynamic objects map for scene object parts
This allows region modules to add dynamic objects to SOPs rather than having to continually push and pull OSD dynamic attributes.
This is to explore the original MOAP use case for dynamic attributes where it could be very awkward and possibly time-consuming to keep reconstructing MediaEntrys from stored DynamicAttributes.
This commit adds a DOExampleModule to demonstrate/evolve this code.
Dynamic objects involve no storage or persistence changes - the 'backing store' for any data that does need to be saved will remain the DAMap.
DOExampleModule in this commit only attaches a fresh dynamic object. Actually constructing this from stored dynamic attributes and handling persistence is left for later.
These changes should affect no existing functionality, though it may or may not reveal necessary changes in DAMap down the road.
---
OpenSim/Region/Framework/Scenes/SceneObjectPart.cs | 22 ++++++++++++++++++++++
1 file changed, 22 insertions(+)
(limited to 'OpenSim/Region/Framework/Scenes/SceneObjectPart.cs')
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
index 3e9a6fa..ee7c4f4 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
@@ -129,6 +129,27 @@ namespace OpenSim.Region.Framework.Scenes
/// Dynamic attributes can be created and deleted as required.
///
public DAMap DynAttrs { get; set; }
+
+ private DOMap m_dynObjs;
+
+ ///
+ /// Dynamic objects that can be created and deleted as required.
+ ///
+ public DOMap DynObjs
+ {
+ get
+ {
+ if (m_dynObjs == null)
+ m_dynObjs = new DOMap();
+
+ return m_dynObjs;
+ }
+
+ set
+ {
+ m_dynObjs = value;
+ }
+ }
///
/// Is this a root part?
@@ -348,6 +369,7 @@ namespace OpenSim.Region.Framework.Scenes
Rezzed = DateTime.UtcNow;
Description = String.Empty;
DynAttrs = new DAMap();
+ DynObjs = new DOMap();
// Prims currently only contain a single folder (Contents). From looking at the Second Life protocol,
// this appears to have the same UUID (!) as the prim. If this isn't the case, one can't drag items from
--
cgit v1.1
From 48d41ef3076eb4c2a8c4a67d811630ab7b498469 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Wed, 13 Mar 2013 23:25:56 +0000
Subject: Remove unnecessary instation of DOMap() in SOP from commit 5c53660
since this is being done lazily
---
OpenSim/Region/Framework/Scenes/SceneObjectPart.cs | 1 -
1 file changed, 1 deletion(-)
(limited to 'OpenSim/Region/Framework/Scenes/SceneObjectPart.cs')
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
index ee7c4f4..a8b63fe 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
@@ -369,7 +369,6 @@ namespace OpenSim.Region.Framework.Scenes
Rezzed = DateTime.UtcNow;
Description = String.Empty;
DynAttrs = new DAMap();
- DynObjs = new DOMap();
// Prims currently only contain a single folder (Contents). From looking at the Second Life protocol,
// this appears to have the same UUID (!) as the prim. If this isn't the case, one can't drag items from
--
cgit v1.1
From c341664c1b8ccf3bd7b81795b900b971a15ff318 Mon Sep 17 00:00:00 2001
From: Melanie
Date: Sun, 24 Mar 2013 18:56:28 +0100
Subject: Phase 1 of implementing a transfer permission. Overwrite libOMV's
PermissionMask with our own and add export permissions as well as a new
definition for "All" as meaning "all conventional permissions" rather than
"all possible permissions"
---
OpenSim/Region/Framework/Scenes/SceneObjectPart.cs | 1 +
1 file changed, 1 insertion(+)
(limited to 'OpenSim/Region/Framework/Scenes/SceneObjectPart.cs')
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
index ffde415..9265805 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
@@ -43,6 +43,7 @@ using OpenSim.Region.Framework.Interfaces;
using OpenSim.Region.Framework.Scenes.Scripting;
using OpenSim.Region.Framework.Scenes.Serialization;
using OpenSim.Region.Physics.Manager;
+using PermissionMask = OpenSim.Framework.PermissionMask;
namespace OpenSim.Region.Framework.Scenes
{
--
cgit v1.1
From 5f4c4df227025c6b6156ce8238b56553dca4b5ae Mon Sep 17 00:00:00 2001
From: Melanie
Date: Tue, 26 Mar 2013 03:40:06 +0000
Subject: Phase 1 of implementing a transfer permission. Overwrite libOMV's
PermissionMask with our own and add export permissions as well as a new
definition for "All" as meaning "all conventional permissions" rather than
"all possible permissions"
---
OpenSim/Region/Framework/Scenes/SceneObjectPart.cs | 1 +
1 file changed, 1 insertion(+)
(limited to 'OpenSim/Region/Framework/Scenes/SceneObjectPart.cs')
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
index a8b63fe..27325c5 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
@@ -43,6 +43,7 @@ using OpenSim.Region.Framework.Interfaces;
using OpenSim.Region.Framework.Scenes.Scripting;
using OpenSim.Region.Framework.Scenes.Serialization;
using OpenSim.Region.Physics.Manager;
+using PermissionMask = OpenSim.Framework.PermissionMask;
namespace OpenSim.Region.Framework.Scenes
{
--
cgit v1.1
From 23ae4c0a4d813763bcc39db7693850a21727d7f2 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Fri, 29 Mar 2013 02:21:38 +0000
Subject: Fix bug where CHANGED_REGION and/or CHANGED_TELEPORT weren't firing
for scripts in attachments.
This was because the script resumption in AttachmentsModule was firing the attach event instead.
Had to reinstate the code in 285bd3a do we can resume the scripts there instead, though the bug existed before its removal.
This is to resolve http://opensimulator.org/mantis/view.php?id=6578
---
OpenSim/Region/Framework/Scenes/SceneObjectPart.cs | 4 ++++
1 file changed, 4 insertions(+)
(limited to 'OpenSim/Region/Framework/Scenes/SceneObjectPart.cs')
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
index 27325c5..847df03 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
@@ -3203,6 +3203,10 @@ namespace OpenSim.Region.Framework.Scenes
///
public void SetScriptEvents(UUID scriptid, int events)
{
+// m_log.DebugFormat(
+// "[SCENE OBJECT PART]: Set script events for script with id {0} on {1}/{2} to {3} in {4}",
+// scriptid, Name, ParentGroup.Name, events, ParentGroup.Scene.Name);
+
// scriptEvents oldparts;
lock (m_scriptEvents)
{
--
cgit v1.1
From 4bf9c4bbb833f8ecbd0757b333da76ffaea14bc7 Mon Sep 17 00:00:00 2001
From: Melanie
Date: Sun, 31 Mar 2013 20:25:32 +0200
Subject: Export permission, part two. Setting export perms for textures and
clothing works. Setting perms for prims also works but they don't propagate
correctly yet. NOT FOR PRODUCTIN USE. Your database will need to be updated
before you can use this!
---
OpenSim/Region/Framework/Scenes/SceneObjectPart.cs | 29 ++++++++++++++++------
1 file changed, 22 insertions(+), 7 deletions(-)
(limited to 'OpenSim/Region/Framework/Scenes/SceneObjectPart.cs')
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
index 9265805..c2f0792 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
@@ -470,8 +470,8 @@ namespace OpenSim.Region.Framework.Scenes
private uint _category;
private Int32 _creationDate;
private uint _parentID = 0;
- private uint _baseMask = (uint)PermissionMask.All;
- private uint _ownerMask = (uint)PermissionMask.All;
+ private uint _baseMask = (uint)(PermissionMask.All | PermissionMask.Export);
+ private uint _ownerMask = (uint)(PermissionMask.All | PermissionMask.Export);
private uint _groupMask = (uint)PermissionMask.None;
private uint _everyoneMask = (uint)PermissionMask.None;
private uint _nextOwnerMask = (uint)(PermissionMask.Move | PermissionMask.Modify | PermissionMask.Transfer);
@@ -4319,10 +4319,10 @@ namespace OpenSim.Region.Framework.Scenes
public void TrimPermissions()
{
- BaseMask &= (uint)PermissionMask.All;
- OwnerMask &= (uint)PermissionMask.All;
+ BaseMask &= (uint)(PermissionMask.All | PermissionMask.Export);
+ OwnerMask &= (uint)(PermissionMask.All | PermissionMask.Export);
GroupMask &= (uint)PermissionMask.All;
- EveryoneMask &= (uint)PermissionMask.All;
+ EveryoneMask &= (uint)(PermissionMask.All | PermissionMask.Export);
NextOwnerMask &= (uint)PermissionMask.All;
}
@@ -4425,10 +4425,22 @@ namespace OpenSim.Region.Framework.Scenes
baseMask;
break;
case 8:
+ // Trying to set export permissions - extra checks
+ if (set && (mask & (uint)PermissionMask.Export) != 0)
+ {
+ if ((OwnerMask & (uint)PermissionMask.Export) == 0 || (BaseMask & (uint)PermissionMask.Export) == 0 || (NextOwnerMask & (uint)PermissionMask.All) != (uint)PermissionMask.All)
+ mask &= ~(uint)PermissionMask.Export;
+ }
EveryoneMask = ApplyMask(EveryoneMask, set, mask) &
baseMask;
break;
case 16:
+ // Force full perm if export
+ if ((EveryoneMask & (uint)PermissionMask.Export) != 0)
+ {
+ NextOwnerMask = (uint)PermissionMask.All;
+ break;
+ }
NextOwnerMask = ApplyMask(NextOwnerMask, set, mask) &
baseMask;
// Prevent the client from creating no copy, no transfer
@@ -5225,9 +5237,12 @@ namespace OpenSim.Region.Framework.Scenes
public void ApplyNextOwnerPermissions()
{
- BaseMask &= NextOwnerMask;
+ // Export needs to be preserved in the base and everyone
+ // mask, but removed in the owner mask as a next owner
+ // can never change the export status
+ BaseMask &= NextOwnerMask | (uint)PermissionMask.Export;
OwnerMask &= NextOwnerMask;
- EveryoneMask &= NextOwnerMask;
+ EveryoneMask &= NextOwnerMask | (uint)PermissionMask.Export;
Inventory.ApplyNextOwnerPermissions();
}
--
cgit v1.1