void UpdateSphereColliders(NativeArray <Entity> entities, [ReadOnly] ArchetypeChunkComponentObjects <SphereCollider> sphereColliders) { for (int i = 0, length = sphereColliders.Length; i < length; ++i) { SphereCollider sphere = sphereColliders[i]; if (sphere != null) { SphereColliderComponentData sphereInfo = new SphereColliderComponentData(); sphereInfo.Center = sphere.center; sphereInfo.Radius = sphere.radius; sphereInfo.IsTrigger = sphere.isTrigger ? (byte)1 : (byte)0; Utils.Utils.AddOrSetComponent(entities[i], sphereInfo, GetComponentDataFromEntity <SphereColliderComponentData>(true), EntityManager); } } }
public void Execute(ArchetypeChunk chunk, int chunkIndex, int firstEntityIndex) { NativeArray <SphereColliderComponentData> sphereColliders = chunk.GetNativeArray(SphereColliderType); NativeArray <Position> positions = chunk.GetNativeArray(PositionType); NativeArray <Scale> scales = chunk.GetNativeArray(ScaleType); NativeArray <Entity> entities = chunk.GetNativeArray(EntityType); float3 zero = float3.zero; for (int i = 0, length = sphereColliders.Length; i < length; ++i) { SphereColliderComponentData sphere = sphereColliders[i]; Position position = positions[i]; Scale scale = scales[i]; SpherecastCommand sphereCast = new SpherecastCommand(position.Value + sphere.Center, sphere.Radius * math.max(scale.Value.z, math.max(scale.Value.y, scale.Value.x)), zero, 0, 0); SphereCasts.TryAdd(entities[i], sphereCast); } }