Bugfixes and more logic

UList was broken a bit, and we where doing unaligned memory access +
some other stuff
This commit is contained in:
Booklordofthedings 2024-11-17 12:44:47 +01:00
parent 55077fc7c3
commit 70b39a2b4a
8 changed files with 203 additions and 54 deletions

5
src/Archetype.bf Normal file
View file

@ -0,0 +1,5 @@
namespace Theater_ECS;
abstract class Archetype
{
}

14
src/CommandBuffer.bf Normal file
View file

@ -0,0 +1,14 @@
namespace Theater_ECS;
/*
Not all actions can be done during the run of a system,
this class provides a buffer where actions are stored until a system is done running,
at which points these actions will be applied to the data store.
*/
class CommandBuffer
{
public void DeleteEntity(Entity e) {}
public void CreateEntity(Archetype a) {}
public void AddComponentToEntity(Entity e, Component c, void* data) {}
public void RemoveComponentFromEntity(Entity e, Component c) {}
}

View file

@ -46,7 +46,7 @@ class PagedSparseSet
_packed.PopBack(); _packed.PopBack();
} }
[Inline] [Inline, Unchecked]
public void* Get(Entity e) public void* Get(Entity e)
{ {
return _packedEntities[(.)(_sparse[e.Index/PageSize][e.Index % PageSize].Index)]; return _packedEntities[(.)(_sparse[e.Index/PageSize][e.Index % PageSize].Index)];

View file

@ -21,7 +21,7 @@ class UList
/// Adds an item to the back of the list. /// Adds an item to the back of the list.
public void Add<T>(T* toAdd) public void Add<T>(T* toAdd)
{ {
if (_size == _alloc) if (_size + strideof(T) > _alloc)
Realloc(_alloc * 2); Realloc(_alloc * 2);
Internal.MemCpy(&((uint8*)_items)[_size], toAdd, sizeof(T)); Internal.MemCpy(&((uint8*)_items)[_size], toAdd, sizeof(T));
_size += _sizeof; _size += _sizeof;
@ -30,7 +30,7 @@ class UList
/// Adds an item to the back of the list. /// Adds an item to the back of the list.
public void Add(void* toAdd) public void Add(void* toAdd)
{ {
if (_size == _alloc) if (_size + _sizeof > _alloc)
Realloc(_alloc * 2); Realloc(_alloc * 2);
Internal.MemCpy(&((uint8*)_items)[_size], toAdd, _sizeof); Internal.MemCpy(&((uint8*)_items)[_size], toAdd, _sizeof);
_size += _sizeof; _size += _sizeof;
@ -53,40 +53,36 @@ class UList
get => (_size / _sizeof); get => (_size / _sizeof);
} }
[Unchecked]
public void* this[int_cosize index] public void* this[int_cosize index]
{ {
[Checked] [Checked]
get get
{ {
Runtime.Assert(index < (_size/_sizeof)); Runtime.Assert(index < (_size/_sizeof));
return GetItem(_items, index * _sizeof); return (uint8*)_items + index * _sizeof;
} }
[Unchecked, Inline] [Unchecked, Inline]
get get
{ {
return GetItem(_items, index* _sizeof); return (uint8*)_items + index * _sizeof;
} }
[Checked] [Checked]
set set
{ {
Runtime.Assert(index < (_size/_sizeof)); Runtime.Assert(index < (_size/_sizeof));
MemCpy(GetItem(_items, index * _sizeof), value, _sizeof); Internal.MemCpy((uint8*)_items + index * _sizeof, value, _sizeof);
} }
[Unchecked, Inline] [Unchecked, Inline]
set set
{ {
MemCpy(GetItem(_items, index * _sizeof), value, _sizeof); Internal.MemCpy((uint8*)_items + index * _sizeof, value, _sizeof);
} }
} }
private void* GetItem(void* i, int32 index) => (uint8*)i + index;
private void MemCpy(void* dest, void* src, int lenght) => Internal.MemCpy(dest, src, lenght);
#region Initializers #region Initializers
public this(int_cosize size) public this(int_cosize size)
{ {
@ -157,6 +153,3 @@ class UList
} }
#endregion #endregion
} }
/*
*/

View file

@ -23,7 +23,7 @@ class ECS
private ComponentRegistry _compRegistry = new .() ~ delete _; private ComponentRegistry _compRegistry = new .() ~ delete _;
///Registers a component but hides some of the work behind generics ///Registers a component but hides some of the work behind generics
public Component RegisterComponent<T>() => _compRegistry.RegisterComponent(typeof(T).GetFullName(.. scope .()), sizeof(T)); public Component RegisterComponent<T>() => _compRegistry.RegisterComponent(typeof(T).GetFullName(.. scope .()), strideof(T));
public Component RegisterComponent(StringView name, int_cosize size) => _compRegistry.RegisterComponent(name, size); public Component RegisterComponent(StringView name, int_cosize size) => _compRegistry.RegisterComponent(name, size);
///Retrieves the id of a component ///Retrieves the id of a component
@ -34,5 +34,5 @@ class ECS
public Span<Entity> GetComponentEntities(Component c) => _compRegistry.Components[c].GetAll(); public Span<Entity> GetComponentEntities(Component c) => _compRegistry.Components[c].GetAll();
[Inline] public void* GetComponentData(Entity e, Component c) => _compRegistry.Components[c].Get(e); [Inline] public void* GetComponentData(Entity e, Component c) => _compRegistry.Components[c].[Unchecked]Get(e);
} }

