mirror of
https://github.com/griffi-gh/kubi.git
synced 2024-11-21 14:28:43 -06:00
preheat chunks on server
This commit is contained in:
parent
dac3c10aee
commit
11ad2cdc77
|
@ -5,6 +5,7 @@ timeout_ms = 10000
|
||||||
|
|
||||||
[world]
|
[world]
|
||||||
seed = 0xfeb_face_dead_cafe
|
seed = 0xfeb_face_dead_cafe
|
||||||
|
preheat_radius = 8
|
||||||
|
|
||||||
[query]
|
[query]
|
||||||
name = "Kubi Server"
|
name = "Kubi Server"
|
||||||
|
|
|
@ -1,37 +1,38 @@
|
||||||
use shipyard::{AllStoragesView, Unique};
|
use shipyard::{AllStoragesView, Unique};
|
||||||
use serde::{Serialize, Deserialize};
|
use serde::{Serialize, Deserialize};
|
||||||
use std::{fs, net::SocketAddr};
|
use std::{fs, net::SocketAddr};
|
||||||
|
|
||||||
#[derive(Serialize, Deserialize)]
|
#[derive(Serialize, Deserialize)]
|
||||||
pub struct ConfigTableServer {
|
pub struct ConfigTableServer {
|
||||||
pub address: SocketAddr,
|
pub address: SocketAddr,
|
||||||
pub max_clients: usize,
|
pub max_clients: usize,
|
||||||
pub timeout_ms: u64,
|
pub timeout_ms: u64,
|
||||||
pub password: Option<String>,
|
pub password: Option<String>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Serialize, Deserialize)]
|
#[derive(Serialize, Deserialize)]
|
||||||
pub struct ConfigTableWorld {
|
pub struct ConfigTableWorld {
|
||||||
pub seed: u64,
|
pub seed: u64,
|
||||||
}
|
pub preheat_radius: u32,
|
||||||
|
}
|
||||||
#[derive(Serialize, Deserialize)]
|
|
||||||
pub struct ConfigTableQuery {
|
#[derive(Serialize, Deserialize)]
|
||||||
pub name: Option<String>
|
pub struct ConfigTableQuery {
|
||||||
}
|
pub name: Option<String>
|
||||||
|
}
|
||||||
#[derive(Unique, Serialize, Deserialize)]
|
|
||||||
pub struct ConfigTable {
|
#[derive(Unique, Serialize, Deserialize)]
|
||||||
pub server: ConfigTableServer,
|
pub struct ConfigTable {
|
||||||
pub world: ConfigTableWorld,
|
pub server: ConfigTableServer,
|
||||||
pub query: ConfigTableQuery,
|
pub world: ConfigTableWorld,
|
||||||
}
|
pub query: ConfigTableQuery,
|
||||||
|
}
|
||||||
pub fn read_config(
|
|
||||||
storages: AllStoragesView,
|
pub fn read_config(
|
||||||
) {
|
storages: AllStoragesView,
|
||||||
log::info!("Reading config...");
|
) {
|
||||||
let config_str = fs::read_to_string("Server.toml").expect("No config file found");
|
log::info!("Reading config...");
|
||||||
let config: ConfigTable = toml::from_str(&config_str).expect("Invalid configuration file");
|
let config_str = fs::read_to_string("Server.toml").expect("No config file found");
|
||||||
storages.add_unique(config);
|
let config: ConfigTable = toml::from_str(&config_str).expect("Invalid configuration file");
|
||||||
}
|
storages.add_unique(config);
|
||||||
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
use shipyard::{World, Workload, IntoWorkload};
|
use shipyard::{IntoWorkload, Workload, WorkloadModificator, World};
|
||||||
use std::{thread, time::Duration};
|
use std::{thread, time::Duration};
|
||||||
|
|
||||||
mod util;
|
mod util;
|
||||||
|
@ -19,7 +19,7 @@ fn initialize() -> Workload {
|
||||||
read_config,
|
read_config,
|
||||||
bind_server,
|
bind_server,
|
||||||
init_client_maps,
|
init_client_maps,
|
||||||
init_world,
|
init_world.after_all(read_config),
|
||||||
).into_workload()
|
).into_workload()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
use shipyard::{Unique, UniqueView, UniqueViewMut, Workload, IntoWorkload, AllStoragesView, View, Get, NonSendSync, IntoIter};
|
use shipyard::{AllStoragesView, Get, IntoIter, IntoWorkload, NonSendSync, SystemModificator, Unique, UniqueView, UniqueViewMut, View, Workload};
|
||||||
use glam::IVec3;
|
use glam::IVec3;
|
||||||
use hashbrown::HashMap;
|
use hashbrown::HashMap;
|
||||||
use kubi_shared::{
|
use kubi_shared::{
|
||||||
|
@ -265,10 +265,33 @@ fn init_chunk_manager_and_block_queue(
|
||||||
storages.add_unique(LocalBlockQueue::default());
|
storages.add_unique(LocalBlockQueue::default());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn preheat_world(
|
||||||
|
mut chunk_manager: UniqueViewMut<ChunkManager>,
|
||||||
|
task_manager: UniqueView<ChunkTaskManager>,
|
||||||
|
config: UniqueView<ConfigTable>,
|
||||||
|
) {
|
||||||
|
let r = config.world.preheat_radius as i32;
|
||||||
|
for x in -r..=r {
|
||||||
|
for y in -r..=r {
|
||||||
|
for z in -r..=r {
|
||||||
|
let chunk_position = IVec3::new(x, y, z);
|
||||||
|
let mut chunk = Chunk::new();
|
||||||
|
chunk.state = ChunkState::Loading;
|
||||||
|
chunk_manager.chunks.insert(chunk_position, chunk);
|
||||||
|
task_manager.spawn_task(ChunkTask::LoadChunk {
|
||||||
|
position: chunk_position,
|
||||||
|
seed: config.world.seed,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub fn init_world() -> Workload {
|
pub fn init_world() -> Workload {
|
||||||
(
|
(
|
||||||
init_chunk_manager_and_block_queue,
|
init_chunk_manager_and_block_queue.before_all(preheat_world),
|
||||||
init_chunk_task_manager,
|
init_chunk_task_manager.before_all(preheat_world),
|
||||||
|
preheat_world,
|
||||||
).into_workload()
|
).into_workload()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue