* Exposing Primitive.ConstructionData.profileCurve as public (Primitive.ConstructionData.ProfileCurve is still there)

* Added ObjectShapeHandler to Simian, basic prim editing is working

git-svn-id: http://libopenmetaverse.googlecode.com/svn/trunk@2178 52acb1d6-8a22-11de-b505-999d5b087335
This commit is contained in:
John Hurliman
2008-08-28 02:55:37 +00:00
parent eb8ee37b34
commit 0b751afd07
2 changed files with 49 additions and 2 deletions

View File

@@ -24,6 +24,7 @@ namespace Simian.Extensions
Server.UDPServer.RegisterPacketCallback(PacketType.ObjectAdd, new UDPServer.PacketCallback(ObjectAddHandler));
Server.UDPServer.RegisterPacketCallback(PacketType.ObjectSelect, new UDPServer.PacketCallback(ObjectSelectHandler));
Server.UDPServer.RegisterPacketCallback(PacketType.ObjectDeselect, new UDPServer.PacketCallback(ObjectDeselectHandler));
Server.UDPServer.RegisterPacketCallback(PacketType.ObjectShape, new UDPServer.PacketCallback(ObjectShapeHandler));
Server.UDPServer.RegisterPacketCallback(PacketType.DeRezObject, new UDPServer.PacketCallback(DeRezObjectHandler));
Server.UDPServer.RegisterPacketCallback(PacketType.MultipleObjectUpdate, new UDPServer.PacketCallback(MultipleObjectUpdateHandler));
Server.UDPServer.RegisterPacketCallback(PacketType.RequestObjectPropertiesFamily, new UDPServer.PacketCallback(RequestObjectPropertiesFamilyHandler));
@@ -232,6 +233,53 @@ namespace Simian.Extensions
// TODO: Do we need this at all?
}
void ObjectShapeHandler(Packet packet, Agent agent)
{
ObjectShapePacket shape = (ObjectShapePacket)packet;
for (int i = 0; i < shape.ObjectData.Length; i++)
{
ObjectShapePacket.ObjectDataBlock block = shape.ObjectData[i];
SimulationObject obj;
if (SceneObjects.TryGetValue(block.ObjectLocalID, out obj))
{
obj.Prim.PrimData.PathBegin = Primitive.UnpackBeginCut(block.PathBegin);
obj.Prim.PrimData.PathCurve = (PathCurve)block.PathCurve;
obj.Prim.PrimData.PathEnd = Primitive.UnpackEndCut(block.PathEnd);
obj.Prim.PrimData.PathRadiusOffset = Primitive.UnpackPathTwist(block.PathRadiusOffset);
obj.Prim.PrimData.PathRevolutions = Primitive.UnpackPathRevolutions(block.PathRevolutions);
obj.Prim.PrimData.PathScaleX = Primitive.UnpackPathScale(block.PathScaleX);
obj.Prim.PrimData.PathScaleY = Primitive.UnpackPathScale(block.PathScaleY);
obj.Prim.PrimData.PathShearX = Primitive.UnpackPathShear((sbyte)block.PathShearX);
obj.Prim.PrimData.PathShearY = Primitive.UnpackPathShear((sbyte)block.PathShearY);
obj.Prim.PrimData.PathSkew = Primitive.UnpackPathTwist(block.PathSkew);
obj.Prim.PrimData.PathTaperX = Primitive.UnpackPathTaper(block.PathTaperX);
obj.Prim.PrimData.PathTaperY = Primitive.UnpackPathTaper(block.PathTaperY);
obj.Prim.PrimData.PathTwist = Primitive.UnpackPathTwist(block.PathTwist);
obj.Prim.PrimData.PathTwistBegin = Primitive.UnpackPathTwist(block.PathTwistBegin);
obj.Prim.PrimData.ProfileBegin = Primitive.UnpackBeginCut(block.ProfileBegin);
obj.Prim.PrimData.profileCurve = block.ProfileCurve;
obj.Prim.PrimData.ProfileEnd = Primitive.UnpackEndCut(block.ProfileEnd);
obj.Prim.PrimData.ProfileHollow = Primitive.UnpackProfileHollow(block.ProfileHollow);
// Send the update out to everyone
ObjectUpdatePacket editedobj = Movement.BuildFullUpdate(obj.Prim, String.Empty, obj.Prim.RegionHandle, 0,
obj.Prim.Flags);
lock (Server.Agents)
{
foreach (Agent recipient in Server.Agents.Values)
recipient.SendPacket(editedobj);
}
}
else
{
Logger.Log("Got an ObjectShape packet for unknown object " + block.ObjectLocalID,
Helpers.LogLevel.Warning);
}
}
}
void DeRezObjectHandler(Packet packet, Agent agent)
{
DeRezObjectPacket derez = (DeRezObjectPacket)packet;