* Moved PrimitiveBaseShape subclasses into factory methods - the subclassing scheme won't hold for serialization

* Extracted out the 'old' AddNewPrimitive that places an object at an exact pos, without the raytracing
afrisby
lbsa71 2007-12-28 08:34:38 +00:00
parent 5bd5770ed2
commit 8cd72beb86
8 changed files with 107 additions and 116 deletions

View File

@ -203,7 +203,7 @@ namespace OpenSim.Framework.Data.MySQL
{ {
MainLog.Instance.Notice( MainLog.Instance.Notice(
"No shape found for prim in storage, so setting default box shape"); "No shape found for prim in storage, so setting default box shape");
prim.Shape = BoxShape.Default; prim.Shape = PrimitiveBaseShape.Default;
} }
group.AddPart(prim); group.AddPart(prim);
group.RootPart = prim; group.RootPart = prim;
@ -223,7 +223,7 @@ namespace OpenSim.Framework.Data.MySQL
{ {
MainLog.Instance.Notice( MainLog.Instance.Notice(
"No shape found for prim in storage, so setting default box shape"); "No shape found for prim in storage, so setting default box shape");
prim.Shape = BoxShape.Default; prim.Shape = PrimitiveBaseShape.Default;
} }
createdObjects[new LLUUID(objID)].AddPart(prim); createdObjects[new LLUUID(objID)].AddPart(prim);
} }

View File

@ -156,6 +156,58 @@ namespace OpenSim.Framework
return shape; return shape;
} }
public static PrimitiveBaseShape CreateBox()
{
PrimitiveBaseShape shape = Create();
shape.PathCurve = (byte)Extrusion.Straight;
shape.ProfileShape = ProfileShape.Square;
shape.PathScaleX = 100;
shape.PathScaleY = 100;
return shape;
}
public static PrimitiveBaseShape CreateCylinder()
{
PrimitiveBaseShape shape = Create();
shape.PathCurve = (byte)Extrusion.Curve1;
shape.ProfileShape = ProfileShape.Square;
shape.PathScaleX = 100;
shape.PathScaleY = 100;
return shape;
}
public static PrimitiveBaseShape Default
{
get
{
PrimitiveBaseShape boxShape = CreateBox();
boxShape.SetScale(0.5f);
return boxShape;
}
}
public void SetScale(float side)
{
Scale = new LLVector3(side, side, side);
}
public void SetHeigth(float heigth)
{
Scale.Z = heigth;
}
public void SetRadius(float radius)
{
Scale.X = Scale.Y = radius * 2f;
}
//void returns need to change of course //void returns need to change of course
public virtual void GetMesh() public virtual void GetMesh()
{ {
@ -165,77 +217,15 @@ namespace OpenSim.Framework
{ {
return (PrimitiveBaseShape)MemberwiseClone(); return (PrimitiveBaseShape)MemberwiseClone();
} }
}
public class GenericShape : PrimitiveBaseShape public static PrimitiveBaseShape CreateCylinder(float radius, float heigth)
{ {
public GenericShape() PrimitiveBaseShape shape = CreateCylinder( );
: base()
{
}
}
public class BoxShape : PrimitiveBaseShape shape.SetHeigth( heigth );
{ shape.SetRadius( radius );
public BoxShape()
: base()
{
PathCurve = (byte) Extrusion.Straight;
ProfileShape = ProfileShape.Square;
PathScaleX = 100;
PathScaleY = 100;
}
public BoxShape(float side) return shape;
: this()
{
SetSide(side);
}
public void SetSide(float side)
{
Scale = new LLVector3(side, side, side);
}
public static BoxShape Default
{
get
{
BoxShape boxShape = new BoxShape();
boxShape.SetSide(0.5f);
return boxShape;
}
}
}
public class CylinderShape : PrimitiveBaseShape
{
public CylinderShape()
: base()
{
PathCurve = (byte) Extrusion.Straight;
ProfileShape = ProfileShape.Circle;
PathScaleX = 100;
PathScaleY = 100;
}
public CylinderShape(float radius, float heigth)
: this()
{
SetRadius(radius);
SetHeigth(heigth);
}
private void SetHeigth(float heigth)
{
Scale.Z = heigth;
}
private void SetRadius(float radius)
{
Scale.X = Scale.Y = radius*2f;
} }
} }
} }

