diff --git a/src/DebugUtils/EcsDebug.cs b/src/DebugUtils/EcsDebug.cs index 028999d..f3ba054 100644 --- a/src/DebugUtils/EcsDebug.cs +++ b/src/DebugUtils/EcsDebug.cs @@ -163,6 +163,10 @@ namespace DCFApixels.DragonECS private static Dictionary _nameIdTable = new Dictionary(); #region Properties + public static DebugService Instance + { + get { return _instance; } + } public static DebugService CurrentThreadInstance {// ts завист от Set get @@ -173,7 +177,7 @@ namespace DCFApixels.DragonECS { if (_currentThreadInstance != _instance) { - _currentThreadInstanceClone = _instance.Clone(); + _currentThreadInstanceClone = _instance.CreateThreadInstance(); _threadServiceClonesSet.Add(_currentThreadInstanceClone); _currentThreadInstance = _instance; @@ -187,20 +191,18 @@ namespace DCFApixels.DragonECS return _currentThreadInstanceClone; } } - public IEnumerable MarkerInfos - { - get { return _nameIdTable.Select(o => new MarkerInfo(o.Key, o.Value)); } - } #endregion + #region Constructors static DebugService() { Set(new DefaultDebugService()); } + #endregion #region Set public static void Set() where T : DebugService, new() - { + {// ts lock (_lock) { if (CurrentThreadInstance is T == false) @@ -221,12 +223,9 @@ namespace DCFApixels.DragonECS { var oldService = _instance; _instance = service; - if (oldService != null) - { //TODO Так, всеже треды влияют друг на друга, скоерее всего проблема в использовании _nameIdTable/ Так вроде пофиксил, но не понял как конкретно - foreach (var record in _nameIdTable) - { - service.OnNewProfilerMark(record.Value, record.Key); - } + foreach (var record in _nameIdTable) + { + service.OnNewProfilerMark(record.Value, record.Key); } service.OnServiceSetup(oldService); OnServiceChanged(service); @@ -235,9 +234,9 @@ namespace DCFApixels.DragonECS } #endregion - #region Setup/Clone + #region OnServiceSetup/CreateThreadInstance protected virtual void OnServiceSetup(DebugService oldService) { } - protected abstract DebugService Clone(); + protected abstract DebugService CreateThreadInstance(); #endregion #region Print/Break @@ -351,7 +350,7 @@ namespace DCFApixels.DragonECS public sealed class NullDebugService : DebugService { - protected sealed override DebugService Clone() { return this; } + protected sealed override DebugService CreateThreadInstance() { return this; } public sealed override void Break() { } public sealed override void Print(string tag, object v) { } public sealed override void ProfilerMarkBegin(int id) { } @@ -376,7 +375,7 @@ namespace DCFApixels.DragonECS Console.ForegroundColor = ConsoleColor.White; Console.BackgroundColor = ConsoleColor.Black; } - protected sealed override DebugService Clone() + protected sealed override DebugService CreateThreadInstance() { return new DefaultDebugService(); } diff --git a/src/EcsAspect.cs b/src/EcsAspect.cs index 00d2d98..7589aef 100644 --- a/src/EcsAspect.cs +++ b/src/EcsAspect.cs @@ -164,6 +164,24 @@ namespace DCFApixels.DragonECS { return _world.GetPoolInstance(); } + + public void Include() + { + IncludeImplicit(typeof(T)); + } + public void Exclude() + { + ExcludeImplicit(typeof(T)); + } + public void Include(Type type) + { + IncludeImplicit(type); + } + public void Exclude(Type type) + { + ExcludeImplicit(type); + } + private void IncludeImplicit(Type type) { _maskBuilder.Inc(type); @@ -172,6 +190,7 @@ namespace DCFApixels.DragonECS { _maskBuilder.Exc(type); } + public TOtherAspect Combine(int order = 0) where TOtherAspect : EcsAspect, new() { var result = _world.GetAspect(); diff --git a/src/EcsMask.cs b/src/EcsMask.cs index 7c4d3ba..550b64a 100644 --- a/src/EcsMask.cs +++ b/src/EcsMask.cs @@ -675,8 +675,8 @@ namespace DCFApixels.DragonECS #endregion #region Inc/Exc/Combine - [Obsolete("Use Inc(type)")] public Builder Include() { return Inc(); } - [Obsolete("Use Exc(type)")] public Builder Exclude() { return Exc(); } + [Obsolete("Use Inc()")] public Builder Include() { return Inc(); } + [Obsolete("Use Exc()")] public Builder Exclude() { return Exc(); } [Obsolete("Use Inc(type)")] public Builder Include(Type type) { return Inc(type); } [Obsolete("Use Exc(type)")] public Builder Exclude(Type type) { return Exc(type); } diff --git a/src/EcsPipeline.Builder.cs b/src/EcsPipeline.Builder.cs index 700c0ab..68093bf 100644 --- a/src/EcsPipeline.Builder.cs +++ b/src/EcsPipeline.Builder.cs @@ -932,7 +932,6 @@ namespace DCFApixels.DragonECS #region AddParams [Serializable] [DataContract] - [StructLayout(LayoutKind.Auto)] public struct AddParams : IEquatable { public static readonly AddParams Default = new AddParams();