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

View file

@ -23,7 +23,7 @@ class ECS
private ComponentRegistry _compRegistry = new .() ~ delete _;
///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);
///Retrieves the id of a component
@ -34,5 +34,5 @@ class ECS
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();
e.[Friend]_compRegistry.Components[s.[Friend]_Components[0]].Add(entity, &Position());
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)
{
watch.Start();
for(int ii < 400)
for(int ii < 10)
{
s.RunSystem(e);
@ -39,7 +37,7 @@ class Program
watch.Stop();
watch.Reset();
}
Console.Read();
//Console.Read();
}
}

View file

@ -7,6 +7,10 @@ using System.Collections;
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 _;
///Get the compoent id and cache it inside of this system
@ -14,19 +18,24 @@ abstract class System
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, void* p2) { };
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)
{
int_cosize count = int_cosize.MaxValue;
Component comp = _Components[0];
for(var c in _Components)
if(ecs.GetComponentCount(c) < count)
for (var c in _Components)
if (ecs.GetComponentCount(c) < count)
{
count = ecs.GetComponentCount(c);
comp = c;
@ -35,40 +44,158 @@ abstract class System
//We now have the list of entities to loop through
Span<Entity> entities = ecs.GetComponentEntities(comp);
UList main = ecs.[Friend]_compRegistry.Components[comp].[Friend]_packedEntities;
var cun = entities.Length - 1;
switch(_Components.Count)
#region DumbStatement
switch (_Components.Count)
{
case 1:
for (int ii < cun)
this.Run(main[(.)entities[ii].Index]);
case 2:
if(comp == _Components[0])
{
var cun = entities.Length-1;
for(int ii < cun)
{
this.Run(
main[(.)entities[ii].Index],
ecs.GetComponentData(entities[ii], _Components[1]));
}
}
if (comp == _Components[0])
for (int ii < cun)
this.Run(main[(.)entities[ii].Index], ecs.GetComponentData(entities[ii], _Components[1]));
else
{
}
for (int ii < cun)
this.Run(ecs.GetComponentData(entities[ii], _Components[0]), main[(.)entities[ii].Index]);
case 3:
var cun = entities.Length-1;
for(int ii < cun)
{
this.Run(
ecs.GetComponentData(entities[ii], _Components[0]),
ecs.GetComponentData(entities[ii], _Components[1]),
ecs.GetComponentData(entities[ii], _Components[2]));
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]));
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]));
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
@ -76,7 +203,6 @@ class MovementSystem : System
public override void RegisterSystem(ECS ecs)
{
RegisterComponent<Position>(ecs);
//RegisterComponent<waste>(ecs);
RegisterComponent<Velocity>(ecs);
}
@ -84,13 +210,11 @@ class MovementSystem : System
{
((Position*)pos).x += ((Velocity*)vel).x;
((Position*)pos).y += ((Velocity*)vel).y;
}
public override void Run(void* pos, void* waste, void* vel)
{
((Position*)pos).x += ((Velocity*)vel).x;
((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()
{
}
}