basic netw

This commit is contained in:
griffi-gh 2023-03-07 03:05:02 +01:00
parent 1bb785df1d
commit ac5f39a49e
3 changed files with 21 additions and 24 deletions

View file

@ -1,9 +1,15 @@
//TODO server-side chunk manager use glam::IVec3;
use hashbrown::HashMap;
use kubi_shared::chunk::BlockData;
use shipyard::Unique;
pub struct Chunk { pub struct Chunk {
pub blocks: BlockData
} }
#[derive(Unique)]
pub struct ChunkManager { pub struct ChunkManager {
pub chunks: HashMap<IVec3, Chunk>
} }
pub fn server_chunk_response( pub fn server_chunk_response(

View file

@ -1,12 +1,14 @@
use glam::{IVec3, ivec3}; use glam::{IVec3, ivec3};
use glium::{VertexBuffer, IndexBuffer, index::PrimitiveType}; use glium::{VertexBuffer, IndexBuffer, index::PrimitiveType};
use kubi_shared::networking::messages::ClientToServerMessage;
use shipyard::{View, UniqueView, UniqueViewMut, IntoIter, Workload, IntoWorkload, NonSendSync, track}; use shipyard::{View, UniqueView, UniqueViewMut, IntoIter, Workload, IntoWorkload, NonSendSync, track};
use crate::{ use crate::{
player::MainPlayer, player::MainPlayer,
transform::Transform, transform::Transform,
settings::GameSettings, settings::GameSettings,
rendering::Renderer, rendering::Renderer,
state::GameState state::GameState,
networking::UdpClient,
}; };
use super::{ use super::{
ChunkStorage, ChunkMeshStorage, ChunkStorage, ChunkMeshStorage,
@ -118,6 +120,7 @@ fn unload_downgrade_chunks(
fn start_required_tasks( fn start_required_tasks(
task_manager: UniqueView<ChunkTaskManager>, task_manager: UniqueView<ChunkTaskManager>,
udp_client: Option<UniqueView<UdpClient>>,
mut world: UniqueViewMut<ChunkStorage>, mut world: UniqueViewMut<ChunkStorage>,
) { ) {
if !world.is_modified() { if !world.is_modified() {
@ -130,10 +133,16 @@ fn start_required_tasks(
match chunk.desired_state { match chunk.desired_state {
DesiredChunkState::Loaded | DesiredChunkState::Rendered if chunk.current_state == CurrentChunkState::Nothing => { DesiredChunkState::Loaded | DesiredChunkState::Rendered if chunk.current_state == CurrentChunkState::Nothing => {
//start load task //start load task
task_manager.spawn_task(ChunkTask::LoadChunk { if let Some(client) = &udp_client {
seed: 0xbeef_face_dead_cafe, client.0.send_message(ClientToServerMessage::ChunkRequest {
position chunk: position.to_array()
}); }).unwrap();
} else {
task_manager.spawn_task(ChunkTask::LoadChunk {
seed: 0xbeef_face_dead_cafe,
position
});
}
//Update chunk state //Update chunk state
let chunk = world.chunks.get_mut(&position).unwrap(); let chunk = world.chunks.get_mut(&position).unwrap();
chunk.current_state = CurrentChunkState::Loading; chunk.current_state = CurrentChunkState::Loading;

View file

@ -77,24 +77,6 @@ impl ChunkTaskManager {
} }
} }
pub fn spawn_task_or_get_from_network_if_possible(client: Option<&mut UdpClient>, manager: &mut ChunkTaskManager, task: ChunkTask) {
match &task {
ChunkTask::LoadChunk { seed, position } => {
match client {
Some(client) => {
client.0.send_message(ClientToServerMessage::ChunkRequest { chunk: position.to_array() }).unwrap();
},
None => {
manager.spawn_task(task)
}
}
},
_ => {
manager.spawn_task(task)
}
}
}
//TODO get rid of this, this is awfulll //TODO get rid of this, this is awfulll
pub fn inject_network_responses_into_manager_queue( pub fn inject_network_responses_into_manager_queue(
manager: UniqueView<ChunkTaskManager>, manager: UniqueView<ChunkTaskManager>,