summaryrefslogtreecommitdiff
path: root/src/renderer
diff options
context:
space:
mode:
Diffstat (limited to 'src/renderer')
-rw-r--r--src/renderer/mod.rs48
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,
});