* re-applied AddNewPrim refactoring... third time now...

afrisby
lbsa71 2007-12-30 16:00:55 +00:00
parent 2ff760457e
commit 14a191b285
1 changed files with 33 additions and 35 deletions

View File

@ -1008,13 +1008,7 @@ namespace OpenSim.Region.Environment.Scenes
public virtual void AddNewPrim(LLUUID ownerID, LLVector3 RayEnd, LLQuaternion rot, PrimitiveBaseShape shape, public virtual void AddNewPrim(LLUUID ownerID, LLVector3 RayEnd, LLQuaternion rot, PrimitiveBaseShape shape,
byte bypassRaycast, LLVector3 RayStart, LLUUID RayTargetID, byte bypassRaycast, LLVector3 RayStart, LLUUID RayTargetID,
byte RayEndIsIntersection) byte RayEndIsIntersection)
{ {
// What we're *supposed* to do is raytrace from the camera position given by the client to the nearest collision
// in the direction the client supplies (the ground level that we clicked)
// This function is pretty crappy right now.. so we're not affecting where the newly rezzed objects go
// Test it if you like. The console will write where it guesses a collision took place. if it thinks one did.
// It's wrong many times though.
LLVector3 pos = GetNewRezLocation(RayStart, RayEnd, RayTargetID, rot, bypassRaycast, RayEndIsIntersection); LLVector3 pos = GetNewRezLocation(RayStart, RayEnd, RayTargetID, rot, bypassRaycast, RayEndIsIntersection);
@ -1022,36 +1016,40 @@ namespace OpenSim.Region.Environment.Scenes
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;
SceneObjectGroup sceneOb =
new SceneObjectGroup(this, m_regionHandle, ownerID, PrimIDAllocate(), pos, rot, shape); AddNewPrim(ownerID, pos, rot, shape);
AddEntity(sceneOb); }
SceneObjectPart rootPart = sceneOb.GetChildPart(sceneOb.UUID); }
// if grass or tree, make phantom
//rootPart.ApplySanePermissions(); public virtual void AddNewPrim(LLUUID ownerID, LLVector3 pos, LLQuaternion rot, PrimitiveBaseShape shape)
if ((rootPart.Shape.PCode == 95) || (rootPart.Shape.PCode == 255) || (rootPart.Shape.PCode == 111)) {
{ SceneObjectGroup sceneOb =
rootPart.AddFlag(LLObject.ObjectFlags.Phantom); new SceneObjectGroup(this, m_regionHandle, ownerID, PrimIDAllocate(), pos, rot, shape);
//rootPart.ObjectFlags += (uint)LLObject.ObjectFlags.Phantom; AddEntity(sceneOb);
} SceneObjectPart rootPart = sceneOb.GetChildPart(sceneOb.UUID);
// if not phantom, add to physics // if grass or tree, make phantom
bool UsePhysics = (((rootPart.ObjectFlags & (uint) LLObject.ObjectFlags.Physics) > 0) && m_physicalPrim); //rootPart.ApplySanePermissions();
if ((rootPart.ObjectFlags & (uint) LLObject.ObjectFlags.Phantom) == 0) if ((rootPart.Shape.PCode == 95) || (rootPart.Shape.PCode == 255) || (rootPart.Shape.PCode == 111))
{ {
rootPart.PhysActor = rootPart.AddFlag(LLObject.ObjectFlags.Phantom);
PhysicsScene.AddPrimShape( //rootPart.ObjectFlags += (uint)LLObject.ObjectFlags.Phantom;
rootPart.Name, }
rootPart.Shape, // if not phantom, add to physics
new PhysicsVector(pos.X, pos.Y, pos.Z), bool UsePhysics = (((rootPart.ObjectFlags & (uint) LLObject.ObjectFlags.Physics) > 0) && m_physicalPrim);
new PhysicsVector(shape.Scale.X, shape.Scale.Y, shape.Scale.Z), if ((rootPart.ObjectFlags & (uint) LLObject.ObjectFlags.Phantom) == 0)
new Quaternion(), UsePhysics); {
// subscribe to physics events. rootPart.PhysActor =
rootPart.DoPhysicsPropertyUpdate(UsePhysics, true); PhysicsScene.AddPrimShape(
} rootPart.Name,
rootPart.Shape,
new PhysicsVector(pos.X, pos.Y, pos.Z),
new PhysicsVector(shape.Scale.X, shape.Scale.Y, shape.Scale.Z),
new Quaternion(), UsePhysics);
// subscribe to physics events.
rootPart.DoPhysicsPropertyUpdate(UsePhysics, true);
} }
} }