/// <summary> /// The delegate only returns hits with non-null colliders and deals with one projectile's sets of hits at a time. /// </summary> /// <param name="hitData"></param> public static void OnMultiHitSystemEvent(HitHandlerData ecsData, NativeArray <RaycastHit> hitData) { RaycastHit hit; Entity entity = ecsData.Entity; bool canExplode = EntityManager.HasComponent <Explosive>(entity); MultiHit multiComponent = EntityManager.GetComponentData <MultiHit>(entity); uint ownerID = EntityManager.GetComponentData <OwnerID>(entity).Value; float damage = EntityManager.GetComponentData <Damage>(entity).Value; float3 position = EntityManager.GetComponentData <Translation>(entity).Value; // for every hit for (int i = 0; i < hitData.Length; i++) { hit = hitData[i]; if (canExplode) { AddExplosion(entity, hit.point, ownerID); } EntityManager.SetComponentData(entity, new MultiHit { Hits = multiComponent.Hits + 1, MaxHits = multiComponent.MaxHits }); TryToApplyDamage(damage, ownerID, hit.collider); // TODO: Don't use damage as force TryToApplyForce(damage, hit.collider, ForceType.Force, position); CreateHitVisual(); } }
/// <summary> /// The delegate only returns hits with non-null colliders and deals with one projectile's hit at a time. /// </summary> /// <param name="hitData"></param> public static void OnHitSystemEvent(HitHandlerData handlerData, RaycastHit hit) { ProjectileData data = Parameters.GetProjectileDataByID(EntityManager.GetComponentData <Projectile>(handlerData.Entity).ID); float damage = EntityManager.GetComponentData <Damage>(handlerData.Entity).Value; uint ownerID = EntityManager.GetComponentData <OwnerID>(handlerData.Entity).Value; bool canExplode = EntityManager.HasComponent <Explosive>(handlerData.Entity); TryToApplyDamage(damage, ownerID, hit.collider); if (canExplode) { AddExplosion(handlerData.Entity, hit.point, ownerID); } TryToApplyForce(damage, hit.collider, ForceType.Force); CreateHitVisual(); // TODO: Dont destroy entities in here DestroyEntity(handlerData.Entity); }