130 lines
6.9 KiB
C#
130 lines
6.9 KiB
C#
#nullable enable
|
|
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using SideScrollerGame.Content.Definitions;
|
|
|
|
namespace SideScrollerGame.Content;
|
|
|
|
public sealed class ContentRegistry
|
|
{
|
|
public ContentRegistry(IEnumerable<MissionDefinition> missions, IEnumerable<DifficultyDefinition> difficulties, IEnumerable<CameraPathDefinition> cameraPaths, IEnumerable<LevelLayerDefinition> levelLayers, IEnumerable<EnemyTypeDefinition> enemyTypes, IEnumerable<EnemyBehaviorDefinition> enemyBehaviors, IEnumerable<EnemyClusterDefinition> enemyClusters, IEnumerable<CollectibleDefinition> collectibles, IEnumerable<WeaponDefinition> weapons, IEnumerable<SpecialWeaponDefinition> specialWeapons, IEnumerable<SquadronMateTypeDefinition> squadronMateTypes)
|
|
{
|
|
MissionDefinitions = missions.ToList();
|
|
DifficultyDefinitions = difficulties.ToList();
|
|
CameraPathDefinitions = cameraPaths.ToList();
|
|
LevelLayerDefinitions = levelLayers.ToList();
|
|
EnemyTypeDefinitions = enemyTypes.ToList();
|
|
EnemyBehaviorDefinitions = enemyBehaviors.ToList();
|
|
EnemyClusterDefinitions = enemyClusters.ToList();
|
|
CollectibleDefinitions = collectibles.ToList();
|
|
WeaponDefinitions = weapons.ToList();
|
|
SpecialWeaponDefinitions = specialWeapons.ToList();
|
|
SquadronMateTypeDefinitions = squadronMateTypes.ToList();
|
|
|
|
Missions = ToDictionary(MissionDefinitions);
|
|
Difficulties = ToDictionary(DifficultyDefinitions);
|
|
CameraPaths = ToDictionary(CameraPathDefinitions);
|
|
LevelLayers = ToDictionary(LevelLayerDefinitions);
|
|
EnemyTypes = ToDictionary(EnemyTypeDefinitions);
|
|
EnemyBehaviors = ToDictionary(EnemyBehaviorDefinitions);
|
|
EnemyClusters = ToDictionary(EnemyClusterDefinitions);
|
|
Collectibles = ToDictionary(CollectibleDefinitions);
|
|
Weapons = ToDictionary(WeaponDefinitions);
|
|
SpecialWeapons = ToDictionary(SpecialWeaponDefinitions);
|
|
SquadronMateTypes = ToDictionary(SquadronMateTypeDefinitions);
|
|
}
|
|
|
|
public IEnumerable<string> AllDefinitionIds()
|
|
{
|
|
return AllDefinitions().Select(definition => definition.Id).OrderBy(id => id);
|
|
}
|
|
|
|
public IReadOnlyList<DefinitionEntry> AllDefinitions()
|
|
{
|
|
return MissionDefinitions.Select(definition => new DefinitionEntry("Mission", definition.Id)).Concat(DifficultyDefinitions.Select(definition => new DefinitionEntry("Difficulty", definition.Id))).Concat(CameraPathDefinitions.Select(definition => new DefinitionEntry("CameraPath", definition.Id))).Concat(LevelLayerDefinitions.Select(definition => new DefinitionEntry("LevelLayer", definition.Id))).Concat(EnemyTypeDefinitions.Select(definition => new DefinitionEntry("EnemyType", definition.Id))).Concat(EnemyBehaviorDefinitions.Select(definition => new DefinitionEntry("EnemyBehavior", definition.Id))).Concat(EnemyClusterDefinitions.Select(definition => new DefinitionEntry("EnemyCluster", definition.Id))).Concat(CollectibleDefinitions.Select(definition => new DefinitionEntry("Collectible", definition.Id))).Concat(WeaponDefinitions.Select(definition => new DefinitionEntry("Weapon", definition.Id))).Concat(SpecialWeaponDefinitions.Select(definition => new DefinitionEntry("SpecialWeapon", definition.Id))).Concat(SquadronMateTypeDefinitions.Select(definition => new DefinitionEntry("SquadronMateType", definition.Id))).OrderBy(definition => definition.Id).ToList();
|
|
}
|
|
|
|
public bool TryGetMission(string id, out MissionDefinition? definition)
|
|
{
|
|
return Missions.TryGetValue(id, out definition);
|
|
}
|
|
|
|
public bool TryGetDifficulty(string id, out DifficultyDefinition? definition)
|
|
{
|
|
return Difficulties.TryGetValue(id, out definition);
|
|
}
|
|
|
|
public bool TryGetEnemyType(string id, out EnemyTypeDefinition? definition)
|
|
{
|
|
return EnemyTypes.TryGetValue(id, out definition);
|
|
}
|
|
|
|
public IReadOnlyList<MissionDefinition> MissionDefinitions { get; }
|
|
|
|
public IReadOnlyList<DifficultyDefinition> DifficultyDefinitions { get; }
|
|
|
|
public IReadOnlyList<CameraPathDefinition> CameraPathDefinitions { get; }
|
|
|
|
public IReadOnlyList<LevelLayerDefinition> LevelLayerDefinitions { get; }
|
|
|
|
public IReadOnlyList<EnemyTypeDefinition> EnemyTypeDefinitions { get; }
|
|
|
|
public IReadOnlyList<EnemyBehaviorDefinition> EnemyBehaviorDefinitions { get; }
|
|
|
|
public IReadOnlyList<EnemyClusterDefinition> EnemyClusterDefinitions { get; }
|
|
|
|
public IReadOnlyList<CollectibleDefinition> CollectibleDefinitions { get; }
|
|
|
|
public IReadOnlyList<WeaponDefinition> WeaponDefinitions { get; }
|
|
|
|
public IReadOnlyList<SpecialWeaponDefinition> SpecialWeaponDefinitions { get; }
|
|
|
|
public IReadOnlyList<SquadronMateTypeDefinition> SquadronMateTypeDefinitions { get; }
|
|
|
|
public IReadOnlyDictionary<string, MissionDefinition> Missions { get; }
|
|
|
|
public IReadOnlyDictionary<string, DifficultyDefinition> Difficulties { get; }
|
|
|
|
public IReadOnlyDictionary<string, CameraPathDefinition> CameraPaths { get; }
|
|
|
|
public IReadOnlyDictionary<string, LevelLayerDefinition> LevelLayers { get; }
|
|
|
|
public IReadOnlyDictionary<string, EnemyTypeDefinition> EnemyTypes { get; }
|
|
|
|
public IReadOnlyDictionary<string, EnemyBehaviorDefinition> EnemyBehaviors { get; }
|
|
|
|
public IReadOnlyDictionary<string, EnemyClusterDefinition> EnemyClusters { get; }
|
|
|
|
public IReadOnlyDictionary<string, CollectibleDefinition> Collectibles { get; }
|
|
|
|
public IReadOnlyDictionary<string, WeaponDefinition> Weapons { get; }
|
|
|
|
public IReadOnlyDictionary<string, SpecialWeaponDefinition> SpecialWeapons { get; }
|
|
|
|
public IReadOnlyDictionary<string, SquadronMateTypeDefinition> SquadronMateTypes { get; }
|
|
|
|
private static IReadOnlyDictionary<string, TDefinition> ToDictionary<TDefinition>(IEnumerable<TDefinition> definitions) where TDefinition : class
|
|
{
|
|
return definitions.GroupBy(GetId).Select(group => group.First()).ToDictionary(GetId);
|
|
}
|
|
|
|
private static string GetId<TDefinition>(TDefinition definition)
|
|
{
|
|
return definition switch
|
|
{
|
|
MissionDefinition mission => mission.Id,
|
|
DifficultyDefinition difficulty => difficulty.Id,
|
|
CameraPathDefinition cameraPath => cameraPath.Id,
|
|
LevelLayerDefinition levelLayer => levelLayer.Id,
|
|
EnemyTypeDefinition enemyType => enemyType.Id,
|
|
EnemyBehaviorDefinition enemyBehavior => enemyBehavior.Id,
|
|
EnemyClusterDefinition enemyCluster => enemyCluster.Id,
|
|
CollectibleDefinition collectible => collectible.Id,
|
|
WeaponDefinition weapon => weapon.Id,
|
|
SpecialWeaponDefinition specialWeapon => specialWeapon.Id,
|
|
SquadronMateTypeDefinition squadronMateDefinition => squadronMateDefinition.Id,
|
|
_ => string.Empty
|
|
};
|
|
}
|
|
} |