using System; using System.Collections; using JetBrains.Annotations; using UnityEngine; namespace FastArena { public class Gun : Tool { public int Damage; public float Accuracy; public bool Auto; public uint FireRate; //shots per minute public uint BulletsPerShot; public GameObject ImpactEffect; public float ImpactForce; private Player player; private float shotLatency; private bool ready = true; [CanBeNull] private CameraZoom camZoom; private bool zoomed; public void Awake() { shotLatency = 60f / FireRate; player = GetComponentInParent() ?? throw new Exception("can't find Player component"); camZoom = GetComponentInParent(); } public override void Use0() { if (!ready) return; StartCoroutine(ShootCoroutine()); } IEnumerator ShootCoroutine() { //Debug.Log("shot"); ready = false; var sound = GetComponent(); if(sound != null) sound.Play(); Vector3 shotVector = player.CameraPoint.transform.forward; if (Physics.Raycast( player.CameraPoint.transform.position, shotVector, out RaycastHit hit, 1000f)) { GameObject target = hit.collider.gameObject; if (ImpactEffect != null) Instantiate(ImpactEffect, hit.point, hit.transform.rotation); if (hit.rigidbody != null) hit.rigidbody.AddForce(shotVector * ImpactForce, ForceMode.Impulse); if (target.TryGetComponent(out var mortal)) mortal.Damage(Damage); } yield return new WaitForSeconds(shotLatency); ready = true; } public override void Use1() { if(camZoom == null) return; if (zoomed) { camZoom.Zoom(1); zoomed = false; } else { camZoom.Zoom(2); zoomed = true; } } public override void Use2() { } } }