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
);
}
}
}