Files
real-shooter/Assets/Scripts/Weapons/BotShooter.cs

50 lines
2.0 KiB
C#

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<NPC>();
_moveCtrl = GetComponent<MovementController>();
_audioSource = GetComponent<AudioSource>();
}
public void BotShoot()
{
if (Physics.Raycast(firePoint.transform.position,
firePoint.transform.forward, out var hit,
SettingsReader.Instance.GetSettings.ViewDistance))
{
if (hit.transform.TryGetComponent<ICharacter>(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<MovementController>().Velocity.magnitude;
inCover = hit.collider.GetComponent<NPC>().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);
}
}
}
}
}