View file

@ -20,8 +20,6 @@ class Program
var entity = e.Entity_Create(); var entity = e.Entity_Create();
e.[Friend]_compRegistry.Components[s.[Friend]_Components[0]].Add(entity, &Position()); e.[Friend]_compRegistry.Components[s.[Friend]_Components[0]].Add(entity, &Position());
e.[Friend]_compRegistry.Components[s.[Friend]_Components[1]].Add(entity, &Velocity()); e.[Friend]_compRegistry.Components[s.[Friend]_Components[1]].Add(entity, &Velocity());
/*if((gRand.NextI32() % 3) == 1)
e.[Friend]_compRegistry.Components[s.[Friend]_Components[2]].Add(entity, &waste());*/
} }
@ -29,7 +27,7 @@ class Program
for(int o < 10) for(int o < 10)
{ {
watch.Start(); watch.Start();
for(int ii < 400) for(int ii < 10)
{ {
s.RunSystem(e); s.RunSystem(e);
@ -39,7 +37,7 @@ class Program
watch.Stop(); watch.Stop();
watch.Reset(); watch.Reset();
} }
Console.Read(); //Console.Read();
} }
} }

View file

@ -7,6 +7,10 @@ using System.Collections;
abstract class System abstract class System
{ {
public bool Paused = false; //Wether or not this service should be run
public float RuntimeDelay = 0; //How many seconds should we wait after running this system
private List<Component> _Components = new .(10) ~ delete _; private List<Component> _Components = new .(10) ~ delete _;
///Get the compoent id and cache it inside of this system ///Get the compoent id and cache it inside of this system
@ -14,19 +18,24 @@ abstract class System
public abstract void RegisterSystem(ECS ecs); public abstract void RegisterSystem(ECS ecs);
///Yes surely this is a good idea
public virtual void Run(void* p1) { }; public virtual void Run(void* p1) { };
public virtual void Run(void* p1, void* p2) { }; public virtual void Run(void* p1, void* p2) { };
public virtual void Run(void* p1, void* p2, void* p3) { }; public virtual void Run(void* p1, void* p2, void* p3) { };
public virtual void Run(void* p1, void* p2, void* p3, void* p4) { };
public virtual void Run(void* p1, void* p2, void* p3, void* p4, void* p5) { };
public virtual void Run(void* p1, void* p2, void* p3, void* p4, void* p5, void* p6) { };
public virtual void Run(void* p1, void* p2, void* p3, void* p4, void* p5, void* p6, void* p7) { };
public virtual void Run(void* p1, void* p2, void* p3, void* p4, void* p5, void* p6, void* p7, void* p8) { };
public virtual void Run(void* p1, void* p2, void* p3, void* p4, void* p5, void* p6, void* p7, void* p8, void* p9) { };
public void RunSystem(ECS ecs) public void RunSystem(ECS ecs)
{ {
int_cosize count = int_cosize.MaxValue; int_cosize count = int_cosize.MaxValue;
Component comp = _Components[0]; Component comp = _Components[0];
for(var c in _Components) for (var c in _Components)
if(ecs.GetComponentCount(c) < count) if (ecs.GetComponentCount(c) < count)
{ {
count = ecs.GetComponentCount(c); count = ecs.GetComponentCount(c);
comp = c; comp = c;
@ -35,40 +44,158 @@ abstract class System
//We now have the list of entities to loop through //We now have the list of entities to loop through
Span<Entity> entities = ecs.GetComponentEntities(comp); Span<Entity> entities = ecs.GetComponentEntities(comp);
UList main = ecs.[Friend]_compRegistry.Components[comp].[Friend]_packedEntities; UList main = ecs.[Friend]_compRegistry.Components[comp].[Friend]_packedEntities;
var cun = entities.Length - 1;
switch(_Components.Count) #region DumbStatement
switch (_Components.Count)
{ {
case 1: case 1:
for (int ii < cun)
this.Run(main[(.)entities[ii].Index]);
case 2: case 2:
if(comp == _Components[0]) if (comp == _Components[0])
{ for (int ii < cun)
var cun = entities.Length-1; this.Run(main[(.)entities[ii].Index], ecs.GetComponentData(entities[ii], _Components[1]));
for(int ii < cun)
{
this.Run(
main[(.)entities[ii].Index],
ecs.GetComponentData(entities[ii], _Components[1]));
}
}
else else
{ for (int ii < cun)
this.Run(ecs.GetComponentData(entities[ii], _Components[0]), main[(.)entities[ii].Index]);
}
case 3: case 3:
var cun = entities.Length-1; if (comp == _Components[0])
for(int ii < cun) for (int ii < cun)
{ this.Run(main[(.)entities[ii].Index], ecs.GetComponentData(entities[ii], _Components[1]), ecs.GetComponentData(entities[ii], _Components[2]));
this.Run( else if (comp == _Components[1])
ecs.GetComponentData(entities[ii], _Components[0]), for (int ii < cun)
ecs.GetComponentData(entities[ii], _Components[1]), this.Run(ecs.GetComponentData(entities[ii], _Components[0]), main[(.)entities[ii].Index], ecs.GetComponentData(entities[ii], _Components[2]));
ecs.GetComponentData(entities[ii], _Components[2])); else
for (int ii < cun)
this.Run(ecs.GetComponentData(entities[ii], _Components[0]), ecs.GetComponentData(entities[ii], _Components[1]), main[(.)entities[ii].Index]);
case 4:
if (comp == _Components[0])
for (int ii < cun)
this.Run(main[(.)entities[ii].Index], ecs.GetComponentData(entities[ii], _Components[1]), ecs.GetComponentData(entities[ii], _Components[2]), ecs.GetComponentData(entities[ii], _Components[3]));
else if (comp == _Components[1])
for (int ii < cun)
this.Run(ecs.GetComponentData(entities[ii], _Components[0]), main[(.)entities[ii].Index], ecs.GetComponentData(entities[ii], _Components[2]), ecs.GetComponentData(entities[ii], _Components[2]));
else if (comp == _Components[2])
for (int ii < cun)
this.Run(ecs.GetComponentData(entities[ii], _Components[0]), ecs.GetComponentData(entities[ii], _Components[1]), main[(.)entities[ii].Index], ecs.GetComponentData(entities[ii], _Components[2]));
else
for (int ii < cun)
this.Run(ecs.GetComponentData(entities[ii], _Components[0]), ecs.GetComponentData(entities[ii], _Components[1]), ecs.GetComponentData(entities[ii], _Components[2]), main[(.)entities[ii].Index]);
case 5:
if (comp == _Components[0])
for (int ii < cun)
this.Run(main[(.)entities[ii].Index], ecs.GetComponentData(entities[ii], _Components[1]), ecs.GetComponentData(entities[ii], _Components[2]), ecs.GetComponentData(entities[ii], _Components[3]), ecs.GetComponentData(entities[ii], _Components[4]));
else if (comp == _Components[1])
for (int ii < cun)
this.Run(ecs.GetComponentData(entities[ii], _Components[0]), main[(.)entities[ii].Index], ecs.GetComponentData(entities[ii], _Components[2]), ecs.GetComponentData(entities[ii], _Components[2]), ecs.GetComponentData(entities[ii], _Components[4]));
else if (comp == _Components[2])
for (int ii < cun)
this.Run(ecs.GetComponentData(entities[ii], _Components[0]), ecs.GetComponentData(entities[ii], _Components[1]), main[(.)entities[ii].Index], ecs.GetComponentData(entities[ii], _Components[2]), ecs.GetComponentData(entities[ii], _Components[4]));
else if (comp == _Components[3])
for (int ii < cun)
this.Run(ecs.GetComponentData(entities[ii], _Components[0]), ecs.GetComponentData(entities[ii], _Components[1]), ecs.GetComponentData(entities[ii], _Components[2]), main[(.)entities[ii].Index], ecs.GetComponentData(entities[ii], _Components[4]));
else
for (int ii < cun)
this.Run(ecs.GetComponentData(entities[ii], _Components[0]), ecs.GetComponentData(entities[ii], _Components[1]), ecs.GetComponentData(entities[ii], _Components[2]), ecs.GetComponentData(entities[ii], _Components[3]), main[(.)entities[ii].Index]);
case 6:
if (comp == _Components[0])
for (int ii < cun)
this.Run(main[(.)entities[ii].Index], ecs.GetComponentData(entities[ii], _Components[1]), ecs.GetComponentData(entities[ii], _Components[2]), ecs.GetComponentData(entities[ii], _Components[3]), ecs.GetComponentData(entities[ii], _Components[4]), ecs.GetComponentData(entities[ii], _Components[5]));
else if (comp == _Components[1])
for (int ii < cun)
this.Run(ecs.GetComponentData(entities[ii], _Components[0]), main[(.)entities[ii].Index], ecs.GetComponentData(entities[ii], _Components[2]), ecs.GetComponentData(entities[ii], _Components[2]), ecs.GetComponentData(entities[ii], _Components[4]), ecs.GetComponentData(entities[ii], _Components[5]));
else if (comp == _Components[2])
for (int ii < cun)
this.Run(ecs.GetComponentData(entities[ii], _Components[0]), ecs.GetComponentData(entities[ii], _Components[1]), main[(.)entities[ii].Index], ecs.GetComponentData(entities[ii], _Components[2]), ecs.GetComponentData(entities[ii], _Components[4]), ecs.GetComponentData(entities[ii], _Components[5]));
else if (comp == _Components[3])
for (int ii < cun)
this.Run(ecs.GetComponentData(entities[ii], _Components[0]), ecs.GetComponentData(entities[ii], _Components[1]), ecs.GetComponentData(entities[ii], _Components[2]), main[(.)entities[ii].Index], ecs.GetComponentData(entities[ii], _Components[4]), ecs.GetComponentData(entities[ii], _Components[5]));
else if (comp == _Components[4])
for (int ii < cun)
this.Run(ecs.GetComponentData(entities[ii], _Components[0]), ecs.GetComponentData(entities[ii], _Components[1]), ecs.GetComponentData(entities[ii], _Components[2]), ecs.GetComponentData(entities[ii], _Components[3]), main[(.)entities[ii].Index], ecs.GetComponentData(entities[ii], _Components[5]));
else
for (int ii < cun)
this.Run(ecs.GetComponentData(entities[ii], _Components[0]), ecs.GetComponentData(entities[ii], _Components[1]), ecs.GetComponentData(entities[ii], _Components[2]), ecs.GetComponentData(entities[ii], _Components[3]), ecs.GetComponentData(entities[ii], _Components[4]), main[(.)entities[ii].Index]);
case 7:
if (comp == _Components[0])
for (int ii < cun)
this.Run(main[(.)entities[ii].Index], ecs.GetComponentData(entities[ii], _Components[1]), ecs.GetComponentData(entities[ii], _Components[2]), ecs.GetComponentData(entities[ii], _Components[3]), ecs.GetComponentData(entities[ii], _Components[4]), ecs.GetComponentData(entities[ii], _Components[5]), ecs.GetComponentData(entities[ii], _Components[6]));
else if (comp == _Components[1])
for (int ii < cun)
this.Run(ecs.GetComponentData(entities[ii], _Components[0]), main[(.)entities[ii].Index], ecs.GetComponentData(entities[ii], _Components[2]), ecs.GetComponentData(entities[ii], _Components[2]), ecs.GetComponentData(entities[ii], _Components[4]), ecs.GetComponentData(entities[ii], _Components[5]), ecs.GetComponentData(entities[ii], _Components[6]));
else if (comp == _Components[2])
for (int ii < cun)
this.Run(ecs.GetComponentData(entities[ii], _Components[0]), ecs.GetComponentData(entities[ii], _Components[1]), main[(.)entities[ii].Index], ecs.GetComponentData(entities[ii], _Components[2]), ecs.GetComponentData(entities[ii], _Components[4]), ecs.GetComponentData(entities[ii], _Components[5]), ecs.GetComponentData(entities[ii], _Components[6]));
else if (comp == _Components[3])
for (int ii < cun)
this.Run(ecs.GetComponentData(entities[ii], _Components[0]), ecs.GetComponentData(entities[ii], _Components[1]), ecs.GetComponentData(entities[ii], _Components[2]), main[(.)entities[ii].Index], ecs.GetComponentData(entities[ii], _Components[4]), ecs.GetComponentData(entities[ii], _Components[5]), ecs.GetComponentData(entities[ii], _Components[6]));
else if (comp == _Components[4])
for (int ii < cun)
this.Run(ecs.GetComponentData(entities[ii], _Components[0]), ecs.GetComponentData(entities[ii], _Components[1]), ecs.GetComponentData(entities[ii], _Components[2]), ecs.GetComponentData(entities[ii], _Components[3]), main[(.)entities[ii].Index], ecs.GetComponentData(entities[ii], _Components[5]), ecs.GetComponentData(entities[ii], _Components[6]));
else if (comp == _Components[5])
for (int ii < cun)
this.Run(ecs.GetComponentData(entities[ii], _Components[0]), ecs.GetComponentData(entities[ii], _Components[1]), ecs.GetComponentData(entities[ii], _Components[2]), ecs.GetComponentData(entities[ii], _Components[3]), ecs.GetComponentData(entities[ii], _Components[4]), main[(.)entities[ii].Index], ecs.GetComponentData(entities[ii], _Components[6]));
else
for (int ii < cun)
this.Run(ecs.GetComponentData(entities[ii], _Components[0]), ecs.GetComponentData(entities[ii], _Components[1]), ecs.GetComponentData(entities[ii], _Components[2]), ecs.GetComponentData(entities[ii], _Components[3]), ecs.GetComponentData(entities[ii], _Components[4]), ecs.GetComponentData(entities[ii], _Components[5]), main[(.)entities[ii].Index]);
case 8:
if (comp == _Components[0])
for (int ii < cun)
this.Run(main[(.)entities[ii].Index], ecs.GetComponentData(entities[ii], _Components[1]), ecs.GetComponentData(entities[ii], _Components[2]), ecs.GetComponentData(entities[ii], _Components[3]), ecs.GetComponentData(entities[ii], _Components[4]), ecs.GetComponentData(entities[ii], _Components[5]), ecs.GetComponentData(entities[ii], _Components[6]), ecs.GetComponentData(entities[ii], _Components[7]));
else if (comp == _Components[1])
for (int ii < cun)
this.Run(ecs.GetComponentData(entities[ii], _Components[0]), main[(.)entities[ii].Index], ecs.GetComponentData(entities[ii], _Components[2]), ecs.GetComponentData(entities[ii], _Components[2]), ecs.GetComponentData(entities[ii], _Components[4]), ecs.GetComponentData(entities[ii], _Components[5]), ecs.GetComponentData(entities[ii], _Components[6]), ecs.GetComponentData(entities[ii], _Components[7]));
else if (comp == _Components[2])
for (int ii < cun)
this.Run(ecs.GetComponentData(entities[ii], _Components[0]), ecs.GetComponentData(entities[ii], _Components[1]), main[(.)entities[ii].Index], ecs.GetComponentData(entities[ii], _Components[2]), ecs.GetComponentData(entities[ii], _Components[4]), ecs.GetComponentData(entities[ii], _Components[5]), ecs.GetComponentData(entities[ii], _Components[6]), ecs.GetComponentData(entities[ii], _Components[7]));
else if (comp == _Components[3])
for (int ii < cun)
this.Run(ecs.GetComponentData(entities[ii], _Components[0]), ecs.GetComponentData(entities[ii], _Components[1]), ecs.GetComponentData(entities[ii], _Components[2]), main[(.)entities[ii].Index], ecs.GetComponentData(entities[ii], _Components[4]), ecs.GetComponentData(entities[ii], _Components[5]), ecs.GetComponentData(entities[ii], _Components[6]), ecs.GetComponentData(entities[ii], _Components[7]));
else if (comp == _Components[4])
for (int ii < cun)
this.Run(ecs.GetComponentData(entities[ii], _Components[0]), ecs.GetComponentData(entities[ii], _Components[1]), ecs.GetComponentData(entities[ii], _Components[2]), ecs.GetComponentData(entities[ii], _Components[3]), main[(.)entities[ii].Index], ecs.GetComponentData(entities[ii], _Components[5]), ecs.GetComponentData(entities[ii], _Components[6]), ecs.GetComponentData(entities[ii], _Components[7]));
else if (comp == _Components[5])
for (int ii < cun)
this.Run(ecs.GetComponentData(entities[ii], _Components[0]), ecs.GetComponentData(entities[ii], _Components[1]), ecs.GetComponentData(entities[ii], _Components[2]), ecs.GetComponentData(entities[ii], _Components[3]), ecs.GetComponentData(entities[ii], _Components[4]), main[(.)entities[ii].Index], ecs.GetComponentData(entities[ii], _Components[5]), ecs.GetComponentData(entities[ii], _Components[7]));
else if (comp == _Components[6])
for (int ii < cun)
this.Run(ecs.GetComponentData(entities[ii], _Components[0]), ecs.GetComponentData(entities[ii], _Components[1]), ecs.GetComponentData(entities[ii], _Components[2]), ecs.GetComponentData(entities[ii], _Components[3]), ecs.GetComponentData(entities[ii], _Components[4]), ecs.GetComponentData(entities[ii], _Components[5]), main[(.)entities[ii].Index], ecs.GetComponentData(entities[ii], _Components[7]));
else
for (int ii < cun)
this.Run(ecs.GetComponentData(entities[ii], _Components[0]), ecs.GetComponentData(entities[ii], _Components[1]), ecs.GetComponentData(entities[ii], _Components[2]), ecs.GetComponentData(entities[ii], _Components[3]), ecs.GetComponentData(entities[ii], _Components[4]), ecs.GetComponentData(entities[ii], _Components[5]), ecs.GetComponentData(entities[ii], _Components[6]), main[(.)entities[ii].Index]);
case 9:
if (comp == _Components[0])
for (int ii < cun)
this.Run(main[(.)entities[ii].Index], ecs.GetComponentData(entities[ii], _Components[1]), ecs.GetComponentData(entities[ii], _Components[2]), ecs.GetComponentData(entities[ii], _Components[3]), ecs.GetComponentData(entities[ii], _Components[4]), ecs.GetComponentData(entities[ii], _Components[5]), ecs.GetComponentData(entities[ii], _Components[6]), ecs.GetComponentData(entities[ii], _Components[7]), ecs.GetComponentData(entities[ii], _Components[8]));
else if (comp == _Components[1])
for (int ii < cun)
this.Run(ecs.GetComponentData(entities[ii], _Components[0]), main[(.)entities[ii].Index], ecs.GetComponentData(entities[ii], _Components[2]), ecs.GetComponentData(entities[ii], _Components[2]), ecs.GetComponentData(entities[ii], _Components[4]), ecs.GetComponentData(entities[ii], _Components[5]), ecs.GetComponentData(entities[ii], _Components[6]), ecs.GetComponentData(entities[ii], _Components[7]), ecs.GetComponentData(entities[ii], _Components[8]));
else if (comp == _Components[2])
for (int ii < cun)
this.Run(ecs.GetComponentData(entities[ii], _Components[0]), ecs.GetComponentData(entities[ii], _Components[1]), main[(.)entities[ii].Index], ecs.GetComponentData(entities[ii], _Components[2]), ecs.GetComponentData(entities[ii], _Components[4]), ecs.GetComponentData(entities[ii], _Components[5]), ecs.GetComponentData(entities[ii], _Components[6]), ecs.GetComponentData(entities[ii], _Components[7]), ecs.GetComponentData(entities[ii], _Components[8]));
else if (comp == _Components[3])
for (int ii < cun)
this.Run(ecs.GetComponentData(entities[ii], _Components[0]), ecs.GetComponentData(entities[ii], _Components[1]), ecs.GetComponentData(entities[ii], _Components[2]), main[(.)entities[ii].Index], ecs.GetComponentData(entities[ii], _Components[4]), ecs.GetComponentData(entities[ii], _Components[5]), ecs.GetComponentData(entities[ii], _Components[6]), ecs.GetComponentData(entities[ii], _Components[7]), ecs.GetComponentData(entities[ii], _Components[8]));
else if (comp == _Components[4])
for (int ii < cun)
this.Run(ecs.GetComponentData(entities[ii], _Components[0]), ecs.GetComponentData(entities[ii], _Components[1]), ecs.GetComponentData(entities[ii], _Components[2]), ecs.GetComponentData(entities[ii], _Components[3]), main[(.)entities[ii].Index], ecs.GetComponentData(entities[ii], _Components[5]), ecs.GetComponentData(entities[ii], _Components[6]), ecs.GetComponentData(entities[ii], _Components[7]), ecs.GetComponentData(entities[ii], _Components[8]));
else if (comp == _Components[5])
for (int ii < cun)
this.Run(ecs.GetComponentData(entities[ii], _Components[0]), ecs.GetComponentData(entities[ii], _Components[1]), ecs.GetComponentData(entities[ii], _Components[2]), ecs.GetComponentData(entities[ii], _Components[3]), ecs.GetComponentData(entities[ii], _Components[4]), main[(.)entities[ii].Index], ecs.GetComponentData(entities[ii], _Components[5]), ecs.GetComponentData(entities[ii], _Components[7]), ecs.GetComponentData(entities[ii], _Components[8]));
else if (comp == _Components[6])
for (int ii < cun)
this.Run(ecs.GetComponentData(entities[ii], _Components[0]), ecs.GetComponentData(entities[ii], _Components[1]), ecs.GetComponentData(entities[ii], _Components[2]), ecs.GetComponentData(entities[ii], _Components[3]), ecs.GetComponentData(entities[ii], _Components[4]), ecs.GetComponentData(entities[ii], _Components[5]), main[(.)entities[ii].Index], ecs.GetComponentData(entities[ii], _Components[7]), ecs.GetComponentData(entities[ii], _Components[8]));
else if (comp == _Components[7])
for (int ii < cun)
this.Run(ecs.GetComponentData(entities[ii], _Components[0]), ecs.GetComponentData(entities[ii], _Components[1]), ecs.GetComponentData(entities[ii], _Components[2]), ecs.GetComponentData(entities[ii], _Components[3]), ecs.GetComponentData(entities[ii], _Components[4]), ecs.GetComponentData(entities[ii], _Components[5]), ecs.GetComponentData(entities[ii], _Components[6]), main[(.)entities[ii].Index], ecs.GetComponentData(entities[ii], _Components[8]));
else
for (int ii < cun)
this.Run(ecs.GetComponentData(entities[ii], _Components[0]), ecs.GetComponentData(entities[ii], _Components[1]), ecs.GetComponentData(entities[ii], _Components[2]), ecs.GetComponentData(entities[ii], _Components[3]), ecs.GetComponentData(entities[ii], _Components[4]), ecs.GetComponentData(entities[ii], _Components[5]), ecs.GetComponentData(entities[ii], _Components[6]), ecs.GetComponentData(entities[ii], _Components[8]), main[(.)entities[ii].Index]);
} }
} }
#endregion
}
} }
class MovementSystem : System class MovementSystem : System
@ -76,7 +203,6 @@ class MovementSystem : System
public override void RegisterSystem(ECS ecs) public override void RegisterSystem(ECS ecs)
{ {
RegisterComponent<Position>(ecs); RegisterComponent<Position>(ecs);
//RegisterComponent<waste>(ecs);
RegisterComponent<Velocity>(ecs); RegisterComponent<Velocity>(ecs);
} }
@ -84,13 +210,11 @@ class MovementSystem : System
{ {
((Position*)pos).x += ((Velocity*)vel).x; ((Position*)pos).x += ((Velocity*)vel).x;
((Position*)pos).y += ((Velocity*)vel).y; ((Position*)pos).y += ((Velocity*)vel).y;
} }
public override void Run(void* pos, void* waste, void* vel) public override void Run(void* pos, void* waste, void* vel)
{ {
((Position*)pos).x += ((Velocity*)vel).x; ((Position*)pos).x += ((Velocity*)vel).x;
((Position*)pos).y += ((Velocity*)vel).y; ((Position*)pos).y += ((Velocity*)vel).y;
} }
} }

15
src/SystemsManager.bf Normal file
View file

@ -0,0 +1,15 @@
namespace Theater_ECS;
using System;
using System.Collections;
class SystemsManager
{
private List<System> _registeredSystems = new .() ~ delete _;
public void RegisterSystem()
{
}
}