mirror of
https://github.com/Rundll86/Dog-Lynx-And-HCN.git
synced 2026-06-10 13:47:12 +08:00
feat(战斗系统): 增强激光武器效果并添加击退机制
- 增加BigLaser的伤害值和能量消耗 - 为子弹添加击退效果和生成后自动释放功能 - 修改LaserPluse的动画参数并添加锁定发射器脚本 - 调整敌人受击时的能量获取和击退效果 - 更新波次生成配置
This commit is contained in:
@@ -12,4 +12,10 @@ func applyDot():
|
||||
await TickTool.millseconds(50)
|
||||
hitbox.disabled = false
|
||||
await TickTool.millseconds(50)
|
||||
BulletBase.generate(
|
||||
preload("res://components/Bullets/LaserPluse.tscn"),
|
||||
launcher,
|
||||
position,
|
||||
rotation
|
||||
)
|
||||
return true
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
extends BulletBase
|
||||
class_name LockLauncher
|
||||
|
||||
enum PositionType {
|
||||
SELF,
|
||||
TEXTURE,
|
||||
}
|
||||
|
||||
@export var target: PositionType = PositionType.SELF
|
||||
|
||||
func ai():
|
||||
if target == PositionType.SELF:
|
||||
position = launcher.position
|
||||
else:
|
||||
position = launcher.texture.global_position
|
||||
rotation = launcher.rotation
|
||||
@@ -11,8 +11,8 @@ var per: int = 0
|
||||
static var current: int = 0
|
||||
static var data: Array[Wave] = [
|
||||
# entity, minCount, maxCount, isBoss, from, to, per
|
||||
create(preload("res://components/Characters/Hen.tscn"), 1, 5, false, 8, INF, 1),
|
||||
create(preload("res://components/Characters/Chick.tscn"), 0, 0, true, 0, INF, 1)
|
||||
create(preload("res://components/Characters/Hen.tscn"), 1, 5, false, 0, INF, 1),
|
||||
create(preload("res://components/Characters/Chick.tscn"), 0, 0, true, 8, INF, 5)
|
||||
]
|
||||
|
||||
static func create(
|
||||
|
||||
@@ -13,6 +13,8 @@ class_name BulletBase
|
||||
@export var needEnergy: float = 0.0 # 发射时需要消耗的能量
|
||||
@export var autoSpawnAnimation: bool = false
|
||||
@export var autoLoopAnimation: bool = false
|
||||
@export var freeAfterSpawn: bool = false
|
||||
@export var knockback: float = 0 # 击退力,物理引擎单位
|
||||
|
||||
@onready var animator: AnimationPlayer = $"%animator"
|
||||
@onready var hitbox: CollisionShape2D = $"%hitbox"
|
||||
@@ -30,6 +32,8 @@ func _ready():
|
||||
if autoSpawnAnimation:
|
||||
animator.play("spawn")
|
||||
await animator.animation_finished
|
||||
if freeAfterSpawn:
|
||||
destroy()
|
||||
if autoLoopAnimation:
|
||||
animator.play("loop")
|
||||
dotLoop()
|
||||
|
||||
@@ -148,12 +148,13 @@ func takeDamage(bullet: BulletBase, crit: bool):
|
||||
var damage = baseDamage + baseDamage * int(crit) * fields.get(FieldStore.Entity.CRIT_DAMAGE)
|
||||
if sprinting:
|
||||
playSound("miss")
|
||||
storeEnergy(damage * 1.25)
|
||||
storeEnergy(damage * 0.5)
|
||||
damage = 0
|
||||
else:
|
||||
playSound("hurt")
|
||||
bullet.launcher.storeEnergy(damage * 0.05)
|
||||
storeEnergy(damage * -0.1)
|
||||
storeEnergy(damage * -0.25)
|
||||
position += Vector2.from_angle(bullet.position.angle_to_point(position)) * bullet.knockback
|
||||
hit.emit(damage, bullet, crit)
|
||||
healthChanged.emit(health)
|
||||
health -= damage
|
||||
@@ -162,7 +163,7 @@ func takeDamage(bullet: BulletBase, crit: bool):
|
||||
bullet.launcher.setBoss(self)
|
||||
if health <= 0:
|
||||
if isBoss:
|
||||
bullet.launcher.storeEnergy(energy)
|
||||
bullet.launcher.storeEnergy(energy * 0.5)
|
||||
bullet.launcher.setBoss(null)
|
||||
tryDie(bullet)
|
||||
func storeEnergy(value: float):
|
||||
|
||||
Reference in New Issue
Block a user