Ejemplo n.º 1
0
        /// <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();
            }
        }
Ejemplo n.º 2
0
        /// <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);
        }