mirror of
https://gitlab.com/veloren/veloren.git
synced 2024-08-30 18:12:32 +00:00
Debug visualisation of relative wind velocity
This commit is contained in:
parent
5debf68821
commit
dfcb8c03f5
@ -1181,4 +1181,43 @@ impl Scene {
|
|||||||
keep
|
keep
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn maintain_debug_relative_wind(
|
||||||
|
&mut self,
|
||||||
|
client: &Client,
|
||||||
|
settings: &Settings,
|
||||||
|
debug_shape_id: &mut Option<DebugShapeId>,
|
||||||
|
) {
|
||||||
|
if settings.interface.toggle_hitboxes {
|
||||||
|
let ecs = client.state().ecs();
|
||||||
|
let entity = client.entity();
|
||||||
|
|
||||||
|
let rel_flow = ecs
|
||||||
|
.read_storage::<comp::PhysicsState>()
|
||||||
|
.get(entity)
|
||||||
|
.and_then(|physics| physics.in_fluid)
|
||||||
|
.and_then(|fluid| {
|
||||||
|
ecs.read_storage::<comp::Vel>()
|
||||||
|
.get(entity)
|
||||||
|
.map(|vel| fluid.relative_flow(vel))
|
||||||
|
});
|
||||||
|
|
||||||
|
if let (Some(pos), Some(rel_flow)) = (
|
||||||
|
ecs.read_storage::<comp::Pos>().get(entity).copied(),
|
||||||
|
rel_flow,
|
||||||
|
) {
|
||||||
|
if let Some(shape_id) = debug_shape_id {
|
||||||
|
self.debug.remove_shape(*shape_id);
|
||||||
|
}
|
||||||
|
let shape_id = self
|
||||||
|
.debug
|
||||||
|
.add_shape(DebugShape::Line([Vec3::zero(), rel_flow.0 * 0.2]));
|
||||||
|
debug_shape_id.insert(shape_id);
|
||||||
|
|
||||||
|
let hb_pos = [pos.0.x, pos.0.y, pos.0.z + 2.0, 0.0];
|
||||||
|
let color = [0.0, 1.0, 1.0, 0.5];
|
||||||
|
self.debug.set_pos_and_color(shape_id, hb_pos, color);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -75,6 +75,7 @@ pub struct SessionState {
|
|||||||
interactable: Option<Interactable>,
|
interactable: Option<Interactable>,
|
||||||
saved_zoom_dist: Option<f32>,
|
saved_zoom_dist: Option<f32>,
|
||||||
hitboxes: HashMap<specs::Entity, DebugShapeId>,
|
hitboxes: HashMap<specs::Entity, DebugShapeId>,
|
||||||
|
debug_wind: Option<DebugShapeId>,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Represents an active game session (i.e., the one being played).
|
/// Represents an active game session (i.e., the one being played).
|
||||||
@ -123,6 +124,7 @@ impl SessionState {
|
|||||||
interactable: None,
|
interactable: None,
|
||||||
saved_zoom_dist: None,
|
saved_zoom_dist: None,
|
||||||
hitboxes: HashMap::new(),
|
hitboxes: HashMap::new(),
|
||||||
|
debug_wind: None,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -144,6 +146,8 @@ impl SessionState {
|
|||||||
let mut client = self.client.borrow_mut();
|
let mut client = self.client.borrow_mut();
|
||||||
self.scene
|
self.scene
|
||||||
.maintain_debug_hitboxes(&client, &global_state.settings, &mut self.hitboxes);
|
.maintain_debug_hitboxes(&client, &global_state.settings, &mut self.hitboxes);
|
||||||
|
self.scene
|
||||||
|
.maintain_debug_relative_wind(&client, &global_state.settings, &mut self.debug_wind);
|
||||||
for event in client.tick(self.inputs.clone(), dt, crate::ecs::sys::add_local_systems)? {
|
for event in client.tick(self.inputs.clone(), dt, crate::ecs::sys::add_local_systems)? {
|
||||||
match event {
|
match event {
|
||||||
client::Event::Chat(m) => {
|
client::Event::Chat(m) => {
|
||||||
@ -1372,6 +1376,12 @@ impl PlayState for SessionState {
|
|||||||
&scene_data,
|
&scene_data,
|
||||||
&client,
|
&client,
|
||||||
);
|
);
|
||||||
|
self.scene.maintain(
|
||||||
|
global_state.window.renderer_mut(),
|
||||||
|
&mut global_state.audio,
|
||||||
|
&scene_data,
|
||||||
|
&client,
|
||||||
|
);
|
||||||
|
|
||||||
// Process outcomes from client
|
// Process outcomes from client
|
||||||
for outcome in outcomes {
|
for outcome in outcomes {
|
||||||
|
Loading…
Reference in New Issue
Block a user