diff --git a/DungeonShooting_Godot/excel/EnemyBase.xlsx b/DungeonShooting_Godot/excel/EnemyBase.xlsx
index 362bdeb..8e304ea 100644
--- a/DungeonShooting_Godot/excel/EnemyBase.xlsx
+++ b/DungeonShooting_Godot/excel/EnemyBase.xlsx
Binary files differ
diff --git a/DungeonShooting_Godot/prefab/role/Role0001.tscn b/DungeonShooting_Godot/prefab/role/Role0001.tscn
index 11cf968..afa4f42 100644
--- a/DungeonShooting_Godot/prefab/role/Role0001.tscn
+++ b/DungeonShooting_Godot/prefab/role/Role0001.tscn
@@ -47,7 +47,7 @@
[node name="AnimatedSprite" parent="." index="2"]
material = SubResource("ShaderMaterial_8hgu2")
sprite_frames = ExtResource("4_galcc")
-animation = &"roll"
+animation = &"die"
[node name="Collision" parent="." index="3"]
position = Vector2(0, 0)
diff --git a/DungeonShooting_Godot/prefab/role/enemy/Enemy0003.tscn b/DungeonShooting_Godot/prefab/role/enemy/Enemy0003.tscn
new file mode 100644
index 0000000..78ac185
--- /dev/null
+++ b/DungeonShooting_Godot/prefab/role/enemy/Enemy0003.tscn
@@ -0,0 +1,86 @@
+[gd_scene load_steps=13 format=3 uid="uid://87kfirk3fugd"]
+
+[ext_resource type="PackedScene" uid="uid://dbrig6dq441wo" path="res://prefab/role/template/AiTemplate.tscn" id="1_34027"]
+[ext_resource type="Script" path="res://src/game/activity/role/enemy/Enemy.cs" id="2_pakvr"]
+[ext_resource type="Shader" path="res://resource/shader/Blend.gdshader" id="3_egkdu"]
+[ext_resource type="SpriteFrames" uid="uid://cnk1wmk3uy4aa" path="res://resource/spriteFrames/role/Enemy0003.tres" id="4_sd22a"]
+[ext_resource type="Animation" uid="uid://b4mgiysicdk2b" path="res://resource/animation/enemy/Enemy_reset.res" id="5_5area"]
+[ext_resource type="Animation" uid="uid://gvkkxspcdwrp" path="res://resource/animation/enemy/Enemy_astonished.res" id="6_o4vh5"]
+[ext_resource type="Animation" uid="uid://16rxpnsgj5tl" path="res://resource/animation/enemy/Enemy_notify.res" id="7_y8dcl"]
+[ext_resource type="Animation" uid="uid://cmje7jsgrhgmx" path="res://resource/animation/enemy/Enemy_query.res" id="8_7j8ux"]
+
+[sub_resource type="ShaderMaterial" id="ShaderMaterial_3nkur"]
+resource_local_to_scene = true
+shader = ExtResource("3_egkdu")
+shader_parameter/blend = Color(0, 0, 0, 0.470588)
+shader_parameter/schedule = 1.0
+shader_parameter/modulate = Color(1, 1, 1, 1)
+shader_parameter/show_outline = true
+shader_parameter/outline_color = Color(0, 0, 0, 1)
+shader_parameter/outline_rainbow = false
+shader_parameter/outline_use_blend = true
+shader_parameter/grey = 0.0
+
+[sub_resource type="ShaderMaterial" id="ShaderMaterial_2kup1"]
+resource_local_to_scene = true
+shader = ExtResource("3_egkdu")
+shader_parameter/blend = Color(1, 1, 1, 1)
+shader_parameter/schedule = 0.0
+shader_parameter/modulate = Color(1, 1, 1, 1)
+shader_parameter/show_outline = true
+shader_parameter/outline_color = Color(0, 0, 0, 1)
+shader_parameter/outline_rainbow = false
+shader_parameter/outline_use_blend = true
+shader_parameter/grey = 0.0
+
+[sub_resource type="RectangleShape2D" id="RectangleShape2D_rkrey"]
+size = Vector2(12, 18)
+
+[sub_resource type="AnimationLibrary" id="AnimationLibrary_ur1ug"]
+_data = {
+"RESET": ExtResource("5_5area"),
+"astonished": ExtResource("6_o4vh5"),
+"notify": ExtResource("7_y8dcl"),
+"query": ExtResource("8_7j8ux")
+}
+
+[node name="Enemy0003" node_paths=PackedStringArray("ViewRay", "NavigationAgent2D", "NavigationPoint", "FirePoint", "ViewArea", "ViewAreaCollision", "HurtArea", "HurtCollision", "InteractiveArea", "InteractiveCollision", "TipRoot", "TipSprite", "AnimationPlayer", "MountPoint", "BackMountPoint", "MeleeAttackArea", "MeleeAttackCollision", "ShadowSprite", "AnimatedSprite", "Collision") instance=ExtResource("1_34027")]
+script = ExtResource("2_pakvr")
+ViewRay = NodePath("ViewRay")
+NavigationAgent2D = NodePath("NavigationPoint/NavigationAgent2D")
+NavigationPoint = NodePath("NavigationPoint")
+FirePoint = NodePath("FirePoint")
+ViewArea = NodePath("MountPoint/ViewArea")
+ViewAreaCollision = NodePath("MountPoint/ViewArea/ViewAreaCollision")
+HurtArea = NodePath("HurtArea")
+HurtCollision = NodePath("HurtArea/HurtCollision")
+InteractiveArea = NodePath("InteractiveArea")
+InteractiveCollision = NodePath("InteractiveArea/InteractiveCollision")
+TipRoot = NodePath("TipRoot")
+TipSprite = NodePath("TipRoot/TipSprite")
+AnimationPlayer = NodePath("AnimationPlayer")
+MountPoint = NodePath("MountPoint")
+BackMountPoint = NodePath("BackMountPoint")
+MeleeAttackArea = NodePath("MountPoint/MeleeAttackArea")
+MeleeAttackCollision = NodePath("MountPoint/MeleeAttackArea/MeleeAttackCollision")
+ShadowSprite = NodePath("ShadowSprite")
+AnimatedSprite = NodePath("AnimatedSprite")
+Collision = NodePath("Collision")
+
+[node name="ShadowSprite" parent="." index="0"]
+material = SubResource("ShaderMaterial_3nkur")
+
+[node name="AnimatedSprite" parent="." index="2"]
+material = SubResource("ShaderMaterial_2kup1")
+sprite_frames = ExtResource("4_sd22a")
+
+[node name="HurtCollision" parent="HurtArea" index="0"]
+shape = SubResource("RectangleShape2D_rkrey")
+
+[node name="FirePoint" parent="." index="8"]
+position = Vector2(2, -9)
+
+[node name="AnimationPlayer" parent="." index="11"]
+libraries = {
+"": SubResource("AnimationLibrary_ur1ug")
+}
diff --git a/DungeonShooting_Godot/resource/config/EnemyBase.json b/DungeonShooting_Godot/resource/config/EnemyBase.json
index 054f597..e8c56ec 100644
--- a/DungeonShooting_Godot/resource/config/EnemyBase.json
+++ b/DungeonShooting_Godot/resource/config/EnemyBase.json
@@ -10,8 +10,8 @@
"AttackInterval": 0,
"CanPickUpWeapon": true,
"ViewRange": 250,
- "TailAfterViewRange": 400,
- "BackViewRange": 50,
+ "TailAfterViewRange": 300,
+ "ViewAngleRange": 150,
"Gold": [
-2,
3
@@ -29,7 +29,7 @@
"CanPickUpWeapon": false,
"ViewRange": 200,
"TailAfterViewRange": 300,
- "BackViewRange": 50,
+ "ViewAngleRange": 150,
"Gold": [
-2,
4
diff --git a/DungeonShooting_Godot/resource/material/BleB865.tmp b/DungeonShooting_Godot/resource/material/BleB865.tmp
deleted file mode 100644
index a40db2f..0000000
--- a/DungeonShooting_Godot/resource/material/BleB865.tmp
+++ /dev/null
@@ -1,51 +0,0 @@
-shader_type canvas_item;
-
-//混合颜色
-uniform vec4 blend : source_color = vec4(1.0, 1.0, 1.0, 1.0);
-//混合度
-uniform float schedule : hint_range(0.0, 1.0) = 0.0;
-//透明度
-//uniform float alpha : hint_range(0.0, 1.0) = 1.0;
-uniform vec4 modulate : source_color = vec4(1.0, 1.0, 1.0, 1.0);
-
-//------------------ 轮廓相关 --------------
-uniform bool show_outline = true;
-//轮廓颜色
-uniform vec4 outline_color : source_color = vec4(0.0, 0.0, 0.0, 1.0);
-//是否是彩虹轮廓
-uniform bool outline_rainbow = false;
-//彩虹轮廓变化周期
-const float frequency = 0.25;
-const float light_offset = 0.5;
-
-void fragment() {
- //显示轮廓
- if (show_outline) {
- vec2 size = TEXTURE_PIXEL_SIZE;
- float outline;
- outline = texture(TEXTURE, UV + vec2(-size.x, 0)).a;
- outline += texture(TEXTURE, UV + vec2(0, size.y)).a;
- outline += texture(TEXTURE, UV + vec2(size.x, 0)).a;
- outline += texture(TEXTURE, UV + vec2(0, -size.y)).a;
- outline = min(outline, 1.0);
-
- vec4 animated_line_color = vec4(
- light_offset + sin(2.0 * 3.14 * frequency * TIME),
- light_offset + sin(2.0 * 3.14 * frequency * TIME + radians(120.0)),
- light_offset + sin(2.0 * 3.14 * frequency * TIME + radians(240.0)),
- 1.0
- );
-
- vec4 color = texture(TEXTURE, UV);
- if (outline_rainbow){
- COLOR = mix(color, animated_line_color, outline - color.a);
- } else {
- COLOR = mix(color, outline_color , outline - color.a);
- }
- }
-
- vec4 col = mix(COLOR, blend, schedule);
- col = mix(vec4(0.0, 0.0, 0.0, 0.0), col, COLOR.a);
- col *= modulate;
- COLOR = col;
-}
diff --git a/DungeonShooting_Godot/resource/material/BleFA6E.tmp b/DungeonShooting_Godot/resource/material/BleFA6E.tmp
deleted file mode 100644
index a40db2f..0000000
--- a/DungeonShooting_Godot/resource/material/BleFA6E.tmp
+++ /dev/null
@@ -1,51 +0,0 @@
-shader_type canvas_item;
-
-//混合颜色
-uniform vec4 blend : source_color = vec4(1.0, 1.0, 1.0, 1.0);
-//混合度
-uniform float schedule : hint_range(0.0, 1.0) = 0.0;
-//透明度
-//uniform float alpha : hint_range(0.0, 1.0) = 1.0;
-uniform vec4 modulate : source_color = vec4(1.0, 1.0, 1.0, 1.0);
-
-//------------------ 轮廓相关 --------------
-uniform bool show_outline = true;
-//轮廓颜色
-uniform vec4 outline_color : source_color = vec4(0.0, 0.0, 0.0, 1.0);
-//是否是彩虹轮廓
-uniform bool outline_rainbow = false;
-//彩虹轮廓变化周期
-const float frequency = 0.25;
-const float light_offset = 0.5;
-
-void fragment() {
- //显示轮廓
- if (show_outline) {
- vec2 size = TEXTURE_PIXEL_SIZE;
- float outline;
- outline = texture(TEXTURE, UV + vec2(-size.x, 0)).a;
- outline += texture(TEXTURE, UV + vec2(0, size.y)).a;
- outline += texture(TEXTURE, UV + vec2(size.x, 0)).a;
- outline += texture(TEXTURE, UV + vec2(0, -size.y)).a;
- outline = min(outline, 1.0);
-
- vec4 animated_line_color = vec4(
- light_offset + sin(2.0 * 3.14 * frequency * TIME),
- light_offset + sin(2.0 * 3.14 * frequency * TIME + radians(120.0)),
- light_offset + sin(2.0 * 3.14 * frequency * TIME + radians(240.0)),
- 1.0
- );
-
- vec4 color = texture(TEXTURE, UV);
- if (outline_rainbow){
- COLOR = mix(color, animated_line_color, outline - color.a);
- } else {
- COLOR = mix(color, outline_color , outline - color.a);
- }
- }
-
- vec4 col = mix(COLOR, blend, schedule);
- col = mix(vec4(0.0, 0.0, 0.0, 0.0), col, COLOR.a);
- col *= modulate;
- COLOR = col;
-}
diff --git a/DungeonShooting_Godot/resource/sprite/role/enemy0003/enemy0003.png b/DungeonShooting_Godot/resource/sprite/role/enemy0003/enemy0003.png
new file mode 100644
index 0000000..56d00a6
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/role/enemy0003/enemy0003.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/role/enemy0003/enemy0003.png.import b/DungeonShooting_Godot/resource/sprite/role/enemy0003/enemy0003.png.import
new file mode 100644
index 0000000..23761ad
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/role/enemy0003/enemy0003.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cdf1al6kpv3ta"
+path="res://.godot/imported/enemy0003.png-2aff5a98bb5dd4db23d6f75b0e990221.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/role/enemy0003/enemy0003.png"
+dest_files=["res://.godot/imported/enemy0003.png-2aff5a98bb5dd4db23d6f75b0e990221.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/role/enemy0003/enemy0003_Debris.png b/DungeonShooting_Godot/resource/sprite/role/enemy0003/enemy0003_Debris.png
new file mode 100644
index 0000000..0c428a8
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/role/enemy0003/enemy0003_Debris.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/role/enemy0003/enemy0003_Debris.png.import b/DungeonShooting_Godot/resource/sprite/role/enemy0003/enemy0003_Debris.png.import
new file mode 100644
index 0000000..82f98bd
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/role/enemy0003/enemy0003_Debris.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dj68fnvd2qrm4"
+path="res://.godot/imported/enemy0003_Debris.png-0d49499ec67ee7fedfebc509ec159ea0.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/role/enemy0003/enemy0003_Debris.png"
+dest_files=["res://.godot/imported/enemy0003_Debris.png-0d49499ec67ee7fedfebc509ec159ea0.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/role/enemy0003/enemy0003_Icon.png b/DungeonShooting_Godot/resource/sprite/role/enemy0003/enemy0003_Icon.png
new file mode 100644
index 0000000..ef31ab5
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/role/enemy0003/enemy0003_Icon.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/role/enemy0003/enemy0003_Icon.png.import b/DungeonShooting_Godot/resource/sprite/role/enemy0003/enemy0003_Icon.png.import
new file mode 100644
index 0000000..6ae8808
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/role/enemy0003/enemy0003_Icon.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://d0n3ncp68nnk6"
+path="res://.godot/imported/enemy0003_Icon.png-b9629b2c5194b2a54d5cd4d819d3b505.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/role/enemy0003/enemy0003_Icon.png"
+dest_files=["res://.godot/imported/enemy0003_Icon.png-b9629b2c5194b2a54d5cd4d819d3b505.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/role/enemy0004/enemy0004.png b/DungeonShooting_Godot/resource/sprite/role/enemy0004/enemy0004.png
new file mode 100644
index 0000000..81348f6
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/role/enemy0004/enemy0004.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/role/enemy0004/enemy0004.png.import b/DungeonShooting_Godot/resource/sprite/role/enemy0004/enemy0004.png.import
new file mode 100644
index 0000000..50561a7
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/role/enemy0004/enemy0004.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://digotsm6pux62"
+path="res://.godot/imported/enemy0004.png-48437bd7fc483bcc9164f9278838c427.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/role/enemy0004/enemy0004.png"
+dest_files=["res://.godot/imported/enemy0004.png-48437bd7fc483bcc9164f9278838c427.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/role/enemy0004/enemy0004_Debris.png b/DungeonShooting_Godot/resource/sprite/role/enemy0004/enemy0004_Debris.png
new file mode 100644
index 0000000..b531577
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/role/enemy0004/enemy0004_Debris.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/role/enemy0004/enemy0004_Debris.png.import b/DungeonShooting_Godot/resource/sprite/role/enemy0004/enemy0004_Debris.png.import
new file mode 100644
index 0000000..2fc93e2
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/role/enemy0004/enemy0004_Debris.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://v63ex2nsmve8"
+path="res://.godot/imported/enemy0004_Debris.png-8490ea147f0c0301c8ff1081373d661a.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/role/enemy0004/enemy0004_Debris.png"
+dest_files=["res://.godot/imported/enemy0004_Debris.png-8490ea147f0c0301c8ff1081373d661a.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/role/enemy0004/enemy0004_Icon.png b/DungeonShooting_Godot/resource/sprite/role/enemy0004/enemy0004_Icon.png
new file mode 100644
index 0000000..73333fe
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/role/enemy0004/enemy0004_Icon.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/role/enemy0004/enemy0004_Icon.png.import b/DungeonShooting_Godot/resource/sprite/role/enemy0004/enemy0004_Icon.png.import
new file mode 100644
index 0000000..e91bc90
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/role/enemy0004/enemy0004_Icon.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dbw81vt8cv47a"
+path="res://.godot/imported/enemy0004_Icon.png-afab614bd8c989b6254232cbe479a533.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/role/enemy0004/enemy0004_Icon.png"
+dest_files=["res://.godot/imported/enemy0004_Icon.png-afab614bd8c989b6254232cbe479a533.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/role/enemy0005/enemy0005.png b/DungeonShooting_Godot/resource/sprite/role/enemy0005/enemy0005.png
new file mode 100644
index 0000000..6162fc8
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/role/enemy0005/enemy0005.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/role/enemy0005/enemy0005.png.import b/DungeonShooting_Godot/resource/sprite/role/enemy0005/enemy0005.png.import
new file mode 100644
index 0000000..cf72c61
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/role/enemy0005/enemy0005.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://5tge3befo7le"
+path="res://.godot/imported/enemy0005.png-e2e97973c857a4e2da0bd848aff0b022.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/role/enemy0005/enemy0005.png"
+dest_files=["res://.godot/imported/enemy0005.png-e2e97973c857a4e2da0bd848aff0b022.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/role/enemy0005/enemy0005_Debris.png b/DungeonShooting_Godot/resource/sprite/role/enemy0005/enemy0005_Debris.png
new file mode 100644
index 0000000..8675634
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/role/enemy0005/enemy0005_Debris.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/role/enemy0005/enemy0005_Debris.png.import b/DungeonShooting_Godot/resource/sprite/role/enemy0005/enemy0005_Debris.png.import
new file mode 100644
index 0000000..bcdda13
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/role/enemy0005/enemy0005_Debris.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dw4jvgt7iwi2d"
+path="res://.godot/imported/enemy0005_Debris.png-8cdee7278caf6047bdf1b37bc055bc6e.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/role/enemy0005/enemy0005_Debris.png"
+dest_files=["res://.godot/imported/enemy0005_Debris.png-8cdee7278caf6047bdf1b37bc055bc6e.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/role/enemy0005/enemy0005_Icon.png b/DungeonShooting_Godot/resource/sprite/role/enemy0005/enemy0005_Icon.png
new file mode 100644
index 0000000..c1dd6d1
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/role/enemy0005/enemy0005_Icon.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/role/enemy0005/enemy0005_Icon.png.import b/DungeonShooting_Godot/resource/sprite/role/enemy0005/enemy0005_Icon.png.import
new file mode 100644
index 0000000..be68958
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/role/enemy0005/enemy0005_Icon.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://mvpyaurvr278"
+path="res://.godot/imported/enemy0005_Icon.png-6c35e6f3e277f42cce227ff83451f989.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/role/enemy0005/enemy0005_Icon.png"
+dest_files=["res://.godot/imported/enemy0005_Icon.png-6c35e6f3e277f42cce227ff83451f989.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/role/enemy0006/enemy0005.png b/DungeonShooting_Godot/resource/sprite/role/enemy0006/enemy0005.png
new file mode 100644
index 0000000..e299d9e
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/role/enemy0006/enemy0005.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/role/enemy0006/enemy0005.png.import b/DungeonShooting_Godot/resource/sprite/role/enemy0006/enemy0005.png.import
new file mode 100644
index 0000000..0735258
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/role/enemy0006/enemy0005.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cdin8mr0sj5v0"
+path="res://.godot/imported/enemy0005.png-d7d5d324302d03139b72cada5c03b905.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/role/enemy0006/enemy0005.png"
+dest_files=["res://.godot/imported/enemy0005.png-d7d5d324302d03139b72cada5c03b905.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/role/enemy0006/enemy005.png.import b/DungeonShooting_Godot/resource/sprite/role/enemy0006/enemy005.png.import
new file mode 100644
index 0000000..542466b
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/role/enemy0006/enemy005.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bpujly44rboun"
+path="res://.godot/imported/enemy005.png-6312988475feeb1cbcc99baeb7ad3e72.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/role/enemy005/enemy005.png"
+dest_files=["res://.godot/imported/enemy005.png-6312988475feeb1cbcc99baeb7ad3e72.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/role/enemy002/enemy0002_Debris.png b/DungeonShooting_Godot/resource/sprite/role/enemy002/enemy0002_Debris.png
deleted file mode 100644
index 0c428a8..0000000
--- a/DungeonShooting_Godot/resource/sprite/role/enemy002/enemy0002_Debris.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/role/enemy002/enemy0002_Debris.png.import b/DungeonShooting_Godot/resource/sprite/role/enemy002/enemy0002_Debris.png.import
deleted file mode 100644
index bafe012..0000000
--- a/DungeonShooting_Godot/resource/sprite/role/enemy002/enemy0002_Debris.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://ci3asfv7unyb5"
-path="res://.godot/imported/enemy0002_Debris.png-dba5b9e1a44c0c4607b398d6a4ad1f6b.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/role/enemy002/enemy0002_Debris.png"
-dest_files=["res://.godot/imported/enemy0002_Debris.png-dba5b9e1a44c0c4607b398d6a4ad1f6b.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/role/enemy002/enemy0002_Icon.png b/DungeonShooting_Godot/resource/sprite/role/enemy002/enemy0002_Icon.png
deleted file mode 100644
index ef31ab5..0000000
--- a/DungeonShooting_Godot/resource/sprite/role/enemy002/enemy0002_Icon.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/role/enemy002/enemy0002_Icon.png.import b/DungeonShooting_Godot/resource/sprite/role/enemy002/enemy0002_Icon.png.import
deleted file mode 100644
index 583dba1..0000000
--- a/DungeonShooting_Godot/resource/sprite/role/enemy002/enemy0002_Icon.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://rxf7oedqctny"
-path="res://.godot/imported/enemy0002_Icon.png-b53f87074dd0d6e7ec829630c12aed3b.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/role/enemy002/enemy0002_Icon.png"
-dest_files=["res://.godot/imported/enemy0002_Icon.png-b53f87074dd0d6e7ec829630c12aed3b.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/role/enemy002/enemy002.png b/DungeonShooting_Godot/resource/sprite/role/enemy002/enemy002.png
deleted file mode 100644
index 56d00a6..0000000
--- a/DungeonShooting_Godot/resource/sprite/role/enemy002/enemy002.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/role/enemy002/enemy002.png.import b/DungeonShooting_Godot/resource/sprite/role/enemy002/enemy002.png.import
deleted file mode 100644
index efd00d3..0000000
--- a/DungeonShooting_Godot/resource/sprite/role/enemy002/enemy002.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://cdum7n5j0gta6"
-path="res://.godot/imported/enemy002.png-31ab39c6db5ef9c63253e2a46071bc80.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/role/enemy002/enemy002.png"
-dest_files=["res://.godot/imported/enemy002.png-31ab39c6db5ef9c63253e2a46071bc80.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/role/enemy002/role3.png.import b/DungeonShooting_Godot/resource/sprite/role/enemy002/role3.png.import
deleted file mode 100644
index f035be1..0000000
--- a/DungeonShooting_Godot/resource/sprite/role/enemy002/role3.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://cd47r554va1h2"
-path="res://.godot/imported/role3.png-03fa3f4e21f02035205dd8b89a4b74a0.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/role/role3.png"
-dest_files=["res://.godot/imported/role3.png-03fa3f4e21f02035205dd8b89a4b74a0.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/role/enemy003/enemy0002_Debris.png b/DungeonShooting_Godot/resource/sprite/role/enemy003/enemy0002_Debris.png
deleted file mode 100644
index b531577..0000000
--- a/DungeonShooting_Godot/resource/sprite/role/enemy003/enemy0002_Debris.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/role/enemy003/enemy0002_Debris.png.import b/DungeonShooting_Godot/resource/sprite/role/enemy003/enemy0002_Debris.png.import
deleted file mode 100644
index f9e52b7..0000000
--- a/DungeonShooting_Godot/resource/sprite/role/enemy003/enemy0002_Debris.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://dbbyyfituaef1"
-path="res://.godot/imported/enemy0002_Debris.png-98d3289fe562ce71a2f03eae55431604.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/role/enemy003/enemy0002_Debris.png"
-dest_files=["res://.godot/imported/enemy0002_Debris.png-98d3289fe562ce71a2f03eae55431604.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/role/enemy003/enemy0002_Icon.png b/DungeonShooting_Godot/resource/sprite/role/enemy003/enemy0002_Icon.png
deleted file mode 100644
index 73333fe..0000000
--- a/DungeonShooting_Godot/resource/sprite/role/enemy003/enemy0002_Icon.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/role/enemy003/enemy0002_Icon.png.import b/DungeonShooting_Godot/resource/sprite/role/enemy003/enemy0002_Icon.png.import
deleted file mode 100644
index a2a85ec..0000000
--- a/DungeonShooting_Godot/resource/sprite/role/enemy003/enemy0002_Icon.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://dn3y80mi8fw16"
-path="res://.godot/imported/enemy0002_Icon.png-ef381e4281ee7852711ffa5942ec9b89.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/role/enemy003/enemy0002_Icon.png"
-dest_files=["res://.godot/imported/enemy0002_Icon.png-ef381e4281ee7852711ffa5942ec9b89.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/role/enemy003/enemy003.png b/DungeonShooting_Godot/resource/sprite/role/enemy003/enemy003.png
deleted file mode 100644
index 81348f6..0000000
--- a/DungeonShooting_Godot/resource/sprite/role/enemy003/enemy003.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/role/enemy003/enemy003.png.import b/DungeonShooting_Godot/resource/sprite/role/enemy003/enemy003.png.import
deleted file mode 100644
index 8b9bbd1..0000000
--- a/DungeonShooting_Godot/resource/sprite/role/enemy003/enemy003.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://dw3oauy05djvw"
-path="res://.godot/imported/enemy003.png-4d0a2901f3c5768b88cdbcb2314c3290.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/role/enemy003/enemy003.png"
-dest_files=["res://.godot/imported/enemy003.png-4d0a2901f3c5768b88cdbcb2314c3290.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/role/enemy004.png.import b/DungeonShooting_Godot/resource/sprite/role/enemy004.png.import
new file mode 100644
index 0000000..0633bd9
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/role/enemy004.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dhdrfq2sujlwi"
+path="res://.godot/imported/enemy004.png-edee3234fcf023701ba8f39d633728bd.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/role/enemy004.png"
+dest_files=["res://.godot/imported/enemy004.png-edee3234fcf023701ba8f39d633728bd.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/role/enemy004/enemy0004_Debris.png b/DungeonShooting_Godot/resource/sprite/role/enemy004/enemy0004_Debris.png
deleted file mode 100644
index 8675634..0000000
--- a/DungeonShooting_Godot/resource/sprite/role/enemy004/enemy0004_Debris.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/role/enemy004/enemy0004_Debris.png.import b/DungeonShooting_Godot/resource/sprite/role/enemy004/enemy0004_Debris.png.import
deleted file mode 100644
index 9fbb98d..0000000
--- a/DungeonShooting_Godot/resource/sprite/role/enemy004/enemy0004_Debris.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://c5wwwotumy7wo"
-path="res://.godot/imported/enemy0004_Debris.png-502689251ad6d860c299fabd91873cc5.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/role/enemy004/enemy0004_Debris.png"
-dest_files=["res://.godot/imported/enemy0004_Debris.png-502689251ad6d860c299fabd91873cc5.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/role/enemy004/enemy0004_Icon.png b/DungeonShooting_Godot/resource/sprite/role/enemy004/enemy0004_Icon.png
deleted file mode 100644
index c1dd6d1..0000000
--- a/DungeonShooting_Godot/resource/sprite/role/enemy004/enemy0004_Icon.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/role/enemy004/enemy0004_Icon.png.import b/DungeonShooting_Godot/resource/sprite/role/enemy004/enemy0004_Icon.png.import
deleted file mode 100644
index 6109ed6..0000000
--- a/DungeonShooting_Godot/resource/sprite/role/enemy004/enemy0004_Icon.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://vhlxx2npduje"
-path="res://.godot/imported/enemy0004_Icon.png-8f67c32ca3dbbe19d435a136d19df109.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/role/enemy004/enemy0004_Icon.png"
-dest_files=["res://.godot/imported/enemy0004_Icon.png-8f67c32ca3dbbe19d435a136d19df109.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/role/enemy004/enemy004.png b/DungeonShooting_Godot/resource/sprite/role/enemy004/enemy004.png
deleted file mode 100644
index 6162fc8..0000000
--- a/DungeonShooting_Godot/resource/sprite/role/enemy004/enemy004.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/role/enemy004/enemy004.png.import b/DungeonShooting_Godot/resource/sprite/role/enemy004/enemy004.png.import
deleted file mode 100644
index 6748c63..0000000
--- a/DungeonShooting_Godot/resource/sprite/role/enemy004/enemy004.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://bhwhhg2dfsr26"
-path="res://.godot/imported/enemy004.png-aca665209b2a95f0c437703d8f02573a.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/role/enemy004/enemy004.png"
-dest_files=["res://.godot/imported/enemy004.png-aca665209b2a95f0c437703d8f02573a.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/role/enemy005/enemy005.png b/DungeonShooting_Godot/resource/sprite/role/enemy005/enemy005.png
deleted file mode 100644
index e299d9e..0000000
--- a/DungeonShooting_Godot/resource/sprite/role/enemy005/enemy005.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/role/enemy005/enemy005.png.import b/DungeonShooting_Godot/resource/sprite/role/enemy005/enemy005.png.import
deleted file mode 100644
index 542466b..0000000
--- a/DungeonShooting_Godot/resource/sprite/role/enemy005/enemy005.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://bpujly44rboun"
-path="res://.godot/imported/enemy005.png-6312988475feeb1cbcc99baeb7ad3e72.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/role/enemy005/enemy005.png"
-dest_files=["res://.godot/imported/enemy005.png-6312988475feeb1cbcc99baeb7ad3e72.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/role/role0001/backward/Sprite-0002.png.import b/DungeonShooting_Godot/resource/sprite/role/role0001/backward/Sprite-0002.png.import
index 4e0a3eb..9ed923a 100644
--- a/DungeonShooting_Godot/resource/sprite/role/role0001/backward/Sprite-0002.png.import
+++ b/DungeonShooting_Godot/resource/sprite/role/role0001/backward/Sprite-0002.png.import
@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
-uid="uid://bnieimeyrrx2x"
+uid="uid://cbx2rqaka0ocs"
path="res://.godot/imported/Sprite-0002.png-633116a6824823fae344e909a045ed1e.ctex"
metadata={
"vram_texture": false
diff --git a/DungeonShooting_Godot/resource/sprite/role/role0001/backward/Sprite-0003.png.import b/DungeonShooting_Godot/resource/sprite/role/role0001/backward/Sprite-0003.png.import
index 5ca8408..3216b2f 100644
--- a/DungeonShooting_Godot/resource/sprite/role/role0001/backward/Sprite-0003.png.import
+++ b/DungeonShooting_Godot/resource/sprite/role/role0001/backward/Sprite-0003.png.import
@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
-uid="uid://dwpslrr8jyvvg"
+uid="uid://0gyjuaeqcqa4"
path="res://.godot/imported/Sprite-0003.png-f04c6081d0b6770f3955828a993cee9b.ctex"
metadata={
"vram_texture": false
diff --git a/DungeonShooting_Godot/resource/sprite/role/role0001/backward/Sprite-0004.png.import b/DungeonShooting_Godot/resource/sprite/role/role0001/backward/Sprite-0004.png.import
index b1f989b..6662658 100644
--- a/DungeonShooting_Godot/resource/sprite/role/role0001/backward/Sprite-0004.png.import
+++ b/DungeonShooting_Godot/resource/sprite/role/role0001/backward/Sprite-0004.png.import
@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
-uid="uid://d0vu1u8j3whb7"
+uid="uid://bdf273admb6w"
path="res://.godot/imported/Sprite-0004.png-a0a6cce26b5cae453cbb5bd47d1c746a.ctex"
metadata={
"vram_texture": false
diff --git a/DungeonShooting_Godot/resource/sprite/role/role0001/backward/Sprite-0005.png.import b/DungeonShooting_Godot/resource/sprite/role/role0001/backward/Sprite-0005.png.import
index 7c9d2a8..53ef3d4 100644
--- a/DungeonShooting_Godot/resource/sprite/role/role0001/backward/Sprite-0005.png.import
+++ b/DungeonShooting_Godot/resource/sprite/role/role0001/backward/Sprite-0005.png.import
@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
-uid="uid://cyuuijeewyg30"
+uid="uid://p8h28jechawi"
path="res://.godot/imported/Sprite-0005.png-88d59060d073f3b45f220303788722f4.ctex"
metadata={
"vram_texture": false
diff --git a/DungeonShooting_Godot/resource/sprite/role/role0001/backward/Sprite-0006.png.import b/DungeonShooting_Godot/resource/sprite/role/role0001/backward/Sprite-0006.png.import
index 3157872..49decfc 100644
--- a/DungeonShooting_Godot/resource/sprite/role/role0001/backward/Sprite-0006.png.import
+++ b/DungeonShooting_Godot/resource/sprite/role/role0001/backward/Sprite-0006.png.import
@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
-uid="uid://ux16f68foilk"
+uid="uid://c6x4qn8r7k1yr"
path="res://.godot/imported/Sprite-0006.png-a2e0eaf7fab93d7494cddea4c83e1dde.ctex"
metadata={
"vram_texture": false
diff --git a/DungeonShooting_Godot/resource/sprite/role/role0001/backward/Sprite-0007.png.import b/DungeonShooting_Godot/resource/sprite/role/role0001/backward/Sprite-0007.png.import
index 7891754..9073ad7 100644
--- a/DungeonShooting_Godot/resource/sprite/role/role0001/backward/Sprite-0007.png.import
+++ b/DungeonShooting_Godot/resource/sprite/role/role0001/backward/Sprite-0007.png.import
@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
-uid="uid://3ssyvsrh8w16"
+uid="uid://c7wx2h6ra4eyn"
path="res://.godot/imported/Sprite-0007.png-ba73abeaa78577753c7d1a60cabbc5d2.ctex"
metadata={
"vram_texture": false
diff --git a/DungeonShooting_Godot/resource/sprite/role/role0001/backward/Sprite-0008.png.import b/DungeonShooting_Godot/resource/sprite/role/role0001/backward/Sprite-0008.png.import
index 02fb460..51c2f3d 100644
--- a/DungeonShooting_Godot/resource/sprite/role/role0001/backward/Sprite-0008.png.import
+++ b/DungeonShooting_Godot/resource/sprite/role/role0001/backward/Sprite-0008.png.import
@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
-uid="uid://kpveaqso6a6t"
+uid="uid://dt0ocjl0doowp"
path="res://.godot/imported/Sprite-0008.png-b416ef9be8cbedc81d4a53256f8a9498.ctex"
metadata={
"vram_texture": false
diff --git a/DungeonShooting_Godot/resource/sprite/role/role0001/dle/Sprite-0002-Sheet-export.png.import b/DungeonShooting_Godot/resource/sprite/role/role0001/dle/Sprite-0002-Sheet-export.png.import
index 999c942..deda458 100644
--- a/DungeonShooting_Godot/resource/sprite/role/role0001/dle/Sprite-0002-Sheet-export.png.import
+++ b/DungeonShooting_Godot/resource/sprite/role/role0001/dle/Sprite-0002-Sheet-export.png.import
@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
-uid="uid://pktbvypmkryq"
+uid="uid://d2tl87f4vgcl4"
path="res://.godot/imported/Sprite-0002-Sheet-export.png-2abb636cc5171f887ec942bd98ca08b0.ctex"
metadata={
"vram_texture": false
diff --git a/DungeonShooting_Godot/resource/sprite/role/role0001/dle/Sprite-0002.png.import b/DungeonShooting_Godot/resource/sprite/role/role0001/dle/Sprite-0002.png.import
index 22019bf..80b9926 100644
--- a/DungeonShooting_Godot/resource/sprite/role/role0001/dle/Sprite-0002.png.import
+++ b/DungeonShooting_Godot/resource/sprite/role/role0001/dle/Sprite-0002.png.import
@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
-uid="uid://dulpy3ih6ipcc"
+uid="uid://bj788pb8rpckl"
path="res://.godot/imported/Sprite-0002.png-7eff6999eafc5876b533b2312cd065d5.ctex"
metadata={
"vram_texture": false
diff --git a/DungeonShooting_Godot/resource/sprite/role/role0001/run/Sprite-0002.png.import b/DungeonShooting_Godot/resource/sprite/role/role0001/run/Sprite-0002.png.import
index f069fae..0898df1 100644
--- a/DungeonShooting_Godot/resource/sprite/role/role0001/run/Sprite-0002.png.import
+++ b/DungeonShooting_Godot/resource/sprite/role/role0001/run/Sprite-0002.png.import
@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
-uid="uid://ycubf2jhw3xo"
+uid="uid://elnppvl0wo8s"
path="res://.godot/imported/Sprite-0002.png-071631cbf3e4907d8ef6d018f7604aed.ctex"
metadata={
"vram_texture": false
diff --git a/DungeonShooting_Godot/resource/sprite/role/role0001/run/Sprite-0003.png.import b/DungeonShooting_Godot/resource/sprite/role/role0001/run/Sprite-0003.png.import
index 92577df..39dd91a 100644
--- a/DungeonShooting_Godot/resource/sprite/role/role0001/run/Sprite-0003.png.import
+++ b/DungeonShooting_Godot/resource/sprite/role/role0001/run/Sprite-0003.png.import
@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
-uid="uid://hunwu6fh3cyu"
+uid="uid://csvabgcr1lpkg"
path="res://.godot/imported/Sprite-0003.png-358677bca18cac4d1b8ea9279ea6300a.ctex"
metadata={
"vram_texture": false
diff --git a/DungeonShooting_Godot/resource/sprite/role/role0001/run/Sprite-0004.png.import b/DungeonShooting_Godot/resource/sprite/role/role0001/run/Sprite-0004.png.import
index a3293be..589114b 100644
--- a/DungeonShooting_Godot/resource/sprite/role/role0001/run/Sprite-0004.png.import
+++ b/DungeonShooting_Godot/resource/sprite/role/role0001/run/Sprite-0004.png.import
@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
-uid="uid://cwl72p7gap0p7"
+uid="uid://qbaic144k6t0"
path="res://.godot/imported/Sprite-0004.png-f6093d543ecb8d8231548f55dd0990ab.ctex"
metadata={
"vram_texture": false
diff --git a/DungeonShooting_Godot/resource/sprite/role/role0001/run/Sprite-0005.png.import b/DungeonShooting_Godot/resource/sprite/role/role0001/run/Sprite-0005.png.import
index b1d7400..6c0827d 100644
--- a/DungeonShooting_Godot/resource/sprite/role/role0001/run/Sprite-0005.png.import
+++ b/DungeonShooting_Godot/resource/sprite/role/role0001/run/Sprite-0005.png.import
@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
-uid="uid://dhea745lt3rrv"
+uid="uid://d2b6n102rnw7q"
path="res://.godot/imported/Sprite-0005.png-c552ad0bee6498090790449be66db4cf.ctex"
metadata={
"vram_texture": false
diff --git a/DungeonShooting_Godot/resource/sprite/role/role0001/run/Sprite-0006.png.import b/DungeonShooting_Godot/resource/sprite/role/role0001/run/Sprite-0006.png.import
index 33e3d4e..255d80a 100644
--- a/DungeonShooting_Godot/resource/sprite/role/role0001/run/Sprite-0006.png.import
+++ b/DungeonShooting_Godot/resource/sprite/role/role0001/run/Sprite-0006.png.import
@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
-uid="uid://c6q7dx7iunmxq"
+uid="uid://jps0gijbldju"
path="res://.godot/imported/Sprite-0006.png-e1227fdd50ae95e39bb2de41e6b1ca38.ctex"
metadata={
"vram_texture": false
diff --git a/DungeonShooting_Godot/resource/sprite/role/role0001/run/Sprite-0007.png.import b/DungeonShooting_Godot/resource/sprite/role/role0001/run/Sprite-0007.png.import
index bff42f0..2337053 100644
--- a/DungeonShooting_Godot/resource/sprite/role/role0001/run/Sprite-0007.png.import
+++ b/DungeonShooting_Godot/resource/sprite/role/role0001/run/Sprite-0007.png.import
@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
-uid="uid://dpb8x5rv8j1wm"
+uid="uid://c8j4xfpk0oalj"
path="res://.godot/imported/Sprite-0007.png-828f576b712f54a843f8a774a88ef801.ctex"
metadata={
"vram_texture": false
diff --git a/DungeonShooting_Godot/resource/sprite/role/role0001/run/Sprite-0008.png.import b/DungeonShooting_Godot/resource/sprite/role/role0001/run/Sprite-0008.png.import
index 0b3e5f9..b9fed63 100644
--- a/DungeonShooting_Godot/resource/sprite/role/role0001/run/Sprite-0008.png.import
+++ b/DungeonShooting_Godot/resource/sprite/role/role0001/run/Sprite-0008.png.import
@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
-uid="uid://c5p56uh0qpn44"
+uid="uid://cd5mxl0vkddkn"
path="res://.godot/imported/Sprite-0008.png-a7167d5a14030137253ea6b864c2c5d4.ctex"
metadata={
"vram_texture": false
diff --git a/DungeonShooting_Godot/resource/spriteFrames/role/Enemy0003.tres b/DungeonShooting_Godot/resource/spriteFrames/role/Enemy0003.tres
new file mode 100644
index 0000000..935369a
--- /dev/null
+++ b/DungeonShooting_Godot/resource/spriteFrames/role/Enemy0003.tres
@@ -0,0 +1,114 @@
+[gd_resource type="SpriteFrames" load_steps=15 format=3 uid="uid://cnk1wmk3uy4aa"]
+
+[ext_resource type="Texture2D" uid="uid://d0n3ncp68nnk6" path="res://resource/sprite/role/enemy0003/enemy0003_Icon.png" id="1_4n7kk"]
+[ext_resource type="Texture2D" uid="uid://cdf1al6kpv3ta" path="res://resource/sprite/role/enemy0003/enemy0003.png" id="2_gvc60"]
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_fiqik"]
+atlas = ExtResource("2_gvc60")
+region = Rect2(0, 24, 16, 24)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_algye"]
+atlas = ExtResource("2_gvc60")
+region = Rect2(16, 24, 16, 24)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_rovd5"]
+atlas = ExtResource("2_gvc60")
+region = Rect2(32, 24, 16, 24)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_k7bjp"]
+atlas = ExtResource("2_gvc60")
+region = Rect2(48, 24, 16, 24)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_yyuaf"]
+atlas = ExtResource("2_gvc60")
+region = Rect2(48, 48, 16, 24)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_ijjls"]
+atlas = ExtResource("2_gvc60")
+region = Rect2(32, 48, 16, 24)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_e2uc8"]
+atlas = ExtResource("2_gvc60")
+region = Rect2(16, 48, 16, 24)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_id4xp"]
+atlas = ExtResource("2_gvc60")
+region = Rect2(0, 48, 16, 24)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_hof3c"]
+atlas = ExtResource("2_gvc60")
+region = Rect2(0, 48, 16, 24)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_3n1od"]
+atlas = ExtResource("2_gvc60")
+region = Rect2(16, 48, 16, 24)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_3jmh0"]
+atlas = ExtResource("2_gvc60")
+region = Rect2(32, 48, 16, 24)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_ddpq5"]
+atlas = ExtResource("2_gvc60")
+region = Rect2(48, 48, 16, 24)
+
+[resource]
+animations = [{
+"frames": [{
+"duration": 1.0,
+"texture": ExtResource("1_4n7kk")
+}],
+"loop": true,
+"name": &"default",
+"speed": 5.0
+}, {
+"frames": [{
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_fiqik")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_algye")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_rovd5")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_k7bjp")
+}],
+"loop": true,
+"name": &"idle",
+"speed": 7.0
+}, {
+"frames": [{
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_yyuaf")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_ijjls")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_e2uc8")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_id4xp")
+}],
+"loop": true,
+"name": &"reverseRun",
+"speed": 10.0
+}, {
+"frames": [{
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_hof3c")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_3n1od")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_3jmh0")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_ddpq5")
+}],
+"loop": true,
+"name": &"run",
+"speed": 10.0
+}]
diff --git a/DungeonShooting_Godot/resource/spriteFrames/role/Role0001.tres b/DungeonShooting_Godot/resource/spriteFrames/role/Role0001.tres
index 99a459a..acc4ab3 100644
--- a/DungeonShooting_Godot/resource/spriteFrames/role/Role0001.tres
+++ b/DungeonShooting_Godot/resource/spriteFrames/role/Role0001.tres
@@ -1,19 +1,27 @@
-[gd_resource type="SpriteFrames" load_steps=26 format=3 uid="uid://n11thtali6es"]
+[gd_resource type="SpriteFrames" load_steps=48 format=3 uid="uid://n11thtali6es"]
[ext_resource type="Texture2D" uid="uid://ekas4lqprrml" path="res://resource/sprite/role/role0001/idle/Sprite-0002.png" id="1_le6bk"]
+[ext_resource type="Texture2D" uid="uid://d2tl87f4vgcl4" path="res://resource/sprite/role/role0001/dle/Sprite-0002-Sheet-export.png" id="2_8n6o4"]
[ext_resource type="Texture2D" uid="uid://b81k08ofpf2oo" path="res://resource/sprite/role/role0001/idle/Sprite-0003.png" id="2_whsc2"]
[ext_resource type="Texture2D" uid="uid://obelhor4gdmh" path="res://resource/sprite/role/role0001/idle/Sprite-0004.png" id="3_peq88"]
[ext_resource type="Texture2D" uid="uid://dvv73cbc818e4" path="res://resource/sprite/role/role0001/idle/Sprite-0005.png" id="4_arikg"]
[ext_resource type="Texture2D" uid="uid://dfom06raof2fw" path="res://resource/sprite/role/role0001/idle/Sprite-0006.png" id="5_0bq3k"]
[ext_resource type="Texture2D" uid="uid://c7dsfoaupj4qo" path="res://resource/sprite/role/role0001/idle/Sprite-0007.png" id="6_hw6v8"]
[ext_resource type="Texture2D" uid="uid://cwrsm1ui33d6b" path="res://resource/sprite/role/role0001/idle/Sprite-0008.png" id="7_heo28"]
-[ext_resource type="Texture2D" uid="uid://clqgeyii6lkm6" path="res://resource/sprite/role/role0001/run/Sprite-0008.png" id="8_scwvl"]
-[ext_resource type="Texture2D" uid="uid://dfxsecrlc85pi" path="res://resource/sprite/role/role0001/run/Sprite-0007.png" id="9_yjs5f"]
-[ext_resource type="Texture2D" uid="uid://de24cv2v45gkf" path="res://resource/sprite/role/role0001/run/Sprite-0006.png" id="10_uafyp"]
-[ext_resource type="Texture2D" uid="uid://pqn660nyk82t" path="res://resource/sprite/role/role0001/run/Sprite-0005.png" id="11_ndgr1"]
-[ext_resource type="Texture2D" uid="uid://d32g0f5vk68sj" path="res://resource/sprite/role/role0001/run/Sprite-0004.png" id="12_cbabh"]
-[ext_resource type="Texture2D" uid="uid://cw83liyy6gnln" path="res://resource/sprite/role/role0001/run/Sprite-0003.png" id="13_u0cmp"]
-[ext_resource type="Texture2D" uid="uid://b1gh481w2xvsl" path="res://resource/sprite/role/role0001/run/Sprite-0002.png" id="14_nlfq5"]
+[ext_resource type="Texture2D" uid="uid://clqgeyii6lkm6" path="res://resource/sprite/role/role0001/before/Sprite-0008.png" id="8_scwvl"]
+[ext_resource type="Texture2D" uid="uid://cbx2rqaka0ocs" path="res://resource/sprite/role/role0001/backward/Sprite-0002.png" id="9_xjn7y"]
+[ext_resource type="Texture2D" uid="uid://dfxsecrlc85pi" path="res://resource/sprite/role/role0001/before/Sprite-0007.png" id="9_yjs5f"]
+[ext_resource type="Texture2D" uid="uid://de24cv2v45gkf" path="res://resource/sprite/role/role0001/before/Sprite-0006.png" id="10_uafyp"]
+[ext_resource type="Texture2D" uid="uid://0gyjuaeqcqa4" path="res://resource/sprite/role/role0001/backward/Sprite-0003.png" id="10_y65up"]
+[ext_resource type="Texture2D" uid="uid://bdf273admb6w" path="res://resource/sprite/role/role0001/backward/Sprite-0004.png" id="11_n5cgn"]
+[ext_resource type="Texture2D" uid="uid://pqn660nyk82t" path="res://resource/sprite/role/role0001/before/Sprite-0005.png" id="11_ndgr1"]
+[ext_resource type="Texture2D" uid="uid://d32g0f5vk68sj" path="res://resource/sprite/role/role0001/before/Sprite-0004.png" id="12_cbabh"]
+[ext_resource type="Texture2D" uid="uid://p8h28jechawi" path="res://resource/sprite/role/role0001/backward/Sprite-0005.png" id="12_v4tvy"]
+[ext_resource type="Texture2D" uid="uid://c6x4qn8r7k1yr" path="res://resource/sprite/role/role0001/backward/Sprite-0006.png" id="13_a6idy"]
+[ext_resource type="Texture2D" uid="uid://cw83liyy6gnln" path="res://resource/sprite/role/role0001/before/Sprite-0003.png" id="13_u0cmp"]
+[ext_resource type="Texture2D" uid="uid://c7wx2h6ra4eyn" path="res://resource/sprite/role/role0001/backward/Sprite-0007.png" id="14_8wkl8"]
+[ext_resource type="Texture2D" uid="uid://b1gh481w2xvsl" path="res://resource/sprite/role/role0001/before/Sprite-0002.png" id="14_nlfq5"]
+[ext_resource type="Texture2D" uid="uid://dt0ocjl0doowp" path="res://resource/sprite/role/role0001/backward/Sprite-0008.png" id="15_8065h"]
[ext_resource type="Texture2D" uid="uid://do6ybmo0r04pp" path="res://resource/sprite/role/role0001/roll/Sprite-0010.png" id="17_e31g7"]
[ext_resource type="Texture2D" uid="uid://b3itgraiw7mns" path="res://resource/sprite/role/role0001/roll/Sprite-0011.png" id="18_g0o3y"]
[ext_resource type="Texture2D" uid="uid://cisayo3amq6sv" path="res://resource/sprite/role/role0001/roll/Sprite-0012.png" id="19_s6xfs"]
@@ -26,6 +34,62 @@
[ext_resource type="Texture2D" uid="uid://b7s4yf5ic37cd" path="res://resource/sprite/role/role0001/roll/Sprite-0017.png" id="24_83arr"]
[ext_resource type="Texture2D" uid="uid://c0ik1lwfjlr7y" path="res://resource/sprite/role/role0001/roll/Sprite-0018.png" id="25_6hy4b"]
+[sub_resource type="AtlasTexture" id="AtlasTexture_u4d02"]
+atlas = ExtResource("2_8n6o4")
+region = Rect2(0, 0, 48, 48)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_pnh1y"]
+atlas = ExtResource("2_8n6o4")
+region = Rect2(48, 0, 48, 48)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_gtiys"]
+atlas = ExtResource("2_8n6o4")
+region = Rect2(96, 0, 48, 48)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_o720b"]
+atlas = ExtResource("2_8n6o4")
+region = Rect2(144, 0, 48, 48)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_1ot4k"]
+atlas = ExtResource("2_8n6o4")
+region = Rect2(192, 0, 48, 48)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_nbogm"]
+atlas = ExtResource("2_8n6o4")
+region = Rect2(240, 0, 48, 48)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_xb60w"]
+atlas = ExtResource("2_8n6o4")
+region = Rect2(288, 0, 48, 48)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_0n8c4"]
+atlas = ExtResource("2_8n6o4")
+region = Rect2(336, 0, 48, 48)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_2cgpn"]
+atlas = ExtResource("2_8n6o4")
+region = Rect2(384, 0, 48, 48)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_mgacx"]
+atlas = ExtResource("2_8n6o4")
+region = Rect2(432, 0, 48, 48)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_ssyna"]
+atlas = ExtResource("2_8n6o4")
+region = Rect2(480, 0, 48, 48)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_871m0"]
+atlas = ExtResource("2_8n6o4")
+region = Rect2(528, 0, 48, 48)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_kpc6c"]
+atlas = ExtResource("2_8n6o4")
+region = Rect2(576, 0, 48, 48)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_icnau"]
+atlas = ExtResource("2_8n6o4")
+region = Rect2(624, 0, 48, 48)
+
[resource]
animations = [{
"frames": [{
@@ -38,6 +102,59 @@
}, {
"frames": [{
"duration": 1.0,
+"texture": SubResource("AtlasTexture_u4d02")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_pnh1y")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_gtiys")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_o720b")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_1ot4k")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_nbogm")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_xb60w")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_0n8c4")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_2cgpn")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_mgacx")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_ssyna")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_871m0")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_kpc6c")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_icnau")
+}, {
+"duration": 1.0,
+"texture": null
+}, {
+"duration": 1.0,
+"texture": null
+}],
+"loop": false,
+"name": &"die",
+"speed": 13.0
+}, {
+"frames": [{
+"duration": 1.0,
"texture": ExtResource("1_le6bk")
}, {
"duration": 1.0,
@@ -64,25 +181,25 @@
}, {
"frames": [{
"duration": 1.0,
-"texture": ExtResource("9_yjs5f")
+"texture": ExtResource("9_xjn7y")
}, {
"duration": 1.0,
-"texture": ExtResource("10_uafyp")
+"texture": ExtResource("10_y65up")
}, {
"duration": 1.0,
-"texture": ExtResource("11_ndgr1")
+"texture": ExtResource("11_n5cgn")
}, {
"duration": 1.0,
-"texture": ExtResource("12_cbabh")
+"texture": ExtResource("12_v4tvy")
}, {
"duration": 1.0,
-"texture": ExtResource("13_u0cmp")
+"texture": ExtResource("13_a6idy")
}, {
"duration": 1.0,
-"texture": ExtResource("14_nlfq5")
+"texture": ExtResource("14_8wkl8")
}, {
"duration": 1.0,
-"texture": ExtResource("8_scwvl")
+"texture": ExtResource("15_8065h")
}],
"loop": true,
"name": &"reverseRun",
diff --git a/DungeonShooting_Godot/src/config/ExcelConfig.cs b/DungeonShooting_Godot/src/config/ExcelConfig.cs
index 42d5e0a..df8bd8d 100644
--- a/DungeonShooting_Godot/src/config/ExcelConfig.cs
+++ b/DungeonShooting_Godot/src/config/ExcelConfig.cs
@@ -8,31 +8,22 @@
public static partial class ExcelConfig
{
///
- /// BuffPropBase.xlsx表数据集合, 以 List 形式存储, 数据顺序与 Excel 表相同
+ /// ActivePropBase.xlsx表数据集合, 以 List 形式存储, 数据顺序与 Excel 表相同
///
- public static List BuffPropBase_List { get; private set; }
+ public static List ActivePropBase_List { get; private set; }
///
- /// BuffPropBase.xlsx表数据集合, 里 Map 形式存储, key 为 Id
+ /// ActivePropBase.xlsx表数据集合, 里 Map 形式存储, key 为 Id
///
- public static Dictionary BuffPropBase_Map { get; private set; }
+ public static Dictionary ActivePropBase_Map { get; private set; }
///
- /// Sound.xlsx表数据集合, 以 List 形式存储, 数据顺序与 Excel 表相同
+ /// ActivityBase.xlsx表数据集合, 以 List 形式存储, 数据顺序与 Excel 表相同
///
- public static List Sound_List { get; private set; }
+ public static List ActivityBase_List { get; private set; }
///
- /// Sound.xlsx表数据集合, 里 Map 形式存储, key 为 Id
+ /// ActivityBase.xlsx表数据集合, 里 Map 形式存储, key 为 Id
///
- public static Dictionary Sound_Map { get; private set; }
-
- ///
- /// WeaponBase.xlsx表数据集合, 以 List 形式存储, 数据顺序与 Excel 表相同
- ///
- public static List WeaponBase_List { get; private set; }
- ///
- /// WeaponBase.xlsx表数据集合, 里 Map 形式存储, key 为 Id
- ///
- public static Dictionary WeaponBase_Map { get; private set; }
+ public static Dictionary ActivityBase_Map { get; private set; }
///
/// ActivityMaterial.xlsx表数据集合, 以 List 形式存储, 数据顺序与 Excel 表相同
@@ -53,6 +44,15 @@
public static Dictionary AiAttackAttr_Map { get; private set; }
///
+ /// BuffPropBase.xlsx表数据集合, 以 List 形式存储, 数据顺序与 Excel 表相同
+ ///
+ public static List BuffPropBase_List { get; private set; }
+ ///
+ /// BuffPropBase.xlsx表数据集合, 里 Map 形式存储, key 为 Id
+ ///
+ public static Dictionary BuffPropBase_Map { get; private set; }
+
+ ///
/// BulletBase.xlsx表数据集合, 以 List 形式存储, 数据顺序与 Excel 表相同
///
public static List BulletBase_List { get; private set; }
@@ -62,15 +62,6 @@
public static Dictionary BulletBase_Map { get; private set; }
///
- /// ActivePropBase.xlsx表数据集合, 以 List 形式存储, 数据顺序与 Excel 表相同
- ///
- public static List ActivePropBase_List { get; private set; }
- ///
- /// ActivePropBase.xlsx表数据集合, 里 Map 形式存储, key 为 Id
- ///
- public static Dictionary ActivePropBase_Map { get; private set; }
-
- ///
/// EnemyBase.xlsx表数据集合, 以 List 形式存储, 数据顺序与 Excel 表相同
///
public static List EnemyBase_List { get; private set; }
@@ -80,15 +71,6 @@
public static Dictionary EnemyBase_Map { get; private set; }
///
- /// ActivityBase.xlsx表数据集合, 以 List 形式存储, 数据顺序与 Excel 表相同
- ///
- public static List ActivityBase_List { get; private set; }
- ///
- /// ActivityBase.xlsx表数据集合, 里 Map 形式存储, key 为 Id
- ///
- public static Dictionary ActivityBase_Map { get; private set; }
-
- ///
/// LiquidMaterial.xlsx表数据集合, 以 List 形式存储, 数据顺序与 Excel 表相同
///
public static List LiquidMaterial_List { get; private set; }
@@ -97,6 +79,24 @@
///
public static Dictionary LiquidMaterial_Map { get; private set; }
+ ///
+ /// Sound.xlsx表数据集合, 以 List 形式存储, 数据顺序与 Excel 表相同
+ ///
+ public static List Sound_List { get; private set; }
+ ///
+ /// Sound.xlsx表数据集合, 里 Map 形式存储, key 为 Id
+ ///
+ public static Dictionary Sound_Map { get; private set; }
+
+ ///
+ /// WeaponBase.xlsx表数据集合, 以 List 形式存储, 数据顺序与 Excel 表相同
+ ///
+ public static List WeaponBase_List { get; private set; }
+ ///
+ /// WeaponBase.xlsx表数据集合, 里 Map 形式存储, key 为 Id
+ ///
+ public static Dictionary WeaponBase_Map { get; private set; }
+
private static bool _init = false;
///
@@ -107,75 +107,57 @@
if (_init) return;
_init = true;
- _InitBuffPropBaseConfig();
- _InitSoundConfig();
- _InitWeaponBaseConfig();
+ _InitActivePropBaseConfig();
+ _InitActivityBaseConfig();
_InitActivityMaterialConfig();
_InitAiAttackAttrConfig();
+ _InitBuffPropBaseConfig();
_InitBulletBaseConfig();
- _InitActivePropBaseConfig();
_InitEnemyBaseConfig();
- _InitActivityBaseConfig();
_InitLiquidMaterialConfig();
+ _InitSoundConfig();
+ _InitWeaponBaseConfig();
- _InitBuffPropBaseRef();
- _InitWeaponBaseRef();
_InitActivePropBaseRef();
- _InitEnemyBaseRef();
_InitActivityBaseRef();
+ _InitBuffPropBaseRef();
+ _InitEnemyBaseRef();
+ _InitWeaponBaseRef();
}
- private static void _InitBuffPropBaseConfig()
+ private static void _InitActivePropBaseConfig()
{
try
{
- var text = _ReadConfigAsText("res://resource/config/BuffPropBase.json");
- BuffPropBase_List = new List(JsonSerializer.Deserialize>(text));
- BuffPropBase_Map = new Dictionary();
- foreach (var item in BuffPropBase_List)
+ var text = _ReadConfigAsText("res://resource/config/ActivePropBase.json");
+ ActivePropBase_List = new List(JsonSerializer.Deserialize>(text));
+ ActivePropBase_Map = new Dictionary();
+ foreach (var item in ActivePropBase_List)
{
- BuffPropBase_Map.Add(item.Id, item);
+ ActivePropBase_Map.Add(item.Id, item);
}
}
catch (Exception e)
{
GD.PrintErr(e.ToString());
- throw new Exception("初始化表'BuffPropBase'失败!");
+ throw new Exception("初始化表'ActivePropBase'失败!");
}
}
- private static void _InitSoundConfig()
+ private static void _InitActivityBaseConfig()
{
try
{
- var text = _ReadConfigAsText("res://resource/config/Sound.json");
- Sound_List = JsonSerializer.Deserialize>(text);
- Sound_Map = new Dictionary();
- foreach (var item in Sound_List)
+ var text = _ReadConfigAsText("res://resource/config/ActivityBase.json");
+ ActivityBase_List = new List(JsonSerializer.Deserialize>(text));
+ ActivityBase_Map = new Dictionary();
+ foreach (var item in ActivityBase_List)
{
- Sound_Map.Add(item.Id, item);
+ ActivityBase_Map.Add(item.Id, item);
}
}
catch (Exception e)
{
GD.PrintErr(e.ToString());
- throw new Exception("初始化表'Sound'失败!");
- }
- }
- private static void _InitWeaponBaseConfig()
- {
- try
- {
- var text = _ReadConfigAsText("res://resource/config/WeaponBase.json");
- WeaponBase_List = new List(JsonSerializer.Deserialize>(text));
- WeaponBase_Map = new Dictionary();
- foreach (var item in WeaponBase_List)
- {
- WeaponBase_Map.Add(item.Id, item);
- }
- }
- catch (Exception e)
- {
- GD.PrintErr(e.ToString());
- throw new Exception("初始化表'WeaponBase'失败!");
+ throw new Exception("初始化表'ActivityBase'失败!");
}
}
private static void _InitActivityMaterialConfig()
@@ -214,6 +196,24 @@
throw new Exception("初始化表'AiAttackAttr'失败!");
}
}
+ private static void _InitBuffPropBaseConfig()
+ {
+ try
+ {
+ var text = _ReadConfigAsText("res://resource/config/BuffPropBase.json");
+ BuffPropBase_List = new List(JsonSerializer.Deserialize>(text));
+ BuffPropBase_Map = new Dictionary();
+ foreach (var item in BuffPropBase_List)
+ {
+ BuffPropBase_Map.Add(item.Id, item);
+ }
+ }
+ catch (Exception e)
+ {
+ GD.PrintErr(e.ToString());
+ throw new Exception("初始化表'BuffPropBase'失败!");
+ }
+ }
private static void _InitBulletBaseConfig()
{
try
@@ -232,24 +232,6 @@
throw new Exception("初始化表'BulletBase'失败!");
}
}
- private static void _InitActivePropBaseConfig()
- {
- try
- {
- var text = _ReadConfigAsText("res://resource/config/ActivePropBase.json");
- ActivePropBase_List = new List(JsonSerializer.Deserialize>(text));
- ActivePropBase_Map = new Dictionary();
- foreach (var item in ActivePropBase_List)
- {
- ActivePropBase_Map.Add(item.Id, item);
- }
- }
- catch (Exception e)
- {
- GD.PrintErr(e.ToString());
- throw new Exception("初始化表'ActivePropBase'失败!");
- }
- }
private static void _InitEnemyBaseConfig()
{
try
@@ -268,24 +250,6 @@
throw new Exception("初始化表'EnemyBase'失败!");
}
}
- private static void _InitActivityBaseConfig()
- {
- try
- {
- var text = _ReadConfigAsText("res://resource/config/ActivityBase.json");
- ActivityBase_List = new List(JsonSerializer.Deserialize>(text));
- ActivityBase_Map = new Dictionary();
- foreach (var item in ActivityBase_List)
- {
- ActivityBase_Map.Add(item.Id, item);
- }
- }
- catch (Exception e)
- {
- GD.PrintErr(e.ToString());
- throw new Exception("初始化表'ActivityBase'失败!");
- }
- }
private static void _InitLiquidMaterialConfig()
{
try
@@ -304,7 +268,81 @@
throw new Exception("初始化表'LiquidMaterial'失败!");
}
}
+ private static void _InitSoundConfig()
+ {
+ try
+ {
+ var text = _ReadConfigAsText("res://resource/config/Sound.json");
+ Sound_List = JsonSerializer.Deserialize>(text);
+ Sound_Map = new Dictionary();
+ foreach (var item in Sound_List)
+ {
+ Sound_Map.Add(item.Id, item);
+ }
+ }
+ catch (Exception e)
+ {
+ GD.PrintErr(e.ToString());
+ throw new Exception("初始化表'Sound'失败!");
+ }
+ }
+ private static void _InitWeaponBaseConfig()
+ {
+ try
+ {
+ var text = _ReadConfigAsText("res://resource/config/WeaponBase.json");
+ WeaponBase_List = new List(JsonSerializer.Deserialize>(text));
+ WeaponBase_Map = new Dictionary();
+ foreach (var item in WeaponBase_List)
+ {
+ WeaponBase_Map.Add(item.Id, item);
+ }
+ }
+ catch (Exception e)
+ {
+ GD.PrintErr(e.ToString());
+ throw new Exception("初始化表'WeaponBase'失败!");
+ }
+ }
+ private static void _InitActivePropBaseRef()
+ {
+ foreach (Ref_ActivePropBase item in ActivePropBase_List)
+ {
+ try
+ {
+ if (!string.IsNullOrEmpty(item.__Activity))
+ {
+ item.Activity = ActivityBase_Map[item.__Activity];
+ }
+
+ }
+ catch (Exception e)
+ {
+ GD.PrintErr(e.ToString());
+ throw new Exception("初始化'ActivePropBase'引用其他表数据失败, 当前行id: " + item.Id);
+ }
+ }
+ }
+ private static void _InitActivityBaseRef()
+ {
+ foreach (Ref_ActivityBase item in ActivityBase_List)
+ {
+ try
+ {
+ if (!string.IsNullOrEmpty(item.__Material))
+ {
+ item.Material = ActivityMaterial_Map[item.__Material];
+ }
+
+ }
+ catch (Exception e)
+ {
+ GD.PrintErr(e.ToString());
+ throw new Exception("初始化'ActivityBase'引用其他表数据失败, 当前行id: " + item.Id);
+ }
+ }
+ }
private static void _InitBuffPropBaseRef()
{
foreach (Ref_BuffPropBase item in BuffPropBase_List)
@@ -324,6 +362,25 @@
}
}
}
+ private static void _InitEnemyBaseRef()
+ {
+ foreach (Ref_EnemyBase item in EnemyBase_List)
+ {
+ try
+ {
+ if (!string.IsNullOrEmpty(item.__Activity))
+ {
+ item.Activity = ActivityBase_Map[item.__Activity];
+ }
+
+ }
+ catch (Exception e)
+ {
+ GD.PrintErr(e.ToString());
+ throw new Exception("初始化'EnemyBase'引用其他表数据失败, 当前行id: " + item.Id);
+ }
+ }
+ }
private static void _InitWeaponBaseRef()
{
foreach (Ref_WeaponBase item in WeaponBase_List)
@@ -392,63 +449,6 @@
}
}
}
- private static void _InitActivePropBaseRef()
- {
- foreach (Ref_ActivePropBase item in ActivePropBase_List)
- {
- try
- {
- if (!string.IsNullOrEmpty(item.__Activity))
- {
- item.Activity = ActivityBase_Map[item.__Activity];
- }
-
- }
- catch (Exception e)
- {
- GD.PrintErr(e.ToString());
- throw new Exception("初始化'ActivePropBase'引用其他表数据失败, 当前行id: " + item.Id);
- }
- }
- }
- private static void _InitEnemyBaseRef()
- {
- foreach (Ref_EnemyBase item in EnemyBase_List)
- {
- try
- {
- if (!string.IsNullOrEmpty(item.__Activity))
- {
- item.Activity = ActivityBase_Map[item.__Activity];
- }
-
- }
- catch (Exception e)
- {
- GD.PrintErr(e.ToString());
- throw new Exception("初始化'EnemyBase'引用其他表数据失败, 当前行id: " + item.Id);
- }
- }
- }
- private static void _InitActivityBaseRef()
- {
- foreach (Ref_ActivityBase item in ActivityBase_List)
- {
- try
- {
- if (!string.IsNullOrEmpty(item.__Material))
- {
- item.Material = ActivityMaterial_Map[item.__Material];
- }
-
- }
- catch (Exception e)
- {
- GD.PrintErr(e.ToString());
- throw new Exception("初始化'ActivityBase'引用其他表数据失败, 当前行id: " + item.Id);
- }
- }
- }
private static string _ReadConfigAsText(string path)
{
var file = FileAccess.Open(path, FileAccess.ModeFlags.Read);
diff --git a/DungeonShooting_Godot/src/config/ExcelConfig_EnemyBase.cs b/DungeonShooting_Godot/src/config/ExcelConfig_EnemyBase.cs
index 99bf73c..7e9aaa9 100644
--- a/DungeonShooting_Godot/src/config/ExcelConfig_EnemyBase.cs
+++ b/DungeonShooting_Godot/src/config/ExcelConfig_EnemyBase.cs
@@ -74,10 +74,10 @@
public float TailAfterViewRange;
///
- /// 背后的视野半径, 单位像素
+ /// 视野角度范围, 角度制
///
[JsonInclude]
- public float BackViewRange;
+ public float ViewAngleRange;
///
/// 掉落金币数量区间, 如果为负数或者0则不会掉落金币
@@ -103,7 +103,7 @@
inst.CanPickUpWeapon = CanPickUpWeapon;
inst.ViewRange = ViewRange;
inst.TailAfterViewRange = TailAfterViewRange;
- inst.BackViewRange = BackViewRange;
+ inst.ViewAngleRange = ViewAngleRange;
inst.Gold = Gold;
return inst;
}
diff --git a/DungeonShooting_Godot/src/framework/activity/components/IStateController.cs b/DungeonShooting_Godot/src/framework/activity/components/IStateController.cs
new file mode 100644
index 0000000..5fb7c0f
--- /dev/null
+++ b/DungeonShooting_Godot/src/framework/activity/components/IStateController.cs
@@ -0,0 +1,8 @@
+
+///
+/// 状态控制器接口
+///
+public interface IStateController
+{
+
+}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/framework/activity/components/StateController.cs b/DungeonShooting_Godot/src/framework/activity/components/StateController.cs
index 942dd5f..5c86eb0 100644
--- a/DungeonShooting_Godot/src/framework/activity/components/StateController.cs
+++ b/DungeonShooting_Godot/src/framework/activity/components/StateController.cs
@@ -5,7 +5,7 @@
///
/// 对象状态机控制器
///
-public class StateController : Component where T : ActivityObject where S : Enum
+public class StateController : Component, IStateController where T : ActivityObject where S : Enum
{
///
/// 获取当前状态
diff --git a/DungeonShooting_Godot/src/game/activity/role/Role.cs b/DungeonShooting_Godot/src/game/activity/role/Role.cs
index 7b36d4d..27c7d34 100644
--- a/DungeonShooting_Godot/src/game/activity/role/Role.cs
+++ b/DungeonShooting_Godot/src/game/activity/role/Role.cs
@@ -824,7 +824,6 @@
return null;
}
-
///
/// 触发使用道具
///
@@ -845,8 +844,8 @@
/// 伤害角度(弧度制)
public virtual void HurtHandler(ActivityObject target, int damage, float angle)
{
- //受伤闪烁, 无敌状态
- if (Invincible)
+ //受伤闪烁, 无敌状态, 或者已经死亡
+ if (Invincible || IsDie)
{
return;
}
@@ -893,13 +892,53 @@
if (!IsDie)
{
IsDie = true;
- OnDie();
- //死亡事件
- World.OnRoleDie(this);
+
+ //禁用状态机控制器
+ var stateController = GetComponent(typeof(IStateController));
+ if (stateController != null)
+ {
+ stateController.Enable = false;
+ }
+
+ //播放死亡动画
+ if (AnimationPlayer.HasAnimation(AnimatorNames.Die))
+ {
+ StartCoroutine(DoDieWithAnimationPlayer());
+ }
+ else if (AnimatedSprite.SpriteFrames.HasAnimation(AnimatorNames.Die))
+ {
+ StartCoroutine(DoDieWithAnimatedSprite());
+ }
+ else
+ {
+ DoDieHandler();
+ }
}
}
}
+ private IEnumerator DoDieWithAnimationPlayer()
+ {
+ AnimationPlayer.Play(AnimatorNames.Die);
+ yield return ToSignal(AnimationPlayer, AnimationMixer.SignalName.AnimationFinished);
+ DoDieHandler();
+ }
+
+ private IEnumerator DoDieWithAnimatedSprite()
+ {
+ AnimatedSprite.Play(AnimatorNames.Die);
+ yield return ToSignal(AnimatedSprite, AnimatedSprite2D.SignalName.AnimationFinished);
+ DoDieHandler();
+ }
+
+ //死亡逻辑
+ private void DoDieHandler()
+ {
+ OnDie();
+ //死亡事件
+ World.OnRoleDie(this);
+ }
+
///
/// 播放无敌状态闪烁动画
///
diff --git a/DungeonShooting_Godot/src/game/activity/role/ai/AiRole.cs b/DungeonShooting_Godot/src/game/activity/role/ai/AiRole.cs
index e782e18..8d5e16a 100644
--- a/DungeonShooting_Godot/src/game/activity/role/ai/AiRole.cs
+++ b/DungeonShooting_Godot/src/game/activity/role/ai/AiRole.cs
@@ -1,4 +1,5 @@
+using System;
using System.Collections.Generic;
using AiState;
using Godot;
@@ -87,11 +88,11 @@
get => _viewRange;
set
{
- if (_viewRange != value)
+ if (Math.Abs(_viewRange - value) > 0.001f)
{
if (ViewAreaCollision != null)
{
- ViewAreaCollision.Polygon = Utils.CreateSectorPolygon(0, value, 120, 4);
+ ViewAreaCollision.Polygon = Utils.CreateSectorPolygon(0, value, ViewAngleRange, 4);
}
}
_viewRange = value;
@@ -111,6 +112,11 @@
public float TailAfterViewRange { get; set; } = 400;
///
+ /// 视野角度, 角度制
+ ///
+ public float ViewAngleRange { get; set; } = 150;
+
+ ///
/// 攻击间隔时间, 秒
///
public float AttackInterval { get; set; } = 0;
@@ -189,6 +195,19 @@
TargetInView = !TargetHasOcclusion && TargetInViewRange;
}
}
+
+ //更新视野范围
+ switch (StateController.CurrState)
+ {
+ case AIStateEnum.AiNormal:
+ case AIStateEnum.AiNotify:
+ case AIStateEnum.AiAstonished:
+ ViewRange = DefaultViewRange;
+ break;
+ default:
+ ViewRange = TailAfterViewRange;
+ break;
+ }
}
///
diff --git a/DungeonShooting_Godot/src/game/activity/role/enemy/Enemy.cs b/DungeonShooting_Godot/src/game/activity/role/enemy/Enemy.cs
index f057560..82237bc 100644
--- a/DungeonShooting_Godot/src/game/activity/role/enemy/Enemy.cs
+++ b/DungeonShooting_Godot/src/game/activity/role/enemy/Enemy.cs
@@ -87,6 +87,7 @@
DefaultViewRange = enemyBase.ViewRange;
TailAfterViewRange = enemyBase.TailAfterViewRange;
AttackInterval = enemyBase.AttackInterval;
+ ViewAngleRange = enemyBase.ViewAngleRange;
roleState.Gold = Mathf.Max(0, Utils.Random.RandomConfigRange(enemyBase.Gold));
return roleState;
diff --git a/DungeonShooting_Godot/src/game/activity/role/enemy/NoWeaponEnemy.cs b/DungeonShooting_Godot/src/game/activity/role/enemy/NoWeaponEnemy.cs
index 3dd5f63..e0d6d6e 100644
--- a/DungeonShooting_Godot/src/game/activity/role/enemy/NoWeaponEnemy.cs
+++ b/DungeonShooting_Godot/src/game/activity/role/enemy/NoWeaponEnemy.cs
@@ -41,6 +41,10 @@
///
public virtual void OnAttack()
{
+ if (LookTarget == null)
+ {
+ return;
+ }
//攻击特效
var effect = ObjectManager.GetPoolItem(ResourcePath.prefab_effect_weapon_ShotFire0003_tscn);
var node = (Node2D)effect;
diff --git a/DungeonShooting_Godot/src/game/activity/role/player/Player.cs b/DungeonShooting_Godot/src/game/activity/role/player/Player.cs
index ca2e85f..57fec73 100644
--- a/DungeonShooting_Godot/src/game/activity/role/player/Player.cs
+++ b/DungeonShooting_Godot/src/game/activity/role/player/Player.cs
@@ -264,7 +264,7 @@
}
//测试刷地
- DrawLiquid(_brushData2);
+ //DrawLiquid(_brushData2);
}
protected override void OnAffiliationChange(AffiliationArea prevArea)
@@ -300,6 +300,12 @@
{
PlayInvincibleFlashing(RoleState.ShieldInvincibleTime);
}
+
+ //血量为0, 扔掉所有武器
+ if (Hp <= 0)
+ {
+ ThrowAllWeapon();
+ }
}
protected override void OnChangeHp(int hp)
@@ -346,12 +352,16 @@
GameCamera.Main.SetFollowTarget(null);
BasisVelocity = Vector2.Zero;
MoveController.ClearForce();
+ Visible = false;
- //暂停游戏
- World.Current.Pause = true;
- //弹出结算面板
- GameApplication.Instance.Cursor.SetGuiMode(true);
- UiManager.Open_Settlement();
+ World.CallDelay(0.5f, () =>
+ {
+ //暂停游戏
+ World.Current.Pause = true;
+ //弹出结算面板
+ GameApplication.Instance.Cursor.SetGuiMode(true);
+ UiManager.Open_Settlement();
+ });
}
protected override void OnPickUpActiveProp(ActiveProp activeProp)
diff --git a/DungeonShooting_Godot/src/game/data/property/AnimatorNames.cs b/DungeonShooting_Godot/src/game/data/property/AnimatorNames.cs
index 88ae1af..aa5170c 100644
--- a/DungeonShooting_Godot/src/game/data/property/AnimatorNames.cs
+++ b/DungeonShooting_Godot/src/game/data/property/AnimatorNames.cs
@@ -101,6 +101,10 @@
///
public static readonly StringName Pull = "pull";
+ ///
+ /// 死亡
+ ///
+ public static readonly StringName Die = "die";
public static readonly StringName HalfStart = "half_start";
public static readonly StringName HalfEnd = "half_end";