diff --git a/src/abilities/needling_hex.rs b/src/abilities/needling_hex.rs index a5cc6d1..8450d67 100644 --- a/src/abilities/needling_hex.rs +++ b/src/abilities/needling_hex.rs @@ -7,7 +7,7 @@ use crate::{ game_logic::{ commands::{CastAbility, CastAbilityInterface, GameCommand, GameCommandKind}, damage_resolution::{DamageInstance, DealDamage}, - effects::{GameEffect, UniqueEffectInterface}, + effects::{GameEffect, ReflectGameEffect, UniqueEffectInterface}, faction::Faction, fight::FightInterface, Ability, AbilityId, AbilitySlot, @@ -34,6 +34,7 @@ fn add_to_ability_catalog(mut abilties_catalog: ResMut) { } #[derive(Debug, Component, Reflect, Deref, DerefMut)] +#[reflect(GameEffect)] struct NeedlingHexEffect(FiniteRepeatingTimer); impl GameEffect for NeedlingHexEffect {} diff --git a/src/game_logic/effects.rs b/src/game_logic/effects.rs index 641a5f8..6290505 100644 --- a/src/game_logic/effects.rs +++ b/src/game_logic/effects.rs @@ -36,10 +36,11 @@ impl EffectsHolder { } /// Marker trait for components that represent effects -pub trait GameEffect: Component + Reflect + std::fmt::Debug {} +#[reflect_trait] +pub trait GameEffect: Reflect + std::fmt::Debug {} #[derive(SystemParam)] -pub struct UniqueEffectInterface<'w, 's, E: GameEffect> { +pub struct UniqueEffectInterface<'w, 's, E: GameEffect + Component> { has_effects: Query<'w, 's, &'static HasEffects>, effects_holders: Query<'w, 's, &'static EffectsHolder>, children: Query<'w, 's, &'static Children>, @@ -48,7 +49,7 @@ pub struct UniqueEffectInterface<'w, 's, E: GameEffect> { effect_query: Query<'w, 's, Entity, With>, } -impl<'w, 's, E: GameEffect> UniqueEffectInterface<'w, 's, E> { +impl<'w, 's, E: GameEffect + Component> UniqueEffectInterface<'w, 's, E> { pub fn spawn_or_replace_unique_effect(&mut self, target: Entity, effect: E) { let effect_e = self .get_unique_effect(target)