blob: 92367f60463010022f42622c3e6457de325fda8d (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
#pragma once
#include "Generation/Generator.hpp"
#include "ChunkIndex.hpp"
#include "ChunkRegistry.hpp"
#include "../Compute/Queue.hpp"
#include "Generation/ChunkMeshing.hpp"
#include "Generation/Lighting.hpp"
namespace MC::World {
class World {
public:
std::vector<ChunkRegistry::Data*> get_visible_chunks(Position::World position);
Real get_average_chunk_time() const;
private:
std::vector<ChunkIndex> get_visible_chunk_indices(Position::World position) const;
void process_chunk_updates();
void request_generation(ChunkIndex index, Real priority);
void request_reification(ChunkIndex index, Real priority);
enum class RequestType { Initial, Update };
static Real calculate_priority(ChunkIndex chunk, Position::World player_position, RequestType request_type);
void log_chunk_time(U64 chunk_time_ms);
U8 m_view_distance_radius = 12;
struct GenerationResult {
Chunk chunk;
U64 generation_duration;
};
Compute::Queue<GenerationResult, ChunkIndex> m_generation_queue{4};
struct ReificationResult {
Chunk chunk;
Generation::ChunkMeshing::ChunkMesh chunk_mesh;
};
Compute::Queue<ReificationResult, ChunkIndex> m_reification_queue{4};
Generation::Generator m_generator;
Generation::Lighting m_lighting;
ChunkRegistry m_registry;
struct Statistics {
UInt chunk_time_sample_count;
Real average_chunk_time_ms;
};
Statistics m_statistics{0, 0.0f};
};
}
|