Ok I can't figure this out, My Pickup script for my "Shotgun shells" is kinda working, I think?? But it seems to ONLY add to my shotgun if I already have shells, if I'm OUT of shells then it does not add?? What the heck??
Here is my Pickup script:
enum PickupType { Health = 0, Rocket = 1, Ammo = 20, Shells = 2, Grenades = 20, AlienArtifact01, }
var pickupType = PickupType.Health;
var amount = 20;
var sound : AudioClip;
private var used = false;
function ApplyPickup (player : FPSPlayer) {
if (pickupType == PickupType.Health) {
if (player.hitPoints >= player.maximumHitPoints)
return false;
player.hitPoints += amount;
player.hitPoints = Mathf.Min(player.hitPoints, player.maximumHitPoints);
}
else if (pickupType == PickupType.Rocket) {
var launcher : RocketLauncher = player.GetComponentInChildren(RocketLauncher);
if (launcher)
launcher.ammoCount += amount;
}
else if (pickupType == PickupType.Ammo) {
var ammo : MachineGun = player.GetComponentInChildren(MachineGun);
if (ammo)
ammo.bulletsPerClip += amount;
}
else if (pickupType == PickupType.Shells) {
var Shells : Shotgun = player.GetComponentInChildren(Shotgun);
if (Shells)
Shells.bulletsPerClip += amount;
}
else if (pickupType == PickupType.Grenades) {
var Grenades : MissileLauncher = player.GetComponentInChildren(MissileLauncher);
if (Grenades)
Grenades.grenadesLeft += amount;
}
return true;
}
function OnTriggerEnter (col : Collider) {
var player : FPSPlayer = col.GetComponent(FPSPlayer);
//* Make sure we are running into a player
//* prevent picking up the trigger twice, because destruction
// might be delayed until the animation has finnished
if (used || player == null)
return;
if (!ApplyPickup (player))
return;
used = true;
// Play sound
if (sound)
AudioSource.PlayClipAtPoint(sound, transform.position);
// If there is an animation attached.
// Play it.
if (animation && animation.clip) {
animation.Play();
Destroy(gameObject, animation.clip.length);
} else {
Destroy(gameObject);
}
}
// Auto setup the pickup
function Reset () {
if (collider == null)
gameObject.AddComponent(BoxCollider);
collider.isTrigger = true;
}
And here is my Shotgun Script:
var range = 70.0;
var fireRate = 4.00;
var force = 300.0;
var damage = 10.0;
var bulletsPerClip = 2;
var clips = 10;
var reloadTime = 1.0;
private var hitParticles : ParticleEmitter;
var muzzleFlash : Renderer;
private var bulletsLeft : int = 0;
private var nextFireTime = 0.0;
private var m_LastFrameShot = -1;
function Start () {
hitParticles = GetComponentInChildren(ParticleEmitter);
// We don't want to emit particles all the time, only when we hit something.
if (hitParticles)
hitParticles.emit = false;
bulletsLeft = bulletsPerClip;
}
function LateUpdate() {
if (muzzleFlash) {
// We shot this frame, enable the muzzle flash
if (m_LastFrameShot == Time.frameCount) {
muzzleFlash.transform.localRotation = Quaternion.AngleAxis(Random.value * 360, Vector3.forward);
muzzleFlash.enabled = true;
if (audio) {
if (!audio.isPlaying)
audio.Play();
audio.loop = true;
}
} else {
// We didn't, disable the muzzle flash
muzzleFlash.enabled = false;
enabled = false;
// Play sound
if (audio)
{
audio.loop = false;
}
}
}
}
function Fire () {
if (bulletsLeft == 0)
return;
// If there is more than one bullet between the last and this frame
// Reset the nextFireTime
if (Time.time - fireRate > nextFireTime)
nextFireTime = Time.time - Time.deltaTime;
// Keep firing until we used up the fire time
while( nextFireTime < Time.time && bulletsLeft != 0) {
FireOneShot();
nextFireTime += fireRate;
}
}
function FireOneShot () {
var direction = transform.TransformDirection(Vector3.forward);
var hit : RaycastHit;
// Did we hit anything?
if (Physics.Raycast (transform.position, direction, hit, range)) {
// Apply a force to the rigidbody we hit
if (hit.rigidbody)
hit.rigidbody.AddForceAtPosition(force * direction, hit.point);
// Place the particle system for spawing out of place where we hit the surface!
// And spawn a couple of particles
if (hitParticles) {
hitParticles.transform.position = hit.point;
hitParticles.transform.rotation = Quaternion.FromToRotation(Vector3.up, hit.normal);
hitParticles.Emit();
}
// Send a damage message to the hit object
hit.collider.SendMessageUpwards("ApplyDamage", damage, SendMessageOptions.DontRequireReceiver);
}
bulletsLeft--;
// Register that we shot this frame,
// so that the LateUpdate function enabled the muzzleflash renderer for one frame
m_LastFrameShot = Time.frameCount;
enabled = true;
// Reload gun in reload Time
if (bulletsLeft == 0)
Reload();
}
function Reload () {
// Wait for reload time first - then add more bullets!
yield WaitForSeconds(reloadTime);
// We have a clip left reload
if (clips > 0) {
clips--;
bulletsLeft = bulletsPerClip;
}
}
function GetBulletsLeft () {
return bulletsLeft;
}