Advertisement
Guest User

Untitled

a guest
Nov 26th, 2018
182
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.08 KB | None | 0 0
  1. public class TowerTargetJobSystem : ComponentSystem
  2. {
  3.     ComponentGroup enemyGroup;
  4.  
  5.     protected override void OnCreateManager()
  6.     {
  7.         enemyGroup = GetComponentGroup(typeof(EnemyData), typeof(Position));
  8.     }
  9.  
  10.     protected override void OnUpdate()
  11.     {
  12.         if (enemyGroup.CalculateLength() == 0)
  13.             return;
  14.  
  15.         var entityType = this.GetArchetypeChunkEntityType();
  16.         var positionType = this.GetArchetypeChunkComponentType<Position>(true);
  17.         var enemyChunks = this.enemyGroup.CreateArchetypeChunkArray(Allocator.TempJob);
  18.  
  19.         var job = new TowerTargetJob() { enemyChunks = enemyChunks, entityType = entityType, positionType = positionType };
  20.         job.Schedule(this).Complete();
  21.  
  22.         enemyChunks.Dispose();
  23.     }
  24.  
  25.     [BurstCompile]
  26.     struct TowerTargetJob : IJobProcessComponentData<Tower, Position>
  27.     {
  28.         [ReadOnly] public NativeArray<ArchetypeChunk> enemyChunks;
  29.         [ReadOnly] public ArchetypeChunkEntityType entityType;
  30.         [ReadOnly] public ArchetypeChunkComponentType<Position> positionType;
  31.  
  32.         public void Execute(ref Tower tower, [ReadOnly] ref Position towerPosition)
  33.         {
  34.             var nearestEntity = default(Entity);
  35.             var minDist = float.MaxValue;
  36.  
  37.             for (int i = 0; i < enemyChunks.Length; i++)
  38.             {
  39.                 var chunk = enemyChunks[i];
  40.                 var enemyPositions = chunk.GetNativeArray(positionType);
  41.                 var enemyEntities = chunk.GetNativeArray(entityType);
  42.  
  43.                 for (int j = 0; j < enemyPositions.Length; j++)
  44.                 {
  45.                     var enemyPosition = enemyPositions[j];
  46.                     var enemyEntity = enemyEntities[j];
  47.                     var distsq = lengthsq(enemyPosition.Value - towerPosition.Value);
  48.  
  49.                     if (distsq < minDist)
  50.                     {
  51.                         minDist = distsq;
  52.                         nearestEntity = enemyEntity;
  53.                     }
  54.                 }
  55.             }
  56.  
  57.             tower.Target = nearestEntity;
  58.         }
  59.     }
  60. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement