Exemplo n.º 1
0
        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
            }
        }
Exemplo n.º 2
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 });
            }
        }