Bugfixes and more logic
UList was broken a bit, and we where doing unaligned memory access + some other stuff
This commit is contained in:
parent
55077fc7c3
commit
70b39a2b4a
8 changed files with 203 additions and 54 deletions
5
src/Archetype.bf
Normal file
5
src/Archetype.bf
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
namespace Theater_ECS;
|
||||||
|
|
||||||
|
abstract class Archetype
|
||||||
|
{
|
||||||
|
}
|
14
src/CommandBuffer.bf
Normal file
14
src/CommandBuffer.bf
Normal 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) {}
|
||||||
|
}
|
|
@ -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)];
|
||||||
|
|
|
@ -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
|
||||||
}
|
}
|
||||||
/*
|
|
||||||
|
|
||||||
*/
|
|
|
@ -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);
|
||||||
}
|
}
|
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
190
src/System.bf
190
src/System.bf
|
@ -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
15
src/SystemsManager.bf
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
namespace Theater_ECS;
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Collections;
|
||||||
|
|
||||||
|
class SystemsManager
|
||||||
|
{
|
||||||
|
private List<System> _registeredSystems = new .() ~ delete _;
|
||||||
|
|
||||||
|
public void RegisterSystem()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Add table
Reference in a new issue