* Adding GetHashCode override to Permissions

* Adding PrimFlags.None back (for OpenSim), marking as obsolete
* Slowly transitioning ISceneProvider to become the central resource of Simian (instead of the Simian class). The callbacks are going to change soon

git-svn-id: http://libopenmetaverse.googlecode.com/svn/trunk@2200 52acb1d6-8a22-11de-b505-999d5b087335
This commit is contained in:
John Hurliman
2008-09-06 18:02:38 +00:00
parent 78ef0621c9
commit 53072cf669
9 changed files with 127 additions and 38 deletions

View File

@@ -25,6 +25,7 @@ namespace Simian.Extensions
Server.UDP.RegisterPacketCallback(PacketType.ObjectLink, new PacketCallback(ObjectLinkHandler));
Server.UDP.RegisterPacketCallback(PacketType.ObjectDelink, new PacketCallback(ObjectDelinkHandler));
Server.UDP.RegisterPacketCallback(PacketType.ObjectShape, new PacketCallback(ObjectShapeHandler));
Server.UDP.RegisterPacketCallback(PacketType.ObjectFlagUpdate, new PacketCallback(ObjectFlagUpdateHandler));
Server.UDP.RegisterPacketCallback(PacketType.DeRezObject, new PacketCallback(DeRezObjectHandler));
Server.UDP.RegisterPacketCallback(PacketType.MultipleObjectUpdate, new PacketCallback(MultipleObjectUpdateHandler));
Server.UDP.RegisterPacketCallback(PacketType.RequestObjectPropertiesFamily, new PacketCallback(RequestObjectPropertiesFamilyHandler));
@@ -77,6 +78,9 @@ namespace Simian.Extensions
Vector3 rayDir = Vector3.Normalize(add.ObjectData.RayEnd - add.ObjectData.RayStart);
position -= rayDir * scale;
// HACK: Push the prim up a little to keep it from falling through the world
position.Z += 3.0f;
#endregion Position Calculation
#region Foliage Handling
@@ -162,7 +166,7 @@ namespace Simian.Extensions
// Add this prim to the object database
SimulationObject simObj = new SimulationObject(prim, Server);
Server.Scene.AddObject(agent, simObj);
Server.Scene.AddObject(this, agent, simObj);
}
void ObjectSelectHandler(Packet packet, Agent agent)
@@ -381,10 +385,7 @@ namespace Simian.Extensions
obj.Prim.PrimData.ProfileEnd = Primitive.UnpackEndCut(block.ProfileEnd);
obj.Prim.PrimData.ProfileHollow = Primitive.UnpackProfileHollow(block.ProfileHollow);
// Send the update out to everyone
ObjectUpdatePacket editedobj = SimulationObject.BuildFullUpdate(obj.Prim, obj.Prim.RegionHandle, 0,
obj.Prim.Flags);
Server.UDP.BroadcastPacket(editedobj, PacketCategory.State);
Server.Scene.ObjectUpdate(this, obj, 0, obj.Prim.Flags);
}
else
{
@@ -394,6 +395,42 @@ namespace Simian.Extensions
}
}
void ObjectFlagUpdateHandler(Packet packet, Agent agent)
{
ObjectFlagUpdatePacket update = (ObjectFlagUpdatePacket)packet;
SimulationObject obj;
if (Server.Scene.TryGetObject(update.AgentData.ObjectLocalID, out obj))
{
if (update.AgentData.CastsShadows)
obj.Prim.Flags |= PrimFlags.CastShadows;
else
obj.Prim.Flags &= ~PrimFlags.CastShadows;
if (update.AgentData.IsPhantom)
obj.Prim.Flags |= PrimFlags.Phantom;
else
obj.Prim.Flags &= ~PrimFlags.Phantom;
if (update.AgentData.IsTemporary)
obj.Prim.Flags |= PrimFlags.Temporary;
else
obj.Prim.Flags &= ~PrimFlags.Temporary;
if (update.AgentData.UsePhysics)
obj.Prim.Flags |= PrimFlags.Physics;
else
obj.Prim.Flags &= ~PrimFlags.Physics;
Server.Scene.ObjectUpdate(this, obj, 0, obj.Prim.Flags);
}
else
{
Logger.Log("Got an ObjectFlagUpdate packet for unknown object " + update.AgentData.ObjectLocalID,
Helpers.LogLevel.Warning);
}
}
void DeRezObjectHandler(Packet packet, Agent agent)
{
DeRezObjectPacket derez = (DeRezObjectPacket)packet;
@@ -443,7 +480,7 @@ namespace Simian.Extensions
Server.Inventory.CreateItem(agent, obj.Prim.Properties.Name, obj.Prim.Properties.Description, InventoryType.Object,
AssetType.Object, obj.Prim.ID, trash.ID, PermissionMask.All, PermissionMask.All, agent.AgentID,
obj.Prim.Properties.CreatorID, derez.AgentBlock.TransactionID, 0);
Server.Scene.RemoveObject(obj);
Server.Scene.RemoveObject(this, obj);
Logger.DebugLog(String.Format("Derezzed prim {0} to agent inventory trash", obj.Prim.LocalID));
}
@@ -489,8 +526,6 @@ namespace Simian.Extensions
bool linked = ((type & UpdateType.Linked) != 0);
int pos = 0;
// FIXME: Handle linksets
if ((type & UpdateType.Position) != 0)
{
Vector3 newpos = new Vector3(block.Data, pos);
@@ -510,16 +545,16 @@ namespace Simian.Extensions
Vector3 newscale = new Vector3(block.Data, pos);
pos += 12;
// TODO: Use this
// FIXME: Use this in linksets
bool uniform = ((type & UpdateType.Uniform) != 0);
obj.Prim.Scale = newscale;
}
// Send the update out to everyone
ObjectUpdatePacket editedobj = SimulationObject.BuildFullUpdate(obj.Prim, obj.Prim.RegionHandle, 0,
obj.Prim.Flags);
Server.UDP.BroadcastPacket(editedobj, PacketCategory.State);
// Although the object has already been modified, we need
// to inform the scene manager of the changes so they are
// sent to clients and propagated to other extensions
Server.Scene.ObjectUpdate(this, obj, 0, obj.Prim.Flags);
}
else
{