Reloading with R only goes up by 1. But reloading when the gun is empty works fine.
So as the title says it reloads by I think 1.5 and every time I press R it multiplies by 1.5 without obvious reasoning (at least to me) but when the mag is empty it reloads as it should.
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class Gun : MonoBehaviour
{
public float damage = 10f;
public float range = 100f;
public float firerate = 15f;
public Camera fpsCam;
public ParticleSystem muzzleFlash;
public GameObject impactEffect;
public float impactforce = 30f;
public int maxAmmo = 10;
public int currentAmmo;
public float reloadTime = 1f;
private bool isReloading = false;
private bool canReload = true;
private float nextTimeToFire = 0f;
int addedammo;
public int reserve = 100;
public Text ammoText;
string reloadText = "RELOAD!";
string noAmmoText = "NO AMMO!";
public Animator animator;
void Start()
{
//ammoText = GetComponent<Text>();
currentAmmo = maxAmmo;
}
private void OnEnable()
{
isReloading = false;
animator.SetBool("Reloading", false);
}
// Update is called once per frame
void Update()
{
if (currentAmmo == 0)
{
ammoText.text = reloadText;
}
if (reserve == 0)
{
ammoText.text = noAmmoText;
}
if (Input.GetKeyDown(KeyCode.R))
{
if (canReload == true)
{
StartCoroutine(Reload());
return;
}
}
if (currentAmmo == 0)
{
if (canReload == true)
{
StartCoroutine(Reload());
return;
}
}
if (currentAmmo < 0)
{
currentAmmo = 0;
}
if (currentAmmo == maxAmmo)
{
canReload = false;
}
if (reserve == 0)
{
canReload = false;
}
if (isReloading)
return;
if (Input.GetButton("Fire1") && Time.time >= nextTimeToFire)
{
nextTimeToFire = Time.time + 2f / firerate;
Shoot();
}
ammoText.text = currentAmmo.ToString() + "/" + reserve.ToString();
}
IEnumerator Reload()
{
if (canReload == true)
{
isReloading = true;
animator.SetBool("Reloading", true);
yield return new WaitForSeconds(reloadTime - .25f);
animator.SetBool("Reloading", false);
yield return new WaitForSeconds(.25f);
for (int r = reserve; r <= maxAmmo; r++)
{
if (reserve <= 0) break;
currentAmmo++;
reserve--;
}
isReloading = false;
}
}
void Shoot()
{
if (currentAmmo != 0)
{
if (currentAmmo == 0)
{
ammoText.text = reloadText;
}
muzzleFlash.Play();
currentAmmo--;
canReload = true;
RaycastHit hit;
if (Physics.Raycast(fpsCam.transform.position, fpsCam.transform.forward, out hit, range))
{
Debug.Log(hit.transform.name);
Enemy target = hit.transform.GetComponent<Enemy>();
if (target != null)
{
target.TakeDamage(damage);
}
if (hit.rigidbody != null)
{
hit.rigidbody.AddForce(-hit.normal * impactforce);
}
GameObject impacGO = Instantiate(impactEffect, hit.point, Quaternion.LookRotation(hit.normal));
Destroy(impacGO, 2f);
}
}
}
}
I know its messy! In advance thanks for the help!
Comment
Your answer
Follow this Question
Related Questions
How do i add a reload icon for my guns? 1 Answer
Unexpected symbol 'return' in class, struct, or interface member declaration 3 Answers
Admob Errors 1 Answer
UnassignedReferenceException 2 Answers