main camera
#pragma strict
#pragma implicit
#pragma ;downcast;
enum FireType
{
RAYCAST,
PHYSIC_PROJECTILE,
}
enum FireMode
{
SEMI_AUTO,
FULL_AUTO,
BURST
}
class Gun extends MonoBehaviour
{
public var gunName : String;
public var bulletMark : GameObject;
public var projectilePrefab : GameObject;
public var weaponTransformReference; : Transform;
public var hitLayer : LayerMask;
public var woodParticle : GameObject;
public var metalParticle : GameObject;
public var concreteParticle : GameObject;
public var sandParticle : GameObject;
public var waterParticle : GameObject;
//How many shots the gun can take in one second
public var fireRate : float;
public var useGravity : boolean;
private var fireType : FireType;
public var fireMode : FireMode;
//Number of shoots to fire when on burst mode
public var burstRate : int;
//Range of fire in meters
public var fireRange : float;
//Speed of the projectile in m/s
public var projectileSpeed : float;
public var clipSize : int;
public var totalClips : int;
//Time to reload the weapon in seconds
public var reloadTime : float;
public var autoReload : boolean;
public var currentRounds : int;
public var shootVolume : float = 0.4;
public var shootSound : AudioClip;
private var shootSoundSource : AudioSource;
public var reloadSound : AudioClip;
private var reloadSoundSource : AudioSource;
public var outOfAmmoSound : AudioClip;
private var outOfAmmoSoundSource : AudioSource;
private var reloadTimer : float;
@HideInInspector
public var freeToShoot : boolean;
@HideInInspector
public var reloading : boolean;
private var lastShootTime : float;
private var shootDelay : float;
private var cBurst : int;
@HideInInspector
public var fire : boolean;
public var hitParticles : GameObject;
public var shotingEmitter : GunParticles;
private var shottingParticles : Transform;
public var capsuleEmitter : ParticleEmitter[];
public var shotLight : ShotLight;
public var unlimited : boolean = true;
private var timerToCreateDecal : float;
public var pushPower : float = 3.0;
public var main camera : main camera;
private var cam : Camera;
function OnDisable()
{
if(shotingEmitter != null)
{
shotingEmitter.ChangeState(false);
}
if(capsuleEmitter != null)
{
for(var i : int = 0; i < capsuleEmitter.Length; i++)
{
if (capsuleEmitter *!= null)*
_capsuleEmitter*.emit = false;*_
_*}*_
_*}*_
_*if(shotLight != null)*_
_*{*_
_*shotLight.enabled = false;*_
_*}*_
_*}*_
_*function OnEnable()*_
_*{*_
_*cam = main camera.camera;*_
_*reloadTimer = 0.0;*_
_*reloading = false;*_
_*freeToShoot = true;*_
_*shootDelay = 1.0 / fireRate;*_
_*cBurst = burstRate;*_
_*totalClips--;*_
_*currentRounds = clipSize;*_
_*if(projectilePrefab != null)*_
_*{*_
<em>*fireType = FireType.PHYSIC_PROJECTILE;*</em>
_*}*_
_*if(shotLight != null)*_
_*{*_
_*shotLight.enabled = false;*_
_*}*_
_*shottingParticles = null;*_
_*if(shotingEmitter != null)*_
_*{*_
_*for(var i : int = 0; i < shotingEmitter.transform.childCount; i++)*_
_*{*_
<em>*if(shotingEmitter.transform.GetChild(i).name == "bullet_trace")*</em>
_*{*_
_*shottingParticles = shotingEmitter.transform.GetChild(i);*_
_*break;*_
_*}*_
_*}*_
_*}*_
_*}*_
_*function ShotTheTarget()*_
_*{*_
_*if(fire && !reloading)*_
_*{*_
_*if(currentRounds > 0)*_
_*{*_
_*if(Time.time > lastShootTime && freeToShoot && cBurst > 0)*_
_*{*_
_*lastShootTime = Time.time + shootDelay;*_
_*switch(fireMode)*_
_*{*_
<em>*case FireMode.SEMI_AUTO:*</em>
_*freeToShoot = false;*_
_*break;*_
_*case FireMode.BURST:*_
_*cBurst--;*_
_*break;*_
_*}*_
_*if(capsuleEmitter != null)*_
_*{*_
_*for(var i : int = 0; i < capsuleEmitter.Length; i++)*_
_*{*_
<em>_capsuleEmitter*.Emit();*_</em>
<em>_*}*_</em>
<em>_*}*_</em>
<em>_*PlayShootSound();*_</em>
<em>_*if(shotingEmitter != null)*_</em>
<em>_*{*_</em>
<em>_*shotingEmitter.ChangeState(true);*_</em>
<em>_*}*_</em>
<em>_*if(shotLight != null)*_</em>
<em>_*{*_</em>
<em>_*shotLight.enabled = true;*_</em>
<em>_*}*_</em>
<em>_*switch(fireType)*_</em>
<em>_*{*_</em>
<em>_*case FireType.RAYCAST:*_</em>
<em>_*TrainingStatistics.shootsFired++;*_</em>
<em>_*CheckRaycastHit();*_</em>
<em>_*break;*_</em>
<em><em>*case FireType.PHYSIC_PROJECTILE:*</em></em>
<em>_*TrainingStatistics.grenadeFired++;*_</em>
<em>_*LaunchProjectile();*_</em>
<em>_*break;*_</em>
<em>_*}*_</em>
<em>_*currentRounds--;*_</em>
<em>_*if(currentRounds <= 0)*_</em>
<em>_*{*_</em>
<em>_*Reload();*_</em>
<em>_*}*_</em>
<em>_*}*_</em>
<em>_*}*_</em>
<em>_*else if(autoReload && freeToShoot)*_</em>
<em>_*{*_</em>
<em>_*if(shotingEmitter != null)*_</em>
<em>_*{*_</em>
<em>_*shotingEmitter.ChangeState(false);*_</em>
<em>_*}*_</em>
<em>_*if(shotLight != null)*_</em>
<em>_*{*_</em>
<em>_*shotLight.enabled = false;*_</em>
<em>_*}*_</em>
<em>_*if(!reloading)*_</em>
<em>_*{*_</em>
<em>_*Reload();*_</em>
<em>_*}*_</em>
<em>_*}*_</em>
<em>_*}*_</em>
<em>_*else*_</em>
<em>_*{*_</em>
<em>_*if(shotingEmitter != null)*_</em>
<em>_*{*_</em>
<em>_*shotingEmitter.ChangeState(false);*_</em>
<em>_*}*_</em>
<em>_*if(shotLight != null)*_</em>
<em>_*{*_</em>
<em>_*shotLight.enabled = false;*_</em>
<em>_*}*_</em>
<em>_*}*_</em>
<em>_*}*_</em>
<em>_*function LaunchProjectile()*_</em>
<em>_*{*_</em>
<em>_*//Get the launch position (weapon related)*_</em>
<em><em>_var camRay : Ray = cam.ScreenPointToRay(new Vector3(Screen.width * 0.5, Screen.height * 0.6, 0));_</em></em>
<em>_*var startPosition : Vector3;*_</em>
<em>_*if(weaponTransformReference != null)*_</em>
<em>_*{*_</em>
<em>_*startPosition = weaponTransformReference.position;*_</em>
<em>_*}*_</em>
<em>_*else*_</em>
<em>_*{*_</em>
<em><em>_startPosition = cam.ScreenToWorldPoint(new Vector3 (Screen.width * 0.5, Screen.height * 0.5, 0.5));_</em></em>
<em>_*}*_</em>
<em>_*var projectile : GameObject = GameObject.Instantiate(projectilePrefab, startPosition, Quaternion.identity);*_</em>
<em>_*var grenadeObj : Grenade = projectile.GetComponent("Grenade") as Grenade;*_</em>
<em>_*grenadeObj.main camera = main camera;*_</em>
<em>_*projectile.transform.rotation = Quaternion.LookRotation(camRay.direction);*_</em>
<em>_*var projectileRigidbody : Rigidbody = projectile.rigidbody;*_</em>
<em>_*if(projectile.rigidbody == null)*_</em>
<em>_*{*_</em>
<em>_*projectileRigidbody = projectile.AddComponent("Rigidbody");*_</em>
<em>_*}*_</em>
<em>_*projectileRigidbody.useGravity = useGravity;*_</em>
<em>_*var hit : RaycastHit;*_</em>
<em><em>_var camRay2 : Ray = cam.ScreenPointToRay(new Vector3(Screen.width * 0.5, Screen.height * 0.55, 0));_</em></em>
<em>_*if(Physics.Raycast(camRay2.origin, camRay2.direction, hit, fireRange, hitLayer))*_</em>
<em>_*{*_</em>
<em><em>_projectileRigidbody.velocity = (hit.point - weaponTransformReference.position).normalized * projectileSpeed;_</em></em>
<em>_*}*_</em>
<em>_*else*_</em>
<em>_*{*_</em>
<em><em>_projectileRigidbody.velocity = (cam.ScreenToWorldPoint(new Vector3(Screen.width * 0.5, Screen.height * 0.55, 40)) - weaponTransformReference.position).normalized * projectileSpeed;_</em></em>
<em>_*}*_</em>
<em>_*}*_</em>
<em>_*function CheckRaycastHit()*_</em>
<em>_*{*_</em>
<em>_*var hit : RaycastHit;*_</em>
<em>_*var glassHit : RaycastHit;*_</em>
<em>_*var camRay : Ray;*_</em>
<em>_*var origin : Vector3;*_</em>
<em>_*var glassOrigin : Vector3;*_</em>
<em>_*var dir : Vector3;*_</em>
<em>_*var glassDir : Vector3;*_</em>
<em>_*if(weaponTransformReference == null)*_</em>
<em>_*{*_</em>
<em><em>_camRay = cam.ScreenPointToRay(new Vector3(Screen.width * 0.5, Screen.height * 0.5, 0));_</em></em>
<em>_*origin = camRay.origin;*_</em>
<em>_*dir = camRay.direction;*_</em>
<em><em>_origin += dir * 0.1;_</em></em>
<em>_*}*_</em>
<em>_*else*_</em>
<em>_*{*_</em>
<em><em>_camRay = cam.ScreenPointToRay(new Vector3(Screen.width * 0.5, Screen.height * 0.5, 0));_</em></em>
<em><em>_origin = weaponTransformReference.position + (weaponTransformReference.right * 0.2);_</em></em>
<em><em>_if(Physics.Raycast(camRay.origin + camRay.direction * 0.1, camRay.direction, hit, fireRange, hitLayer))_</em></em>
<em>_*{*_</em>
<em>_*dir = (hit.point - origin).normalized;*_</em>
<em>_*if(hit.collider.tag == "glass")*_</em>
<em>_*{*_</em>
<em><em>_glassOrigin = hit.point + dir * 0.05;_</em></em>
<em>_*if(Physics.Raycast(glassOrigin, camRay.direction, glassHit, fireRange - hit.distance, hitLayer))*_</em>
<em>_*{*_</em>
<em>_*glassDir = glassHit.point - glassOrigin;*_</em>
<em>_*}*_</em>
<em>_*}*_</em>
<em>_*}*_</em>
<em>_*else*_</em>
<em>_*{*_</em>
<em>_*dir = weaponTransformReference.forward;*_</em>
<em>_*}*_</em>
<em>_*}*_</em>
<em>_*if(shottingParticles != null)*_</em>
<em>_*{*_</em>
<em><em>_shottingParticles.rotation = Quaternion.FromToRotation(Vector3.forward, (cam.ScreenToWorldPoint(new Vector3(Screen.width * 0.5, Screen.height * 0.5, cam.farClipPlane)) - weaponTransformReference.position).normalized);_</em></em>
<em>_*}*_</em>
<em>_*if(Physics.Raycast(origin, dir, hit, fireRange, hitLayer))*_</em>
<em>_*{*_</em>
<em>_*hit.collider.gameObject.SendMessage("Hit", hit, SendMessageOptions.DontRequireReceiver);*_</em>
<em>_*GenerateGraphicStuff(hit);*_</em>
<em>_*if(hit.collider.tag == "glass")*_</em>
<em>_*{*_</em>
<em>_*if(Physics.Raycast(glassOrigin, glassDir, glassHit, fireRange - hit.distance, hitLayer))*_</em>
<em>_*{*_</em>
<em>_*glassHit.collider.gameObject.SendMessage("Hit", glassHit, SendMessageOptions.DontRequireReceiver);*_</em>
<em>_*GenerateGraphicStuff(glassHit);*_</em>
<em>_*}*_</em>
<em>_*}*_</em>
<em>_*}*_</em>
<em>_*}*_</em>
<em>_*function GenerateGraphicStuff(hit : RaycastHit)*_</em>
<em>_*{*_</em>
<em>_*var hitType : HitType;*_</em>
<em>_*var body : Rigidbody = hit.collider.rigidbody;*_</em>
<em>_*if(body == null)*_</em>
<em>_*{*_</em>
<em>_*if(hit.collider.transform.parent != null)*_</em>
<em>_*{*_</em>
<em>_*body = hit.collider.transform.parent.rigidbody;*_</em>
<em>_*}*_</em>
<em>_*}*_</em>
<em>_*if(body != null)*_</em>
<em>_*{*_</em>
<em>_*if(body.gameObject.layer != 10 && !body.gameObject.name.ToLower().Contains("door"))*_</em>
<em>_*{*_</em>
<em>_*body.isKinematic = false;*_</em>
<em>_*}*_</em>
<em>_*if(!body.isKinematic)*_</em>
<em>_*{*_</em>
<em>_*var direction : Vector3 = hit.collider.transform.position - weaponTransformReference.position;*_</em>
<em><em>_body.AddForceAtPosition(direction.normalized * pushPower, hit.point, ForceMode.Impulse);_</em></em>
<em>_*}*_</em>
<em>_*}*_</em>
<em>_*var go : GameObject;*_</em>
<em>_*var delta : float = -0.02;*_</em>
<em>_*var hitUpDir : Vector3 = hit.normal;*_</em>
<em><em>_var hitPoint : Vector3 = hit.point + hit.normal * delta;_</em></em>
<em>_*switch(hit.collider.tag)*_</em>
<em>_*{*_</em>
<em>_*case "wood":*_</em>
<em>_*hitType = HitType.WOOD;*_</em>
<em>_*go = GameObject.Instantiate(woodParticle, hitPoint, Quaternion.FromToRotation(Vector3.up, hitUpDir)) as GameObject;*_</em>
<em>_*break;*_</em>
<em>_*case "metal":*_</em>
<em>_*hitType = HitType.METAL;*_</em>
<em>_*go = GameObject.Instantiate(metalParticle, hitPoint, Quaternion.FromToRotation(Vector3.up, hitUpDir)) as GameObject;*_</em>
<em>_*break;*_</em>
<em>_*case "car":*_</em>
<em>_*hitType = HitType.METAL;*_</em>
<em>_*go = GameObject.Instantiate(metalParticle, hitPoint, Quaternion.FromToRotation(Vector3.up, hitUpDir)) as GameObject;*_</em>
<em>_*break;*_</em>
<em>_*case "concrete":*_</em>
<em>_*hitType = HitType.CONCRETE;*_</em>
<em>_*go = GameObject.Instantiate(concreteParticle, hitPoint, Quaternion.FromToRotation(Vector3.up, hitUpDir)) as GameObject;*_</em>
<em>_*break;*_</em>
<em>_*case "dirt":*_</em>
<em>_*hitType = HitType.CONCRETE;*_</em>
<em>_*go = GameObject.Instantiate(sandParticle, hitPoint, Quaternion.FromToRotation(Vector3.up, hitUpDir)) as GameObject;*_</em>
<em>_*break;*_</em>
<em>_*case "sand":*_</em>
<em>_*hitType = HitType.CONCRETE;*_</em>
<em>_*go = GameObject.Instantiate(sandParticle, hitPoint, Quaternion.FromToRotation(Vector3.up, hitUpDir)) as GameObject;*_</em>
<em>_*break;*_</em>
<em>_*case "water":*_</em>
<em>_*go = GameObject.Instantiate(waterParticle, hitPoint, Quaternion.FromToRotation(Vector3.up, hitUpDir)) as GameObject;*_</em>
<em>_*break;*_</em>
<em>_*default:*_</em>
<em>_*return;*_</em>
<em>_*}*_</em>
<em>_*go.layer = hit.collider.gameObject.layer;*_</em>
<em>_*if(hit.collider.renderer == null) return;*_</em>
<em>_*if(timerToCreateDecal < 0.0 && hit.collider.tag != "water")*_</em>
<em>_*{*_</em>
<em>_*go = GameObject.Instantiate(bulletMark, hit.point, Quaternion.FromToRotation(Vector3.forward, -hit.normal));*_</em>
<em>_*var bm : BulletMarks = go.GetComponent("BulletMarks");*_</em>
<em>_*bm.GenerateDecal(hitType, hit.collider.gameObject);*_</em>
<em>_*timerToCreateDecal = 0.02;*_</em>
<em>_*}*_</em>
<em>_*}*_</em>
<em>_*function Update()*_</em>
<em>_*{*_</em>
<em>_*timerToCreateDecal -= Time.deltaTime;*_</em>
<em>_*if(Input.GetButtonDown("Fire1") && currentRounds == 0 && !reloading && freeToShoot)*_</em>
<em>_*{*_</em>
<em>_*PlayOutOfAmmoSound();*_</em>
<em>_*}*_</em>
<em>_*if(Input.GetButtonUp("Fire1"))*_</em>
<em>_*{*_</em>
<em>_*freeToShoot = true;*_</em>
<em>_*cBurst = burstRate;*_</em>
<em>_*}*_</em>
<em>_*HandleReloading();*_</em>
<em>_*ShotTheTarget();*_</em>
<em>_*}*_</em>
<em>_*function HandleReloading()*_</em>
<em>_*{*_</em>
<em>_*if(Input.GetKeyDown(KeyCode.R) && !reloading)*_</em>
<em>_*{*_</em>
<em>_*Reload();*_</em>
<em>_*}*_</em>
<em>_*if(reloading)*_</em>
<em>_*{*_</em>
<em>_*reloadTimer -= Time.deltaTime;*_</em>
<em>_*if(reloadTimer <= 0.0)*_</em>
<em>_*{*_</em>
<em>_*reloading = false;*_</em>
<em>_*if(!unlimited)*_</em>
<em>_*{*_</em>
<em>_*totalClips--;*_</em>
<em>_*}*_</em>
<em>_*currentRounds = clipSize;*_</em>
<em>_*}*_</em>
<em>_*}*_</em>
<em>_*}*_</em>
<em>_*function Reload()*_</em>
<em>_*{*_</em>
<em>_*if(totalClips > 0 && currentRounds < clipSize)*_</em>
<em>_*{*_</em>
<em>_*PlayReloadSound();*_</em>
<em>_*reloading = true;*_</em>
<em>_*reloadTimer = reloadTime;*_</em>
<em>_*}*_</em>
<em>_*}*_</em>
<em>_*//---------------AUDIO METHODS--------*_</em>
<em>_*function PlayOutOfAmmoSound()*_</em>
<em>_*{*_</em>
<em>_*audio.PlayOneShot(outOfAmmoSound, 1.5);*_</em>
<em>_*}*_</em>
<em>_*function PlayReloadSound()*_</em>
<em>_*{*_</em>
<em>_*audio.PlayOneShot(reloadSound, 1.5);*_</em>
<em>_*}*_</em>
<em>_*function PlayShootSound()*_</em>
<em>_*{*_</em>
<em>_*audio.PlayOneShot(shootSound);*_</em>
<em>_*}*_</em>
<em>_*EOF;*_</em>
<em>_*```*_</em>
<em>_*<p>this is the gun scrip from bootcamp that i am trying to implement but i get a list of problems with it that don't make any sense could someone please help?</p>*_</em>
<em>_*<p>here are the problems</p>*_</em>
<em>_*```*_</em>
<em>_*Assets/Soldier/Gun.js(1,6):BCEoo43: Unexpected token: camera.*_</em>
<em>_*Assets/Soldier/Gun.js(1,20):BCEoo43: Unexpected token: strict*_</em>
<em>_*Assets/Soldier/Gun.js(2,9): BCE0043: unexpected token:implicit.*_</em>
<em>_*Assets/Soldier/Gun.js(24,44): UCE0001:';' expected. insert a semicolon at the end*_</em>
<em>_*Assets/Soldier/Gun.js(24,44): BCE0044: expecting }, found ';'.*_</em>
<em>_*Assets/Soldier/Gun.js(95,24): UCE0001: ';' expected. insert semicolon at the end*_</em>
<em>_*Assets/Soldier/Gun.js(95,25): BCE0044: expecting EOF, found 'camera'.*_</em>
<em>_*```*_</em>
<em>_*<p>any help with this would be appreciated as i need this code done in just ove two weeks and still have lots of work to do with the game. thanx</p>*_</em>
Looks to me you have some minor errors...
Fixed it a little:
#pragma strict
#pragma implicit
#pragma downcast
enum FireType
{
RAYCAST,
PHYSIC_PROJECTILE,
}
enum FireMode
{
SEMI_AUTO,
FULL_AUTO,
BURST
}
class Gun extends MonoBehaviour
{
public var gunName : String;
public var bulletMark : GameObject;
public var projectilePrefab : GameObject;
public var weaponTransformReference : Transform;
public var hitLayer : LayerMask;
public var woodParticle : GameObject;
public var metalParticle : GameObject;
public var concreteParticle : GameObject;
public var sandParticle : GameObject;
public var waterParticle : GameObject;
//How many shots the gun can take in one second
public var fireRate : float;
public var useGravity : boolean;
private var fireType : FireType;
public var fireMode : FireMode;
//Number of shoots to fire when on burst mode
public var burstRate : int;
//Range of fire in meters
public var fireRange : float;
//Speed of the projectile in m/s
public var projectileSpeed : float;
public var clipSize : int;
public var totalClips : int;
//Time to reload the weapon in seconds
public var reloadTime : float;
public var autoReload : boolean;
public var currentRounds : int;
public var shootVolume : float = 0.4;
public var shootSound : AudioClip;
private var shootSoundSource : AudioSource;
public var reloadSound : AudioClip;
private var reloadSoundSource : AudioSource;
public var outOfAmmoSound : AudioClip;
private var outOfAmmoSoundSource : AudioSource;
private var reloadTimer : float;
@HideInInspector
public var freeToShoot : boolean;
@HideInInspector
public var reloading : boolean;
private var lastShootTime : float;
private var shootDelay : float;
private var cBurst : int;
@HideInInspector
public var fire : boolean;
public var hitParticles : GameObject;
public var shotingEmitter : GunParticles;
private var shottingParticles : Transform;
public var capsuleEmitter : ParticleEmitter[];
public var shotLight : ShotLight;
public var unlimited : boolean = true;
private var timerToCreateDecal : float;
public var pushPower : float = 3.0;
public var maincamera : camera;
private var cam : Camera;
function OnDisable()
{
if(shotingEmitter != null)
{
shotingEmitter.ChangeState(false);
}
if(capsuleEmitter != null)
{
for(var i : int = 0; i < capsuleEmitter.Length; i++)
{
if (capsuleEmitter *!= null)*
_capsuleEmitter*.emit = false;*_
_*}*_
_*}*_
_*if(shotLight != null)*_
_*{*_
_*shotLight.enabled = false;*_
_*}*_
_*}*_
_*function OnEnable()*_
_*{*_
_*cam = camera.camera;*_
_*reloadTimer = 0.0;*_
_*reloading = false;*_
_*freeToShoot = true;*_
_*shootDelay = 1.0 / fireRate;*_
_*cBurst = burstRate;*_
_*totalClips--;*_
_*currentRounds = clipSize;*_
_*if(projectilePrefab != null)*_
_*{*_
<em>*fireType = FireType.PHYSIC_PROJECTILE;*</em>
_*}*_
_*if(shotLight != null)*_
_*{*_
_*shotLight.enabled = false;*_
_*}*_
_*shottingParticles = null;*_
_*if(shotingEmitter != null)*_
_*{*_
_*for(var i : int = 0; i < shotingEmitter.transform.childCount; i++)*_
_*{*_
<em>*if(shotingEmitter.transform.GetChild(i).name == "bullet_trace")*</em>
_*{*_
_*shottingParticles = shotingEmitter.transform.GetChild(i);*_
_*break;*_
_*}*_
_*}*_
_*}*_
_*}*_
_*function ShotTheTarget()*_
_*{*_
_*if(fire && !reloading)*_
_*{*_
_*if(currentRounds > 0)*_
_*{*_
_*if(Time.time > lastShootTime && freeToShoot && cBurst > 0)*_
_*{*_
_*lastShootTime = Time.time + shootDelay;*_
_*switch(fireMode)*_
_*{*_
<em>*case FireMode.SEMI_AUTO:*</em>
_*freeToShoot = false;*_
_*break;*_
_*case FireMode.BURST:*_
_*cBurst--;*_
_*break;*_
_*}*_
_*if(capsuleEmitter != null)*_
_*{*_
_*for(var i : int = 0; i < capsuleEmitter.Length; i++)*_
_*{*_
<em>_capsuleEmitter*.Emit();*_</em>
<em>_*}*_</em>
<em>_*}*_</em>
<em>_*PlayShootSound();*_</em>
<em>_*if(shotingEmitter != null)*_</em>
<em>_*{*_</em>
<em>_*shotingEmitter.ChangeState(true);*_</em>
<em>_*}*_</em>
<em>_*if(shotLight != null)*_</em>
<em>_*{*_</em>
<em>_*shotLight.enabled = true;*_</em>
<em>_*}*_</em>
<em>_*switch(fireType)*_</em>
<em>_*{*_</em>
<em>_*case FireType.RAYCAST:*_</em>
<em>_*TrainingStatistics.shootsFired++;*_</em>
<em>_*CheckRaycastHit();*_</em>
<em>_*break;*_</em>
<em><em>*case FireType.PHYSIC_PROJECTILE:*</em></em>
<em>_*TrainingStatistics.grenadeFired++;*_</em>
<em>_*LaunchProjectile();*_</em>
<em>_*break;*_</em>
<em>_*}*_</em>
<em>_*currentRounds--;*_</em>
<em>_*if(currentRounds <= 0)*_</em>
<em>_*{*_</em>
<em>_*Reload();*_</em>
<em>_*}*_</em>
<em>_*}*_</em>
<em>_*}*_</em>
<em>_*else if(autoReload && freeToShoot)*_</em>
<em>_*{*_</em>
<em>_*if(shotingEmitter != null)*_</em>
<em>_*{*_</em>
<em>_*shotingEmitter.ChangeState(false);*_</em>
<em>_*}*_</em>
<em>_*if(shotLight != null)*_</em>
<em>_*{*_</em>
<em>_*shotLight.enabled = false;*_</em>
<em>_*}*_</em>
<em>_*if(!reloading)*_</em>
<em>_*{*_</em>
<em>_*Reload();*_</em>
<em>_*}*_</em>
<em>_*}*_</em>
<em>_*}*_</em>
<em>_*else*_</em>
<em>_*{*_</em>
<em>_*if(shotingEmitter != null)*_</em>
<em>_*{*_</em>
<em>_*shotingEmitter.ChangeState(false);*_</em>
<em>_*}*_</em>
<em>_*if(shotLight != null)*_</em>
<em>_*{*_</em>
<em>_*shotLight.enabled = false;*_</em>
<em>_*}*_</em>
<em>_*}*_</em>
<em>_*}*_</em>
<em>_*function LaunchProjectile()*_</em>
<em>_*{*_</em>
<em>_*//Get the launch position (weapon related)*_</em>
<em><em>_var camRay : Ray = cam.ScreenPointToRay(new Vector3(Screen.width * 0.5, Screen.height * 0.6, 0));_</em></em>
<em>_*var startPosition : Vector3;*_</em>
<em>_*if(weaponTransformReference != null)*_</em>
<em>_*{*_</em>
<em>_*startPosition = weaponTransformReference.position;*_</em>
<em>_*}*_</em>
<em>_*else*_</em>
<em>_*{*_</em>
<em><em>_startPosition = cam.ScreenToWorldPoint(new Vector3 (Screen.width * 0.5, Screen.height * 0.5, 0.5));_</em></em>
<em>_*}*_</em>
<em>_*var projectile : GameObject = GameObject.Instantiate(projectilePrefab, startPosition, Quaternion.identity);*_</em>
<em>_*var grenadeObj : Grenade = projectile.GetComponent("Grenade") as Grenade;*_</em>
<em>_*grenadeObj.camera = camera;*_</em>
<em>_*projectile.transform.rotation = Quaternion.LookRotation(camRay.direction);*_</em>
<em>_*var projectileRigidbody : Rigidbody = projectile.rigidbody;*_</em>
<em>_*if(projectile.rigidbody == null)*_</em>
<em>_*{*_</em>
<em>_*projectileRigidbody = projectile.AddComponent("Rigidbody");*_</em>
<em>_*}*_</em>
<em>_*projectileRigidbody.useGravity = useGravity;*_</em>
<em>_*var hit : RaycastHit;*_</em>
<em><em>_var camRay2 : Ray = cam.ScreenPointToRay(new Vector3(Screen.width * 0.5, Screen.height * 0.55, 0));_</em></em>
<em>_*if(Physics.Raycast(camRay2.origin, camRay2.direction, hit, fireRange, hitLayer))*_</em>
<em>_*{*_</em>
<em><em>_projectileRigidbody.velocity = (hit.point - weaponTransformReference.position).normalized * projectileSpeed;_</em></em>
<em>_*}*_</em>
<em>_*else*_</em>
<em>_*{*_</em>
<em><em>_projectileRigidbody.velocity = (cam.ScreenToWorldPoint(new Vector3(Screen.width * 0.5, Screen.height * 0.55, 40)) - weaponTransformReference.position).normalized * projectileSpeed;_</em></em>
<em>_*}*_</em>
<em>_*}*_</em>
<em>_*function CheckRaycastHit()*_</em>
<em>_*{*_</em>
<em>_*var hit : RaycastHit;*_</em>
<em>_*var glassHit : RaycastHit;*_</em>
<em>_*var camRay : Ray;*_</em>
<em>_*var origin : Vector3;*_</em>
<em>_*var glassOrigin : Vector3;*_</em>
<em>_*var dir : Vector3;*_</em>
<em>_*var glassDir : Vector3;*_</em>
<em>_*if(weaponTransformReference == null)*_</em>
<em>_*{*_</em>
<em><em>_camRay = cam.ScreenPointToRay(new Vector3(Screen.width * 0.5, Screen.height * 0.5, 0));_</em></em>
<em>_*origin = camRay.origin;*_</em>
<em>_*dir = camRay.direction;*_</em>
<em><em>_origin += dir * 0.1;_</em></em>
<em>_*}*_</em>
<em>_*else*_</em>
<em>_*{*_</em>
<em><em>_camRay = cam.ScreenPointToRay(new Vector3(Screen.width * 0.5, Screen.height * 0.5, 0));_</em></em>
<em><em>_origin = weaponTransformReference.position + (weaponTransformReference.right * 0.2);_</em></em>
<em><em>_if(Physics.Raycast(camRay.origin + camRay.direction * 0.1, camRay.direction, hit, fireRange, hitLayer))_</em></em>
<em>_*{*_</em>
<em>_*dir = (hit.point - origin).normalized;*_</em>
<em>_*if(hit.collider.tag == "glass")*_</em>
<em>_*{*_</em>
<em><em>_glassOrigin = hit.point + dir * 0.05;_</em></em>
<em>_*if(Physics.Raycast(glassOrigin, camRay.direction, glassHit, fireRange - hit.distance, hitLayer))*_</em>
<em>_*{*_</em>
<em>_*glassDir = glassHit.point - glassOrigin;*_</em>
<em>_*}*_</em>
<em>_*}*_</em>
<em>_*}*_</em>
<em>_*else*_</em>
<em>_*{*_</em>
<em>_*dir = weaponTransformReference.forward;*_</em>
<em>_*}*_</em>
<em>_*}*_</em>
<em>_*if(shottingParticles != null)*_</em>
<em>_*{*_</em>
<em><em>_shottingParticles.rotation = Quaternion.FromToRotation(Vector3.forward, (cam.ScreenToWorldPoint(new Vector3(Screen.width * 0.5, Screen.height * 0.5, cam.farClipPlane)) - weaponTransformReference.position).normalized);_</em></em>
<em>_*}*_</em>
<em>_*if(Physics.Raycast(origin, dir, hit, fireRange, hitLayer))*_</em>
<em>_*{*_</em>
<em>_*hit.collider.gameObject.SendMessage("Hit", hit, SendMessageOptions.DontRequireReceiver);*_</em>
<em>_*GenerateGraphicStuff(hit);*_</em>
<em>_*if(hit.collider.tag == "glass")*_</em>
<em>_*{*_</em>
<em>_*if(Physics.Raycast(glassOrigin, glassDir, glassHit, fireRange - hit.distance, hitLayer))*_</em>
<em>_*{*_</em>
<em>_*glassHit.collider.gameObject.SendMessage("Hit", glassHit, SendMessageOptions.DontRequireReceiver);*_</em>
<em>_*GenerateGraphicStuff(glassHit);*_</em>
<em>_*}*_</em>
<em>_*}*_</em>
<em>_*}*_</em>
<em>_*}*_</em>
<em>_*function GenerateGraphicStuff(hit : RaycastHit)*_</em>
<em>_*{*_</em>
<em>_*var hitType : HitType;*_</em>
<em>_*var body : Rigidbody = hit.collider.rigidbody;*_</em>
<em>_*if(body == null)*_</em>
<em>_*{*_</em>
<em>_*if(hit.collider.transform.parent != null)*_</em>
<em>_*{*_</em>
<em>_*body = hit.collider.transform.parent.rigidbody;*_</em>
<em>_*}*_</em>
<em>_*}*_</em>
<em>_*if(body != null)*_</em>
<em>_*{*_</em>
<em>_*if(body.gameObject.layer != 10 && !body.gameObject.name.ToLower().Contains("door"))*_</em>
<em>_*{*_</em>
<em>_*body.isKinematic = false;*_</em>
<em>_*}*_</em>
<em>_*if(!body.isKinematic)*_</em>
<em>_*{*_</em>
<em>_*var direction : Vector3 = hit.collider.transform.position - weaponTransformReference.position;*_</em>
<em><em>_body.AddForceAtPosition(direction.normalized * pushPower, hit.point, ForceMode.Impulse);_</em></em>
<em>_*}*_</em>
<em>_*}*_</em>
<em>_*var go : GameObject;*_</em>
<em>_*var delta : float = -0.02;*_</em>
<em>_*var hitUpDir : Vector3 = hit.normal;*_</em>
<em><em>_var hitPoint : Vector3 = hit.point + hit.normal * delta;_</em></em>
<em>_*switch(hit.collider.tag)*_</em>
<em>_*{*_</em>
<em>_*case "wood":*_</em>
<em>_*hitType = HitType.WOOD;*_</em>
<em>_*go = GameObject.Instantiate(woodParticle, hitPoint, Quaternion.FromToRotation(Vector3.up, hitUpDir)) as GameObject;*_</em>
<em>_*break;*_</em>
<em>_*case "metal":*_</em>
<em>_*hitType = HitType.METAL;*_</em>
<em>_*go = GameObject.Instantiate(metalParticle, hitPoint, Quaternion.FromToRotation(Vector3.up, hitUpDir)) as GameObject;*_</em>
<em>_*break;*_</em>
<em>_*case "car":*_</em>
<em>_*hitType = HitType.METAL;*_</em>
<em>_*go = GameObject.Instantiate(metalParticle, hitPoint, Quaternion.FromToRotation(Vector3.up, hitUpDir)) as GameObject;*_</em>
<em>_*break;*_</em>
<em>_*case "concrete":*_</em>
<em>_*hitType = HitType.CONCRETE;*_</em>
<em>_*go = GameObject.Instantiate(concreteParticle, hitPoint, Quaternion.FromToRotation(Vector3.up, hitUpDir)) as GameObject;*_</em>
<em>_*break;*_</em>
<em>_*case "dirt":*_</em>
<em>_*hitType = HitType.CONCRETE;*_</em>
<em>_*go = GameObject.Instantiate(sandParticle, hitPoint, Quaternion.FromToRotation(Vector3.up, hitUpDir)) as GameObject;*_</em>
<em>_*break;*_</em>
<em>_*case "sand":*_</em>
<em>_*hitType = HitType.CONCRETE;*_</em>
<em>_*go = GameObject.Instantiate(sandParticle, hitPoint, Quaternion.FromToRotation(Vector3.up, hitUpDir)) as GameObject;*_</em>
<em>_*break;*_</em>
<em>_*case "water":*_</em>
<em>_*go = GameObject.Instantiate(waterParticle, hitPoint, Quaternion.FromToRotation(Vector3.up, hitUpDir)) as GameObject;*_</em>
<em>_*break;*_</em>
<em>_*default:*_</em>
<em>_*return;*_</em>
<em>_*}*_</em>
<em>_*go.layer = hit.collider.gameObject.layer;*_</em>
<em>_*if(hit.collider.renderer == null) return;*_</em>
<em>_*if(timerToCreateDecal < 0.0 && hit.collider.tag != "water")*_</em>
<em>_*{*_</em>
<em>_*go = GameObject.Instantiate(bulletMark, hit.point, Quaternion.FromToRotation(Vector3.forward, -hit.normal));*_</em>
<em>_*var bm : BulletMarks = go.GetComponent("BulletMarks");*_</em>
<em>_*bm.GenerateDecal(hitType, hit.collider.gameObject);*_</em>
<em>_*timerToCreateDecal = 0.02;*_</em>
<em>_*}*_</em>
<em>_*}*_</em>
<em>_*function Update()*_</em>
<em>_*{*_</em>
<em>_*timerToCreateDecal -= Time.deltaTime;*_</em>
<em>_*if(Input.GetButtonDown("Fire1") && currentRounds == 0 && !reloading && freeToShoot)*_</em>
<em>_*{*_</em>
<em>_*PlayOutOfAmmoSound();*_</em>
<em>_*}*_</em>
<em>_*if(Input.GetButtonUp("Fire1"))*_</em>
<em>_*{*_</em>
<em>_*freeToShoot = true;*_</em>
<em>_*cBurst = burstRate;*_</em>
<em>_*}*_</em>
<em>_*HandleReloading();*_</em>
<em>_*ShotTheTarget();*_</em>
<em>_*}*_</em>
<em>_*function HandleReloading()*_</em>
<em>_*{*_</em>
<em>_*if(Input.GetKeyDown(KeyCode.R) && !reloading)*_</em>
<em>_*{*_</em>
<em>_*Reload();*_</em>
<em>_*}*_</em>
<em>_*if(reloading)*_</em>
<em>_*{*_</em>
<em>_*reloadTimer -= Time.deltaTime;*_</em>
<em>_*if(reloadTimer <= 0.0)*_</em>
<em>_*{*_</em>
<em>_*reloading = false;*_</em>
<em>_*if(!unlimited)*_</em>
<em>_*{*_</em>
<em>_*totalClips--;*_</em>
<em>_*}*_</em>
<em>_*currentRounds = clipSize;*_</em>
<em>_*}*_</em>
<em>_*}*_</em>
<em>_*}*_</em>
<em>_*function Reload()*_</em>
<em>_*{*_</em>
<em>_*if(totalClips > 0 && currentRounds < clipSize)*_</em>
<em>_*{*_</em>
<em>_*PlayReloadSound();*_</em>
<em>_*reloading = true;*_</em>
<em>_*reloadTimer = reloadTime;*_</em>
<em>_*}*_</em>
<em>_*}*_</em>
<em>_*//---------------AUDIO METHODS--------*_</em>
<em>_*function PlayOutOfAmmoSound()*_</em>
<em>_*{*_</em>
<em>_*audio.PlayOneShot(outOfAmmoSound, 1.5);*_</em>
<em>_*}*_</em>
<em>_*function PlayReloadSound()*_</em>
<em>_*{*_</em>
<em>_*audio.PlayOneShot(reloadSound, 1.5);*_</em>
<em>_*}*_</em>
<em>_*function PlayShootSound()*_</em>
<em>_*{*_</em>
<em>_*audio.PlayOneShot(shootSound);*_</em>
<em>_*}*_</em>
<em>_*}*_</em>
<em>_*```*_</em>
<em>_*<p>But even so... You're declaring variables as objects that you haven't specified what they are... Like, ShotLight or Grenade... You need to make that class/object.</p>*_</em>
<em>_*<p>But yea... Maybe someone else can help you more? =)</p>*_</em>