From 3d7083dc42f660ea2014eb0f28b5cf9362a23b15 Mon Sep 17 00:00:00 2001 From: griffi-gh Date: Fri, 20 Jan 2023 21:55:02 +0100 Subject: [PATCH] some things --- src/main.rs | 23 ++++++++++++++++++----- src/player.rs | 24 ++++++++++++++++++++++++ src/transform.rs | 5 ++++- src/world.rs | 8 +------- src/world/loading.rs | 13 +++++++++++++ 5 files changed, 60 insertions(+), 13 deletions(-) create mode 100644 src/world/loading.rs diff --git a/src/main.rs b/src/main.rs index 03346ad..1b4fb3f 100644 --- a/src/main.rs +++ b/src/main.rs @@ -21,20 +21,27 @@ pub(crate) mod prefabs; pub(crate) mod transform; use rendering::{Rederer, RenderTarget, BackgroundColor, clear_background}; -use world::GameWorld; +use player::spawn_player; +use world::{GameWorld, loading::load_world_around_player}; use prefabs::load_prefabs; #[derive(Unique)] pub(crate) struct DeltaTime(Duration); -fn render() -> Workload { +fn startup() -> Workload { ( - clear_background, - + spawn_player, ).into_workload() } fn update() -> Workload { - (||()).into_workload() + ( + load_world_around_player + ).into_workload() +} +fn render() -> Workload { + ( + clear_background, + ).into_workload() } fn main() { @@ -56,9 +63,15 @@ fn main() { ); world.add_unique(BackgroundColor(vec3(0.5, 0.5, 1.))); world.add_unique(DeltaTime(Duration::default())); + + //Register workloads + world.add_workload(startup); world.add_workload(update); world.add_workload(render); + //Run startup systems + world.run_workload(startup).unwrap(); + //Run the event loop let mut last_update = Instant::now(); event_loop.run(move |event, _, control_flow| { diff --git a/src/player.rs b/src/player.rs index a8bdf86..5052205 100644 --- a/src/player.rs +++ b/src/player.rs @@ -1 +1,25 @@ +use glam::Mat4; +use shipyard::{Component, EntitiesViewMut, ViewMut}; + +use crate::transform::Transform; + +#[derive(Component)] pub struct Player; + +pub fn spawn_player ( + mut entities: EntitiesViewMut, + mut vm_player: ViewMut, + mut vm_transform: ViewMut +) { + log::info!("spawning player"); + entities.add_entity( + ( + &mut vm_player, + &mut vm_transform + ), + ( + Player, + Transform(Mat4::default()) + ) + ); +} diff --git a/src/transform.rs b/src/transform.rs index 9176edd..5087b6c 100644 --- a/src/transform.rs +++ b/src/transform.rs @@ -1,3 +1,6 @@ +use shipyard::Component; use glam::Mat4; -pub struct Transform(Mat4); +#[derive(Component, Clone, Copy, Debug, Default)] +#[track(All)] +pub struct Transform(pub Mat4); diff --git a/src/world.rs b/src/world.rs index 93d7f72..b2608c7 100644 --- a/src/world.rs +++ b/src/world.rs @@ -6,13 +6,13 @@ pub mod chunk; pub mod block; pub mod render; pub mod tasks; +pub mod loading; use chunk::Chunk; //TODO separate world struct for render data // because this is not send-sync - pub struct AllChunksNeighbors<'a> { pub center: &'a Chunk, pub top: &'a Chunk, @@ -97,9 +97,3 @@ impl GameWorld { }) } } - -fn update_world( - -) { - -} diff --git a/src/world/loading.rs b/src/world/loading.rs new file mode 100644 index 0000000..551cfd1 --- /dev/null +++ b/src/world/loading.rs @@ -0,0 +1,13 @@ +use shipyard::{View, UniqueViewMut, NonSendSync, IntoIter}; +use crate::{player::Player, transform::Transform}; +use super::GameWorld; + +pub fn load_world_around_player( + v_player: View, + v_transform: View, + vm_world: NonSendSync>, +) { + for (player, transform) in (&v_player, v_transform.inserted_or_modified()).iter() { + + } +}