diff options
Diffstat (limited to 'client/src/state.rs')
-rw-r--r-- | client/src/state.rs | 35 |
1 files changed, 32 insertions, 3 deletions
diff --git a/client/src/state.rs b/client/src/state.rs index 5176ca1..cb7316d 100644 --- a/client/src/state.rs +++ b/client/src/state.rs @@ -20,7 +20,7 @@ use glam::{Vec2, Vec3}; use log::{info, warn}; use std::{net::TcpStream, sync::Arc, time::Instant}; use weareshared::{ - packets::{Packet, Resource}, + packets::{Object, Packet, Resource}, resources::PrefabIndex, store::ResourceStore, tree::SceneTree, @@ -38,6 +38,7 @@ pub struct State<'a> { pub prefab_index: Arc<PrefabIndex>, pub prefab_index_res_loaded: Option<Resource<PrefabIndex>>, pub prefab_index_res: Option<Resource<PrefabIndex>>, + pub avatar_ob: Option<Object>, } pub struct InputState { @@ -67,6 +68,7 @@ impl<'a> State<'a> { }, prefab_index_res: None, prefab_index_res_loaded: None, + avatar_ob: None, prefab_index: PrefabIndex::default().into(), }) } @@ -103,6 +105,7 @@ impl<'a> State<'a> { return; } let pi = self.prefab_index.clone(); + let net = self.network.clone(); self.renderer .ui_renderer .add_surface(self.camera.new_ui_affine(), move |ctx| { @@ -110,10 +113,15 @@ impl<'a> State<'a> { egui::Window::new("Prefab Index") .open(&mut open) .show(ctx, |ui| { - for (key, _res) in &pi.0 { + for (key, res) in &pi.0 { ui.horizontal(|ui| { ui.label(key); - if ui.button("Add").clicked() {} + if ui.button("Add").clicked() { + info!("spawn {res}"); + net.packet_send + .send(Packet::Add(Object::new(), res.clone())) + .unwrap(); + } }); } }); @@ -150,6 +158,27 @@ impl<'a> State<'a> { } } + if let Some(ob) = self.avatar_ob { + self.network + .packet_send + .send(Packet::Position( + ob, + self.camera.position().into(), + self.camera.rotation().into(), + )) + .unwrap(); + } else { + if let Some(res) = self.prefab_index.0.get("avatar_test") { + info!("found avatar resource {res}"); + let ob = Object::new(); + self.network + .packet_send + .send(Packet::Add(ob, res.to_owned())) + .unwrap(); + self.avatar_ob = Some(ob) + } + } + self.input_state.egui_events.clear(); Ok(()) } |