void Objects_ObjectDataBlockUpdate(object sender, ObjectDataBlockUpdateEventArgs e) { if (Prims.ContainsKey(e.Prim.LocalID)) { UpdatePrimBlocking(e.Prim); } }
private void Objects_OnObjectDataBlockUpdate(object sender, ObjectDataBlockUpdateEventArgs e) { Simulator simulator = e.Simulator; Primitive prim = e.Prim; var data = e.ConstructionData; ObjectUpdatePacket.ObjectDataBlock block = e.Block; var objectupdate0 = e.Update; if (!IsMaster(simulator)) { return; } // return; if (!objectupdate0.Avatar) { PrimtiveBlockUpdate(simulator, objectupdate0, prim, block, data); } else // this code only is usefull for avatars { prim.Flags = (PrimFlags)block.UpdateFlags; if ((prim.Flags & PrimFlags.ZlibCompressed) != 0) { Logger.Log("Got a ZlibCompressed ObjectMovementUpdate, implement me!", Helpers.LogLevel.Warning, client); } prim.NameValues = e.NameValues; prim.LocalID = block.ID; prim.ID = block.FullID; //NOTE this broke onSitChanged! prim.ParentID = block.ParentID; prim.RegionHandle = simulator.Handle; prim.Scale = block.Scale; prim.ClickAction = (ClickAction)block.ClickAction; prim.OwnerID = block.OwnerID; prim.MediaURL = Utils.BytesToString(block.MediaURL); prim.Text = Utils.BytesToString(block.Text); prim.TextColor = new Color4(block.TextColor, 0, false, true); // Sound information prim.Sound = block.Sound; prim.SoundFlags = (SoundFlags)block.Flags; prim.SoundGain = block.Gain; prim.SoundRadius = block.Radius; // Joint information prim.Joint = (JointType)block.JointType; prim.JointPivot = block.JointPivot; prim.JointAxisOrAnchor = block.JointAxisOrAnchor; // Object parameters prim.PrimData = data; // Textures, texture animations, particle system, and extra params //prim.Textures = objectupdate.Textures; prim.TextureAnim = new Primitive.TextureAnimation(block.TextureAnim, 0); prim.ParticleSys = new Primitive.ParticleSystem(block.PSBlock, 0); prim.SetExtraParamsFromBytes(block.ExtraParams, 0); // PCode-specific data switch (data.PCode) { case PCode.Grass: case PCode.Tree: case PCode.NewTree: if (block.Data.Length == 1) { prim.TreeSpecies = (Tree)block.Data[0]; } else { Logger.Log("Got a foliage update with an invalid TreeSpecies field", Helpers.LogLevel.Warning); } prim.ScratchPad = Utils.EmptyBytes; break; default: prim.ScratchPad = new byte[block.Data.Length]; if (block.Data.Length > 0) { Buffer.BlockCopy(block.Data, 0, prim.ScratchPad, 0, prim.ScratchPad.Length); } break; } // Packed parameters //prim.CollisionPlane = objectupdate.CollisionPlane; //prim.Position = objectupdate.Position; //prim.Velocity = objectupdate.Velocity; //prim.Acceleration = objectupdate.Acceleration; //prim.Rotation = objectupdate.Rotation; //prim.AngularVelocity = objectupdate.AngularVelocity; EnsureSelected(prim, simulator); Objects_OnPrimitiveUpdateReal(simulator, prim, objectupdate0, simulator.Handle, 0); } }