1
1
mirror of https://github.com/Rundll86/Dog-Lynx-And-HCN.git synced 2026-05-28 15:01:53 +08:00

refactor(BulletBase/EntityBase): 重构子弹和实体属性系统

将子弹的fields属性拆分为独立的speed、damage和penerate变量
为所有子弹和实体添加register方法用于初始化属性
统一攻击冷却时间管理为attackCooldownMap
移除FieldStore中不再使用的Bullet相关枚举和映射
This commit is contained in:
2025-08-29 10:50:22 +08:00
parent cf8368a946
commit 171dbb1131
14 changed files with 56 additions and 71 deletions
+5 -1
View File
@@ -1,10 +1,14 @@
extends BulletBase
class_name BigLaser # 这个子弹是玩家的超级武器,耗能高,dps也高
func register():
speed = 0
damage = 35
penerate = 1
func spawn():
CameraManager.shake(5000, 150) # 激光会运行5秒(5000毫秒),期间震屏超高强度
CameraManager.playAnimation("bigLaser")
fields[FieldStore.Bullet.DAMAGE] *= launcher.fields[FieldStore.Entity.ATTACK_SPEED]
damage *= launcher.fields[FieldStore.Entity.ATTACK_SPEED]
func ai():
rotation = lerp_angle(rotation, ((get_global_mouse_position() - position).angle()), 0.1)
position = launcher.texture.global_position
+2
View File
@@ -3,6 +3,8 @@ class_name Diamond
const traceTime = 2000
func register():
damage = 2
func ai():
rotation = lerp_angle(rotation, position.angle_to_point(launcher.currentFocusedBoss.position), 0.1 * clamp((traceTime - timeLived()) / traceTime, 0, INF))
canDamageSelf = !(timeLived() >= traceTime)
+3 -4
View File
@@ -1,10 +1,9 @@
extends BulletBase
class_name FireScan
func _ready():
fields[FieldStore.Bullet.SPEED] = 5
fields[FieldStore.Bullet.DAMAGE] = 20
super._ready()
func register():
speed = 5
damage = 20
func ai():
forward(Vector2.from_angle(rotation))
+3
View File
@@ -1,5 +1,8 @@
extends BulletBase
class_name Pencil
func register():
damage = 20
func spawn():
await TickTool.millseconds(1000)
hitbox.disabled = false
+2
View File
@@ -1,5 +1,7 @@
extends BulletBase
class_name Star
func register():
damage = 1
func ai():
forward(Vector2.from_angle(rotation))
-15
View File
@@ -1,17 +1,2 @@
extends EntityBase
class_name Bear
func ai():
pass
func attack(type):
if type == 0:
var weaponPos = findWeaponAnchor("normal")
return BulletBase.generate(preload("res://components/Bullets/PurpleCrystal.tscn"), self, weaponPos, (get_global_mouse_position() - weaponPos).angle())
func sprint():
move(Vector2(
Input.get_axis("m_left", "m_right"),
Input.get_axis("m_up", "m_down")
) * sprintMultiplier, true)
func heal(count: float):
health += count
DamageLabel.create(-count, false, damageAnchor.global_position + MathTool.randv2_range(GameRule.damageLabelSpawnOffset))
+5 -3
View File
@@ -5,10 +5,12 @@ class_name Chick
const laserCount = 4
func _ready():
func register():
fields[FieldStore.Entity.MAX_HEALTH] = 2000
fields[FieldStore.Entity.MOVEMENT_SPEED] = 0.1
super._ready()
fields[FieldStore.Entity.MOVEMENT_SPEED] = 0.35
attackCooldownMap[0] = 2000
attackCooldownMap[1] = 3000
attackCooldownMap[2] = 100
func ai():
move(currentFocusedBoss.position - position)
+3 -4
View File
@@ -1,14 +1,13 @@
extends EntityBase
class_name Hen
func _ready():
func register():
fields[FieldStore.Entity.MAX_HEALTH] = 75
fields[FieldStore.Entity.MOVEMENT_SPEED] = 0.25
fields[FieldStore.Entity.MOVEMENT_SPEED] = 0.15
fields[FieldStore.Entity.OFFSET_SHOOT] = 10
super._ready()
func ai():
cooldownUnit = randi_range(1500, 4000)
attackCooldownMap[0] = randi_range(1500, 4000)
move(currentFocusedBoss.position - position)
tryAttack(0)
func attack(type):
+3 -2
View File
@@ -1,6 +1,9 @@
extends EntityBase
class_name Rooster
func register():
attackCooldownMap[0] = 200
attackCooldownMap[1] = 6000
func ai():
texture.play("walk")
var direction = Vector2(
@@ -11,10 +14,8 @@ func ai():
if direction.length() == 0:
texture.play("idle")
if Input.is_action_pressed("attack"):
cooldownUnit = 200
tryAttack(0)
elif Input.is_action_pressed("attack2"):
cooldownUnit = 6000
tryAttack(1)
if Input.is_action_just_pressed("sprint"):
trySprint()