Example #1
0
        public static UpdatePosition read(BinaryReader binaryReader)
        {
            UpdatePosition newObj = new UpdatePosition();

            newObj.object_id    = binaryReader.ReadUInt32();
            newObj.positionPack = PositionPack.read(binaryReader);
            return(newObj);
        }
Example #2
0
        public static PositionAndMovement read(BinaryReader binaryReader)
        {
            PositionAndMovement newObj = new PositionAndMovement();

            newObj.object_id    = binaryReader.ReadUInt32();
            newObj.positionPack = PositionPack.read(binaryReader);
            newObj.movementData = MovementData.read(binaryReader);

            return(newObj);
        }
        public GameMessageUpdatePosition(WorldObject worldObject)
            : base(GameMessageOpcode.UpdatePosition, GameMessageGroup.SmartboxQueue)
        {
            //Console.WriteLine($"Sending UpdatePosition for {worldObject.Name}");

            // todo: avoid create intermediate object
            PositionPack = new PositionPack(worldObject);

            Writer.WriteGuid(worldObject.Guid);
            Writer.Write(PositionPack);
        }
Example #4
0
        public List <string> packedItems; // For display purposes

        public static PositionPack read(BinaryReader binaryReader)
        {
            PositionPack newObj = new PositionPack();

            newObj.packedItems = new List <string>();
            newObj.bitfield    = binaryReader.ReadUInt32();
            newObj.position    = Position.readOrigin(binaryReader);

            if ((newObj.bitfield & (uint)PackBitfield.OrientationHasNoW) == 0)
            {
                newObj.position.qw = binaryReader.ReadSingle();
            }
            else
            {
                newObj.packedItems.Add(PackBitfield.OrientationHasNoW.ToString());
            }
            if ((newObj.bitfield & (uint)PackBitfield.OrientationHasNoX) == 0)
            {
                newObj.position.qx = binaryReader.ReadSingle();
            }
            else
            {
                newObj.packedItems.Add(PackBitfield.OrientationHasNoX.ToString());
            }
            if ((newObj.bitfield & (uint)PackBitfield.OrientationHasNoY) == 0)
            {
                newObj.position.qy = binaryReader.ReadSingle();
            }
            else
            {
                newObj.packedItems.Add(PackBitfield.OrientationHasNoY.ToString());
            }
            if ((newObj.bitfield & (uint)PackBitfield.OrientationHasNoZ) == 0)
            {
                newObj.position.qz = binaryReader.ReadSingle();
            }
            else
            {
                newObj.packedItems.Add(PackBitfield.OrientationHasNoZ.ToString());
            }

            // newObj.position.frame.cache();

            if ((newObj.bitfield & (uint)PackBitfield.HasVelocity) != 0)
            {
                newObj.velocity_x = binaryReader.ReadSingle();
                newObj.velocity_y = binaryReader.ReadSingle();
                newObj.velocity_z = binaryReader.ReadSingle();
                newObj.packedItems.Add(PackBitfield.HasVelocity.ToString());
            }

            if ((newObj.bitfield & (uint)PackBitfield.HasPlacementID) != 0)
            {
                newObj.placement_id = binaryReader.ReadUInt32();
                newObj.packedItems.Add(PackBitfield.HasPlacementID.ToString());
            }

            newObj.has_contact = (newObj.bitfield & (uint)PackBitfield.IsGrounded) != 0;
            if (newObj.has_contact)
            {
                newObj.packedItems.Add(PackBitfield.IsGrounded.ToString());
            }

            newObj.instance_timestamp       = binaryReader.ReadUInt16();
            newObj.position_timestamp       = binaryReader.ReadUInt16();
            newObj.teleport_timestamp       = binaryReader.ReadUInt16();
            newObj.force_position_timestamp = binaryReader.ReadUInt16();
            return(newObj);
        }