Merge branch 'master' of /home/opensim/var/repo/opensim
commit
9b1741da0d
|
@ -2010,6 +2010,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
linkPart.CreateSelected = true;
|
linkPart.CreateSelected = true;
|
||||||
|
|
||||||
linkPart.LinkNum = linkNum++;
|
linkPart.LinkNum = linkNum++;
|
||||||
|
linkPart.UpdatePrimFlags(UsesPhysics, IsTemporary, IsPhantom, IsVolumeDetect);
|
||||||
|
|
||||||
SceneObjectPart[] ogParts = objectGroup.Parts;
|
SceneObjectPart[] ogParts = objectGroup.Parts;
|
||||||
Array.Sort(ogParts, delegate(SceneObjectPart a, SceneObjectPart b)
|
Array.Sort(ogParts, delegate(SceneObjectPart a, SceneObjectPart b)
|
||||||
|
@ -2220,6 +2221,8 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
oldRot = part.RotationOffset;
|
oldRot = part.RotationOffset;
|
||||||
Quaternion newRot = Quaternion.Inverse(parentRot) * oldRot;
|
Quaternion newRot = Quaternion.Inverse(parentRot) * oldRot;
|
||||||
part.RotationOffset = newRot;
|
part.RotationOffset = newRot;
|
||||||
|
|
||||||
|
part.UpdatePrimFlags(UsesPhysics, IsTemporary, IsPhantom, IsVolumeDetect);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
@ -1706,6 +1706,9 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
/// <param name="isNew"></param>
|
/// <param name="isNew"></param>
|
||||||
public void DoPhysicsPropertyUpdate(bool UsePhysics, bool isNew)
|
public void DoPhysicsPropertyUpdate(bool UsePhysics, bool isNew)
|
||||||
{
|
{
|
||||||
|
if (ParentGroup.Scene == null)
|
||||||
|
return;
|
||||||
|
|
||||||
if (!ParentGroup.Scene.PhysicalPrims && UsePhysics)
|
if (!ParentGroup.Scene.PhysicalPrims && UsePhysics)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -4161,7 +4164,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
// For now, we use the NINJA naming scheme for identifying joints.
|
// For now, we use the NINJA naming scheme for identifying joints.
|
||||||
// In the future, we can support other joint specification schemes such as a
|
// In the future, we can support other joint specification schemes such as a
|
||||||
// custom checkbox in the viewer GUI.
|
// custom checkbox in the viewer GUI.
|
||||||
if (ParentGroup.Scene.PhysicsScene.SupportsNINJAJoints)
|
if (ParentGroup.Scene != null && ParentGroup.Scene.PhysicsScene.SupportsNINJAJoints)
|
||||||
{
|
{
|
||||||
string hingeString = "hingejoint";
|
string hingeString = "hingejoint";
|
||||||
return (Name.Length >= hingeString.Length && Name.Substring(0, hingeString.Length) == hingeString);
|
return (Name.Length >= hingeString.Length && Name.Substring(0, hingeString.Length) == hingeString);
|
||||||
|
@ -4177,7 +4180,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
// For now, we use the NINJA naming scheme for identifying joints.
|
// For now, we use the NINJA naming scheme for identifying joints.
|
||||||
// In the future, we can support other joint specification schemes such as a
|
// In the future, we can support other joint specification schemes such as a
|
||||||
// custom checkbox in the viewer GUI.
|
// custom checkbox in the viewer GUI.
|
||||||
if (ParentGroup.Scene.PhysicsScene.SupportsNINJAJoints)
|
if (ParentGroup.Scene != null && ParentGroup.Scene.PhysicsScene.SupportsNINJAJoints)
|
||||||
{
|
{
|
||||||
string ballString = "balljoint";
|
string ballString = "balljoint";
|
||||||
return (Name.Length >= ballString.Length && Name.Substring(0, ballString.Length) == ballString);
|
return (Name.Length >= ballString.Length && Name.Substring(0, ballString.Length) == ballString);
|
||||||
|
@ -4193,7 +4196,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
// For now, we use the NINJA naming scheme for identifying joints.
|
// For now, we use the NINJA naming scheme for identifying joints.
|
||||||
// In the future, we can support other joint specification schemes such as a
|
// In the future, we can support other joint specification schemes such as a
|
||||||
// custom checkbox in the viewer GUI.
|
// custom checkbox in the viewer GUI.
|
||||||
if (ParentGroup.Scene.PhysicsScene.SupportsNINJAJoints)
|
if (ParentGroup.Scene != null && ParentGroup.Scene.PhysicsScene.SupportsNINJAJoints)
|
||||||
{
|
{
|
||||||
return IsHingeJoint() || IsBallJoint();
|
return IsHingeJoint() || IsBallJoint();
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,6 +26,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using NUnit.Framework;
|
using NUnit.Framework;
|
||||||
using OpenMetaverse;
|
using OpenMetaverse;
|
||||||
|
@ -43,24 +44,111 @@ namespace OpenSim.Region.Framework.Scenes.Tests
|
||||||
[TestFixture]
|
[TestFixture]
|
||||||
public class SceneObjectStatusTests
|
public class SceneObjectStatusTests
|
||||||
{
|
{
|
||||||
|
private TestScene m_scene;
|
||||||
|
private UUID m_ownerId = TestHelpers.ParseTail(0x1);
|
||||||
|
private SceneObjectGroup m_so1;
|
||||||
|
private SceneObjectGroup m_so2;
|
||||||
|
|
||||||
|
[SetUp]
|
||||||
|
public void Init()
|
||||||
|
{
|
||||||
|
m_scene = SceneHelpers.SetupScene();
|
||||||
|
m_so1 = SceneHelpers.CreateSceneObject(1, m_ownerId, "so1", 0x10);
|
||||||
|
m_so2 = SceneHelpers.CreateSceneObject(1, m_ownerId, "so2", 0x20);
|
||||||
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
public void TestSetPhantom()
|
public void TestSetPhantom()
|
||||||
{
|
{
|
||||||
TestHelpers.InMethod();
|
TestHelpers.InMethod();
|
||||||
|
|
||||||
// Scene scene = SceneSetupHelpers.SetupScene();
|
SceneObjectPart rootPart = m_so1.RootPart;
|
||||||
SceneObjectGroup so = SceneHelpers.CreateSceneObject(1, UUID.Zero);
|
|
||||||
SceneObjectPart rootPart = so.RootPart;
|
|
||||||
Assert.That(rootPart.Flags, Is.EqualTo(PrimFlags.None));
|
Assert.That(rootPart.Flags, Is.EqualTo(PrimFlags.None));
|
||||||
|
|
||||||
so.ScriptSetPhantomStatus(true);
|
m_so1.ScriptSetPhantomStatus(true);
|
||||||
|
|
||||||
// Console.WriteLine("so.RootPart.Flags [{0}]", so.RootPart.Flags);
|
// Console.WriteLine("so.RootPart.Flags [{0}]", so.RootPart.Flags);
|
||||||
Assert.That(rootPart.Flags, Is.EqualTo(PrimFlags.Phantom));
|
Assert.That(rootPart.Flags, Is.EqualTo(PrimFlags.Phantom));
|
||||||
|
|
||||||
so.ScriptSetPhantomStatus(false);
|
m_so1.ScriptSetPhantomStatus(false);
|
||||||
|
|
||||||
Assert.That(rootPart.Flags, Is.EqualTo(PrimFlags.None));
|
Assert.That(rootPart.Flags, Is.EqualTo(PrimFlags.None));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void TestSetPhysics()
|
||||||
|
{
|
||||||
|
TestHelpers.InMethod();
|
||||||
|
|
||||||
|
SceneObjectPart rootPart = m_so1.RootPart;
|
||||||
|
Assert.That(rootPart.Flags, Is.EqualTo(PrimFlags.None));
|
||||||
|
|
||||||
|
m_so1.ScriptSetPhysicsStatus(true);
|
||||||
|
|
||||||
|
// Console.WriteLine("so.RootPart.Flags [{0}]", so.RootPart.Flags);
|
||||||
|
Assert.That(rootPart.Flags, Is.EqualTo(PrimFlags.Physics));
|
||||||
|
|
||||||
|
m_so1.ScriptSetPhysicsStatus(false);
|
||||||
|
|
||||||
|
Assert.That(rootPart.Flags, Is.EqualTo(PrimFlags.None));
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Test that linking results in the correct physical status for all linkees.
|
||||||
|
/// </summary>
|
||||||
|
[Test]
|
||||||
|
public void TestLinkPhysicsBothPhysical()
|
||||||
|
{
|
||||||
|
TestHelpers.InMethod();
|
||||||
|
|
||||||
|
m_scene.AddSceneObject(m_so1);
|
||||||
|
m_scene.AddSceneObject(m_so2);
|
||||||
|
|
||||||
|
m_so1.ScriptSetPhysicsStatus(true);
|
||||||
|
m_so2.ScriptSetPhysicsStatus(true);
|
||||||
|
|
||||||
|
m_scene.LinkObjects(m_ownerId, m_so1.LocalId, new List<uint>() { m_so2.LocalId });
|
||||||
|
|
||||||
|
Assert.That(m_so1.RootPart.Flags, Is.EqualTo(PrimFlags.Physics));
|
||||||
|
Assert.That(m_so1.Parts[1].Flags, Is.EqualTo(PrimFlags.Physics));
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Test that linking results in the correct physical status for all linkees.
|
||||||
|
/// </summary>
|
||||||
|
[Test]
|
||||||
|
public void TestLinkPhysicsRootPhysicalOnly()
|
||||||
|
{
|
||||||
|
TestHelpers.InMethod();
|
||||||
|
|
||||||
|
m_scene.AddSceneObject(m_so1);
|
||||||
|
m_scene.AddSceneObject(m_so2);
|
||||||
|
|
||||||
|
m_so1.ScriptSetPhysicsStatus(true);
|
||||||
|
|
||||||
|
m_scene.LinkObjects(m_ownerId, m_so1.LocalId, new List<uint>() { m_so2.LocalId });
|
||||||
|
|
||||||
|
Assert.That(m_so1.RootPart.Flags, Is.EqualTo(PrimFlags.Physics));
|
||||||
|
Assert.That(m_so1.Parts[1].Flags, Is.EqualTo(PrimFlags.Physics));
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Test that linking results in the correct physical status for all linkees.
|
||||||
|
/// </summary>
|
||||||
|
[Test]
|
||||||
|
public void TestLinkPhysicsChildPhysicalOnly()
|
||||||
|
{
|
||||||
|
TestHelpers.InMethod();
|
||||||
|
|
||||||
|
m_scene.AddSceneObject(m_so1);
|
||||||
|
m_scene.AddSceneObject(m_so2);
|
||||||
|
|
||||||
|
m_so2.ScriptSetPhysicsStatus(true);
|
||||||
|
|
||||||
|
m_scene.LinkObjects(m_ownerId, m_so1.LocalId, new List<uint>() { m_so2.LocalId });
|
||||||
|
|
||||||
|
Assert.That(m_so1.RootPart.Flags, Is.EqualTo(PrimFlags.None));
|
||||||
|
Assert.That(m_so1.Parts[1].Flags, Is.EqualTo(PrimFlags.None));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue