diff options
Diffstat (limited to 'src/renderer/mod.rs')
| -rw-r--r-- | src/renderer/mod.rs | 48 |
1 files changed, 24 insertions, 24 deletions
diff --git a/src/renderer/mod.rs b/src/renderer/mod.rs index 403eeb2..291b6d4 100644 --- a/src/renderer/mod.rs +++ b/src/renderer/mod.rs @@ -11,11 +11,8 @@ use crate::{ config::{CELLS_IN_CHUNK, CHUNK_SIZE}, renderer::ui::draw_egui, sim::{ - cell::materials::MaterialId, - cell_manager::manager::CellManager, - particle_manager::ParticleManager, - rb_manager::{RbManager, debug_render::DebugVertex, rb_entity::RbEntity}, - sim_manager::SimManager, + cell::materials::MaterialId, cell_manager::manager::CellManager, entity::Entity, + rb_manager::debug_render::DebugVertex, sim_manager::SimManager, }, }; @@ -693,23 +690,25 @@ impl RendererState { puffin::profile_scope!("Upload entity cells"); // TODO optimize, this is very inefficient, just build it per frame with positions and skip the lookup? self.renderer_rb_entities.drain(); - for entity in sim.rb_manager.rb_entities.values() { + for entity in sim.entities.values() { // TODO add "needs texture update"? - for i in 0..entity.cells.len() { - cell_buffer[i] = entity.cells[i].material as u8; - } + if let Some(cells) = &entity.cells { + for i in 0..cells.cells.len() { + cell_buffer[i] = cells.cells[i].material as u8; + } - let next_slot = CHUNK_SLOTS + self.renderer_rb_entities.len(); - let slot = *self - .renderer_rb_entities - .entry(entity.id) - .or_insert(next_slot); + let next_slot = CHUNK_SLOTS + self.renderer_rb_entities.len(); + let slot = *self + .renderer_rb_entities + .entry(entity.id) + .or_insert(next_slot); - self.queue.write_buffer( - &self.cell_buffer, - (slot * CHUNK_SIZE as usize * CHUNK_SIZE as usize) as u64, - &cell_buffer, - ); + self.queue.write_buffer( + &self.cell_buffer, + (slot * CHUNK_SIZE as usize * CHUNK_SIZE as usize) as u64, + &cell_buffer, + ); + } } } @@ -743,14 +742,15 @@ impl RendererState { } for (id, slot) in &self.renderer_rb_entities { - if let Some(&RbEntity { width, height, .. }) = sim.rb_manager.rb_entities.get(id) - && let Some((x, y, cos, sin)) = sim.rb_manager.get_rb_entity_transform(*id) + if let Some(entity) = sim.entities.get(id) + && let Some(cells) = &entity.cells + && let Some((pos, (cos, sin))) = entity.transform(sim) { instances.push(RendererInstance { - centre: [x, y], + centre: pos.to_array(), cos_sin: [cos, sin], - half_size: [width as f32 / 2.0, height as f32 / 2.0], - dims: [width as u32, height as u32], + half_size: (cells.size.as_vec2() / 2.0).to_array(), + dims: cells.size.as_uvec2().to_array(), cell_offset: (slot * CHUNK_SIZE as usize * CHUNK_SIZE as usize) as u32, _padding: 0, }); |
