1
1
mirror of https://github.com/Rundll86/Dog-Lynx-And-HCN.git synced 2026-05-28 06:51:54 +08:00

feat(武器): 重做链式机枪并添加音效

重构链式机枪的子弹生成逻辑,降低散射衰减系数
添加射击音效资源及导入配置
调整武器属性描述和数值
移除测试用的调试代码
This commit is contained in:
2026-01-18 14:12:34 +08:00
parent 6e7272d7d9
commit 53db80ceb7
12 changed files with 76 additions and 39 deletions
+9 -4
View File
@@ -1,16 +1,21 @@
extends BulletBase
var count: int = 1
var splits: float = 10.0
var count: int = 0
var splits: float = 0
@onready var anchor: Node2D = $"%anchor"
func spawn():
for j in count:
for i in BulletBase.generate(ComponentManager.getBullet("PurpleCrystalSmall"), launcher, anchor.global_position, rotation):
for i 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) * splits / 2
i.position += dir * (count - j * 2) * 10 / 2
func ai():
PresetBulletAI.lockLauncher(self, launcher, true)
+2 -1
View File
@@ -27,7 +27,8 @@ func generateShadow():
launcher,
position,
startAngle + i * deg_to_rad(splitAngle),
false, false, true, true
true,
true
):
if bullet is VolcanoShadow:
bullet.baseDamage = baseDamage * dmg5
+4 -2
View File
@@ -11,8 +11,10 @@ func register():
elif bullet is FoxZhua:
EffectController.create(ComponentManager.getEffect("BloodFall"), texture.global_position).shot()
)
if !WorldManager.isRelease():
fields[FieldStore.Entity.BULLET_REFRACTION] = 3
# if !WorldManager.isRelease():
# fields[FieldStore.Entity.BULLET_REFRACTION] = 3
# fields[FieldStore.Entity.BULLET_SPLIT] = 3
# fields[FieldStore.Entity.EXTRA_BULLET_COUNT] = 3
func ai():
texture.play("walk")
var direction = Vector2(
+2 -1
View File
@@ -4,7 +4,7 @@ extends Weapon
func update(to, origin, _entity):
origin["atk"] += 2 * to * soulLevel
origin["count"] = 1 * soulLevel
origin["split"] /= 1 + 0.05 * to * 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()):
@@ -12,3 +12,4 @@ func attack(entity: EntityBase):
i.baseDamage = readStore("atk")
i.count = floor(readStore("count"))
i.splits = readStore("split")
return true
+1 -1
View File
@@ -16,7 +16,7 @@ func attack(entity: EntityBase):
ComponentManager.getBullet("Volcano"),
entity,
entity.findWeaponAnchor("normal"),
entity.position.angle_to_point(entity.get_global_mouse_position()), false, false, true, true
entity.position.angle_to_point(entity.get_global_mouse_position()), true, true
):
var bullet: Volcano = j
bullet.baseDamage = readStore("atk")
+6 -11
View File
@@ -30,8 +30,7 @@ var parent: BulletBase = null
var spawnInWhen: float = 0
var spawnInWhere: Vector2 = Vector2.ZERO
var destroying: bool = false
var isChildSplit: bool = false
var isChildRefract: bool = false
var canDuplicateSelf: bool = true
var initialSpeed: float = 0
var initialDamage: float = 0
var speedScale: float = 1
@@ -144,19 +143,19 @@ func tryDestroy(becauseMap: bool = false):
await animator.animation_finished
queue_free()
func trySplit():
if is_instance_valid(launcher) and !isChildSplit:
if is_instance_valid(launcher) and canDuplicateSelf:
var value = launcher.fields.get(FieldStore.Entity.BULLET_SPLIT)
var total = MathTool.shrimpRate(value)
var last = value - floor(value)
for i in total:
var cloned = duplicate() as BulletBase
cloned.rotation = deg_to_rad(360.0 / total * i)
cloned.isChildSplit = true
cloned.rotation += deg_to_rad(360.0 / total * i + 180)
cloned.canDuplicateSelf = false
cloned.launcher = launcher
cloned.parent = parent
get_parent().add_child.call_deferred(split(cloned, i, total, last))
func tryRefract():
if is_instance_valid(launcher) and !isChildRefract:
if is_instance_valid(launcher) and canDuplicateSelf:
var value = launcher.fields.get(FieldStore.Entity.BULLET_REFRACTION)
var total = MathTool.shrimpRate(value)
var last = value - floor(value)
@@ -172,7 +171,7 @@ func tryRefract():
aimed.append(entity)
var cloned = duplicate() as BulletBase
cloned.look_at(entity.position)
cloned.isChildRefract = true
cloned.canDuplicateSelf = false
cloned.launcher = launcher
cloned.parent = parent
get_parent().add_child.call_deferred(refract(cloned, entity, i, total, last))
@@ -202,8 +201,6 @@ static func generate(
launchBy: EntityBase,
spawnPosition: Vector2,
spawnRotation: float,
asChildSplit: bool = false,
asChildRefract: bool = false,
addToWorld: bool = true,
ignoreOffset: bool = false
):
@@ -212,8 +209,6 @@ static func generate(
var instances = []
for i in range(count):
var instance: BulletBase = bullet.instantiate()
instance.isChildSplit = asChildSplit
instance.isChildRefract = asChildRefract
instance.launcher = launchBy
instance.position = spawnPosition
instance.rotation = spawnRotation + deg_to_rad(launchBy.fields.get(FieldStore.Entity.OFFSET_SHOOT) * randf_range(-1, 1) * int(!ignoreOffset))
+1 -1
View File
@@ -338,7 +338,7 @@ func tryDie(by: BulletBase = null):
var item = drops[drop]
var count = ceil(randf_range(dropCounts[drop].x, dropCounts[drop].y))
for i in range(count):
ItemDropped.generate(item, randi_range(1, 3 * round(sqrt(GameRule.difficulty - GameRule.difficultyRange.x + 1))), position + MathTool.randomVector2In(GameRule.itemDroppedSpawnOffset))
ItemDropped.generate(item, randi_range(1, round(2.5 * sqrt(GameRule.difficulty - GameRule.difficultyRange.x + 1))), position + MathTool.randomVector2In(GameRule.itemDroppedSpawnOffset))
if MathTool.rate(
GameRule.appleDropRate +
by.launcher.fields.get(FieldStore.Entity.DROP_APPLE_RATE) +