//
// Licensed under the MIT License. See LICENSE file in the project root for full license information.
//
namespace MUnique.OpenMU.Persistence.Initialization;
using MUnique.OpenMU.DataModel.Configuration;
///
/// Base class which initializes game maps.
///
public abstract class GameMapsInitializerBase : InitializerBase, IGameMapsInitializer
{
private IList? _mapInitializers;
///
/// Initializes a new instance of the class.
///
/// The context.
/// The game configuration.
protected GameMapsInitializerBase(IContext context, GameConfiguration gameConfiguration)
: base(context, gameConfiguration)
{
}
///
/// Gets the map initializer types.
///
protected abstract IEnumerable MapInitializerTypes { get; }
///
/// Gets the map initializers.
///
private IList MapInitializers => this._mapInitializers ??= this.CreateInitializers();
///
public override void Initialize()
{
foreach (var mapInitializer in this.MapInitializers)
{
mapInitializer.Initialize();
}
}
///
/// Sets the safezone maps.
/// Needs to be called after the context has been saved, otherwise referencing between the maps will fail.
///
public void SetSafezoneMaps()
{
foreach (var mapInitializer in this.MapInitializers)
{
mapInitializer.SetSafezoneMap();
}
}
private IList CreateInitializers()
{
var parameters = new object[] { this.Context, this.GameConfiguration };
return this.MapInitializerTypes
.Select(type => type.GetConstructors().First().Invoke(parameters))
.OfType()
.ToList();
}
}