Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- using UnityEngine.UI;
- using EZCameraShake;
- using UnityEngine.SceneManagement;
- public class FPS : MonoBehaviour {
- private Animator anim;
- public int[] weaponCurrentNumbers; // what models did user choose in menu? Max: 2 models
- public GameObject[] Weapons; // mobels of weapons
- public int[] MaxBullets; //max bullets for each weapon
- public int[] AllBullets;
- public AudioSource[] WeaponSounds;
- [HideInInspector]
- public int weaponNumber; //current number of weapon
- private GameObject Spawners;
- [HideInInspector]
- public int damage;
- public Camera camera;
- public AudioSource WinSound;
- [Header ("CANVAS")]
- public int maxHealthCount;
- private int currentHealthCount;
- public Slider Health;
- public Text ammo;
- public Text AllAmmo;
- public Image PlusAmmo;
- public Text HeadShot;
- public GameObject NextWeapon;
- public Sprite[] weaponSprites;
- public Image WeaponImage;
- public Text WeaponText;
- public int[] weaponCost;
- public GameObject Pause;
- public GameObject WinLosePanel;
- public Text AgainResume;
- public Text DeadClean;
- public Text simpleText;
- public Text headshotText;
- public Text handText;
- public Text totalText;
- [Header ("MONEY")]
- public int moneyForKill;
- public int moneyForHeadshot;
- public int moneyForHand;
- [HideInInspector]
- public int earnedMoney;
- [HideInInspector]
- public int KillCount;
- [HideInInspector]
- public int HeadshotCount;
- [HideInInspector]
- public int HandCount;
- [Header ("FOR HIT")]
- public GameObject metalHitEffect;
- public GameObject sandHitEffect;
- public GameObject stoneHitEffect;
- public GameObject waterLeakEffect;
- public GameObject[] fleshHitEffects;
- public GameObject woodHitEffect;
- public ParticleSystem[] shotLight;
- void Start () {
- weaponCurrentNumbers [0] = PlayerPrefs.GetInt ("FirstWeapon");
- weaponCurrentNumbers [1] = PlayerPrefs.GetInt ("SecondWeapon");
- weaponCurrentNumbers [2] = PlayerPrefs.GetInt ("ThirdWeapon");
- weaponNumber = weaponCurrentNumbers [2];
- Spawners = GameObject.Find ("Spawners");
- anim = GetComponent<Animator> ();
- anim.SetInteger ("Bullets" + weaponNumber, MaxBullets[weaponNumber]);
- currentHealthCount = maxHealthCount;
- Health.value = currentHealthCount;
- ammo.text = anim.GetInteger ("Bullets").ToString();
- AllAmmo.text = AllBullets [weaponNumber].ToString() + " |||";
- ChangeWeapon ();
- StartChangeWeapon ();
- }
- public void ChangeWeapon()
- {
- // number 0 = gun
- // number 1 = scorpion vz
- // number 2 = ump-45
- // number 3 = ak-47
- // number 4 = m4a1
- // number 5 = shotgun
- // number 6 = Bazooka
- // number 7 = Bazooka2
- // number 8 = Flamethrower
- // number 9 = knife
- // number 10 = bat 1
- // number 11 = bat 2
- // number 12 = bat 3
- bool alreadyChanged = false;
- if (weaponCurrentNumbers [0] == weaponNumber) {
- if (weaponCurrentNumbers [1] != -1) {
- weaponNumber = weaponCurrentNumbers [1]; alreadyChanged = true;
- } else {
- if (weaponCurrentNumbers [2] != -1) {
- weaponNumber = weaponCurrentNumbers [2];alreadyChanged = true;
- } else {
- weaponNumber = weaponCurrentNumbers [0];alreadyChanged = true;
- }
- }
- }
- if (weaponCurrentNumbers [1] == weaponNumber && !alreadyChanged) {
- if (weaponCurrentNumbers [2] != -1) {
- weaponNumber = weaponCurrentNumbers [2];alreadyChanged = true;
- } else {
- if (weaponCurrentNumbers [0] != -1) {
- weaponNumber = weaponCurrentNumbers [0];alreadyChanged = true;
- } else {
- weaponNumber = weaponCurrentNumbers [1];alreadyChanged = true;
- }
- }
- }
- if (weaponCurrentNumbers [2] == weaponNumber && !alreadyChanged) {
- if (weaponCurrentNumbers [0] != -1) {
- weaponNumber = weaponCurrentNumbers [0];alreadyChanged = true;
- } else {
- if (weaponCurrentNumbers [1] != -1) {
- weaponNumber = weaponCurrentNumbers [1];alreadyChanged = true;
- } else {
- weaponNumber = weaponCurrentNumbers [2];alreadyChanged = true;
- }
- }
- }
- anim.SetInteger("ChangeWeapon", weaponNumber);
- }
- public void StartChangeWeapon()
- {
- foreach (GameObject weapon in Weapons) {
- if(weapon != null)
- weapon.SetActive (false);
- }
- Weapons [weaponNumber].SetActive (true);
- Weapons [weaponNumber].GetComponent<Weapon> ().ApplySettings ();
- ammo.text = anim.GetInteger ("Bullets" + weaponNumber).ToString();
- AllAmmo.text = AllBullets [weaponNumber].ToString() + " |||";
- if (weaponNumber >= 9) {
- ammo.gameObject.SetActive (false);
- AllAmmo.gameObject.SetActive (false);
- PlusAmmo.gameObject.SetActive (false);
- } else {
- ammo.gameObject.SetActive (true);
- AllAmmo.gameObject.SetActive (true);
- PlusAmmo.gameObject.SetActive (true);
- }
- }
- public void EndChangeWeapon()
- {
- anim.SetInteger("ChangeWeapon", -1);
- }
- public void hasEmpied()
- {
- ammo.text = anim.GetInteger ("Bullets" + weaponNumber).ToString();
- AllAmmo.text = AllBullets [weaponNumber].ToString() + " |||";
- }
- public void hasReloaded()
- {
- anim.SetBool ("Reload", false);
- int needBullets = MaxBullets [weaponNumber] - anim.GetInteger ("Bullets" + weaponNumber);
- int placeBullets = 0;
- if (AllBullets [weaponNumber] >= needBullets) {
- AllBullets [weaponNumber] -= needBullets;
- placeBullets = needBullets;
- } else {
- placeBullets = AllBullets [weaponNumber];
- AllBullets [weaponNumber] = 0;
- }
- int currentBullets = anim.GetInteger ("Bullets" + weaponNumber);
- currentBullets += placeBullets;
- anim.SetInteger ("Bullets" + weaponNumber, currentBullets);
- ammo.text = anim.GetInteger ("Bullets" + weaponNumber).ToString ();
- AllAmmo.text = AllBullets [weaponNumber].ToString() + " |||";
- }
- public void EndFlameSender()
- {
- Weapons [weaponNumber].GetComponent<Weapon> ().EndFlame();
- }
- public void hasShot()
- {
- if (!Weapons [weaponNumber].GetComponent<Weapon> ().Bazooka) {
- Ray ray = camera.ViewportPointToRay (new Vector3 (0.5F, 0.5F, 0));
- RaycastHit hit;
- float hitDistance = Weapons [weaponNumber].GetComponent<Weapon> ().hitDistance;
- if (Physics.Raycast (ray, out hit, hitDistance)) {
- if (weaponNumber >= 9) {
- anim.SetBool ("KnifeStrikeNone", false);
- WeaponSounds [weaponNumber].Play ();//additional call for knife
- }
- HandleHit (hit);
- } else {
- if (weaponNumber >= 9) {
- anim.SetBool ("KnifeStrikeNone", true);
- }
- }
- if (!Weapons [weaponNumber].GetComponent<Weapon> ().Flamethrower && weaponNumber<9) {
- shotLight [weaponNumber].Play ();
- }
- } else {
- Weapons [weaponNumber].GetComponent<Weapon> ().Rocket ();
- }
- if (Weapons [weaponNumber].GetComponent<Weapon> ().Flamethrower) {
- Weapons [weaponNumber].GetComponent<Weapon> ().Flame.gameObject.GetComponent<FlamethrowerScript> ().act = true;
- Weapons [weaponNumber].GetComponent<Weapon> ().FlamethrowerVoid ();
- }
- if (!Weapons [weaponNumber].GetComponent<Weapon> ().Flamethrower && weaponNumber<9) {
- WeaponSounds [weaponNumber].Play (); //look for additional call in reaycast for knife
- CameraShaker.Instance.ShakeOnce (1, 1, 0, 1);//if simple weapon, not flamethrower
- }
- if (!Weapons [weaponNumber].GetComponent<Weapon> ().Flamethrower) {
- CameraShaker.Instance.ShakeOnce (1, 1, 0, 1);
- }
- int bullets = anim.GetInteger ("Bullets" + weaponNumber);
- bullets--;
- bullets = Mathf.Clamp (bullets, 0, Mathf.Clamp (bullets, 0, 10000));
- anim.SetInteger ("Bullets" + weaponNumber, bullets);ammo.text = anim.GetInteger ("Bullets" + weaponNumber).ToString();
- }
- public void HealthVoid(int change)
- {
- currentHealthCount += change;
- currentHealthCount = Mathf.Clamp (currentHealthCount, 0, maxHealthCount);
- Health.value = currentHealthCount;
- if (currentHealthCount <= 0) {
- Death ();
- }
- }
- public void StrikeDown()
- {
- anim.SetBool ("Shoot", true);ammo.text = anim.GetInteger ("Bullets" + weaponNumber).ToString();
- if (weaponNumber > 9) {
- anim.SetInteger ("HandStrikeMod", Random.Range (0, 2));
- }
- }
- public void StrikeUp()
- {
- anim.SetBool ("Shoot", false);ammo.text = anim.GetInteger ("Bullets" + weaponNumber).ToString();
- }
- public void Reload()
- {
- anim.SetBool ("Reload", true);
- }
- public void toMenu()
- {
- SceneManager.LoadScene ("Menu");
- }
- public void Win()
- {
- WinSound.enabled = true;
- PlayerPrefs.SetInt("Level"+(int.Parse(SceneManager.GetActiveScene().name) + 1).ToString(), 1);
- WinLosePanel.SetActive (true);
- AgainResume.text = "RESUME";
- DeadClean.text = "CLEAN";
- simpleText.text = "x" + KillCount + " = " + "$" + KillCount * moneyForKill;
- headshotText.text = "x" + HeadshotCount + " = " + "$" + HeadshotCount * moneyForHeadshot;
- handText.text = "x" + HandCount + " = " + "$" + HandCount * moneyForHand;
- totalText.text = "x" + (KillCount + HeadshotCount + HandCount) +" = " + "$" +(KillCount * moneyForKill + HeadshotCount * moneyForHeadshot + HandCount * moneyForHand);
- int earnedMoney = KillCount * moneyForKill + HeadshotCount * moneyForHeadshot + HandCount * moneyForHand;
- int money = PlayerPrefs.GetInt ("Money");
- money += earnedMoney;
- PlayerPrefs.SetInt ("Money", money);
- int weaponHasNotBoughtNumber = -1;
- int cost = 999999;
- for(int i=0; i<13; i++){
- if (!PlayerPrefs.HasKey ("Weapon" + i.ToString())&& weaponCost[i]<cost) {
- if(i>=9){
- if (!PlayerPrefs.HasKey ("Weapon"+ (i + 1).ToString ()) && !PlayerPrefs.HasKey ("Weapon"+ (i + 2).ToString ()) && !PlayerPrefs.HasKey ("Weapon"+ (i + 3).ToString ())) {
- cost = weaponCost [i];
- weaponHasNotBoughtNumber = i;
- }
- }else{
- cost = weaponCost [i];
- weaponHasNotBoughtNumber = i;
- }
- }
- }
- if (weaponHasNotBoughtNumber != -1) {
- NextWeapon.SetActive (true);
- WeaponImage.sprite = weaponSprites [weaponHasNotBoughtNumber];
- if (weaponCost [weaponHasNotBoughtNumber] - PlayerPrefs.GetInt ("Money") > 0) {
- WeaponText.text = "$" + Mathf.Abs (weaponCost [weaponHasNotBoughtNumber] - PlayerPrefs.GetInt ("Money")).ToString () + " until next weapon";
- } else {
- WeaponText.text = "Enough money to buy!";
- }
- }
- }
- public void Death()
- {
- anim.SetBool ("Dead", true);
- transform.parent.GetComponent<RotateCam>().enabled = false;
- this.enabled = false;
- GameObject.Find ("Spawners").GetComponent<ZombieCreator> ().isPlayerDead = true;
- WinLosePanel.SetActive (true);
- AgainResume.text = "AGAIN";
- DeadClean.text = "DEAD";
- simpleText.text = "x" + KillCount + " = " + "$" +KillCount * moneyForKill;
- headshotText.text = "x" + HeadshotCount + " = " + "$" +HeadshotCount * moneyForHeadshot;
- handText.text = "x" + HandCount + " = " + "$" +HandCount * moneyForHand;
- totalText.text = "x" + (KillCount + HeadshotCount + HandCount) +" = " + "$" +(KillCount * moneyForKill + HeadshotCount * moneyForHeadshot + HandCount * moneyForHand);
- int earnedMoney = KillCount * moneyForKill + HeadshotCount * moneyForHeadshot + HandCount * moneyForHand;
- int money = PlayerPrefs.GetInt ("Money");
- money += earnedMoney;
- PlayerPrefs.SetInt ("Money", money);
- int weaponHasNotBoughtNumber = -1;
- int cost = 999999;
- for(int i=0; i<13; i++){
- if (!PlayerPrefs.HasKey ("Weapon" + i.ToString()) && weaponCost[i]<cost) {
- if(i>=9){
- if (!PlayerPrefs.HasKey ("Weapon"+ (i + 1).ToString ()) && !PlayerPrefs.HasKey ("Weapon"+ (i + 2).ToString ()) && !PlayerPrefs.HasKey ("Weapon"+ (i + 3).ToString ())) {
- cost = weaponCost [i];
- weaponHasNotBoughtNumber = i;
- }
- }else{
- cost = weaponCost [i];
- weaponHasNotBoughtNumber = i;
- }
- }
- }
- if (weaponHasNotBoughtNumber != -1) {
- NextWeapon.SetActive (true);
- WeaponImage.sprite = weaponSprites [weaponHasNotBoughtNumber];
- if (weaponCost [weaponHasNotBoughtNumber] - PlayerPrefs.GetInt ("Money") > 0) {
- WeaponText.text = "$" + Mathf.Abs (weaponCost [weaponHasNotBoughtNumber] - PlayerPrefs.GetInt ("Money")).ToString () + " until next weapon";
- } else {
- WeaponText.text = "Enough money to buy!";
- }
- }
- }
- public void AgainResumeVoid()
- {
- if(AgainResume.text == "AGAIN")
- SceneManager.LoadScene ( SceneManager.GetActiveScene().name);
- if (AgainResume.text == "RESUME") {
- int nextLevel = int.Parse(SceneManager.GetActiveScene ().name) + 1;
- if (Application.CanStreamedLevelBeLoaded (nextLevel)) {
- SceneManager.LoadScene (nextLevel.ToString());
- } else {
- SceneManager.LoadScene ( SceneManager.GetActiveScene().name);
- }
- }
- }
- public void PauseVoid(string message)
- {
- foreach(Transform zT in Spawners.GetComponent<ZombieCreator>().aliveZombies)
- {
- zT.gameObject.GetComponent<Animator> ().enabled = false;
- }
- anim.enabled = false;
- Spawners.SetActive (false);
- if (message == "pause") {
- Pause.SetActive (true);
- }
- }
- public void ResumeVoid(string message)
- {
- Spawners.SetActive (true);
- foreach(Transform zT in Spawners.GetComponent<ZombieCreator>().aliveZombies)
- {
- zT.gameObject.GetComponent<Animator> ().enabled = true;
- }
- anim.enabled = true;
- if (message == "pause") {
- Pause.SetActive (false);
- }
- }
- void HandleHit(RaycastHit hit)
- {
- if(hit.collider.sharedMaterial != null)
- {
- string materialName = hit.collider.sharedMaterial.name;
- switch(materialName)
- {
- case "Metal":
- SpawnDecal(hit, metalHitEffect);
- break;
- case "Sand":
- SpawnDecal(hit, sandHitEffect);
- break;
- case "Stone":
- SpawnDecal(hit, stoneHitEffect);
- break;
- case "WaterFilled":
- SpawnDecal(hit, waterLeakEffect);
- SpawnDecal(hit, metalHitEffect);
- break;
- case "Wood":
- SpawnDecal(hit, woodHitEffect);
- break;
- case "Meat":
- if (hit.collider.gameObject.tag == "Zombie" && hit.collider.transform.root.GetComponent<ZombieController> ().alive == true) {
- hit.collider.transform.root.GetComponent<ZombieController> ().health-= damage;
- if (hit.collider.transform.root.GetComponent<ZombieController> ().health <= 0) {
- if (weaponNumber < 9) {
- KillCount++;
- earnedMoney += moneyForKill;
- } else {
- HandCount++;
- earnedMoney += moneyForHand;
- }
- hit.collider.transform.root.GetComponent<ZombieController> ().Death ();
- }
- }
- if (hit.collider.gameObject.tag == "Head" && hit.collider.transform.root.GetComponent<ZombieController> ().alive == true) {
- hit.collider.transform.root.GetComponent<ZombieController> ().health=0;
- if (weaponNumber < 9) {
- HeadshotCount++;
- earnedMoney += moneyForHeadshot;
- } else {
- HandCount++;
- earnedMoney += moneyForHand;
- }
- HeadShot.enabled = true;
- HeadShot.GetComponent<Animator> ().enabled = true;
- HeadShot.transform.eulerAngles = new Vector3 (0, 0, Random.Range (-21, 21));
- hit.collider.transform.root.GetComponent<ZombieController> ().Death ();
- }
- SpawnDecal(hit, fleshHitEffects[Random.Range(0, fleshHitEffects.Length)]);
- break;
- case "Character":
- SpawnDecal(hit, fleshHitEffects[Random.Range(0, fleshHitEffects.Length)]);
- break;
- }
- }
- }
- void SpawnDecal(RaycastHit hit, GameObject prefab)
- {
- GameObject spawnedDecal = GameObject.Instantiate(prefab, hit.point, Quaternion.LookRotation(hit.normal));
- spawnedDecal.transform.SetParent(hit.collider.transform);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement