From c47bca94d23420b164e5f32aa5c781009496e0d3 Mon Sep 17 00:00:00 2001
From: lbsa71
Date: Wed, 15 Aug 2007 16:57:47 +0000
Subject: * Exploring Group/Part from an app perspective.
---
.../Framework/General/Types/PrimitiveBaseShape.cs | 46 +++++++++++++++++++---
.../Region/Environment/Scenes/SceneObjectGroup.cs | 25 +++++++++++-
.../Region/Environment/Scenes/SceneObjectPart.cs | 4 ++
OpenSim/Region/Examples/SimpleApp/ComplexObject.cs | 46 ++++++++++++++++++++++
.../Region/Examples/SimpleApp/CpuCounterObject.cs | 4 +-
OpenSim/Region/Examples/SimpleApp/Program.cs | 13 +++---
6 files changed, 124 insertions(+), 14 deletions(-)
create mode 100644 OpenSim/Region/Examples/SimpleApp/ComplexObject.cs
(limited to 'OpenSim')
diff --git a/OpenSim/Framework/General/Types/PrimitiveBaseShape.cs b/OpenSim/Framework/General/Types/PrimitiveBaseShape.cs
index 045569b..577c8a2 100644
--- a/OpenSim/Framework/General/Types/PrimitiveBaseShape.cs
+++ b/OpenSim/Framework/General/Types/PrimitiveBaseShape.cs
@@ -110,10 +110,11 @@ namespace OpenSim.Framework.Types
}
}
-
+
public class BoxShape : PrimitiveBaseShape
{
- public BoxShape() : base()
+ public BoxShape()
+ : base()
{
PathCurve = 16;
ProfileShape = ProfileShape.Square;
@@ -121,10 +122,16 @@ namespace OpenSim.Framework.Types
PathScaleX = 100;
PathScaleY = 100;
}
-
- public void SetSide( float side )
+
+ public BoxShape(float side)
+ : base()
+ {
+ SetSide(side);
+ }
+
+ public void SetSide(float side)
{
- Scale = new LLVector3( side, side, side );
+ Scale = new LLVector3(side, side, side);
}
public static BoxShape Default
@@ -139,4 +146,33 @@ namespace OpenSim.Framework.Types
}
}
}
+ public class CylinderShape : PrimitiveBaseShape
+ {
+ public CylinderShape()
+ : base()
+ {
+ PathCurve = 16;
+ ProfileShape = ProfileShape.Circle;
+ PCode = 9;
+ PathScaleX = 100;
+ PathScaleY = 100;
+ }
+
+ public CylinderShape(float radius, float heigth)
+ : base()
+ {
+ SetRadius(radius);
+ SetHeigth(heigth);
+ }
+
+ private void SetHeigth(float heigth)
+ {
+ Scale.Y = heigth;
+ }
+
+ private void SetRadius(float radius)
+ {
+ Scale.X = Scale.Y = radius*2f;
+ }
+ }
}
diff --git a/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs
index 4f98199..2f4d707 100644
--- a/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs
+++ b/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs
@@ -35,6 +35,12 @@ namespace OpenSim.Region.Environment.Scenes
get { return 1; }
}
+ public LLQuaternion Rotation
+ {
+ get { return m_rootPart.RotationOffset; }
+ }
+
+
///
///
///
@@ -471,6 +477,13 @@ namespace OpenSim.Region.Environment.Scenes
}
}
+ public string Text
+ {
+ get { return m_rootPart.Text; }
+ set { m_rootPart.Text = value; }
+ }
+
+
public void SetPartText(string text, uint localID)
{
SceneObjectPart part = this.GetChildPrim(localID);
@@ -626,7 +639,7 @@ namespace OpenSim.Region.Environment.Scenes
}
#endregion
- #region Roation
+ #region Rotation
///
///
///
@@ -791,6 +804,16 @@ namespace OpenSim.Region.Environment.Scenes
}
#endregion
+ public override void UpdateMovement()
+ {
+ foreach( SceneObjectPart part in m_parts.Values )
+ {
+ part.UpdateMovement();
+ }
+
+ base.UpdateMovement();
+ }
+
///
/// Added as a way for the storage provider to reset the scene,
/// most likely a better way to do this sort of thing but for now...
diff --git a/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs b/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs
index 09a864e..81b2fe4 100644
--- a/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs
+++ b/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs
@@ -561,6 +561,10 @@ namespace OpenSim.Region.Environment.Scenes
remoteClient.SendPrimTerseUpdate(m_regionHandle, 64096, LocalID, lPos, mRot);
}
#endregion
+
+ public virtual void UpdateMovement()
+ {
+ }
}
}
diff --git a/OpenSim/Region/Examples/SimpleApp/ComplexObject.cs b/OpenSim/Region/Examples/SimpleApp/ComplexObject.cs
new file mode 100644
index 0000000..25960b7
--- /dev/null
+++ b/OpenSim/Region/Examples/SimpleApp/ComplexObject.cs
@@ -0,0 +1,46 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using OpenSim.Region.Environment.Scenes;
+using Axiom.Math;
+using libsecondlife;
+using OpenSim.Framework.Types;
+
+namespace SimpleApp
+{
+ public class ComplexObject : SceneObjectGroup
+ {
+ private LLQuaternion m_rotationDirection;
+
+ private class RotatingWheel : SceneObjectPart
+ {
+ private static LLQuaternion m_rotationDirection = new LLQuaternion(0.05f, 0, 0);
+
+ public RotatingWheel(ulong regionHandle, SceneObjectGroup parent, LLUUID ownerID, uint localID, LLVector3 groupPosition, LLVector3 offsetPosition)
+ : base(regionHandle, parent, ownerID, localID, BoxShape.Default, groupPosition, offsetPosition )
+ {
+ }
+
+ public override void UpdateMovement()
+ {
+ UpdateRotation(RotationOffset * m_rotationDirection);
+ }
+ }
+
+ public override void UpdateMovement()
+ {
+ UpdateGroupRotation(Rotation * m_rotationDirection);
+
+ base.UpdateMovement();
+ }
+
+ public ComplexObject(Scene scene, ulong regionHandle, LLUUID ownerID, uint localID, LLVector3 pos )
+ : base(scene, regionHandle, ownerID, localID, pos, BoxShape.Default )
+ {
+ m_rotationDirection = new LLQuaternion(0.05f, 0.1f, 0.15f);
+
+ AddPart(new RotatingWheel(regionHandle, this, ownerID, scene.PrimIDAllocate(), pos, new LLVector3(0, 0, 1f)));
+ AddPart(new RotatingWheel(regionHandle, this, ownerID, scene.PrimIDAllocate(), pos, new LLVector3(0, 0, -1f)));
+ }
+ }
+}
diff --git a/OpenSim/Region/Examples/SimpleApp/CpuCounterObject.cs b/OpenSim/Region/Examples/SimpleApp/CpuCounterObject.cs
index 108fa98..4ce59cb 100644
--- a/OpenSim/Region/Examples/SimpleApp/CpuCounterObject.cs
+++ b/OpenSim/Region/Examples/SimpleApp/CpuCounterObject.cs
@@ -13,8 +13,8 @@ namespace SimpleApp
{
private PerformanceCounter m_counter;
- public CpuCounterObject(Scene world, ulong regionHandle, LLUUID ownerID, uint localID, LLVector3 pos, PrimitiveBaseShape shape)
- : base(world, regionHandle, ownerID, localID, pos, shape )
+ public CpuCounterObject(Scene world, ulong regionHandle, LLUUID ownerID, uint localID, LLVector3 pos )
+ : base(world, regionHandle, ownerID, localID, pos, BoxShape.Default )
{
String objectName = "Processor";
String counterName = "% Processor Time";
diff --git a/OpenSim/Region/Examples/SimpleApp/Program.cs b/OpenSim/Region/Examples/SimpleApp/Program.cs
index 0763b83..59d73ba 100644
--- a/OpenSim/Region/Examples/SimpleApp/Program.cs
+++ b/OpenSim/Region/Examples/SimpleApp/Program.cs
@@ -65,14 +65,15 @@ namespace SimpleApp
udpServer.ServerListener();
- PrimitiveBaseShape shape = BoxShape.Default;
- shape.Scale = new LLVector3(0.5f, 0.5f, 0.5f);
- LLVector3 pos = new LLVector3(138, 129, 27);
+ LLVector3 pos = new LLVector3(110, 129, 27);
- SceneObjectGroup sceneObject = new CpuCounterObject(scene, regionInfo.RegionHandle, LLUUID.Zero, scene.PrimIDAllocate(), pos, shape);
- scene.AddEntity(sceneObject);
+ SceneObjectGroup sceneObject = new CpuCounterObject(scene, regionInfo.RegionHandle, LLUUID.Zero, scene.PrimIDAllocate(), pos + new LLVector3( 1f, 1f, 1f ));
+ scene.AddEntity(sceneObject);
- MyNpcCharacter m_character = new MyNpcCharacter( scene.EventManager );
+ ComplexObject complexObject = new ComplexObject(scene, regionInfo.RegionHandle, LLUUID.Zero, scene.PrimIDAllocate(), pos + new LLVector3( 2f, 2f, 2f ));
+ scene.AddEntity(complexObject);
+
+ MyNpcCharacter m_character = new MyNpcCharacter(scene.EventManager);
scene.AddNewClient(m_character, false);
DirectoryInfo dirInfo = new DirectoryInfo( "." );
--
cgit v1.1