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