Impact

This forum is read only and just serves as an archive. If you have any questions, please post them on github.com/phoboslab/impact

6 years ago by ansimuz

Hi

Is there an elegant to limit the number of bullets allowed to shoot. For example allow to spawn only 3 bullets entities at a time?


EDIT

Right now i am using this conditional to limit the number of shots to 3:

if(ig.game.getEntitiesByType('EntityArrow').length < 3){
   ig.game.arrows--;
   ig.game.spawnEntity(this.activeWeapon, this.pos.x, this.pos.y,{flip:this.flip});
}

6 years ago by city41

That's not a bad way to do it. You'll have to figure out how many arrows are still alive at some point, so I think the call to getEntitiesByType is unavoidable.

Another way is when an arrow dies you could have it fire an event, and keep track of how many live arrows there are by the number that have been shot versus the number that are still alive.

6 years ago by bitmapshades

I use a firing mode so the player doesn't use up all their ammo when holding down the fire button, a timer() function in the bullet entity and a property bullets keeping track of the number of bullets fired in the unit() function. If it's less than max bullets then apply direction and velocity otherwise use kill() to remove the bullet entity.

6 years ago by vincentpiel

First, to reply to your question : you know when your player shoot, so use a counter, test against 4 this counter to decide to shoot or not, and increase this counter if you shoot. Then, in your Bullet constructor, provide the player object (stored in a bulletOwner property or like), and when the bullet dies, have the bullet decrease the counter. This might be done by overloading kill. kill would decrease the counter then call its parent.
But if i may ask, why limit this number ? This is not 'natural'. The best way to limit the number of bullets you shoot is to control the rate of the shooting. So create a ig.Timer in the hero constructor, allow shooting only if this timer is off, and set it to a given value when you shoot. This value will depends on the gun (Bow vs AK47 :-) ). Every 30 bullets or so, set the timer to a much longer period, a make a special noise : the gun is reloading.

6 years ago by bitmapshades

@vincentpiel you're right I didn't mention that when using kill on a bullet entity it's important to decrease the player's bullet count when using the bullet kill() function as well as to set a firing rate for the active weapon. My preference is to check if ammo is > 0 before handling the other firing conditions.

6 years ago by ansimuz

Thanks for all you replies.

All of them work perfectly. The reason i want to limit the number of fires is because i want to avoid the player to be shooting like he has a machinegun, i want him to shoot as he were megaman or something like that.

6 years ago by vincentpiel

i wouldn't use ig.game to store those informations, but anyway this code is closer
to your goal :

  if   ( (ig.game.shotArrows < 3) && 
                                 ( ig.game.arrows>0) &&
                                           (shootTimer.delta()>0) {
     ig.game.arrows--;
     ig.game.shotArrows++;
     var arrowPosx= this.pos.x + (this.flip) ? this.size.x : 0;
     ig.game.spawnEntity(this.activeWeapon,arrowPosx, this.pos.y,{flip:this.flip});
     shootTimer.set(this.reloadPeriod);
     }

in the constructor you define shootTimer as a new timer and set the reloadPeriod value (around 1.5s for instance).
This value might decrease with player level (skills++).
Increase ig.game.arrows when players find arrows within a level.
Rq : In fact, as i said earlier, if it was for me i wouldn't limit shotArrows (ig.game.shotArrows < 3), and only limit by timer.


And the kill method of an arrow becomes :
   kill : function() {
        ig.game.shotArrows--;
        this.parent();
   }

Rq : as it is designed now, it is hard to handle several weapons. You should really send more informations to the arrow constructor.
Page 1 of 1
« first « previous next › last »