diff --git a/scripts/Contents/Bullets/Parrier.gd b/scripts/Contents/Bullets/Parrier.gd index 33ae0b6..11f4920 100644 --- a/scripts/Contents/Bullets/Parrier.gd +++ b/scripts/Contents/Bullets/Parrier.gd @@ -40,17 +40,22 @@ func hitBullet(bullet: BulletBase): # 当前子弹与其他子弹相撞 eff.shot() launcher.impluse((position - bullet.position).normalized() * bullet.speed ** (1.0 / 2) * 250) var targetBaseDamage = bullet.baseDamage - # 弹反 还是 格挡? - if MathTool.rate(reflectRate): - bullet.look_at(bullet.launcher.getTrackingAnchor()) - bullet.launcher = launcher - bullet.baseDamage *= atk - bullet.baseDamage *= reflectRate - bullet.lifeTime *= 2 - if bullet.freeAfterSpawn && bullet.autoSpawnAnimation: - bullet.animator.speed_scale *= 0.5 - else: - bullet.tryDestroy() + if bullet.motionType == BulletBase.MotionType.PROJECTILE: + # 弹反 还是 格挡? + if MathTool.rate(reflectRate): + bullet.look_at(bullet.launcher.getTrackingAnchor()) + bullet.launcher = launcher + bullet.baseDamage *= atk + bullet.baseDamage *= reflectRate + bullet.lifeTime *= 2 + if bullet.freeAfterSpawn && bullet.autoSpawnAnimation: + bullet.animator.speed_scale *= 0.5 + else: + bullet.tryDestroy() + elif bullet.motionType == BulletBase.MotionType.SWING: + bullet.hitbox.disabled = true + elif bullet.motionType == BulletBase.MotionType.SUMMON || bullet.motionType == BulletBase.MotionType.MAGIC: + launcher.storeEnergy(sqrt(bullet.baseDamage)) var cycler = launcher.getOrCreateCycleTimer("parry", 2000, 100) if len(cycler.bullets) < maxBallCount: # 玩家最多只能拥有多少气 for b in BulletBase.generate( diff --git a/scripts/Statemachine/BulletBase.gd b/scripts/Statemachine/BulletBase.gd index 3c94303..e85cbfc 100644 --- a/scripts/Statemachine/BulletBase.gd +++ b/scripts/Statemachine/BulletBase.gd @@ -1,9 +1,17 @@ extends Area2D class_name BulletBase +enum MotionType { + SWING, + PROJECTILE, + MAGIC, + SUMMON +} + @export var displayName: String = "未知子弹" @export var speed: float = 10.0 @export var baseDamage: float = 10.0 +@export var motionType: MotionType = MotionType.PROJECTILE @export var damageMultipliers: Array[float] = [1.0] @export var usingDamageMultiplier: int = 0 @export var penerate: float = 0.0