示例#1
0
        /// <summary>
        ///     For debugging of flight-path and rotation.
        /// </summary>
        private void BroadcastMoveAndMotion()
        {
            if (new Random().Next(5) == 0)
            {
                McpeSetEntityMotion motions = McpeSetEntityMotion.CreateObject();
                motions.runtimeEntityId = EntityId;
                motions.velocity        = Velocity;
                Level.RelayBroadcast(motions);
            }

            if (LastSentPosition != null)
            {
                McpeMoveEntityDelta move = McpeMoveEntityDelta.CreateObject();
                move.runtimeEntityId  = EntityId;
                move.prevSentPosition = LastSentPosition;
                move.currentPosition  = (PlayerLocation)KnownPosition.Clone();
                move.isOnGround       = IsWalker && IsOnGround;
                if (move.SetFlags())
                {
                    Level.RelayBroadcast(move);
                }
            }

            LastSentPosition = (PlayerLocation)KnownPosition.Clone();              // Used for delta

            if (Shooter != null && IsCritical)
            {
                var particle = new CriticalParticle(Level);
                particle.Position = KnownPosition.ToVector3();
                particle.Spawn(new[] { Shooter });
            }
        }
示例#2
0
文件: Entity.cs 项目: kroer/MiNET
        public void BroadcastMove(bool forceMove = false)
        {
            //if (NoAi || forceMove)
            {
                //McpeMoveEntity moveEntity = McpeMoveEntity.CreateObject();
                //moveEntity.runtimeEntityId = EntityId;
                //moveEntity.position = LastSentPosition;
                //moveEntity.flags = (short) (IsOnGround? 1: 0);
                //moveEntity.Encode();
                //Level.RelayBroadcast(moveEntity);

                if (LastSentPosition != null)
                {
                    McpeMoveEntityDelta move = McpeMoveEntityDelta.CreateObject();
                    move.runtimeEntityId  = EntityId;
                    move.prevSentPosition = LastSentPosition;
                    move.currentPosition  = (PlayerLocation)KnownPosition.Clone();
                    move.isOnGround       = IsWalker && IsOnGround;
                    if (move.SetFlags())
                    {
                        Level.RelayBroadcast(move);
                    }
                }

                LastSentPosition = (PlayerLocation)KnownPosition.Clone();                  // Used for delta
            }
        }
示例#3
0
        public void DeltaEncodeTest()
        {
            float curr = 0.34453f;
            float prev = -3.7989f;

            int delta = McpeMoveEntityDelta.ToIntDelta(curr, prev);

            float result = BitConverter.Int32BitsToSingle(BitConverter.SingleToInt32Bits((float)Math.Round(prev, 2)) + delta);

            Assert.AreEqual(Math.Round(curr, 2), Math.Round(result, 2));
        }
示例#4
0
        public override void HandleMcpeMoveEntityDelta(McpeMoveEntityDelta message)
        {
            return;

            /*  if (message.runtimeEntityId != Client.EntityId)
             * {
             *    //TODO: Fix delta reading on packets.
             *    BaseClient.WorldReceiver.UpdateEntityPosition(message.runtimeEntityId,
             *        new PlayerLocation(message.Delta), true, true, true);
             *    return;
             * }*/
        }
示例#5
0
 public virtual void HandleMcpeMoveEntityDelta(McpeMoveEntityDelta message)
 {
 }
 public abstract void HandleMcpeMoveEntityDelta(McpeMoveEntityDelta message);
示例#7
0
 public override void HandleMcpeMoveEntityDelta(McpeMoveEntityDelta message)
 {
 }