From 212bfa0f2afdd51f83531b945be462ea4657fc48 Mon Sep 17 00:00:00 2001 From: Mikhail <99481254+DCFApixels@users.noreply.github.com> Date: Wed, 6 Dec 2023 20:45:32 +0800 Subject: [PATCH] add HasComponent to PoolsMediator --- src/EcsWorld.cs | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/src/EcsWorld.cs b/src/EcsWorld.cs index 41b5f29..ee0c24c 100644 --- a/src/EcsWorld.cs +++ b/src/EcsWorld.cs @@ -2,6 +2,7 @@ using DCFApixels.DragonECS.Utils; using System; using System.Collections.Generic; +using System.Diagnostics.Metrics; using System.Runtime.CompilerServices; using static DCFApixels.DragonECS.EcsWorld; @@ -273,7 +274,7 @@ namespace DCFApixels.DragonECS //public void CloneEntity(int fromEntityID, EcsWorld toWorld, int toEntityID) #endregion - #region RegisterEntityComponent/UnregisterEntityComponent + #region Pools mediation [MethodImpl(MethodImplOptions.AggressiveInlining)] private void RegisterEntityComponent(int entityID, int componentTypeID, EcsMaskBit maskBit) { @@ -292,6 +293,11 @@ namespace DCFApixels.DragonECS if (count < 0) Throw.World_InvalidIncrementComponentsBalance(); #endif } + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private bool HasEntityComponent(int entityID, EcsMaskBit maskBit) + { + return (_entitiesComponentMasks[entityID][maskBit.chankIndex] & maskBit.mask) != maskBit.mask; + } #endregion #endregion @@ -389,7 +395,7 @@ namespace DCFApixels.DragonECS public readonly struct PoolsMediator { private readonly EcsWorld _world; - public PoolsMediator(EcsWorld world) + internal PoolsMediator(EcsWorld world) { if (world == null) { @@ -397,21 +403,26 @@ namespace DCFApixels.DragonECS } if (world._poolsMediator._world != null) { - throw new MethodAccessException("Нельзя создавать вручную"); + throw new MethodAccessException(); } _world = world; } [MethodImpl(MethodImplOptions.AggressiveInlining)] - internal void RegisterComponent(int entityID, int componentTypeID, EcsMaskBit maskBit) + public void RegisterComponent(int entityID, int componentTypeID, EcsMaskBit maskBit) { _world.RegisterEntityComponent(entityID, componentTypeID, maskBit); } [MethodImpl(MethodImplOptions.AggressiveInlining)] - internal void UnregisterComponent(int entityID, int componentTypeID, EcsMaskBit maskBit) + public void UnregisterComponent(int entityID, int componentTypeID, EcsMaskBit maskBit) { _world.UnregisterEntityComponent(entityID, componentTypeID, maskBit); } + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public bool HasComponent(int entityID, EcsMaskBit maskBit) + { + return _world.HasEntityComponent(entityID, maskBit); + } } }