2022-04-08 05:52:03 +00:00
|
|
|
|
// NOTE: these methods are very inefficient
|
2022-03-25 19:32:35 +00:00
|
|
|
|
// this class should only be used in debugging contexts!!
|
2022-04-03 21:46:52 +00:00
|
|
|
|
|
|
|
|
|
#if DEBUG
|
2022-04-08 05:52:03 +00:00
|
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
|
2022-03-25 19:32:35 +00:00
|
|
|
|
namespace MoonTools.ECS
|
|
|
|
|
{
|
|
|
|
|
public abstract class DebugSystem : System
|
|
|
|
|
{
|
|
|
|
|
protected DebugSystem(World world) : base(world)
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
2023-10-13 20:42:22 +00:00
|
|
|
|
protected ComponentEnumerator Debug_GetAllComponents(Entity entity)
|
2022-03-25 19:32:35 +00:00
|
|
|
|
{
|
2023-10-13 20:42:22 +00:00
|
|
|
|
return new ComponentEnumerator(ComponentDepot, entity, EntityStorage.ComponentTypeIndices(entity.ID));
|
2022-03-25 19:32:35 +00:00
|
|
|
|
}
|
|
|
|
|
|
2022-04-03 21:46:52 +00:00
|
|
|
|
protected IEnumerable<Entity> Debug_GetEntities(Type componentType)
|
2022-03-25 19:32:35 +00:00
|
|
|
|
{
|
2023-01-10 00:41:00 +00:00
|
|
|
|
foreach (var entityID in ComponentDepot.Debug_GetEntityIDs(ComponentTypeIndices.GetIndex(componentType)))
|
|
|
|
|
{
|
|
|
|
|
yield return new Entity(entityID);
|
|
|
|
|
}
|
2022-03-25 19:32:35 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
protected IEnumerable<Type> Debug_SearchComponentType(string typeString)
|
|
|
|
|
{
|
2023-01-10 00:41:00 +00:00
|
|
|
|
foreach (var type in ComponentTypeIndices.Types)
|
|
|
|
|
{
|
|
|
|
|
if (type.ToString().ToLower().Contains(typeString.ToLower()))
|
|
|
|
|
{
|
|
|
|
|
yield return type;
|
|
|
|
|
}
|
|
|
|
|
}
|
2022-03-25 19:32:35 +00:00
|
|
|
|
}
|
2023-10-13 20:42:22 +00:00
|
|
|
|
|
|
|
|
|
public ref struct ComponentEnumerator
|
|
|
|
|
{
|
|
|
|
|
private ComponentDepot ComponentDepot;
|
|
|
|
|
private Entity Entity;
|
|
|
|
|
private ReverseSpanEnumerator<int> ComponentTypeIndices;
|
|
|
|
|
|
|
|
|
|
public ComponentEnumerator GetEnumerator() => this;
|
|
|
|
|
|
|
|
|
|
internal ComponentEnumerator(
|
|
|
|
|
ComponentDepot componentDepot,
|
|
|
|
|
Entity entity,
|
|
|
|
|
Collections.IndexableSet<int> componentTypeIndices
|
|
|
|
|
) {
|
|
|
|
|
ComponentDepot = componentDepot;
|
|
|
|
|
Entity = entity;
|
|
|
|
|
ComponentTypeIndices = componentTypeIndices.GetEnumerator();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public bool MoveNext() => ComponentTypeIndices.MoveNext();
|
|
|
|
|
public object Current => ComponentDepot.Debug_Get(Entity.ID, ComponentTypeIndices.Current);
|
|
|
|
|
}
|
2022-03-25 19:32:35 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
2022-04-03 21:46:52 +00:00
|
|
|
|
#endif
|