public GenericOpenHeroesRunner(IMapLoader mapLoader, EntityWorld entityWorld = null)
        {
            _mapLoader   = mapLoader;
            EventBus     = JEventBus.GetDefault();
            GameCalendar = new GameCalendar();
            int?internalMapSize = mapLoader?.GetMapSize();

            if (!internalMapSize.HasValue)
            {
                internalMapSize = 512;
            }
            Grid grid = new Grid(internalMapSize.Value, internalMapSize.Value);

            EntitySystem.BlackBoard.SetEntry("EventBus", EventBus);
            EntitySystem.BlackBoard.SetEntry("Grid", grid);
            EntitySystem.BlackBoard.SetEntry("GameCalendar", GameCalendar);
            EntitySystem.BlackBoard.SetEntry("TerrainLayer", new TerrainLayer(grid));

            if (entityWorld == null)
            {
                EntityWorld = new EntityWorld(false, true, true)
                {
                    PoolCleanupDelay = 1
                };
                LoadMap();
            }
            else
            {
                EntityWorld = entityWorld;
            }
        }