Add core content definitions
This commit is contained in:
130
godot/scripts/content/ContentRegistry.cs
Normal file
130
godot/scripts/content/ContentRegistry.cs
Normal file
@@ -0,0 +1,130 @@
|
||||
#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
|
||||
};
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user