use nalgebra_glm::Vec2;
use winit::keyboard::KeyCode;
use crate::ecs::world::World;
pub fn ui_retained_input_sync_system(world: &mut World) {
if !world.resources.retained_ui.enabled {
return;
}
world.resources.retained_ui.frame_events.clear();
world.resources.retained_ui.delta_time = world.resources.window.timing.delta_time;
world.resources.retained_ui.current_time =
world.resources.window.timing.uptime_milliseconds as f64 / 1000.0;
let focused_secondary = world
.resources
.secondary_windows
.focused_index
.and_then(|idx| {
world
.resources
.secondary_windows
.states
.iter()
.find(|s| s.index == idx)
.map(|s| {
let keystates = &s.input.keyboard_keystates;
let ctrl = matches!(
keystates.get(&KeyCode::ControlLeft),
Some(winit::event::ElementState::Pressed)
) || matches!(
keystates.get(&KeyCode::ControlRight),
Some(winit::event::ElementState::Pressed)
);
let shift = matches!(
keystates.get(&KeyCode::ShiftLeft),
Some(winit::event::ElementState::Pressed)
) || matches!(
keystates.get(&KeyCode::ShiftRight),
Some(winit::event::ElementState::Pressed)
);
(
s.input.mouse_wheel_delta,
ctrl,
shift,
s.input.frame_keys.clone(),
s.input.frame_chars.clone(),
)
})
});
if let Some((scroll, ctrl, shift, frame_keys, frame_chars)) = focused_secondary {
world.resources.retained_ui.frame_chars = frame_chars;
world.resources.retained_ui.frame_keys = frame_keys;
world.resources.retained_ui.scroll_delta = scroll;
world.resources.retained_ui.ctrl_held = ctrl;
world.resources.retained_ui.shift_held = shift;
} else {
world.resources.retained_ui.frame_chars =
world.resources.input.keyboard.frame_chars.clone();
world.resources.retained_ui.frame_keys = world.resources.input.keyboard.frame_keys.clone();
world.resources.retained_ui.scroll_delta = world.resources.input.mouse.wheel_delta;
let ctrl_held = world
.resources
.input
.keyboard
.is_key_pressed(KeyCode::ControlLeft)
|| world
.resources
.input
.keyboard
.is_key_pressed(KeyCode::ControlRight);
let shift_held = world
.resources
.input
.keyboard
.is_key_pressed(KeyCode::ShiftLeft)
|| world
.resources
.input
.keyboard
.is_key_pressed(KeyCode::ShiftRight);
world.resources.retained_ui.ctrl_held = ctrl_held;
world.resources.retained_ui.shift_held = shift_held;
}
if world.resources.retained_ui.scroll_delta != Vec2::zeros()
|| !world.resources.retained_ui.frame_chars.is_empty()
{
world.resources.retained_ui.layout_dirty = true;
}
world.resources.retained_ui.cleanup_stale_animations();
}