mirror of
https://github.com/DCFApixels/DragonECS.git
synced 2025-09-18 01:44:35 +08:00
Merge branch 'dev'
This commit is contained in:
commit
0f30565acf
@ -13,41 +13,50 @@ namespace DCFApixels.DragonECS
|
|||||||
private bool _isBuilt = false;
|
private bool _isBuilt = false;
|
||||||
|
|
||||||
[ThreadStatic]
|
[ThreadStatic]
|
||||||
private static bool _isConstructorStream;
|
private static Stack<Builder> _constructorBuildersStack = null;
|
||||||
[ThreadStatic]
|
private static Stack<Builder> GetBuildersStack()
|
||||||
private static Builder _constructorStreamBuilder;
|
{
|
||||||
|
if(_constructorBuildersStack == null)
|
||||||
|
{
|
||||||
|
_constructorBuildersStack = new Stack<Builder>();
|
||||||
|
}
|
||||||
|
return _constructorBuildersStack;
|
||||||
|
}
|
||||||
|
|
||||||
protected static IncludeMarker Inc
|
protected static IncludeMarker Inc
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
if(_isConstructorStream == false)
|
var buildersStack = GetBuildersStack();
|
||||||
|
if (buildersStack.Count <= 0)
|
||||||
{ //TODO перевести
|
{ //TODO перевести
|
||||||
throw new InvalidOperationException($"{nameof(Inc)} можно использовать только во время инициализации полей и в конструкторе");//TODO Перевести
|
throw new InvalidOperationException($"{nameof(Inc)} можно использовать только во время инициализации полей и в конструкторе");//TODO Перевести
|
||||||
}
|
}
|
||||||
return _constructorStreamBuilder.Inc;
|
return buildersStack.Peek().Inc;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
protected static ExcludeMarker Exc
|
protected static ExcludeMarker Exc
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
if (_isConstructorStream == false)
|
var buildersStack = GetBuildersStack();
|
||||||
|
if (buildersStack.Count <= 0)
|
||||||
{ //TODO перевести
|
{ //TODO перевести
|
||||||
throw new InvalidOperationException($"{nameof(Exc)} можно использовать только во время инициализации полей и в конструкторе");//TODO Перевести
|
throw new InvalidOperationException($"{nameof(Exc)} можно использовать только во время инициализации полей и в конструкторе");//TODO Перевести
|
||||||
}
|
}
|
||||||
return _constructorStreamBuilder.Exc;
|
return buildersStack.Peek().Exc;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
protected static OptionalMarker Opt
|
protected static OptionalMarker Opt
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
if (_isConstructorStream == false)
|
var buildersStack = GetBuildersStack();
|
||||||
|
if (buildersStack.Count <= 0)
|
||||||
{ //TODO перевести
|
{ //TODO перевести
|
||||||
throw new InvalidOperationException($"{nameof(Opt)} можно использовать только во время инициализации полей и в конструкторе");//TODO Перевести
|
throw new InvalidOperationException($"{nameof(Opt)} можно использовать только во время инициализации полей и в конструкторе");//TODO Перевести
|
||||||
}
|
}
|
||||||
return _constructorStreamBuilder.Opt;
|
return buildersStack.Peek().Opt;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -82,10 +91,11 @@ namespace DCFApixels.DragonECS
|
|||||||
protected virtual void Init(Builder b) { }
|
protected virtual void Init(Builder b) { }
|
||||||
public sealed class Builder
|
public sealed class Builder
|
||||||
{
|
{
|
||||||
|
private static int incr = 0;
|
||||||
|
public int id = incr++;
|
||||||
private EcsWorld _world;
|
private EcsWorld _world;
|
||||||
private EcsMask.Builder _maskBuilder;
|
private EcsMask.Builder _maskBuilder;
|
||||||
private bool _isBuilt = false;
|
private bool _isBuilt = false;
|
||||||
|
|
||||||
public IncludeMarker Inc
|
public IncludeMarker Inc
|
||||||
{
|
{
|
||||||
get { return new IncludeMarker(this); }
|
get { return new IncludeMarker(this); }
|
||||||
@ -115,17 +125,11 @@ namespace DCFApixels.DragonECS
|
|||||||
#if !REFLECTION_DISABLED
|
#if !REFLECTION_DISABLED
|
||||||
ConstructorInfo constructorInfo = aspectType.GetConstructor(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, null, new Type[] { typeof(Builder) }, null);
|
ConstructorInfo constructorInfo = aspectType.GetConstructor(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, null, new Type[] { typeof(Builder) }, null);
|
||||||
|
|
||||||
if (_isConstructorStream == true)
|
var buildersStack = GetBuildersStack();
|
||||||
{
|
buildersStack.Push(builder);
|
||||||
throw new InvalidOperationException("Нельзя рекурсивно вызывать конструктор аспекта");//TODO Перевести
|
|
||||||
}
|
|
||||||
_constructorStreamBuilder = builder;
|
|
||||||
_isConstructorStream = true;
|
|
||||||
if (constructorInfo != null)
|
if (constructorInfo != null)
|
||||||
{
|
{
|
||||||
newAspect = (EcsAspect)constructorInfo.Invoke(new object[] { builder });
|
newAspect = (EcsAspect)constructorInfo.Invoke(new object[] { builder });
|
||||||
_constructorStreamBuilder = null;
|
|
||||||
_isConstructorStream = false;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
@ -133,10 +137,9 @@ namespace DCFApixels.DragonECS
|
|||||||
#pragma warning disable IL2091 // Target generic argument does not satisfy 'DynamicallyAccessedMembersAttribute' in target method or type. The generic parameter of the source method or type does not have matching annotations.
|
#pragma warning disable IL2091 // Target generic argument does not satisfy 'DynamicallyAccessedMembersAttribute' in target method or type. The generic parameter of the source method or type does not have matching annotations.
|
||||||
newAspect = Activator.CreateInstance<TAspect>();
|
newAspect = Activator.CreateInstance<TAspect>();
|
||||||
#pragma warning restore IL2091
|
#pragma warning restore IL2091
|
||||||
_constructorStreamBuilder = null;
|
|
||||||
_isConstructorStream = false;
|
|
||||||
newAspect.Init(builder);
|
|
||||||
}
|
}
|
||||||
|
newAspect.Init(builder);
|
||||||
|
buildersStack.Pop();
|
||||||
newAspect._source = world;
|
newAspect._source = world;
|
||||||
builder.Build(out newAspect._mask);
|
builder.Build(out newAspect._mask);
|
||||||
newAspect._isBuilt = true;
|
newAspect._isBuilt = true;
|
||||||
|
Loading…
Reference in New Issue
Block a user