bettola/srv/game/game_send_chunks.cpp

30 lines
1.1 KiB
C++

#include <cstring>
#include "bettola/game/chunk.h"
#include "game.h"
#include "bettola/network/chunk_message.h"
#include "bettola/network/message.h"
#include "player.h"
void Game::_send_chunks_around(Player* player, int center_x, int center_z) {
BettolaLib::Network::MessageHeader header;
header.type = BettolaLib::Network::MessageType::ChunkData;
header.size = sizeof(BettolaLib::Network::ChunkMessage);
const int view_distance = 4; /* Load a 9x9 grid (4 chunks in each direction). */
/* Send a grid of chunks around the players current chunk. */
for(int x = center_x - view_distance; x <= center_x + view_distance; ++x) {
for(int z = center_z - view_distance; z <= center_z + view_distance; ++z) {
BettolaLib::Game::Chunk& chunk = _world.get_chunk(x, z);
BettolaLib::Network::ChunkMessage msg;
msg.chunk_x = x;
msg.chunk_z = z;
memcpy(msg.heightmap, chunk.heightmap.data(), chunk.heightmap.size() * sizeof(float));
player->get_socket().send(&header, sizeof(header));
player->get_socket().send(&msg, sizeof(msg));
}
}
}