From 23e19bb0b593a041d320b732593b18efef907649 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: Sat, 22 Nov 2025 08:01:31 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E6=AD=A6=E5=99=A8):=20=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E7=81=AB=E5=B1=B1=E9=98=B4=E5=BD=B1=E5=AD=90=E5=BC=B9=E5=B9=B6?= =?UTF-8?q?=E8=B0=83=E6=95=B4=E7=81=AB=E5=B1=B1=E6=AD=A6=E5=99=A8=E5=B1=9E?= =?UTF-8?q?=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 新增火山阴影子弹类型,优化火山武器的攻击效果和动画 调整火山武器的伤害、冷却时间和旋转属性 移除多余的生命值属性,简化武器逻辑 优化狐狸爪子弹的追踪速度和碰撞体积 删除公鸡角色的多余武器配置 --- components/Bullets/FoxZhua.tscn | 12 +- components/Bullets/Volcano.tscn | 235 ++++++++++++++---- components/Bullets/VolcanoShadow.tscn | 91 +++++++ components/Characters/Rooster.tscn | 14 +- components/Weapons/Volcano.tscn | 8 +- scripts/Contents/Bullets/FoxZhua.gd | 2 +- scripts/Contents/Bullets/Volcano.gd | 14 ++ scripts/Contents/Bullets/VolcanoShadow.gd | 6 + scripts/Contents/Bullets/VolcanoShadow.gd.uid | 1 + scripts/Contents/Weapons/Volcano.gd | 9 +- 10 files changed, 320 insertions(+), 72 deletions(-) create mode 100644 components/Bullets/VolcanoShadow.tscn create mode 100644 scripts/Contents/Bullets/VolcanoShadow.gd create mode 100644 scripts/Contents/Bullets/VolcanoShadow.gd.uid diff --git a/components/Bullets/FoxZhua.tscn b/components/Bullets/FoxZhua.tscn index 8c8920f..6645bb9 100644 --- a/components/Bullets/FoxZhua.tscn +++ b/components/Bullets/FoxZhua.tscn @@ -150,7 +150,7 @@ tracks/3/path = NodePath("%hitbox:disabled") tracks/3/interp = 1 tracks/3/loop_wrap = true tracks/3/keys = { -"times": PackedFloat32Array(0, 1.4, 1.6, 2), +"times": PackedFloat32Array(0, 1.45, 1.6, 2), "transitions": PackedFloat32Array(1, 1, 1, 1), "update": 1, "values": [true, false, false, true] @@ -174,7 +174,7 @@ tracks/5/path = NodePath("%texture/..:canTrace") tracks/5/interp = 1 tracks/5/loop_wrap = true tracks/5/keys = { -"times": PackedFloat32Array(0, 1), +"times": PackedFloat32Array(0, 0.75), "transitions": PackedFloat32Array(1, 1), "update": 1, "values": [true, false] @@ -189,14 +189,13 @@ _data = { } [sub_resource type="CapsuleShape2D" id="CapsuleShape2D_45k2a"] -radius = 174.0 -height = 524.0 +radius = 91.0 +height = 290.0 [node name="FoxZhua" instance=ExtResource("1_461id")] script = ExtResource("2_rl21b") canTrace = true displayName = "爪" -damage = 15.0 penerate = 1.0 autoSpawnAnimation = true freeAfterSpawn = true @@ -217,7 +216,6 @@ position = Vector2(50, 0) texture = ExtResource("2_45k2a") [node name="hitbox" parent="." index="1"] -position = Vector2(267, -1) -rotation = 1.5707964 +position = Vector2(369, -1) shape = SubResource("CapsuleShape2D_45k2a") disabled = true diff --git a/components/Bullets/Volcano.tscn b/components/Bullets/Volcano.tscn index fcf9a49..fe50839 100644 --- a/components/Bullets/Volcano.tscn +++ b/components/Bullets/Volcano.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=19 format=3 uid="uid://8uepi7uql314"] +[gd_scene load_steps=20 format=3 uid="uid://8uepi7uql314"] [ext_resource type="PackedScene" uid="uid://crtdkysmnkith" path="res://components/Abstracts/BulletBase.tscn" id="1_gd3m7"] [ext_resource type="Script" uid="uid://ci5hswfhck5as" path="res://scripts/Contents/Bullets/Volcano.gd" id="2_w1utg"] @@ -9,7 +9,7 @@ length = 0.001 tracks/0/type = "bezier" tracks/0/imported = false tracks/0/enabled = true -tracks/0/path = NodePath("anchor/texture:position:x") +tracks/0/path = NodePath("anchor/textureSword:position:x") tracks/0/interp = 1 tracks/0/loop_wrap = true tracks/0/keys = { @@ -17,29 +17,86 @@ tracks/0/keys = { "points": PackedFloat32Array(150, -0.25, 0, 0.25, 0), "times": PackedFloat32Array(0) } -tracks/1/type = "bezier" +tracks/1/type = "value" tracks/1/imported = false tracks/1/enabled = true -tracks/1/path = NodePath("%hitbox:position:x") +tracks/1/path = NodePath("%hitbox:disabled") tracks/1/interp = 1 tracks/1/loop_wrap = true tracks/1/keys = { -"handle_modes": PackedInt32Array(0), -"points": PackedFloat32Array(167.5, -0.25, 0, 0.25, 0), -"times": PackedFloat32Array(0) -} -tracks/2/type = "value" -tracks/2/imported = false -tracks/2/enabled = true -tracks/2/path = NodePath("%hitbox:disabled") -tracks/2/interp = 1 -tracks/2/loop_wrap = true -tracks/2/keys = { "times": PackedFloat32Array(0), "transitions": PackedFloat32Array(1), "update": 1, "values": [false] } +tracks/2/type = "bezier" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("anchor:rotation") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"handle_modes": PackedInt32Array(0), +"points": PackedFloat32Array(0, -0.25, 0, 0.25, 0), +"times": PackedFloat32Array(0) +} +tracks/3/type = "value" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("%texture/../hitbox2:disabled") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} +tracks/4/type = "value" +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/path = NodePath("%texture/../hitbox3:disabled") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} +tracks/5/type = "bezier" +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/path = NodePath("anchor:scale:x") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/keys = { +"handle_modes": PackedInt32Array(0), +"points": PackedFloat32Array(1, -0.25, 0, 0.25, 0), +"times": PackedFloat32Array(0) +} +tracks/6/type = "bezier" +tracks/6/imported = false +tracks/6/enabled = true +tracks/6/path = NodePath("anchor:scale:y") +tracks/6/interp = 1 +tracks/6/loop_wrap = true +tracks/6/keys = { +"handle_modes": PackedInt32Array(0), +"points": PackedFloat32Array(1, -0.25, 0, 0.25, 0), +"times": PackedFloat32Array(0) +} +tracks/7/type = "bezier" +tracks/7/imported = false +tracks/7/enabled = true +tracks/7/path = NodePath("anchor:modulate:a") +tracks/7/interp = 1 +tracks/7/loop_wrap = true +tracks/7/keys = { +"handle_modes": PackedInt32Array(0), +"points": PackedFloat32Array(1, -0.25, 0, 0.25, 0), +"times": PackedFloat32Array(0) +} [sub_resource type="Animation" id="Animation_oinqg"] resource_name = "destroy" @@ -48,53 +105,125 @@ step = 0.1 [sub_resource type="Animation" id="Animation_o5h0y"] resource_name = "stab" -length = 0.5 -loop_mode = 1 +length = 1.7 step = 0.05 tracks/0/type = "bezier" tracks/0/imported = false tracks/0/enabled = true -tracks/0/path = NodePath("anchor/texture:position:x") +tracks/0/path = NodePath("anchor/textureSword:position:x") tracks/0/interp = 1 tracks/0/loop_wrap = true tracks/0/keys = { -"handle_modes": PackedInt32Array(0, 0, 0), -"points": PackedFloat32Array(150, -0.25, 0, 0.25, 0, 300, -0.083333336, -8.333334, 0, 0, 150, -0.25, 0, 0.25, 0), -"times": PackedFloat32Array(0, 0.25, 0.5) +"handle_modes": PackedInt32Array(0, 0), +"points": PackedFloat32Array(150, -0.25, 0, 0.25, 0, 300, -0.083333336, -8.333334, 0, 0), +"times": PackedFloat32Array(0, 0.25) } -tracks/1/type = "bezier" +tracks/1/type = "value" tracks/1/imported = false tracks/1/enabled = true -tracks/1/path = NodePath("%hitbox:position:x") +tracks/1/path = NodePath("%hitbox:disabled") tracks/1/interp = 1 tracks/1/loop_wrap = true tracks/1/keys = { -"handle_modes": PackedInt32Array(0, 2, 0), -"points": PackedFloat32Array(165, -0.25, 0, 0.25, 0, 315, -0.041666668, 0, 0.041666668, 0, 165, -0.25, 0, 0.25, 0), -"times": PackedFloat32Array(0, 0.25, 0.5) +"times": PackedFloat32Array(0, 0.4), +"transitions": PackedFloat32Array(1, 1), +"update": 1, +"values": [false, true] } -tracks/2/type = "value" +tracks/2/type = "bezier" tracks/2/imported = false tracks/2/enabled = true -tracks/2/path = NodePath("%hitbox:disabled") +tracks/2/path = NodePath("anchor:rotation") tracks/2/interp = 1 tracks/2/loop_wrap = true tracks/2/keys = { -"times": PackedFloat32Array(0, 0.1, 0.25, 0.4), -"transitions": PackedFloat32Array(1, 1, 1, 1), -"update": 1, -"values": [true, false, true, false] +"handle_modes": PackedInt32Array(0, 0, 0, 2, 2, 2), +"points": PackedFloat32Array(0, -0.25, 0, 0.25, 0, 0, -0.25, 0, 0.25, 0, 0.7853982, -0.06585455, -0.14365458, 0.2, 0, -0.7853982, -0.06666666, 0.2617994, 0, 0, -0.7853982, -0.033333343, 0, 0, 0, 5.497787, -0.049999993, -1.0471975, 0, 0), +"times": PackedFloat32Array(0, 0.3, 0.6, 1, 1.2, 1.5) +} +tracks/3/type = "value" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("%texture/../hitbox2:disabled") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0, 0.8, 1), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 1, +"values": [true, false, true] +} +tracks/4/type = "value" +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/path = NodePath("%texture/../hitbox3:disabled") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/keys = { +"times": PackedFloat32Array(0, 1.2, 1.5), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 1, +"values": [true, false, true] +} +tracks/5/type = "bezier" +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/path = NodePath("anchor:scale:x") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/keys = { +"handle_modes": PackedInt32Array(0, 2), +"points": PackedFloat32Array(1, -0.25, 0, 0.25, 0, 1e-05, -0.033333343, 0.16666502, 0, 0), +"times": PackedFloat32Array(1.5, 1.7) +} +tracks/6/type = "bezier" +tracks/6/imported = false +tracks/6/enabled = true +tracks/6/path = NodePath("anchor:scale:y") +tracks/6/interp = 1 +tracks/6/loop_wrap = true +tracks/6/keys = { +"handle_modes": PackedInt32Array(0, 2), +"points": PackedFloat32Array(1, -0.25, 0, 0.25, 0, 1e-05, -0.033333343, 0.16666502, 0, 0), +"times": PackedFloat32Array(1.5, 1.7) +} +tracks/7/type = "bezier" +tracks/7/imported = false +tracks/7/enabled = true +tracks/7/path = NodePath("anchor:modulate:a") +tracks/7/interp = 1 +tracks/7/loop_wrap = true +tracks/7/keys = { +"handle_modes": PackedInt32Array(0, 2), +"points": PackedFloat32Array(1, -0.25, 0, 0.25, 0, 0, -0.033333343, 0.16666669, 0, 0), +"times": PackedFloat32Array(1.5, 1.7) +} +tracks/8/type = "method" +tracks/8/imported = false +tracks/8/enabled = true +tracks/8/path = NodePath("%texture/..") +tracks/8/interp = 1 +tracks/8/loop_wrap = true +tracks/8/keys = { +"times": PackedFloat32Array(1.2, 1.22, 1.24), +"transitions": PackedFloat32Array(1, 1, 1), +"values": [{ +"args": [], +"method": &"generateShadow" +}, { +"args": [], +"method": &"generateShadow" +}, { +"args": [], +"method": &"generateShadow" +}] } - -[sub_resource type="Animation" id="Animation_kmogx"] -resource_name = "spawn" [sub_resource type="AnimationLibrary" id="AnimationLibrary_w1utg"] _data = { &"RESET": SubResource("Animation_w1utg"), &"destroy": SubResource("Animation_oinqg"), -&"loop": SubResource("Animation_o5h0y"), -&"spawn": SubResource("Animation_kmogx") +&"spawn": SubResource("Animation_o5h0y") } [sub_resource type="Curve" id="Curve_w1utg"] @@ -141,14 +270,21 @@ color_initial_ramp = SubResource("GradientTexture1D_b5nxd") alpha_curve = SubResource("CurveTexture_o5h0y") [sub_resource type="RectangleShape2D" id="RectangleShape2D_w1utg"] -size = Vector2(113, 34) +size = Vector2(273.5, 34) + +[sub_resource type="CapsuleShape2D" id="CapsuleShape2D_w1utg"] +radius = 66.75 +height = 322.0 + +[sub_resource type="CircleShape2D" id="CircleShape2D_w1utg"] +radius = 390.2512 [node name="Volcano" instance=ExtResource("1_gd3m7")] script = ExtResource("2_w1utg") +displayName = "火山" penerate = 1.0 -lifeTime = 6000.0 -autoLoopAnimation = true -recoil = 1.0 +autoSpawnAnimation = true +freeAfterSpawn = true [node name="animator" parent="texture" index="0"] libraries = { @@ -156,14 +292,16 @@ libraries = { } [node name="anchor" type="Node2D" parent="texture" index="1"] +unique_name_in_owner = true -[node name="texture" type="Sprite2D" parent="texture/anchor" index="0"] +[node name="textureSword" type="Sprite2D" parent="texture/anchor" index="0"] +unique_name_in_owner = true position = Vector2(150, 0) rotation = 0.7853982 scale = Vector2(1.5, 1.5) texture = ExtResource("2_wwxm2") -[node name="trail" type="GPUParticles2D" parent="texture/anchor/texture" index="0"] +[node name="trail" type="GPUParticles2D" parent="texture/anchor/textureSword" index="0"] position = Vector2(27.341467, -27.341467) rotation = -0.7853982 scale = Vector2(0.9999999, 0.9999999) @@ -171,5 +309,14 @@ amount = 200 process_material = SubResource("ParticleProcessMaterial_xrrxo") [node name="hitbox" parent="." index="1"] -position = Vector2(167.5, 0) +position = Vector2(245.25, 0) shape = SubResource("RectangleShape2D_w1utg") + +[node name="hitbox2" type="CollisionShape2D" parent="." index="2"] +position = Vector2(314, 0) +shape = SubResource("CapsuleShape2D_w1utg") +disabled = true + +[node name="hitbox3" type="CollisionShape2D" parent="." index="3"] +shape = SubResource("CircleShape2D_w1utg") +disabled = true diff --git a/components/Bullets/VolcanoShadow.tscn b/components/Bullets/VolcanoShadow.tscn new file mode 100644 index 0000000..c53bb4c --- /dev/null +++ b/components/Bullets/VolcanoShadow.tscn @@ -0,0 +1,91 @@ +[gd_scene load_steps=8 format=3 uid="uid://doytyuk72vr74"] + +[ext_resource type="PackedScene" uid="uid://crtdkysmnkith" path="res://components/Abstracts/BulletBase.tscn" id="1_4oiyn"] +[ext_resource type="Texture2D" uid="uid://ctmxadaowx5ps" path="res://resources/weapons/Volcano.webp" id="2_668mx"] +[ext_resource type="Script" uid="uid://d2jh0hihcc0uj" path="res://scripts/Contents/Bullets/VolcanoShadow.gd" id="2_i7b6y"] + +[sub_resource type="Animation" id="Animation_i7b6y"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("static:modulate") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Color(1, 1, 1, 1)] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("static:scale") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(1, 1)] +} + +[sub_resource type="Animation" id="Animation_668mx"] +resource_name = "spawn" +step = 0.05 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("static:modulate") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.1, 0.90000004, 1), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [Color(1, 1, 1, 0), Color(1, 1, 1, 0.70000005), Color(1, 1, 1, 0.70000005), Color(1, 1, 1, 0)] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("static:scale") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 0.1, 0.90000004, 1), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [Vector2(0, 0), Vector2(0.8, 0.8), Vector2(0.8, 0.8), Vector2(0, 0)] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_i7b6y"] +_data = { +&"RESET": SubResource("Animation_i7b6y"), +&"spawn": SubResource("Animation_668mx") +} + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_668mx"] +size = Vector2(76, 12) + +[node name="VolcanoShadow" instance=ExtResource("1_4oiyn")] +script = ExtResource("2_i7b6y") +speed = 30.0 +penerate = 1.0 +penerateDamageReduction = 0.2 +autoSpawnAnimation = true +freeAfterSpawn = true + +[node name="texture" parent="." index="0"] +rotation = 0.7853982 + +[node name="animator" parent="texture" index="0"] +libraries = { +&"": SubResource("AnimationLibrary_i7b6y") +} + +[node name="static" type="Sprite2D" parent="texture" index="1"] +texture = ExtResource("2_668mx") + +[node name="hitbox" parent="." index="1"] +shape = SubResource("RectangleShape2D_668mx") diff --git a/components/Characters/Rooster.tscn b/components/Characters/Rooster.tscn index 3506911..1a1a092 100644 --- a/components/Characters/Rooster.tscn +++ b/components/Characters/Rooster.tscn @@ -1,10 +1,8 @@ -[gd_scene load_steps=16 format=3 uid="uid://bm7ymrri6pykb"] +[gd_scene load_steps=14 format=3 uid="uid://bm7ymrri6pykb"] [ext_resource type="PackedScene" uid="uid://cvogxi7mktumf" path="res://components/Abstracts/EntityBase.tscn" id="1_e5pl8"] [ext_resource type="Script" uid="uid://cthtupc6dtbav" path="res://scripts/Contents/Characters/Rooster.gd" id="2_oqdqd"] [ext_resource type="AudioStream" uid="uid://dclinyhu256xi" path="res://resources/sounds/effect/Low Whoosh.mp3" id="3_4syso"] -[ext_resource type="PackedScene" uid="uid://dgka15811lrrj" path="res://components/Weapons/Bow.tscn" id="3_fkh3f"] -[ext_resource type="PackedScene" uid="uid://c0n3igy4hucrg" path="res://components/Weapons/PurpleCrystal.tscn" id="3_jluqw"] [ext_resource type="AudioStream" uid="uid://cdrevrq7n6yqa" path="res://resources/sounds/effect/Boing.mp3" id="4_66s6c"] [ext_resource type="PackedScene" uid="uid://u0djqwuuysp8" path="res://components/Weapons/Volcano.tscn" id="4_jluqw"] [ext_resource type="AudioStream" uid="uid://benyec5bqni0b" path="res://resources/sounds/effect/Chomp.wav" id="4_k0yme"] @@ -58,15 +56,7 @@ metadata/_edit_vertical_guides_ = [71.0] [node name="weaponStore" parent="." index="1"] process_mode = 4 -[node name="Bow" parent="weaponStore" index="0" instance=ExtResource("3_fkh3f")] -offset_bottom = 374.0 -debugRebuild = false - -[node name="PurpleCrystal" parent="weaponStore" index="1" instance=ExtResource("3_jluqw")] -offset_bottom = 350.0 -debugRebuild = false - -[node name="Volcano" parent="weaponStore" index="2" instance=ExtResource("4_jluqw")] +[node name="Volcano" parent="weaponStore" index="0" instance=ExtResource("4_jluqw")] debugRebuild = false [node name="sprint" parent="sounds" index="0"] diff --git a/components/Weapons/Volcano.tscn b/components/Weapons/Volcano.tscn index c3fe3f7..8447bfb 100644 --- a/components/Weapons/Volcano.tscn +++ b/components/Weapons/Volcano.tscn @@ -12,17 +12,15 @@ quality = 4 typeTopic = 2 costBeachball = 300 store = { -"atk": 10, -"life": 5, +"atk": 20, "rotate": 0.1 } storeType = { "atk": 1, -"life": 0, "rotate": 2 } descriptionTemplate = "召唤1支[b]火山[/b],以$rotate的效率跟随鼠标指向,接触时造成$atk点伤害。" -cooldown = 5000.0 +cooldown = 2000.0 debugRebuild = true [node name="avatar" parent="container/info" index="0"] @@ -40,4 +38,4 @@ quality = 4 typeTopic = 2 [node name="description" parent="container" index="2"] -text = "[center]召唤1支[b]火山[/b],以[color=cyan]10%[/color]的效率跟随鼠标指向,接触时造成[color=cyan]10[/color]点伤害。[/center]" +text = "[center]召唤1支[b]火山[/b],以[color=cyan]10%[/color]的效率跟随鼠标指向,接触时造成[color=cyan]20[/color]点伤害。[/center]" diff --git a/scripts/Contents/Bullets/FoxZhua.gd b/scripts/Contents/Bullets/FoxZhua.gd index 0b2c712..074038e 100644 --- a/scripts/Contents/Bullets/FoxZhua.gd +++ b/scripts/Contents/Bullets/FoxZhua.gd @@ -5,4 +5,4 @@ class_name FoxZhua func ai(): if canTrace: - PresetBulletAI.lerpPosition(self, launcher.currentFocusedBoss.getTrackingAnchor() - Vector2(0, 200), 0.1) + PresetBulletAI.lerpPosition(self, launcher.currentFocusedBoss.getTrackingAnchor() - Vector2(0, 200), 0.07) diff --git a/scripts/Contents/Bullets/Volcano.gd b/scripts/Contents/Bullets/Volcano.gd index d56f917..c02c413 100644 --- a/scripts/Contents/Bullets/Volcano.gd +++ b/scripts/Contents/Bullets/Volcano.gd @@ -1,6 +1,9 @@ extends BulletBase class_name Volcano +@onready var textureSword: Sprite2D = $%textureSword +@onready var anchor: Node2D = $%anchor + var rotates: float = 0 func register(): @@ -12,3 +15,14 @@ func ai(): position.angle_to_point(get_global_mouse_position()), rotates ) + +func generateShadow(): + for i in BulletBase.generate( + ComponentManager.getBullet("VolcanoShadow"), + launcher, + textureSword.global_position, + anchor.global_rotation, + false, false, true, true + ): + if i is VolcanoShadow: + i.damage = damage diff --git a/scripts/Contents/Bullets/VolcanoShadow.gd b/scripts/Contents/Bullets/VolcanoShadow.gd new file mode 100644 index 0000000..0840bed --- /dev/null +++ b/scripts/Contents/Bullets/VolcanoShadow.gd @@ -0,0 +1,6 @@ +extends BulletBase +class_name VolcanoShadow + +func ai(): + speed = initialSpeed * (1 - animator.current_animation_position / animator.current_animation_length) + PresetBulletAI.forward(self, rotation) diff --git a/scripts/Contents/Bullets/VolcanoShadow.gd.uid b/scripts/Contents/Bullets/VolcanoShadow.gd.uid new file mode 100644 index 0000000..b57228d --- /dev/null +++ b/scripts/Contents/Bullets/VolcanoShadow.gd.uid @@ -0,0 +1 @@ +uid://d2jh0hihcc0uj diff --git a/scripts/Contents/Weapons/Volcano.gd b/scripts/Contents/Weapons/Volcano.gd index 5ec9a55..49ee374 100644 --- a/scripts/Contents/Weapons/Volcano.gd +++ b/scripts/Contents/Weapons/Volcano.gd @@ -4,11 +4,14 @@ extends Weapon func update(to: int, origin: Dictionary, _entity: EntityBase): origin["atk"] += 3 * to * soulLevel origin["rotate"] += 0.015 * to * soulLevel - origin["life"] += 0.1 * to * soulLevel return origin func attack(entity: EntityBase): - for j in BulletBase.generate(ComponentManager.getBullet("Volcano"), entity, entity.findWeaponAnchor("normal"), entity.position.angle_to_point(entity.get_global_mouse_position()), false, false, true, true): + for j in BulletBase.generate( + ComponentManager.getBullet("Volcano"), + entity, + entity.findWeaponAnchor("normal"), + entity.position.angle_to_point(entity.get_global_mouse_position()), false, false, true, true + ): var bullet: Volcano = j bullet.damage = readStore("atk") bullet.rotates = readStore("rotate") - bullet.lifeTime = readStore("life") * 1000