void NetManager::AddMessageToWriteQueue(string network, string line) { int i = GetConnectionIndex(network); if (i == -1) { bot.BotLog().GetLog(BotLogger::DBG).Put(ERROR, "NetManager::AddMessageToWriteQueue: tried to queue data to nonexistent network \"" + network + "\" (message dropped)"); return; } NetBlob& blob = *connections[i]; blob.queuelock.Lock(); // lock individual write queue blob.write.push(line); blob.queuelock.Unlock(); // unlock individual write queue ++writestate.writespending; return; }
Map::Map(const int width, const int height, char* mapData) { Map::map = this; unsigned int start = clock(); this->Width = width; this->Height = height; Noise* noiser = new Noise((unsigned int)time(NULL)); heightMap = new int[width]; for (int i = 0; i < Width; i++) { heightMap[i] = (int) (noiser->eval(i / 20.0f) * Height); } walls = new Wall*[Width]; for (int i = 0; i < Width; i++) { walls[i] = new Wall[Height]; for (int j = 0; j < Height; j++) { walls[i][j].Id = 0; } } blocks = new Tile*[Width]; for (int i = 0; i < Width; i++) { blocks[i] = new Tile[Height]; } if (!Settings::Multiplayer) { for (int i = 0; i < Width; i++) { int top = heightMap[i]; for (int j = 0; j < Height; j++) { walls[i][j].Id = Block::Dirt->Id; if (rand() % 101 > 50 || true || j > top && j < top + 3) blocks[i][j].Id = Block::Dirt->Id; } } for (int i = 0; i < Width; i++) { int top = heightMap[i]; for (int j = 0; j <= top; j++) { walls[i][j].Id = 0; blocks[i][j].Id = 0; } } printf("World tiles fill: %d ms. \n", clock() - start); start = clock(); /*for (int i = 0; i < 0; i++) CelluarAuto(Height, i);*/ printf("Celluar Auto: %d ms. \n", clock() - start); start = clock(); int k = 0; while (k < 100) { int i = rand() % Width; int j = rand() % height; if (GetBlock(i, j) == 0) continue; k += GenerateVein(i, j, Block::Stone->Id, 5); } printf("Veins generation: %d ms. \n", (clock() - start)); } else { for (int i = 0; i < Width; i++) { for (int j = 0; j < Height; j++) { blocks[i][j].Id = mapData[i + j * width]; } } } start = clock(); for (int i = 0; i < Width; i++) { for (int j = 0; j < Height; j++) { if (blocks[i][j].Id != 0) blocks[i][j].connectionIndex = GetConnectionIndex(i, j); } } for (int i = 0; i < Width; i++) { for (int j = 0; j < Height; j++) { if (walls[i][j].Id != 0) walls[i][j].connectionIndex = GetConnectionIndex(i, j, true); } } printf("Tiles connections: %d ms. \n", clock() - start); start = clock(); for (int i = 0; i < Width; i++) { for (int j = 0; j < Height; j++) { if (blocks[i][j].Id == 0 && walls[i][j].Id == 0) { blocks[i][j].lightSource = MAX_LIGHT; if (NearLive(i, j, 1) == 0) blocks[i][j].lightValue = MAX_LIGHT; } } } minX = 0; minY = 0; maxX = width; maxY = height; CalculateLights(true); printf("Lights calculations: %d ms. \n", clock() - start); start = clock(); player = new Player(); Respawn(); entities.push_back(player); int water_count = 3; int water_x = (int)player->GetPosition().x; int water_y = GetTop(water_x); for (int i = water_x - 2; i < water_x + 2; i++) { for (int j = water_y; j < water_y + 2; j++) { SetBlock(i, j, 0); SetWall(i, j, 0); for (int k = 0; k < water_count; k++) { for (int l = 0; l < water_count; l++) { Water* water = new Water(); water->SetPosition(glm::vec2(i + k * (1 / (float)water_count), j + l * (1 / (float)water_count))); waters.push_back(water); entities.push_back(water); } } } } skyManager = new SkyManager(this->Width); }