protected override void Initialize()
        {
            Window.AllowUserResizing = true;
            IsMouseVisible           = true;

            base.Initialize();
            Input.SetWindow(Window);

            _offset = new Vector2(-DrawDistance * Chunk.Size * 8) / 2f;

            _chunkUpdates = new float[DrawDistance, DrawDistance];

            _world = new World(World_ChunkRequest);
            _world.OnBuildOrder += (w, c, order) =>
            {
                _chunkUpdates[c.Position.X, c.Position.Y] = ChunkUpdateDuration;
            };

            _client = new NetGameClient();
            _client.Open();

            System.Threading.Tasks.Task.Run(() =>
            {
                _client.Connect(IPAddress.Loopback, AppConstants.NetDefaultPort);

                Thread.Sleep(500);
                var grid = new byte[DrawDistance * Chunk.Size, DrawDistance * Chunk.Size];

                while (true)
                {
                    for (int i = 0; i < grid.GetLength(0); i++)
                    {
                        for (int j = 0; j < grid.GetLength(1); j++)
                        {
                            var tp = new TilePosition(i, j);
                            if (_world.TryGetChunk(ChunkPosition.FromTile(tp), out var chunk))
                            {
                                grid[i, j] = (byte)Math.Min((ushort)1, chunk.GetTile(tp.LocalX, tp.LocalY).ID);
                            }
                        }
                    }

                    var finder = new PathFinder(grid);
                    _path      = finder.FindPath(new TilePosition(80, 80), new TilePosition(100, 100));

                    Thread.Sleep(250);
                }
            });
        }
        public GameScene(CCWindow window) : base(window) {
            Id = "";

            _backgroundLayer = new BackgroundLayer();
            AddChild(_backgroundLayer);

            var cameraVisibleBounds = new CCSize(Settings.ScreenWidth, Settings.ScreenHeight);
            var camera = new CCCamera(CCCameraProjection.Projection3D, cameraVisibleBounds,
                new CCPoint3(Settings.ScreenWidth, Settings.ScreenHeight, 10));

            GameLayer = new GameLayer {
                Tag = Tags.Client,
                Camera = camera,
            };
            AddChild(GameLayer);

            _chatLayer = new ChatLayer();
            AddChild(_chatLayer);

            _hudLayer = new HudLayer();
            AddChild(_hudLayer);


            var keyListener = new CCEventListenerKeyboard {OnKeyPressed = OnKeyPressed, OnKeyReleased = OnKeyReleased};
            AddEventListener(keyListener, this);

            var mouseListener = new CCEventListenerMouse {
                OnMouseDown = OnMouseDown,
                OnMouseUp = OnMouseUp,
                OnMouseMove = OnMouseScroll
            };
            AddEventListener(mouseListener, this);

            var parser = new FileIniDataParser();
            IniData data = parser.ReadFile("Config.ini");
            string nickname = data["Client"]["nickname"];
            _netGameClient = new NetGameClient(data["Server"]["ip"], this);
            _netGameClient.ConnectToServer(nickname);

            InitEvents();

            Schedule(Update);
            Schedule(UpdateNetwork, Settings.NetworkFreqUpdate);
        }