6 Стрельба очередями, переключатель

using UnityEngine;
using System.Collections;

public class Shooting : MonoBehaviour {
 	public Transform bullet; //Префаб патрона
	public GUISkin MySkin;	//Ссылка на наш скин
	public Texture2D AimTexture; //публичная переменная для текстуры прицела
	public Transform MuzzleFlash; //публичная переменная для префаба вспышки
	public int BulletForce = 5000; //Скорость патрона
 	private int CurAmmoCount = 10; //Текущее кол-во патронов в обойме
	public int MaxAmmoCount = 10; //Максимальное число патронов в обойме
	public int CurCatrige = 9;	//Текущее число обойм
 	public AudioClip Fire; //Аудиоклип воспроизводящийся во время стрельбы
 	public AudioClip Reload; //Аудиоклип воспроизводящийся во время перезарядки
	public int AmmoBoxWidth = 200;	//Ширина выводимого окна с информацией о кол-ве патронов
	public int AmmoBoxHeight = 100; //Высота выводимого окна с информацией о кол-ве патронов
	private float ReloadTimer = 0.0f; //Переменная для таймаута перезарядки
	private float MuzzleFlashLifetime = 0.0f; //Время жизни вспышки	
	public int OffsetAimX;				//оффсет прицела по х
	public int OffsetAimY;				//оффсет прицела по y
	enum GunMode //режим стрельбы
	{
		single, //одиночный
		burst //очередь
	}
	private GunMode _gunMode;//Переменная с помощью которой мы выбираем режим стрельбы
	private float BurstTime = 0;//Переменная необходимая для таймера перезарядки
	public float BurstRate = 0.1f;//Переменная отвечающая за скорострельность
 	// Утсановки для старта
	 void Start () 						
	{
		_gunMode = GunMode.single; // режим стрельбы одиночный
		MuzzleFlash.active = false;	// вспышка невидима
	}

 	// Обновление каждого кадра
 	void Update ()
 	{
		if(BurstTime > 0)
		{
		BurstTime -= Time.deltaTime;
		}
		if(Input.GetButtonDown("GunMode"))
		{
			switch (_gunMode)
			{
			case GunMode.single:
				_gunMode = GunMode.burst;
				break;
			case GunMode.burst:
				_gunMode = GunMode.single;
				break;
			}
		}
	 	if(Input.GetMouseButtonDown(0)&CurAmmoCount>0&ReloadTimer<=0&_gunMode == GunMode.single) //Если нажата ЛКМ и кол-во патронов больше 0 и время перезарядки меньше или равно 0 и режим стрельбы одиночный 
	 		{
				Single();
			}
		if(Input.GetMouseButton(0)&CurAmmoCount>0&ReloadTimer<=0&_gunMode == GunMode.burst&BurstTime <= 0) //Если зажата ЛКМ и кол-во патронов больше 0 и время перезарядки меньше или равно 0 и режим стрельбы очередь и таймер очерди меньше или равно 0 
	 		{
				Burst();
			}
		 if(Input.GetButtonDown("Reload Weapon")&CurCatrige>0&ReloadTimer<=0) //Если нажата кнопка Reload Weapon
			 {
			ReloadTimer = 1.5f;
			CurCatrige = CurCatrige - 1;	//-1 обойма
			CurAmmoCount = MaxAmmoCount; 	//Число патронов в обойме = максимальному числу патронов
			audio.PlayOneShot(Reload); 		//проигрываем звук перезарядки
			 }
		if(ReloadTimer>0)					//если таймер больше 0
		{
			ReloadTimer -= Time.deltaTime; //Переменная перезарядки уменьшается с течением времени
		}
				if(MuzzleFlashLifetime>0) //если время жизни вспышки больше 0
		{
			MuzzleFlashLifetime -= Time.deltaTime; 	//Переменная времени жизни вспышки уменьшается с течением времени
		}
		 if(MuzzleFlashLifetime<=0)					//если время жизни вспышки больше 0 
		{
			MuzzleFlash.active = false;				// вспышка невидима
		}
 	}
	void Single()
	{
			Transform BulletInstance = (Transform) Instantiate(bullet, GameObject.Find("BulletSpawnPoint").transform.position, Quaternion.identity); //Генерится префаб патрона в координатах объекта "BulletSpawnPoint"
			BulletInstance.rigidbody.AddForce(transform.forward * BulletForce); //Сгенерированый патрон отправляется вперед со скоростью "BulletForce"
			CurAmmoCount = CurAmmoCount - 1; //-1 патрон
			audio.PlayOneShot(Fire); //проигрываем звук выстрела
			MuzzleFlash.active = true; //вспышка от выстрела видна
			MuzzleFlashLifetime = 0.1f; //установка времени жизни вспышки
	}
	void Burst()
	{
			BurstTime = BurstRate;//Промежуток времени между стрельбой
			Transform BulletInstance = (Transform) Instantiate(bullet, GameObject.Find("BulletSpawnPoint").transform.position, Quaternion.identity); //Генерится префаб патрона в координатах объекта "BulletSpawnPoint"
			BulletInstance.rigidbody.AddForce(transform.forward * BulletForce); //Сгенерированый патрон отправляется вперед со скоростью "BulletForce"
			CurAmmoCount = CurAmmoCount - 1; //-1 патрон
			audio.PlayOneShot(Fire); //проигрываем звук выстрела
			MuzzleFlash.active = true; //вспышка от выстрела видна
			MuzzleFlashLifetime = 0.1f; //установка времени жизни вспышки
	}
	void OnGUI()
	{
		GUI.DrawTexture(new Rect((Screen.width-AimTexture.width)/2-OffsetAimX,(Screen.height-AimTexture.height)/2-OffsetAimY,AimTexture.width,AimTexture.height), AimTexture); // выводим текстуры прицела
		GUI.skin = MySkin;					//Скин используемый для внешнего вида окон расположеных под этой строкой
		GUI.Box(new Rect(Screen.width-AmmoBoxWidth,0,AmmoBoxWidth,AmmoBoxHeight), "Ammo:"+CurAmmoCount+"/"+MaxAmmoCount); //Вывод окна с инфой о патронах
		GUI.Label(new Rect(Screen.width-AmmoBoxWidth,0,AmmoBoxWidth,AmmoBoxHeight), "Catrige:"+CurCatrige); //Вывод текста с инфой о обоймах
	}
 }

Оставить комментарий