Timer 如何在libGDX-Ashley ECS框架系统上对进程进行排队?

Timer 如何在libGDX-Ashley ECS框架系统上对进程进行排队?,timer,libgdx,2d,game-physics,amazon-ecs,Timer,Libgdx,2d,Game Physics,Amazon Ecs,我有GunSystem类这个系统处理我的玩家的武器 class GunSystem extends IteratingSystem implements Gun{ super(Family.all(GunComponent.class, ...).get()); @Override protected void processEntity(Entity entity, float deltaTime) { updateGun(); onRelo

我有
GunSystem类
这个系统处理我的玩家的武器

class GunSystem extends IteratingSystem implements Gun{
   super(Family.all(GunComponent.class, ...).get());

   @Override
   protected void processEntity(Entity entity, float deltaTime) {
        updateGun();
        onReload();
        onFire();
   }

   private void updateGun() {
       // Textures, Position, Size ..
   }
}
默认情况下,当
连接到
播放器
时,枪将自动重新加载。因此玩家可以立即开火

Gun gun = new Gun();
Player player = new Player();
player.setWeapon(gun)

// class:Player, method:onFire()
Gun gun = player.getWeapon();
gun.fire() // or gun.trigger();
// class:GunSystem, method:onReload();
gun.reload(); // reload the gun for half a second, before the gun can be fired again.
关注点
因为我使用的是libGDX-Ashley ECS(实体组件系统)框架,所以我想充分利用它的类。目前我主要关心的是
GunSystem
,它扩展了抽象的
迭代系统
。你们有什么建议,在再次扣动扳机之前,我如何在重新装弹时锁定枪

我尝试过的

// onReload
  if(gun.reload) {
        if (timer < 0.5f) {
            timer += deltaTime;
        } else {
            gun.reload(spatialX, spatialY);
            gun.reload = false;
        }
    }

// onFire
    if(gun.triggered){
        gun.fire();
        gun.triggered = false;
        gun.reload = true;
    }
//重新加载
if(火炮重新装填){
中频(定时器<0.5f){
定时器+=延迟时间;
}否则{
火炮重新装填(空间发射,空间发射);
gun.reload=false;
}
}
//自信
如果(枪触发){
枪。火();
gun.triggered=false;
gun.reload=true;
}

问题
在第二次玩家触摸时,调用
onFire
方法,即使
onReload
仍处于忙碌状态

目标

  • 在玩家第一次触摸时,枪将被发射,因为它是 已经加载。在第二次玩家触摸时,如果枪仍在 加载点火功能将被禁用,直到其准备就绪
  • 复制弹射器或加农炮的行为,在发射的每一颗子弹上,重新加载过程将开始