From b5edbc5b1331218c490c3dfe3797c7956bf8a1aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=A8=E8=90=BD=E5=9F=BA=E5=9B=B4=E8=99=BE?= <3161880837@qq.com> Date: Sun, 14 Dec 2025 13:36:48 +0800 Subject: [PATCH] =?UTF-8?q?fix(EffectController):=20=E4=BF=AE=E5=A4=8DoneS?= =?UTF-8?q?hot=E6=95=88=E6=9E=9C=E5=90=8E=E6=9C=AA=E9=87=8A=E6=94=BE?= =?UTF-8?q?=E8=87=AA=E8=BA=AB=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit feat(EntityBase): 添加获取生命值百分比的方法 refactor(BulletBase): 重命名scene变量为parentScene以提高可读性 fix(BlueCrystal): 修正弹道追踪旋转计算错误 style(EffectBase): 调整场景文件格式和属性顺序 --- components/Abstracts/EffectBase.tscn | 4 ++-- scripts/Contents/Bullets/BlueCrystal.gd | 2 +- scripts/Statemachine/BulletBase.gd | 10 +++++----- scripts/Statemachine/EffectController.gd | 1 + scripts/Statemachine/EntityBase.gd | 2 ++ 5 files changed, 11 insertions(+), 8 deletions(-) diff --git a/components/Abstracts/EffectBase.tscn b/components/Abstracts/EffectBase.tscn index 804d7a0..e43a974 100644 --- a/components/Abstracts/EffectBase.tscn +++ b/components/Abstracts/EffectBase.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=3 format=3 uid="uid://bcvuuy2m0pke0"] -[ext_resource type="Script" path="res://scripts/Statemachine/EffectController.gd" id="1_pt2rk"] +[ext_resource type="Script" uid="uid://0iwnvhdh645p" path="res://scripts/Statemachine/EffectController.gd" id="1_pt2rk"] [sub_resource type="ShaderMaterial" id="ShaderMaterial_7cv4k"] @@ -16,8 +16,8 @@ unique_name_in_owner = true [node name="particles" type="GPUParticles2D" parent="."] unique_name_in_owner = true amount = 30 -process_material = SubResource("ShaderMaterial_7cv4k") explosiveness = 1.0 +process_material = SubResource("ShaderMaterial_7cv4k") [node name="stage" type="ColorRect" parent="."] unique_name_in_owner = true diff --git a/scripts/Contents/Bullets/BlueCrystal.gd b/scripts/Contents/Bullets/BlueCrystal.gd index c228e04..4e35b37 100644 --- a/scripts/Contents/Bullets/BlueCrystal.gd +++ b/scripts/Contents/Bullets/BlueCrystal.gd @@ -8,7 +8,7 @@ func ai(): if is_instance_valid(tracer): var tracker = tracer.getTrackingAnchor() var targetAngle = position.angle_to_point(tracker) - trail.rotation = - Vector2.from_angle(rotation).angle_to(Vector2.from_angle(targetAngle)) * 0.75 / (speed / initialSpeed) + trail.rotation = - Vector2.from_angle(rotation).angle_to(Vector2.from_angle(targetAngle)) / (speed / initialSpeed) PresetBulletAI.trace(self, tracker, 0.07) else: trail.rotation = 0 diff --git a/scripts/Statemachine/BulletBase.gd b/scripts/Statemachine/BulletBase.gd index 5309f2b..36c7333 100644 --- a/scripts/Statemachine/BulletBase.gd +++ b/scripts/Statemachine/BulletBase.gd @@ -35,7 +35,7 @@ var isChildRefract: bool = false var initialSpeed: float = 0 var initialDamage: float = 0 var speedScale: float = 1 -var scene: PackedScene = null +var parentScene: PackedScene = null func _ready(): initialSpeed = speed @@ -146,8 +146,8 @@ func trySplit(): func tryRefract(): if is_instance_valid(launcher) and !isChildRefract: var value = launcher.fields.get(FieldStore.Entity.BULLET_REFRACTION) - var entity = EntityTool.findClosetEntity(position, get_tree(), !launcher.isPlayer(), launcher.isPlayer()) for i in range(MathTool.shrimpRate(value)): + var entity = EntityTool.findClosetEntity(position, get_tree(), !launcher.isPlayer(), launcher.isPlayer(), [launcher]) if is_instance_valid(entity): refract(entity, i, value, value - floor(value)) @@ -166,7 +166,7 @@ func register(): pass func split(index: int, total: int, _lastBullet: float): BulletBase.generate( - scene, + parentScene, launcher, position, rotation + deg_to_rad(360.0 / total * index), @@ -175,7 +175,7 @@ func split(index: int, total: int, _lastBullet: float): ) func refract(entity: EntityBase, _index: int, _total: int, _lastBullet: float): BulletBase.generate( - scene, + parentScene, launcher, position, position.angle_to_point(entity.position) if is_instance_valid(entity) else randf_range(0, deg_to_rad(360)), @@ -202,7 +202,7 @@ static func generate( instance.isChildRefract = asChildRefract instance.launcher = launchBy instance.position = spawnPosition - instance.scene = bullet + instance.parentScene = bullet instance.rotation = spawnRotation + deg_to_rad(launchBy.fields.get(FieldStore.Entity.OFFSET_SHOOT) * randf_range(-1, 1) * int(!ignoreOffset)) if addToWorld: WorldManager.rootNode.call_deferred("add_child", instance) diff --git a/scripts/Statemachine/EffectController.gd b/scripts/Statemachine/EffectController.gd index e1d93b0..3158a2c 100644 --- a/scripts/Statemachine/EffectController.gd +++ b/scripts/Statemachine/EffectController.gd @@ -24,6 +24,7 @@ func shot(): if oneShot: await cloned.finished cloned.queue_free() + queue_free() static func create(scene: PackedScene, spawnPosition: Vector2, parent: Node2D = null) -> EffectController: var cloned = scene.instantiate() as EffectController diff --git a/scripts/Statemachine/EntityBase.gd b/scripts/Statemachine/EntityBase.gd index 0c5fdd6..7605d13 100644 --- a/scripts/Statemachine/EntityBase.gd +++ b/scripts/Statemachine/EntityBase.gd @@ -400,6 +400,8 @@ func useItem(items: Dictionary): func getItem(items: Dictionary): for item in items: inventory[item] = clamp(inventory[item] + items[item], 0, inventoryMax[item]) +func getHealthPercent(): + return health / fields[FieldStore.Entity.MAX_HEALTH] func getMySummons() -> Array[SummonBase]: var result: Array[SummonBase] = [] for entity in get_tree().get_nodes_in_group("players" if isPlayer() else "mobs"):