* 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

@ -1009,12 +1009,6 @@ namespace OpenSim.Region.Environment.Scenes
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 = AddNewPrim(ownerID, pos, rot, shape);
new SceneObjectGroup(this, m_regionHandle, ownerID, PrimIDAllocate(), pos, rot, shape); }
AddEntity(sceneOb); }
SceneObjectPart rootPart = sceneOb.GetChildPart(sceneOb.UUID);
// if grass or tree, make phantom public virtual void AddNewPrim(LLUUID ownerID, LLVector3 pos, LLQuaternion rot, PrimitiveBaseShape shape)
//rootPart.ApplySanePermissions(); {
if ((rootPart.Shape.PCode == 95) || (rootPart.Shape.PCode == 255) || (rootPart.Shape.PCode == 111)) SceneObjectGroup sceneOb =
{ new SceneObjectGroup(this, m_regionHandle, ownerID, PrimIDAllocate(), pos, rot, shape);
rootPart.AddFlag(LLObject.ObjectFlags.Phantom); AddEntity(sceneOb);
//rootPart.ObjectFlags += (uint)LLObject.ObjectFlags.Phantom; SceneObjectPart rootPart = sceneOb.GetChildPart(sceneOb.UUID);
} // if grass or tree, make phantom
// if not phantom, add to physics //rootPart.ApplySanePermissions();
bool UsePhysics = (((rootPart.ObjectFlags & (uint) LLObject.ObjectFlags.Physics) > 0) && m_physicalPrim); if ((rootPart.Shape.PCode == 95) || (rootPart.Shape.PCode == 255) || (rootPart.Shape.PCode == 111))
if ((rootPart.ObjectFlags & (uint) LLObject.ObjectFlags.Phantom) == 0) {
{ rootPart.AddFlag(LLObject.ObjectFlags.Phantom);
rootPart.PhysActor = //rootPart.ObjectFlags += (uint)LLObject.ObjectFlags.Phantom;
PhysicsScene.AddPrimShape( }
rootPart.Name, // if not phantom, add to physics
rootPart.Shape, bool UsePhysics = (((rootPart.ObjectFlags & (uint) LLObject.ObjectFlags.Physics) > 0) && m_physicalPrim);
new PhysicsVector(pos.X, pos.Y, pos.Z), if ((rootPart.ObjectFlags & (uint) LLObject.ObjectFlags.Phantom) == 0)
new PhysicsVector(shape.Scale.X, shape.Scale.Y, shape.Scale.Z), {
new Quaternion(), UsePhysics); rootPart.PhysActor =
// subscribe to physics events. PhysicsScene.AddPrimShape(
rootPart.DoPhysicsPropertyUpdate(UsePhysics, true); 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);
} }
} }