View File

@ -1017,18 +1017,20 @@ namespace OpenSim.Region.Environment.Scenes
LLVector3 pos = GetNewRezLocation(RayStart, RayEnd, RayTargetID, rot, bypassRaycast, RayEndIsIntersection); LLVector3 pos = GetNewRezLocation(RayStart, RayEnd, RayTargetID, rot, bypassRaycast, RayEndIsIntersection);
if (PermissionsMngr.CanRezObject(ownerID, pos)) if (PermissionsMngr.CanRezObject(ownerID, pos))
{ {
// rez ON the ground, not IN the ground // rez ON the ground, not IN the ground
pos.Z += 0.25F; pos.Z += 0.25F;
AddNewPrim(ownerID, pos, rot, shape);
}
}
public virtual void AddNewPrim(LLUUID ownerID, LLVector3 pos, LLQuaternion rot, PrimitiveBaseShape shape)
{
SceneObjectGroup sceneOb = SceneObjectGroup sceneOb =
new SceneObjectGroup(this, m_regionHandle, ownerID, PrimIDAllocate(), pos, rot, shape); new SceneObjectGroup(this, m_regionHandle, ownerID, PrimIDAllocate(), pos, rot, shape);
AddEntity(sceneOb); AddEntity(sceneOb);
SceneObjectPart rootPart = sceneOb.GetChildPart(sceneOb.UUID); SceneObjectPart rootPart = sceneOb.GetChildPart(sceneOb.UUID);
// if grass or tree, make phantom // if grass or tree, make phantom
@ -1053,7 +1055,6 @@ namespace OpenSim.Region.Environment.Scenes
rootPart.DoPhysicsPropertyUpdate(UsePhysics, true); rootPart.DoPhysicsPropertyUpdate(UsePhysics, true);
} }
} }
}
public void AddTree(LLVector3 scale, LLQuaternion rotation, LLVector3 position, public void AddTree(LLVector3 scale, LLQuaternion rotation, LLVector3 position,
Tree treeType, bool newTree) Tree treeType, bool newTree)

View File

