encompass-cs/encompass-cs/Collections/ComponentBitSet.cs

56 lines
1.5 KiB
C#
Raw Normal View History

2019-12-23 00:21:07 +00:00
using Encompass.Collections;
using System;
using System.Collections;
using System.Collections.Generic;
namespace Encompass
{
internal class ComponentBitSet
{
2019-12-24 02:51:15 +00:00
Dictionary<int, BitSet> entities = new Dictionary<int, BitSet>();
2019-12-23 00:21:07 +00:00
Dictionary<Type, int> TypeToIndex { get; }
public ComponentBitSet(Dictionary<Type, int> typeToIndex)
{
TypeToIndex = typeToIndex;
}
public void Clear()
{
entities.Clear();
}
public void AddEntity(int entityID)
2019-12-23 00:21:07 +00:00
{
2019-12-24 02:51:15 +00:00
entities.Add(entityID, BitSetBuilder.Zeroes());
2019-12-23 00:21:07 +00:00
}
public void Set<TComponent>(int entityID) where TComponent : struct, IComponent
2019-12-23 00:21:07 +00:00
{
if (!entities.ContainsKey(entityID)) { AddEntity(entityID); }
entities[entityID] = entities[entityID].Set(TypeToIndex[typeof(TComponent)]);
2019-12-23 00:21:07 +00:00
}
public void RemoveComponent<TComponent>(int entityID) where TComponent : struct, IComponent
2019-12-23 00:21:07 +00:00
{
if (entities.ContainsKey(entityID))
2019-12-23 00:21:07 +00:00
{
entities[entityID] = entities[entityID].UnSet(TypeToIndex[typeof(TComponent)]);
2019-12-23 00:21:07 +00:00
}
}
public void RemoveEntity(int entityID)
2019-12-23 00:21:07 +00:00
{
if (entities.ContainsKey(entityID))
2019-12-23 00:21:07 +00:00
{
entities.Remove(entityID);
2019-12-23 00:21:07 +00:00
}
}
2019-12-24 02:51:15 +00:00
public BitSet EntityBitArray(int entityID)
2019-12-23 00:21:07 +00:00
{
2019-12-24 02:51:15 +00:00
return entities.ContainsKey(entityID) ? entities[entityID] : BitSetBuilder.Zeroes();
2019-12-23 00:21:07 +00:00
}
}
}