Beispiel #1
0
 ///<summary>Raises the ObjectDataBlockUpdate Event</summary>
 /// <param name="e">A ObjectDataBlockUpdateEventArgs object containing
 /// the data sent from the simulator</param>
 protected virtual void OnObjectDataBlockUpdate(ObjectDataBlockUpdateEventArgs e)
 {
     EventHandler<ObjectDataBlockUpdateEventArgs> handler = m_ObjectDataBlockUpdate;
     if (handler != null)
         handler(this, e);
 }
Beispiel #2
0
 void Objects_ObjectDataBlockUpdate(object sender, ObjectDataBlockUpdateEventArgs e)
 {
     if (Prims.ContainsKey(e.Prim.LocalID))
     {
         UpdatePrimBlocking(e.Prim);
     }
 }
Beispiel #3
0
 void Objects_ObjectDataBlockUpdate(object sender, ObjectDataBlockUpdateEventArgs e)
 {
     if (e.Simulator.Handle != Client.Network.CurrentSim.Handle) return;
     UpdatePrimBlocking(e.Prim);
 }
Beispiel #4
0
        void Objects_ObjectDataBlockUpdate(object sender, ObjectDataBlockUpdateEventArgs e)
        {
            if (!this.IsHandleCreated) return;

            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);
            }
        }