From 848a87899279a0d9e2adb70bf86ed963df9c1628 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=A8=E8=90=BD=E5=9F=BA=E5=9B=B4=E8=99=BE?= <3161880837@qq.com> Date: Sun, 10 May 2026 15:17:57 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E8=93=9D=E6=B0=B4=E6=99=B6):=20=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E8=93=9D=E6=B0=B4=E6=99=B6=E5=AD=90=E5=BC=B9=E8=BF=BD?= =?UTF-8?q?=E8=B8=AA=E5=92=8C=E5=88=86=E8=A3=82=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 为蓝水晶子弹添加追踪开关和速度提升属性 实现命中敌人时概率分裂钻石的功能 添加武器升华选项以增强蓝水晶能力 --- scripts/Contents/Bullets/BlueCrystal.gd | 20 ++++++-- scripts/Contents/Weapons/BlueCrystal.gd | 62 +++++++++++++++++++++---- 2 files changed, 71 insertions(+), 11 deletions(-) diff --git a/scripts/Contents/Bullets/BlueCrystal.gd b/scripts/Contents/Bullets/BlueCrystal.gd index 7468510..7744ee0 100644 --- a/scripts/Contents/Bullets/BlueCrystal.gd +++ b/scripts/Contents/Bullets/BlueCrystal.gd @@ -2,6 +2,10 @@ extends BulletBase class_name BlueCrystalBullet var tracer: EntityBase = null +var canTrace: bool = true +var speedBoost: float = 0 +var splitRate: float = 0 + @onready var trail: GPUParticles2D = $%trail func ai(): @@ -9,12 +13,22 @@ func ai(): var tracker = tracer.getTrackingAnchor() var targetAngle = position.angle_to_point(tracker) trail.rotation = - Vector2.from_angle(rotation).angle_to(Vector2.from_angle(targetAngle)) / (speed / initialSpeed) - PresetBulletAI.trace(self, tracker, 0.07) + if canTrace: + PresetBulletAI.trace(self , tracker, 0.07) else: trail.rotation = 0 - speed += 0.1 - PresetBulletAI.forward(self, rotation) + speed += 0.1 * (1 + speedBoost) + PresetBulletAI.forward(self , rotation) func destroy(_beacuseMap: bool): var eff = EffectController.create(ComponentManager.getEffect("BlueCrystalExplosion"), global_position) eff.rotation = rotation eff.shot() +func succeedToHit(_dmg: float, entity: EntityBase): + if entity == tracer: + canTrace = false + if MathTool.rate(splitRate): + for diamond in BulletBase.generate(ComponentManager.getBullet("Diamond2"), entity, position, deg_to_rad(randf_range(0, 360))): + if diamond is Diamond2Bullet: + diamond.baseDamage = baseDamage * 0.8 + diamond.parent = self + diamond.penerate += penerate diff --git a/scripts/Contents/Weapons/BlueCrystal.gd b/scripts/Contents/Weapons/BlueCrystal.gd index 922f674..bfb88f2 100644 --- a/scripts/Contents/Weapons/BlueCrystal.gd +++ b/scripts/Contents/Weapons/BlueCrystal.gd @@ -1,18 +1,64 @@ @tool extends Weapon +func sublimateOptions() -> Array[SublimateOption]: + return [ + SublimateOption.new( + "晶核提纯", + "蓝水晶与钻石伤害+1", + func(w: Weapon, _e): + w.addStoreExtra("atk", 1), + 1, + CategoryStore.Quality.COMMON + ), + SublimateOption.new( + "钻石护盾", + "环绕钻石数量+1", + func(w: Weapon, _e): + w.addStoreExtra("count", 1), + 1, + CategoryStore.Quality.RARE + ), + SublimateOption.new( + "贯穿棱镜", + "穿透+10%", + func(w: Weapon, _e): + w.addStoreExtra("penerate", 0.1), + 1, + CategoryStore.Quality.EPIC + ), + SublimateOption.new( + "碎晶裂变", + "蓝水晶命中敌人时,有8%概率分裂出1颗钻石(伤害-20%)", + func(w: Weapon, _e): + w.addStoreExtra("splitRate", 0.08), + 1, + CategoryStore.Quality.LEGENDARY + ), + SublimateOption.new( + "动能贯穿", + "蓝水晶飞行速度+10%", + func(w: Weapon, _e): + w.addStoreExtra("speed", 0.1), + 1, + CategoryStore.Quality.COMMON + ), + ] func update(to: int, origin: Dictionary, _entity: EntityBase): origin["atk"] += 2 * to * soulLevel origin["count"] = 1 + 1 * soulLevel return origin func attack(entity: EntityBase): - for i in BulletBase.generate(ComponentManager.getBullet("BlueCrystal"), entity, entity.findWeaponAnchor("normal"), deg_to_rad(randf_range(0, 360))): - if i is BlueCrystalBullet: - i.tracer = EntityTool.findClosetEntity(get_global_mouse_position(), get_tree(), !entity.isPlayer(), entity.isPlayer()) - i.baseDamage = readStore("atk") + for crystal in BulletBase.generate(ComponentManager.getBullet("BlueCrystal"), entity, entity.findWeaponAnchor("normal"), deg_to_rad(randf_range(0, 360))): + if crystal is BlueCrystalBullet: + crystal.tracer = EntityTool.findClosetEntity(get_global_mouse_position(), get_tree(), !entity.isPlayer(), entity.isPlayer()) + crystal.baseDamage = readStore("atk") + crystal.penerate += readStoreExtra("penerate") + crystal.speedBoost = readStoreExtra("speed") for index in readStore("count"): - for j in BulletBase.generate(ComponentManager.getBullet("Diamond2"), entity, i.position, deg_to_rad(360.0 / readStore("count") * index)): - if j is Diamond2Bullet: - j.baseDamage = readStore("atk") - j.parent = i + for diamond in BulletBase.generate(ComponentManager.getBullet("Diamond2"), entity, crystal.position, deg_to_rad(360.0 / readStore("count") * index)): + if diamond is Diamond2Bullet: + diamond.baseDamage = readStore("atk") + diamond.parent = crystal + diamond.penerate += readStoreExtra("penerate") return true