Co-authored-by: Michal Pikulski <michal@foolhardyhorizons.com> Co-authored-by: Michal Pikulski <michal.a.pikulski@gmail.com> Reviewed-on: #77
70 lines
2.2 KiB
C#
70 lines
2.2 KiB
C#
using AppleHills.Core.Settings;
|
|
using Core;
|
|
using Minigames.Airplane.Data;
|
|
|
|
namespace Minigames.Airplane.Abilities
|
|
{
|
|
/// <summary>
|
|
/// Factory for creating airplane abilities from settings configuration.
|
|
/// </summary>
|
|
public static class AbilityFactory
|
|
{
|
|
/// <summary>
|
|
/// Create an ability instance based on type and settings.
|
|
/// </summary>
|
|
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
|
|
);
|
|
}
|
|
}
|
|
}
|
|
|