fixed player in bot fights and their scaled time features (player not time scaled). Now player can join to fights for justice.

This commit is contained in:
2022-05-20 02:22:22 +07:00
parent 7db8dbcfcf
commit 9faeccdae3
20 changed files with 176 additions and 224 deletions

View File

@ -0,0 +1,50 @@
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);
}
}
}
}
}