Exemple #1
0
        public void Refresh(int x, int y, int z)
        {
            foreach (var coords in Map.GetNearestNonexistedChunks(x, y))
            {
                var p = new Point(coords.Item1, coords.Item2);
                if (_tcpAskedBricks.Contains(p))
                {
                    continue;
                }

                _tcpAskedBricks.Add(p);
                Debug.Log($"sending get chunk { coords.Item1} { coords.Item2}");
                _client.SendText($"get_chunk {coords.Item1} {coords.Item2} ");
            }

            foreach (var chunk in Map.GetNearestChunks(x, y).Where(c => !c.Loaded))
            {
                LoadChunk(chunk);
                return;
            }

            foreach (var chunk in Map.GetFarChunks(x, y).Where(c => c.Loaded))
            {
                UnloadChunk(chunk);
                return;
            }
        }
        private IEnumerator SendPosition()
        {
            while (!_worldInstanced)
            {
                yield return(new WaitForSeconds(0.5F));
            }

            while (true)
            {
                _client.SendText($"position {_world.Map.Position.X} {_world.Map.Position.Y} {_world.Map.Position.Z}");
                yield return(new WaitForSeconds(3F));
            }
        }
        public void Start()
        {
            _client           = new BwTcpClient(ServerIp, PortNumber);
            _client.ReadData += Client_ReadData;
            _client.SendText("get_map");

            _bricks = new [] { Brick1, Brick2, Brick3, Brick4 };

            foreach (var brick in _bricks)
            {
                for (var i = 0; i < 6; i++)
                {
                    SetSideVisible(brick, i, false);
                }
            }

            StartCoroutine("Refresh");
            StartCoroutine("SendPosition");
        }