add some useful things for debug inspector
continuous-integration/drone/push Build is passing
Details
continuous-integration/drone/push Build is passing
Details
parent
00614661ec
commit
7ff3323391
|
@ -1,4 +1,5 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Encompass
|
||||
{
|
||||
|
@ -118,6 +119,17 @@ namespace Encompass
|
|||
return this == Zero;
|
||||
}
|
||||
|
||||
public IEnumerable<int> TrueIndices()
|
||||
{
|
||||
for (int i = 0; i < 512; i++)
|
||||
{
|
||||
if (Get(i))
|
||||
{
|
||||
yield return i;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static BitSet512 BitwiseAnd(BitSet512 left, BitSet512 right)
|
||||
{
|
||||
return left & right;
|
||||
|
|
|
@ -11,19 +11,21 @@ namespace Encompass
|
|||
private readonly ComponentStore _upToDateComponentStore;
|
||||
|
||||
public Dictionary<Type, int> TypeToIndex { get; }
|
||||
private Dictionary<int, Type> IndexToType { get; }
|
||||
|
||||
private readonly HashSet<int> _entitiesMarkedForRemoval = new HashSet<int>();
|
||||
|
||||
internal ComponentBitSet ImmediateBits { get { return _immediateComponentStore.ComponentBitSet; } }
|
||||
internal ComponentBitSet ExistingBits { get { return _existingComponentStore.ComponentBitSet; } }
|
||||
|
||||
public ComponentManager(Dictionary<Type, int> typeToIndex)
|
||||
public ComponentManager(Dictionary<Type, int> typeToIndex, Dictionary<int, Type> indexToType)
|
||||
{
|
||||
_existingComponentStore = new ComponentStore(typeToIndex);
|
||||
_immediateComponentStore = new ComponentStore(typeToIndex);
|
||||
_replayStore = new ComponentDeltaStore(typeToIndex);
|
||||
_upToDateComponentStore = new ComponentStore(typeToIndex);
|
||||
TypeToIndex = typeToIndex;
|
||||
IndexToType = indexToType;
|
||||
}
|
||||
|
||||
public void RegisterComponentType<TComponent>() where TComponent : struct
|
||||
|
@ -186,6 +188,13 @@ namespace Encompass
|
|||
return ref _existingComponentStore.Get<TComponent>(entityID);
|
||||
}
|
||||
|
||||
#if DEBUG
|
||||
internal TComponent Debug_ReadExistingComponentByEntityAndType<TComponent>(int entityID) where TComponent : struct
|
||||
{
|
||||
return _existingComponentStore.Get<TComponent>(entityID);
|
||||
}
|
||||
#endif
|
||||
|
||||
internal ref TComponent ReadImmediateComponentByEntityAndType<TComponent>(int entityID) where TComponent : struct
|
||||
{
|
||||
return ref _immediateComponentStore.Get<TComponent>(entityID);
|
||||
|
@ -284,5 +293,18 @@ namespace Encompass
|
|||
{
|
||||
return _upToDateComponentStore.EntityBitArray(entityID).AllFalse();
|
||||
}
|
||||
|
||||
// should be used for debugging only!
|
||||
#if DEBUG
|
||||
internal IEnumerable<object> Components(int entityID)
|
||||
{
|
||||
foreach (var typeIndex in ExistingBits.EntityBitArray(entityID).TrueIndices())
|
||||
{
|
||||
var method = typeof(ComponentManager).GetMethod(nameof(ComponentManager.Debug_ReadExistingComponentByEntityAndType), System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
|
||||
var generic = method.MakeGenericMethod(IndexToType[typeIndex]);
|
||||
yield return generic.Invoke(this, new object[] { entityID });
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
|
|
@ -64,5 +64,12 @@ namespace Encompass
|
|||
{
|
||||
return _componentManager.SomeExistingComponent<TComponent>();
|
||||
}
|
||||
|
||||
#if DEBUG
|
||||
protected IEnumerable<object> Debug_GetAllComponents(Entity entity)
|
||||
{
|
||||
return _componentManager.Components(entity.ID);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
|
|
@ -34,13 +34,14 @@ namespace Encompass
|
|||
private readonly HashSet<Type> _componentTypesToPreload = new HashSet<Type>();
|
||||
private readonly HashSet<Type> _messageTypes = new HashSet<Type>();
|
||||
private readonly Dictionary<Type, int> _typeToIndex = new Dictionary<Type, int>();
|
||||
private readonly Dictionary<int, Type> _indexToType = new Dictionary<int, Type>();
|
||||
|
||||
public WorldBuilder(int entityCapacity = 32768)
|
||||
{
|
||||
_entityCapacity = entityCapacity;
|
||||
_timeManager = new TimeManager();
|
||||
_trackingManager = new TrackingManager();
|
||||
_componentManager = new ComponentManager(_typeToIndex);
|
||||
_componentManager = new ComponentManager(_typeToIndex, _indexToType);
|
||||
_messageManager = new MessageManager(_timeManager);
|
||||
_entityManager = new EntityManager(_componentManager, entityCapacity);
|
||||
_renderManager = new RenderManager(_entityManager);
|
||||
|
@ -94,7 +95,9 @@ namespace Encompass
|
|||
{
|
||||
if (!_typeToIndex.ContainsKey(typeof(TComponent)))
|
||||
{
|
||||
_typeToIndex.Add(typeof(TComponent), _typeToIndex.Count);
|
||||
var count = _typeToIndex.Count;
|
||||
_typeToIndex.Add(typeof(TComponent), count);
|
||||
_indexToType.Add(count, typeof(TComponent));
|
||||
_componentTypesToPreload.Add(typeof(TComponent));
|
||||
_componentManager.RegisterComponentType<TComponent>();
|
||||
_startingExistingComponentStore.RegisterComponentType<TComponent>();
|
||||
|
@ -428,7 +431,7 @@ namespace Encompass
|
|||
var dummyTimeManager = new TimeManager();
|
||||
var dummyMessageManager = new MessageManager(dummyTimeManager);
|
||||
var dummyTrackingManager = new TrackingManager();
|
||||
var dummyComponentManager = new ComponentManager(_typeToIndex);
|
||||
var dummyComponentManager = new ComponentManager(_typeToIndex, _indexToType);
|
||||
var dummyEntityManager = new EntityManager(dummyComponentManager, _entityCapacity);
|
||||
var dummyRenderManager = new RenderManager(dummyEntityManager);
|
||||
|
||||
|
|
Loading…
Reference in New Issue