relaod mechanic

This commit is contained in:
2025-04-02 02:15:43 +08:00
parent 9aaa015bd6
commit 01f8128e5f
7 changed files with 82 additions and 16 deletions

View File

@@ -262,6 +262,7 @@ fn swap_head_inputs(
backpack: Res<Backpack>,
mut commands: Commands,
mut state: ResMut<BackpackUiState>,
time: Res<Time>,
) {
if state.count == 0 {
return;
@@ -292,17 +293,17 @@ fn swap_head_inputs(
if changed {
commands.trigger(PlaySound::Selection);
sync(&backpack, &mut state);
sync(&backpack, &mut state, time.elapsed_secs());
}
}
fn sync_on_change(backpack: Res<Backpack>, mut state: ResMut<BackpackUiState>) {
if backpack.is_changed() {
sync(&backpack, &mut state);
fn sync_on_change(backpack: Res<Backpack>, mut state: ResMut<BackpackUiState>, time: Res<Time>) {
if backpack.is_changed() || backpack.reloading() {
sync(&backpack, &mut state, time.elapsed_secs());
}
}
fn sync(backpack: &Res<Backpack>, state: &mut ResMut<BackpackUiState>) {
fn sync(backpack: &Res<Backpack>, state: &mut ResMut<BackpackUiState>, time: f32) {
state.count = backpack.heads.len();
state.scroll = state.scroll.min(state.count.saturating_sub(HEAD_SLOTS));
@@ -316,7 +317,7 @@ fn sync(backpack: &Res<Backpack>, state: &mut ResMut<BackpackUiState>) {
for i in 0..HEAD_SLOTS {
if let Some(head) = backpack.heads.get(i + state.scroll) {
state.heads[i] = Some(UiHeadState::from(*head));
state.heads[i] = Some(UiHeadState::new(*head, time));
} else {
state.heads[i] = None;
}