public World AsReadOnly()
        {
            var entities     = new List <Entity>();
            var idsToIndexes = new Dictionary <int, int>();

            foreach (var id in Entities.Keys)
            {
                entities.Add(Entities[id]);
                idsToIndexes.Add(id, entities.Count - 1);
            }

            return(new World(Width, Height, Timestamp, IDCounter, entities.ToImmutableList(), new ReadOnlyDictionary <int, int>(idsToIndexes), DictUtils.FromEnumerable(Teams.Select((kvp) => new KeyValuePair <int, Team>(kvp.Key, kvp.Value.AsReadOnly())))));
        }