Fix everything but item slots

This commit is contained in:
hodasemi 2025-04-06 08:34:05 +02:00
parent 071b4dc408
commit 60ba92aa76

View file

@ -1,5 +1,6 @@
use anyhow::Result; use anyhow::Result;
use assetpath::AssetPath; use assetpath::AssetPath;
use ecs::*;
use rpg_components::{ use rpg_components::{
components::{ components::{
attributes::Attributes, character_status::CharacterStatus, inventory::Inventory, attributes::Attributes, character_status::CharacterStatus, inventory::Inventory,
@ -293,12 +294,12 @@ mod macros {
false false
} }
}) { }) {
let socket_object = world.resources.get_mut::<Option<ReferenceObject>>(); let socket_object: &mut ReferenceObject = world.resources.get_mut()?;
*socket_object = Some(ReferenceObject::Item { *socket_object = ReferenceObject::Item {
item, item,
source: ReferenceItemSource::Slots(None), source: ReferenceItemSource::Slots(None),
}); };
empty_affixes_found = true; empty_affixes_found = true;
} }
@ -370,8 +371,19 @@ mod macros {
let (entity, resources) = world.entity_resources($hero)?; let (entity, resources) = world.entity_resources($hero)?;
let items = multi_mut.get::<ItemSlotContainer>()?; let (
let inventory = multi_mut.get::<Inventory<A>>()?; items,
inventory,
statistics,
attributes,
status
): (
&mut ItemSlotContainer,
&mut Inventory<A>,
&mut Statistics,
&mut Attributes,
&mut CharacterStatus
) = entity.get_components_mut()?;
if let Some($item) = items.[<$item>]($index) { if let Some($item) = items.[<$item>]($index) {
inventory.add_item($item.clone()); inventory.add_item($item.clone());
@ -381,17 +393,12 @@ mod macros {
if found_item { if found_item {
items.[<unset_ $item>]($index)?; items.[<unset_ $item>]($index)?;
let statistics = multi_mut.get::<Statistics>()?;
let attributes = multi_mut.get::<Attributes>()?;
statistics.update( statistics.update(
attributes, attributes,
resources.get::<AttributeSettings>(), resources.get::<AttributeSettings>(),
(&*items, resources.get::<ItemSettings>()) (&*items, resources.get::<ItemSettings>())
); );
let status = multi_mut.get::<CharacterStatus>()?;
if status.current_health > statistics.health { if status.current_health > statistics.health {
status.current_health = statistics.health.clone(); status.current_health = statistics.health.clone();
} }
@ -427,12 +434,12 @@ mod macros {
false false
} }
}) { }) {
let socket_object = world.resources.get_mut::<Option<ReferenceObject>>(); let socket_object: &mut ReferenceObject = world.resources.get_mut()?;
*socket_object = Some(ReferenceObject::Item { *socket_object = ReferenceObject::Item {
item, item,
source: ReferenceItemSource::Slots(Some($index)), source: ReferenceItemSource::Slots(Some($index)),
}); };
empty_affixes_found = true; empty_affixes_found = true;
} }