@ -43,7 +43,7 @@ namespace SimpleApp
public RotatingWheel(ulong regionHandle, SceneObjectGroup parent, LLUUID ownerID, uint localID, public RotatingWheel(ulong regionHandle, SceneObjectGroup parent, LLUUID ownerID, uint localID,
LLVector3 groupPosition, LLVector3 offsetPosition, LLQuaternion rotationDirection) LLVector3 groupPosition, LLVector3 offsetPosition, LLQuaternion rotationDirection)
: base( : base(
regionHandle, parent, ownerID, localID, new CylinderShape(0.5f, 0.2f), groupPosition, offsetPosition regionHandle, parent, ownerID, localID, PrimitiveBaseShape.CreateCylinder(0.5f, 0.2f), groupPosition, offsetPosition
) )
{ {
m_rotationDirection = rotationDirection; m_rotationDirection = rotationDirection;
@ -64,7 +64,7 @@ namespace SimpleApp
public ComplexObject(Scene scene, ulong regionHandle, LLUUID ownerID, uint localID, LLVector3 pos) public ComplexObject(Scene scene, ulong regionHandle, LLUUID ownerID, uint localID, LLVector3 pos)
: base(scene, regionHandle, ownerID, localID, pos, BoxShape.Default) : base(scene, regionHandle, ownerID, localID, pos, PrimitiveBaseShape.Default)
{ {
m_rotationDirection = new LLQuaternion(0.05f, 0.1f, 0.15f); m_rotationDirection = new LLQuaternion(0.05f, 0.1f, 0.15f);

View File

@ -39,7 +39,7 @@ namespace SimpleApp
private PerformanceCounter m_counter; private PerformanceCounter m_counter;
public CpuCounterObject(Scene world, ulong regionHandle, LLUUID ownerID, uint localID, LLVector3 pos) public CpuCounterObject(Scene world, ulong regionHandle, LLUUID ownerID, uint localID, LLVector3 pos)
: base(world, regionHandle, ownerID, localID, pos, BoxShape.Default) : base(world, regionHandle, ownerID, localID, pos, PrimitiveBaseShape.Default)
{ {
String objectName = "Processor"; String objectName = "Processor";
String counterName = "% Processor Time"; String counterName = "% Processor Time";

View File

@ -36,7 +36,7 @@ namespace SimpleApp
public class FileSystemObject : SceneObjectGroup public class FileSystemObject : SceneObjectGroup
{ {
public FileSystemObject(Scene world, FileInfo fileInfo, LLVector3 pos) public FileSystemObject(Scene world, FileInfo fileInfo, LLVector3 pos)
: base(world, world.RegionInfo.RegionHandle, LLUUID.Zero, world.NextLocalId, pos, BoxShape.Default) : base(world, world.RegionInfo.RegionHandle, LLUUID.Zero, world.NextLocalId, pos, PrimitiveBaseShape.Default)
{ {
//float size = (float) Math.Pow((double) fileInfo.Length, (double) 1/3)/5; //float size = (float) Math.Pow((double) fileInfo.Length, (double) 1/3)/5;
// rootPrimitive.ResizeGoup(new LLVector3(size, size, size)); // rootPrimitive.ResizeGoup(new LLVector3(size, size, size));

View File

@ -199,7 +199,7 @@ namespace OpenSim.DataStore.MSSQL
{ {
MainLog.Instance.Notice( MainLog.Instance.Notice(
"No shape found for prim in storage, so setting default box shape"); "No shape found for prim in storage, so setting default box shape");
prim.Shape = BoxShape.Default; prim.Shape = PrimitiveBaseShape.Default;
} }
group.AddPart(prim); group.AddPart(prim);
group.RootPart = prim; group.RootPart = prim;
@ -219,7 +219,7 @@ namespace OpenSim.DataStore.MSSQL
{ {
MainLog.Instance.Notice( MainLog.Instance.Notice(
"No shape found for prim in storage, so setting default box shape"); "No shape found for prim in storage, so setting default box shape");
prim.Shape = BoxShape.Default; prim.Shape = PrimitiveBaseShape.Default;
} }
createdObjects[new LLUUID(objID)].AddPart(prim); createdObjects[new LLUUID(objID)].AddPart(prim);
} }

View File

@ -265,7 +265,7 @@ namespace OpenSim.DataStore.MonoSqlite
{ {
MainLog.Instance.Notice( MainLog.Instance.Notice(
"No shape found for prim in storage, so setting default box shape"); "No shape found for prim in storage, so setting default box shape");
prim.Shape = BoxShape.Default; prim.Shape = PrimitiveBaseShape.Default;
} }
group.AddPart(prim); group.AddPart(prim);
group.RootPart = prim; group.RootPart = prim;
@ -285,7 +285,7 @@ namespace OpenSim.DataStore.MonoSqlite
{ {
MainLog.Instance.Notice( MainLog.Instance.Notice(
"No shape found for prim in storage, so setting default box shape"); "No shape found for prim in storage, so setting default box shape");
prim.Shape = BoxShape.Default; prim.Shape = PrimitiveBaseShape.Default;
} }
createdObjects[new LLUUID(objID)].AddPart(prim); createdObjects[new LLUUID(objID)].AddPart(prim);
} }