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