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