diff -r e7eb0cd5b0e4 -r 84c07aa94b61 rust/lib-hedgewars-engine/src/world.rs --- a/rust/lib-hedgewars-engine/src/world.rs Fri Nov 13 02:52:15 2020 +0300 +++ b/rust/lib-hedgewars-engine/src/world.rs Fri Nov 13 20:54:00 2020 +0300 @@ -12,7 +12,7 @@ }; use lfprng::LaggedFibonacciPRNG; -use crate::render::{camera::Camera, GearRenderer, MapRenderer}; +use crate::render::{camera::Camera, GearEntry, GearRenderer, MapRenderer}; struct GameState { land: Land2D, @@ -32,6 +32,7 @@ map_renderer: Option, gear_renderer: Option, camera: Camera, + gear_entries: Vec, } impl World { @@ -43,6 +44,7 @@ map_renderer: None, gear_renderer: None, camera: Camera::new(), + gear_entries: vec![], } } @@ -125,9 +127,26 @@ renderer.render(&self.camera); } + + self.gear_entries.clear(); + let mut gear_entries = std::mem::take(&mut self.gear_entries); + if let Some(ref mut renderer) = self.gear_renderer { - renderer.render(&self.camera) + if let Some(ref mut state) = self.game_state { + state + .physics + .iter_data() + .run(|(pos,): (&mut PositionData,)| { + gear_entries.push(GearEntry::new( + f64::from(pos.0.x()) as f32, + f64::from(pos.0.y()) as f32, + Size::square(128), + )) + }); + } + renderer.render(&self.camera, &gear_entries); } + self.gear_entries = gear_entries; } fn create_gear(&mut self, position: Point) {