public void Update()
    {
        ListReadOnly <EnemyDamageComponent> enemyDamageComponent = entityDatabase.QueryTypes <EnemyDamageComponent>();

        if (enemyDamageComponent.Count == 0)
        {
            return;
        }

        for (int i = enemyDamageComponent.Count - 1; i >= 0; --i)
        {
            EnemyDamageComponent damageComponent = enemyDamageComponent[i];
            Entity entity = damageComponent.entity;

            EnemyComponent enemyComponent = entity.GetComponent <EnemyComponent>();
            enemyComponent.audioSource.Play();

            enemyComponent.hitParticles.transform.position = damageComponent.hitPoint;
            enemyComponent.hitParticles.Play();

            enemyComponent.currentHealth -= damageComponent.amount;

            if (enemyComponent.currentHealth <= 0)
            {
                Death(enemyComponent);
            }

            entity.RemoveComponent <EnemyDamageComponent>();
        }
    }
    private void Shoot(GunComponent gunComponent, IGunData gunData)
    {
        Transform transform = gunComponent.entity.GetComponent <TransformComponent>().transform;

        gunComponent.timer = 0f;

        gunComponent.gunAudio.Play();

        gunComponent.gunLight.enabled  = true;
        gunComponent.faceLight.enabled = true;

        gunComponent.gunParticles.Stop();
        gunComponent.gunParticles.Play();

        gunComponent.gunLine.enabled = true;
        gunComponent.gunLine.SetPosition(0, transform.position);

        gunComponent.shootRay.origin    = transform.position;
        gunComponent.shootRay.direction = transform.forward;

        if (Physics.Raycast(gunComponent.shootRay, out gunComponent.shootHit, gunData.range, gunComponent.shootableMask))
        {
            ColliderComponentMap colliderComponentMap = entityDatabase.QueryType <ColliderComponentMap>();
            if (colliderComponentMap.ContainsKey(gunComponent.shootHit.collider.gameObject))
            {
                Entity targetEntity = colliderComponentMap[gunComponent.shootHit.collider.gameObject];
                EnemyDamageComponent damageComponent = targetEntity.AddComponent <EnemyDamageComponent>();
                damageComponent.amount   = gunData.damagePerShot;
                damageComponent.hitPoint = gunComponent.shootHit.point;
            }

            gunComponent.gunLine.SetPosition(1, gunComponent.shootHit.point);
        }
        else
        {
            gunComponent.gunLine.SetPosition(1, gunComponent.shootRay.origin + gunComponent.shootRay.direction * gunData.range);
        }
    }