Guest User

WeaponScriptNEW.js

a guest
Jul 31st, 2013
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /**
  2. *  Script written by OMA [www.armedunity.com]
  3. **/
  4.  
  5. @script ExecuteInEditMode()
  6.  
  7. enum fireMode { none, semi, auto, burst, launcher}
  8. @HideInInspector
  9. var currentMode = fireMode.semi;
  10. var firstMode = fireMode.semi;
  11. var secondMode = fireMode.launcher;
  12.  
  13. enum Ammo { Magazines, Bullets }
  14. var ammoMode : Ammo = Ammo.Magazines;
  15.  
  16. var canReloadLauncher : boolean = false;
  17.    
  18.     var soundDraw : AudioClip;
  19.     var soundFire : AudioClip;
  20.     var soundReload : AudioClip;
  21.     var soundEmpty : AudioClip;
  22.     var switchModeSound : AudioClip;
  23.  
  24.     var weaponAnim : GameObject;
  25.     var Concrete : GameObject;
  26.     var Wood : GameObject;
  27.     var Metal : GameObject;
  28.     var Dirt : GameObject;
  29.     var Blood : GameObject;
  30.     var untagged : GameObject;
  31.  
  32.     var layerMask : LayerMask;
  33.     var muzzleFlash : Renderer;
  34.     var muzzleLight : Light;
  35.  
  36.     var damage : int = 50;
  37.     var bulletsPerMag : int = 50;
  38.     var magazines : int = 5;
  39.     private var fireRate : float = 0.1;
  40.     var fireRateFirstMode : float = 0.1;
  41.     var fireRateSecondMode : float = 0.1;
  42.     var reloadTime : float = 3.0;
  43.     var reloadAnimSpeed : float = 1.2;
  44.     var drawTime : float = 1.5;
  45.    
  46.     var range : float = 250.0;
  47.     var force : float = 200.0;
  48.    
  49.     //Weapon accuracy
  50.     private var baseInaccuracy : float;
  51.     var baseInaccuracyAIM : float = 0.005;
  52.     var baseInaccuracyHIP : float = 1.5;
  53.     var inaccuracyIncreaseOverTime : float = 0.2;
  54.     var inaccuracyDecreaseOverTime : float = 0.5;
  55.     private var maximumInaccuracy : float;
  56.     var maxInaccuracyHIP : float = 5.0;
  57.     var maxInaccuracyAIM : float = 1.0;
  58.    
  59.     private var triggerTime : float = 0.05;
  60.    
  61.     //Aiming
  62.     var hipPosition : Vector3;
  63.     var aimPosition : Vector3;
  64.     private var aiming : boolean;
  65.     private var curVect : Vector3;
  66.     var aimSpeed : float = 0.25;
  67.    
  68.     //Field Of View
  69.     var zoomSpeed : float = 0.5;
  70.     var FOV : int = 40;
  71.    
  72.     private var bulletsLeft : int = 0;
  73.     private var m_LastFrameShot : int = -10;
  74.     private var nextFireTime : float = 0.0;
  75.     @HideInInspector
  76.     var reloading : boolean;
  77.     private var draw : boolean;
  78.     private var weaponCamera : GameObject;
  79.     private var mainCamera : GameObject;
  80.     private var playing : boolean = false;
  81.     @HideInInspector
  82.     var selected : boolean = false;
  83.     private var player : GameObject;
  84.     private var isFiring : boolean = false;
  85.     private var bursting : boolean = false;
  86.    
  87.     //Burst
  88.     var shotsPerBurst : int = 3;
  89.     var burstTime : float = 0.07;  
  90.    
  91.     //GUI
  92.     var mySkin : GUISkin;
  93.  
  94.     //Launcher
  95.     var projectilePrefab : Rigidbody;
  96.     var projectileSpeed = 30.0;
  97.     var projectiles = 20;
  98.     var launchPosition : GameObject;
  99.     var fireLauncherAnimGO : GameObject;
  100.     var soundReloadLauncher : AudioClip;
  101.     private var launcjerReload : boolean = false;
  102.     var launcherReloadTime : float = 2.0;
  103.     var reloadlauncher : String = "reloadlauncher";
  104.     private var rocket : GameObject;
  105.    
  106.     //KickBack
  107.     var kickGO : Transform;
  108.     var kickUpside : float = 0.5;
  109.     var kickSideways : float = 0.5;
  110.    
  111.     //Crosshair Textures
  112.     var crosshairFirstModeHorizontal : Texture2D;
  113.     var crosshairFirstModeVertical : Texture2D;
  114.     var crosshairSecondMode : Texture2D;
  115.     private var adjustMaxCroshairSize : float = 6.0;
  116.    
  117.     //Switch Weapon Fire Modes
  118.     private var canSwicthMode : boolean = true;
  119.    
  120. function Start(){
  121.     weaponCamera = GameObject.FindWithTag("WeaponCamera");
  122.     mainCamera = GameObject.FindWithTag("MainCamera");
  123.     player = GameObject.FindWithTag("Player");
  124.     muzzleFlash.enabled = false;
  125.     muzzleLight.enabled = false;
  126.     bulletsLeft = bulletsPerMag;
  127.     currentMode = firstMode;
  128.     fireRate = fireRateFirstMode;
  129.     aiming = false;
  130.     if(firstMode == fireMode.launcher){
  131.         rocket = GameObject.Find("RPGrocket");
  132.     }
  133.     if(ammoMode == Ammo.Bullets){
  134.         magazines = magazines * bulletsPerMag;
  135.     }
  136. }  
  137.    
  138. function Update(){
  139.     if(selected){
  140.    
  141.         if (Input.GetButtonDown ("Fire")){
  142.             if(currentMode == fireMode.semi){
  143.                 fireSemi();
  144.             }
  145.        
  146.             if(currentMode == fireMode.launcher){
  147.                 fireLauncher();
  148.             }
  149.            
  150.             if(currentMode == fireMode.burst){
  151.                 fireBurst();
  152.             }
  153.            
  154.             if(bulletsLeft > 0)
  155.             isFiring = true;   
  156.         }
  157.        
  158.         if (Input.GetButton ("Fire")){
  159.             if(currentMode == fireMode.auto){
  160.                 fireSemi();
  161.                 if(bulletsLeft > 0)
  162.                 isFiring = true;
  163.             }  
  164.         }
  165.        
  166.         if (Input.GetButtonDown ("Reload")){
  167.             Reload();
  168.         }
  169.     }
  170.  
  171.     if (Input.GetButton("Fire2") && !Input.GetButton ("Run") && !reloading){       
  172.         if (!aiming){
  173.             aiming = true;
  174.             curVect = aimPosition - transform.localPosition;
  175.         }
  176.         if (transform.localPosition != aimPosition && aiming){
  177.             if(Mathf.Abs(Vector3.Distance(transform.localPosition , aimPosition)) < curVect.magnitude/aimSpeed * Time.deltaTime){
  178.                 transform.localPosition = aimPosition;
  179.             } else {
  180.                 transform.localPosition += curVect/aimSpeed * Time.deltaTime;                  
  181.             }
  182.         }
  183.     } else {
  184.         if (aiming){
  185.             aiming = false;
  186.             curVect = hipPosition - transform.localPosition;
  187.             /*
  188.             var go = GetComponentsInChildren(Renderer);
  189.             for( var g : Renderer in go){
  190.             if (g.name != "muzzle_flash")
  191.                 g.renderer.enabled = true;
  192.             }
  193.             */
  194.         }
  195.        
  196.         if(Mathf.Abs(Vector3.Distance(transform.localPosition , hipPosition)) < curVect.magnitude/aimSpeed * Time.deltaTime){
  197.             transform.localPosition = hipPosition;
  198.         }else{
  199.             transform.localPosition += curVect/aimSpeed * Time.deltaTime;
  200.         }
  201.     }
  202.        
  203.     if(aiming){
  204.         maximumInaccuracy = maxInaccuracyAIM;
  205.         baseInaccuracy = baseInaccuracyAIM;
  206.         mainCamera.camera.fieldOfView -= FOV * Time.deltaTime/zoomSpeed;
  207.         if(mainCamera.camera.fieldOfView < FOV){
  208.             mainCamera.camera.fieldOfView = FOV;
  209.         }
  210.         weaponCamera.camera.fieldOfView -= 40 * Time.deltaTime/zoomSpeed;
  211.         if(weaponCamera.camera.fieldOfView < 40){
  212.             weaponCamera.camera.fieldOfView = 40;
  213.         }
  214.     }else{
  215.         maximumInaccuracy = maxInaccuracyHIP;
  216.         baseInaccuracy = baseInaccuracyHIP;
  217.         mainCamera.camera.fieldOfView += 60 * Time.deltaTime/0.5; // This is where the error is pointing to!
  218.         if(mainCamera.camera.fieldOfView > 60){
  219.             mainCamera.camera.fieldOfView = 60;
  220.         }
  221.         weaponCamera.camera.fieldOfView += 50 * Time.deltaTime/0.5;
  222.         if(weaponCamera.camera.fieldOfView > 50){
  223.             weaponCamera.camera.fieldOfView = 50;
  224.         }
  225.     }
  226.    
  227.     if(player.rigidbody.velocity.magnitude > 3.0){
  228.         triggerTime += inaccuracyDecreaseOverTime;
  229.     }
  230.  
  231.     if(isFiring){
  232.         triggerTime += inaccuracyIncreaseOverTime;
  233.     }else{
  234.         if(player.rigidbody.velocity.magnitude < 3.0)
  235.         triggerTime -= inaccuracyDecreaseOverTime;
  236.     }
  237.    
  238.     if (triggerTime >= maximumInaccuracy) {
  239.         triggerTime = maximumInaccuracy;
  240.     }
  241.    
  242.     if (triggerTime <= baseInaccuracy) {
  243.         triggerTime = baseInaccuracy;
  244.     }
  245.  
  246.     if(nextFireTime > Time.time){
  247.         isFiring = false;
  248.     }  
  249.    
  250.     if(Input.GetButtonDown("switchFireMode") && secondMode != fireMode.none && canSwicthMode){
  251.         if(currentMode != firstMode){
  252.             FirstFireMode();
  253.         }else{
  254.             SecondFireMode();
  255.         }
  256.     }          
  257. }
  258.  
  259.  
  260. function LateUpdate(){
  261.     if (m_LastFrameShot == Time.frameCount){
  262.         muzzleFlash.transform.localRotation = Quaternion.AngleAxis(Random.value * 360, Vector3.forward);
  263.         muzzleFlash.enabled = true;
  264.         muzzleLight.enabled = true;    
  265.     }else{
  266.         muzzleFlash.enabled = false;
  267.         muzzleLight.enabled = false;
  268.     }  
  269. }
  270.  
  271. function OnGUI (){
  272.     if(selected){
  273.         GUI.skin = mySkin;
  274.         var style1 = mySkin.customStyles[0];
  275.         if(ammoMode == Ammo.Magazines){
  276.             if(firstMode != fireMode.none && firstMode != fireMode.launcher || secondMode != fireMode.none && secondMode != fireMode.launcher){
  277.                 GUI.Label (Rect(Screen.width - 200,Screen.height-35,200,80),"Ammo : ");
  278.                 GUI.Label (Rect(Screen.width - 110,Screen.height-35,200,80),"" + bulletsLeft, style1);
  279.                 GUI.Label (Rect(Screen.width - 80,Screen.height-35,200,80)," / " + magazines);
  280.             }
  281.         }  
  282.        
  283.         if(ammoMode == Ammo.Bullets){
  284.             if(firstMode != fireMode.none && firstMode != fireMode.launcher || secondMode != fireMode.none && secondMode != fireMode.launcher){
  285.                 GUI.Label (Rect(Screen.width - 200,Screen.height-35,200,80),"Bullets : ");
  286.                 GUI.Label (Rect(Screen.width - 110,Screen.height-35,200,80),"" + bulletsLeft, style1);
  287.                 GUI.Label (Rect(Screen.width - 80,Screen.height-35,200,80)," |  " + magazines);
  288.             }  
  289.         }
  290.        
  291.         if(firstMode != fireMode.none || secondMode != fireMode.none){
  292.             GUI.Label (Rect(Screen.width - 200,Screen.height-65,200,80),"Firing Mode :");
  293.             GUI.Label (Rect(Screen.width - 110,Screen.height-65,200,80),"" + currentMode, style1);
  294.         }
  295.        
  296.         if(secondMode == fireMode.launcher || firstMode == fireMode.launcher){
  297.             GUI.Label (Rect(Screen.width - 200,Screen.height-95,200,80),"Projectiles : ");
  298.             GUI.Label (Rect(Screen.width - 110,Screen.height-95,200,80),"" + projectiles, style1);
  299.         }  
  300.        
  301.         if(crosshairFirstModeHorizontal != null){  
  302.             if(currentMode != fireMode.launcher){
  303.                 var w = crosshairFirstModeHorizontal.width;
  304.                 var h = crosshairFirstModeHorizontal.height;
  305.                 position1 = Rect((Screen.width + w)/2 + (triggerTime * adjustMaxCroshairSize),(Screen.height - h)/2, w, h);
  306.                 position2 = Rect((Screen.width - w)/2,(Screen.height + h)/2 + (triggerTime * adjustMaxCroshairSize), w, h);
  307.                 position3 = Rect((Screen.width - w)/2 - (triggerTime * adjustMaxCroshairSize) - w,(Screen.height - h )/2, w, h);
  308.                 position4 = Rect((Screen.width - w)/2,(Screen.height - h)/2 - (triggerTime * adjustMaxCroshairSize) - h, w, h);
  309.                 if (!aiming) {
  310.                     GUI.DrawTexture(position1, crosshairFirstModeHorizontal);   //Right
  311.                     GUI.DrawTexture(position2, crosshairFirstModeVertical);     //Up
  312.                     GUI.DrawTexture(position3, crosshairFirstModeHorizontal);   //Left
  313.                     GUI.DrawTexture(position4, crosshairFirstModeVertical);     //Down
  314.                 }
  315.             }
  316.         }  
  317.        
  318.         if(crosshairSecondMode != null){
  319.             if(currentMode == fireMode.launcher){
  320.                 var width = crosshairSecondMode.width/2;
  321.                 var height = crosshairSecondMode.height/2;
  322.                 position = Rect((Screen.width - width)/2,(Screen.height - height )/2, width, height);
  323.                 if (!aiming) {
  324.                     GUI.DrawTexture(position, crosshairSecondMode);
  325.                 }
  326.             }
  327.         }  
  328.     }  
  329. }
  330.  
  331. function FirstFireMode(){
  332.    
  333.     canSwicthMode = false;
  334.     selected = false;
  335.     weaponAnim.animation.Rewind("SwitchAnim");
  336.     weaponAnim.animation.Play("SwitchAnim");
  337.     audio.clip = switchModeSound;
  338.     audio.Play();
  339.     yield WaitForSeconds(0.6);
  340.     currentMode = firstMode;
  341.     fireRate = fireRateFirstMode;
  342.     selected = true;
  343.     canSwicthMode = true;
  344. }
  345.  
  346. function SecondFireMode(){
  347.    
  348.     canSwicthMode = false;
  349.     selected = false;
  350.     audio.clip = switchModeSound;
  351.     audio.Play();
  352.     weaponAnim.animation.Play("SwitchAnim");
  353.     yield WaitForSeconds(0.6);
  354.     currentMode = secondMode;
  355.     fireRate = fireRateSecondMode;
  356.     selected = true;
  357.     canSwicthMode = true;
  358.    
  359. }
  360.  
  361. function fireSemi (){
  362.     if (reloading || bulletsLeft <= 0){
  363.         if(bulletsLeft == 0){
  364.             OutOfAmmo();
  365.         }      
  366.         return;
  367.     }
  368.    
  369.     if (Time.time - fireRate > nextFireTime)
  370.         nextFireTime = Time.time - Time.deltaTime;
  371.  
  372.         while(nextFireTime < Time.time){
  373.             fireOneBullet();
  374.             nextFireTime = Time.time + fireRate;
  375.     }
  376. }
  377.  
  378. function fireLauncher (){
  379.     if (reloading || projectiles <= 0){
  380.         if(projectiles == 0){
  381.             OutOfAmmo();
  382.         }      
  383.         return;
  384.     }
  385.    
  386.     if (Time.time - fireRate > nextFireTime)
  387.         nextFireTime = Time.time - Time.deltaTime;
  388.  
  389.         while(nextFireTime < Time.time){
  390.             fireProjectile();
  391.             nextFireTime = Time.time + fireRate;
  392.     }
  393. }
  394.  
  395. function fireBurst (){
  396.     var shotCounter : int = 0;
  397.    
  398.     if (reloading || bursting || bulletsLeft <= 0){
  399.         if(bulletsLeft <= 0){
  400.             OutOfAmmo();
  401.         }      
  402.         return;
  403.     }
  404.    
  405.     if (Time.time - fireRate > nextFireTime)
  406.         nextFireTime = Time.time - Time.deltaTime;
  407.  
  408.     if(Time.time > nextFireTime){
  409.         while (shotCounter < shotsPerBurst){
  410.             bursting = true;
  411.             shotCounter++;
  412.             if (bulletsLeft > 0){
  413.                 fireOneBullet();
  414.             }          
  415.             yield WaitForSeconds(burstTime);
  416.         }          
  417.         nextFireTime = Time.time + fireRate;
  418.     }
  419.     bursting = false;
  420. }
  421.  
  422.  
  423. function fireOneBullet (){
  424.     if (nextFireTime > Time.time || draw){
  425.         if(bulletsLeft <= 0){
  426.             OutOfAmmo();
  427.         }  
  428.         return;
  429.     }
  430.    
  431.     var direction = gameObject.transform.TransformDirection(Vector3(Random.Range(-0.01, 0.01) * triggerTime, Random.Range(-0.01, 0.01) * triggerTime,1));
  432.     var hit : RaycastHit;
  433.     var position = transform.parent.position;
  434.  
  435.     if (Physics.Raycast(position, direction, hit, range, layerMask.value)) {
  436.    
  437.         var contact = hit.point;
  438.         var rotation = Quaternion.FromToRotation(Vector3.up, hit.normal);
  439.        
  440.         if (hit.rigidbody){
  441.             hit.rigidbody.AddForceAtPosition(force * direction, hit.point);
  442.         }
  443.  
  444.         if (hit.transform.tag == "Untagged") {
  445.             var default1 = Instantiate (untagged, contact, rotation) as GameObject;
  446.             hit.collider.SendMessageUpwards("ApplyDamage", damage, SendMessageOptions.DontRequireReceiver);
  447.             default1.transform.parent = hit.transform;
  448.         }
  449.        
  450.         if (hit.transform.tag == "Concrete") {
  451.             var bulletHole = Instantiate (Concrete, contact, rotation) as GameObject;
  452.             hit.collider.SendMessageUpwards("ApplyDamage", damage, SendMessageOptions.DontRequireReceiver);
  453.             bulletHole.transform.parent = hit.transform;
  454.         }  
  455.        
  456.         if (hit.transform.tag == "Wood") {
  457.             var woodHole = Instantiate (Wood, contact, rotation) as GameObject;
  458.             hit.collider.SendMessageUpwards("ApplyDamage", damage, SendMessageOptions.DontRequireReceiver);
  459.             woodHole.transform.parent = hit.transform;
  460.         }
  461.        
  462.         if (hit.transform.tag == "Metal") {
  463.             var metalHole = Instantiate (Metal, contact, rotation) as GameObject;
  464.             hit.collider.SendMessageUpwards("ApplyDamage", damage, SendMessageOptions.DontRequireReceiver);
  465.             metalHole.transform.parent = hit.transform;
  466.         }
  467.        
  468.        
  469.         if (hit.transform.tag == "Dirt") {
  470.             var dirtHole = Instantiate (Dirt, contact, rotation) as GameObject;
  471.             hit.collider.SendMessageUpwards("ApplyDamage", damage, SendMessageOptions.DontRequireReceiver);
  472.             dirtHole.transform.parent = hit.transform;
  473.         }
  474.        
  475.         if (hit.transform.tag == "canBeUsed") {
  476.             hit.collider.SendMessageUpwards("ApplyDamage", damage, SendMessageOptions.DontRequireReceiver);
  477.         }  
  478.        
  479.         if (hit.transform.tag == "Enemy") {
  480.             hit.collider.SendMessageUpwards("ApplyDamage", damage, SendMessageOptions.DontRequireReceiver);
  481.            
  482.             yield WaitForSeconds(0.01);
  483.             var bloodHole = Instantiate (Blood, contact, rotation) as GameObject;
  484.             if(Physics.Raycast (position, direction, hit, range, layerMask.value)){
  485.                 if(hit.rigidbody){
  486.                     hit.rigidbody.AddForceAtPosition(force * direction, hit.point);
  487.                 }
  488.             }  
  489.         }
  490.     }
  491.    
  492.     PlayAudioClip(soundFire, transform.position, 0.7);
  493.     m_LastFrameShot = Time.frameCount;
  494.  
  495.     weaponAnim.animation.Rewind("Fire");
  496.     weaponAnim.animation.Play("Fire");
  497.     KickBack();
  498.     bulletsLeft--;
  499. }
  500.  
  501. function PlayAudioClip (clip : AudioClip, position : Vector3, volume : float) {
  502.     var go = new GameObject ("One shot audio");
  503.     go.transform.position = position;
  504.     var source : AudioSource = go.AddComponent (AudioSource);
  505.     source.clip = clip;
  506.     source.volume = volume;
  507.     source.pitch = Random.Range(0.95,1.05);
  508.     source.Play ();
  509.     Destroy (go, clip.length);
  510.     return source;
  511. }
  512.  
  513. function fireProjectile (){
  514.     if (projectiles < 1 || draw || launcjerReload){
  515.         return;
  516.     }
  517.    
  518.     var instantiatedProjectile : Rigidbody = Instantiate (projectilePrefab, launchPosition.transform.position, launchPosition.transform.rotation);
  519.     fireLauncherAnimGO.animation.Play("FireGL");
  520.     instantiatedProjectile.velocity = transform.TransformDirection(Vector3 (0, 0, projectileSpeed));
  521.     Physics.IgnoreCollision(instantiatedProjectile.collider, gameObject.FindWithTag("Player").transform.root.collider);
  522.     projectiles--;
  523.    
  524.     if(canReloadLauncher)
  525.     ReloadLauncher();
  526. }
  527.  
  528. function OutOfAmmo(){
  529.     if(reloading || playing)
  530.     return;
  531.    
  532.     playing = true;
  533.     PlayAudioClip(soundEmpty, transform.position, 0.7);
  534.    
  535.     weaponAnim.animation["Fire"].speed = 2.0;
  536.     weaponAnim.animation.Rewind("Fire");
  537.     weaponAnim.animation.Play("Fire");
  538.     yield WaitForSeconds(0.2);
  539.     playing = false;
  540. }
  541. //For RPG
  542. function ReloadLauncher(){
  543.     if(projectiles > 0){
  544.         launcjerReload = true;
  545.         canSwicthMode = false;
  546.         DisableProjectileRenderer();       
  547.         yield WaitForSeconds(0.5);
  548.         audio.PlayOneShot(soundReloadLauncher);
  549.         weaponAnim.animation[reloadlauncher].speed = 1.2;
  550.         weaponAnim.animation.Play(reloadlauncher);
  551.         yield WaitForSeconds(launcherReloadTime);  
  552.         canSwicthMode = true;
  553.         launcjerReload = false;
  554.     }else{
  555.         if(rocket != null && projectiles == 0){
  556.             rocket.renderer.enabled = false;
  557.         }
  558.     }  
  559.    
  560. }
  561.  
  562. function DisableProjectileRenderer(){
  563.     if(rocket != null){
  564.         rocket.renderer.enabled = false;
  565.     }
  566.     yield WaitForSeconds(launcherReloadTime/1.5);
  567.     if(rocket != null){
  568.         rocket.renderer.enabled = true;
  569.     }
  570. }
  571.  
  572. function EnableProjectileRenderer(){
  573.     if(rocket != null){
  574.         rocket.renderer.enabled = true;
  575.     }
  576. }
  577.  
  578. function Reload (){
  579.     if(reloading)
  580.     return;
  581.    
  582.     if(ammoMode == Ammo.Magazines){
  583.         reloading = true;
  584.         canSwicthMode = false;
  585.         if (magazines > 0 && bulletsLeft != bulletsPerMag) {
  586.             weaponAnim.animation["Reload"].speed = reloadAnimSpeed;
  587.             weaponAnim.animation.Play("Reload", PlayMode.StopAll);
  588.             weaponAnim.animation.CrossFade("Reload");
  589.             audio.PlayOneShot(soundReload);
  590.             yield WaitForSeconds(reloadTime);
  591.             magazines --;
  592.             bulletsLeft = bulletsPerMag;
  593.         }
  594.         reloading = false;
  595.         canSwicthMode = true;
  596.         isFiring = false;
  597.     }  
  598.    
  599.     if(ammoMode == Ammo.Bullets){
  600.         if(magazines > 0 && bulletsLeft != bulletsPerMag){
  601.             if(magazines > bulletsPerMag){
  602.                 canSwicthMode = false;
  603.                 reloading = true;
  604.                 weaponAnim.animation["Reload"].speed = reloadAnimSpeed;
  605.                 weaponAnim.animation.Play("Reload", PlayMode.StopAll);
  606.                 weaponAnim.animation.CrossFade("Reload");
  607.                 audio.PlayOneShot(soundReload);
  608.                 yield WaitForSeconds(reloadTime);
  609.                 magazines -= bulletsPerMag - bulletsLeft;
  610.                 bulletsLeft = bulletsPerMag;
  611.                 canSwicthMode = true;
  612.                 reloading = false;
  613.                 return;
  614.             }else{
  615.                 canSwicthMode = false;
  616.                 reloading = true;
  617.                 weaponAnim.animation["Reload"].speed = reloadAnimSpeed;
  618.                 weaponAnim.animation.Play("Reload", PlayMode.StopAll);
  619.                 weaponAnim.animation.CrossFade("Reload");
  620.                 audio.PlayOneShot(soundReload);
  621.                 yield WaitForSeconds(reloadTime);
  622.                 var bullet = Mathf.Clamp(bulletsPerMag, magazines, bulletsLeft + magazines);
  623.                 magazines -= (bullet - bulletsLeft);
  624.                 bulletsLeft = bullet;
  625.                 canSwicthMode = true;
  626.                 reloading = false;
  627.                 return;
  628.             }  
  629.         }  
  630.     }
  631. }
  632.  
  633. function KickBack() {
  634.     kickGO.localRotation = Quaternion.Euler(kickGO.localRotation.eulerAngles - Vector3(kickUpside, Random.Range(-kickSideways, kickSideways), 0));  
  635. }
  636.  
  637. function DrawWeapon(){
  638.     draw = true;
  639.     canSwicthMode = false;
  640.     audio.clip = soundDraw;
  641.     audio.Play();
  642.     weaponAnim.animation.Play("Draw", PlayMode.StopAll);
  643.     weaponAnim.animation.CrossFade("Draw");
  644.     yield WaitForSeconds(drawTime);
  645.     draw = false;
  646.     reloading = false;
  647.     canSwicthMode = true;
  648.     selected = true;
  649.    
  650. }
  651.  
  652. function Deselect(){
  653.     selected = false;
  654.     mainCamera.camera.fieldOfView = 60;
  655.     weaponCamera.camera.fieldOfView = 50;
  656.     transform.localPosition = hipPosition;
  657. }
Advertisement
Add Comment
Please, Sign In to add comment