- Home /
Fire only if you don't reload
I am making an fps game and i have a weapon script.In this script i have 2 functions Reload and Fire.What i want is something like this:
function Update
if (function Reload false)
{
Fire();
}
Also i want to make the gun automatic via this script.Here it is:
var sound : AudioClip; var bulletSpeed = 100; var projectile : Rigidbody; var bullets = 30; var totalBullets = 60; var reloadTime = 3;
function Update () { Fire(); Reload(); }
function Fire () {
if(bullets > 0) { // Ctrl was pressed, launch a projectile if (Input.GetButtonDown("Fire1")) { // Instantiate the projectile at the position and rotation of this transform var clone : Rigidbody; clone = Instantiate(projectile, transform.position, transform.rotation);
// Give the cloned object an initial velocity along the current
// object's Z axis
clone.velocity = transform.TransformDirection (Vector3.forward * bulletSpeed);
AudioSource.PlayClipAtPoint(sound, transform.position, 1);
//take a bullet of our clip if firing
bullets -=1;
GameObject.Find("bulletCounter").guiText.text = ""+totalBullets;
}
}
}
function Reload() { if(bullets < 30) { if(Input.GetButtonDown("Reload"))
{ yield WaitForSeconds (reloadTime) ;
if(totalBullets > 0)
{
var transfer : int = 30 - bullets;
if (transfer > totalBullets)
{
transfer = totalBullets;
}
bullets += transfer;
totalBullets -= transfer;
}
}
}
}
Answer by fherbst · Oct 29, 2010 at 07:56 PM
The structure would be better like this (at least in my opinion - there are for sure thousand ways to do this, but I think this one is quite clean and clear):
bool reloading = false; function Update() { if (Input.GetButtonDown("Reload")) Reload(); if ((!reloading) && Input.GetButtonDown("Fire1")) Fire(); }
function Fire() { if(bullets > 0) { // do stuff bullets -= 1; } else print("no more ammo - reload"); }
function Reload() { if(totalBullets > 0) { // Start reloading reloading = true; yield WaitForSeconds(reloadTime); // take from the totalBullets, add to the bullets // ... // finished reloading after reloadTime reloading = false; }
else print("no more ammo - RUN!"); }
(Code not tested, be prepared for errors :D - I also hope I haven't made any game logics mistakes).
Your answer
Follow this Question
Related Questions
FPS Gun Fire and animation problems 0 Answers
How can I shooting script c#? 0 Answers
c# weapon shooting script using raycasting help 1 Answer
finishing an animation before starting another? 1 Answer
Help in change the rate of fire. 1 Answer