Advertisement
Andrew2002

FPS

Jun 11th, 2017
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 15.18 KB | None | 0 0
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using UnityEngine.UI;
  5. using EZCameraShake;
  6. using UnityEngine.SceneManagement;
  7. public class FPS : MonoBehaviour {
  8.     private Animator anim;
  9.     public int[] weaponCurrentNumbers; // what models did user choose in menu? Max: 2 models
  10.     public GameObject[] Weapons; // mobels of weapons
  11.     public int[] MaxBullets; //max bullets for each weapon
  12.     public int[] AllBullets;
  13.     public AudioSource[] WeaponSounds;
  14.     [HideInInspector]
  15.     public int weaponNumber; //current number of weapon
  16.     private GameObject Spawners;
  17.     [HideInInspector]
  18.     public int damage;
  19.     public Camera camera;
  20.     public AudioSource WinSound;
  21.     [Header ("CANVAS")]
  22.     public int maxHealthCount;
  23.     private int currentHealthCount;
  24.     public Slider Health;
  25.     public Text ammo;
  26.     public Text AllAmmo;
  27.     public Image PlusAmmo;
  28.     public Text HeadShot;
  29.     public GameObject NextWeapon;
  30.     public Sprite[] weaponSprites;
  31.     public Image WeaponImage;
  32.     public Text WeaponText;
  33.     public int[] weaponCost;
  34.  
  35.     public GameObject Pause;
  36.     public GameObject WinLosePanel;
  37.     public Text AgainResume;
  38.     public Text DeadClean;
  39.     public Text simpleText;
  40.     public Text headshotText;
  41.     public Text handText;
  42.     public Text totalText;
  43.  
  44.     [Header ("MONEY")]
  45.     public int moneyForKill;
  46.     public int moneyForHeadshot;
  47.     public int moneyForHand;
  48.     [HideInInspector]
  49.     public int earnedMoney;
  50.     [HideInInspector]
  51.     public int KillCount;
  52.     [HideInInspector]
  53.     public int HeadshotCount;
  54.     [HideInInspector]
  55.     public int HandCount;
  56.  
  57.     [Header ("FOR HIT")]
  58.     public GameObject metalHitEffect;
  59.     public GameObject sandHitEffect;
  60.     public GameObject stoneHitEffect;
  61.     public GameObject waterLeakEffect;
  62.     public GameObject[] fleshHitEffects;
  63.     public GameObject woodHitEffect;
  64.  
  65.     public ParticleSystem[] shotLight;
  66.  
  67.     void Start () {
  68.        
  69.         weaponCurrentNumbers [0] = PlayerPrefs.GetInt ("FirstWeapon");
  70.         weaponCurrentNumbers [1] = PlayerPrefs.GetInt ("SecondWeapon");
  71.         weaponCurrentNumbers [2] = PlayerPrefs.GetInt ("ThirdWeapon");
  72.         weaponNumber = weaponCurrentNumbers [2];
  73.  
  74.  
  75.         Spawners = GameObject.Find ("Spawners");
  76.         anim = GetComponent<Animator> ();
  77.         anim.SetInteger ("Bullets" + weaponNumber, MaxBullets[weaponNumber]);
  78.         currentHealthCount = maxHealthCount;
  79.         Health.value = currentHealthCount;
  80.         ammo.text = anim.GetInteger ("Bullets").ToString();
  81.         AllAmmo.text = AllBullets [weaponNumber].ToString() + " |||";
  82.         ChangeWeapon ();
  83.         StartChangeWeapon ();
  84.     }
  85.  
  86.  
  87.     public void ChangeWeapon()
  88.     {
  89.     // number 0 = gun
  90.     // number 1 = scorpion vz
  91.     // number 2 = ump-45
  92.     // number 3 = ak-47
  93.     // number 4 = m4a1
  94.     // number 5 = shotgun
  95.     // number 6 = Bazooka
  96.     // number 7 = Bazooka2
  97.     // number 8 = Flamethrower
  98.     // number 9 = knife
  99.     // number 10 = bat 1
  100.     // number 11 = bat 2
  101.     // number 12 = bat 3
  102.         bool alreadyChanged = false;
  103.         if (weaponCurrentNumbers [0] == weaponNumber) {
  104.             if (weaponCurrentNumbers [1] != -1) {
  105.                 weaponNumber = weaponCurrentNumbers [1]; alreadyChanged = true;
  106.             } else {
  107.                 if (weaponCurrentNumbers [2] != -1) {
  108.                     weaponNumber = weaponCurrentNumbers [2];alreadyChanged = true;
  109.                 } else {
  110.                     weaponNumber = weaponCurrentNumbers [0];alreadyChanged = true;
  111.                 }
  112.             }
  113.         }
  114.  
  115.         if (weaponCurrentNumbers [1] == weaponNumber && !alreadyChanged) {
  116.             if (weaponCurrentNumbers [2] != -1) {
  117.                 weaponNumber = weaponCurrentNumbers [2];alreadyChanged = true;
  118.             } else {
  119.                 if (weaponCurrentNumbers [0] != -1) {
  120.                     weaponNumber = weaponCurrentNumbers [0];alreadyChanged = true;
  121.                 } else {
  122.                     weaponNumber = weaponCurrentNumbers [1];alreadyChanged = true;
  123.                 }
  124.             }
  125.         }
  126.  
  127.         if (weaponCurrentNumbers [2] == weaponNumber && !alreadyChanged) {
  128.             if (weaponCurrentNumbers [0] != -1) {
  129.                 weaponNumber = weaponCurrentNumbers [0];alreadyChanged = true;
  130.             } else {
  131.                 if (weaponCurrentNumbers [1] != -1) {
  132.                     weaponNumber = weaponCurrentNumbers [1];alreadyChanged = true;
  133.                 } else {
  134.                     weaponNumber = weaponCurrentNumbers [2];alreadyChanged = true;
  135.                 }
  136.             }
  137.         }
  138.         anim.SetInteger("ChangeWeapon", weaponNumber);
  139.     }
  140.  
  141.     public void StartChangeWeapon()
  142.     {
  143.         foreach (GameObject weapon in Weapons) {
  144.             if(weapon != null)
  145.             weapon.SetActive (false);
  146.         }
  147.         Weapons [weaponNumber].SetActive (true);
  148.         Weapons [weaponNumber].GetComponent<Weapon> ().ApplySettings ();
  149.         ammo.text = anim.GetInteger ("Bullets" + weaponNumber).ToString();
  150.         AllAmmo.text = AllBullets [weaponNumber].ToString() + " |||";
  151.         if (weaponNumber >= 9) {
  152.             ammo.gameObject.SetActive (false);
  153.             AllAmmo.gameObject.SetActive (false);
  154.             PlusAmmo.gameObject.SetActive (false);
  155.         } else {
  156.             ammo.gameObject.SetActive (true);
  157.             AllAmmo.gameObject.SetActive (true);
  158.             PlusAmmo.gameObject.SetActive (true);
  159.         }
  160.     }
  161.  
  162.     public void EndChangeWeapon()
  163.     {
  164.         anim.SetInteger("ChangeWeapon", -1);
  165.     }
  166.  
  167.     public void hasEmpied()
  168.     {
  169.         ammo.text = anim.GetInteger ("Bullets" + weaponNumber).ToString();
  170.         AllAmmo.text = AllBullets [weaponNumber].ToString() + " |||";
  171.     }
  172.  
  173.     public void hasReloaded()
  174.     {
  175.         anim.SetBool ("Reload", false);
  176.         int needBullets = MaxBullets [weaponNumber] - anim.GetInteger ("Bullets" + weaponNumber);
  177.         int placeBullets = 0;
  178.         if (AllBullets [weaponNumber] >= needBullets) {
  179.             AllBullets [weaponNumber] -= needBullets;
  180.             placeBullets = needBullets;
  181.         } else {
  182.             placeBullets = AllBullets [weaponNumber];
  183.             AllBullets [weaponNumber] = 0;
  184.         }
  185.            
  186.         int currentBullets = anim.GetInteger ("Bullets" + weaponNumber);
  187.         currentBullets += placeBullets;
  188.         anim.SetInteger ("Bullets" + weaponNumber, currentBullets);
  189.         ammo.text = anim.GetInteger ("Bullets" + weaponNumber).ToString ();
  190.         AllAmmo.text = AllBullets [weaponNumber].ToString() + " |||";
  191.     }
  192.  
  193.     public void EndFlameSender()
  194.     {
  195.         Weapons [weaponNumber].GetComponent<Weapon> ().EndFlame();
  196.     }
  197.  
  198.     public void hasShot()
  199.     {
  200.         if (!Weapons [weaponNumber].GetComponent<Weapon> ().Bazooka) {
  201.             Ray ray = camera.ViewportPointToRay (new Vector3 (0.5F, 0.5F, 0));
  202.             RaycastHit hit;
  203.             float hitDistance = Weapons [weaponNumber].GetComponent<Weapon> ().hitDistance;
  204.             if (Physics.Raycast (ray, out hit, hitDistance)) {
  205.                 if (weaponNumber >= 9) {
  206.                     anim.SetBool ("KnifeStrikeNone", false);
  207.                     WeaponSounds [weaponNumber].Play ();//additional call for knife
  208.                 }
  209.                 HandleHit (hit);
  210.             } else {
  211.                 if (weaponNumber >= 9) {
  212.                     anim.SetBool ("KnifeStrikeNone", true);
  213.                 }
  214.             }
  215.             if (!Weapons [weaponNumber].GetComponent<Weapon> ().Flamethrower && weaponNumber<9) {
  216.                 shotLight [weaponNumber].Play ();
  217.             }
  218.         } else {
  219.                 Weapons [weaponNumber].GetComponent<Weapon> ().Rocket ();
  220.         }
  221.         if (Weapons [weaponNumber].GetComponent<Weapon> ().Flamethrower) {
  222.             Weapons [weaponNumber].GetComponent<Weapon> ().Flame.gameObject.GetComponent<FlamethrowerScript> ().act = true;
  223.             Weapons [weaponNumber].GetComponent<Weapon> ().FlamethrowerVoid ();
  224.         }
  225.         if (!Weapons [weaponNumber].GetComponent<Weapon> ().Flamethrower && weaponNumber<9) {
  226.             WeaponSounds [weaponNumber].Play (); //look for additional call in reaycast for knife
  227.             CameraShaker.Instance.ShakeOnce (1, 1, 0, 1);//if simple weapon, not flamethrower
  228.         }
  229.  
  230.         if (!Weapons [weaponNumber].GetComponent<Weapon> ().Flamethrower) {
  231.             CameraShaker.Instance.ShakeOnce (1, 1, 0, 1);
  232.         }
  233.  
  234.         int bullets = anim.GetInteger ("Bullets" + weaponNumber);
  235.         bullets--;
  236.         bullets = Mathf.Clamp (bullets, 0, Mathf.Clamp (bullets, 0, 10000));
  237.         anim.SetInteger ("Bullets" + weaponNumber, bullets);ammo.text = anim.GetInteger ("Bullets" + weaponNumber).ToString();
  238.     }
  239.  
  240.     public void HealthVoid(int change)
  241.     {
  242.         currentHealthCount += change;
  243.         currentHealthCount = Mathf.Clamp (currentHealthCount, 0, maxHealthCount);
  244.         Health.value = currentHealthCount;
  245.         if (currentHealthCount <= 0) {
  246.             Death ();
  247.            }
  248.         }
  249.  
  250.     public void StrikeDown()
  251.     {
  252.         anim.SetBool ("Shoot", true);ammo.text = anim.GetInteger ("Bullets" + weaponNumber).ToString();
  253.         if (weaponNumber > 9) {
  254.             anim.SetInteger ("HandStrikeMod", Random.Range (0, 2));
  255.         }
  256.     }
  257.  
  258.     public void StrikeUp()
  259.     {
  260.         anim.SetBool ("Shoot", false);ammo.text = anim.GetInteger ("Bullets" + weaponNumber).ToString();
  261.     }
  262.  
  263.     public void Reload()
  264.     {
  265.         anim.SetBool ("Reload", true);
  266.     }
  267.  
  268.     public void toMenu()
  269.     {
  270.         SceneManager.LoadScene ("Menu");
  271.     }
  272.  
  273.     public void Win()
  274.     {
  275.         WinSound.enabled = true;
  276.         PlayerPrefs.SetInt("Level"+(int.Parse(SceneManager.GetActiveScene().name) + 1).ToString(), 1);
  277.         WinLosePanel.SetActive (true);
  278.         AgainResume.text = "RESUME";
  279.         DeadClean.text = "CLEAN";
  280.         simpleText.text = "x" + KillCount + " = " + "$" + KillCount * moneyForKill;
  281.         headshotText.text = "x" + HeadshotCount + " = " + "$" + HeadshotCount * moneyForHeadshot;
  282.         handText.text = "x" + HandCount + " = " + "$" + HandCount * moneyForHand;
  283.         totalText.text = "x" + (KillCount + HeadshotCount + HandCount) +" = " +  "$" +(KillCount * moneyForKill + HeadshotCount * moneyForHeadshot + HandCount * moneyForHand);
  284.         int earnedMoney = KillCount * moneyForKill + HeadshotCount * moneyForHeadshot + HandCount * moneyForHand;
  285.         int money = PlayerPrefs.GetInt ("Money");
  286.         money += earnedMoney;
  287.         PlayerPrefs.SetInt ("Money", money);
  288.         int weaponHasNotBoughtNumber = -1;
  289.         int cost = 999999;
  290.         for(int i=0; i<13; i++){
  291.             if (!PlayerPrefs.HasKey ("Weapon" + i.ToString())&& weaponCost[i]<cost) {
  292.                 if(i>=9){
  293.                     if (!PlayerPrefs.HasKey ("Weapon"+ (i + 1).ToString ()) && !PlayerPrefs.HasKey ("Weapon"+ (i + 2).ToString ()) && !PlayerPrefs.HasKey ("Weapon"+ (i + 3).ToString ())) {
  294.                         cost = weaponCost [i];
  295.                         weaponHasNotBoughtNumber = i;
  296.                     }
  297.                 }else{
  298.                 cost = weaponCost [i];
  299.                 weaponHasNotBoughtNumber = i;
  300.             }
  301.             }
  302.         }
  303.         if (weaponHasNotBoughtNumber != -1) {
  304.             NextWeapon.SetActive (true);
  305.             WeaponImage.sprite = weaponSprites [weaponHasNotBoughtNumber];
  306.             if (weaponCost [weaponHasNotBoughtNumber] - PlayerPrefs.GetInt ("Money") > 0) {
  307.                 WeaponText.text = "$" + Mathf.Abs (weaponCost [weaponHasNotBoughtNumber] - PlayerPrefs.GetInt ("Money")).ToString () + " until next weapon";
  308.             } else {
  309.                 WeaponText.text = "Enough money to buy!";
  310.             }
  311.         }
  312.     }
  313.  
  314.     public void Death()
  315.     {
  316.         anim.SetBool ("Dead", true);
  317.         transform.parent.GetComponent<RotateCam>().enabled = false;
  318.         this.enabled = false;
  319.         GameObject.Find ("Spawners").GetComponent<ZombieCreator> ().isPlayerDead = true;
  320.         WinLosePanel.SetActive (true);
  321.         AgainResume.text = "AGAIN";
  322.         DeadClean.text = "DEAD";
  323.         simpleText.text = "x" + KillCount + " = " +  "$" +KillCount * moneyForKill;
  324.         headshotText.text = "x" + HeadshotCount + " = " +  "$" +HeadshotCount * moneyForHeadshot;
  325.         handText.text = "x" + HandCount + " = " +  "$" +HandCount * moneyForHand;
  326.         totalText.text = "x" + (KillCount + HeadshotCount + HandCount) +" = " +  "$" +(KillCount * moneyForKill + HeadshotCount * moneyForHeadshot + HandCount * moneyForHand);
  327.         int earnedMoney = KillCount * moneyForKill + HeadshotCount * moneyForHeadshot + HandCount * moneyForHand;
  328.         int money = PlayerPrefs.GetInt ("Money");
  329.         money += earnedMoney;
  330.         PlayerPrefs.SetInt ("Money", money);
  331.         int weaponHasNotBoughtNumber = -1;
  332.         int cost = 999999;
  333.         for(int i=0; i<13; i++){
  334.             if (!PlayerPrefs.HasKey ("Weapon" + i.ToString()) && weaponCost[i]<cost) {
  335.                 if(i>=9){
  336.                     if (!PlayerPrefs.HasKey ("Weapon"+ (i + 1).ToString ()) && !PlayerPrefs.HasKey ("Weapon"+ (i + 2).ToString ()) && !PlayerPrefs.HasKey ("Weapon"+ (i + 3).ToString ())) {
  337.                         cost = weaponCost [i];
  338.                         weaponHasNotBoughtNumber = i;
  339.                     }
  340.                 }else{
  341.                     cost = weaponCost [i];
  342.                     weaponHasNotBoughtNumber = i;
  343.                 }
  344.             }
  345.         }
  346.         if (weaponHasNotBoughtNumber != -1) {
  347.             NextWeapon.SetActive (true);
  348.             WeaponImage.sprite = weaponSprites [weaponHasNotBoughtNumber];
  349.             if (weaponCost [weaponHasNotBoughtNumber] - PlayerPrefs.GetInt ("Money") > 0) {
  350.                 WeaponText.text = "$" + Mathf.Abs (weaponCost [weaponHasNotBoughtNumber] - PlayerPrefs.GetInt ("Money")).ToString () + " until next weapon";
  351.             } else {
  352.                 WeaponText.text = "Enough money to buy!";
  353.             }
  354.         }
  355.     }
  356.  
  357.     public void AgainResumeVoid()
  358.     {
  359.         if(AgainResume.text == "AGAIN")
  360.         SceneManager.LoadScene ( SceneManager.GetActiveScene().name);
  361.         if (AgainResume.text == "RESUME") {
  362.             int nextLevel = int.Parse(SceneManager.GetActiveScene ().name) + 1;
  363.             if (Application.CanStreamedLevelBeLoaded (nextLevel)) {
  364.                 SceneManager.LoadScene (nextLevel.ToString());
  365.             } else {
  366.                 SceneManager.LoadScene ( SceneManager.GetActiveScene().name);
  367.             }
  368.         }
  369.         }
  370.        
  371.     public void PauseVoid(string message)
  372.     {
  373.         foreach(Transform zT in Spawners.GetComponent<ZombieCreator>().aliveZombies)
  374.             {
  375.             zT.gameObject.GetComponent<Animator> ().enabled = false;
  376.             }
  377.         anim.enabled = false;
  378.         Spawners.SetActive (false);
  379.         if (message == "pause") {
  380.             Pause.SetActive (true);
  381.         }
  382.     }
  383.  
  384.     public void ResumeVoid(string message)
  385.     {
  386.         Spawners.SetActive (true);
  387.         foreach(Transform zT in Spawners.GetComponent<ZombieCreator>().aliveZombies)
  388.         {
  389.             zT.gameObject.GetComponent<Animator> ().enabled = true;
  390.         }
  391.         anim.enabled = true;
  392.         if (message == "pause") {
  393.             Pause.SetActive (false);
  394.         }
  395.     }
  396.  
  397.     void HandleHit(RaycastHit hit)
  398.     {
  399.         if(hit.collider.sharedMaterial != null)
  400.         {
  401.             string materialName = hit.collider.sharedMaterial.name;
  402.  
  403.             switch(materialName)
  404.             {
  405.             case "Metal":
  406.                 SpawnDecal(hit, metalHitEffect);
  407.                 break;
  408.             case "Sand":
  409.                 SpawnDecal(hit, sandHitEffect);
  410.                 break;
  411.             case  "Stone":
  412.                 SpawnDecal(hit, stoneHitEffect);
  413.                 break;
  414.             case "WaterFilled":
  415.                 SpawnDecal(hit, waterLeakEffect);
  416.                 SpawnDecal(hit, metalHitEffect);
  417.                 break;
  418.             case "Wood":
  419.                 SpawnDecal(hit, woodHitEffect);
  420.                 break;
  421.             case "Meat":
  422.                 if (hit.collider.gameObject.tag == "Zombie" && hit.collider.transform.root.GetComponent<ZombieController> ().alive == true) {
  423.                     hit.collider.transform.root.GetComponent<ZombieController> ().health-= damage;
  424.                     if (hit.collider.transform.root.GetComponent<ZombieController> ().health <= 0) {
  425.                        
  426.                         if (weaponNumber < 9) {
  427.                             KillCount++;
  428.                             earnedMoney += moneyForKill;
  429.                         } else {
  430.                             HandCount++;
  431.                             earnedMoney += moneyForHand;
  432.                         }
  433.                             hit.collider.transform.root.GetComponent<ZombieController> ().Death ();
  434.                     }
  435.                 }
  436.                 if (hit.collider.gameObject.tag == "Head" && hit.collider.transform.root.GetComponent<ZombieController> ().alive == true) {
  437.                     hit.collider.transform.root.GetComponent<ZombieController> ().health=0;
  438.                     if (weaponNumber < 9) {
  439.                     HeadshotCount++;
  440.                     earnedMoney += moneyForHeadshot;
  441.                 } else {
  442.                     HandCount++;
  443.                     earnedMoney += moneyForHand;
  444.                 }
  445.                     HeadShot.enabled = true;
  446.                     HeadShot.GetComponent<Animator> ().enabled = true;
  447.                     HeadShot.transform.eulerAngles = new Vector3 (0, 0, Random.Range (-21, 21));
  448.                     hit.collider.transform.root.GetComponent<ZombieController> ().Death ();
  449.                 }
  450.                 SpawnDecal(hit, fleshHitEffects[Random.Range(0, fleshHitEffects.Length)]);
  451.                 break;
  452.             case "Character":
  453.                 SpawnDecal(hit, fleshHitEffects[Random.Range(0, fleshHitEffects.Length)]);
  454.                 break;
  455.             }
  456.         }
  457.     }
  458.  
  459.     void SpawnDecal(RaycastHit hit, GameObject prefab)
  460.     {
  461.         GameObject spawnedDecal = GameObject.Instantiate(prefab, hit.point, Quaternion.LookRotation(hit.normal));
  462.         spawnedDecal.transform.SetParent(hit.collider.transform);
  463.     }
  464. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement