using AppleHills.Core.Settings; using Core; using Minigames.Airplane.Data; namespace Minigames.Airplane.Abilities { /// /// Factory for creating airplane abilities from settings configuration. /// public static class AbilityFactory { /// /// Create an ability instance based on type and settings. /// public static BaseAirplaneAbility CreateAbility(AirplaneAbilityType type, IAirplaneSettings settings) { if (settings == null) { Logging.Error("[AbilityFactory] Settings is null!"); return null; } return type switch { AirplaneAbilityType.Jet => CreateJetAbility(settings), AirplaneAbilityType.Bobbing => CreateBobbingAbility(settings), AirplaneAbilityType.Drop => CreateDropAbility(settings), _ => null }; } private static JetAbility CreateJetAbility(IAirplaneSettings settings) { var config = settings.JetAbilityConfig; return new JetAbility( config.abilityName, config.abilityIcon, config.cooldownDuration, config.jetSpeed, config.jetAngle ); } private static BobbingAbility CreateBobbingAbility(IAirplaneSettings settings) { var config = settings.BobbingAbilityConfig; return new BobbingAbility( config.abilityName, config.abilityIcon, config.cooldownDuration, config.bobForce ); } private static DropAbility CreateDropAbility(IAirplaneSettings settings) { var config = settings.DropAbilityConfig; return new DropAbility( config.abilityName, config.abilityIcon, config.cooldownDuration, config.dropForce, config.dropDistance, config.zeroHorizontalVelocity ); } } }