mirror of
https://github.com/DCFApixels/DragonECS.git
synced 2025-09-18 18:14:37 +08:00
testing
This commit is contained in:
parent
73090da11a
commit
5371c0473c
@ -6,7 +6,7 @@ using System.Threading.Tasks;
|
|||||||
|
|
||||||
namespace DCFApixels.DragonECS
|
namespace DCFApixels.DragonECS
|
||||||
{
|
{
|
||||||
public interface IEcsInject<T> : IEcsProcessor
|
public interface IEcsInject<T> : IEcsSystem
|
||||||
{
|
{
|
||||||
public void Inject(T obj);
|
public void Inject(T obj);
|
||||||
}
|
}
|
||||||
|
@ -1,18 +1,18 @@
|
|||||||
namespace DCFApixels.DragonECS
|
namespace DCFApixels.DragonECS
|
||||||
{
|
{
|
||||||
public interface IEcsPreInitSystem : IEcsProcessor
|
public interface IEcsPreInitSystem : IEcsSystem
|
||||||
{
|
{
|
||||||
public void PreInit(EcsSession session);
|
public void PreInit(EcsSession session);
|
||||||
}
|
}
|
||||||
public interface IEcsInitSystem : IEcsProcessor
|
public interface IEcsInitSystem : IEcsSystem
|
||||||
{
|
{
|
||||||
public void Init(EcsSession session);
|
public void Init(EcsSession session);
|
||||||
}
|
}
|
||||||
public interface IEcsRunSystem : IEcsProcessor
|
public interface IEcsRunSystem : IEcsSystem
|
||||||
{
|
{
|
||||||
public void Run(EcsSession session);
|
public void Run(EcsSession session);
|
||||||
}
|
}
|
||||||
public interface IEcsDestroySystem : IEcsProcessor
|
public interface IEcsDestroySystem : IEcsSystem
|
||||||
{
|
{
|
||||||
public void Destroy(EcsSession session);
|
public void Destroy(EcsSession session);
|
||||||
}
|
}
|
||||||
|
@ -110,11 +110,13 @@ namespace DCFApixels.DragonECS
|
|||||||
internal static int capacity = 512;
|
internal static int capacity = 512;
|
||||||
|
|
||||||
protected BakedMask(int[] inc, int[] exc, Mask mask) : base(inc, exc, mask) { }
|
protected BakedMask(int[] inc, int[] exc, Mask mask) : base(inc, exc, mask) { }
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public sealed class BakedMask<TWorldArchetype, TMask> : BakedMask<TWorldArchetype>
|
public sealed class BakedMask<TWorldArchetype, TMask> : BakedMask<TWorldArchetype>
|
||||||
where TWorldArchetype : IWorldArchetype
|
where TWorldArchetype : IWorldArchetype
|
||||||
where TMask : MaskSingleton<TMask>
|
where TMask : Mask, new()
|
||||||
{
|
{
|
||||||
public static readonly int uniqueID;
|
public static readonly int uniqueID;
|
||||||
|
|
||||||
@ -127,6 +129,7 @@ namespace DCFApixels.DragonECS
|
|||||||
#endif
|
#endif
|
||||||
if (increment > capacity)
|
if (increment > capacity)
|
||||||
capacity <<= 1;
|
capacity <<= 1;
|
||||||
|
|
||||||
_instance = new BakedMask<TWorldArchetype, TMask>();
|
_instance = new BakedMask<TWorldArchetype, TMask>();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -136,19 +139,17 @@ namespace DCFApixels.DragonECS
|
|||||||
MaskSingleton<TMask>.Instance)
|
MaskSingleton<TMask>.Instance)
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
private static readonly BakedMask<TWorldArchetype, TMask> _instance = new BakedMask<TWorldArchetype, TMask>();
|
private static readonly BakedMask<TWorldArchetype, TMask> _instance;
|
||||||
public static BakedMask<TWorldArchetype, TMask> Instance
|
public static BakedMask<TWorldArchetype, TMask> Instance
|
||||||
{
|
{
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
get => _instance;
|
get => _instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal override int UniqueID
|
internal override int UniqueID
|
||||||
{
|
{
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
get => uniqueID;
|
get => uniqueID;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal override Type WorldArchetypeType
|
internal override Type WorldArchetypeType
|
||||||
{
|
{
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
@ -164,47 +165,43 @@ namespace DCFApixels.DragonECS
|
|||||||
internal abstract int[] MakeExc<TWorldArchetype>() where TWorldArchetype : IWorldArchetype;
|
internal abstract int[] MakeExc<TWorldArchetype>() where TWorldArchetype : IWorldArchetype;
|
||||||
public abstract BakedMask GetBaked<TWorldArchetype>() where TWorldArchetype : IWorldArchetype;
|
public abstract BakedMask GetBaked<TWorldArchetype>() where TWorldArchetype : IWorldArchetype;
|
||||||
}
|
}
|
||||||
public abstract class MaskSingleton<TSelf> : Mask
|
public abstract class MaskSingleton<TSelf>
|
||||||
where TSelf : Mask
|
where TSelf : Mask, new()
|
||||||
{
|
{
|
||||||
protected static TSelf _instance;
|
protected static TSelf _instance = new TSelf();
|
||||||
internal static TSelf Instance
|
internal static TSelf Instance
|
||||||
{
|
{
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
get => _instance;
|
get => _instance;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
public class Mask<TInc> : Mask where TInc : struct, IInc
|
||||||
public class Mask<TInc> : MaskSingleton<Mask<TInc>>
|
|
||||||
where TInc : struct, IInc
|
|
||||||
{
|
{
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
internal override int[] MakeInc<TWorldArchetype>() => new TInc().GetComponentsIDs<TWorldArchetype>();
|
internal override int[] MakeInc<TWorldArchetype>() => new TInc().GetComponentsIDs<TWorldArchetype>().Sort();
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
internal override int[] MakeExc<TWorldArchetype>() => Array.Empty<int>();
|
internal override int[] MakeExc<TWorldArchetype>() => Array.Empty<int>();
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
public override BakedMask GetBaked<TWorldArchetype>()
|
public override BakedMask GetBaked<TWorldArchetype>() => BakedMask<TWorldArchetype, Mask<TInc>>.Instance;
|
||||||
|
}
|
||||||
|
public class Mask<TInc, TExc> : Mask where TInc : struct, IInc where TExc : struct, IExc
|
||||||
{
|
{
|
||||||
return BakedMask<TWorldArchetype, Mask<TInc>>.Instance;
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
|
internal override int[] MakeInc<TWorldArchetype>() => new TInc().GetComponentsIDs<TWorldArchetype>().Sort();
|
||||||
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
|
internal override int[] MakeExc<TWorldArchetype>() => new TExc().GetComponentsIDs<TWorldArchetype>().Sort();
|
||||||
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
|
public override BakedMask GetBaked<TWorldArchetype>() => BakedMask<TWorldArchetype, Mask<TInc, TExc>>.Instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
static Mask() { _instance = new Mask<TInc>(); }
|
internal static class ArrayExt
|
||||||
}
|
|
||||||
public class Mask<TInc, TExc> : MaskSingleton<Mask<TInc, TExc>>
|
|
||||||
where TInc : struct, IInc
|
|
||||||
where TExc : struct, IExc
|
|
||||||
{
|
{
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
internal override int[] MakeInc<TWorldArchetype>() => new TInc().GetComponentsIDs<TWorldArchetype>();
|
internal static T[] Sort<T>(this T[] self)
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
||||||
internal override int[] MakeExc<TWorldArchetype>() => new TExc().GetComponentsIDs<TWorldArchetype>();
|
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
||||||
public override BakedMask GetBaked<TWorldArchetype>()
|
|
||||||
{
|
{
|
||||||
return BakedMask<TWorldArchetype, Mask<TInc, TExc>>.Instance;
|
Array.Sort(self);
|
||||||
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
static Mask() { _instance = new Mask<TInc, TExc>(); }
|
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
@ -40,8 +40,8 @@ namespace DCFApixels.DragonECS
|
|||||||
private int _id;
|
private int _id;
|
||||||
|
|
||||||
|
|
||||||
private readonly List<IEcsProcessor> _allSystems;
|
private readonly List<IEcsSystem> _allSystems;
|
||||||
private ReadOnlyCollection<IEcsProcessor> _allSystemsSealed;
|
private ReadOnlyCollection<IEcsSystem> _allSystemsSealed;
|
||||||
|
|
||||||
private bool _isInit = false;
|
private bool _isInit = false;
|
||||||
private bool _isDestoryed = false;
|
private bool _isDestoryed = false;
|
||||||
@ -53,19 +53,19 @@ namespace DCFApixels.DragonECS
|
|||||||
private readonly EcsWorldMap _worldMap;
|
private readonly EcsWorldMap _worldMap;
|
||||||
|
|
||||||
#region Properties
|
#region Properties
|
||||||
public ReadOnlyCollection<IEcsProcessor> AllProcessors => _allSystemsSealed;
|
public ReadOnlyCollection<IEcsSystem> AllProcessors => _allSystemsSealed;
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
public EcsSession()
|
public EcsSession()
|
||||||
{
|
{
|
||||||
_allSystems = new List<IEcsProcessor>(128);
|
_allSystems = new List<IEcsSystem>(128);
|
||||||
_runners = new Dictionary<Type, IEcsRunner>();
|
_runners = new Dictionary<Type, IEcsRunner>();
|
||||||
_worldMap = new EcsWorldMap();
|
_worldMap = new EcsWorldMap();
|
||||||
}
|
}
|
||||||
|
|
||||||
#region React Runners/Messengers
|
#region Runners
|
||||||
public T GetRunner<T>() where T : IEcsProcessor
|
public T GetRunner<T>() where T : IEcsSystem
|
||||||
{
|
{
|
||||||
Type type = typeof(T);
|
Type type = typeof(T);
|
||||||
if (_runners.TryGetValue(type, out IEcsRunner result))
|
if (_runners.TryGetValue(type, out IEcsRunner result))
|
||||||
@ -79,7 +79,7 @@ namespace DCFApixels.DragonECS
|
|||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Configuration
|
#region Configuration
|
||||||
public EcsSession Add(IEcsProcessor system)
|
public EcsSession Add(IEcsSystem system)
|
||||||
{
|
{
|
||||||
CheckInitForMethod(nameof(AddWorld));
|
CheckInitForMethod(nameof(AddWorld));
|
||||||
_allSystems.Add(system);
|
_allSystems.Add(system);
|
||||||
@ -92,7 +92,6 @@ namespace DCFApixels.DragonECS
|
|||||||
_worldMap.Add(world, name);
|
_worldMap.Add(world, name);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region LifeCycle
|
#region LifeCycle
|
||||||
@ -155,8 +154,6 @@ namespace DCFApixels.DragonECS
|
|||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#region Utils
|
#region Utils
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
|
@ -21,7 +21,8 @@ namespace DCFApixels.DragonECS
|
|||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
public EcsPool<T> GetPool<T>() where T : struct;
|
public EcsPool<T> GetPool<T>() where T : struct;
|
||||||
public EcsFilter GetFilter<TMask>() where TMask : MaskSingleton<TMask>;
|
public EcsFilter GetFilter<TInc>() where TInc : struct, IInc;
|
||||||
|
public EcsFilter GetFilter<TInc, TExc>() where TInc : struct, IInc where TExc : struct, IExc;
|
||||||
public ent NewEntity();
|
public ent NewEntity();
|
||||||
public void Destroy();
|
public void Destroy();
|
||||||
|
|
||||||
@ -74,8 +75,11 @@ namespace DCFApixels.DragonECS
|
|||||||
{
|
{
|
||||||
_entityDispenser = new IntDispenser();
|
_entityDispenser = new IntDispenser();
|
||||||
_pools = new IEcsPool[512];
|
_pools = new IEcsPool[512];
|
||||||
|
_gens = new short[512];
|
||||||
_filters = new EcsFilter[64];
|
_filters = new EcsFilter[64];
|
||||||
_entities = new EcsGroup(this, 512);
|
_entities = new EcsGroup(this, 512);
|
||||||
|
_filtersByIncludedComponents = new List<EcsFilter>[16];
|
||||||
|
_filtersByExcludedComponents = new List<EcsFilter>[16];
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
@ -100,7 +104,16 @@ namespace DCFApixels.DragonECS
|
|||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region GetFilter
|
#region GetFilter
|
||||||
public EcsFilter GetFilter<TMask>() where TMask : MaskSingleton<TMask>
|
|
||||||
|
public EcsFilter GetFilter<TInc>() where TInc : struct, IInc
|
||||||
|
{
|
||||||
|
return GetFilterInternal<Mask<TInc>>();
|
||||||
|
}
|
||||||
|
public EcsFilter GetFilter<TInc, TExc>() where TInc : struct, IInc where TExc : struct, IExc
|
||||||
|
{
|
||||||
|
return GetFilterInternal<Mask<TInc, TExc>>();
|
||||||
|
}
|
||||||
|
private EcsFilter GetFilterInternal<TMask>() where TMask : Mask, new()
|
||||||
{
|
{
|
||||||
var bakedmask = BakedMask<TArchetype, TMask>.Instance;
|
var bakedmask = BakedMask<TArchetype, TMask>.Instance;
|
||||||
|
|
||||||
@ -111,10 +124,41 @@ namespace DCFApixels.DragonECS
|
|||||||
|
|
||||||
if (_filters[bakedmask.UniqueID] == null)
|
if (_filters[bakedmask.UniqueID] == null)
|
||||||
{
|
{
|
||||||
_filters[bakedmask.UniqueID] = new EcsFilter(this, bakedmask, 512);
|
_filters[bakedmask.UniqueID] = NewFilter(bakedmask);
|
||||||
}
|
}
|
||||||
return _filters[bakedmask.UniqueID];
|
return _filters[bakedmask.UniqueID];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private EcsFilter NewFilter(BakedMask mask, int capacirty = 512)
|
||||||
|
{
|
||||||
|
var newFilter = new EcsFilter(this, mask, capacirty);
|
||||||
|
|
||||||
|
for (int i = 0; i < mask.IncCount; i++)
|
||||||
|
{
|
||||||
|
int poolid = mask.Inc[i];
|
||||||
|
var list = _filtersByIncludedComponents[poolid];
|
||||||
|
if (list == null)
|
||||||
|
{
|
||||||
|
list = new List<EcsFilter>(8);
|
||||||
|
_filtersByIncludedComponents[poolid] = list;
|
||||||
|
}
|
||||||
|
list.Add(newFilter);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < mask.ExcCount; i++)
|
||||||
|
{
|
||||||
|
int poolid = mask.Exc[i];
|
||||||
|
var list = _filtersByExcludedComponents[poolid];
|
||||||
|
if (list == null)
|
||||||
|
{
|
||||||
|
list = new List<EcsFilter>(8);
|
||||||
|
_filtersByExcludedComponents[poolid] = list;
|
||||||
|
}
|
||||||
|
list.Add(newFilter);
|
||||||
|
}
|
||||||
|
|
||||||
|
return newFilter;
|
||||||
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region IsMaskCompatible/IsMaskCompatibleWithout
|
#region IsMaskCompatible/IsMaskCompatibleWithout
|
||||||
|
@ -16,13 +16,19 @@ namespace DCFApixels.DragonECS
|
|||||||
this.interfaceType = interfaceType;
|
this.interfaceType = interfaceType;
|
||||||
this.filter = filter;
|
this.filter = filter;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public EcsRunnerFilterAttribute(object filter)
|
||||||
|
{
|
||||||
|
interfaceType = null;
|
||||||
|
this.filter = filter;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public interface IEcsProcessor { }
|
public interface IEcsSystem { }
|
||||||
|
|
||||||
public static class IEcsProcessorExtensions
|
public static class IEcsProcessorExtensions
|
||||||
{
|
{
|
||||||
public static bool IsRunner(this IEcsProcessor self)
|
public static bool IsRunner(this IEcsSystem self)
|
||||||
{
|
{
|
||||||
return self is IEcsRunner;
|
return self is IEcsRunner;
|
||||||
}
|
}
|
||||||
@ -59,7 +65,7 @@ namespace DCFApixels.DragonECS
|
|||||||
_runnerTypes = new Dictionary<Guid, Type>();
|
_runnerTypes = new Dictionary<Guid, Type>();
|
||||||
foreach (var item in newRunnerTypes)
|
foreach (var item in newRunnerTypes)
|
||||||
{
|
{
|
||||||
Type intrf = item.GetInterfaces().Where(o => o != typeof(IEcsRunner) && o != typeof(IEcsProcessor)).First(); //TODO оптимизировать это место
|
Type intrf = item.GetInterfaces().Where(o => o != typeof(IEcsRunner) && o != typeof(IEcsSystem)).First(); //TODO оптимизировать это место
|
||||||
_runnerTypes.Add(intrf.GUID, item);
|
_runnerTypes.Add(intrf.GUID, item);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -84,7 +90,7 @@ namespace DCFApixels.DragonECS
|
|||||||
|
|
||||||
|
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
public static void InitFor<TInterface>() where TInterface : IEcsProcessor
|
public static void InitFor<TInterface>() where TInterface : IEcsSystem
|
||||||
{
|
{
|
||||||
Type interfaceType = typeof(TInterface);
|
Type interfaceType = typeof(TInterface);
|
||||||
Type nonGenericInterfaceType = interfaceType;
|
Type nonGenericInterfaceType = interfaceType;
|
||||||
@ -109,8 +115,8 @@ namespace DCFApixels.DragonECS
|
|||||||
|
|
||||||
public interface IEcsRunner { }
|
public interface IEcsRunner { }
|
||||||
|
|
||||||
public abstract class EcsRunner<TInterface> : IEcsProcessor, IEcsRunner
|
public abstract class EcsRunner<TInterface> : IEcsSystem, IEcsRunner
|
||||||
where TInterface : IEcsProcessor
|
where TInterface : IEcsSystem
|
||||||
{
|
{
|
||||||
internal static void Init(Type subclass)
|
internal static void Init(Type subclass)
|
||||||
{
|
{
|
||||||
@ -128,19 +134,19 @@ namespace DCFApixels.DragonECS
|
|||||||
{
|
{
|
||||||
throw new ArgumentException($"{typeof(TInterface).FullName} is not interface");
|
throw new ArgumentException($"{typeof(TInterface).FullName} is not interface");
|
||||||
}
|
}
|
||||||
if (interfaces.Length != 1 || interfaces[0] != typeof(IEcsProcessor))
|
if (interfaces.Length != 1 || interfaces[0] != typeof(IEcsSystem))
|
||||||
{
|
{
|
||||||
throw new ArgumentException($"{typeof(TInterface).FullName} does not directly inherit the {nameof(IEcsProcessor)} interface");
|
throw new ArgumentException($"{typeof(TInterface).FullName} does not directly inherit the {nameof(IEcsSystem)} interface");
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
_subclass = subclass;
|
_subclass = subclass;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static TInterface Instantiate(IEnumerable<IEcsProcessor> targets, object filter)
|
public static TInterface Instantiate(IEnumerable<IEcsSystem> targets, object filter)
|
||||||
{
|
{
|
||||||
Type interfaceType = typeof(TInterface);
|
Type interfaceType = typeof(TInterface);
|
||||||
|
|
||||||
IEnumerable<IEcsProcessor> newTargets;
|
IEnumerable<IEcsSystem> newTargets;
|
||||||
|
|
||||||
if (filter != null)
|
if (filter != null)
|
||||||
{
|
{
|
||||||
@ -163,7 +169,7 @@ namespace DCFApixels.DragonECS
|
|||||||
|
|
||||||
return Instantiate(newTargets.Select(o => (TInterface)o).ToArray());
|
return Instantiate(newTargets.Select(o => (TInterface)o).ToArray());
|
||||||
}
|
}
|
||||||
public static TInterface Instantiate(IEnumerable<IEcsProcessor> targets)
|
public static TInterface Instantiate(IEnumerable<IEcsSystem> targets)
|
||||||
{
|
{
|
||||||
return Instantiate(targets.Where(o => o is TInterface).Select(o => (TInterface)o).ToArray());
|
return Instantiate(targets.Where(o => o is TInterface).Select(o => (TInterface)o).ToArray());
|
||||||
}
|
}
|
||||||
@ -173,7 +179,7 @@ namespace DCFApixels.DragonECS
|
|||||||
EcsRunnerActivator.InitFor<TInterface>();
|
EcsRunnerActivator.InitFor<TInterface>();
|
||||||
|
|
||||||
var instance = (EcsRunner<TInterface>)Activator.CreateInstance(_subclass);
|
var instance = (EcsRunner<TInterface>)Activator.CreateInstance(_subclass);
|
||||||
return (TInterface)(IEcsProcessor)instance.Set(targets);
|
return (TInterface)(IEcsSystem)instance.Set(targets);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Type _subclass;
|
private static Type _subclass;
|
||||||
|
8
test/Components.meta
Normal file
8
test/Components.meta
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 44bc1d65f4a37af4fb55621ae2da09be
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
7
test/Components/EnemyTag.cs
Normal file
7
test/Components/EnemyTag.cs
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
|
||||||
|
namespace DCFApixels.DragonECS
|
||||||
|
{
|
||||||
|
public struct EnemyTag
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
11
test/Components/EnemyTag.cs.meta
Normal file
11
test/Components/EnemyTag.cs.meta
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: c7100cf6b7909824ba4ffcd869e64167
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
12
test/Components/PlayerTag.cs
Normal file
12
test/Components/PlayerTag.cs
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace DCFApixels.DragonECS
|
||||||
|
{
|
||||||
|
public struct PlayerTag
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
11
test/Components/PlayerTag.cs.meta
Normal file
11
test/Components/PlayerTag.cs.meta
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 730345f3f95800a4dbd182950d4e9f19
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
14
test/Components/TransfromCom.cs
Normal file
14
test/Components/TransfromCom.cs
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
namespace DCFApixels.DragonECS
|
||||||
|
{
|
||||||
|
public struct TransfromCom
|
||||||
|
{
|
||||||
|
public Vector3 position;
|
||||||
|
}
|
||||||
|
}
|
11
test/Components/TransfromCom.cs.meta
Normal file
11
test/Components/TransfromCom.cs.meta
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 8c391c96db013de4780ce5e87c015fa1
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
14
test/Components/Velocity.cs
Normal file
14
test/Components/Velocity.cs
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
namespace DCFApixels.DragonECS
|
||||||
|
{
|
||||||
|
public struct Velocity
|
||||||
|
{
|
||||||
|
public Vector3 value;
|
||||||
|
}
|
||||||
|
}
|
11
test/Components/Velocity.cs.meta
Normal file
11
test/Components/Velocity.cs.meta
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 8a819836b0a5354408897f028b67504c
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
14
test/Components/View.cs
Normal file
14
test/Components/View.cs
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
namespace DCFApixels.DragonECS
|
||||||
|
{
|
||||||
|
public struct View
|
||||||
|
{
|
||||||
|
public Transform Ref;
|
||||||
|
}
|
||||||
|
}
|
11
test/Components/View.cs.meta
Normal file
11
test/Components/View.cs.meta
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: df980941b94b3864c81750c212259b8f
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
@ -3,10 +3,14 @@ using System.Collections.Generic;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
namespace DCFApixels.DragonECS
|
namespace DCFApixels.DragonECS
|
||||||
{
|
{
|
||||||
|
[Serializable]
|
||||||
public class SharedData
|
public class SharedData
|
||||||
{
|
{
|
||||||
|
public Transform view1;
|
||||||
|
public Transform view2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -9,13 +9,18 @@ namespace DCFApixels.DragonECS
|
|||||||
{
|
{
|
||||||
|
|
||||||
private EcsSession _ecsSession;
|
private EcsSession _ecsSession;
|
||||||
|
|
||||||
|
[SerializeField]
|
||||||
public SharedData _data = new SharedData();
|
public SharedData _data = new SharedData();
|
||||||
|
|
||||||
private void Start()
|
private void Start()
|
||||||
{
|
{
|
||||||
_ecsSession = new EcsSession()
|
_ecsSession = new EcsSession()
|
||||||
.Add(new TestSystem())
|
|
||||||
.Inject(_data)
|
.Inject(_data)
|
||||||
|
.AddWorld(new EcsWorld<DefaultWorld>())
|
||||||
|
.Add(new TestSystem())
|
||||||
|
.Add(new VelocitySystem())
|
||||||
|
.Add(new ViewSystem())
|
||||||
.Init();
|
.Init();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,28 +1,41 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
|
||||||
namespace DCFApixels.DragonECS
|
namespace DCFApixels.DragonECS
|
||||||
{
|
{
|
||||||
public class TestSystem : IEcsInject<SharedData>, IEcsSimpleCycleSystem
|
public class TestSystem : IEcsInject<SharedData>, IEcsInject<EcsWorldMap>, IEcsInitSystem
|
||||||
{
|
{
|
||||||
private SharedData _sharedData;
|
private SharedData _sharedData;
|
||||||
|
private EcsWorld<DefaultWorld> _world;
|
||||||
public void Inject(SharedData obj) => _sharedData = obj;
|
public void Inject(SharedData obj) => _sharedData = obj;
|
||||||
|
public void Inject(EcsWorldMap obj) { _world = obj.Get<DefaultWorld>(); }
|
||||||
|
|
||||||
public void Init(EcsSession session)
|
public void Init(EcsSession session)
|
||||||
{
|
{
|
||||||
Debug.Log("Init");
|
var x1 = _world.GetFilter<Inc<TransfromCom, Velocity>>();
|
||||||
}
|
var x2 = _world.GetFilter<Inc<TransfromCom, View>>();
|
||||||
public void Run(EcsSession session)
|
var x3 = _world.GetFilter<Inc<TransfromCom, Velocity>>();
|
||||||
{
|
var x4 = _world.GetFilter<Inc<TransfromCom, Velocity>>();
|
||||||
Debug.Log("Run");
|
var x5 = _world.GetFilter<Inc<Velocity, TransfromCom>>();
|
||||||
}
|
|
||||||
public void Destroy(EcsSession session)
|
int has1 = x1.GetHashCode();
|
||||||
{
|
int has2 = x2.GetHashCode();
|
||||||
Debug.Log("Destroy");
|
int has3 = x3.GetHashCode();
|
||||||
|
int has4 = x4.GetHashCode();
|
||||||
|
int has5 = x5.GetHashCode();
|
||||||
|
|
||||||
|
var e = _world.NewEntity();
|
||||||
|
e.Write<TransfromCom>().position = Vector3.zero;
|
||||||
|
e.Write<View>().Ref = _sharedData.view1;
|
||||||
|
e.Write<EnemyTag>();
|
||||||
|
|
||||||
|
e = _world.NewEntity();
|
||||||
|
e.Write<TransfromCom>().position = Vector3.zero;
|
||||||
|
e.Write<Velocity>().value = Vector3.one;
|
||||||
|
e.Write<View>().Ref = _sharedData.view2;
|
||||||
|
e.Write<PlayerTag>();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
21
test/VelocitySystem.cs
Normal file
21
test/VelocitySystem.cs
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
namespace DCFApixels.DragonECS
|
||||||
|
{
|
||||||
|
public class VelocitySystem : IEcsInject<EcsWorldMap>, IEcsRunSystem
|
||||||
|
{
|
||||||
|
private EcsWorld<DefaultWorld> _world;
|
||||||
|
public void Inject(EcsWorldMap obj) { _world = obj.Get<DefaultWorld>(); }
|
||||||
|
|
||||||
|
public void Run(EcsSession session)
|
||||||
|
{
|
||||||
|
foreach (var item in _world.GetFilter<Inc<TransfromCom, Velocity>>().Entities)
|
||||||
|
{
|
||||||
|
item.Write<TransfromCom>().position += item.Read<Velocity>().value * Time.deltaTime;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
11
test/VelocitySystem.cs.meta
Normal file
11
test/VelocitySystem.cs.meta
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 447778e02b3f0f8409c44680de9dbc0e
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
22
test/ViewSystem.cs
Normal file
22
test/ViewSystem.cs
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
namespace DCFApixels.DragonECS
|
||||||
|
{
|
||||||
|
public class ViewSystem : IEcsInject<EcsWorldMap>, IEcsRunSystem
|
||||||
|
{
|
||||||
|
private EcsWorld<DefaultWorld> _world;
|
||||||
|
public void Inject(EcsWorldMap obj) { _world = obj.Get<DefaultWorld>(); }
|
||||||
|
|
||||||
|
public void Run(EcsSession session)
|
||||||
|
{
|
||||||
|
foreach (var item in _world.GetFilter<Inc<TransfromCom, View>>().Entities)
|
||||||
|
{
|
||||||
|
item.Write<View>().Ref.position = item.Read<TransfromCom>().position;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
11
test/ViewSystem.cs.meta
Normal file
11
test/ViewSystem.cs.meta
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 780f70f4504a08b45b58c4fe891b894f
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
Loading…
Reference in New Issue
Block a user