MoonTools.ECS/src/RelationDepot.cs

59 lines
1.3 KiB
C#
Raw Normal View History

2022-04-08 05:52:03 +00:00
using System;
using System.Collections.Generic;
2022-04-06 19:53:50 +00:00
namespace MoonTools.ECS
{
internal class RelationDepot
{
private Dictionary<Type, RelationStorage> storages = new Dictionary<Type, RelationStorage>();
private RelationStorage Lookup<TRelationKind>()
{
return storages[typeof(TRelationKind)];
}
public void Register<TRelationKind>()
{
storages[typeof(TRelationKind)] = new RelationStorage();
}
public void Add<TRelationKind>(Relation relation)
{
Lookup<TRelationKind>().Add(relation);
}
public void Remove<TRelationKind>(Relation relation)
{
Lookup<TRelationKind>().Remove(relation);
}
public void OnEntityDestroy(int entityID)
{
foreach (var storage in storages.Values)
{
storage.OnEntityDestroy(entityID);
}
}
public IEnumerable<Relation> Relations<TRelationKind>()
{
return Lookup<TRelationKind>().All();
}
2022-04-07 03:08:28 +00:00
public bool Related<TRelationKind>(int idA, int idB)
{
return Lookup<TRelationKind>().Has(new Relation(idA, idB));
}
2022-04-06 19:53:50 +00:00
public IEnumerable<Entity> RelatedToA<TRelationKind>(int entityID)
{
return Lookup<TRelationKind>().RelatedToA(entityID);
}
public IEnumerable<Entity> RelatedToB<TRelationKind>(int entityID)
{
return Lookup<TRelationKind>().RelatedToB(entityID);
}
}
}