using UnityEngine; namespace Weapons { public class BotShooter : MonoBehaviour { [SerializeField] private GameObject firePoint; [SerializeField] private ParticleSystem projectilePrefab; private NPC _myNpc; private MovementController _moveCtrl; private AudioSource _audioSource; private void Awake() { _myNpc = GetComponent(); _moveCtrl = GetComponent(); _audioSource = GetComponent(); } public void BotShoot() { if (Physics.Raycast(firePoint.transform.position, firePoint.transform.forward, out var hit, SettingsReader.Instance.GetSettings.ViewDistance)) { if (hit.transform.TryGetComponent(out var target)) { print($"did damage to {hit.transform.name}"); _audioSource.Play(); Instantiate(projectilePrefab, firePoint.transform.position, firePoint.transform.rotation); var mySpeed = _moveCtrl.Velocity.magnitude; var enemySpeed = 0f; var inCover = false; if (target.GetCharacter.TypeAi == TypeAI.HumanAI) enemySpeed = hit.rigidbody.velocity.magnitude; else { enemySpeed = hit.collider.GetComponent().Velocity.magnitude; inCover = hit.collider.GetComponent().NpcState.InCover; } var hitChance = (1 - 0.5 * mySpeed) * (1 - 0.5 * enemySpeed + 0.5*inCover.ToInt()) / 1.5f; if (!(Random.Range(0f, 1f) < hitChance)) return; _myNpc.AddReward(0.05f); target.GetDamage(SettingsReader.Instance.GetSettings.RifleDamage); } } } } }