which is called like this:
fn try_equip_equipment_system(
mut events: EventReader<SelectedEquipmentSlot>,
mut held_item_query: Query<(
Entity,
&mut SelectedItem,
&mut EquipmentSlots,
&mut Stats,
)>,
mut item_query: Query<(
&EquipmentItem,
&StatStick,
&mut EquippedTo,
)>,
) {
for event in events.read() {
for (
equipping_entity,
mut selected_item,
mut equipment_slots,
mut stats,
) in held_item_query.iter_mut() {
if let Some(held_item_entity) = selected_item.0 {
let equipment_in_slot = equipment_slots.0.get(event.0).and_then(|slot| slot.entity);
if equipment_slots.try_equip_item(
event.0,
held_item_entity,
equipping_entity,
&mut stats,
&mut item_query,
) {
//equipment_slots.0[event.0].entity = Some(held_item_entity);
selected_item.0 = equipment_in_slot;
} else {
println!("Failed to equip item {:?}.", held_item_entity);
}
} else {
let Some(slot_data) = equipment_slots.0.get(event.0) else {
println!("Invalid equipment slot");
continue;
};
let Some(equipped_entity) = slot_data.entity else {
println!("Equipment slot is empty");
continue;
};
selected_item.0 = Some(equipped_entity);
equipment_slots.unequip_item(
event.0,
equipped_entity,
equipping_entity,
&mut stats,
&mut item_query.transmute_lens::<(&StatStick, &mut EquippedTo)>().query(),
);
}
}
}
}
My problem is that the line slot.entity = Some(new_item_entity); in my EquipmentSlots struct does not actually set slot.entity. If I put debug statements before and after, the slot appears to change. However, in order to actually set it I have to uncomment this line in try_equip_equipment_system: equipment_slots.0[event.0].entity = Some(held_item_entity);
It's like the mutable reference to the slot is getting messed up somewhere, but I don't understand rust well enough to know why this might happen.