diff --git a/components/Bullets/SevenSoul.tscn b/components/Bullets/SevenSoul.tscn index 29f6cee..9595515 100644 --- a/components/Bullets/SevenSoul.tscn +++ b/components/Bullets/SevenSoul.tscn @@ -29,6 +29,9 @@ alpha_curve = SubResource("CurveTexture_d1eej") [node name="SevenSoul" instance=ExtResource("1_c4fl5")] script = ExtResource("2_egs34") +speed = 0.0 +damage = 0.0 +penerate = 1.0 lifeTime = 112000.0 [node name="heart" type="Sprite2D" parent="texture" index="1"] @@ -49,4 +52,4 @@ one_shot = true local_coords = true [node name="hitbox" parent="." index="1"] -disabled = true +position = Vector2(100, 0) diff --git a/scripts/Contents/Bullets/SevenSoul.gd b/scripts/Contents/Bullets/SevenSoul.gd index ef6b9c0..8e03c0e 100644 --- a/scripts/Contents/Bullets/SevenSoul.gd +++ b/scripts/Contents/Bullets/SevenSoul.gd @@ -15,6 +15,14 @@ var pingAfterGeneration: float = 5000 @onready var heart = $"%heart" @onready var effect: GPUParticles2D = $"%effect" +func register(): + area_entered.connect( + func(area): + var bullet = BulletTool.fromArea(area) + if bullet and BulletTool.canDamage(bullet, launcher): + launcher.tryHeal(1) + launcher.storeEnergy(damage * 0.25) + ) func spawn(): modulate = Color(colors[index % colors.size()]) effect.emitting = true diff --git a/scripts/Statemachine/BulletBase.gd b/scripts/Statemachine/BulletBase.gd index b771ae4..4f99ddc 100644 --- a/scripts/Statemachine/BulletBase.gd +++ b/scripts/Statemachine/BulletBase.gd @@ -81,10 +81,7 @@ func _physics_process(_delta: float) -> void: func hit(target: Node): var entity: EntityBase = EntityTool.fromHurtbox(target) if !entity || !launcher: return - if entity.currentInvinsible: return - if !canDamageSelf && entity == launcher: return - if !indisDamage && !GameRule.allowFriendlyFire: - if entity.isPlayer() == launcher.isPlayer() and launcher.currentFocusedBoss != entity: return + if !BulletTool.canDamage(self, entity): return var resultDamage = entity.takeDamage(self, MathTool.rate(launcher.fields.get(FieldStore.Entity.CRIT_RATE) + GameRule.critRateInfluenceByLuckValue * launcher.fields[FieldStore.Entity.LUCK_VALUE])) succeedToHit(resultDamage, entity) if MathTool.rate(fullPenerate()): diff --git a/scripts/Tools/BulletTool.gd b/scripts/Tools/BulletTool.gd new file mode 100644 index 0000000..418c6d8 --- /dev/null +++ b/scripts/Tools/BulletTool.gd @@ -0,0 +1,13 @@ +class_name BulletTool + +static func fromArea(area: Area2D) -> BulletBase: + if area is BulletBase: + return area as BulletBase + else: + return null +static func canDamage(bullet: BulletBase, target: EntityBase) -> bool: + if target.currentInvinsible: return false + if !bullet.canDamageSelf && target == bullet.launcher: return false + if !bullet.is_node_ready() && !GameRule.allowFriendlyFire: + if target.isPlayer() == bullet.launcher.isPlayer() and bullet.launcher.currentFocusedBoss != target: return false + return true