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); } }