mirror of
https://github.com/Rundll86/Dog-Lynx-And-HCN.git
synced 2026-05-28 06:51:54 +08:00
feat(武器系统): 为链式枪和紫水晶子弹添加能量循环机制
- 在紫水晶子弹类中添加能量循环相关变量和方法 - 修改链式枪子弹生成逻辑以传递能量循环属性 - 为链式枪武器添加5个新的升华选项,包括能量回收功能 - 更新攻击方法以处理新增的穿透和能量循环属性
This commit is contained in:
@@ -1,21 +1,27 @@
|
||||
extends BulletBase
|
||||
class_name ChainGunBullet
|
||||
|
||||
var count: int = 0
|
||||
var splits: float = 0
|
||||
var cycleRate: float = 0
|
||||
var cycleCount: float = 0
|
||||
|
||||
@onready var anchor: Node2D = $"%anchor"
|
||||
|
||||
func spawn():
|
||||
for j in count:
|
||||
for i in BulletBase.generate(
|
||||
for i in count:
|
||||
for bullet in BulletBase.generate(
|
||||
ComponentManager.getBullet("PurpleCrystalSmall"),
|
||||
launcher,
|
||||
anchor.global_position,
|
||||
rotation + deg_to_rad(splits * randf_range(-1, 1))
|
||||
):
|
||||
if i is BulletBase:
|
||||
var dir = Vector2.from_angle(i.rotation).rotated(deg_to_rad(-90))
|
||||
i.baseDamage = baseDamage
|
||||
i.position += dir * (count - j * 2) * 10 / 2
|
||||
if bullet is PurpleCrystalBullet:
|
||||
var dir = Vector2.from_angle(bullet.rotation).rotated(deg_to_rad(-90))
|
||||
bullet.baseDamage = baseDamage
|
||||
bullet.position += dir * (count - i * 2) * 10 / 2
|
||||
bullet.penerate += penerate
|
||||
bullet.cycleRate = cycleRate
|
||||
bullet.cycleCount = cycleCount
|
||||
func ai():
|
||||
PresetBulletAI.lockLauncher(self , launcher, true)
|
||||
|
||||
@@ -1,4 +1,9 @@
|
||||
extends BulletBase
|
||||
class_name PurpleCrystalBullet
|
||||
|
||||
var cycleRate: float = 0
|
||||
var cycleCount: float = 0
|
||||
var cycled: bool = false
|
||||
|
||||
func ai():
|
||||
PresetBulletAI.forward(self , rotation)
|
||||
@@ -6,3 +11,7 @@ func destroy(_beacuseMap: bool):
|
||||
var eff = EffectController.create(ComponentManager.getEffect("PurpleCrystalExplosion"), global_position)
|
||||
eff.rotation = rotation
|
||||
eff.shot()
|
||||
func succeedToHit(_dmg: float, entity: EntityBase):
|
||||
if MathTool.rate(cycleRate):
|
||||
entity.storeEnergy(cycleCount)
|
||||
cycled = true
|
||||
|
||||
@@ -1,15 +1,63 @@
|
||||
@tool
|
||||
extends Weapon
|
||||
|
||||
func sublimateOptions() -> Array[SublimateOption]:
|
||||
return [
|
||||
SublimateOption.new(
|
||||
"聚焦校准",
|
||||
"散射-2°",
|
||||
func(w: Weapon, _e):
|
||||
w.addStoreExtra("split", -2),
|
||||
1,
|
||||
CategoryStore.Quality.RARE
|
||||
),
|
||||
SublimateOption.new(
|
||||
"晶核过载",
|
||||
"伤害+5,但散射+4°",
|
||||
func(w: Weapon, _e):
|
||||
w.addStoreExtra("atk", 5)
|
||||
w.addStoreExtra("split", 4),
|
||||
1,
|
||||
CategoryStore.Quality.LEGENDARY
|
||||
),
|
||||
SublimateOption.new(
|
||||
"弹头塑形",
|
||||
"穿透+5%",
|
||||
func(w: Weapon, _e):
|
||||
w.addStoreExtra("penerate", 0.1),
|
||||
1,
|
||||
CategoryStore.Quality.EPIC
|
||||
),
|
||||
SublimateOption.new(
|
||||
"晶能循环",
|
||||
"能量消耗-0.05",
|
||||
func(_w, _e):
|
||||
needEnergy -= 0.05,
|
||||
1,
|
||||
CategoryStore.Quality.COMMON
|
||||
),
|
||||
SublimateOption.new(
|
||||
"动能压制",
|
||||
"命中敌人时有5%概率回收0.25点能量",
|
||||
func(w: Weapon, _e):
|
||||
w.addStoreExtra("cycleRate", 0.05)
|
||||
w.addStoreExtra("cycleCount", 0.25),
|
||||
1,
|
||||
CategoryStore.Quality.COMMON
|
||||
),
|
||||
]
|
||||
func update(to, origin, _entity):
|
||||
origin["atk"] += 1 * to * soulLevel
|
||||
origin["count"] = 1 * soulLevel
|
||||
origin["split"] /= 1 + 0.005 * to * soulLevel
|
||||
return origin
|
||||
func attack(entity: EntityBase):
|
||||
for i in BulletBase.generate(ComponentManager.getBullet("ChainGun"), entity, entity.texture.global_position, (get_global_mouse_position() - entity.texture.global_position).angle()):
|
||||
if i is BulletBase:
|
||||
i.baseDamage = readStore("atk")
|
||||
i.count = floor(readStore("count"))
|
||||
i.splits = readStore("split")
|
||||
for bullet in BulletBase.generate(ComponentManager.getBullet("ChainGun"), entity, entity.texture.global_position, (get_global_mouse_position() - entity.texture.global_position).angle()):
|
||||
if bullet is ChainGunBullet:
|
||||
bullet.baseDamage = readStore("atk")
|
||||
bullet.count = floor(readStore("count"))
|
||||
bullet.splits = readStore("split")
|
||||
bullet.penerate += readStoreExtra("penerate")
|
||||
bullet.cycleRate = readStoreExtra("cycleRate")
|
||||
bullet.cycleCount = readStoreExtra("cycleCount")
|
||||
return true
|
||||
|
||||
Reference in New Issue
Block a user