From 778e302133283e3c4ea9c26431b46b3abe23dc1a Mon Sep 17 00:00:00 2001 From: MW Date: Wed, 7 Mar 2007 22:25:13 +0000 Subject: Primitives movement and rotation updates are now sent to all clients --- src/OpenSimClient.cs | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) (limited to 'src/OpenSimClient.cs') diff --git a/src/OpenSimClient.cs b/src/OpenSimClient.cs index 5f68806..9544e7b 100644 --- a/src/OpenSimClient.cs +++ b/src/OpenSimClient.cs @@ -35,6 +35,7 @@ using System.IO; using System.Threading; using System.Timers; using OpenSim.GridServers; +using OpenSim.world; namespace OpenSim { @@ -102,6 +103,39 @@ namespace OpenSim case PacketType.ObjectAdd: OpenSim_Main.local_world.AddNewPrim((ObjectAddPacket)Pack, this); break; + case PacketType.MultipleObjectUpdate : + MultipleObjectUpdatePacket multipleupdate = (MultipleObjectUpdatePacket)Pack; + + for( int i = 0; i < multipleupdate.ObjectData.Length; i++ ) + { + if( multipleupdate.ObjectData[ i ].Type == 9 ) //change position + { + libsecondlife.LLVector3 pos = new LLVector3(multipleupdate.ObjectData[ i ].Data, 0 ); + foreach (Entity ent in OpenSim_Main.local_world.Entities.Values) + { + if(ent.localid == multipleupdate.ObjectData[ i ].ObjectLocalID) + { + ent.position = pos; + ((OpenSim.world.Primitive)ent).UpdateFlag = true; + } + } + + //should update stored position of the prim + } + else if(multipleupdate.ObjectData[i].Type == 10 )//rotation + { + libsecondlife.LLQuaternion rot = new LLQuaternion(multipleupdate.ObjectData[i].Data, 0, true); + foreach (Entity ent in OpenSim_Main.local_world.Entities.Values) + { + if(ent.localid == multipleupdate.ObjectData[ i ].ObjectLocalID) + { + ent.rotation = new Axiom.MathLib.Quaternion(rot.W, rot.X, rot.Y, rot.W); + ((OpenSim.world.Primitive)ent).UpdateFlag = true; + } + } + } + } + break; case PacketType.TransferRequest: //Console.WriteLine("OpenSimClient.cs:ProcessInPacket() - Got transfer request"); TransferRequestPacket transfer = (TransferRequestPacket)Pack; -- cgit v1.1