diff --git a/scripts/Contents/Bullets/InfinitySword.gd b/scripts/Contents/Bullets/InfinitySword.gd index af94f58..0decfd7 100644 --- a/scripts/Contents/Bullets/InfinitySword.gd +++ b/scripts/Contents/Bullets/InfinitySword.gd @@ -20,4 +20,9 @@ func hitBullet(bullet: BulletBase): if !is_instance_valid(launcher): return if BulletTool.canDamage(bullet, launcher): baseDamage *= rate2 ** bullet.getDamage() - InternalDamageBullet.generateBall(launcher, bullet.launcher, sqrt(baseDamage)) + var cycler = launcher.getCycleTimer("internalDamages") + if cycler is CycleTimer: + if len(cycler.bullets) > 0: + InternalDamageBullet.generateBall(launcher, bullet.launcher, sqrt(baseDamage)) + cycler.bullets[0].tryDestroy() + cycler.forceFilter() diff --git a/scripts/Statemachine/CycleTimer.gd b/scripts/Statemachine/CycleTimer.gd index a44008d..e6299c3 100644 --- a/scripts/Statemachine/CycleTimer.gd +++ b/scripts/Statemachine/CycleTimer.gd @@ -15,7 +15,13 @@ func lifetime(): func getStateAngle(index: int): return lifetime() / period * deg_to_rad(360) - deg_to_rad(360.0 * index / len(bullets)) func forceFilter(): - bullets = bullets.filter(is_instance_valid) + bullets = bullets.filter( + func(b): + if b is BulletBase: + return !b.destroying + else: + return false + ) func apply(where: Vector2): forceFilter() for index in len(bullets): diff --git a/scripts/Statemachine/EntityBase.gd b/scripts/Statemachine/EntityBase.gd index b7091ba..901af53 100644 --- a/scripts/Statemachine/EntityBase.gd +++ b/scripts/Statemachine/EntityBase.gd @@ -227,6 +227,8 @@ func getOrCreateCycleTimer(timerName: String, period: float = 1000, distance: fl if start: newTimer.start() cycleTimers[timerName] = newTimer return cycleTimers[timerName] +func getCycleTimer(timerName: String): + return cycleTimers.get(timerName) func initHealth(maxHealth: float): fields[FieldStore.Entity.MAX_HEALTH] = maxHealth health = maxHealth