public static RevealedGridsResponse FromBytes(byte[] bytes)
        {
            VRage.ByteStream stream = new VRage.ByteStream(bytes, bytes.Length);
            RevealedGridsResponse response = new RevealedGridsResponse();
            response.LoadFromByteStream(stream);

            RevealedGrid grid;
            ushort count = stream.getUShort();
            //Log.Trace("Retrieving " + count + " grids from response", "ToBytes");
            for (int i = 0; i < count; i++) {
                grid = new RevealedGrid(stream);
                response.RevealedGrids.Add(grid);
                //Log.Trace("Added grid " + grid.EntityId, "ToBytes");
            }

            return response;
        }
 private void UpdateRememberedGridPosition(RevealedGrid e)
 {
     GridTree.Move(e);
 }
        private void RememberGrid(RevealedGrid e)
        {
            long id = e.EntityId;
            if (Grids.ContainsKey(id)) {
                Log.Error("Already added " + id, "RememberGrid");
                return;
            }

            Log.Trace("Adding " + id, "RememberGrid");
            Grids.Add(id, e);
            GridTree.Add(e);
        }
        private void ForgetGrid(RevealedGrid e)
        {
            long id = e.EntityId;
            if (!Grids.ContainsKey(id)) {
                Log.Error("Not stored " + id, "ForgetGrid");
                return;
            }

            Log.Trace("Removing " + id, "ForgetGrid");
            Grids.Remove(id);
            GridTree.Remove(e);
        }
        public bool QueueConceal(RevealedGrid grid)
        {
            if (!grid.IsConcealable) {
                Log.Warning("Is not concealable: " + grid.EntityId, "QueueConceal");
                return false;
            }

            Log.Trace("Equeuing grid for conceal " + grid.EntityId, "QueueConceal");
            GridConcealQueue.Enqueue(grid);
            ConcealQueuedMessage msg = new ConcealQueuedMessage(grid.EntityId);
            msg.SendToAll();

            return true;
        }