Mirror of Svelto.ECS because we're a fan of it
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

NativeEGIDMultiMapper.cs 1.8KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. #if UNITY_NATIVE
  2. using System;
  3. using Svelto.DataStructures;
  4. namespace Svelto.ECS
  5. {
  6. public struct NativeEGIDMultiMapper<T>:IDisposable where T : unmanaged, IEntityComponent
  7. {
  8. SveltoDictionary<ExclusiveGroupStruct, SveltoDictionary<uint, T,
  9. NativeStrategy<SveltoDictionaryNode<uint>>,
  10. NativeStrategy<T>,
  11. NativeStrategy<int>>,
  12. NativeStrategy<SveltoDictionaryNode<ExclusiveGroupStruct>>,
  13. NativeStrategy<SveltoDictionary<uint, T,
  14. NativeStrategy<SveltoDictionaryNode<uint>>,
  15. NativeStrategy<T>,
  16. NativeStrategy<int>>>,
  17. NativeStrategy<int>> _dic;
  18. public NativeEGIDMultiMapper
  19. (SveltoDictionary<ExclusiveGroupStruct, SveltoDictionary<uint, T,
  20. NativeStrategy<SveltoDictionaryNode<uint>>,
  21. NativeStrategy<T>,
  22. NativeStrategy<int>>,
  23. NativeStrategy<SveltoDictionaryNode<ExclusiveGroupStruct>>,
  24. NativeStrategy<SveltoDictionary<uint, T,
  25. NativeStrategy<SveltoDictionaryNode<uint>>,
  26. NativeStrategy<T>,
  27. NativeStrategy<int>>>,
  28. NativeStrategy<int>> dictionary)
  29. {
  30. _dic = dictionary;
  31. }
  32. public int count => (int) _dic.count;
  33. public void Dispose()
  34. {
  35. _dic.Dispose();
  36. }
  37. public ref T Entity(EGID entity)
  38. {
  39. ref var sveltoDictionary = ref _dic.GetValueByRef(entity.groupID);
  40. return ref sveltoDictionary.GetValueByRef(entity.entityID);
  41. }
  42. public bool Exists(EGID entity)
  43. {
  44. return _dic.TryFindIndex(entity.groupID, out var index)
  45. && _dic.GetDirectValueByRef(index).ContainsKey(entity.entityID);
  46. }
  47. }
  48. }
  49. #endif