using System; using System.Runtime.InteropServices.ComTypes; using CryptonymThunder.Code.Resources; using CryptonymThunder.Code.Resources.Effects; using GameCore.Combat.Effects; using GameCore.Combat.Interfaces; namespace CryptonymThunder.Code.Factories; public class EffectFactory { public IEffect Create(EffectResource resource) { return resource switch { FireProjectileEffectResource fire => new BulkProjectileEffect(fire.ProjectileArchetypeId, fire.Count, fire.SpreadAngle, fire.ProjectileSpeed), DamageEffectResource damage => new DamageEffect(damage.Amount), HitscanEffectResource hitscan => new HitscanEffect(hitscan.Range), ConsumeAmmoCostResource consumeAmmo => new ConsumeAmmoCost(consumeAmmo.AmmoId, consumeAmmo.Amount), HealEffectResource heal => new HealEffect(heal.Amount), _ => throw new ArgumentOutOfRangeException(nameof(resource), $"Effect type {resource.GetType().Name} not recognized") }; } }