diff --git a/.gitignore b/.gitignore
index 796f2c4..7227cb3 100644
--- a/.gitignore
+++ b/.gitignore
@@ -19,3 +19,4 @@
/DungeonShooting_ExcelTool/bin
/DungeonShooting_Godot/DungeonShooting.sln.DotSettings.user
/DungeonShooting_Godot/.VSCodeCounter
+**/*.txt
diff --git a/DungeonShooting_Godot/addons/dungeonShooting_plugin/generator/ResourcePathGenerator.cs b/DungeonShooting_Godot/addons/dungeonShooting_plugin/generator/ResourcePathGenerator.cs
index c824d0f..e0e6599 100644
--- a/DungeonShooting_Godot/addons/dungeonShooting_plugin/generator/ResourcePathGenerator.cs
+++ b/DungeonShooting_Godot/addons/dungeonShooting_plugin/generator/ResourcePathGenerator.cs
@@ -40,12 +40,12 @@
".git",
".import",
".mono",
+ ".VSCodeCounter",
"android",
"addons",
".godot",
".vs",
- "resource/map/tiledata",
- "resource/map/tileMaps"
+ "resource/map"
};
private static string resultStr = "";
diff --git a/DungeonShooting_Godot/excel/ActivityBase.xlsx b/DungeonShooting_Godot/excel/ActivityBase.xlsx
index e6240ec..a839ad2 100644
--- a/DungeonShooting_Godot/excel/ActivityBase.xlsx
+++ b/DungeonShooting_Godot/excel/ActivityBase.xlsx
Binary files differ
diff --git a/DungeonShooting_Godot/excel/AiAttackAttr.xlsx b/DungeonShooting_Godot/excel/AiAttackAttr.xlsx
index 8d3cdf5..937aafc 100644
--- a/DungeonShooting_Godot/excel/AiAttackAttr.xlsx
+++ b/DungeonShooting_Godot/excel/AiAttackAttr.xlsx
Binary files differ
diff --git a/DungeonShooting_Godot/excel/BulletBase.xlsx b/DungeonShooting_Godot/excel/BulletBase.xlsx
index 6ee6491..e3f1e11 100644
--- a/DungeonShooting_Godot/excel/BulletBase.xlsx
+++ b/DungeonShooting_Godot/excel/BulletBase.xlsx
Binary files differ
diff --git a/DungeonShooting_Godot/excel/EnemyBase.xlsx b/DungeonShooting_Godot/excel/EnemyBase.xlsx
index cec7fac..e54451e 100644
--- a/DungeonShooting_Godot/excel/EnemyBase.xlsx
+++ b/DungeonShooting_Godot/excel/EnemyBase.xlsx
Binary files differ
diff --git a/DungeonShooting_Godot/excel/Sound.xlsx b/DungeonShooting_Godot/excel/Sound.xlsx
index ff7944e..47c6585 100644
--- a/DungeonShooting_Godot/excel/Sound.xlsx
+++ b/DungeonShooting_Godot/excel/Sound.xlsx
Binary files differ
diff --git a/DungeonShooting_Godot/excel/WeaponBase.xlsx b/DungeonShooting_Godot/excel/WeaponBase.xlsx
index e3c81e8..d4ad41a 100644
--- a/DungeonShooting_Godot/excel/WeaponBase.xlsx
+++ b/DungeonShooting_Godot/excel/WeaponBase.xlsx
Binary files differ
diff --git a/DungeonShooting_Godot/excelTool/ExcelGenerator.cs b/DungeonShooting_Godot/excelTool/ExcelGenerator.cs
index 0268b2a..c206007 100644
--- a/DungeonShooting_Godot/excelTool/ExcelGenerator.cs
+++ b/DungeonShooting_Godot/excelTool/ExcelGenerator.cs
@@ -524,7 +524,20 @@
var cellStringValue = GetCellStringValue(cell);
if (cellStringValue.Length == 0)
{
- data.Add(field, null);
+ if (mappingData.TypeStr == nameof(ActivityQuality))
+ {
+ ActivityQuality v = default;
+ data.Add(field, v);
+ }
+ else if (mappingData.TypeStr == nameof(ActivityType))
+ {
+ ActivityType v = default;
+ data.Add(field, v);
+ }
+ else
+ {
+ data.Add(field, null);
+ }
}
else
{
@@ -691,6 +704,8 @@
case "vector2": return "SerializeVector2";
case "vector3": return "SerializeVector3";
case "color": return "SerializeColor";
+ case "activityType": return "ActivityType";
+ case "activityQuality": return "ActivityQuality";
}
return typeName;
@@ -716,6 +731,8 @@
case "vector2": return "SerializeVector2";
case "vector3": return "SerializeVector3";
case "color": return "SerializeColor";
+ case "activityType": return "ActivityType";
+ case "activityQuality": return "ActivityQuality";
}
return typeName;
diff --git a/DungeonShooting_Godot/excelTool/serialize/ActivityQuality.cs b/DungeonShooting_Godot/excelTool/serialize/ActivityQuality.cs
new file mode 100644
index 0000000..9d5641d
--- /dev/null
+++ b/DungeonShooting_Godot/excelTool/serialize/ActivityQuality.cs
@@ -0,0 +1,39 @@
+
+///
+/// 物体品质
+///
+public enum ActivityQuality
+{
+ ///
+ /// 未设置
+ ///
+ None = 0,
+ ///
+ /// 通用物品
+ ///
+ Common = 1,
+ ///
+ /// 基础
+ ///
+ Basic = 2,
+ ///
+ /// 普通
+ ///
+ Ordinary = 3,
+ ///
+ /// 稀有
+ ///
+ Rare = 4,
+ ///
+ /// 史诗
+ ///
+ Epic = 5,
+ ///
+ /// 传说
+ ///
+ Legend = 6,
+ ///
+ /// 独一无二
+ ///
+ Unique = 7
+}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/excelTool/serialize/ActivityType.cs b/DungeonShooting_Godot/excelTool/serialize/ActivityType.cs
new file mode 100644
index 0000000..d094992
--- /dev/null
+++ b/DungeonShooting_Godot/excelTool/serialize/ActivityType.cs
@@ -0,0 +1,55 @@
+
+///
+/// 物体类型
+///
+public enum ActivityType
+{
+ ///
+ /// 无类型
+ ///
+ None,
+ ///
+ /// 玩家
+ ///
+ Player,
+ ///
+ /// 测试对象
+ ///
+ Test,
+ ///
+ /// 角色
+ ///
+ Role,
+ ///
+ /// 敌人
+ ///
+ Enemy,
+ ///
+ /// 武器
+ ///
+ Weapon,
+ ///
+ /// 子弹
+ ///
+ Bullet,
+ ///
+ /// 弹壳
+ ///
+ Shell,
+ ///
+ /// 特效
+ ///
+ Effect,
+ ///
+ /// 道具
+ ///
+ Prop,
+ ///
+ /// 宝箱
+ ///
+ Treasure,
+ ///
+ /// 其它类型
+ ///
+ Other = 99,
+}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/excelTool/version b/DungeonShooting_Godot/excelTool/version
index 56a6051..bf0d87a 100644
--- a/DungeonShooting_Godot/excelTool/version
+++ b/DungeonShooting_Godot/excelTool/version
@@ -1 +1 @@
-1
\ No newline at end of file
+4
\ No newline at end of file
diff --git a/DungeonShooting_Godot/prefab/box/TreasureBox0001.tscn b/DungeonShooting_Godot/prefab/box/TreasureBox0001.tscn
new file mode 100644
index 0000000..804110c
--- /dev/null
+++ b/DungeonShooting_Godot/prefab/box/TreasureBox0001.tscn
@@ -0,0 +1,94 @@
+[gd_scene load_steps=12 format=3 uid="uid://d2gj0yuup0gdb"]
+
+[ext_resource type="Script" path="res://src/game/activity/box/TreasureBox.cs" id="1_wxils"]
+[ext_resource type="Shader" path="res://resource/material/Blend.gdshader" id="2_l4sas"]
+[ext_resource type="Texture2D" uid="uid://dladvmgql1pwe" path="res://resource/sprite/box/TreasureBox0001.png" id="3_eed5t"]
+
+[sub_resource type="ShaderMaterial" id="ShaderMaterial_1v1is"]
+resource_local_to_scene = true
+shader = ExtResource("2_l4sas")
+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_lewo8"]
+resource_local_to_scene = true
+shader = ExtResource("2_l4sas")
+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="AtlasTexture" id="AtlasTexture_hserg"]
+atlas = ExtResource("3_eed5t")
+region = Rect2(0, 0, 32, 32)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_8d3br"]
+atlas = ExtResource("3_eed5t")
+region = Rect2(0, 0, 32, 32)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_fp844"]
+atlas = ExtResource("3_eed5t")
+region = Rect2(32, 0, 32, 32)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_151ky"]
+atlas = ExtResource("3_eed5t")
+region = Rect2(64, 0, 32, 32)
+
+[sub_resource type="SpriteFrames" id="SpriteFrames_e74dc"]
+animations = [{
+"frames": [{
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_hserg")
+}],
+"loop": false,
+"name": &"default",
+"speed": 5.0
+}, {
+"frames": [{
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_8d3br")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_fp844")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_151ky")
+}],
+"loop": false,
+"name": &"open",
+"speed": 8.0
+}]
+
+[sub_resource type="RectangleShape2D" id="RectangleShape2D_j3yup"]
+size = Vector2(26, 11)
+
+[node name="TreasureBox0001" type="CharacterBody2D" node_paths=PackedStringArray("ShadowSprite", "AnimatedSprite", "Collision")]
+collision_layer = 516
+script = ExtResource("1_wxils")
+ShadowSprite = NodePath("ShadowSprite")
+AnimatedSprite = NodePath("AnimatedSprite")
+Collision = NodePath("Collision")
+
+[node name="ShadowSprite" type="Sprite2D" parent="."]
+z_index = -1
+material = SubResource("ShaderMaterial_1v1is")
+
+[node name="AnimatedSprite" type="AnimatedSprite2D" parent="."]
+material = SubResource("ShaderMaterial_lewo8")
+position = Vector2(0, -11)
+sprite_frames = SubResource("SpriteFrames_e74dc")
+animation = &"open"
+
+[node name="Collision" type="CollisionShape2D" parent="."]
+position = Vector2(0, -1.5)
+shape = SubResource("RectangleShape2D_j3yup")
diff --git a/DungeonShooting_Godot/prefab/bullet/explode/Explode0001.tscn b/DungeonShooting_Godot/prefab/bullet/explode/Explode0001.tscn
index fad5129..bd7ca13 100644
--- a/DungeonShooting_Godot/prefab/bullet/explode/Explode0001.tscn
+++ b/DungeonShooting_Godot/prefab/bullet/explode/Explode0001.tscn
@@ -307,6 +307,7 @@
modulate = Color(1.3, 1.3, 1.3, 1)
z_index = 1
collision_layer = 0
+collision_mask = 0
monitorable = false
script = ExtResource("1_qn5pu")
diff --git a/DungeonShooting_Godot/prefab/bullet/laser/Laser0001.tscn b/DungeonShooting_Godot/prefab/bullet/laser/Laser0001.tscn
index 9189dc9..04de455 100644
--- a/DungeonShooting_Godot/prefab/bullet/laser/Laser0001.tscn
+++ b/DungeonShooting_Godot/prefab/bullet/laser/Laser0001.tscn
@@ -8,6 +8,7 @@
[node name="Laser0001" type="Area2D" node_paths=PackedStringArray("Particles2D")]
collision_layer = 2
+collision_mask = 0
monitorable = false
script = ExtResource("1_3w0rp")
Particles2D = []
diff --git a/DungeonShooting_Godot/prefab/bullet/laser/Laser0002.tscn b/DungeonShooting_Godot/prefab/bullet/laser/Laser0002.tscn
new file mode 100644
index 0000000..c989324
--- /dev/null
+++ b/DungeonShooting_Godot/prefab/bullet/laser/Laser0002.tscn
@@ -0,0 +1,24 @@
+[gd_scene load_steps=4 format=3 uid="uid://cjt68qk2mm7km"]
+
+[ext_resource type="Script" path="res://src/game/activity/bullet/laser/Laser.cs" id="1_t3xbd"]
+[ext_resource type="Texture2D" uid="uid://clfpbq1c1ilp1" path="res://resource/sprite/bullet/laser/Laser0001.png" id="2_ga23q"]
+
+[sub_resource type="RectangleShape2D" id="RectangleShape2D_l4vuk"]
+resource_local_to_scene = true
+
+[node name="Laser0001" type="Area2D" node_paths=PackedStringArray("Particles2D")]
+collision_layer = 2
+collision_mask = 0
+monitorable = false
+script = ExtResource("1_t3xbd")
+Particles2D = []
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
+shape = SubResource("RectangleShape2D_l4vuk")
+
+[node name="LineSprite" type="Sprite2D" parent="."]
+modulate = Color(1.5, 1.5, 1.5, 1)
+position = Vector2(0, 1.19209e-07)
+texture = ExtResource("2_ga23q")
+centered = false
+offset = Vector2(0, -8)
diff --git a/DungeonShooting_Godot/prefab/bullet/normal/Bullet0001.tscn b/DungeonShooting_Godot/prefab/bullet/normal/Bullet0001.tscn
index 6c95617..e1ddde3 100644
--- a/DungeonShooting_Godot/prefab/bullet/normal/Bullet0001.tscn
+++ b/DungeonShooting_Godot/prefab/bullet/normal/Bullet0001.tscn
@@ -1,8 +1,8 @@
-[gd_scene load_steps=8 format=3 uid="uid://bj4kmvt8jg1cf"]
+[gd_scene load_steps=7 format=3 uid="uid://bj4kmvt8jg1cf"]
[ext_resource type="Script" path="res://src/game/activity/bullet/normal/Bullet.cs" id="1_3d3df"]
[ext_resource type="Shader" path="res://resource/material/Blend.gdshader" id="2_mxa72"]
-[ext_resource type="Texture2D" uid="uid://bu0b11hiuecxy" path="res://resource/sprite/bullet/normal/bullet0001.png" id="3_pm4pr"]
+[ext_resource type="SpriteFrames" uid="uid://baoxep7vami72" path="res://resource/spriteFrames/bullet/Bullet0001.tres" id="3_q4a0o"]
[sub_resource type="ShaderMaterial" id="ShaderMaterial_w5w0i"]
resource_local_to_scene = true
@@ -28,22 +28,12 @@
shader_parameter/outline_use_blend = false
shader_parameter/grey = 0.0
-[sub_resource type="SpriteFrames" id="SpriteFrames_5wvmf"]
-animations = [{
-"frames": [{
-"duration": 1.0,
-"texture": ExtResource("3_pm4pr")
-}],
-"loop": true,
-"name": &"default",
-"speed": 5.0
-}]
-
[sub_resource type="RectangleShape2D" id="RectangleShape2D_lcqb8"]
size = Vector2(9, 4)
[node name="Bullet0001" type="CharacterBody2D" node_paths=PackedStringArray("CollisionArea", "CollisionShape2D", "Particles2D", "ShadowSprite", "AnimatedSprite", "Collision")]
collision_layer = 2
+collision_mask = 0
script = ExtResource("1_3d3df")
CollisionArea = NodePath("AnimatedSprite/CollisionArea")
CollisionShape2D = NodePath("AnimatedSprite/CollisionArea/CollisionShape2D")
@@ -59,7 +49,7 @@
[node name="AnimatedSprite" type="AnimatedSprite2D" parent="."]
modulate = Color(1.6, 1.6, 1.6, 1)
material = SubResource("ShaderMaterial_qhkgc")
-sprite_frames = SubResource("SpriteFrames_5wvmf")
+sprite_frames = ExtResource("3_q4a0o")
[node name="CollisionArea" type="Area2D" parent="AnimatedSprite"]
collision_layer = 0
diff --git a/DungeonShooting_Godot/prefab/bullet/normal/Bullet0002.tscn b/DungeonShooting_Godot/prefab/bullet/normal/Bullet0002.tscn
index ecabf2f..4441bc7 100644
--- a/DungeonShooting_Godot/prefab/bullet/normal/Bullet0002.tscn
+++ b/DungeonShooting_Godot/prefab/bullet/normal/Bullet0002.tscn
@@ -36,6 +36,7 @@
[node name="Bullet0002" type="CharacterBody2D" node_paths=PackedStringArray("CollisionArea", "CollisionShape2D", "Particles2D", "ShadowSprite", "AnimatedSprite", "Collision")]
collision_layer = 2
+collision_mask = 0
script = ExtResource("1_hepay")
CollisionArea = NodePath("AnimatedSprite/CollisionArea")
CollisionShape2D = NodePath("AnimatedSprite/CollisionArea/CollisionShape2D")
diff --git a/DungeonShooting_Godot/prefab/bullet/normal/Bullet0003.tscn b/DungeonShooting_Godot/prefab/bullet/normal/Bullet0003.tscn
index b87d8e0..88082d7 100644
--- a/DungeonShooting_Godot/prefab/bullet/normal/Bullet0003.tscn
+++ b/DungeonShooting_Godot/prefab/bullet/normal/Bullet0003.tscn
@@ -33,6 +33,7 @@
[node name="Bullet0003" type="CharacterBody2D" node_paths=PackedStringArray("CollisionArea", "CollisionShape2D", "Particles2D", "ShadowSprite", "AnimatedSprite", "Collision")]
collision_layer = 2
+collision_mask = 0
script = ExtResource("1_h6lfm")
CollisionArea = NodePath("AnimatedSprite/CollisionArea")
CollisionShape2D = NodePath("AnimatedSprite/CollisionArea/CollisionShape2D")
diff --git a/DungeonShooting_Godot/prefab/bullet/normal/Bullet0004.tscn b/DungeonShooting_Godot/prefab/bullet/normal/Bullet0004.tscn
index 3c96ac3..57e55ab 100644
--- a/DungeonShooting_Godot/prefab/bullet/normal/Bullet0004.tscn
+++ b/DungeonShooting_Godot/prefab/bullet/normal/Bullet0004.tscn
@@ -62,6 +62,7 @@
[node name="Bullet0003" type="CharacterBody2D" node_paths=PackedStringArray("CollisionArea", "CollisionShape2D", "Particles2D", "ShadowSprite", "AnimatedSprite", "Collision")]
collision_layer = 2
+collision_mask = 0
script = ExtResource("1_1jbgr")
CollisionArea = NodePath("AnimatedSprite/CollisionArea")
CollisionShape2D = NodePath("AnimatedSprite/CollisionArea/CollisionShape2D")
diff --git a/DungeonShooting_Godot/prefab/bullet/normal/Bullet0005.tscn b/DungeonShooting_Godot/prefab/bullet/normal/Bullet0005.tscn
index 3203560..a6a0493 100644
--- a/DungeonShooting_Godot/prefab/bullet/normal/Bullet0005.tscn
+++ b/DungeonShooting_Godot/prefab/bullet/normal/Bullet0005.tscn
@@ -62,6 +62,8 @@
[node name="Bullet0005" type="CharacterBody2D" node_paths=PackedStringArray("CollisionArea", "CollisionShape2D", "Particles2D", "ShadowSprite", "AnimatedSprite", "Collision")]
collision_layer = 2
+collision_mask = 0
+platform_wall_layers = 512
script = ExtResource("1_13wdl")
BrushId = "0004"
EffectiveAltitude = 1.0
diff --git a/DungeonShooting_Godot/prefab/bullet/normal/Bullet0006.tscn b/DungeonShooting_Godot/prefab/bullet/normal/Bullet0006.tscn
new file mode 100644
index 0000000..9e58d27
--- /dev/null
+++ b/DungeonShooting_Godot/prefab/bullet/normal/Bullet0006.tscn
@@ -0,0 +1,66 @@
+[gd_scene load_steps=8 format=3 uid="uid://c1fx7c1jwil26"]
+
+[ext_resource type="Script" path="res://src/game/activity/bullet/normal/TrailBullet.cs" id="1_b8pov"]
+[ext_resource type="Shader" path="res://resource/material/Blend.gdshader" id="2_iolc6"]
+[ext_resource type="SpriteFrames" uid="uid://dx4t45bq8ehhq" path="res://resource/spriteFrames/bullet/Bullet0006.tres" id="3_v2y7a"]
+
+[sub_resource type="ShaderMaterial" id="ShaderMaterial_w5w0i"]
+resource_local_to_scene = true
+shader = ExtResource("2_iolc6")
+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 = false
+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_qhkgc"]
+resource_local_to_scene = true
+shader = ExtResource("2_iolc6")
+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 = false
+shader_parameter/outline_color = Color(0, 0, 0, 1)
+shader_parameter/outline_rainbow = false
+shader_parameter/outline_use_blend = false
+shader_parameter/grey = 0.0
+
+[sub_resource type="CircleShape2D" id="CircleShape2D_4mw2b"]
+radius = 3.0
+
+[sub_resource type="CircleShape2D" id="CircleShape2D_vqdkp"]
+radius = 3.0
+
+[node name="Bullet0006" type="CharacterBody2D" node_paths=PackedStringArray("CollisionArea", "CollisionShape2D", "Particles2D", "ShadowSprite", "AnimatedSprite", "Collision")]
+collision_layer = 2
+collision_mask = 0
+script = ExtResource("1_b8pov")
+CollisionArea = NodePath("AnimatedSprite/CollisionArea")
+CollisionShape2D = NodePath("AnimatedSprite/CollisionArea/CollisionShape2D")
+Particles2D = []
+ShadowSprite = NodePath("ShadowSprite")
+AnimatedSprite = NodePath("AnimatedSprite")
+Collision = NodePath("Collision")
+
+[node name="ShadowSprite" type="Sprite2D" parent="."]
+z_index = -1
+material = SubResource("ShaderMaterial_w5w0i")
+
+[node name="AnimatedSprite" type="AnimatedSprite2D" parent="."]
+modulate = Color(1.6, 1.6, 1.6, 1)
+material = SubResource("ShaderMaterial_qhkgc")
+sprite_frames = ExtResource("3_v2y7a")
+
+[node name="CollisionArea" type="Area2D" parent="AnimatedSprite"]
+collision_layer = 0
+collision_mask = 0
+monitorable = false
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="AnimatedSprite/CollisionArea"]
+shape = SubResource("CircleShape2D_4mw2b")
+
+[node name="Collision" type="CollisionShape2D" parent="."]
+shape = SubResource("CircleShape2D_vqdkp")
diff --git a/DungeonShooting_Godot/prefab/bullet/normal/Bullet0007.tscn b/DungeonShooting_Godot/prefab/bullet/normal/Bullet0007.tscn
new file mode 100644
index 0000000..4dfced6
--- /dev/null
+++ b/DungeonShooting_Godot/prefab/bullet/normal/Bullet0007.tscn
@@ -0,0 +1,67 @@
+[gd_scene load_steps=8 format=3 uid="uid://cybey66bhe4ro"]
+
+[ext_resource type="Script" path="res://src/game/activity/bullet/normal/Bullet.cs" id="1_h4tn7"]
+[ext_resource type="Shader" path="res://resource/material/Blend.gdshader" id="2_fgeyt"]
+[ext_resource type="SpriteFrames" uid="uid://bkwoy70bnm74k" path="res://resource/spriteFrames/bullet/Bullet0007.tres" id="3_c1ec6"]
+
+[sub_resource type="ShaderMaterial" id="ShaderMaterial_v77gw"]
+resource_local_to_scene = true
+shader = ExtResource("2_fgeyt")
+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 = false
+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_r6pkp"]
+resource_local_to_scene = true
+shader = ExtResource("2_fgeyt")
+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 = false
+shader_parameter/outline_color = Color(0, 0, 0, 1)
+shader_parameter/outline_rainbow = false
+shader_parameter/outline_use_blend = false
+shader_parameter/grey = 0.0
+
+[sub_resource type="CircleShape2D" id="CircleShape2D_0vxfv"]
+radius = 2.0
+
+[sub_resource type="CircleShape2D" id="CircleShape2D_e2yn3"]
+radius = 2.0
+
+[node name="Bullet0007" type="CharacterBody2D" node_paths=PackedStringArray("CollisionArea", "CollisionShape2D", "Particles2D", "ShadowSprite", "AnimatedSprite", "Collision")]
+collision_layer = 2
+collision_mask = 0
+script = ExtResource("1_h4tn7")
+CollisionArea = NodePath("AnimatedSprite/CollisionArea")
+CollisionShape2D = NodePath("AnimatedSprite/CollisionArea/CollisionShape2D")
+Particles2D = []
+ShadowSprite = NodePath("ShadowSprite")
+AnimatedSprite = NodePath("AnimatedSprite")
+Collision = NodePath("Collision")
+
+[node name="ShadowSprite" type="Sprite2D" parent="."]
+z_index = -1
+material = SubResource("ShaderMaterial_v77gw")
+
+[node name="AnimatedSprite" type="AnimatedSprite2D" parent="."]
+modulate = Color(2, 2, 2, 1)
+material = SubResource("ShaderMaterial_r6pkp")
+sprite_frames = ExtResource("3_c1ec6")
+
+[node name="CollisionArea" type="Area2D" parent="AnimatedSprite"]
+collision_layer = 0
+collision_mask = 0
+monitorable = false
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="AnimatedSprite/CollisionArea"]
+position = Vector2(-2.38419e-07, 0)
+shape = SubResource("CircleShape2D_0vxfv")
+
+[node name="Collision" type="CollisionShape2D" parent="."]
+shape = SubResource("CircleShape2D_e2yn3")
diff --git a/DungeonShooting_Godot/prefab/bullet/normal/Bullet0008.tscn b/DungeonShooting_Godot/prefab/bullet/normal/Bullet0008.tscn
new file mode 100644
index 0000000..838ada7
--- /dev/null
+++ b/DungeonShooting_Godot/prefab/bullet/normal/Bullet0008.tscn
@@ -0,0 +1,66 @@
+[gd_scene load_steps=8 format=3 uid="uid://d3dcmte122p6t"]
+
+[ext_resource type="Script" path="res://src/game/activity/bullet/normal/ColorBullet.cs" id="1_qqm5l"]
+[ext_resource type="Shader" path="res://resource/material/Blend.gdshader" id="2_t3qw6"]
+[ext_resource type="SpriteFrames" uid="uid://ubdvau75andr" path="res://resource/spriteFrames/bullet/Bullet0008.tres" id="3_aoni0"]
+
+[sub_resource type="ShaderMaterial" id="ShaderMaterial_v77gw"]
+resource_local_to_scene = true
+shader = ExtResource("2_t3qw6")
+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 = false
+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_jypdq"]
+resource_local_to_scene = true
+shader = ExtResource("2_t3qw6")
+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 = false
+shader_parameter/outline_color = Color(0, 0, 0, 1)
+shader_parameter/outline_rainbow = false
+shader_parameter/outline_use_blend = false
+shader_parameter/grey = 0.0
+
+[sub_resource type="RectangleShape2D" id="RectangleShape2D_5x14b"]
+size = Vector2(22, 3)
+
+[sub_resource type="RectangleShape2D" id="RectangleShape2D_72d75"]
+size = Vector2(22, 3)
+
+[node name="Bullet0008" type="CharacterBody2D" node_paths=PackedStringArray("CollisionArea", "CollisionShape2D", "Particles2D", "ShadowSprite", "AnimatedSprite", "Collision")]
+collision_layer = 2
+collision_mask = 0
+script = ExtResource("1_qqm5l")
+CollisionArea = NodePath("AnimatedSprite/CollisionArea")
+CollisionShape2D = NodePath("AnimatedSprite/CollisionArea/CollisionShape2D")
+Particles2D = []
+ShadowSprite = NodePath("ShadowSprite")
+AnimatedSprite = NodePath("AnimatedSprite")
+Collision = NodePath("Collision")
+
+[node name="ShadowSprite" type="Sprite2D" parent="."]
+z_index = -1
+material = SubResource("ShaderMaterial_v77gw")
+
+[node name="AnimatedSprite" type="AnimatedSprite2D" parent="."]
+modulate = Color(1.6, 1.6, 1.6, 1)
+material = SubResource("ShaderMaterial_jypdq")
+sprite_frames = ExtResource("3_aoni0")
+
+[node name="CollisionArea" type="Area2D" parent="AnimatedSprite"]
+collision_layer = 0
+collision_mask = 0
+monitorable = false
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="AnimatedSprite/CollisionArea"]
+shape = SubResource("RectangleShape2D_5x14b")
+
+[node name="Collision" type="CollisionShape2D" parent="."]
+shape = SubResource("RectangleShape2D_72d75")
diff --git a/DungeonShooting_Godot/prefab/currency/Gold1.tscn b/DungeonShooting_Godot/prefab/currency/Gold1.tscn
new file mode 100644
index 0000000..5db5a1c
--- /dev/null
+++ b/DungeonShooting_Godot/prefab/currency/Gold1.tscn
@@ -0,0 +1,160 @@
+[gd_scene load_steps=24 format=3 uid="uid://bayga6rue4ldm"]
+
+[ext_resource type="PackedScene" uid="uid://c7i2q4mx5qp2h" path="res://prefab/currency/GoldTemplate.tscn" id="1_7anjj"]
+[ext_resource type="Shader" path="res://resource/material/Blend.gdshader" id="2_p7xui"]
+[ext_resource type="Texture2D" uid="uid://benn0iaclw8dk" path="res://resource/sprite/currency/Gold_1.png" id="3_lhsna"]
+
+[sub_resource type="ShaderMaterial" id="ShaderMaterial_2tpx1"]
+resource_local_to_scene = true
+shader = ExtResource("2_p7xui")
+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="AtlasTexture" id="AtlasTexture_e75yg"]
+atlas = ExtResource("3_lhsna")
+region = Rect2(0, 0, 8, 8)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_vipr3"]
+atlas = ExtResource("3_lhsna")
+region = Rect2(8, 0, 8, 8)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_c2w8t"]
+atlas = ExtResource("3_lhsna")
+region = Rect2(16, 0, 8, 8)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_4u1py"]
+atlas = ExtResource("3_lhsna")
+region = Rect2(24, 0, 8, 8)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_ejbhm"]
+atlas = ExtResource("3_lhsna")
+region = Rect2(32, 0, 8, 8)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_obptk"]
+atlas = ExtResource("3_lhsna")
+region = Rect2(40, 0, 8, 8)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_xdxp6"]
+atlas = ExtResource("3_lhsna")
+region = Rect2(48, 0, 8, 8)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_j2dug"]
+atlas = ExtResource("3_lhsna")
+region = Rect2(56, 0, 8, 8)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_0yf5k"]
+atlas = ExtResource("3_lhsna")
+region = Rect2(64, 0, 8, 8)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_aew3e"]
+atlas = ExtResource("3_lhsna")
+region = Rect2(72, 0, 8, 8)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_0uljq"]
+atlas = ExtResource("3_lhsna")
+region = Rect2(80, 0, 8, 8)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_fu3cl"]
+atlas = ExtResource("3_lhsna")
+region = Rect2(88, 0, 8, 8)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_c1vcu"]
+atlas = ExtResource("3_lhsna")
+region = Rect2(96, 0, 8, 8)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_8sqp3"]
+atlas = ExtResource("3_lhsna")
+region = Rect2(104, 0, 8, 8)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_htbwa"]
+atlas = ExtResource("3_lhsna")
+region = Rect2(112, 0, 8, 8)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_hei3a"]
+atlas = ExtResource("3_lhsna")
+region = Rect2(120, 0, 8, 8)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_0e87y"]
+atlas = ExtResource("3_lhsna")
+region = Rect2(128, 0, 8, 8)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_i2rar"]
+atlas = ExtResource("3_lhsna")
+region = Rect2(136, 0, 8, 8)
+
+[sub_resource type="SpriteFrames" id="SpriteFrames_3te8s"]
+animations = [{
+"frames": [{
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_e75yg")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_vipr3")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_c2w8t")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_4u1py")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_ejbhm")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_obptk")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_xdxp6")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_j2dug")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_0yf5k")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_aew3e")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_0uljq")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_fu3cl")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_c1vcu")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_8sqp3")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_htbwa")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_hei3a")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_0e87y")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_i2rar")
+}],
+"loop": true,
+"name": &"default",
+"speed": 10.0
+}]
+
+[node name="Gold1" instance=ExtResource("1_7anjj")]
+GoldCount = 1
+
+[node name="AnimatedSprite" parent="." index="1"]
+material = SubResource("ShaderMaterial_2tpx1")
+sprite_frames = SubResource("SpriteFrames_3te8s")
+autoplay = "default"
+frame_progress = 0.578976
diff --git a/DungeonShooting_Godot/prefab/currency/Gold10.tscn b/DungeonShooting_Godot/prefab/currency/Gold10.tscn
new file mode 100644
index 0000000..e723646
--- /dev/null
+++ b/DungeonShooting_Godot/prefab/currency/Gold10.tscn
@@ -0,0 +1,160 @@
+[gd_scene load_steps=24 format=3 uid="uid://cpfeog5xk7frv"]
+
+[ext_resource type="PackedScene" uid="uid://c7i2q4mx5qp2h" path="res://prefab/currency/GoldTemplate.tscn" id="1_q6rqs"]
+[ext_resource type="Shader" path="res://resource/material/Blend.gdshader" id="2_fwuy2"]
+[ext_resource type="Texture2D" uid="uid://7dy6itvggpwy" path="res://resource/sprite/currency/Gold_10.png" id="3_x42g4"]
+
+[sub_resource type="ShaderMaterial" id="ShaderMaterial_2tpx1"]
+resource_local_to_scene = true
+shader = ExtResource("2_fwuy2")
+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="AtlasTexture" id="AtlasTexture_x41wb"]
+atlas = ExtResource("3_x42g4")
+region = Rect2(0, 0, 8, 8)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_03ih4"]
+atlas = ExtResource("3_x42g4")
+region = Rect2(8, 0, 8, 8)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_qdoke"]
+atlas = ExtResource("3_x42g4")
+region = Rect2(16, 0, 8, 8)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_3wdhp"]
+atlas = ExtResource("3_x42g4")
+region = Rect2(24, 0, 8, 8)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_vgpiy"]
+atlas = ExtResource("3_x42g4")
+region = Rect2(32, 0, 8, 8)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_jfxvm"]
+atlas = ExtResource("3_x42g4")
+region = Rect2(40, 0, 8, 8)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_hqk1i"]
+atlas = ExtResource("3_x42g4")
+region = Rect2(48, 0, 8, 8)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_j4okn"]
+atlas = ExtResource("3_x42g4")
+region = Rect2(56, 0, 8, 8)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_nohmj"]
+atlas = ExtResource("3_x42g4")
+region = Rect2(64, 0, 8, 8)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_blcne"]
+atlas = ExtResource("3_x42g4")
+region = Rect2(72, 0, 8, 8)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_018qf"]
+atlas = ExtResource("3_x42g4")
+region = Rect2(80, 0, 8, 8)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_kb863"]
+atlas = ExtResource("3_x42g4")
+region = Rect2(88, 0, 8, 8)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_nrald"]
+atlas = ExtResource("3_x42g4")
+region = Rect2(96, 0, 8, 8)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_4rlwh"]
+atlas = ExtResource("3_x42g4")
+region = Rect2(104, 0, 8, 8)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_7qdiq"]
+atlas = ExtResource("3_x42g4")
+region = Rect2(112, 0, 8, 8)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_l7tjk"]
+atlas = ExtResource("3_x42g4")
+region = Rect2(120, 0, 8, 8)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_thd0w"]
+atlas = ExtResource("3_x42g4")
+region = Rect2(128, 0, 8, 8)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_js8fg"]
+atlas = ExtResource("3_x42g4")
+region = Rect2(136, 0, 8, 8)
+
+[sub_resource type="SpriteFrames" id="SpriteFrames_3te8s"]
+animations = [{
+"frames": [{
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_x41wb")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_03ih4")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_qdoke")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_3wdhp")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_vgpiy")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_jfxvm")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_hqk1i")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_j4okn")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_nohmj")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_blcne")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_018qf")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_kb863")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_nrald")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_4rlwh")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_7qdiq")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_l7tjk")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_thd0w")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_js8fg")
+}],
+"loop": true,
+"name": &"default",
+"speed": 10.0
+}]
+
+[node name="Gold10" instance=ExtResource("1_q6rqs")]
+GoldCount = 10
+
+[node name="AnimatedSprite" parent="." index="1"]
+material = SubResource("ShaderMaterial_2tpx1")
+sprite_frames = SubResource("SpriteFrames_3te8s")
+autoplay = "default"
+frame_progress = 0.578976
diff --git a/DungeonShooting_Godot/prefab/currency/Gold5.tscn b/DungeonShooting_Godot/prefab/currency/Gold5.tscn
new file mode 100644
index 0000000..88de932
--- /dev/null
+++ b/DungeonShooting_Godot/prefab/currency/Gold5.tscn
@@ -0,0 +1,160 @@
+[gd_scene load_steps=24 format=3 uid="uid://dqeph6v1y3ycm"]
+
+[ext_resource type="PackedScene" uid="uid://c7i2q4mx5qp2h" path="res://prefab/currency/GoldTemplate.tscn" id="1_t3bsk"]
+[ext_resource type="Shader" path="res://resource/material/Blend.gdshader" id="2_r5r64"]
+[ext_resource type="Texture2D" uid="uid://bfpcqj2x8t2os" path="res://resource/sprite/currency/Gold_5.png" id="3_rf7nc"]
+
+[sub_resource type="ShaderMaterial" id="ShaderMaterial_2tpx1"]
+resource_local_to_scene = true
+shader = ExtResource("2_r5r64")
+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="AtlasTexture" id="AtlasTexture_kpbsl"]
+atlas = ExtResource("3_rf7nc")
+region = Rect2(0, 0, 8, 8)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_tpaps"]
+atlas = ExtResource("3_rf7nc")
+region = Rect2(8, 0, 8, 8)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_gfmw0"]
+atlas = ExtResource("3_rf7nc")
+region = Rect2(16, 0, 8, 8)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_kh76b"]
+atlas = ExtResource("3_rf7nc")
+region = Rect2(24, 0, 8, 8)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_h71d5"]
+atlas = ExtResource("3_rf7nc")
+region = Rect2(32, 0, 8, 8)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_irvf2"]
+atlas = ExtResource("3_rf7nc")
+region = Rect2(40, 0, 8, 8)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_6upf3"]
+atlas = ExtResource("3_rf7nc")
+region = Rect2(48, 0, 8, 8)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_th3rv"]
+atlas = ExtResource("3_rf7nc")
+region = Rect2(56, 0, 8, 8)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_2nwhu"]
+atlas = ExtResource("3_rf7nc")
+region = Rect2(64, 0, 8, 8)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_3f1xk"]
+atlas = ExtResource("3_rf7nc")
+region = Rect2(72, 0, 8, 8)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_4edoa"]
+atlas = ExtResource("3_rf7nc")
+region = Rect2(80, 0, 8, 8)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_t7eeg"]
+atlas = ExtResource("3_rf7nc")
+region = Rect2(88, 0, 8, 8)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_x22g0"]
+atlas = ExtResource("3_rf7nc")
+region = Rect2(96, 0, 8, 8)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_14m0u"]
+atlas = ExtResource("3_rf7nc")
+region = Rect2(104, 0, 8, 8)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_4s0em"]
+atlas = ExtResource("3_rf7nc")
+region = Rect2(112, 0, 8, 8)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_ncscs"]
+atlas = ExtResource("3_rf7nc")
+region = Rect2(120, 0, 8, 8)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_gwnv8"]
+atlas = ExtResource("3_rf7nc")
+region = Rect2(128, 0, 8, 8)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_aw75c"]
+atlas = ExtResource("3_rf7nc")
+region = Rect2(136, 0, 8, 8)
+
+[sub_resource type="SpriteFrames" id="SpriteFrames_3te8s"]
+animations = [{
+"frames": [{
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_kpbsl")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_tpaps")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_gfmw0")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_kh76b")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_h71d5")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_irvf2")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_6upf3")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_th3rv")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_2nwhu")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_3f1xk")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_4edoa")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_t7eeg")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_x22g0")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_14m0u")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_4s0em")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_ncscs")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_gwnv8")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_aw75c")
+}],
+"loop": true,
+"name": &"default",
+"speed": 10.0
+}]
+
+[node name="Gold5" instance=ExtResource("1_t3bsk")]
+GoldCount = 5
+
+[node name="AnimatedSprite" parent="." index="1"]
+material = SubResource("ShaderMaterial_2tpx1")
+sprite_frames = SubResource("SpriteFrames_3te8s")
+autoplay = "default"
+frame_progress = 0.578976
diff --git a/DungeonShooting_Godot/prefab/currency/GoldTemplate.tscn b/DungeonShooting_Godot/prefab/currency/GoldTemplate.tscn
new file mode 100644
index 0000000..a759eeb
--- /dev/null
+++ b/DungeonShooting_Godot/prefab/currency/GoldTemplate.tscn
@@ -0,0 +1,40 @@
+[gd_scene load_steps=6 format=3 uid="uid://c7i2q4mx5qp2h"]
+
+[ext_resource type="Script" path="res://src/game/activity/currency/Gold.cs" id="1_p60kl"]
+[ext_resource type="Shader" path="res://resource/material/Blend.gdshader" id="2_5nps8"]
+[ext_resource type="Texture2D" uid="uid://cthwlbqve6i1l" path="res://resource/sprite/currency/Gold_shadow.png" id="3_6xm1s"]
+
+[sub_resource type="ShaderMaterial" id="ShaderMaterial_qdjhs"]
+resource_local_to_scene = true
+shader = ExtResource("2_5nps8")
+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_jvlsd"]
+size = Vector2(6, 4)
+
+[node name="GoldTemplate" type="CharacterBody2D" node_paths=PackedStringArray("ShadowSprite", "AnimatedSprite", "Collision")]
+collision_layer = 4
+collision_mask = 0
+script = ExtResource("1_p60kl")
+GoldCount = 0
+ShadowSprite = NodePath("ShadowSprite")
+AnimatedSprite = NodePath("AnimatedSprite")
+Collision = NodePath("Collision")
+
+[node name="ShadowSprite" type="Sprite2D" parent="."]
+z_index = -1
+texture = ExtResource("3_6xm1s")
+
+[node name="AnimatedSprite" type="AnimatedSprite2D" parent="."]
+material = SubResource("ShaderMaterial_qdjhs")
+offset = Vector2(0, -4)
+
+[node name="Collision" type="CollisionShape2D" parent="."]
+shape = SubResource("RectangleShape2D_jvlsd")
diff --git a/DungeonShooting_Godot/prefab/effect/common/Trail0001.tscn b/DungeonShooting_Godot/prefab/effect/common/Trail0001.tscn
new file mode 100644
index 0000000..d7d9242
--- /dev/null
+++ b/DungeonShooting_Godot/prefab/effect/common/Trail0001.tscn
@@ -0,0 +1,18 @@
+[gd_scene load_steps=4 format=3 uid="uid://ddwikcidm0gsi"]
+
+[ext_resource type="Script" path="res://src/game/effects/Trail.cs" id="1_i68ib"]
+
+[sub_resource type="Curve" id="Curve_fnvhf"]
+_data = [Vector2(0, 1), 0.0, 0.0, 0, 0, Vector2(1, 0.5), 0.0, 0.0, 0, 0]
+point_count = 2
+
+[sub_resource type="Gradient" id="Gradient_cjh8g"]
+resource_local_to_scene = true
+offsets = PackedFloat32Array(0.825949, 1)
+colors = PackedColorArray(1, 1, 1, 0.705882, 1, 1, 1, 0)
+
+[node name="Trail" type="Line2D"]
+width = 3.0
+width_curve = SubResource("Curve_fnvhf")
+gradient = SubResource("Gradient_cjh8g")
+script = ExtResource("1_i68ib")
diff --git a/DungeonShooting_Godot/prefab/effect/weapon/ShotFire.tscn b/DungeonShooting_Godot/prefab/effect/weapon/ShotFire.tscn
deleted file mode 100644
index 159734f..0000000
--- a/DungeonShooting_Godot/prefab/effect/weapon/ShotFire.tscn
+++ /dev/null
@@ -1,51 +0,0 @@
-[gd_scene load_steps=8 format=3 uid="uid://433h6huyctl1"]
-
-[ext_resource type="Texture2D" uid="uid://b0jsyrbk4bydt" path="res://resource/sprite/shootFire/ShotFire0001.png" id="1_sencp"]
-[ext_resource type="Script" path="res://src/game/effects/AutoDestroySprite.cs" id="2_lnwju"]
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_asq5h"]
-atlas = ExtResource("1_sencp")
-region = Rect2(0, 0, 16, 16)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_n77w8"]
-atlas = ExtResource("1_sencp")
-region = Rect2(16, 0, 16, 16)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_10rnx"]
-atlas = ExtResource("1_sencp")
-region = Rect2(32, 0, 16, 16)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_qi1pq"]
-atlas = ExtResource("1_sencp")
-region = Rect2(48, 0, 16, 16)
-
-[sub_resource type="SpriteFrames" id="SpriteFrames_73j16"]
-animations = [{
-"frames": [{
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_asq5h")
-}, {
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_n77w8")
-}, {
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_10rnx")
-}, {
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_qi1pq")
-}, {
-"duration": 1.0,
-"texture": null
-}],
-"loop": false,
-"name": &"default",
-"speed": 20.0
-}]
-
-[node name="ShotFire" type="AnimatedSprite2D" node_paths=PackedStringArray("Particles2D")]
-modulate = Color(1.6, 1.6, 1.6, 1)
-sprite_frames = SubResource("SpriteFrames_73j16")
-offset = Vector2(8, 0)
-script = ExtResource("2_lnwju")
-DelayTime = 0.5
-Particles2D = []
diff --git a/DungeonShooting_Godot/prefab/effect/weapon/ShotFire0001.tscn b/DungeonShooting_Godot/prefab/effect/weapon/ShotFire0001.tscn
new file mode 100644
index 0000000..159734f
--- /dev/null
+++ b/DungeonShooting_Godot/prefab/effect/weapon/ShotFire0001.tscn
@@ -0,0 +1,51 @@
+[gd_scene load_steps=8 format=3 uid="uid://433h6huyctl1"]
+
+[ext_resource type="Texture2D" uid="uid://b0jsyrbk4bydt" path="res://resource/sprite/shootFire/ShotFire0001.png" id="1_sencp"]
+[ext_resource type="Script" path="res://src/game/effects/AutoDestroySprite.cs" id="2_lnwju"]
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_asq5h"]
+atlas = ExtResource("1_sencp")
+region = Rect2(0, 0, 16, 16)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_n77w8"]
+atlas = ExtResource("1_sencp")
+region = Rect2(16, 0, 16, 16)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_10rnx"]
+atlas = ExtResource("1_sencp")
+region = Rect2(32, 0, 16, 16)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_qi1pq"]
+atlas = ExtResource("1_sencp")
+region = Rect2(48, 0, 16, 16)
+
+[sub_resource type="SpriteFrames" id="SpriteFrames_73j16"]
+animations = [{
+"frames": [{
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_asq5h")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_n77w8")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_10rnx")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_qi1pq")
+}, {
+"duration": 1.0,
+"texture": null
+}],
+"loop": false,
+"name": &"default",
+"speed": 20.0
+}]
+
+[node name="ShotFire" type="AnimatedSprite2D" node_paths=PackedStringArray("Particles2D")]
+modulate = Color(1.6, 1.6, 1.6, 1)
+sprite_frames = SubResource("SpriteFrames_73j16")
+offset = Vector2(8, 0)
+script = ExtResource("2_lnwju")
+DelayTime = 0.5
+Particles2D = []
diff --git a/DungeonShooting_Godot/prefab/effect/weapon/ShotFire0002.tscn b/DungeonShooting_Godot/prefab/effect/weapon/ShotFire0002.tscn
new file mode 100644
index 0000000..5a3355d
--- /dev/null
+++ b/DungeonShooting_Godot/prefab/effect/weapon/ShotFire0002.tscn
@@ -0,0 +1,52 @@
+[gd_scene load_steps=8 format=3 uid="uid://drcvbo0xam6q"]
+
+[ext_resource type="Texture2D" uid="uid://cj8gb5dxnk8ov" path="res://resource/sprite/shootFire/ShotFire0002.png" id="1_02pnb"]
+[ext_resource type="Script" path="res://src/game/effects/AutoDestroySprite.cs" id="2_uoe2l"]
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_2nk6j"]
+atlas = ExtResource("1_02pnb")
+region = Rect2(0, 0, 9, 11)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_ht7ag"]
+atlas = ExtResource("1_02pnb")
+region = Rect2(9, 0, 9, 11)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_jwqy0"]
+atlas = ExtResource("1_02pnb")
+region = Rect2(18, 0, 9, 11)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_ud7n7"]
+atlas = ExtResource("1_02pnb")
+region = Rect2(27, 0, 9, 11)
+
+[sub_resource type="SpriteFrames" id="SpriteFrames_rry1m"]
+animations = [{
+"frames": [{
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_2nk6j")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_ht7ag")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_jwqy0")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_ud7n7")
+}, {
+"duration": 1.0,
+"texture": null
+}],
+"loop": false,
+"name": &"default",
+"speed": 20.0
+}]
+
+[node name="ShotFire2" type="AnimatedSprite2D" node_paths=PackedStringArray("Particles2D")]
+modulate = Color(1.6, 1.6, 1.6, 1)
+position = Vector2(-1, 0)
+sprite_frames = SubResource("SpriteFrames_rry1m")
+offset = Vector2(5.5, 0)
+script = ExtResource("2_uoe2l")
+DelayTime = 0.5
+Particles2D = []
diff --git a/DungeonShooting_Godot/prefab/effect/weapon/ShotFire0003.tscn b/DungeonShooting_Godot/prefab/effect/weapon/ShotFire0003.tscn
new file mode 100644
index 0000000..751fef8
--- /dev/null
+++ b/DungeonShooting_Godot/prefab/effect/weapon/ShotFire0003.tscn
@@ -0,0 +1,43 @@
+[gd_scene load_steps=7 format=3 uid="uid://dbas3vph0i2ro"]
+
+[ext_resource type="Script" path="res://src/game/effects/AutoDestroyParticles.cs" id="1_pdyqx"]
+[ext_resource type="Texture2D" uid="uid://h7hkgbwj1li" path="res://resource/sprite/common/Smoke.png" id="1_r2unj"]
+
+[sub_resource type="CanvasItemMaterial" id="CanvasItemMaterial_4wcis"]
+particles_animation = true
+particles_anim_h_frames = 3
+particles_anim_v_frames = 1
+particles_anim_loop = false
+
+[sub_resource type="Curve" id="Curve_86ye5"]
+_data = [Vector2(0.0215054, 1), 0.0, 0.0, 0, 0, Vector2(0.512545, 0.882353), 0.0, 0.0, 0, 0, Vector2(1, 0.152941), 0.0, 0.0, 0, 0]
+point_count = 3
+
+[sub_resource type="CurveTexture" id="CurveTexture_j77i6"]
+curve = SubResource("Curve_86ye5")
+
+[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_8n28q"]
+lifetime_randomness = 0.3
+particle_flag_disable_z = true
+angle_max = 360.0
+initial_velocity_min = 5.0
+initial_velocity_max = 35.0
+gravity = Vector3(0, 0, 0)
+scale_min = 0.6
+scale_max = 1.5
+scale_curve = SubResource("CurveTexture_j77i6")
+anim_offset_max = 1.0
+
+[node name="ShotFire3" type="GPUParticles2D" node_paths=PackedStringArray("Particles2D")]
+modulate = Color(0.95, 0.70965, 0.6365, 0.470588)
+material = SubResource("CanvasItemMaterial_4wcis")
+emitting = false
+process_material = SubResource("ParticleProcessMaterial_8n28q")
+texture = ExtResource("1_r2unj")
+lifetime = 0.7
+one_shot = true
+explosiveness = 1.0
+randomness = 0.5
+fixed_fps = 20
+script = ExtResource("1_pdyqx")
+Particles2D = []
diff --git a/DungeonShooting_Godot/prefab/effect/weapon/ShotFire0004.tscn b/DungeonShooting_Godot/prefab/effect/weapon/ShotFire0004.tscn
new file mode 100644
index 0000000..448192f
--- /dev/null
+++ b/DungeonShooting_Godot/prefab/effect/weapon/ShotFire0004.tscn
@@ -0,0 +1,52 @@
+[gd_scene load_steps=8 format=3 uid="uid://yg8n8xi3ucqi"]
+
+[ext_resource type="Texture2D" uid="uid://dw3amegyt2ehh" path="res://resource/sprite/shootFire/ShotFire0003.png" id="1_lxoh4"]
+[ext_resource type="Script" path="res://src/game/effects/AutoDestroySprite.cs" id="2_qlt57"]
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_1cqk8"]
+atlas = ExtResource("1_lxoh4")
+region = Rect2(0, 0, 9, 11)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_hfpwi"]
+atlas = ExtResource("1_lxoh4")
+region = Rect2(9, 0, 9, 11)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_dvimy"]
+atlas = ExtResource("1_lxoh4")
+region = Rect2(18, 0, 9, 11)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_bk1sq"]
+atlas = ExtResource("1_lxoh4")
+region = Rect2(27, 0, 9, 11)
+
+[sub_resource type="SpriteFrames" id="SpriteFrames_rry1m"]
+animations = [{
+"frames": [{
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_1cqk8")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_hfpwi")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_dvimy")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_bk1sq")
+}, {
+"duration": 1.0,
+"texture": null
+}],
+"loop": false,
+"name": &"default",
+"speed": 20.0
+}]
+
+[node name="ShotFire4" type="AnimatedSprite2D" node_paths=PackedStringArray("Particles2D")]
+modulate = Color(1.6, 1.6, 1.6, 1)
+position = Vector2(-1, 0)
+sprite_frames = SubResource("SpriteFrames_rry1m")
+offset = Vector2(5.5, 0)
+script = ExtResource("2_qlt57")
+DelayTime = 0.5
+Particles2D = []
diff --git a/DungeonShooting_Godot/prefab/effect/weapon/ShotFire2.tscn b/DungeonShooting_Godot/prefab/effect/weapon/ShotFire2.tscn
deleted file mode 100644
index 768d4d4..0000000
--- a/DungeonShooting_Godot/prefab/effect/weapon/ShotFire2.tscn
+++ /dev/null
@@ -1,51 +0,0 @@
-[gd_scene load_steps=8 format=3 uid="uid://drcvbo0xam6q"]
-
-[ext_resource type="Texture2D" uid="uid://cj8gb5dxnk8ov" path="res://resource/sprite/shootFire/ShotFire0002.png" id="1_ljjfn"]
-[ext_resource type="Script" path="res://src/game/effects/AutoDestroySprite.cs" id="2_4ecjw"]
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_2nk6j"]
-atlas = ExtResource("1_ljjfn")
-region = Rect2(0, 0, 9, 11)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_ht7ag"]
-atlas = ExtResource("1_ljjfn")
-region = Rect2(9, 0, 9, 11)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_jwqy0"]
-atlas = ExtResource("1_ljjfn")
-region = Rect2(18, 0, 9, 11)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_ud7n7"]
-atlas = ExtResource("1_ljjfn")
-region = Rect2(27, 0, 9, 11)
-
-[sub_resource type="SpriteFrames" id="SpriteFrames_rry1m"]
-animations = [{
-"frames": [{
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_2nk6j")
-}, {
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_ht7ag")
-}, {
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_jwqy0")
-}, {
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_ud7n7")
-}, {
-"duration": 1.0,
-"texture": null
-}],
-"loop": false,
-"name": &"default",
-"speed": 20.0
-}]
-
-[node name="ShotFire2" type="AnimatedSprite2D" node_paths=PackedStringArray("Particles2D")]
-modulate = Color(1.6, 1.6, 1.6, 1)
-sprite_frames = SubResource("SpriteFrames_rry1m")
-offset = Vector2(5.5, 0)
-script = ExtResource("2_4ecjw")
-DelayTime = 0.5
-Particles2D = []
diff --git a/DungeonShooting_Godot/prefab/effect/weapon/ShotFire3.tscn b/DungeonShooting_Godot/prefab/effect/weapon/ShotFire3.tscn
deleted file mode 100644
index 751fef8..0000000
--- a/DungeonShooting_Godot/prefab/effect/weapon/ShotFire3.tscn
+++ /dev/null
@@ -1,43 +0,0 @@
-[gd_scene load_steps=7 format=3 uid="uid://dbas3vph0i2ro"]
-
-[ext_resource type="Script" path="res://src/game/effects/AutoDestroyParticles.cs" id="1_pdyqx"]
-[ext_resource type="Texture2D" uid="uid://h7hkgbwj1li" path="res://resource/sprite/common/Smoke.png" id="1_r2unj"]
-
-[sub_resource type="CanvasItemMaterial" id="CanvasItemMaterial_4wcis"]
-particles_animation = true
-particles_anim_h_frames = 3
-particles_anim_v_frames = 1
-particles_anim_loop = false
-
-[sub_resource type="Curve" id="Curve_86ye5"]
-_data = [Vector2(0.0215054, 1), 0.0, 0.0, 0, 0, Vector2(0.512545, 0.882353), 0.0, 0.0, 0, 0, Vector2(1, 0.152941), 0.0, 0.0, 0, 0]
-point_count = 3
-
-[sub_resource type="CurveTexture" id="CurveTexture_j77i6"]
-curve = SubResource("Curve_86ye5")
-
-[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_8n28q"]
-lifetime_randomness = 0.3
-particle_flag_disable_z = true
-angle_max = 360.0
-initial_velocity_min = 5.0
-initial_velocity_max = 35.0
-gravity = Vector3(0, 0, 0)
-scale_min = 0.6
-scale_max = 1.5
-scale_curve = SubResource("CurveTexture_j77i6")
-anim_offset_max = 1.0
-
-[node name="ShotFire3" type="GPUParticles2D" node_paths=PackedStringArray("Particles2D")]
-modulate = Color(0.95, 0.70965, 0.6365, 0.470588)
-material = SubResource("CanvasItemMaterial_4wcis")
-emitting = false
-process_material = SubResource("ParticleProcessMaterial_8n28q")
-texture = ExtResource("1_r2unj")
-lifetime = 0.7
-one_shot = true
-explosiveness = 1.0
-randomness = 0.5
-fixed_fps = 20
-script = ExtResource("1_pdyqx")
-Particles2D = []
diff --git a/DungeonShooting_Godot/prefab/role/Role0001.tscn b/DungeonShooting_Godot/prefab/role/Role0001.tscn
index 04aa1b8..cb1c9cb 100644
--- a/DungeonShooting_Godot/prefab/role/Role0001.tscn
+++ b/DungeonShooting_Godot/prefab/role/Role0001.tscn
@@ -55,8 +55,8 @@
[node name="HurtCollision" parent="HurtArea" index="0"]
shape = SubResource("RectangleShape2D_ve262")
-[node name="InteractiveArea" parent="." index="5"]
-visible = true
+[node name="InteractiveCollision" parent="InteractiveArea" index="0"]
+position = Vector2(0, 0)
[node name="AnimationPlayer" parent="." index="8"]
libraries = {
diff --git a/DungeonShooting_Godot/prefab/role/template/EnemyTemplate.tscn b/DungeonShooting_Godot/prefab/role/template/EnemyTemplate.tscn
index 3625be0..4247548 100644
--- a/DungeonShooting_Godot/prefab/role/template/EnemyTemplate.tscn
+++ b/DungeonShooting_Godot/prefab/role/template/EnemyTemplate.tscn
@@ -1,4 +1,4 @@
-[gd_scene load_steps=4 format=3 uid="uid://dbrig6dq441wo"]
+[gd_scene load_steps=5 format=3 uid="uid://dbrig6dq441wo"]
[ext_resource type="PackedScene" uid="uid://cyrcv2jdgr8cf" path="res://prefab/role/template/RoleTemplate.tscn" id="1_5po38"]
[ext_resource type="Shader" path="res://resource/material/Blend.gdshader" id="3_x8agd"]
@@ -15,6 +15,9 @@
shader_parameter/outline_use_blend = true
shader_parameter/grey = 0.0
+[sub_resource type="CircleShape2D" id="CircleShape2D_wu0xv"]
+radius = 8.06226
+
[node name="EnemyTemplate" instance=ExtResource("1_5po38")]
collision_layer = 16
collision_mask = 25
@@ -22,6 +25,9 @@
[node name="AnimatedSprite" parent="." index="2"]
material = SubResource("ShaderMaterial_k8mt5")
+[node name="InteractiveCollision" parent="InteractiveArea" index="0"]
+shape = SubResource("CircleShape2D_wu0xv")
+
[node name="ViewRay" type="RayCast2D" parent="." index="6"]
position = Vector2(0, -8)
enabled = false
diff --git a/DungeonShooting_Godot/prefab/role/template/RoleTemplate.tscn b/DungeonShooting_Godot/prefab/role/template/RoleTemplate.tscn
index d6187e3..be6716b 100644
--- a/DungeonShooting_Godot/prefab/role/template/RoleTemplate.tscn
+++ b/DungeonShooting_Godot/prefab/role/template/RoleTemplate.tscn
@@ -1,7 +1,8 @@
-[gd_scene load_steps=8 format=3 uid="uid://cyrcv2jdgr8cf"]
+[gd_scene load_steps=9 format=3 uid="uid://cyrcv2jdgr8cf"]
[ext_resource type="Shader" path="res://resource/material/Blend.gdshader" id="1_xk5yk"]
[ext_resource type="Script" path="res://src/game/activity/role/MountRotation.cs" id="2_5ddpw"]
+[ext_resource type="Script" path="res://src/framework/activity/hurt/HurtArea.cs" id="2_8jnvr"]
[ext_resource type="SpriteFrames" uid="uid://c8h5svp76h3kw" path="res://resource/spriteFrames/role/Role_tip.tres" id="3_bo78w"]
[sub_resource type="ShaderMaterial" id="ShaderMaterial_yif6x"]
@@ -22,11 +23,13 @@
[sub_resource type="RectangleShape2D" id="RectangleShape2D_1eja2"]
size = Vector2(12, 18)
-[sub_resource type="RectangleShape2D" id="RectangleShape2D_n68nu"]
-size = Vector2(10, 16.5)
+[sub_resource type="CapsuleShape2D" id="CapsuleShape2D_843d5"]
+radius = 8.0
+height = 16.0
[node name="RoleTemplate" type="CharacterBody2D"]
collision_layer = 0
+collision_mask = 513
[node name="ShadowSprite" type="Sprite2D" parent="."]
z_index = -1
@@ -46,26 +49,27 @@
collision_layer = 0
collision_mask = 0
monitoring = false
+script = ExtResource("2_8jnvr")
[node name="HurtCollision" type="CollisionShape2D" parent="HurtArea"]
position = Vector2(0, -9)
shape = SubResource("RectangleShape2D_1eja2")
[node name="InteractiveArea" type="Area2D" parent="."]
-visible = false
collision_layer = 0
collision_mask = 4
monitorable = false
[node name="InteractiveCollision" type="CollisionShape2D" parent="InteractiveArea"]
-position = Vector2(0, -5)
-shape = SubResource("RectangleShape2D_n68nu")
+position = Vector2(0, -2)
+shape = SubResource("CapsuleShape2D_843d5")
[node name="MountPoint" type="Marker2D" parent="."]
position = Vector2(2, -8)
script = ExtResource("2_5ddpw")
[node name="MeleeAttackArea" type="Area2D" parent="MountPoint"]
+visible = false
collision_layer = 0
collision_mask = 0
monitorable = false
diff --git a/DungeonShooting_Godot/prefab/ui/RoomUI.tscn b/DungeonShooting_Godot/prefab/ui/RoomUI.tscn
index a16d493..8a8bc45 100644
--- a/DungeonShooting_Godot/prefab/ui/RoomUI.tscn
+++ b/DungeonShooting_Godot/prefab/ui/RoomUI.tscn
@@ -1,4 +1,4 @@
-[gd_scene load_steps=20 format=3 uid="uid://bvpmtfupny8iu"]
+[gd_scene load_steps=22 format=3 uid="uid://bvpmtfupny8iu"]
[ext_resource type="Script" path="res://src/game/ui/roomUI/RoomUIPanel.cs" id="1_tfcrp"]
[ext_resource type="Texture2D" uid="uid://b67i86mtqrn32" path="res://resource/sprite/ui/roomUI/icon_bullet.png" id="2_ruc0p"]
@@ -6,6 +6,8 @@
[ext_resource type="Texture2D" uid="uid://cukrx5yyqw86o" path="res://resource/sprite/ui/roomUI/ReloadBar.png" id="4_hy44s"]
[ext_resource type="Texture2D" uid="uid://cx3i1nkcc4307" path="res://resource/sprite/ui/roomUI/ReloadBarBlock.png" id="5_w3lq2"]
[ext_resource type="Texture2D" uid="uid://blywnftxn1cfd" path="res://resource/sprite/ui/roomUI/Life_full.png" id="6_ggviq"]
+[ext_resource type="Material" uid="uid://j8t31iuumvhr" path="res://resource/material/Outline.tres" id="7_iw6pa"]
+[ext_resource type="Texture2D" uid="uid://cysv0dpvm52xw" path="res://resource/sprite/ui/commonIcon/Gold_10.png" id="7_lyxvi"]
[ext_resource type="Texture2D" uid="uid://cu0wlvrbntvyd" path="res://resource/sprite/prop/active/ActiveProp5000.png" id="10_5d4np"]
[ext_resource type="Texture2D" uid="uid://b8u6s5n37157" path="res://resource/sprite/ui/roomUI/Panel2.png" id="10_eokvx"]
[ext_resource type="Texture2D" uid="uid://0swkya4hn82c" path="res://resource/sprite/ui/roomUI/Panel.png" id="10_q3fs8"]
@@ -159,17 +161,54 @@
mouse_filter = 2
metadata/_edit_lock_ = true
-[node name="LifeBar" type="Control" parent="Control"]
-anchors_preset = 0
-offset_right = 40.0
-offset_bottom = 40.0
-scale = Vector2(4, 4)
+[node name="LifeBar" type="VBoxContainer" parent="Control"]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+offset_right = -280.0
+grow_horizontal = 2
+grow_vertical = 2
-[node name="Life" type="TextureRect" parent="Control/LifeBar"]
+[node name="Life" type="Control" parent="Control/LifeBar"]
+custom_minimum_size = Vector2(48, 40)
layout_mode = 2
+size_flags_horizontal = 0
+size_flags_vertical = 0
+
+[node name="LifeIcon" type="TextureRect" parent="Control/LifeBar/Life"]
+layout_mode = 1
offset_right = 12.0
offset_bottom = 10.0
+scale = Vector2(4, 4)
+size_flags_horizontal = 0
+size_flags_vertical = 0
texture = ExtResource("6_ggviq")
+stretch_mode = 2
+
+[node name="Gold" type="Control" parent="Control/LifeBar"]
+custom_minimum_size = Vector2(0, 32)
+layout_mode = 2
+
+[node name="GoldIcon" type="TextureRect" parent="Control/LifeBar/Gold"]
+material = ExtResource("7_iw6pa")
+layout_mode = 1
+offset_right = 8.0
+offset_bottom = 8.0
+scale = Vector2(4, 4)
+texture = ExtResource("7_lyxvi")
+stretch_mode = 2
+
+[node name="GoldText" type="Label" parent="Control/LifeBar/Gold"]
+layout_mode = 1
+anchors_preset = 9
+anchor_bottom = 1.0
+offset_left = 32.0
+offset_top = -4.0
+offset_right = 285.0
+offset_bottom = 4.0
+grow_vertical = 2
+text = "0"
[node name="ActivePropBar" type="Control" parent="Control"]
layout_mode = 1
diff --git a/DungeonShooting_Godot/prefab/weapon/Weapon0010.tscn b/DungeonShooting_Godot/prefab/weapon/Weapon0010.tscn
new file mode 100644
index 0000000..571ff9f
--- /dev/null
+++ b/DungeonShooting_Godot/prefab/weapon/Weapon0010.tscn
@@ -0,0 +1,166 @@
+[gd_scene load_steps=11 format=3 uid="uid://dhnrfqcojc367"]
+
+[ext_resource type="Script" path="res://src/game/activity/weapon/gun/Gun.cs" id="1_bw5v7"]
+[ext_resource type="Shader" path="res://resource/material/Blend.gdshader" id="2_pht5a"]
+[ext_resource type="SpriteFrames" uid="uid://cd7fhaqk587o2" path="res://resource/spriteFrames/weapon/Weapon0010.tres" id="3_nj0c6"]
+[ext_resource type="Animation" uid="uid://v3dltmdstqad" path="res://resource/animation/weapon/Weapon_floodlight.res" id="4_2cd01"]
+
+[sub_resource type="ShaderMaterial" id="ShaderMaterial_cbiyh"]
+resource_local_to_scene = true
+shader = ExtResource("2_pht5a")
+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_0oy4o"]
+resource_local_to_scene = true
+shader = ExtResource("2_pht5a")
+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_evjpf"]
+size = Vector2(26, 6)
+
+[sub_resource type="Animation" id="Animation_x136i"]
+length = 0.001
+tracks/0/type = "value"
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/path = NodePath("AnimatedSprite:material:shader_parameter/schedule")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/keys = {
+"times": PackedFloat32Array(0),
+"transitions": PackedFloat32Array(1),
+"update": 0,
+"values": [0.0]
+}
+tracks/1/type = "value"
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/path = NodePath("AnimatedSprite:animation")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/keys = {
+"times": PackedFloat32Array(0),
+"transitions": PackedFloat32Array(1),
+"update": 1,
+"values": [&"default"]
+}
+tracks/2/type = "value"
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/path = NodePath("AnimatedSprite:frame")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/keys = {
+"times": PackedFloat32Array(0),
+"transitions": PackedFloat32Array(1),
+"update": 1,
+"values": [0]
+}
+tracks/3/type = "value"
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/path = NodePath("AnimatedSprite:rotation")
+tracks/3/interp = 1
+tracks/3/loop_wrap = true
+tracks/3/keys = {
+"times": PackedFloat32Array(0),
+"transitions": PackedFloat32Array(1),
+"update": 0,
+"values": [0.0]
+}
+
+[sub_resource type="Animation" id="Animation_8xqs8"]
+resource_name = "reloading"
+length = 1.7
+tracks/0/type = "value"
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/path = NodePath("AnimatedSprite:animation")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/keys = {
+"times": PackedFloat32Array(0, 1.7),
+"transitions": PackedFloat32Array(1, 1),
+"update": 1,
+"values": [&"reloading_frame", &"default"]
+}
+tracks/1/type = "value"
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/path = NodePath("AnimatedSprite:frame")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/keys = {
+"times": PackedFloat32Array(0, 1.7),
+"transitions": PackedFloat32Array(1, 1),
+"update": 0,
+"values": [0, 18]
+}
+tracks/2/type = "value"
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/path = NodePath("AnimatedSprite:rotation")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/keys = {
+"times": PackedFloat32Array(0, 0.2, 1.5, 1.7),
+"transitions": PackedFloat32Array(1, 1, 1, 1),
+"update": 0,
+"values": [0.0, -0.436332, -0.436332, 0.0]
+}
+
+[sub_resource type="AnimationLibrary" id="AnimationLibrary_trkjd"]
+_data = {
+"RESET": SubResource("Animation_x136i"),
+"floodlight": ExtResource("4_2cd01"),
+"reloading": SubResource("Animation_8xqs8")
+}
+
+[node name="Weapon0010" type="CharacterBody2D" node_paths=PackedStringArray("FirePoint", "ShellPoint", "AnimationPlayer", "ShadowSprite", "AnimatedSprite", "Collision")]
+collision_layer = 4
+script = ExtResource("1_bw5v7")
+FirePoint = NodePath("AnimatedSprite/FirePoint")
+ShellPoint = NodePath("AnimatedSprite/ShellPoint")
+AnimationPlayer = NodePath("AnimationPlayer")
+ShadowSprite = NodePath("ShadowSprite")
+AnimatedSprite = NodePath("AnimatedSprite")
+Collision = NodePath("Collision")
+
+[node name="ShadowSprite" type="Sprite2D" parent="."]
+z_index = -1
+material = SubResource("ShaderMaterial_cbiyh")
+
+[node name="AnimatedSprite" type="AnimatedSprite2D" parent="."]
+modulate = Color(1.9, 1.9, 1.9, 1)
+material = SubResource("ShaderMaterial_0oy4o")
+sprite_frames = ExtResource("3_nj0c6")
+offset = Vector2(4, -2)
+
+[node name="ShellPoint" type="Marker2D" parent="AnimatedSprite"]
+position = Vector2(-3, -3)
+
+[node name="FirePoint" type="Marker2D" parent="AnimatedSprite"]
+position = Vector2(21, -1)
+
+[node name="Collision" type="CollisionShape2D" parent="."]
+position = Vector2(5, -1)
+shape = SubResource("RectangleShape2D_evjpf")
+
+[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
+libraries = {
+"": SubResource("AnimationLibrary_trkjd")
+}
diff --git a/DungeonShooting_Godot/prefab/weapon/Weapon0011.tscn b/DungeonShooting_Godot/prefab/weapon/Weapon0011.tscn
new file mode 100644
index 0000000..278775a
--- /dev/null
+++ b/DungeonShooting_Godot/prefab/weapon/Weapon0011.tscn
@@ -0,0 +1,61 @@
+[gd_scene load_steps=8 format=3 uid="uid://c17ol2s34ehp7"]
+
+[ext_resource type="PackedScene" uid="uid://cxltmhhp4rbyk" path="res://prefab/weapon/WeaponTemplate.tscn" id="1_fgcwf"]
+[ext_resource type="Script" path="res://src/game/activity/weapon/gun/Gun.cs" id="2_m84k4"]
+[ext_resource type="Shader" path="res://resource/material/Blend.gdshader" id="3_4rq0j"]
+[ext_resource type="SpriteFrames" uid="uid://xvfg1a0xj7ng" path="res://resource/spriteFrames/weapon/Weapon0011.tres" id="4_bnkqc"]
+
+[sub_resource type="ShaderMaterial" id="ShaderMaterial_m6bme"]
+resource_local_to_scene = true
+shader = ExtResource("3_4rq0j")
+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_fqjj0"]
+resource_local_to_scene = true
+shader = ExtResource("3_4rq0j")
+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_iq77m"]
+size = Vector2(20, 8)
+
+[node name="Weapon0011" node_paths=PackedStringArray("FirePoint", "ShellPoint", "AnimationPlayer", "ShadowSprite", "AnimatedSprite", "Collision") instance=ExtResource("1_fgcwf")]
+script = ExtResource("2_m84k4")
+FirePoint = NodePath("AnimatedSprite/FirePoint")
+ShellPoint = NodePath("AnimatedSprite/ShellPoint")
+AnimationPlayer = NodePath("AnimationPlayer")
+ShadowSprite = NodePath("ShadowSprite")
+AnimatedSprite = NodePath("AnimatedSprite")
+Collision = NodePath("Collision")
+
+[node name="ShadowSprite" parent="." index="0"]
+material = SubResource("ShaderMaterial_m6bme")
+
+[node name="AnimatedSprite" parent="." index="1"]
+material = SubResource("ShaderMaterial_fqjj0")
+position = Vector2(3, -1)
+sprite_frames = ExtResource("4_bnkqc")
+
+[node name="ShellPoint" parent="AnimatedSprite" index="0"]
+position = Vector2(-4, -2)
+
+[node name="FirePoint" parent="AnimatedSprite" index="1"]
+position = Vector2(15, -0.5)
+
+[node name="Collision" parent="." index="2"]
+visible = true
+position = Vector2(3, 0)
+shape = SubResource("RectangleShape2D_iq77m")
diff --git a/DungeonShooting_Godot/prefab/weapon/Weapon0013.tscn b/DungeonShooting_Godot/prefab/weapon/Weapon0013.tscn
new file mode 100644
index 0000000..c7c9280
--- /dev/null
+++ b/DungeonShooting_Godot/prefab/weapon/Weapon0013.tscn
@@ -0,0 +1,61 @@
+[gd_scene load_steps=8 format=3 uid="uid://chxa5inh7hgxs"]
+
+[ext_resource type="PackedScene" uid="uid://cxltmhhp4rbyk" path="res://prefab/weapon/WeaponTemplate.tscn" id="1_f1h8o"]
+[ext_resource type="Script" path="res://src/game/activity/weapon/gun/Gun.cs" id="2_bpgfu"]
+[ext_resource type="Shader" path="res://resource/material/Blend.gdshader" id="3_0l3ip"]
+[ext_resource type="SpriteFrames" uid="uid://cawsi08vaqfrn" path="res://resource/spriteFrames/weapon/Weapon0013.tres" id="4_w7ibl"]
+
+[sub_resource type="ShaderMaterial" id="ShaderMaterial_sy2aq"]
+resource_local_to_scene = true
+shader = ExtResource("3_0l3ip")
+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_1rqqj"]
+resource_local_to_scene = true
+shader = ExtResource("3_0l3ip")
+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_4pn1i"]
+size = Vector2(20, 6)
+
+[node name="Weapon0013" node_paths=PackedStringArray("FirePoint", "ShellPoint", "AnimationPlayer", "ShadowSprite", "AnimatedSprite", "Collision") instance=ExtResource("1_f1h8o")]
+script = ExtResource("2_bpgfu")
+FirePoint = NodePath("AnimatedSprite/FirePoint")
+ShellPoint = NodePath("AnimatedSprite/ShellPoint")
+AnimationPlayer = NodePath("AnimationPlayer")
+ShadowSprite = NodePath("ShadowSprite")
+AnimatedSprite = NodePath("AnimatedSprite")
+Collision = NodePath("Collision")
+
+[node name="ShadowSprite" parent="." index="0"]
+material = SubResource("ShaderMaterial_sy2aq")
+
+[node name="AnimatedSprite" parent="." index="1"]
+material = SubResource("ShaderMaterial_1rqqj")
+position = Vector2(4, -1)
+sprite_frames = ExtResource("4_w7ibl")
+
+[node name="ShellPoint" parent="AnimatedSprite" index="0"]
+position = Vector2(2, -1)
+
+[node name="FirePoint" parent="AnimatedSprite" index="1"]
+position = Vector2(12, -1)
+
+[node name="Collision" parent="." index="2"]
+visible = true
+position = Vector2(4, 0)
+shape = SubResource("RectangleShape2D_4pn1i")
diff --git a/DungeonShooting_Godot/prefab/weapon/Weapon0014.tscn b/DungeonShooting_Godot/prefab/weapon/Weapon0014.tscn
new file mode 100644
index 0000000..b880d0d
--- /dev/null
+++ b/DungeonShooting_Godot/prefab/weapon/Weapon0014.tscn
@@ -0,0 +1,61 @@
+[gd_scene load_steps=8 format=3 uid="uid://dvhan2bubtey0"]
+
+[ext_resource type="PackedScene" uid="uid://cxltmhhp4rbyk" path="res://prefab/weapon/WeaponTemplate.tscn" id="1_3op5w"]
+[ext_resource type="Script" path="res://src/game/activity/weapon/gun/Gun.cs" id="2_toxwq"]
+[ext_resource type="Shader" path="res://resource/material/Blend.gdshader" id="3_ch83c"]
+[ext_resource type="SpriteFrames" uid="uid://taxfr2lcy0f3" path="res://resource/spriteFrames/weapon/Weapon0014.tres" id="4_xdmw2"]
+
+[sub_resource type="ShaderMaterial" id="ShaderMaterial_sy2aq"]
+resource_local_to_scene = true
+shader = ExtResource("3_ch83c")
+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_x2qcg"]
+resource_local_to_scene = true
+shader = ExtResource("3_ch83c")
+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_4pn1i"]
+size = Vector2(10.75, 7.75)
+
+[node name="Weapon0014" node_paths=PackedStringArray("FirePoint", "ShellPoint", "AnimationPlayer", "ShadowSprite", "AnimatedSprite", "Collision") instance=ExtResource("1_3op5w")]
+script = ExtResource("2_toxwq")
+FirePoint = NodePath("AnimatedSprite/FirePoint")
+ShellPoint = NodePath("AnimatedSprite/ShellPoint")
+AnimationPlayer = NodePath("AnimationPlayer")
+ShadowSprite = NodePath("ShadowSprite")
+AnimatedSprite = NodePath("AnimatedSprite")
+Collision = NodePath("Collision")
+
+[node name="ShadowSprite" parent="." index="0"]
+material = SubResource("ShaderMaterial_sy2aq")
+
+[node name="AnimatedSprite" parent="." index="1"]
+material = SubResource("ShaderMaterial_x2qcg")
+position = Vector2(4, 0)
+sprite_frames = ExtResource("4_xdmw2")
+
+[node name="ShellPoint" parent="AnimatedSprite" index="0"]
+position = Vector2(-3, -2)
+
+[node name="FirePoint" parent="AnimatedSprite" index="1"]
+position = Vector2(9, -2)
+
+[node name="Collision" parent="." index="2"]
+visible = true
+position = Vector2(4, 0)
+shape = SubResource("RectangleShape2D_4pn1i")
diff --git a/DungeonShooting_Godot/project.godot b/DungeonShooting_Godot/project.godot
index 2588b93..45426b8 100644
--- a/DungeonShooting_Godot/project.godot
+++ b/DungeonShooting_Godot/project.godot
@@ -10,7 +10,7 @@
[application]
-config/name="DungeonShooting"
+config/name="枪火地牢"
run/main_scene="res://scene/Main.tscn"
config/features=PackedStringArray("4.2", "C#")
config/icon="res://icon.png"
@@ -118,36 +118,43 @@
fire={
"deadzone": 0.5,
"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":0,"position":Vector2(0, 0),"global_position":Vector2(0, 0),"factor":1.0,"button_index":1,"canceled":false,"pressed":false,"double_click":false,"script":null)
+, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":10,"pressure":0.0,"pressed":true,"script":null)
]
}
move_left={
"deadzone": 0.5,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":65,"key_label":0,"unicode":97,"echo":false,"script":null)
+, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":0,"axis_value":-1.0,"script":null)
]
}
move_right={
"deadzone": 0.5,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":68,"key_label":0,"unicode":100,"echo":false,"script":null)
+, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":0,"axis_value":1.0,"script":null)
]
}
move_up={
"deadzone": 0.5,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":87,"key_label":0,"unicode":119,"echo":false,"script":null)
+, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":1,"axis_value":-1.0,"script":null)
]
}
move_down={
"deadzone": 0.5,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":83,"key_label":0,"unicode":115,"echo":false,"script":null)
+, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":1,"axis_value":1.0,"script":null)
]
}
exchangeWeapon={
"deadzone": 0.5,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":81,"key_label":0,"unicode":113,"echo":false,"script":null)
+, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":3,"pressure":0.0,"pressed":true,"script":null)
]
}
throwWeapon={
"deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":71,"key_label":0,"unicode":103,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":71,"physical_keycode":71,"key_label":71,"unicode":103,"echo":false,"script":null)
+, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":12,"pressure":0.0,"pressed":true,"script":null)
]
}
mouse_roll_up={
@@ -163,31 +170,37 @@
interactive={
"deadzone": 0.5,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":69,"key_label":0,"unicode":101,"echo":false,"script":null)
+, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":0,"pressure":0.0,"pressed":true,"script":null)
]
}
reload={
"deadzone": 0.5,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":82,"key_label":0,"unicode":114,"echo":false,"script":null)
+, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":2,"pressure":0.0,"pressed":true,"script":null)
]
}
meleeAttack={
"deadzone": 0.5,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":32,"key_label":0,"unicode":32,"echo":false,"script":null)
+, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":1,"pressure":0.0,"pressed":true,"script":null)
]
}
roll={
"deadzone": 0.5,
"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":2,"position":Vector2(75, 15),"global_position":Vector2(79, 56),"factor":1.0,"button_index":2,"canceled":false,"pressed":true,"double_click":false,"script":null)
+, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":9,"pressure":0.0,"pressed":true,"script":null)
]
}
useActiveProp={
"deadzone": 0.5,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":70,"key_label":0,"unicode":102,"echo":false,"script":null)
+, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":1,"pressure":0.0,"pressed":true,"script":null)
]
}
removeProp={
"deadzone": 0.5,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":88,"key_label":0,"unicode":120,"echo":false,"script":null)
+, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":11,"pressure":0.0,"pressed":true,"script":null)
]
}
exchangeProp={
@@ -198,11 +211,13 @@
map={
"deadzone": 0.5,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194326,"key_label":0,"unicode":0,"echo":false,"script":null)
+, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":4,"axis_value":1.0,"script":null)
]
}
menu={
"deadzone": 0.5,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194305,"key_label":0,"unicode":0,"echo":false,"script":null)
+, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":4,"pressure":0.0,"pressed":true,"script":null)
]
}
mouse_left={
@@ -229,7 +244,7 @@
2d_physics/layer_4="player"
2d_physics/layer_5="enemy"
2d_physics/layer_6="affiliation"
-2d_physics/layer_7="onHead"
+2d_physics/layer_7="onHand"
2d_physics/layer_8="debris"
2d_physics/layer_9="throwing"
diff --git a/DungeonShooting_Godot/resource/config/ActivityBase.json b/DungeonShooting_Godot/resource/config/ActivityBase.json
index 42cb08e..f4b0604 100644
--- a/DungeonShooting_Godot/resource/config/ActivityBase.json
+++ b/DungeonShooting_Godot/resource/config/ActivityBase.json
@@ -3,6 +3,8 @@
"Id": "role0001",
"Type": 3,
"Name": "\u73A9\u5BB6",
+ "Quality": 0,
+ "Price": 0,
"Intro": "\u73A9\u5BB6",
"Details": "",
"IsStatic": false,
@@ -15,6 +17,8 @@
"Id": "enemy0001",
"Type": 4,
"Name": "\u654C\u4EBA",
+ "Quality": 0,
+ "Price": 0,
"Intro": "\u654C\u4EBA",
"Details": "",
"IsStatic": false,
@@ -27,6 +31,8 @@
"Id": "enemy0002",
"Type": 4,
"Name": "\u654C\u4EBA2",
+ "Quality": 0,
+ "Price": 0,
"Intro": "\u654C\u4EBA2",
"Details": "",
"IsStatic": false,
@@ -39,6 +45,8 @@
"Id": "weapon0001",
"Type": 5,
"Name": "\u6B65\u67AA",
+ "Quality": 3,
+ "Price": 0,
"Intro": "",
"Details": "",
"IsStatic": false,
@@ -51,6 +59,8 @@
"Id": "weapon0002",
"Type": 5,
"Name": "\u9730\u5F39\u67AA",
+ "Quality": 3,
+ "Price": 0,
"Intro": "",
"Details": "",
"IsStatic": false,
@@ -63,6 +73,8 @@
"Id": "weapon0003",
"Type": 5,
"Name": "\u624B\u67AA",
+ "Quality": 2,
+ "Price": 0,
"Intro": "",
"Details": "",
"IsStatic": false,
@@ -75,6 +87,8 @@
"Id": "weapon0004",
"Type": 5,
"Name": "\u5200",
+ "Quality": 4,
+ "Price": 0,
"Intro": "",
"Details": "",
"IsStatic": false,
@@ -87,6 +101,8 @@
"Id": "weapon0005",
"Type": 5,
"Name": "\u72D9\u51FB\u67AA",
+ "Quality": 4,
+ "Price": 0,
"Intro": "",
"Details": "",
"IsStatic": false,
@@ -99,6 +115,8 @@
"Id": "weapon0006",
"Type": 5,
"Name": "\u51B2\u950B\u67AA",
+ "Quality": 2,
+ "Price": 0,
"Intro": "",
"Details": "",
"IsStatic": false,
@@ -111,6 +129,8 @@
"Id": "weapon0007",
"Type": 5,
"Name": "\u6C64\u59C6\u900A\u51B2\u950B\u67AA",
+ "Quality": 4,
+ "Price": 0,
"Intro": "",
"Details": "",
"IsStatic": false,
@@ -123,6 +143,8 @@
"Id": "weapon0008",
"Type": 5,
"Name": "\u6FC0\u5149\u624B\u67AA",
+ "Quality": 3,
+ "Price": 0,
"Intro": "",
"Details": "",
"IsStatic": false,
@@ -135,6 +157,8 @@
"Id": "weapon0009",
"Type": 5,
"Name": "\u69B4\u5F39\u53D1\u5C04\u5668",
+ "Quality": 4,
+ "Price": 0,
"Intro": "",
"Details": "",
"IsStatic": false,
@@ -144,9 +168,67 @@
"ShowInMapEditor": true
},
{
+ "Id": "weapon0010",
+ "Type": 5,
+ "Name": "M1\u578B\u70ED\u80FD\u72D9\u51FB\u67AA",
+ "Quality": 5,
+ "Price": 0,
+ "Intro": "",
+ "Details": "",
+ "IsStatic": false,
+ "__Material": "",
+ "Prefab": "res://prefab/weapon/Weapon0010.tscn",
+ "Icon": "res://resource/sprite/weapon/weapon0010/Weapon0010.png",
+ "ShowInMapEditor": true
+ },
+ {
+ "Id": "weapon0011",
+ "Type": 5,
+ "Name": "weapon0011",
+ "Quality": 5,
+ "Price": 0,
+ "Intro": "",
+ "Details": "",
+ "IsStatic": false,
+ "__Material": "",
+ "Prefab": "res://prefab/weapon/Weapon0011.tscn",
+ "Icon": "res://resource/sprite/weapon/weapon0011/Weapon0011.png",
+ "ShowInMapEditor": true
+ },
+ {
+ "Id": "weapon0013",
+ "Type": 5,
+ "Name": "P90",
+ "Quality": 4,
+ "Price": 0,
+ "Intro": "",
+ "Details": "",
+ "IsStatic": false,
+ "__Material": "",
+ "Prefab": "res://prefab/weapon/Weapon0013.tscn",
+ "Icon": "res://resource/sprite/weapon/weapon0013/Weapon0013.png",
+ "ShowInMapEditor": true
+ },
+ {
+ "Id": "weapon0014",
+ "Type": 5,
+ "Name": "\u5DE6\u8F6E",
+ "Quality": 4,
+ "Price": 0,
+ "Intro": "",
+ "Details": "",
+ "IsStatic": false,
+ "__Material": "",
+ "Prefab": "res://prefab/weapon/Weapon0014.tscn",
+ "Icon": "res://resource/sprite/weapon/weapon0014/Weapon0014.png",
+ "ShowInMapEditor": true
+ },
+ {
"Id": "bullet0001",
"Type": 6,
"Name": "",
+ "Quality": 0,
+ "Price": 0,
"Intro": "",
"Details": "",
"IsStatic": false,
@@ -159,6 +241,8 @@
"Id": "bullet0002",
"Type": 6,
"Name": "",
+ "Quality": 0,
+ "Price": 0,
"Intro": "",
"Details": "",
"IsStatic": false,
@@ -171,6 +255,8 @@
"Id": "bullet0003",
"Type": 6,
"Name": "",
+ "Quality": 0,
+ "Price": 0,
"Intro": "",
"Details": "",
"IsStatic": false,
@@ -183,6 +269,8 @@
"Id": "bullet0004",
"Type": 6,
"Name": "\u69B4\u5F39\u70AE",
+ "Quality": 0,
+ "Price": 0,
"Intro": "",
"Details": "",
"IsStatic": false,
@@ -195,6 +283,8 @@
"Id": "bullet0005",
"Type": 6,
"Name": "\u629B\u7269\u7EBF\u7C98\u6DB2\u5B50\u5F39",
+ "Quality": 0,
+ "Price": 0,
"Intro": "",
"Details": "",
"IsStatic": false,
@@ -204,9 +294,53 @@
"ShowInMapEditor": false
},
{
+ "Id": "bullet0006",
+ "Type": 6,
+ "Name": "\u62D6\u5C3E\u5B50\u5F39",
+ "Quality": 0,
+ "Price": 0,
+ "Intro": "",
+ "Details": "",
+ "IsStatic": false,
+ "__Material": "0003",
+ "Prefab": "res://prefab/bullet/normal/Bullet0006.tscn",
+ "Icon": "",
+ "ShowInMapEditor": false
+ },
+ {
+ "Id": "bullet0007",
+ "Type": 6,
+ "Name": "",
+ "Quality": 0,
+ "Price": 0,
+ "Intro": "",
+ "Details": "",
+ "IsStatic": false,
+ "__Material": "0003",
+ "Prefab": "res://prefab/bullet/normal/Bullet0007.tscn",
+ "Icon": "",
+ "ShowInMapEditor": false
+ },
+ {
+ "Id": "bullet0008",
+ "Type": 6,
+ "Name": "",
+ "Quality": 0,
+ "Price": 0,
+ "Intro": "",
+ "Details": "",
+ "IsStatic": false,
+ "__Material": "0003",
+ "Prefab": "res://prefab/bullet/normal/Bullet0008.tscn",
+ "Icon": "",
+ "ShowInMapEditor": false
+ },
+ {
"Id": "shell0001",
"Type": 7,
"Name": "",
+ "Quality": 0,
+ "Price": 0,
"Intro": "",
"Details": "",
"IsStatic": false,
@@ -219,6 +353,8 @@
"Id": "shell0002",
"Type": 7,
"Name": "",
+ "Quality": 0,
+ "Price": 0,
"Intro": "",
"Details": "",
"IsStatic": false,
@@ -231,6 +367,8 @@
"Id": "shell0003",
"Type": 7,
"Name": "",
+ "Quality": 0,
+ "Price": 0,
"Intro": "",
"Details": "",
"IsStatic": false,
@@ -243,6 +381,8 @@
"Id": "shell0004",
"Type": 7,
"Name": "",
+ "Quality": 0,
+ "Price": 0,
"Intro": "",
"Details": "",
"IsStatic": false,
@@ -255,6 +395,8 @@
"Id": "enemy_dead0001",
"Type": 8,
"Name": "",
+ "Quality": 0,
+ "Price": 0,
"Intro": "\u654C\u4EBA1\u6B7B\u4EA1\u788E\u7247",
"Details": "",
"IsStatic": false,
@@ -267,6 +409,8 @@
"Id": "enemy_dead0002",
"Type": 8,
"Name": "",
+ "Quality": 0,
+ "Price": 0,
"Intro": "\u654C\u4EBA2\u6B7B\u4EA1",
"Details": "",
"IsStatic": false,
@@ -279,6 +423,8 @@
"Id": "prop0001",
"Type": 9,
"Name": "\u978B\u5B50",
+ "Quality": 4,
+ "Price": 0,
"Intro": "\u63D0\u9AD8\u79FB\u52A8\u901F\u5EA6",
"Details": "",
"IsStatic": false,
@@ -291,6 +437,8 @@
"Id": "prop0002",
"Type": 9,
"Name": "\u5FC3\u4E4B\u5BB9\u5668",
+ "Quality": 3,
+ "Price": 0,
"Intro": "\u63D0\u9AD8\u8840\u91CF\u4E0A\u9650",
"Details": "",
"IsStatic": false,
@@ -303,6 +451,8 @@
"Id": "prop0003",
"Type": 9,
"Name": "\u62A4\u76FE",
+ "Quality": 3,
+ "Price": 0,
"Intro": "\u53EF\u4EE5\u62B5\u6321\u5B50\u5F39\uFF0C\u968F\u65F6\u95F4\u63A8\u79FB\u81EA\u52A8\u6062\u590D",
"Details": "",
"IsStatic": false,
@@ -315,6 +465,8 @@
"Id": "prop0004",
"Type": 9,
"Name": "\u62A4\u76FE\u8BA1\u65F6\u5668",
+ "Quality": 4,
+ "Price": 0,
"Intro": "\u63D0\u9AD8\u62A4\u76FE\u6062\u590D\u901F\u5EA6",
"Details": "",
"IsStatic": false,
@@ -327,6 +479,8 @@
"Id": "prop0005",
"Type": 9,
"Name": "\u6740\u4F24\u5F39",
+ "Quality": 4,
+ "Price": 0,
"Intro": "\u63D0\u9AD8\u5B50\u5F39\u4F24\u5BB3",
"Details": "",
"IsStatic": false,
@@ -339,6 +493,8 @@
"Id": "prop0006",
"Type": 9,
"Name": "\u7EA2\u5B9D\u77F3\u6212\u6307",
+ "Quality": 4,
+ "Price": 0,
"Intro": "\u53D7\u4F24\u540E\u5EF6\u957F\u65E0\u654C\u65F6\u95F4",
"Details": "",
"IsStatic": false,
@@ -351,6 +507,8 @@
"Id": "prop0007",
"Type": 9,
"Name": "\u5907\u7528\u62A4\u76FE",
+ "Quality": 3,
+ "Price": 0,
"Intro": "\u53D7\u4F24\u65F6\u6709\u4E00\u5B9A\u6982\u7387\u62B5\u6D88\u4F24\u5BB3",
"Details": "",
"IsStatic": false,
@@ -363,6 +521,8 @@
"Id": "prop0008",
"Type": 9,
"Name": "\u773C\u955C",
+ "Quality": 3,
+ "Price": 0,
"Intro": "\u63D0\u9AD8\u6B66\u5668\u7CBE\u51C6\u5EA6",
"Details": "",
"IsStatic": false,
@@ -375,6 +535,8 @@
"Id": "prop0009",
"Type": 9,
"Name": "\u9AD8\u901F\u5B50\u5F39",
+ "Quality": 3,
+ "Price": 0,
"Intro": "\u63D0\u9AD8\u5B50\u5F39\u901F\u5EA6\u548C\u5C04\u7A0B",
"Details": "",
"IsStatic": false,
@@ -387,6 +549,8 @@
"Id": "prop0010",
"Type": 9,
"Name": "\u5206\u88C2\u5B50\u5F39",
+ "Quality": 4,
+ "Price": 0,
"Intro": "\u5B50\u5F39\u6570\u91CF\u7FFB\u500D, \u4F46\u662F\u7CBE\u51C6\u5EA6, \u51FB\u9000\u548C\u4F24\u5BB3\u964D\u4F4E",
"Details": "",
"IsStatic": false,
@@ -399,6 +563,8 @@
"Id": "prop0011",
"Type": 9,
"Name": "\u5F39\u5C04\u5B50\u5F39",
+ "Quality": 4,
+ "Price": 0,
"Intro": "\u5B50\u5F39\u53CD\u5F39\u6B21\u6570\u002B2",
"Details": "",
"IsStatic": false,
@@ -411,6 +577,8 @@
"Id": "prop0012",
"Type": 9,
"Name": "\u7A7F\u900F\u5B50\u5F39",
+ "Quality": 4,
+ "Price": 0,
"Intro": "\u5B50\u5F39\u7A7F\u900F\u002B1",
"Details": "",
"IsStatic": false,
@@ -423,6 +591,8 @@
"Id": "prop0013",
"Type": 9,
"Name": "\u6B66\u5668\u80CC\u5305",
+ "Quality": 2,
+ "Price": 0,
"Intro": "\u6B66\u5668\u5BB9\u91CF\u002B1",
"Details": "",
"IsStatic": false,
@@ -435,6 +605,8 @@
"Id": "prop0014",
"Type": 9,
"Name": "\u9053\u5177\u80CC\u5305",
+ "Quality": 2,
+ "Price": 0,
"Intro": "\u9053\u5177\u5BB9\u91CF\u002B1",
"Details": "",
"IsStatic": false,
@@ -447,6 +619,8 @@
"Id": "prop5000",
"Type": 9,
"Name": "\u533B\u836F\u7BB1",
+ "Quality": 1,
+ "Price": 0,
"Intro": "\u4F7F\u7528\u540E\u56DE\u590D\u4E00\u9897\u7EA2\u5FC3",
"Details": "",
"IsStatic": false,
@@ -459,6 +633,8 @@
"Id": "prop5001",
"Type": 9,
"Name": "\u5F39\u836F\u7BB1",
+ "Quality": 1,
+ "Price": 0,
"Intro": "\u4F7F\u7528\u540E\u8865\u5145\u5F53\u524D\u6B66\u5668\u5907\u7528\u5F39\u836F",
"Details": "",
"IsStatic": false,
@@ -468,9 +644,25 @@
"ShowInMapEditor": true
},
{
+ "Id": "treasure_box0001",
+ "Type": 10,
+ "Name": "\u6728\u8D28\u5B9D\u7BB1",
+ "Quality": 0,
+ "Price": 0,
+ "Intro": "\u6728\u8D28\u5B9D\u7BB1",
+ "Details": "",
+ "IsStatic": false,
+ "__Material": "",
+ "Prefab": "res://prefab/box/TreasureBox0001.tscn",
+ "Icon": "res://resource/sprite/box/TreasureBox0001.png",
+ "ShowInMapEditor": true
+ },
+ {
"Id": "other_door_e",
"Type": 99,
"Name": "",
+ "Quality": 0,
+ "Price": 0,
"Intro": "\u5730\u7262\u623F\u95F4\u7684\u95E8(\u4E1C\u4FA7)",
"Details": "",
"IsStatic": true,
@@ -483,6 +675,8 @@
"Id": "other_door_w",
"Type": 99,
"Name": "",
+ "Quality": 0,
+ "Price": 0,
"Intro": "\u5730\u7262\u623F\u95F4\u7684\u95E8(\u897F\u4FA7)",
"Details": "",
"IsStatic": true,
@@ -495,6 +689,8 @@
"Id": "other_door_s",
"Type": 99,
"Name": "",
+ "Quality": 0,
+ "Price": 0,
"Intro": "\u5730\u7262\u623F\u95F4\u7684\u95E8(\u5357\u4FA7)",
"Details": "",
"IsStatic": true,
@@ -507,6 +703,8 @@
"Id": "other_door_n",
"Type": 99,
"Name": "",
+ "Quality": 0,
+ "Price": 0,
"Intro": "\u5730\u7262\u623F\u95F4\u7684\u95E8(\u5317\u4FA7)",
"Details": "",
"IsStatic": true,
@@ -514,5 +712,47 @@
"Prefab": "res://prefab/map/RoomDoor_N.tscn",
"Icon": "",
"ShowInMapEditor": false
+ },
+ {
+ "Id": "gold_10",
+ "Type": 99,
+ "Name": "\u91D1\u5E01",
+ "Quality": 0,
+ "Price": 0,
+ "Intro": "\u83B7\u5F9710\u91D1\u5E01",
+ "Details": "",
+ "IsStatic": false,
+ "__Material": "",
+ "Prefab": "res://prefab/currency/Gold10.tscn",
+ "Icon": "res://resource/sprite/ui/commonIcon/Gold_10.png",
+ "ShowInMapEditor": true
+ },
+ {
+ "Id": "gold_5",
+ "Type": 99,
+ "Name": "\u94F6\u5E01",
+ "Quality": 0,
+ "Price": 0,
+ "Intro": "\u83B7\u5F975\u91D1\u5E01",
+ "Details": "",
+ "IsStatic": false,
+ "__Material": "",
+ "Prefab": "res://prefab/currency/Gold5.tscn",
+ "Icon": "res://resource/sprite/ui/commonIcon/Gold_5.png",
+ "ShowInMapEditor": true
+ },
+ {
+ "Id": "gold_1",
+ "Type": 99,
+ "Name": "\u94DC\u5E01",
+ "Quality": 0,
+ "Price": 0,
+ "Intro": "\u83B7\u5F971\u91D1\u5E01",
+ "Details": "",
+ "IsStatic": false,
+ "__Material": "",
+ "Prefab": "res://prefab/currency/Gold1.tscn",
+ "Icon": "res://resource/sprite/ui/commonIcon/Gold_1.png",
+ "ShowInMapEditor": true
}
]
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/config/AiAttackAttr.json b/DungeonShooting_Godot/resource/config/AiAttackAttr.json
index 251daae..ebc5579 100644
--- a/DungeonShooting_Godot/resource/config/AiAttackAttr.json
+++ b/DungeonShooting_Godot/resource/config/AiAttackAttr.json
@@ -1,7 +1,7 @@
[
{
"Id": "0001",
- "Remark": "",
+ "Remark": "\u6B65\u67AA",
"LockingStand": true,
"FiringStand": true,
"ShowSubline": false,
@@ -13,7 +13,7 @@
},
{
"Id": "0002",
- "Remark": "",
+ "Remark": "\u9730\u5F39\u67AA",
"LockingStand": true,
"FiringStand": true,
"ShowSubline": false,
@@ -25,7 +25,7 @@
},
{
"Id": "0003",
- "Remark": "",
+ "Remark": "\u624B\u67AA",
"LockingStand": true,
"FiringStand": true,
"ShowSubline": false,
@@ -94,5 +94,17 @@
"AttackLockAngle": true,
"BulletSpeedScale": 0.8,
"AmmoConsumptionProbability": 0
+ },
+ {
+ "Id": "0009",
+ "Remark": "Weapon0010",
+ "LockingStand": true,
+ "FiringStand": true,
+ "ShowSubline": false,
+ "LockingTime": 1.5,
+ "LockAngleTime": 0.5,
+ "AttackLockAngle": true,
+ "BulletSpeedScale": 0.4,
+ "AmmoConsumptionProbability": 0
}
]
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/config/BulletBase.json b/DungeonShooting_Godot/resource/config/BulletBase.json
index 5985b17..6c5d4f9 100644
--- a/DungeonShooting_Godot/resource/config/BulletBase.json
+++ b/DungeonShooting_Godot/resource/config/BulletBase.json
@@ -211,6 +211,111 @@
]
},
{
+ "Id": "0007",
+ "Name": "\u62D6\u5C3E\u5B50\u5F391",
+ "Type": 1,
+ "Prefab": "bullet0006",
+ "HarmRange": [
+ 10
+ ],
+ "RepelRange": [
+ 45
+ ],
+ "DeviationAngleRange": [
+ 0
+ ],
+ "SpeedRange": [
+ 350,
+ 350
+ ],
+ "LifeTimeRange": [
+ -1
+ ],
+ "DistanceRange": [
+ 600,
+ 600
+ ],
+ "VerticalSpeed": [
+ 0
+ ],
+ "BounceCount": [
+ 3
+ ],
+ "Penetration": [
+ 1
+ ]
+ },
+ {
+ "Id": "0008",
+ "Name": "\u5B50\u5F394",
+ "Type": 1,
+ "Prefab": "bullet0007",
+ "HarmRange": [
+ 4
+ ],
+ "RepelRange": [
+ 15
+ ],
+ "DeviationAngleRange": [
+ 0
+ ],
+ "SpeedRange": [
+ 350,
+ 380
+ ],
+ "LifeTimeRange": [
+ -1
+ ],
+ "DistanceRange": [
+ 400,
+ 450
+ ],
+ "VerticalSpeed": [
+ 0
+ ],
+ "BounceCount": [
+ 0
+ ],
+ "Penetration": [
+ 0
+ ]
+ },
+ {
+ "Id": "0009",
+ "Name": "\u5B50\u5F395",
+ "Type": 1,
+ "Prefab": "bullet0008",
+ "HarmRange": [
+ 4
+ ],
+ "RepelRange": [
+ 15
+ ],
+ "DeviationAngleRange": [
+ 0
+ ],
+ "SpeedRange": [
+ 350,
+ 380
+ ],
+ "LifeTimeRange": [
+ -1
+ ],
+ "DistanceRange": [
+ 400,
+ 450
+ ],
+ "VerticalSpeed": [
+ 0
+ ],
+ "BounceCount": [
+ 0
+ ],
+ "Penetration": [
+ 0
+ ]
+ },
+ {
"Id": "1001",
"Name": "\u6FC0\u51491",
"Type": 2,
@@ -225,8 +330,8 @@
0
],
"SpeedRange": [
- 300,
- 330
+ 2000,
+ 2000
],
"LifeTimeRange": [
-1
diff --git a/DungeonShooting_Godot/resource/config/EnemyBase.json b/DungeonShooting_Godot/resource/config/EnemyBase.json
index 968950a..657b2b7 100644
--- a/DungeonShooting_Godot/resource/config/EnemyBase.json
+++ b/DungeonShooting_Godot/resource/config/EnemyBase.json
@@ -3,24 +3,34 @@
"Id": "0001",
"__Activity": "enemy0001",
"Remark": "\u654C\u4EBA1",
- "MoveSpeed": 120,
+ "Hp": 20,
+ "MoveSpeed": 80,
"Acceleration": 1500,
"Friction": 900,
"CanPickUpWeapon": true,
"ViewRange": 250,
"TailAfterViewRange": 400,
- "BackViewRange": 50
+ "BackViewRange": 50,
+ "Gold": [
+ -2,
+ 3
+ ]
},
{
"Id": "0002",
"__Activity": "enemy0002",
"Remark": "\u654C\u4EBA2",
+ "Hp": 25,
"MoveSpeed": 120,
"Acceleration": 1500,
"Friction": 900,
"CanPickUpWeapon": false,
"ViewRange": 250,
"TailAfterViewRange": 400,
- "BackViewRange": 50
+ "BackViewRange": 50,
+ "Gold": [
+ -2,
+ 4
+ ]
}
]
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/config/Sound.json b/DungeonShooting_Godot/resource/config/Sound.json
index 73d3cb1..76bbf8c 100644
--- a/DungeonShooting_Godot/resource/config/Sound.json
+++ b/DungeonShooting_Godot/resource/config/Sound.json
@@ -66,6 +66,18 @@
"Remark": "\u69B4\u5F39\u53D1\u5C04\u5668"
},
{
+ "Id": "shooting0012",
+ "Path": "res://resource/sound/sfx/shooting/Shooting0012.ogg",
+ "Volume": 1,
+ "Remark": "\u6FC0\u5149\u6B66\u5668"
+ },
+ {
+ "Id": "shooting0013",
+ "Path": "res://resource/sound/sfx/shooting/Shooting0013.ogg",
+ "Volume": 0.6,
+ "Remark": "P90"
+ },
+ {
"Id": "reloading0001",
"Path": "res://resource/sound/sfx/reloading/Reloading0001.ogg",
"Volume": 1,
@@ -111,7 +123,13 @@
"Id": "reloadBegin0006",
"Path": "res://resource/sound/sfx/reloading/Reloading_begin0006.ogg",
"Volume": 1,
- "Remark": ""
+ "Remark": "\u6C64\u59C6\u900A\u51B2\u950B\u67AA"
+ },
+ {
+ "Id": "reloadBegin0007",
+ "Path": "res://resource/sound/sfx/reloading/Reloading_begin0007.ogg",
+ "Volume": 1,
+ "Remark": "P90"
},
{
"Id": "reloadBegin0009",
@@ -138,6 +156,12 @@
"Remark": ""
},
{
+ "Id": "reloadBegin0013",
+ "Path": "res://resource/sound/sfx/reloading/Reloading_begin0013.ogg",
+ "Volume": 1.2,
+ "Remark": ""
+ },
+ {
"Id": "reloadFinish0002",
"Path": "res://resource/sound/sfx/reloading/Reloading_finish0002.ogg",
"Volume": 1,
@@ -156,6 +180,12 @@
"Remark": ""
},
{
+ "Id": "reloadFinish0005",
+ "Path": "res://resource/sound/sfx/reloading/Reloading_finish0005.ogg",
+ "Volume": 1.2,
+ "Remark": ""
+ },
+ {
"Id": "beLoaded0001",
"Path": "res://resource/sound/sfx/beLoaded/BeLoaded0001.ogg",
"Volume": 1,
@@ -212,8 +242,8 @@
{
"Id": "beLoaded0010",
"Path": "res://resource/sound/sfx/beLoaded/BeLoaded0010.ogg",
- "Volume": 1,
- "Remark": "\u6B65\u67AA"
+ "Volume": 0.7,
+ "Remark": "P90"
},
{
"Id": "beLoaded0011",
@@ -280,5 +310,11 @@
"Path": "res://resource/sound/sfx/collision/Collision0001.ogg",
"Volume": 0.7,
"Remark": "\u78B0\u649E"
+ },
+ {
+ "Id": "gold",
+ "Path": "res://resource/sound/sfx/common/gold.ogg",
+ "Volume": 1.5,
+ "Remark": "\u91D1\u5E01"
}
]
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/config/WeaponBase.json b/DungeonShooting_Godot/resource/config/WeaponBase.json
index 3cbe120..357052f 100644
--- a/DungeonShooting_Godot/resource/config/WeaponBase.json
+++ b/DungeonShooting_Godot/resource/config/WeaponBase.json
@@ -10,7 +10,7 @@
"AmmoCapacity": 30,
"MaxAmmoCapacity": 420,
"StandbyAmmoCapacity": 390,
- "ReloadTime": 2.2,
+ "ReloadTime": 2,
"AloneReload": false,
"AloneReloadCount": 1,
"AloneReloadBeginIntervalTime": 0,
@@ -48,15 +48,12 @@
"UpliftAngle": 10,
"DefaultAngle": 0,
"UpliftAngleRestore": 1,
- "FireEffect": "res://prefab/effect/weapon/ShotFire.tscn",
+ "FireEffect": "res://prefab/effect/weapon/ShotFire0001.tscn",
"__Bullet": "0001",
"__Shell": "shell0001",
"ReloadThrowShell": false,
+ "ThrowShellCount": 1,
"ThrowShellDelayTime": 0,
- "ThrowCollisionSize": {
- "X": 20,
- "Y": 15
- },
"CanMeleeAttack": true,
"MeleeAttackHarmRange": [
10
@@ -74,11 +71,10 @@
"__BeLoadedSound": "",
"BeLoadedSoundDelayTime": 0,
"__OtherSoundMap": null,
- "__AiUseAttribute": "0002",
"__AiAttackAttr": ""
},
{
- "Id": "0002",
+ "Id": "0001_ai",
"Remark": "\u6B65\u67AA",
"__Activity": "",
"Weight": 40,
@@ -88,7 +84,7 @@
"AmmoCapacity": 30,
"MaxAmmoCapacity": 420,
"StandbyAmmoCapacity": 390,
- "ReloadTime": 2.2,
+ "ReloadTime": 2,
"AloneReload": false,
"AloneReloadCount": 1,
"AloneReloadBeginIntervalTime": 0,
@@ -102,7 +98,7 @@
"ContinuousCountRange": [
3
],
- "TriggerInterval": 3,
+ "TriggerInterval": 2.5,
"StartFiringSpeed": 480,
"FinalFiringSpeed": 480,
"FiringSpeedAddSpeed": 0,
@@ -126,15 +122,12 @@
"UpliftAngle": 10,
"DefaultAngle": 0,
"UpliftAngleRestore": 1,
- "FireEffect": "res://prefab/effect/weapon/ShotFire.tscn",
+ "FireEffect": "res://prefab/effect/weapon/ShotFire0001.tscn",
"__Bullet": "0001",
"__Shell": "shell0001",
"ReloadThrowShell": false,
+ "ThrowShellCount": 1,
"ThrowShellDelayTime": 0,
- "ThrowCollisionSize": {
- "X": 20,
- "Y": 15
- },
"CanMeleeAttack": true,
"MeleeAttackHarmRange": [
10
@@ -152,11 +145,10 @@
"__BeLoadedSound": "",
"BeLoadedSoundDelayTime": 0,
"__OtherSoundMap": null,
- "__AiUseAttribute": "",
"__AiAttackAttr": "0001"
},
{
- "Id": "0003",
+ "Id": "0002",
"Remark": "\u9730\u5F39\u67AA",
"__Activity": "weapon0002",
"Weight": 40,
@@ -166,11 +158,11 @@
"AmmoCapacity": 7,
"MaxAmmoCapacity": 140,
"StandbyAmmoCapacity": 133,
- "ReloadTime": 0.4,
+ "ReloadTime": 0.26,
"AloneReload": true,
"AloneReloadCount": 1,
- "AloneReloadBeginIntervalTime": 0.6,
- "AloneReloadFinishIntervalTime": 0.6,
+ "AloneReloadBeginIntervalTime": 0.5,
+ "AloneReloadFinishIntervalTime": 0.45,
"AloneReloadCanShoot": true,
"LooseShoot": false,
"MinChargeTime": 0,
@@ -204,15 +196,12 @@
"UpliftAngle": 15,
"DefaultAngle": 0,
"UpliftAngleRestore": 1,
- "FireEffect": "res://prefab/effect/weapon/ShotFire.tscn",
+ "FireEffect": "res://prefab/effect/weapon/ShotFire0001.tscn",
"__Bullet": "0002",
"__Shell": "shell0002",
"ReloadThrowShell": false,
+ "ThrowShellCount": 1,
"ThrowShellDelayTime": 0.2,
- "ThrowCollisionSize": {
- "X": 20,
- "Y": 15
- },
"CanMeleeAttack": true,
"MeleeAttackHarmRange": [
10
@@ -230,11 +219,10 @@
"__BeLoadedSound": "beLoaded0005",
"BeLoadedSoundDelayTime": 0,
"__OtherSoundMap": null,
- "__AiUseAttribute": "0004",
"__AiAttackAttr": ""
},
{
- "Id": "0004",
+ "Id": "0002_ai",
"Remark": "\u9730\u5F39\u67AA",
"__Activity": "",
"Weight": 40,
@@ -244,11 +232,11 @@
"AmmoCapacity": 7,
"MaxAmmoCapacity": 140,
"StandbyAmmoCapacity": 133,
- "ReloadTime": 0.4,
+ "ReloadTime": 0.26,
"AloneReload": true,
"AloneReloadCount": 1,
- "AloneReloadBeginIntervalTime": 0.6,
- "AloneReloadFinishIntervalTime": 0.6,
+ "AloneReloadBeginIntervalTime": 0.5,
+ "AloneReloadFinishIntervalTime": 0.45,
"AloneReloadCanShoot": true,
"LooseShoot": false,
"MinChargeTime": 0,
@@ -258,7 +246,7 @@
"ContinuousCountRange": [
1
],
- "TriggerInterval": 3.5,
+ "TriggerInterval": 3,
"StartFiringSpeed": 120,
"FinalFiringSpeed": 120,
"FiringSpeedAddSpeed": 0,
@@ -282,15 +270,12 @@
"UpliftAngle": 15,
"DefaultAngle": 0,
"UpliftAngleRestore": 1,
- "FireEffect": "res://prefab/effect/weapon/ShotFire.tscn",
+ "FireEffect": "res://prefab/effect/weapon/ShotFire0001.tscn",
"__Bullet": "0002",
"__Shell": "shell0002",
"ReloadThrowShell": false,
+ "ThrowShellCount": 1,
"ThrowShellDelayTime": 0.2,
- "ThrowCollisionSize": {
- "X": 20,
- "Y": 15
- },
"CanMeleeAttack": true,
"MeleeAttackHarmRange": [
10
@@ -308,11 +293,10 @@
"__BeLoadedSound": "beLoaded0005",
"BeLoadedSoundDelayTime": 0,
"__OtherSoundMap": null,
- "__AiUseAttribute": "",
"__AiAttackAttr": "0002"
},
{
- "Id": "0005",
+ "Id": "0003",
"Remark": "\u624B\u67AA",
"__Activity": "weapon0003",
"Weight": 20,
@@ -322,7 +306,7 @@
"AmmoCapacity": 12,
"MaxAmmoCapacity": 180,
"StandbyAmmoCapacity": 168,
- "ReloadTime": 1.5,
+ "ReloadTime": 1.4,
"AloneReload": false,
"AloneReloadCount": 1,
"AloneReloadBeginIntervalTime": 0,
@@ -360,15 +344,12 @@
"UpliftAngle": 20,
"DefaultAngle": 0,
"UpliftAngleRestore": 1,
- "FireEffect": "res://prefab/effect/weapon/ShotFire.tscn",
+ "FireEffect": "res://prefab/effect/weapon/ShotFire0001.tscn",
"__Bullet": "0001",
"__Shell": "shell0001",
"ReloadThrowShell": false,
+ "ThrowShellCount": 1,
"ThrowShellDelayTime": 0,
- "ThrowCollisionSize": {
- "X": 20,
- "Y": 15
- },
"CanMeleeAttack": true,
"MeleeAttackHarmRange": [
10
@@ -386,11 +367,10 @@
"__BeLoadedSound": "",
"BeLoadedSoundDelayTime": 0,
"__OtherSoundMap": null,
- "__AiUseAttribute": "0006",
"__AiAttackAttr": ""
},
{
- "Id": "0006",
+ "Id": "0003_ai",
"Remark": "\u624B\u67AA",
"__Activity": "",
"Weight": 20,
@@ -400,7 +380,7 @@
"AmmoCapacity": 12,
"MaxAmmoCapacity": 180,
"StandbyAmmoCapacity": 168,
- "ReloadTime": 1.5,
+ "ReloadTime": 1.4,
"AloneReload": false,
"AloneReloadCount": 1,
"AloneReloadBeginIntervalTime": 0,
@@ -414,7 +394,7 @@
"ContinuousCountRange": [
1
],
- "TriggerInterval": 1.3,
+ "TriggerInterval": 1,
"StartFiringSpeed": 300,
"FinalFiringSpeed": 300,
"FiringSpeedAddSpeed": 0,
@@ -438,15 +418,12 @@
"UpliftAngle": 20,
"DefaultAngle": 0,
"UpliftAngleRestore": 1,
- "FireEffect": "res://prefab/effect/weapon/ShotFire.tscn",
+ "FireEffect": "res://prefab/effect/weapon/ShotFire0001.tscn",
"__Bullet": "0001",
"__Shell": "shell0001",
"ReloadThrowShell": false,
+ "ThrowShellCount": 1,
"ThrowShellDelayTime": 0,
- "ThrowCollisionSize": {
- "X": 20,
- "Y": 15
- },
"CanMeleeAttack": true,
"MeleeAttackHarmRange": [
10
@@ -464,11 +441,10 @@
"__BeLoadedSound": "",
"BeLoadedSoundDelayTime": 0,
"__OtherSoundMap": null,
- "__AiUseAttribute": "",
"__AiAttackAttr": "0003"
},
{
- "Id": "0007",
+ "Id": "0004",
"Remark": "\u5200",
"__Activity": "weapon0004",
"Weight": 40,
@@ -519,11 +495,8 @@
"__Bullet": "2001",
"__Shell": "",
"ReloadThrowShell": false,
+ "ThrowShellCount": 0,
"ThrowShellDelayTime": 0,
- "ThrowCollisionSize": {
- "X": 20,
- "Y": 15
- },
"CanMeleeAttack": true,
"MeleeAttackHarmRange": [
10
@@ -541,11 +514,10 @@
"__BeLoadedSound": "",
"BeLoadedSoundDelayTime": 0,
"__OtherSoundMap": null,
- "__AiUseAttribute": "0008",
"__AiAttackAttr": ""
},
{
- "Id": "0008",
+ "Id": "0004_ai",
"Remark": "\u5200",
"__Activity": "",
"Weight": 40,
@@ -596,11 +568,8 @@
"__Bullet": "2001",
"__Shell": "",
"ReloadThrowShell": false,
+ "ThrowShellCount": 0,
"ThrowShellDelayTime": 0,
- "ThrowCollisionSize": {
- "X": 20,
- "Y": 15
- },
"CanMeleeAttack": true,
"MeleeAttackHarmRange": [
10
@@ -618,11 +587,10 @@
"__BeLoadedSound": "",
"BeLoadedSoundDelayTime": 0,
"__OtherSoundMap": null,
- "__AiUseAttribute": "",
"__AiAttackAttr": "0004"
},
{
- "Id": "0009",
+ "Id": "0005",
"Remark": "\u72D9\u51FB\u67AA",
"__Activity": "weapon0005",
"Weight": 50,
@@ -632,7 +600,7 @@
"AmmoCapacity": 10,
"MaxAmmoCapacity": 80,
"StandbyAmmoCapacity": 70,
- "ReloadTime": 3,
+ "ReloadTime": 2.8,
"AloneReload": false,
"AloneReloadCount": 1,
"AloneReloadBeginIntervalTime": 0,
@@ -670,15 +638,12 @@
"UpliftAngle": 15,
"DefaultAngle": 0,
"UpliftAngleRestore": 1,
- "FireEffect": "res://prefab/effect/weapon/ShotFire.tscn",
+ "FireEffect": "res://prefab/effect/weapon/ShotFire0001.tscn",
"__Bullet": "0004",
"__Shell": "shell0003",
"ReloadThrowShell": false,
+ "ThrowShellCount": 1,
"ThrowShellDelayTime": 0.2,
- "ThrowCollisionSize": {
- "X": 20,
- "Y": 15
- },
"CanMeleeAttack": true,
"MeleeAttackHarmRange": [
10
@@ -696,11 +661,10 @@
"__BeLoadedSound": "beLoaded0007",
"BeLoadedSoundDelayTime": 0,
"__OtherSoundMap": null,
- "__AiUseAttribute": "0010",
"__AiAttackAttr": ""
},
{
- "Id": "0010",
+ "Id": "0005_ai",
"Remark": "\u72D9\u51FB\u67AA",
"__Activity": "",
"Weight": 50,
@@ -710,7 +674,7 @@
"AmmoCapacity": 10,
"MaxAmmoCapacity": 80,
"StandbyAmmoCapacity": 70,
- "ReloadTime": 3,
+ "ReloadTime": 2.8,
"AloneReload": false,
"AloneReloadCount": 1,
"AloneReloadBeginIntervalTime": 0,
@@ -724,7 +688,7 @@
"ContinuousCountRange": [
1
],
- "TriggerInterval": 5,
+ "TriggerInterval": 4,
"StartFiringSpeed": 150,
"FinalFiringSpeed": 150,
"FiringSpeedAddSpeed": 0,
@@ -748,15 +712,12 @@
"UpliftAngle": 15,
"DefaultAngle": 0,
"UpliftAngleRestore": 1,
- "FireEffect": "res://prefab/effect/weapon/ShotFire.tscn",
+ "FireEffect": "res://prefab/effect/weapon/ShotFire0001.tscn",
"__Bullet": "0004",
"__Shell": "shell0003",
"ReloadThrowShell": false,
+ "ThrowShellCount": 1,
"ThrowShellDelayTime": 0.2,
- "ThrowCollisionSize": {
- "X": 20,
- "Y": 15
- },
"CanMeleeAttack": true,
"MeleeAttackHarmRange": [
10
@@ -774,11 +735,10 @@
"__BeLoadedSound": "beLoaded0007",
"BeLoadedSoundDelayTime": 0,
"__OtherSoundMap": null,
- "__AiUseAttribute": "",
"__AiAttackAttr": "0005"
},
{
- "Id": "0011",
+ "Id": "0006",
"Remark": "\u51B2\u950B\u67AA",
"__Activity": "weapon0006",
"Weight": 30,
@@ -788,7 +748,7 @@
"AmmoCapacity": 20,
"MaxAmmoCapacity": 600,
"StandbyAmmoCapacity": 580,
- "ReloadTime": 2.2,
+ "ReloadTime": 1.8,
"AloneReload": false,
"AloneReloadCount": 1,
"AloneReloadBeginIntervalTime": 0,
@@ -826,15 +786,12 @@
"UpliftAngle": 5,
"DefaultAngle": 0,
"UpliftAngleRestore": 1,
- "FireEffect": "res://prefab/effect/weapon/ShotFire.tscn",
+ "FireEffect": "res://prefab/effect/weapon/ShotFire0001.tscn",
"__Bullet": "0002",
"__Shell": "shell0001",
"ReloadThrowShell": false,
+ "ThrowShellCount": 1,
"ThrowShellDelayTime": 0,
- "ThrowCollisionSize": {
- "X": 20,
- "Y": 15
- },
"CanMeleeAttack": true,
"MeleeAttackHarmRange": [
10
@@ -844,19 +801,18 @@
],
"__ShootSound": "shooting0002",
"__BeginReloadSound": "reloadBegin0005",
- "BeginReloadSoundDelayTime": 0.2,
+ "BeginReloadSoundDelayTime": 0,
"__ReloadSound": "",
"ReloadSoundDelayTime": 0,
"__ReloadFinishSound": "beLoaded0016",
- "ReloadFinishSoundAdvanceTime": 0.5,
+ "ReloadFinishSoundAdvanceTime": 0.6,
"__BeLoadedSound": "",
"BeLoadedSoundDelayTime": 0,
"__OtherSoundMap": null,
- "__AiUseAttribute": "0012",
"__AiAttackAttr": ""
},
{
- "Id": "0012",
+ "Id": "0006_ai",
"Remark": "\u51B2\u950B\u67AA",
"__Activity": "",
"Weight": 30,
@@ -866,7 +822,7 @@
"AmmoCapacity": 20,
"MaxAmmoCapacity": 600,
"StandbyAmmoCapacity": 580,
- "ReloadTime": 2.2,
+ "ReloadTime": 1.8,
"AloneReload": false,
"AloneReloadCount": 1,
"AloneReloadBeginIntervalTime": 0,
@@ -880,7 +836,7 @@
"ContinuousCountRange": [
5
],
- "TriggerInterval": 3.5,
+ "TriggerInterval": 3,
"StartFiringSpeed": 700,
"FinalFiringSpeed": 700,
"FiringSpeedAddSpeed": 0,
@@ -904,15 +860,12 @@
"UpliftAngle": 5,
"DefaultAngle": 0,
"UpliftAngleRestore": 1,
- "FireEffect": "res://prefab/effect/weapon/ShotFire.tscn",
+ "FireEffect": "res://prefab/effect/weapon/ShotFire0001.tscn",
"__Bullet": "0002",
"__Shell": "shell0001",
"ReloadThrowShell": false,
+ "ThrowShellCount": 1,
"ThrowShellDelayTime": 0,
- "ThrowCollisionSize": {
- "X": 20,
- "Y": 15
- },
"CanMeleeAttack": true,
"MeleeAttackHarmRange": [
10
@@ -922,19 +875,18 @@
],
"__ShootSound": "shooting0002",
"__BeginReloadSound": "reloadBegin0005",
- "BeginReloadSoundDelayTime": 0.2,
+ "BeginReloadSoundDelayTime": 0,
"__ReloadSound": "",
"ReloadSoundDelayTime": 0,
"__ReloadFinishSound": "beLoaded0016",
- "ReloadFinishSoundAdvanceTime": 0.5,
+ "ReloadFinishSoundAdvanceTime": 0.6,
"__BeLoadedSound": "",
"BeLoadedSoundDelayTime": 0,
"__OtherSoundMap": null,
- "__AiUseAttribute": "",
"__AiAttackAttr": "0004"
},
{
- "Id": "0013",
+ "Id": "0007",
"Remark": "\u6C64\u59C6\u900A\u51B2\u950B\u67AA",
"__Activity": "weapon0007",
"Weight": 40,
@@ -982,15 +934,12 @@
"UpliftAngle": 5,
"DefaultAngle": 0,
"UpliftAngleRestore": 1,
- "FireEffect": "res://prefab/effect/weapon/ShotFire.tscn",
+ "FireEffect": "res://prefab/effect/weapon/ShotFire0001.tscn",
"__Bullet": "0003",
"__Shell": "shell0001",
"ReloadThrowShell": false,
+ "ThrowShellCount": 1,
"ThrowShellDelayTime": 0,
- "ThrowCollisionSize": {
- "X": 20,
- "Y": 15
- },
"CanMeleeAttack": true,
"MeleeAttackHarmRange": [
10
@@ -1008,11 +957,10 @@
"__BeLoadedSound": "",
"BeLoadedSoundDelayTime": 0,
"__OtherSoundMap": null,
- "__AiUseAttribute": "0014",
"__AiAttackAttr": ""
},
{
- "Id": "0014",
+ "Id": "0007_ai",
"Remark": "\u6C64\u59C6\u900A\u51B2\u950B\u67AA",
"__Activity": "",
"Weight": 40,
@@ -1036,7 +984,7 @@
"ContinuousCountRange": [
10
],
- "TriggerInterval": 4.5,
+ "TriggerInterval": 4,
"StartFiringSpeed": 200,
"FinalFiringSpeed": 200,
"FiringSpeedAddSpeed": 0,
@@ -1060,15 +1008,12 @@
"UpliftAngle": 5,
"DefaultAngle": 0,
"UpliftAngleRestore": 1,
- "FireEffect": "res://prefab/effect/weapon/ShotFire.tscn",
+ "FireEffect": "res://prefab/effect/weapon/ShotFire0001.tscn",
"__Bullet": "0003",
"__Shell": "shell0001",
"ReloadThrowShell": false,
+ "ThrowShellCount": 1,
"ThrowShellDelayTime": 0,
- "ThrowCollisionSize": {
- "X": 20,
- "Y": 15
- },
"CanMeleeAttack": true,
"MeleeAttackHarmRange": [
10
@@ -1086,11 +1031,10 @@
"__BeLoadedSound": "",
"BeLoadedSoundDelayTime": 0,
"__OtherSoundMap": null,
- "__AiUseAttribute": "",
"__AiAttackAttr": "0006"
},
{
- "Id": "0015",
+ "Id": "0008",
"Remark": "\u6FC0\u5149\u624B\u67AA",
"__Activity": "weapon0008",
"Weight": 40,
@@ -1138,15 +1082,12 @@
"UpliftAngle": 13,
"DefaultAngle": 0,
"UpliftAngleRestore": 1,
- "FireEffect": "res://prefab/effect/weapon/ShotFire2.tscn",
+ "FireEffect": "res://prefab/effect/weapon/ShotFire0002.tscn",
"__Bullet": "1001",
"__Shell": "",
"ReloadThrowShell": false,
+ "ThrowShellCount": 1,
"ThrowShellDelayTime": 0,
- "ThrowCollisionSize": {
- "X": 20,
- "Y": 15
- },
"CanMeleeAttack": true,
"MeleeAttackHarmRange": [
10
@@ -1164,11 +1105,10 @@
"__BeLoadedSound": "",
"BeLoadedSoundDelayTime": 0,
"__OtherSoundMap": null,
- "__AiUseAttribute": "0016",
"__AiAttackAttr": ""
},
{
- "Id": "0016",
+ "Id": "0008_ai",
"Remark": "\u6FC0\u5149\u624B\u67AA",
"__Activity": "",
"Weight": 40,
@@ -1192,7 +1132,7 @@
"ContinuousCountRange": [
1
],
- "TriggerInterval": 4,
+ "TriggerInterval": 3,
"StartFiringSpeed": 300,
"FinalFiringSpeed": 300,
"FiringSpeedAddSpeed": 0,
@@ -1216,15 +1156,12 @@
"UpliftAngle": 13,
"DefaultAngle": 0,
"UpliftAngleRestore": 1,
- "FireEffect": "res://prefab/effect/weapon/ShotFire2.tscn",
+ "FireEffect": "res://prefab/effect/weapon/ShotFire0002.tscn",
"__Bullet": "1001",
"__Shell": "",
"ReloadThrowShell": false,
+ "ThrowShellCount": 1,
"ThrowShellDelayTime": 0,
- "ThrowCollisionSize": {
- "X": 20,
- "Y": 15
- },
"CanMeleeAttack": true,
"MeleeAttackHarmRange": [
10
@@ -1242,11 +1179,10 @@
"__BeLoadedSound": "",
"BeLoadedSoundDelayTime": 0,
"__OtherSoundMap": null,
- "__AiUseAttribute": "",
"__AiAttackAttr": "0007"
},
{
- "Id": "0017",
+ "Id": "0009",
"Remark": "\u69B4\u5F39\u53D1\u5C04\u5668",
"__Activity": "weapon0009",
"Weight": 40,
@@ -1294,15 +1230,12 @@
"UpliftAngle": 16,
"DefaultAngle": 0,
"UpliftAngleRestore": 3,
- "FireEffect": "res://prefab/effect/weapon/ShotFire.tscn",
+ "FireEffect": "res://prefab/effect/weapon/ShotFire0001.tscn",
"__Bullet": "0005",
"__Shell": "shell0004",
"ReloadThrowShell": true,
+ "ThrowShellCount": 1,
"ThrowShellDelayTime": 0.46,
- "ThrowCollisionSize": {
- "X": 20,
- "Y": 15
- },
"CanMeleeAttack": true,
"MeleeAttackHarmRange": [
10
@@ -1320,11 +1253,10 @@
"__BeLoadedSound": "",
"BeLoadedSoundDelayTime": 0,
"__OtherSoundMap": null,
- "__AiUseAttribute": "0018",
"__AiAttackAttr": ""
},
{
- "Id": "0018",
+ "Id": "0009_ai",
"Remark": "\u69B4\u5F39\u53D1\u5C04\u5668",
"__Activity": "",
"Weight": 40,
@@ -1348,7 +1280,7 @@
"ContinuousCountRange": [
1
],
- "TriggerInterval": 5,
+ "TriggerInterval": 4,
"StartFiringSpeed": 60,
"FinalFiringSpeed": 60,
"FiringSpeedAddSpeed": 0,
@@ -1372,15 +1304,12 @@
"UpliftAngle": 16,
"DefaultAngle": 0,
"UpliftAngleRestore": 3,
- "FireEffect": "res://prefab/effect/weapon/ShotFire.tscn",
+ "FireEffect": "res://prefab/effect/weapon/ShotFire0001.tscn",
"__Bullet": "0005",
"__Shell": "shell0004",
"ReloadThrowShell": true,
+ "ThrowShellCount": 1,
"ThrowShellDelayTime": 0.46,
- "ThrowCollisionSize": {
- "X": 20,
- "Y": 15
- },
"CanMeleeAttack": true,
"MeleeAttackHarmRange": [
10
@@ -1398,7 +1327,598 @@
"__BeLoadedSound": "",
"BeLoadedSoundDelayTime": 0,
"__OtherSoundMap": null,
- "__AiUseAttribute": "",
"__AiAttackAttr": "0008"
+ },
+ {
+ "Id": "0010",
+ "Remark": "M1\u578B\u70ED\u80FD\u72D9\u51FB\u67AA",
+ "__Activity": "weapon0010",
+ "Weight": 40,
+ "WeightType": 2,
+ "IsMelee": false,
+ "ContinuousShoot": false,
+ "AmmoCapacity": 5,
+ "MaxAmmoCapacity": 150,
+ "StandbyAmmoCapacity": 80,
+ "ReloadTime": 2,
+ "AloneReload": false,
+ "AloneReloadCount": 1,
+ "AloneReloadBeginIntervalTime": 0,
+ "AloneReloadFinishIntervalTime": 0,
+ "AloneReloadCanShoot": false,
+ "LooseShoot": false,
+ "MinChargeTime": 0,
+ "ManualBeLoaded": false,
+ "AutoManualBeLoaded": false,
+ "BeLoadedTime": 0,
+ "ContinuousCountRange": [
+ 1
+ ],
+ "TriggerInterval": 0,
+ "StartFiringSpeed": 210,
+ "FinalFiringSpeed": 210,
+ "FiringSpeedAddSpeed": 0,
+ "FiringSpeedBackSpeed": 0,
+ "FiringSpeedBackTime": 0,
+ "FireBulletCountRange": [
+ 1
+ ],
+ "DelayedTime": 0,
+ "StartScatteringRange": 0,
+ "FinalScatteringRange": 20,
+ "ScatteringRangeAddValue": 7,
+ "ScatteringRangeBackSpeed": 20,
+ "ScatteringRangeBackDelayTime": 0.5,
+ "CameraShake": 2,
+ "BacklashRange": [
+ 2,
+ 3
+ ],
+ "BacklashRegressionSpeed": 25,
+ "UpliftAngle": 16,
+ "DefaultAngle": 0,
+ "UpliftAngleRestore": 1,
+ "FireEffect": "res://prefab/effect/weapon/ShotFire0004.tscn",
+ "__Bullet": "0007",
+ "__Shell": "",
+ "ReloadThrowShell": false,
+ "ThrowShellCount": 1,
+ "ThrowShellDelayTime": 0,
+ "CanMeleeAttack": true,
+ "MeleeAttackHarmRange": [
+ 10
+ ],
+ "MeleeAttackRepelRange": [
+ 100
+ ],
+ "__ShootSound": "shooting0012",
+ "__BeginReloadSound": "reloadBegin0013",
+ "BeginReloadSoundDelayTime": 0,
+ "__ReloadSound": "",
+ "ReloadSoundDelayTime": 0,
+ "__ReloadFinishSound": "reloadFinish0005",
+ "ReloadFinishSoundAdvanceTime": 0.6,
+ "__BeLoadedSound": "",
+ "BeLoadedSoundDelayTime": 0,
+ "__OtherSoundMap": null,
+ "__AiAttackAttr": ""
+ },
+ {
+ "Id": "0010_ai",
+ "Remark": "M1\u578B\u70ED\u80FD\u72D9\u51FB\u67AA",
+ "__Activity": "",
+ "Weight": 40,
+ "WeightType": 2,
+ "IsMelee": false,
+ "ContinuousShoot": false,
+ "AmmoCapacity": 5,
+ "MaxAmmoCapacity": 150,
+ "StandbyAmmoCapacity": 80,
+ "ReloadTime": 2,
+ "AloneReload": false,
+ "AloneReloadCount": 1,
+ "AloneReloadBeginIntervalTime": 0,
+ "AloneReloadFinishIntervalTime": 0,
+ "AloneReloadCanShoot": false,
+ "LooseShoot": false,
+ "MinChargeTime": 0,
+ "ManualBeLoaded": false,
+ "AutoManualBeLoaded": false,
+ "BeLoadedTime": 0,
+ "ContinuousCountRange": [
+ 1
+ ],
+ "TriggerInterval": 4,
+ "StartFiringSpeed": 210,
+ "FinalFiringSpeed": 210,
+ "FiringSpeedAddSpeed": 0,
+ "FiringSpeedBackSpeed": 0,
+ "FiringSpeedBackTime": 0,
+ "FireBulletCountRange": [
+ 1
+ ],
+ "DelayedTime": 0,
+ "StartScatteringRange": 0,
+ "FinalScatteringRange": 20,
+ "ScatteringRangeAddValue": 7,
+ "ScatteringRangeBackSpeed": 20,
+ "ScatteringRangeBackDelayTime": 0.5,
+ "CameraShake": 2,
+ "BacklashRange": [
+ 2,
+ 3
+ ],
+ "BacklashRegressionSpeed": 25,
+ "UpliftAngle": 16,
+ "DefaultAngle": 0,
+ "UpliftAngleRestore": 1,
+ "FireEffect": "res://prefab/effect/weapon/ShotFire0004.tscn",
+ "__Bullet": "0007",
+ "__Shell": "",
+ "ReloadThrowShell": false,
+ "ThrowShellCount": 1,
+ "ThrowShellDelayTime": 0,
+ "CanMeleeAttack": true,
+ "MeleeAttackHarmRange": [
+ 10
+ ],
+ "MeleeAttackRepelRange": [
+ 100
+ ],
+ "__ShootSound": "shooting0012",
+ "__BeginReloadSound": "reloadBegin0013",
+ "BeginReloadSoundDelayTime": 0,
+ "__ReloadSound": "",
+ "ReloadSoundDelayTime": 0,
+ "__ReloadFinishSound": "reloadFinish0005",
+ "ReloadFinishSoundAdvanceTime": 0.6,
+ "__BeLoadedSound": "",
+ "BeLoadedSoundDelayTime": 0,
+ "__OtherSoundMap": null,
+ "__AiAttackAttr": "0009"
+ },
+ {
+ "Id": "0011",
+ "Remark": "weapon0011",
+ "__Activity": "weapon0011",
+ "Weight": 30,
+ "WeightType": 2,
+ "IsMelee": false,
+ "ContinuousShoot": true,
+ "AmmoCapacity": 20,
+ "MaxAmmoCapacity": 600,
+ "StandbyAmmoCapacity": 580,
+ "ReloadTime": 1.8,
+ "AloneReload": false,
+ "AloneReloadCount": 1,
+ "AloneReloadBeginIntervalTime": 0,
+ "AloneReloadFinishIntervalTime": 0,
+ "AloneReloadCanShoot": false,
+ "LooseShoot": false,
+ "MinChargeTime": 0,
+ "ManualBeLoaded": false,
+ "AutoManualBeLoaded": false,
+ "BeLoadedTime": 0,
+ "ContinuousCountRange": [
+ 1
+ ],
+ "TriggerInterval": 0,
+ "StartFiringSpeed": 700,
+ "FinalFiringSpeed": 700,
+ "FiringSpeedAddSpeed": 0,
+ "FiringSpeedBackSpeed": 0,
+ "FiringSpeedBackTime": 0,
+ "FireBulletCountRange": [
+ 1
+ ],
+ "DelayedTime": 0,
+ "StartScatteringRange": 3,
+ "FinalScatteringRange": 30,
+ "ScatteringRangeAddValue": 2,
+ "ScatteringRangeBackSpeed": 40,
+ "ScatteringRangeBackDelayTime": 0.3,
+ "CameraShake": 2,
+ "BacklashRange": [
+ 1,
+ 2
+ ],
+ "BacklashRegressionSpeed": 35,
+ "UpliftAngle": 5,
+ "DefaultAngle": 0,
+ "UpliftAngleRestore": 1,
+ "FireEffect": "res://prefab/effect/weapon/ShotFire0001.tscn",
+ "__Bullet": "0009",
+ "__Shell": "",
+ "ReloadThrowShell": false,
+ "ThrowShellCount": 0,
+ "ThrowShellDelayTime": 0,
+ "CanMeleeAttack": true,
+ "MeleeAttackHarmRange": [
+ 10
+ ],
+ "MeleeAttackRepelRange": [
+ 100
+ ],
+ "__ShootSound": "shooting0002",
+ "__BeginReloadSound": "reloadBegin0005",
+ "BeginReloadSoundDelayTime": 0,
+ "__ReloadSound": "",
+ "ReloadSoundDelayTime": 0,
+ "__ReloadFinishSound": "beLoaded0016",
+ "ReloadFinishSoundAdvanceTime": 0.6,
+ "__BeLoadedSound": "",
+ "BeLoadedSoundDelayTime": 0,
+ "__OtherSoundMap": null,
+ "__AiAttackAttr": ""
+ },
+ {
+ "Id": "0011_ai",
+ "Remark": "weapon0011",
+ "__Activity": "",
+ "Weight": 30,
+ "WeightType": 2,
+ "IsMelee": false,
+ "ContinuousShoot": false,
+ "AmmoCapacity": 20,
+ "MaxAmmoCapacity": 600,
+ "StandbyAmmoCapacity": 580,
+ "ReloadTime": 1.8,
+ "AloneReload": false,
+ "AloneReloadCount": 1,
+ "AloneReloadBeginIntervalTime": 0,
+ "AloneReloadFinishIntervalTime": 0,
+ "AloneReloadCanShoot": false,
+ "LooseShoot": false,
+ "MinChargeTime": 0,
+ "ManualBeLoaded": false,
+ "AutoManualBeLoaded": false,
+ "BeLoadedTime": 0,
+ "ContinuousCountRange": [
+ 5
+ ],
+ "TriggerInterval": 3,
+ "StartFiringSpeed": 700,
+ "FinalFiringSpeed": 700,
+ "FiringSpeedAddSpeed": 0,
+ "FiringSpeedBackSpeed": 0,
+ "FiringSpeedBackTime": 0,
+ "FireBulletCountRange": [
+ 1
+ ],
+ "DelayedTime": 0,
+ "StartScatteringRange": 3,
+ "FinalScatteringRange": 30,
+ "ScatteringRangeAddValue": 2,
+ "ScatteringRangeBackSpeed": 30,
+ "ScatteringRangeBackDelayTime": 0.3,
+ "CameraShake": 2,
+ "BacklashRange": [
+ 1,
+ 2
+ ],
+ "BacklashRegressionSpeed": 35,
+ "UpliftAngle": 5,
+ "DefaultAngle": 0,
+ "UpliftAngleRestore": 1,
+ "FireEffect": "res://prefab/effect/weapon/ShotFire0001.tscn",
+ "__Bullet": "0009",
+ "__Shell": "",
+ "ReloadThrowShell": false,
+ "ThrowShellCount": 0,
+ "ThrowShellDelayTime": 0,
+ "CanMeleeAttack": true,
+ "MeleeAttackHarmRange": [
+ 10
+ ],
+ "MeleeAttackRepelRange": [
+ 100
+ ],
+ "__ShootSound": "shooting0002",
+ "__BeginReloadSound": "reloadBegin0005",
+ "BeginReloadSoundDelayTime": 0,
+ "__ReloadSound": "",
+ "ReloadSoundDelayTime": 0,
+ "__ReloadFinishSound": "beLoaded0016",
+ "ReloadFinishSoundAdvanceTime": 0.6,
+ "__BeLoadedSound": "",
+ "BeLoadedSoundDelayTime": 0,
+ "__OtherSoundMap": null,
+ "__AiAttackAttr": "0004"
+ },
+ {
+ "Id": "0013",
+ "Remark": "P90",
+ "__Activity": "weapon0013",
+ "Weight": 40,
+ "WeightType": 2,
+ "IsMelee": false,
+ "ContinuousShoot": true,
+ "AmmoCapacity": 50,
+ "MaxAmmoCapacity": 500,
+ "StandbyAmmoCapacity": 350,
+ "ReloadTime": 2,
+ "AloneReload": false,
+ "AloneReloadCount": 1,
+ "AloneReloadBeginIntervalTime": 0,
+ "AloneReloadFinishIntervalTime": 0,
+ "AloneReloadCanShoot": false,
+ "LooseShoot": false,
+ "MinChargeTime": 0,
+ "ManualBeLoaded": false,
+ "AutoManualBeLoaded": false,
+ "BeLoadedTime": 0,
+ "ContinuousCountRange": [
+ 1
+ ],
+ "TriggerInterval": 0,
+ "StartFiringSpeed": 900,
+ "FinalFiringSpeed": 900,
+ "FiringSpeedAddSpeed": 0,
+ "FiringSpeedBackSpeed": 0,
+ "FiringSpeedBackTime": 0.5,
+ "FireBulletCountRange": [
+ 1
+ ],
+ "DelayedTime": 0,
+ "StartScatteringRange": 5,
+ "FinalScatteringRange": 35,
+ "ScatteringRangeAddValue": 2,
+ "ScatteringRangeBackSpeed": 50,
+ "ScatteringRangeBackDelayTime": 0.3,
+ "CameraShake": 2,
+ "BacklashRange": [
+ 1,
+ 1
+ ],
+ "BacklashRegressionSpeed": 35,
+ "UpliftAngle": 3,
+ "DefaultAngle": 0,
+ "UpliftAngleRestore": 1,
+ "FireEffect": "res://prefab/effect/weapon/ShotFire0001.tscn",
+ "__Bullet": "0003",
+ "__Shell": "shell0001",
+ "ReloadThrowShell": false,
+ "ThrowShellCount": 1,
+ "ThrowShellDelayTime": 0,
+ "CanMeleeAttack": true,
+ "MeleeAttackHarmRange": [
+ 10
+ ],
+ "MeleeAttackRepelRange": [
+ 100
+ ],
+ "__ShootSound": "shooting0013",
+ "__BeginReloadSound": "reloadBegin0007",
+ "BeginReloadSoundDelayTime": 0,
+ "__ReloadSound": "",
+ "ReloadSoundDelayTime": 0,
+ "__ReloadFinishSound": "beLoaded0010",
+ "ReloadFinishSoundAdvanceTime": 0.35,
+ "__BeLoadedSound": "",
+ "BeLoadedSoundDelayTime": 0,
+ "__OtherSoundMap": null,
+ "__AiAttackAttr": ""
+ },
+ {
+ "Id": "0013_ai",
+ "Remark": "P90",
+ "__Activity": "",
+ "Weight": 40,
+ "WeightType": 2,
+ "IsMelee": false,
+ "ContinuousShoot": false,
+ "AmmoCapacity": 50,
+ "MaxAmmoCapacity": 500,
+ "StandbyAmmoCapacity": 350,
+ "ReloadTime": 2,
+ "AloneReload": false,
+ "AloneReloadCount": 1,
+ "AloneReloadBeginIntervalTime": 0,
+ "AloneReloadFinishIntervalTime": 0,
+ "AloneReloadCanShoot": false,
+ "LooseShoot": false,
+ "MinChargeTime": 0,
+ "ManualBeLoaded": false,
+ "AutoManualBeLoaded": false,
+ "BeLoadedTime": 0,
+ "ContinuousCountRange": [
+ 25
+ ],
+ "TriggerInterval": 4,
+ "StartFiringSpeed": 500,
+ "FinalFiringSpeed": 500,
+ "FiringSpeedAddSpeed": 0,
+ "FiringSpeedBackSpeed": 0,
+ "FiringSpeedBackTime": 0,
+ "FireBulletCountRange": [
+ 1
+ ],
+ "DelayedTime": 0,
+ "StartScatteringRange": 10,
+ "FinalScatteringRange": 30,
+ "ScatteringRangeAddValue": 3,
+ "ScatteringRangeBackSpeed": 50,
+ "ScatteringRangeBackDelayTime": 0.3,
+ "CameraShake": 2,
+ "BacklashRange": [
+ 1,
+ 1
+ ],
+ "BacklashRegressionSpeed": 35,
+ "UpliftAngle": 3,
+ "DefaultAngle": 0,
+ "UpliftAngleRestore": 1,
+ "FireEffect": "res://prefab/effect/weapon/ShotFire0001.tscn",
+ "__Bullet": "0003",
+ "__Shell": "shell0001",
+ "ReloadThrowShell": false,
+ "ThrowShellCount": 1,
+ "ThrowShellDelayTime": 0,
+ "CanMeleeAttack": true,
+ "MeleeAttackHarmRange": [
+ 10
+ ],
+ "MeleeAttackRepelRange": [
+ 100
+ ],
+ "__ShootSound": "shooting0013",
+ "__BeginReloadSound": "reloadBegin0007",
+ "BeginReloadSoundDelayTime": 0,
+ "__ReloadSound": "",
+ "ReloadSoundDelayTime": 0,
+ "__ReloadFinishSound": "beLoaded0010",
+ "ReloadFinishSoundAdvanceTime": 0.35,
+ "__BeLoadedSound": "",
+ "BeLoadedSoundDelayTime": 0,
+ "__OtherSoundMap": null,
+ "__AiAttackAttr": "0006"
+ },
+ {
+ "Id": "0014",
+ "Remark": "\u5DE6\u8F6E",
+ "__Activity": "weapon0014",
+ "Weight": 20,
+ "WeightType": 1,
+ "IsMelee": false,
+ "ContinuousShoot": false,
+ "AmmoCapacity": 5,
+ "MaxAmmoCapacity": 120,
+ "StandbyAmmoCapacity": 80,
+ "ReloadTime": 1,
+ "AloneReload": false,
+ "AloneReloadCount": 1,
+ "AloneReloadBeginIntervalTime": 0,
+ "AloneReloadFinishIntervalTime": 0,
+ "AloneReloadCanShoot": false,
+ "LooseShoot": false,
+ "MinChargeTime": 0,
+ "ManualBeLoaded": false,
+ "AutoManualBeLoaded": false,
+ "BeLoadedTime": 0.05,
+ "ContinuousCountRange": [
+ 1
+ ],
+ "TriggerInterval": 0,
+ "StartFiringSpeed": 600,
+ "FinalFiringSpeed": 600,
+ "FiringSpeedAddSpeed": 0,
+ "FiringSpeedBackSpeed": 0,
+ "FiringSpeedBackTime": 0,
+ "FireBulletCountRange": [
+ 1
+ ],
+ "DelayedTime": 0,
+ "StartScatteringRange": 2,
+ "FinalScatteringRange": 25,
+ "ScatteringRangeAddValue": 5,
+ "ScatteringRangeBackSpeed": 25,
+ "ScatteringRangeBackDelayTime": 0.5,
+ "CameraShake": 4,
+ "BacklashRange": [
+ 3,
+ 5
+ ],
+ "BacklashRegressionSpeed": 35,
+ "UpliftAngle": 20,
+ "DefaultAngle": 0,
+ "UpliftAngleRestore": 1,
+ "FireEffect": "res://prefab/effect/weapon/ShotFire0001.tscn",
+ "__Bullet": "0008",
+ "__Shell": "shell0001",
+ "ReloadThrowShell": true,
+ "ThrowShellCount": 5,
+ "ThrowShellDelayTime": 0,
+ "CanMeleeAttack": true,
+ "MeleeAttackHarmRange": [
+ 10
+ ],
+ "MeleeAttackRepelRange": [
+ 100
+ ],
+ "__ShootSound": "shooting0004",
+ "__BeginReloadSound": "reloading0001",
+ "BeginReloadSoundDelayTime": 0,
+ "__ReloadSound": "",
+ "ReloadSoundDelayTime": 0,
+ "__ReloadFinishSound": "beLoaded0015",
+ "ReloadFinishSoundAdvanceTime": 0.43,
+ "__BeLoadedSound": "",
+ "BeLoadedSoundDelayTime": 0,
+ "__OtherSoundMap": null,
+ "__AiAttackAttr": ""
+ },
+ {
+ "Id": "0014_ai",
+ "Remark": "\u5DE6\u8F6E",
+ "__Activity": "",
+ "Weight": 20,
+ "WeightType": 1,
+ "IsMelee": false,
+ "ContinuousShoot": false,
+ "AmmoCapacity": 5,
+ "MaxAmmoCapacity": 120,
+ "StandbyAmmoCapacity": 80,
+ "ReloadTime": 1,
+ "AloneReload": false,
+ "AloneReloadCount": 1,
+ "AloneReloadBeginIntervalTime": 0,
+ "AloneReloadFinishIntervalTime": 0,
+ "AloneReloadCanShoot": false,
+ "LooseShoot": false,
+ "MinChargeTime": 0,
+ "ManualBeLoaded": false,
+ "AutoManualBeLoaded": false,
+ "BeLoadedTime": 0.05,
+ "ContinuousCountRange": [
+ 1
+ ],
+ "TriggerInterval": 0.8,
+ "StartFiringSpeed": 300,
+ "FinalFiringSpeed": 300,
+ "FiringSpeedAddSpeed": 0,
+ "FiringSpeedBackSpeed": 0,
+ "FiringSpeedBackTime": 0,
+ "FireBulletCountRange": [
+ 1
+ ],
+ "DelayedTime": 0,
+ "StartScatteringRange": 2,
+ "FinalScatteringRange": 25,
+ "ScatteringRangeAddValue": 5,
+ "ScatteringRangeBackSpeed": 25,
+ "ScatteringRangeBackDelayTime": 0.5,
+ "CameraShake": 4,
+ "BacklashRange": [
+ 3,
+ 5
+ ],
+ "BacklashRegressionSpeed": 35,
+ "UpliftAngle": 20,
+ "DefaultAngle": 0,
+ "UpliftAngleRestore": 1,
+ "FireEffect": "res://prefab/effect/weapon/ShotFire0001.tscn",
+ "__Bullet": "0008",
+ "__Shell": "shell0001",
+ "ReloadThrowShell": true,
+ "ThrowShellCount": 5,
+ "ThrowShellDelayTime": 0,
+ "CanMeleeAttack": true,
+ "MeleeAttackHarmRange": [
+ 10
+ ],
+ "MeleeAttackRepelRange": [
+ 100
+ ],
+ "__ShootSound": "shooting0004",
+ "__BeginReloadSound": "reloading0001",
+ "BeginReloadSoundDelayTime": 0,
+ "__ReloadSound": "",
+ "ReloadSoundDelayTime": 0,
+ "__ReloadFinishSound": "beLoaded0015",
+ "ReloadFinishSoundAdvanceTime": 0.43,
+ "__BeLoadedSound": "",
+ "BeLoadedSoundDelayTime": 0,
+ "__OtherSoundMap": null,
+ "__AiAttackAttr": "0003"
}
]
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/GroupConfig.json b/DungeonShooting_Godot/resource/map/tileMaps/GroupConfig.json
index fc14eb8..9b89740 100644
--- a/DungeonShooting_Godot/resource/map/tileMaps/GroupConfig.json
+++ b/DungeonShooting_Godot/resource/map/tileMaps/GroupConfig.json
@@ -10,6 +10,18 @@
{
"ErrorType": 0,
"Path": "resource/map/tileMaps/Test1/battle/Battle2"
+ },
+ {
+ "ErrorType": 0,
+ "Path": "resource/map/tileMaps/Test1/battle/Battle3"
+ },
+ {
+ "ErrorType": 0,
+ "Path": "resource/map/tileMaps/Test1/battle/Battle4"
+ },
+ {
+ "ErrorType": 0,
+ "Path": "resource/map/tileMaps/Test1/battle/Battle5"
}
],
"InletList": [
@@ -36,7 +48,12 @@
"Path": "resource/map/tileMaps/Test1/reward/Award1"
}
],
- "ShopList": [],
+ "ShopList": [
+ {
+ "ErrorType": 0,
+ "Path": "resource/map/tileMaps/Test1/shop/Shop1"
+ }
+ ],
"EventList": [],
"Remark": ""
}
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle1/RoomInfo.json b/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle1/RoomInfo.json
index 6ee53d4..7930a66 100644
--- a/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle1/RoomInfo.json
+++ b/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle1/RoomInfo.json
@@ -1 +1 @@
-{"Position":{"X":-4,"Y":-8},"Size":{"X":16,"Y":14},"DoorAreaInfos":[{"Direction":3,"Start":0,"End":128},{"Direction":1,"Start":0,"End":64},{"Direction":2,"Start":64,"End":192},{"Direction":0,"Start":16,"End":144}],"GroupName":"Test1","RoomType":0,"RoomName":"Battle1","Weight":100,"Remark":""}
\ No newline at end of file
+{"Position":{"X":-4,"Y":-8},"Size":{"X":16,"Y":14},"DoorAreaInfos":[{"Direction":3,"Start":0,"End":128},{"Direction":1,"Start":0,"End":64},{"Direction":2,"Start":64,"End":192},{"Direction":0,"Start":16,"End":144}],"GroupName":"Test1","RoomType":1,"RoomName":"Battle1","Weight":100,"Remark":""}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle2/RoomInfo.json b/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle2/RoomInfo.json
index 097757d..6f8b7ec 100644
--- a/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle2/RoomInfo.json
+++ b/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle2/RoomInfo.json
@@ -1 +1 @@
-{"Position":{"X":-9,"Y":-10},"Size":{"X":27,"Y":21},"DoorAreaInfos":[],"GroupName":"Test1","RoomType":0,"RoomName":"Battle2","Weight":100,"Remark":""}
\ No newline at end of file
+{"Position":{"X":-9,"Y":-10},"Size":{"X":27,"Y":21},"DoorAreaInfos":[],"GroupName":"Test1","RoomType":1,"RoomName":"Battle2","Weight":100,"Remark":""}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle3/Preinstall.json b/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle3/Preinstall.json
new file mode 100644
index 0000000..a9f951a
--- /dev/null
+++ b/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle3/Preinstall.json
@@ -0,0 +1 @@
+[{"Name":"Preinstall1","Weight":100,"Remark":"","AutoFill":true,"WaveList":[[]]}]
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle3/Preview.png b/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle3/Preview.png
new file mode 100644
index 0000000..0885a05
--- /dev/null
+++ b/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle3/Preview.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle3/Preview.png.import b/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle3/Preview.png.import
new file mode 100644
index 0000000..3a15cae
--- /dev/null
+++ b/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle3/Preview.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://djatlwx25yc04"
+path="res://.godot/imported/Preview.png-059b7ebb6f66594cdd23b790819a4a0c.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/map/tileMaps/Test1/battle/Battle3/Preview.png"
+dest_files=["res://.godot/imported/Preview.png-059b7ebb6f66594cdd23b790819a4a0c.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/map/tileMaps/Test1/battle/Battle3/RoomInfo.json b/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle3/RoomInfo.json
new file mode 100644
index 0000000..d3e0245
--- /dev/null
+++ b/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle3/RoomInfo.json
@@ -0,0 +1 @@
+{"Position":{"X":-10,"Y":-12},"Size":{"X":28,"Y":22},"DoorAreaInfos":[{"Direction":3,"Start":0,"End":128},{"Direction":3,"Start":256,"End":384},{"Direction":2,"Start":256,"End":384},{"Direction":2,"Start":0,"End":128},{"Direction":1,"Start":0,"End":272},{"Direction":0,"Start":0,"End":272}],"GroupName":"Test1","RoomType":1,"RoomName":"Battle3","Weight":100,"Remark":""}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle3/TileInfo.json b/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle3/TileInfo.json
new file mode 100644
index 0000000..6e8cc90
--- /dev/null
+++ b/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle3/TileInfo.json
@@ -0,0 +1 @@
+{"NavigationVertices":[{"X":134,"Y":-74},{"X":134,"Y":-138},{"X":250,"Y":-138},{"X":250,"Y":130},{"X":134,"Y":130},{"X":134,"Y":82},{"X":-6,"Y":-74},{"X":-6,"Y":82},{"X":-122,"Y":-138},{"X":-6,"Y":130},{"X":-122,"Y":130},{"X":-6,"Y":-138}],"NavigationPolygon":[[0,1,2,3],[3,4,5],[0,3,5,6],[6,5,7,8],[7,9,10,8],[11,6,8]],"Floor":[-3,-5,0,3,-3,-4,0,3,-3,-3,0,3,-3,-2,0,3,-3,-1,0,3,-3,0,0,3,-3,1,0,3,-3,2,0,3,-3,3,0,3,-3,4,0,3,-2,-5,0,3,-2,-4,0,3,-2,-3,0,3,-2,-2,0,3,-2,-1,0,3,-2,0,0,3,-2,1,0,3,-2,2,0,3,-2,3,0,3,-2,4,0,3,-1,-5,0,3,-1,-4,0,3,-1,-3,0,3,-1,-2,0,3,-1,-1,0,3,-1,0,0,3,-1,1,0,3,-1,2,0,3,-1,3,0,3,-1,4,0,3,0,-5,0,3,0,-4,0,3,0,-3,0,3,0,-2,0,3,0,-1,0,3,0,0,0,3,0,1,0,3,0,2,0,3,0,3,0,3,0,4,0,3,1,-5,0,3,1,-4,0,3,1,-3,0,3,1,-2,0,3,1,-1,0,3,1,0,0,3,1,1,0,3,1,2,0,3,1,3,0,3,1,4,0,3,2,-5,0,3,2,-4,0,3,2,-3,0,3,2,-2,0,3,2,-1,0,3,2,0,0,3,2,1,0,3,2,2,0,3,2,3,0,3,2,4,0,3,3,-5,0,3,3,-4,0,3,3,-3,0,3,3,-2,0,3,3,-1,0,3,3,0,0,3,3,1,0,3,3,2,0,3,3,3,0,3,3,4,0,3,4,-5,0,3,4,-4,0,3,4,-3,0,3,4,-2,0,3,4,-1,0,3,4,0,0,3,4,1,0,3,4,2,0,3,4,3,0,3,4,4,0,3,5,-5,0,3,5,-4,0,3,5,-3,0,3,5,-2,0,3,5,-1,0,3,5,0,0,3,5,1,0,3,5,2,0,3,5,3,0,3,5,4,0,3,6,-5,0,3,6,-4,0,3,6,-3,0,3,6,-2,0,3,6,-1,0,3,6,0,0,3,6,1,0,3,6,2,0,3,6,3,0,3,6,4,0,3,7,-5,0,3,7,-4,0,3,7,-3,0,3,7,-2,0,3,7,-1,0,3,7,0,0,3,7,1,0,3,7,2,0,3,7,3,0,3,7,4,0,3,8,-5,0,3,8,-4,0,3,8,-3,0,3,8,-2,0,3,8,-1,0,3,8,0,0,3,8,1,0,3,8,2,0,3,8,3,0,3,8,4,0,3,9,-5,0,3,9,-4,0,3,9,-3,0,3,9,-2,0,3,9,-1,0,3,9,0,0,3,9,1,0,3,9,2,0,3,9,3,0,3,9,4,0,3,10,-5,0,3,10,-4,0,3,10,-3,0,3,10,-2,0,3,10,-1,0,3,10,0,0,3,10,1,0,3,10,2,0,3,10,3,0,3,10,4,0,3,-8,-9,0,3,-8,-8,0,3,-8,-7,0,3,-8,-6,0,3,-8,-5,0,3,-8,-4,0,3,-8,-3,0,3,-8,-2,0,3,-8,-1,0,3,-8,0,0,3,-8,1,0,3,-8,2,0,3,-8,3,0,3,-8,4,0,3,-8,5,0,3,-8,6,0,3,-8,7,0,3,-7,-9,0,3,-7,-8,0,3,-7,-7,0,3,-7,-6,0,3,-7,-5,0,3,-7,-4,0,3,-7,-3,0,3,-7,-2,0,3,-7,-1,0,3,-7,0,0,3,-7,1,0,3,-7,2,0,3,-7,3,0,3,-7,4,0,3,-7,5,0,3,-7,6,0,3,-7,7,0,3,-6,-9,0,3,-6,-8,0,3,-6,-7,0,3,-6,-6,0,3,-6,-5,0,3,-6,-4,0,3,-6,-3,0,3,-6,-2,0,3,-6,-1,0,3,-6,0,0,3,-6,1,0,3,-6,2,0,3,-6,3,0,3,-6,4,0,3,-6,5,0,3,-6,6,0,3,-6,7,0,3,-5,-9,0,3,-5,-8,0,3,-5,-7,0,3,-5,-6,0,3,-5,-5,0,3,-5,-4,0,3,-5,-3,0,3,-5,-2,0,3,-5,-1,0,3,-5,0,0,3,-5,1,0,3,-5,2,0,3,-5,3,0,3,-5,4,0,3,-5,5,0,3,-5,6,0,3,-5,7,0,3,-4,-9,0,3,-4,-8,0,3,-4,-7,0,3,-4,-6,0,3,-4,-5,0,3,-4,-4,0,3,-4,-3,0,3,-4,-2,0,3,-4,-1,0,3,-4,0,0,3,-4,1,0,3,-4,2,0,3,-4,3,0,3,-4,4,0,3,-4,5,0,3,-4,6,0,3,-4,7,0,3,-3,-9,0,3,-3,-8,0,3,-3,-7,0,3,-3,-6,0,3,-3,5,0,3,-3,6,0,3,-3,7,0,3,-2,-9,0,3,-2,-8,0,3,-2,-7,0,3,-2,-6,0,3,-2,5,0,3,-2,6,0,3,-2,7,0,3,-1,-9,0,3,-1,-8,0,3,-1,-7,0,3,-1,-6,0,3,-1,5,0,3,-1,6,0,3,-1,7,0,3,8,-9,0,3,8,-8,0,3,8,-7,0,3,8,-6,0,3,8,5,0,3,8,6,0,3,8,7,0,3,9,-9,0,3,9,-8,0,3,9,-7,0,3,9,-6,0,3,9,5,0,3,9,6,0,3,9,7,0,3,10,-9,0,3,10,-8,0,3,10,-7,0,3,10,-6,0,3,10,5,0,3,10,6,0,3,10,7,0,3,11,-9,0,3,11,-8,0,3,11,-7,0,3,11,-6,0,3,11,-5,0,3,11,-4,0,3,11,-3,0,3,11,-2,0,3,11,-1,0,3,11,0,0,3,11,1,0,3,11,2,0,3,11,3,0,3,11,4,0,3,11,5,0,3,11,6,0,3,11,7,0,3,12,-9,0,3,12,-8,0,3,12,-7,0,3,12,-6,0,3,12,-5,0,3,12,-4,0,3,12,-3,0,3,12,-2,0,3,12,-1,0,3,12,0,0,3,12,1,0,3,12,2,0,3,12,3,0,3,12,4,0,3,12,5,0,3,12,6,0,3,12,7,0,3,13,-9,0,3,13,-8,0,3,13,-7,0,3,13,-6,0,3,13,-5,0,3,13,-4,0,3,13,-3,0,3,13,-2,0,3,13,-1,0,3,13,0,0,3,13,1,0,3,13,2,0,3,13,3,0,3,13,4,0,3,13,5,0,3,13,6,0,3,13,7,0,3,14,-9,0,3,14,-8,0,3,14,-7,0,3,14,-6,0,3,14,-5,0,3,14,-4,0,3,14,-3,0,3,14,-2,0,3,14,-1,0,3,14,0,0,3,14,1,0,3,14,2,0,3,14,3,0,3,14,4,0,3,14,5,0,3,14,6,0,3,14,7,0,3,15,-9,0,3,15,-8,0,3,15,-7,0,3,15,-6,0,3,15,-5,0,3,15,-4,0,3,15,-3,0,3,15,-2,0,3,15,-1,0,3,15,0,0,3,15,1,0,3,15,2,0,3,15,3,0,3,15,4,0,3,15,5,0,3,15,6,0,3,15,7,0,3],"Middle":[-8,-11,63,1,-8,-10,2,2,-7,-11,63,1,-7,-10,2,2,-6,-11,63,1,-6,-10,2,2,-5,-11,63,1,-5,-10,2,2,-4,-11,63,1,-4,-10,2,2,-3,-11,63,1,-3,-10,2,2,-2,-11,63,1,-2,-10,2,2,-1,-11,63,1,-1,-10,2,2,0,-7,54,1,0,-6,1,2,1,-7,63,1,1,-6,2,2,2,-7,63,1,2,-6,2,2,3,-7,63,1,3,-6,2,2,4,-7,63,1,4,-6,2,2,5,-7,63,1,5,-6,2,2,6,-7,63,1,6,-6,2,2,7,-7,27,1,7,-6,3,2,8,-11,63,1,8,-10,2,2,9,-11,63,1,9,-10,2,2,10,-11,63,1,10,-10,2,2,11,-11,63,1,11,-10,2,2,12,-11,63,1,12,-10,2,2,13,-11,63,1,13,-10,2,2,14,-11,63,1,14,-10,2,2,15,-11,63,1,15,-10,2,2],"Top":[-10,-12,511,1,-10,-11,511,1,-10,-10,511,1,-10,-9,511,1,-10,-8,511,1,-10,-7,511,1,-10,-6,511,1,-10,-5,511,1,-10,-4,511,1,-10,-3,511,1,-10,-2,511,1,-10,-1,511,1,-10,0,511,1,-10,1,511,1,-10,2,511,1,-10,3,511,1,-10,4,511,1,-10,5,511,1,-10,6,511,1,-10,7,511,1,-10,8,511,1,-10,9,511,1,-9,-12,511,1,-9,-11,255,1,-9,-10,219,1,-9,-9,219,1,-9,-8,219,1,-9,-7,219,1,-9,-6,219,1,-9,-5,219,1,-9,-4,219,1,-9,-3,219,1,-9,-2,219,1,-9,-1,219,1,-9,0,219,1,-9,1,219,1,-9,2,219,1,-9,3,219,1,-9,4,219,1,-9,5,219,1,-9,6,219,1,-9,7,219,1,-9,8,507,1,-9,9,511,1,-8,-12,511,1,-8,8,504,1,-8,9,511,1,-7,-12,511,1,-7,8,504,1,-7,9,511,1,-6,-12,511,1,-6,8,504,1,-6,9,511,1,-5,-12,511,1,-5,8,504,1,-5,9,511,1,-4,-12,511,1,-4,8,504,1,-4,9,511,1,-3,-12,511,1,-3,8,504,1,-3,9,511,1,-2,-12,511,1,-2,8,504,1,-2,9,511,1,-1,-12,511,1,-1,8,504,1,-1,9,511,1,0,-12,511,1,0,-11,447,1,0,-10,438,1,0,-9,438,1,0,-8,438,1,0,5,432,1,0,6,438,1,0,7,438,1,0,8,510,1,0,9,511,1,1,-12,511,1,1,-11,511,1,1,-10,511,1,1,-9,511,1,1,-8,511,1,1,5,504,1,1,6,511,1,1,7,511,1,1,8,511,1,1,9,511,1,2,-8,511,1,2,5,504,1,2,6,511,1,3,-8,511,1,3,5,504,1,3,6,511,1,4,-8,511,1,4,5,504,1,4,6,511,1,5,-8,511,1,5,5,504,1,5,6,511,1,6,-12,511,1,6,-11,511,1,6,-10,511,1,6,-9,511,1,6,-8,511,1,6,5,504,1,6,6,511,1,6,7,511,1,6,8,511,1,6,9,511,1,7,-12,511,1,7,-11,255,1,7,-10,219,1,7,-9,219,1,7,-8,219,1,7,5,216,1,7,6,219,1,7,7,219,1,7,8,507,1,7,9,511,1,8,-12,511,1,8,8,504,1,8,9,511,1,9,-12,511,1,9,8,504,1,9,9,511,1,10,-12,511,1,10,8,504,1,10,9,511,1,11,-12,511,1,11,8,504,1,11,9,511,1,12,-12,511,1,12,8,504,1,12,9,511,1,13,-12,511,1,13,8,504,1,13,9,511,1,14,-12,511,1,14,8,504,1,14,9,511,1,15,-12,511,1,15,8,504,1,15,9,511,1,16,-12,511,1,16,-11,447,1,16,-10,438,1,16,-9,438,1,16,-8,438,1,16,-7,438,1,16,-6,438,1,16,-5,438,1,16,-4,438,1,16,-3,438,1,16,-2,438,1,16,-1,438,1,16,0,438,1,16,1,438,1,16,2,438,1,16,3,438,1,16,4,438,1,16,5,438,1,16,6,438,1,16,7,438,1,16,8,510,1,16,9,511,1,17,-12,511,1,17,-11,511,1,17,-10,511,1,17,-9,511,1,17,-8,511,1,17,-7,511,1,17,-6,511,1,17,-5,511,1,17,-4,511,1,17,-3,511,1,17,-2,511,1,17,-1,511,1,17,0,511,1,17,1,511,1,17,2,511,1,17,3,511,1,17,4,511,1,17,5,511,1,17,6,511,1,17,7,511,1,17,8,511,1,17,9,511,1],"CustomFloor1":[-6,-8,2,2,6,-6,-7,2,2,7,-7,-7,2,1,7,-7,-8,2,1,6,-5,-8,2,2,6,-5,-7,2,2,7,-4,-8,2,2,6,-4,-7,2,2,7,-3,-8,2,2,6,-3,-7,2,2,7,-2,-8,2,3,6,-2,-7,2,3,7,-2,-6,2,3,7,-3,-6,2,2,7,-2,-5,2,3,7,-3,-5,2,2,7,-2,-4,2,4,9,-3,-4,2,2,7,-2,-3,2,2,7,-3,-3,2,2,7,-4,-3,2,2,7,-4,-4,2,2,7,-3,-2,2,2,7,-4,-2,2,2,7,-3,-1,2,2,7,-4,-1,2,2,7,-3,0,2,2,7,-4,0,2,2,7,-6,-6,2,2,7,-7,-6,2,1,7,-6,-5,2,2,7,-7,-5,2,1,7,-6,-4,2,2,7,-7,-4,2,1,7,-6,-3,2,2,7,-7,-3,2,1,7,-6,-2,2,2,7,-7,-2,2,1,7,-6,-1,2,2,7,-7,-1,2,1,7,-6,0,2,2,7,-7,0,2,1,7,-6,1,2,2,7,-7,1,2,1,7,-6,2,2,2,7,-7,2,2,1,7,-6,3,2,2,7,-7,3,2,1,7,-6,4,2,2,7,-7,4,2,1,7,-6,5,2,2,7,-7,5,2,1,7,-6,6,2,2,8,-7,6,2,1,8,-5,5,2,2,7,-5,6,2,2,8,-4,5,2,2,7,-4,6,2,2,8,-3,5,2,2,7,-3,6,2,2,8,-2,5,2,3,7,-2,6,2,3,8,-2,4,2,3,7,-3,4,2,2,7,-2,3,2,4,8,-3,3,2,2,7,-2,2,2,2,7,-3,2,2,2,7,-2,1,2,2,7,-3,1,2,2,7,-2,0,2,2,7,-2,-1,2,2,7,-2,-2,2,2,7,-4,-6,2,2,7,-4,-5,2,2,7,-5,-5,2,2,7,-5,-6,2,2,7,-5,-4,2,2,7,-5,-3,2,2,7,-5,-2,2,2,7,-5,-1,2,2,7,-5,0,2,2,7,-4,1,2,2,7,-5,1,2,2,7,-4,2,2,2,7,-5,2,2,2,7,-4,3,2,2,7,-5,3,2,2,7,-4,4,2,2,7,-5,4,2,2,7,0,-4,2,2,6,0,-3,2,2,7,-1,-3,2,2,7,-1,-4,2,2,6,1,-4,2,2,6,1,-3,2,2,7,2,-4,2,2,6,2,-3,2,2,7,3,-4,2,2,6,3,-3,2,2,7,4,-4,2,2,6,4,-3,2,2,7,5,-4,2,2,6,5,-3,2,2,7,6,-4,2,2,6,6,-3,2,2,7,7,-4,2,2,6,7,-3,2,2,7,8,-4,2,2,6,8,-3,2,2,7,-1,2,2,2,7,-1,3,2,2,8,0,2,2,2,7,0,3,2,2,8,1,2,2,2,7,1,3,2,2,8,2,2,2,2,7,2,3,2,2,8,3,2,2,2,7,3,3,2,2,8,4,2,2,2,7,4,3,2,2,8,5,2,2,2,7,5,3,2,2,8,6,2,2,2,7,6,3,2,2,8,7,2,2,2,7,7,3,2,2,8,8,2,2,2,7,8,3,2,2,8,9,2,2,2,7,9,3,2,5,8,10,2,2,2,7,10,3,2,2,7,11,2,2,2,7,11,3,2,2,7,11,1,2,2,7,10,1,2,2,7,11,0,2,2,7,10,0,2,2,7,9,1,2,2,7,9,0,2,2,7,10,-1,2,2,7,9,-1,2,2,7,10,-2,2,2,7,9,-2,2,2,7,8,-1,2,2,7,8,-2,2,2,7,7,-1,2,2,7,7,-2,2,2,7,6,-1,2,2,7,6,-2,2,2,7,5,-1,2,2,7,5,-2,2,2,7,4,-1,2,2,7,4,-2,2,2,7,3,-1,2,2,7,3,-2,2,2,7,2,-1,2,2,7,2,-2,2,2,7,1,-1,2,2,7,1,-2,2,2,7,0,-1,2,2,7,0,-2,2,2,7,-1,-1,2,2,7,-1,-2,2,2,7,-1,0,2,2,7,-1,1,2,2,7,0,1,2,2,7,1,1,2,2,7,2,1,2,2,7,3,1,2,2,7,4,1,2,2,7,5,1,2,2,7,6,1,2,2,7,7,1,2,2,7,7,0,2,2,7,6,0,2,2,7,5,0,2,2,7,4,0,2,2,7,3,0,2,2,7,2,0,2,2,7,1,0,2,2,7,0,0,2,2,7,8,0,2,2,7,8,1,2,2,7,10,4,2,2,7,9,4,2,1,7,10,5,2,2,7,9,5,2,1,7,10,6,2,2,8,9,6,2,1,8,11,5,2,2,7,11,6,2,2,8,12,5,2,2,7,12,6,2,2,8,13,5,2,2,7,13,6,2,2,8,14,5,2,3,7,14,6,2,3,8,14,4,2,3,7,13,4,2,2,7,14,3,2,3,7,13,3,2,2,7,14,2,2,3,7,13,2,2,2,7,14,1,2,3,7,13,1,2,2,7,14,0,2,3,7,13,0,2,2,7,14,-1,2,3,7,14,-2,2,3,7,14,-3,2,3,7,14,-4,2,3,7,14,-5,2,3,7,14,-6,2,3,7,14,-7,2,3,7,13,-1,2,2,7,13,-2,2,2,7,13,-3,2,2,7,13,-4,2,2,7,13,-5,2,2,7,13,-6,2,2,7,13,-7,2,2,7,12,4,2,2,7,12,3,2,2,7,12,2,2,2,7,12,1,2,2,7,12,0,2,2,7,12,-1,2,2,7,12,-2,2,2,7,12,-3,2,2,7,12,-4,2,2,7,12,-5,2,2,7,12,-6,2,2,7,12,-7,2,2,7,11,4,2,2,7,11,-1,2,2,7,11,-2,2,2,7,11,-3,2,2,7,11,-4,2,2,7,11,-5,2,2,7,11,-6,2,2,7,11,-7,2,2,7,10,-3,2,2,7,10,-4,2,2,7,10,-5,2,2,7,10,-6,2,2,7,10,-7,2,2,7,9,-3,2,2,7,9,-4,2,5,9,9,-5,2,1,7,9,-6,2,1,7,9,-7,2,1,7,14,-8,2,3,6,13,-8,2,2,6,12,-8,2,2,6,11,-8,2,2,6,10,-8,2,2,6,9,-8,2,1,6],"CustomFloor2":[-5,-1,1,12,4,-4,-1,1,13,4,-2,1,1,14,6,11,3,1,13,6,12,-5,1,13,5,-6,-7,1,8,11,8,0,1,6,14,8,1,1,6,15,9,1,1,7,15,10,1,1,8,15,10,0,1,8,14,9,0,1,7,14,2,-3,1,6,14,2,-2,1,6,15,3,-2,1,7,15,4,-2,1,8,15,4,-3,1,8,14,3,-3,1,7,14,10,-3,1,7,12,10,-2,1,7,13,11,-2,1,8,13,11,-3,1,8,12],"CustomFloor3":[],"CustomMiddle1":[],"CustomMiddle2":[],"CustomTop":[]}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle4/Preinstall.json b/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle4/Preinstall.json
new file mode 100644
index 0000000..a9f951a
--- /dev/null
+++ b/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle4/Preinstall.json
@@ -0,0 +1 @@
+[{"Name":"Preinstall1","Weight":100,"Remark":"","AutoFill":true,"WaveList":[[]]}]
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle4/Preview.png b/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle4/Preview.png
new file mode 100644
index 0000000..782fcd0
--- /dev/null
+++ b/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle4/Preview.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle4/Preview.png.import b/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle4/Preview.png.import
new file mode 100644
index 0000000..dba2a30
--- /dev/null
+++ b/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle4/Preview.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://8mo2r2lt12sx"
+path="res://.godot/imported/Preview.png-b0ff3b32424b16028ed7b4659c78de50.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/map/tileMaps/Test1/battle/Battle4/Preview.png"
+dest_files=["res://.godot/imported/Preview.png-b0ff3b32424b16028ed7b4659c78de50.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/map/tileMaps/Test1/battle/Battle4/RoomInfo.json b/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle4/RoomInfo.json
new file mode 100644
index 0000000..c9960e1
--- /dev/null
+++ b/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle4/RoomInfo.json
@@ -0,0 +1 @@
+{"Position":{"X":-13,"Y":-26},"Size":{"X":36,"Y":33},"DoorAreaInfos":[{"Direction":1,"Start":0,"End":448},{"Direction":2,"Start":0,"End":512},{"Direction":0,"Start":0,"End":448},{"Direction":3,"Start":0,"End":512}],"GroupName":"Test1","RoomType":1,"RoomName":"Battle4","Weight":100,"Remark":""}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle4/TileInfo.json b/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle4/TileInfo.json
new file mode 100644
index 0000000..3b4762a
--- /dev/null
+++ b/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle4/TileInfo.json
@@ -0,0 +1 @@
+{"NavigationVertices":[{"X":278,"Y":-218},{"X":278,"Y":-302},{"X":330,"Y":-362},{"X":330,"Y":82},{"X":-170,"Y":-362},{"X":186,"Y":-302},{"X":278,"Y":6},{"X":-170,"Y":82},{"X":186,"Y":6},{"X":-10,"Y":6},{"X":186,"Y":-78},{"X":-102,"Y":6},{"X":-102,"Y":-78},{"X":-10,"Y":-78},{"X":186,"Y":-218},{"X":-10,"Y":-218},{"X":-10,"Y":-302},{"X":-102,"Y":-302},{"X":-102,"Y":-218},{"X":278,"Y":-78}],"NavigationPolygon":[[0,1,2,3],[4,2,1,5],[6,3,7,8],[8,7,9,10],[11,9,7],[11,7,4,12],[10,9,13],[5,14,15,16],[4,5,16],[4,16,17],[4,17,18],[12,4,18],[13,12,18,15],[10,13,15,14],[19,10,14,0],[19,0,3],[19,3,6]],"Floor":[-11,-23,0,3,-11,-22,0,3,-11,-21,0,3,-11,-20,0,3,-11,-19,0,3,-11,-18,0,3,-11,-17,0,3,-11,-16,0,3,-11,-15,0,3,-11,-14,0,3,-11,-13,0,3,-11,-12,0,3,-11,-11,0,3,-11,-10,0,3,-11,-9,0,3,-11,-8,0,3,-11,-7,0,3,-11,-6,0,3,-11,-5,0,3,-11,-4,0,3,-11,-3,0,3,-11,-2,0,3,-11,-1,0,3,-11,0,0,3,-11,1,0,3,-11,2,0,3,-11,3,0,3,-11,4,0,3,-10,-23,0,3,-10,-22,0,3,-10,-21,0,3,-10,-20,0,3,-10,-19,0,3,-10,-18,0,3,-10,-17,0,3,-10,-16,0,3,-10,-15,0,3,-10,-14,0,3,-10,-13,0,3,-10,-12,0,3,-10,-11,0,3,-10,-10,0,3,-10,-9,0,3,-10,-8,0,3,-10,-7,0,3,-10,-6,0,3,-10,-5,0,3,-10,-4,0,3,-10,-3,0,3,-10,-2,0,3,-10,-1,0,3,-10,0,0,3,-10,1,0,3,-10,2,0,3,-10,3,0,3,-10,4,0,3,-9,-23,0,3,-9,-22,0,3,-9,-21,0,3,-9,-20,0,3,-9,-19,0,3,-9,-18,0,3,-9,-17,0,3,-9,-16,0,3,-9,-15,0,3,-9,-14,0,3,-9,-13,0,3,-9,-12,0,3,-9,-11,0,3,-9,-10,0,3,-9,-9,0,3,-9,-8,0,3,-9,-7,0,3,-9,-6,0,3,-9,-5,0,3,-9,-4,0,3,-9,-3,0,3,-9,-2,0,3,-9,-1,0,3,-9,0,0,3,-9,1,0,3,-9,2,0,3,-9,3,0,3,-9,4,0,3,-8,-23,0,3,-8,-22,0,3,-8,-21,0,3,-8,-20,0,3,-8,-19,0,3,-8,-18,0,3,-8,-17,0,3,-8,-16,0,3,-8,-15,0,3,-8,-14,0,3,-8,-13,0,3,-8,-12,0,3,-8,-11,0,3,-8,-10,0,3,-8,-9,0,3,-8,-8,0,3,-8,-7,0,3,-8,-6,0,3,-8,-5,0,3,-8,-4,0,3,-8,-3,0,3,-8,-2,0,3,-8,-1,0,3,-8,0,0,3,-8,1,0,3,-8,2,0,3,-8,3,0,3,-8,4,0,3,-7,-23,0,3,-7,-22,0,3,-7,-21,0,3,-7,-20,0,3,-7,-19,0,3,-7,-18,0,3,-7,-17,0,3,-7,-16,0,3,-7,-15,0,3,-7,-14,0,3,-7,-13,0,3,-7,-12,0,3,-7,-11,0,3,-7,-10,0,3,-7,-9,0,3,-7,-8,0,3,-7,-7,0,3,-7,-6,0,3,-7,-5,0,3,-7,-4,0,3,-7,-3,0,3,-7,-2,0,3,-7,-1,0,3,-7,0,0,3,-7,1,0,3,-7,2,0,3,-7,3,0,3,-7,4,0,3,-6,-23,0,3,-6,-22,0,3,-6,-21,0,3,-6,-20,0,3,-6,-14,0,3,-6,-13,0,3,-6,-12,0,3,-6,-11,0,3,-6,-10,0,3,-6,-9,0,3,-6,-8,0,3,-6,-7,0,3,-6,-6,0,3,-6,0,0,3,-6,1,0,3,-6,2,0,3,-6,3,0,3,-6,4,0,3,-5,-23,0,3,-5,-22,0,3,-5,-21,0,3,-5,-20,0,3,-5,-14,0,3,-5,-13,0,3,-5,-12,0,3,-5,-11,0,3,-5,-10,0,3,-5,-9,0,3,-5,-8,0,3,-5,-7,0,3,-5,-6,0,3,-5,0,0,3,-5,1,0,3,-5,2,0,3,-5,3,0,3,-5,4,0,3,-4,-23,0,3,-4,-22,0,3,-4,-21,0,3,-4,-20,0,3,-4,-14,0,3,-4,-13,0,3,-4,-12,0,3,-4,-11,0,3,-4,-10,0,3,-4,-9,0,3,-4,-8,0,3,-4,-7,0,3,-4,-6,0,3,-4,0,0,3,-4,1,0,3,-4,2,0,3,-4,3,0,3,-4,4,0,3,-3,-23,0,3,-3,-22,0,3,-3,-21,0,3,-3,-20,0,3,-3,-14,0,3,-3,-13,0,3,-3,-12,0,3,-3,-11,0,3,-3,-10,0,3,-3,-9,0,3,-3,-8,0,3,-3,-7,0,3,-3,-6,0,3,-3,0,0,3,-3,1,0,3,-3,2,0,3,-3,3,0,3,-3,4,0,3,-2,-23,0,3,-2,-22,0,3,-2,-21,0,3,-2,-20,0,3,-2,-14,0,3,-2,-13,0,3,-2,-12,0,3,-2,-11,0,3,-2,-10,0,3,-2,-9,0,3,-2,-8,0,3,-2,-7,0,3,-2,-6,0,3,-2,0,0,3,-2,1,0,3,-2,2,0,3,-2,3,0,3,-2,4,0,3,-1,-23,0,3,-1,-22,0,3,-1,-21,0,3,-1,-20,0,3,-1,-19,0,3,-1,-18,0,3,-1,-17,0,3,-1,-16,0,3,-1,-15,0,3,-1,-14,0,3,-1,-13,0,3,-1,-12,0,3,-1,-11,0,3,-1,-10,0,3,-1,-9,0,3,-1,-8,0,3,-1,-7,0,3,-1,-6,0,3,-1,-5,0,3,-1,-4,0,3,-1,-3,0,3,-1,-2,0,3,-1,-1,0,3,-1,0,0,3,-1,1,0,3,-1,2,0,3,-1,3,0,3,-1,4,0,3,0,-23,0,3,0,-22,0,3,0,-21,0,3,0,-20,0,3,0,-19,0,3,0,-18,0,3,0,-17,0,3,0,-16,0,3,0,-15,0,3,0,-14,0,3,0,-13,0,3,0,-12,0,3,0,-11,0,3,0,-10,0,3,0,-9,0,3,0,-8,0,3,0,-7,0,3,0,-6,0,3,0,-5,0,3,0,-4,0,3,0,-3,0,3,0,-2,0,3,0,-1,0,3,0,0,0,3,0,1,0,3,0,2,0,3,0,3,0,3,0,4,0,3,1,-23,0,3,1,-22,0,3,1,-21,0,3,1,-20,0,3,1,-19,0,3,1,-18,0,3,1,-17,0,3,1,-16,0,3,1,-15,0,3,1,-14,0,3,1,-13,0,3,1,-12,0,3,1,-11,0,3,1,-10,0,3,1,-9,0,3,1,-8,0,3,1,-7,0,3,1,-6,0,3,1,-5,0,3,1,-4,0,3,1,-3,0,3,1,-2,0,3,1,-1,0,3,1,0,0,3,1,1,0,3,1,2,0,3,1,3,0,3,1,4,0,3,2,-23,0,3,2,-22,0,3,2,-21,0,3,2,-20,0,3,2,-19,0,3,2,-18,0,3,2,-17,0,3,2,-16,0,3,2,-15,0,3,2,-14,0,3,2,-13,0,3,2,-12,0,3,2,-11,0,3,2,-10,0,3,2,-9,0,3,2,-8,0,3,2,-7,0,3,2,-6,0,3,2,-5,0,3,2,-4,0,3,2,-3,0,3,2,-2,0,3,2,-1,0,3,2,0,0,3,2,1,0,3,2,2,0,3,2,3,0,3,2,4,0,3,3,-23,0,3,3,-22,0,3,3,-21,0,3,3,-20,0,3,3,-19,0,3,3,-18,0,3,3,-17,0,3,3,-16,0,3,3,-15,0,3,3,-14,0,3,3,-13,0,3,3,-12,0,3,3,-11,0,3,3,-10,0,3,3,-9,0,3,3,-8,0,3,3,-7,0,3,3,-6,0,3,3,-5,0,3,3,-4,0,3,3,-3,0,3,3,-2,0,3,3,-1,0,3,3,0,0,3,3,1,0,3,3,2,0,3,3,3,0,3,3,4,0,3,4,-23,0,3,4,-22,0,3,4,-21,0,3,4,-20,0,3,4,-19,0,3,4,-18,0,3,4,-17,0,3,4,-16,0,3,4,-15,0,3,4,-14,0,3,4,-13,0,3,4,-12,0,3,4,-11,0,3,4,-10,0,3,4,-9,0,3,4,-8,0,3,4,-7,0,3,4,-6,0,3,4,-5,0,3,4,-4,0,3,4,-3,0,3,4,-2,0,3,4,-1,0,3,4,0,0,3,4,1,0,3,4,2,0,3,4,3,0,3,4,4,0,3,5,-23,0,3,5,-22,0,3,5,-21,0,3,5,-20,0,3,5,-19,0,3,5,-18,0,3,5,-17,0,3,5,-16,0,3,5,-15,0,3,5,-14,0,3,5,-13,0,3,5,-12,0,3,5,-11,0,3,5,-10,0,3,5,-9,0,3,5,-8,0,3,5,-7,0,3,5,-6,0,3,5,-5,0,3,5,-4,0,3,5,-3,0,3,5,-2,0,3,5,-1,0,3,5,0,0,3,5,1,0,3,5,2,0,3,5,3,0,3,5,4,0,3,6,-23,0,3,6,-22,0,3,6,-21,0,3,6,-20,0,3,6,-19,0,3,6,-18,0,3,6,-17,0,3,6,-16,0,3,6,-15,0,3,6,-14,0,3,6,-13,0,3,6,-12,0,3,6,-11,0,3,6,-10,0,3,6,-9,0,3,6,-8,0,3,6,-7,0,3,6,-6,0,3,6,-5,0,3,6,-4,0,3,6,-3,0,3,6,-2,0,3,6,-1,0,3,6,0,0,3,6,1,0,3,6,2,0,3,6,3,0,3,6,4,0,3,7,-23,0,3,7,-22,0,3,7,-21,0,3,7,-20,0,3,7,-19,0,3,7,-18,0,3,7,-17,0,3,7,-16,0,3,7,-15,0,3,7,-14,0,3,7,-13,0,3,7,-12,0,3,7,-11,0,3,7,-10,0,3,7,-9,0,3,7,-8,0,3,7,-7,0,3,7,-6,0,3,7,-5,0,3,7,-4,0,3,7,-3,0,3,7,-2,0,3,7,-1,0,3,7,0,0,3,7,1,0,3,7,2,0,3,7,3,0,3,7,4,0,3,8,-23,0,3,8,-22,0,3,8,-21,0,3,8,-20,0,3,8,-19,0,3,8,-18,0,3,8,-17,0,3,8,-16,0,3,8,-15,0,3,8,-14,0,3,8,-13,0,3,8,-12,0,3,8,-11,0,3,8,-10,0,3,8,-9,0,3,8,-8,0,3,8,-7,0,3,8,-6,0,3,8,-5,0,3,8,-4,0,3,8,-3,0,3,8,-2,0,3,8,-1,0,3,8,0,0,3,8,1,0,3,8,2,0,3,8,3,0,3,8,4,0,3,9,-23,0,3,9,-22,0,3,9,-21,0,3,9,-20,0,3,9,-19,0,3,9,-18,0,3,9,-17,0,3,9,-16,0,3,9,-15,0,3,9,-14,0,3,9,-13,0,3,9,-12,0,3,9,-11,0,3,9,-10,0,3,9,-9,0,3,9,-8,0,3,9,-7,0,3,9,-6,0,3,9,-5,0,3,9,-4,0,3,9,-3,0,3,9,-2,0,3,9,-1,0,3,9,0,0,3,9,1,0,3,9,2,0,3,9,3,0,3,9,4,0,3,10,-23,0,3,10,-22,0,3,10,-21,0,3,10,-20,0,3,10,-19,0,3,10,-18,0,3,10,-17,0,3,10,-16,0,3,10,-15,0,3,10,-14,0,3,10,-13,0,3,10,-12,0,3,10,-11,0,3,10,-10,0,3,10,-9,0,3,10,-8,0,3,10,-7,0,3,10,-6,0,3,10,-5,0,3,10,-4,0,3,10,-3,0,3,10,-2,0,3,10,-1,0,3,10,0,0,3,10,1,0,3,10,2,0,3,10,3,0,3,10,4,0,3,11,-23,0,3,11,-22,0,3,11,-21,0,3,11,-20,0,3,11,-19,0,3,11,-18,0,3,11,-17,0,3,11,-16,0,3,11,-15,0,3,11,-14,0,3,11,-13,0,3,11,-12,0,3,11,-11,0,3,11,-10,0,3,11,-9,0,3,11,-8,0,3,11,-7,0,3,11,-6,0,3,11,-5,0,3,11,-4,0,3,11,-3,0,3,11,-2,0,3,11,-1,0,3,11,0,0,3,11,1,0,3,11,2,0,3,11,3,0,3,11,4,0,3,12,-23,0,3,12,-22,0,3,12,-21,0,3,12,-20,0,3,12,-14,0,3,12,-13,0,3,12,-12,0,3,12,-11,0,3,12,-10,0,3,12,-9,0,3,12,-8,0,3,12,-7,0,3,12,-6,0,3,12,0,0,3,12,1,0,3,12,2,0,3,12,3,0,3,12,4,0,3,13,-23,0,3,13,-22,0,3,13,-21,0,3,13,-20,0,3,13,-14,0,3,13,-13,0,3,13,-12,0,3,13,-11,0,3,13,-10,0,3,13,-9,0,3,13,-8,0,3,13,-7,0,3,13,-6,0,3,13,0,0,3,13,1,0,3,13,2,0,3,13,3,0,3,13,4,0,3,14,-23,0,3,14,-22,0,3,14,-21,0,3,14,-20,0,3,14,-14,0,3,14,-13,0,3,14,-12,0,3,14,-11,0,3,14,-10,0,3,14,-9,0,3,14,-8,0,3,14,-7,0,3,14,-6,0,3,14,0,0,3,14,1,0,3,14,2,0,3,14,3,0,3,14,4,0,3,15,-23,0,3,15,-22,0,3,15,-21,0,3,15,-20,0,3,15,-14,0,3,15,-13,0,3,15,-12,0,3,15,-11,0,3,15,-10,0,3,15,-9,0,3,15,-8,0,3,15,-7,0,3,15,-6,0,3,15,0,0,3,15,1,0,3,15,2,0,3,15,3,0,3,15,4,0,3,16,-23,0,3,16,-22,0,3,16,-21,0,3,16,-20,0,3,16,-14,0,3,16,-13,0,3,16,-12,0,3,16,-11,0,3,16,-10,0,3,16,-9,0,3,16,-8,0,3,16,-7,0,3,16,-6,0,3,16,0,0,3,16,1,0,3,16,2,0,3,16,3,0,3,16,4,0,3,17,-23,0,3,17,-22,0,3,17,-21,0,3,17,-20,0,3,17,-19,0,3,17,-18,0,3,17,-17,0,3,17,-16,0,3,17,-15,0,3,17,-14,0,3,17,-13,0,3,17,-12,0,3,17,-11,0,3,17,-10,0,3,17,-9,0,3,17,-8,0,3,17,-7,0,3,17,-6,0,3,17,-5,0,3,17,-4,0,3,17,-3,0,3,17,-2,0,3,17,-1,0,3,17,0,0,3,17,1,0,3,17,2,0,3,17,3,0,3,17,4,0,3,18,-23,0,3,18,-22,0,3,18,-21,0,3,18,-20,0,3,18,-19,0,3,18,-18,0,3,18,-17,0,3,18,-16,0,3,18,-15,0,3,18,-14,0,3,18,-13,0,3,18,-12,0,3,18,-11,0,3,18,-10,0,3,18,-9,0,3,18,-8,0,3,18,-7,0,3,18,-6,0,3,18,-5,0,3,18,-4,0,3,18,-3,0,3,18,-2,0,3,18,-1,0,3,18,0,0,3,18,1,0,3,18,2,0,3,18,3,0,3,18,4,0,3,19,-23,0,3,19,-22,0,3,19,-21,0,3,19,-20,0,3,19,-19,0,3,19,-18,0,3,19,-17,0,3,19,-16,0,3,19,-15,0,3,19,-14,0,3,19,-13,0,3,19,-12,0,3,19,-11,0,3,19,-10,0,3,19,-9,0,3,19,-8,0,3,19,-7,0,3,19,-6,0,3,19,-5,0,3,19,-4,0,3,19,-3,0,3,19,-2,0,3,19,-1,0,3,19,0,0,3,19,1,0,3,19,2,0,3,19,3,0,3,19,4,0,3,20,-23,0,3,20,-22,0,3,20,-21,0,3,20,-20,0,3,20,-19,0,3,20,-18,0,3,20,-17,0,3,20,-16,0,3,20,-15,0,3,20,-14,0,3,20,-13,0,3,20,-12,0,3,20,-11,0,3,20,-10,0,3,20,-9,0,3,20,-8,0,3,20,-7,0,3,20,-6,0,3,20,-5,0,3,20,-4,0,3,20,-3,0,3,20,-2,0,3,20,-1,0,3,20,0,0,3,20,1,0,3,20,2,0,3,20,3,0,3,20,4,0,3],"Middle":[-11,-25,63,1,-11,-24,2,2,-10,-25,63,1,-10,-24,2,2,-9,-25,63,1,-9,-24,2,2,-8,-25,63,1,-8,-24,2,2,-7,-25,63,1,-7,-24,2,2,-6,-25,63,1,-6,-24,2,2,-6,-16,54,1,-6,-15,1,2,-6,-2,54,1,-6,-1,1,2,-5,-25,63,1,-5,-24,2,2,-5,-16,63,1,-5,-15,2,2,-5,-2,63,1,-5,-1,2,2,-4,-25,63,1,-4,-24,2,2,-4,-16,63,1,-4,-15,2,2,-4,-2,63,1,-4,-1,2,2,-3,-25,63,1,-3,-24,2,2,-3,-16,63,1,-3,-15,2,2,-3,-2,63,1,-3,-1,2,2,-2,-25,63,1,-2,-24,2,2,-2,-16,27,1,-2,-15,3,2,-2,-2,27,1,-2,-1,3,2,-1,-25,63,1,-1,-24,2,2,0,-25,63,1,0,-24,2,2,1,-25,63,1,1,-24,2,2,2,-25,63,1,2,-24,2,2,3,-25,63,1,3,-24,2,2,4,-25,63,1,4,-24,2,2,5,-25,63,1,5,-24,2,2,6,-25,63,1,6,-24,2,2,7,-25,63,1,7,-24,2,2,8,-25,63,1,8,-24,2,2,9,-25,63,1,9,-24,2,2,10,-25,63,1,10,-24,2,2,11,-25,63,1,11,-24,2,2,12,-25,63,1,12,-24,2,2,12,-16,54,1,12,-15,1,2,12,-2,54,1,12,-1,1,2,13,-25,63,1,13,-24,2,2,13,-16,63,1,13,-15,2,2,13,-2,63,1,13,-1,2,2,14,-25,63,1,14,-24,2,2,14,-16,63,1,14,-15,2,2,14,-2,63,1,14,-1,2,2,15,-25,63,1,15,-24,2,2,15,-16,63,1,15,-15,2,2,15,-2,63,1,15,-1,2,2,16,-25,63,1,16,-24,2,2,16,-16,27,1,16,-15,3,2,16,-2,27,1,16,-1,3,2,17,-25,63,1,17,-24,2,2,18,-25,63,1,18,-24,2,2,19,-25,63,1,19,-24,2,2,20,-25,63,1,20,-24,2,2],"Top":[-13,-26,511,1,-13,-25,511,1,-13,-24,511,1,-13,-23,511,1,-13,-22,511,1,-13,-21,511,1,-13,-20,511,1,-13,-19,511,1,-13,-18,511,1,-13,-17,511,1,-13,-16,511,1,-13,-15,511,1,-13,-14,511,1,-13,-13,511,1,-13,-12,511,1,-13,-11,511,1,-13,-10,511,1,-13,-9,511,1,-13,-8,511,1,-13,-7,511,1,-13,-6,511,1,-13,-5,511,1,-13,-4,511,1,-13,-3,511,1,-13,-2,511,1,-13,-1,511,1,-13,0,511,1,-13,1,511,1,-13,2,511,1,-13,3,511,1,-13,4,511,1,-13,5,511,1,-13,6,511,1,-12,-26,511,1,-12,-25,255,1,-12,-24,219,1,-12,-23,219,1,-12,-22,219,1,-12,-21,219,1,-12,-20,219,1,-12,-19,219,1,-12,-18,219,1,-12,-17,219,1,-12,-16,219,1,-12,-15,219,1,-12,-14,219,1,-12,-13,219,1,-12,-12,219,1,-12,-11,219,1,-12,-10,219,1,-12,-9,219,1,-12,-8,219,1,-12,-7,219,1,-12,-6,219,1,-12,-5,219,1,-12,-4,219,1,-12,-3,219,1,-12,-2,219,1,-12,-1,219,1,-12,0,219,1,-12,1,219,1,-12,2,219,1,-12,3,219,1,-12,4,219,1,-12,5,507,1,-12,6,511,1,-11,-26,511,1,-11,5,504,1,-11,6,511,1,-10,-26,511,1,-10,5,504,1,-10,6,511,1,-9,-26,511,1,-9,5,504,1,-9,6,511,1,-8,-26,511,1,-8,5,504,1,-8,6,511,1,-7,-26,511,1,-7,5,504,1,-7,6,511,1,-6,-26,511,1,-6,-19,432,1,-6,-18,438,1,-6,-17,438,1,-6,-5,432,1,-6,-4,438,1,-6,-3,438,1,-6,5,504,1,-6,6,511,1,-5,-26,511,1,-5,-19,504,1,-5,-18,511,1,-5,-17,511,1,-5,-5,504,1,-5,-4,511,1,-5,-3,511,1,-5,5,504,1,-5,6,511,1,-4,-26,511,1,-4,-19,504,1,-4,-18,511,1,-4,-17,511,1,-4,-5,504,1,-4,-4,511,1,-4,-3,511,1,-4,5,504,1,-4,6,511,1,-3,-26,511,1,-3,-19,504,1,-3,-18,511,1,-3,-17,511,1,-3,-5,504,1,-3,-4,511,1,-3,-3,511,1,-3,5,504,1,-3,6,511,1,-2,-26,511,1,-2,-19,216,1,-2,-18,219,1,-2,-17,219,1,-2,-5,216,1,-2,-4,219,1,-2,-3,219,1,-2,5,504,1,-2,6,511,1,-1,-26,511,1,-1,5,504,1,-1,6,511,1,0,-26,511,1,0,5,504,1,0,6,511,1,1,-26,511,1,1,5,504,1,1,6,511,1,2,-26,511,1,2,5,504,1,2,6,511,1,3,-26,511,1,3,5,504,1,3,6,511,1,4,-26,511,1,4,5,504,1,4,6,511,1,5,-26,511,1,5,5,504,1,5,6,511,1,6,-26,511,1,6,5,504,1,6,6,511,1,7,-26,511,1,7,5,504,1,7,6,511,1,8,-26,511,1,8,5,504,1,8,6,511,1,9,-26,511,1,9,5,504,1,9,6,511,1,10,-26,511,1,10,5,504,1,10,6,511,1,11,-26,511,1,11,5,504,1,11,6,511,1,12,-26,511,1,12,-19,432,1,12,-18,438,1,12,-17,438,1,12,-5,432,1,12,-4,438,1,12,-3,438,1,12,5,504,1,12,6,511,1,13,-26,511,1,13,-19,504,1,13,-18,511,1,13,-17,511,1,13,-5,504,1,13,-4,511,1,13,-3,511,1,13,5,504,1,13,6,511,1,14,-26,511,1,14,-19,504,1,14,-18,511,1,14,-17,511,1,14,-5,504,1,14,-4,511,1,14,-3,511,1,14,5,504,1,14,6,511,1,15,-26,511,1,15,-19,504,1,15,-18,511,1,15,-17,511,1,15,-5,504,1,15,-4,511,1,15,-3,511,1,15,5,504,1,15,6,511,1,16,-26,511,1,16,-19,216,1,16,-18,219,1,16,-17,219,1,16,-5,216,1,16,-4,219,1,16,-3,219,1,16,5,504,1,16,6,511,1,17,-26,511,1,17,5,504,1,17,6,511,1,18,-26,511,1,18,5,504,1,18,6,511,1,19,-26,511,1,19,5,504,1,19,6,511,1,20,-26,511,1,20,5,504,1,20,6,511,1,21,-26,511,1,21,-25,447,1,21,-24,438,1,21,-23,438,1,21,-22,438,1,21,-21,438,1,21,-20,438,1,21,-19,438,1,21,-18,438,1,21,-17,438,1,21,-16,438,1,21,-15,438,1,21,-14,438,1,21,-13,438,1,21,-12,438,1,21,-11,438,1,21,-10,438,1,21,-9,438,1,21,-8,438,1,21,-7,438,1,21,-6,438,1,21,-5,438,1,21,-4,438,1,21,-3,438,1,21,-2,438,1,21,-1,438,1,21,0,438,1,21,1,438,1,21,2,438,1,21,3,438,1,21,4,438,1,21,5,510,1,21,6,511,1,22,-26,511,1,22,-25,511,1,22,-24,511,1,22,-23,511,1,22,-22,511,1,22,-21,511,1,22,-20,511,1,22,-19,511,1,22,-18,511,1,22,-17,511,1,22,-16,511,1,22,-15,511,1,22,-14,511,1,22,-13,511,1,22,-12,511,1,22,-11,511,1,22,-10,511,1,22,-9,511,1,22,-8,511,1,22,-7,511,1,22,-6,511,1,22,-5,511,1,22,-4,511,1,22,-3,511,1,22,-2,511,1,22,-1,511,1,22,0,511,1,22,1,511,1,22,2,511,1,22,3,511,1,22,4,511,1,22,5,511,1,22,6,511,1],"CustomFloor1":[],"CustomFloor2":[],"CustomFloor3":[],"CustomMiddle1":[],"CustomMiddle2":[],"CustomTop":[]}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle5/Preinstall.json b/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle5/Preinstall.json
new file mode 100644
index 0000000..a9f951a
--- /dev/null
+++ b/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle5/Preinstall.json
@@ -0,0 +1 @@
+[{"Name":"Preinstall1","Weight":100,"Remark":"","AutoFill":true,"WaveList":[[]]}]
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle5/Preview.png b/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle5/Preview.png
new file mode 100644
index 0000000..8c2568d
--- /dev/null
+++ b/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle5/Preview.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle5/Preview.png.import b/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle5/Preview.png.import
new file mode 100644
index 0000000..338aee7
--- /dev/null
+++ b/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle5/Preview.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://brikrxahc8h8p"
+path="res://.godot/imported/Preview.png-1cb30b87cf71ad1cb9553eeb340968d5.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/map/tileMaps/Test1/battle/Battle5/Preview.png"
+dest_files=["res://.godot/imported/Preview.png-1cb30b87cf71ad1cb9553eeb340968d5.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/map/tileMaps/Test1/battle/Battle5/RoomInfo.json b/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle5/RoomInfo.json
new file mode 100644
index 0000000..b592355
--- /dev/null
+++ b/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle5/RoomInfo.json
@@ -0,0 +1 @@
+{"Position":{"X":-10,"Y":-18},"Size":{"X":21,"Y":24},"DoorAreaInfos":[{"Direction":2,"Start":0,"End":64},{"Direction":2,"Start":128,"End":272},{"Direction":0,"Start":192,"End":288},{"Direction":1,"Start":0,"End":288},{"Direction":3,"Start":0,"End":144}],"GroupName":"Test1","RoomType":1,"RoomName":"Battle5","Weight":100,"Remark":""}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle5/TileInfo.json b/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle5/TileInfo.json
new file mode 100644
index 0000000..d10141a
--- /dev/null
+++ b/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle5/TileInfo.json
@@ -0,0 +1 @@
+{"NavigationVertices":[{"X":10,"Y":-186},{"X":42,"Y":-186},{"X":42,"Y":-154},{"X":-26,"Y":-78},{"X":-70,"Y":-78},{"X":74,"Y":-154},{"X":74,"Y":-106},{"X":6,"Y":-14},{"X":-26,"Y":-14},{"X":106,"Y":-106},{"X":106,"Y":-74},{"X":122,"Y":-74},{"X":122,"Y":-42},{"X":6,"Y":66},{"X":138,"Y":-42},{"X":138,"Y":66},{"X":-70,"Y":66},{"X":-122,"Y":66},{"X":-122,"Y":-234},{"X":10,"Y":-234}],"NavigationPolygon":[[0,1,2,3,4],[3,2,5,6,7,8],[6,9,10,7],[7,10,11,12,13],[12,14,15,13],[4,16,17,18],[4,18,19,0]],"Floor":[-8,-15,0,3,-8,-14,0,3,-8,-13,0,3,-8,-12,0,3,-8,-11,0,3,-8,-10,0,3,-7,-15,0,3,-7,-14,0,3,-7,-13,0,3,-7,-12,0,3,-7,-11,0,3,-7,-10,0,3,-6,-15,0,3,-6,-14,0,3,-6,-13,0,3,-6,-12,0,3,-6,-11,0,3,-6,-10,0,3,-5,-15,0,3,-5,-14,0,3,-5,-13,0,3,-5,-12,0,3,-5,-11,0,3,-5,-10,0,3,-4,-15,0,3,-4,-14,0,3,-4,-13,0,3,-4,-12,0,3,-4,-11,0,3,-4,-10,0,3,-4,-9,0,3,-4,-8,0,3,-4,-7,0,3,-4,-6,0,3,-3,-15,0,3,-3,-14,0,3,-3,-13,0,3,-3,-12,0,3,-3,-11,0,3,-3,-10,0,3,-3,-9,0,3,-3,-8,0,3,-3,-7,0,3,-3,-6,0,3,-2,-15,0,3,-2,-14,0,3,-2,-13,0,3,-2,-12,0,3,-2,-11,0,3,-2,-10,0,3,-2,-9,0,3,-2,-8,0,3,-2,-7,0,3,-2,-6,0,3,-2,-5,0,3,-2,-4,0,3,-2,-3,0,3,-2,-2,0,3,-1,-15,0,3,-1,-14,0,3,-1,-13,0,3,-1,-12,0,3,-1,-11,0,3,-1,-10,0,3,-1,-9,0,3,-1,-8,0,3,-1,-7,0,3,-1,-6,0,3,-1,-5,0,3,-1,-4,0,3,-1,-3,0,3,-1,-2,0,3,0,-15,0,3,0,-14,0,3,0,-13,0,3,0,-12,0,3,0,-11,0,3,0,-10,0,3,0,-9,0,3,0,-8,0,3,0,-7,0,3,0,-6,0,3,0,-5,0,3,0,-4,0,3,0,-3,0,3,0,-2,0,3,1,-12,0,3,1,-11,0,3,1,-10,0,3,1,-9,0,3,1,-8,0,3,1,-7,0,3,1,-6,0,3,1,-5,0,3,1,-4,0,3,1,-3,0,3,1,-2,0,3,2,-12,0,3,2,-11,0,3,2,-10,0,3,2,-9,0,3,2,-8,0,3,2,-7,0,3,2,-6,0,3,2,-5,0,3,2,-4,0,3,2,-3,0,3,2,-2,0,3,3,-10,0,3,3,-9,0,3,3,-8,0,3,3,-7,0,3,3,-6,0,3,3,-5,0,3,3,-4,0,3,3,-3,0,3,3,-2,0,3,4,-10,0,3,4,-9,0,3,4,-8,0,3,4,-7,0,3,4,-6,0,3,4,-5,0,3,4,-4,0,3,4,-3,0,3,4,-2,0,3,5,-7,0,3,5,-6,0,3,5,-5,0,3,5,-4,0,3,5,-3,0,3,5,-2,0,3,6,-7,0,3,6,-6,0,3,6,-5,0,3,6,-4,0,3,6,-3,0,3,6,-2,0,3,7,-5,0,3,7,-4,0,3,7,-3,0,3,7,-2,0,3,0,-1,0,3,0,0,0,3,0,1,0,3,0,2,0,3,1,-1,0,3,1,0,0,3,1,1,0,3,1,2,0,3,2,-1,0,3,2,0,0,3,2,1,0,3,2,2,0,3,3,-1,0,3,3,0,0,3,3,1,0,3,3,2,0,3,4,-1,0,3,4,0,0,3,4,1,0,3,4,2,0,3,5,-1,0,3,5,0,0,3,5,1,0,3,5,2,0,3,6,-1,0,3,6,0,0,3,6,1,0,3,6,2,0,3,7,-1,0,3,7,0,0,3,7,1,0,3,7,2,0,3,8,-3,0,3,8,-2,0,3,8,-1,0,3,8,0,0,3,8,1,0,3,8,2,0,3,-8,-9,0,3,-8,-8,0,3,-8,-7,0,3,-8,-6,0,3,-8,-5,0,3,-8,-4,0,3,-8,-3,0,3,-8,-2,0,3,-8,-1,0,3,-8,0,0,3,-8,1,0,3,-8,2,0,3,-8,3,0,3,-7,-9,0,3,-7,-8,0,3,-7,-7,0,3,-7,-6,0,3,-7,-5,0,3,-7,-4,0,3,-7,-3,0,3,-7,-2,0,3,-7,-1,0,3,-7,0,0,3,-7,1,0,3,-7,2,0,3,-7,3,0,3,-6,-9,0,3,-6,-8,0,3,-6,-7,0,3,-6,-6,0,3,-6,-5,0,3,-6,-4,0,3,-6,-3,0,3,-6,-2,0,3,-6,-1,0,3,-6,0,0,3,-6,1,0,3,-6,2,0,3,-6,3,0,3,-5,-9,0,3,-5,-8,0,3,-5,-7,0,3,-5,-6,0,3,-5,-5,0,3,-5,-4,0,3,-5,-3,0,3,-5,-2,0,3,-5,-1,0,3,-5,0,0,3,-5,1,0,3,-5,2,0,3,-5,3,0,3,0,3,0,3,1,3,0,3,2,3,0,3,3,3,0,3,4,3,0,3,5,3,0,3,6,3,0,3,7,3,0,3,8,3,0,3],"Middle":[-8,-17,63,1,-8,-16,2,2,-7,-17,63,1,-7,-16,2,2,-6,-17,63,1,-6,-16,2,2,-5,-17,63,1,-5,-16,2,2,-4,-17,63,1,-4,-16,2,2,-3,-17,63,1,-3,-16,2,2,-2,-17,63,1,-2,-16,2,2,-1,-17,63,1,-1,-16,2,2,0,-17,63,1,0,-16,2,2,1,-14,54,1,1,-13,1,2,2,-14,63,1,2,-13,2,2,3,-12,54,1,3,-11,1,2,4,-12,63,1,4,-11,2,2,5,-9,54,1,5,-8,1,2,6,-9,63,1,6,-8,2,2,7,-7,54,1,7,-6,1,2,8,-5,54,1,8,-4,1,2],"Top":[-10,-18,511,1,-10,-17,511,1,-10,-16,511,1,-10,-15,511,1,-10,-14,511,1,-10,-13,511,1,-10,-12,511,1,-10,-11,511,1,-10,-10,511,1,-10,-9,511,1,-10,-8,511,1,-10,-7,511,1,-10,-6,511,1,-10,-5,511,1,-10,-4,511,1,-10,-3,511,1,-10,-2,511,1,-10,-1,511,1,-10,0,511,1,-10,1,511,1,-10,2,511,1,-10,3,511,1,-10,4,511,1,-10,5,511,1,-9,-18,511,1,-9,-17,255,1,-9,-16,219,1,-9,-15,219,1,-9,-14,219,1,-9,-13,219,1,-9,-12,219,1,-9,-11,219,1,-9,-10,219,1,-9,-9,219,1,-9,-8,219,1,-9,-7,219,1,-9,-6,219,1,-9,-5,219,1,-9,-4,219,1,-9,-3,219,1,-9,-2,219,1,-9,-1,219,1,-9,0,219,1,-9,1,219,1,-9,2,219,1,-9,3,219,1,-9,4,507,1,-9,5,511,1,-8,-18,511,1,-8,4,504,1,-8,5,511,1,-7,-18,511,1,-7,4,504,1,-7,5,511,1,-6,-18,511,1,-6,4,504,1,-6,5,511,1,-5,-18,511,1,-5,4,504,1,-5,5,511,1,-4,-18,511,1,-4,-5,432,1,-4,-4,438,1,-4,-3,438,1,-4,-2,438,1,-4,-1,438,1,-4,0,438,1,-4,1,438,1,-4,2,438,1,-4,3,438,1,-4,4,510,1,-4,5,511,1,-3,-18,511,1,-3,-5,216,1,-3,-4,219,1,-3,-3,219,1,-3,-2,219,1,-3,-1,507,1,-3,0,511,1,-3,1,511,1,-3,2,511,1,-3,3,511,1,-3,4,511,1,-3,5,511,1,-2,-18,511,1,-2,-1,504,1,-2,0,511,1,-2,1,511,1,-2,2,511,1,-2,3,511,1,-2,4,511,1,-2,5,511,1,-1,-18,511,1,-1,-1,216,1,-1,0,219,1,-1,1,219,1,-1,2,219,1,-1,3,219,1,-1,4,507,1,-1,5,511,1,0,-18,511,1,0,4,504,1,0,5,511,1,1,-18,511,1,1,-17,447,1,1,-16,438,1,1,-15,438,1,1,4,504,1,1,5,511,1,2,-18,511,1,2,-17,511,1,2,-16,511,1,2,-15,511,1,2,4,504,1,2,5,511,1,3,-15,511,1,3,-14,447,1,3,-13,438,1,3,4,504,1,3,5,511,1,4,-15,511,1,4,-14,511,1,4,-13,511,1,4,4,504,1,4,5,511,1,5,-13,511,1,5,-12,447,1,5,-11,438,1,5,-10,438,1,5,4,504,1,5,5,511,1,6,-13,511,1,6,-12,511,1,6,-11,511,1,6,-10,511,1,6,4,504,1,6,5,511,1,7,-10,511,1,7,-9,447,1,7,-8,438,1,7,4,504,1,7,5,511,1,8,-10,511,1,8,-9,511,1,8,-8,511,1,8,-7,447,1,8,-6,438,1,8,4,504,1,8,5,511,1,9,-8,511,1,9,-7,511,1,9,-6,511,1,9,-5,447,1,9,-4,438,1,9,-3,438,1,9,-2,438,1,9,-1,438,1,9,0,438,1,9,1,438,1,9,2,438,1,9,3,438,1,9,4,510,1,9,5,511,1,10,-6,511,1,10,-5,511,1,10,-4,511,1,10,-3,511,1,10,-2,511,1,10,-1,511,1,10,0,511,1,10,1,511,1,10,2,511,1,10,3,511,1,10,4,511,1,10,5,511,1],"CustomFloor1":[],"CustomFloor2":[],"CustomFloor3":[],"CustomMiddle1":[],"CustomMiddle2":[],"CustomTop":[]}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/Test1/boss/Boss1/RoomInfo.json b/DungeonShooting_Godot/resource/map/tileMaps/Test1/boss/Boss1/RoomInfo.json
index adba4d9..bb3bf54 100644
--- a/DungeonShooting_Godot/resource/map/tileMaps/Test1/boss/Boss1/RoomInfo.json
+++ b/DungeonShooting_Godot/resource/map/tileMaps/Test1/boss/Boss1/RoomInfo.json
@@ -1 +1 @@
-{"Position":{"X":-7,"Y":-13},"Size":{"X":24,"Y":20},"DoorAreaInfos":[],"GroupName":"Test1","RoomType":3,"RoomName":"Boss1","Weight":100,"Remark":""}
\ No newline at end of file
+{"Position":{"X":-7,"Y":-13},"Size":{"X":24,"Y":20},"DoorAreaInfos":[],"GroupName":"Test1","RoomType":8,"RoomName":"Boss1","Weight":100,"Remark":""}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/Test1/inlet/Start/Preinstall.json b/DungeonShooting_Godot/resource/map/tileMaps/Test1/inlet/Start/Preinstall.json
index d237444..2d1d0d5 100644
--- a/DungeonShooting_Godot/resource/map/tileMaps/Test1/inlet/Start/Preinstall.json
+++ b/DungeonShooting_Godot/resource/map/tileMaps/Test1/inlet/Start/Preinstall.json
@@ -1 +1 @@
-[{"Name":"Preinstall1","Weight":100,"Remark":"","AutoFill":true,"WaveList":[[{"Position":{"X":39,"Y":8},"Size":{"X":0,"Y":0},"SpecialMarkType":1,"DelayTime":0,"MarkList":[]},{"Position":{"X":-16,"Y":-18},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"weapon0001","Weight":100,"Attr":{"CurrAmmon":"30","ResidueAmmo":"210"},"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":66,"Y":6},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"weapon0009","Weight":100,"Attr":{"CurrAmmon":"1","ResidueAmmo":"25"},"Altitude":8,"VerticalSpeed":0}]}]]}]
\ No newline at end of file
+[{"Name":"Preinstall1","Weight":100,"Remark":"","AutoFill":false,"WaveList":[[{"Position":{"X":39,"Y":8},"Size":{"X":0,"Y":0},"SpecialMarkType":1,"DelayTime":0,"MarkList":[]},{"Position":{"X":-16,"Y":-18},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"weapon0001","Weight":100,"Attr":{"CurrAmmon":"30","ResidueAmmo":"210"},"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":66,"Y":6},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"weapon0009","Weight":100,"Attr":{"CurrAmmon":"1","ResidueAmmo":"25"},"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":66,"Y":47},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"weapon0010","Weight":100,"Attr":{"CurrAmmon":"10","ResidueAmmo":"120"},"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":47,"Y":-32},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"weapon0008","Weight":100,"Attr":{"CurrAmmon":"10","ResidueAmmo":"120"},"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":23,"Y":37},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"prop0010","Weight":100,"Attr":null,"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":2,"Y":18},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"prop0005","Weight":100,"Attr":null,"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":24,"Y":-30},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"weapon0006","Weight":100,"Attr":{"CurrAmmon":"20","ResidueAmmo":"300"},"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":40,"Y":-10},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"weapon0003","Weight":100,"Attr":{"CurrAmmon":"12","ResidueAmmo":"90"},"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":2,"Y":-37},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"weapon0007","Weight":100,"Attr":{"CurrAmmon":"60","ResidueAmmo":"300"},"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":-2,"Y":47},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"weapon0002","Weight":100,"Attr":{"CurrAmmon":"7","ResidueAmmo":"70"},"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":29,"Y":63},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"weapon0013","Weight":100,"Attr":{"CurrAmmon":"50","ResidueAmmo":"250"},"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":-30,"Y":39},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"prop0003","Weight":100,"Attr":null,"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":-19,"Y":71},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"prop0003","Weight":100,"Attr":null,"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":48,"Y":29},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"weapon0004","Weight":100,"Attr":{"CurrAmmon":"180","ResidueAmmo":"90"},"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":20,"Y":94},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"weapon0014","Weight":100,"Attr":{"CurrAmmon":"5","ResidueAmmo":"60"},"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":-14,"Y":97},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"weapon0011","Weight":100,"Attr":{"CurrAmmon":"20","ResidueAmmo":"300"},"Altitude":8,"VerticalSpeed":0}]}]]}]
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/Test1/inlet/Start/Preview.png b/DungeonShooting_Godot/resource/map/tileMaps/Test1/inlet/Start/Preview.png
index ca8f4da..a47be3d 100644
--- a/DungeonShooting_Godot/resource/map/tileMaps/Test1/inlet/Start/Preview.png
+++ b/DungeonShooting_Godot/resource/map/tileMaps/Test1/inlet/Start/Preview.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/Test1/inlet/Start/RoomInfo.json b/DungeonShooting_Godot/resource/map/tileMaps/Test1/inlet/Start/RoomInfo.json
index 5182eed..d6fd35d 100644
--- a/DungeonShooting_Godot/resource/map/tileMaps/Test1/inlet/Start/RoomInfo.json
+++ b/DungeonShooting_Godot/resource/map/tileMaps/Test1/inlet/Start/RoomInfo.json
@@ -1 +1 @@
-{"Position":{"X":-9,"Y":-7},"Size":{"X":20,"Y":17},"DoorAreaInfos":[{"Direction":3,"Start":64,"End":208},{"Direction":0,"Start":16,"End":144},{"Direction":2,"Start":48,"End":176},{"Direction":1,"Start":16,"End":160}],"GroupName":"Test1","RoomType":1,"RoomName":"Start","Weight":100,"Remark":""}
\ No newline at end of file
+{"Position":{"X":-9,"Y":-7},"Size":{"X":20,"Y":17},"DoorAreaInfos":[{"Direction":3,"Start":64,"End":208},{"Direction":0,"Start":16,"End":144},{"Direction":2,"Start":48,"End":176},{"Direction":1,"Start":16,"End":160}],"GroupName":"Test1","RoomType":2,"RoomName":"Start","Weight":100,"Remark":""}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/Test1/inlet/Start/TileInfo.json b/DungeonShooting_Godot/resource/map/tileMaps/Test1/inlet/Start/TileInfo.json
index a18030c..30500bf 100644
--- a/DungeonShooting_Godot/resource/map/tileMaps/Test1/inlet/Start/TileInfo.json
+++ b/DungeonShooting_Godot/resource/map/tileMaps/Test1/inlet/Start/TileInfo.json
@@ -1 +1 @@
-{"NavigationVertices":[{"X":138,"Y":-42},{"X":138,"Y":82},{"X":134,"Y":22},{"X":134,"Y":-14},{"X":58,"Y":82},{"X":54,"Y":54},{"X":74,"Y":38},{"X":118,"Y":38},{"X":22,"Y":118},{"X":58,"Y":130},{"X":-58,"Y":130},{"X":-22,"Y":118},{"X":-26,"Y":22},{"X":-26,"Y":-14},{"X":-22,"Y":18},{"X":-22,"Y":54},{"X":54,"Y":18},{"X":74,"Y":2},{"X":22,"Y":82},{"X":-58,"Y":98},{"X":-22,"Y":82},{"X":90,"Y":-42},{"X":90,"Y":-14},{"X":90,"Y":2},{"X":-42,"Y":-42},{"X":118,"Y":22},{"X":-42,"Y":-58},{"X":90,"Y":-58},{"X":-86,"Y":-14},{"X":-106,"Y":-42},{"X":-106,"Y":98},{"X":-86,"Y":22}],"NavigationPolygon":[[0,1,2,3],[4,5,6,7,1],[8,9,10,11],[12,13,14,15],[6,5,16,17],[4,9,8,18,5],[11,10,19,20],[21,0,3,22],[22,23,17,24],[7,25,2,1],[15,5,18,20],[24,26,27,21],[24,21,22],[24,17,16,13],[16,14,13],[24,13,28,29],[30,29,28,31],[19,30,31,12,15,20]],"Floor":[-3,-4,0,3,-2,-4,0,3,-2,-3,0,3,-3,-3,0,3,-7,-3,0,3,-7,-2,0,3,-7,-1,0,3,-7,0,0,3,-7,1,0,3,-7,2,0,3,-7,3,0,3,-7,4,0,3,-7,5,0,3,-6,-3,0,3,-6,-2,0,3,-6,-1,0,3,-6,0,0,3,-6,1,0,3,-6,2,0,3,-6,3,0,3,-6,4,0,3,-6,5,0,3,-5,-3,0,3,-5,-2,0,3,-5,1,0,3,-5,2,0,3,-5,3,0,3,-5,4,0,3,-5,5,0,3,-4,-3,0,3,-4,-2,0,3,-4,1,0,3,-4,2,0,3,-4,3,0,3,-4,4,0,3,-4,5,0,3,-3,-2,0,3,-3,1,0,3,-3,2,0,3,-3,3,0,3,-3,4,0,3,-3,5,0,3,-2,-2,0,3,-2,-1,0,3,-2,0,0,3,-2,1,0,3,-2,2,0,3,-2,3,0,3,-2,4,0,3,-2,5,0,3,-4,6,0,3,-4,7,0,3,-3,6,0,3,-3,7,0,3,-2,6,0,3,-2,7,0,3,-1,3,0,3,-1,4,0,3,-1,7,0,3,0,3,0,3,0,4,0,3,0,7,0,3,1,3,0,3,1,4,0,3,1,5,0,3,1,6,0,3,1,7,0,3,2,3,0,3,2,4,0,3,2,5,0,3,2,6,0,3,2,7,0,3,3,3,0,3,3,4,0,3,3,5,0,3,3,6,0,3,3,7,0,3,-1,-4,0,3,-1,-3,0,3,-1,-2,0,3,-1,-1,0,3,-1,0,0,3,0,-4,0,3,0,-3,0,3,0,-2,0,3,0,-1,0,3,0,0,0,3,1,-4,0,3,1,-3,0,3,1,-2,0,3,1,-1,0,3,1,0,0,3,2,-4,0,3,2,-3,0,3,2,-2,0,3,2,-1,0,3,2,0,0,3,3,-4,0,3,3,-3,0,3,3,-2,0,3,3,-1,0,3,3,0,0,3,4,-4,0,3,4,-3,0,3,4,-2,0,3,4,-1,0,3,4,0,0,3,5,-4,0,3,5,-3,0,3,5,-2,0,3,5,-1,0,3,3,1,0,3,3,2,0,3,4,1,0,3,4,2,0,3,4,3,0,3,4,4,0,3,5,2,0,3,5,3,0,3,5,4,0,3,6,2,0,3,6,3,0,3,6,4,0,3,6,-3,0,3,6,-2,0,3,7,-3,0,3,7,-2,0,3,7,1,0,3,7,2,0,3,7,3,0,3,7,4,0,3,8,-3,0,3,8,-2,0,3,8,-1,0,3,8,0,0,3,8,1,0,3,8,2,0,3,8,3,0,3,8,4,0,3],"Middle":[-7,-5,63,1,-7,-4,2,2,-6,-5,63,1,-6,-4,2,2,-5,-5,63,1,-5,-4,2,2,-5,-1,48,1,-5,0,1,2,-4,-5,27,1,-4,-4,3,2,-4,-1,56,1,-4,0,2,2,-3,-6,63,1,-3,-5,2,2,-3,-1,24,1,-3,0,3,2,-2,-6,63,1,-2,-5,2,2,-1,-6,63,1,-1,-5,2,2,-1,1,48,1,-1,2,1,2,-1,5,48,1,-1,6,1,2,0,-6,63,1,0,-5,2,2,0,1,56,1,0,2,2,2,0,5,24,1,0,6,3,2,1,-6,63,1,1,-5,2,2,1,1,56,1,1,2,2,2,2,-6,63,1,2,-5,2,2,2,1,24,1,2,2,3,2,3,-6,63,1,3,-5,2,2,4,-6,63,1,4,-5,2,2,5,-6,63,1,5,-5,2,2,5,0,48,1,5,1,1,2,6,-5,54,1,6,-4,1,2,6,0,26,1,6,1,3,2,7,-5,63,1,7,-4,2,2,7,-1,24,1,7,0,3,2,8,-5,63,1,8,-4,2,2],"Top":[-9,-6,511,1,-9,-5,511,1,-9,-4,511,1,-9,-3,511,1,-9,-2,511,1,-9,-1,511,1,-9,0,511,1,-9,1,511,1,-9,2,511,1,-9,3,511,1,-9,4,511,1,-9,5,511,1,-9,6,511,1,-9,7,511,1,-8,-6,511,1,-8,-5,255,1,-8,-4,219,1,-8,-3,219,1,-8,-2,219,1,-8,-1,219,1,-8,0,219,1,-8,1,219,1,-8,2,219,1,-8,3,219,1,-8,4,219,1,-8,5,219,1,-8,6,507,1,-8,7,511,1,-7,-6,511,1,-7,6,504,1,-7,7,511,1,-6,-6,511,1,-6,6,504,1,-6,7,511,1,-6,8,511,1,-6,9,511,1,-5,-7,511,1,-5,-6,511,1,-5,6,216,1,-5,7,219,1,-5,8,507,1,-5,9,511,1,-4,-7,511,1,-4,-6,255,1,-4,8,504,1,-4,9,511,1,-3,-7,511,1,-3,8,504,1,-3,9,511,1,-2,-7,511,1,-2,8,504,1,-2,9,511,1,-1,-7,511,1,-1,8,504,1,-1,9,511,1,0,-7,511,1,0,8,504,1,0,9,511,1,1,-7,511,1,1,8,504,1,1,9,511,1,2,-7,511,1,2,8,504,1,2,9,511,1,3,-7,511,1,3,8,504,1,3,9,511,1,4,-7,511,1,4,5,432,1,4,6,438,1,4,7,438,1,4,8,510,1,4,9,511,1,5,-7,511,1,5,5,504,1,5,6,511,1,5,7,511,1,5,8,511,1,5,9,511,1,6,-7,511,1,6,-6,447,1,6,-1,176,1,6,5,504,1,6,6,511,1,7,-7,511,1,7,-6,511,1,7,5,504,1,7,6,511,1,8,-6,511,1,8,5,504,1,8,6,511,1,9,-6,511,1,9,-5,447,1,9,-4,438,1,9,-3,438,1,9,-2,438,1,9,-1,438,1,9,0,438,1,9,1,438,1,9,2,438,1,9,3,438,1,9,4,438,1,9,5,510,1,9,6,511,1,10,-6,511,1,10,-5,511,1,10,-4,511,1,10,-3,511,1,10,-2,511,1,10,-1,511,1,10,0,511,1,10,1,511,1,10,2,511,1,10,3,511,1,10,4,511,1,10,5,511,1,10,6,511,1],"CustomFloor1":[-2,-3,1,6,14,-1,-3,1,7,14,-4,2,1,7,14,-3,3,1,8,15,-4,3,1,7,15,-5,3,1,6,15,6,4,1,8,15,5,4,1,7,15,-14,-6,0,24,7,-14,-5,0,24,7,-13,-5,0,24,7,-13,-6,0,25,7,-14,-4,0,24,8,-13,-4,0,24,8,-12,-4,0,24,8,-12,-5,0,24,7,-11,-4,0,24,8,-11,-5,0,24,7,-10,-4,0,24,7,-10,-5,0,24,7,-9,-4,0,24,7,-9,-5,0,25,7,-10,-3,0,24,8,-9,-3,0,24,8,-8,-3,0,24,8,-8,-4,0,24,7,-7,-3,1,0,9,-7,-4,0,24,7,-6,-3,1,1,9,-6,-4,0,24,7,-5,-3,1,2,9,-5,-4,0,25,7,-6,-2,0,24,7,-5,-2,1,2,10,-6,-1,1,1,11,-4,-3,0,24,7,-3,-3,0,25,7,-7,-2,1,0,10,-7,-1,1,0,11,-5,2,1,6,14,4,3,1,6,14,4,4,1,6,15,6,3,1,8,14,5,3,1,7,14],"CustomFloor2":[],"CustomFloor3":[],"CustomMiddle1":[3,-4,1,5,5,3,-3,1,5,6,2,-4,1,5,5,2,-3,1,5,6,3,-2,1,10,5,3,-1,1,10,6,-3,4,1,10,5,-3,5,1,10,6,2,4,1,10,5,2,5,1,10,6,0,-1,1,18,12,1,-1,1,19,12,1,-2,1,19,11,0,-2,1,18,11,-6,4,1,18,12,-5,4,1,19,12,-5,3,1,19,11,-6,3,1,18,11,4,2,1,12,13,4,3,1,12,14,-6,-3,1,12,13,-6,-2,1,12,14,6,-3,1,15,13,7,-3,1,16,13,7,-2,1,16,14,6,-2,1,15,14,-1,3,1,15,13,0,3,1,16,13,0,4,1,16,14,-1,4,1,15,14],"CustomMiddle2":[-2,-4,1,14,4,-2,-3,1,14,5,-1,-3,1,15,5,-1,-4,1,15,4,-4,1,1,14,4,-4,2,1,14,5,-3,2,1,15,5,-3,1,1,15,4,7,2,1,13,6,-6,1,1,14,6,-4,-3,1,8,11,-4,7,1,6,11,5,-4,1,6,0,5,-3,1,6,1,-2,-1,1,5,0,-2,0,1,5,1],"CustomTop":[]}
\ No newline at end of file
+{"NavigationVertices":[{"X":138,"Y":-42},{"X":138,"Y":82},{"X":134,"Y":22},{"X":134,"Y":-14},{"X":74,"Y":2},{"X":74,"Y":38},{"X":58,"Y":82},{"X":-26,"Y":22},{"X":-26,"Y":-14},{"X":90,"Y":-42},{"X":90,"Y":-14},{"X":90,"Y":2},{"X":118,"Y":38},{"X":118,"Y":22},{"X":58,"Y":130},{"X":-58,"Y":130},{"X":-58,"Y":98},{"X":-86,"Y":22},{"X":-106,"Y":98},{"X":-106,"Y":-42},{"X":-86,"Y":-14},{"X":-42,"Y":-42},{"X":-42,"Y":-58},{"X":90,"Y":-58}],"NavigationPolygon":[[0,1,2,3],[4,5,6,7,8],[9,0,3,10],[10,11,4],[12,13,2,1],[12,1,6,5],[7,6,14,15,16],[17,7,16,18],[17,18,19,20],[20,19,21,8],[4,8,21,22,23,9],[4,9,10]],"Floor":[-3,-4,0,3,-2,-4,0,3,-2,-3,0,3,-3,-3,0,3,-7,-3,0,3,-7,-2,0,3,-7,-1,0,3,-7,0,0,3,-7,1,0,3,-7,2,0,3,-7,3,0,3,-7,4,0,3,-7,5,0,3,-6,-3,0,3,-6,-2,0,3,-6,-1,0,3,-6,0,0,3,-6,1,0,3,-6,2,0,3,-6,3,0,3,-6,4,0,3,-6,5,0,3,-5,-3,0,3,-5,-2,0,3,-5,1,0,3,-5,2,0,3,-5,3,0,3,-5,4,0,3,-5,5,0,3,-4,-3,0,3,-4,-2,0,3,-4,1,0,3,-4,2,0,3,-4,3,0,3,-4,4,0,3,-4,5,0,3,-3,-2,0,3,-3,1,0,3,-3,2,0,3,-3,3,0,3,-3,4,0,3,-3,5,0,3,-2,-2,0,3,-2,-1,0,3,-2,0,0,3,-2,1,0,3,-2,2,0,3,-2,3,0,3,-2,4,0,3,-2,5,0,3,-4,6,0,3,-4,7,0,3,-3,6,0,3,-3,7,0,3,-2,6,0,3,-2,7,0,3,-1,3,0,3,-1,4,0,3,-1,7,0,3,0,3,0,3,0,4,0,3,0,7,0,3,1,3,0,3,1,4,0,3,1,5,0,3,1,6,0,3,1,7,0,3,2,3,0,3,2,4,0,3,2,5,0,3,2,6,0,3,2,7,0,3,3,3,0,3,3,4,0,3,3,5,0,3,3,6,0,3,3,7,0,3,-1,-4,0,3,-1,-3,0,3,-1,-2,0,3,-1,-1,0,3,-1,0,0,3,0,-4,0,3,0,-3,0,3,0,-2,0,3,0,-1,0,3,0,0,0,3,1,-4,0,3,1,-3,0,3,1,-2,0,3,1,-1,0,3,1,0,0,3,2,-4,0,3,2,-3,0,3,2,-2,0,3,2,-1,0,3,2,0,0,3,3,-4,0,3,3,-3,0,3,3,-2,0,3,3,-1,0,3,3,0,0,3,4,-4,0,3,4,-3,0,3,4,-2,0,3,4,-1,0,3,4,0,0,3,5,-4,0,3,5,-3,0,3,5,-2,0,3,5,-1,0,3,3,1,0,3,3,2,0,3,4,1,0,3,4,2,0,3,4,3,0,3,4,4,0,3,5,2,0,3,5,3,0,3,5,4,0,3,6,2,0,3,6,3,0,3,6,4,0,3,6,-3,0,3,6,-2,0,3,7,-3,0,3,7,-2,0,3,7,1,0,3,7,2,0,3,7,3,0,3,7,4,0,3,8,-3,0,3,8,-2,0,3,8,-1,0,3,8,0,0,3,8,1,0,3,8,2,0,3,8,3,0,3,8,4,0,3,-1,2,0,3,0,2,0,3,1,2,0,3,2,2,0,3,2,1,0,3,1,1,0,3,0,1,0,3,-1,1,0,3,-1,5,0,3,0,5,0,3,0,6,0,3,-1,6,0,3],"Middle":[-7,-5,63,1,-7,-4,2,2,-6,-5,63,1,-6,-4,2,2,-5,-5,63,1,-5,-4,2,2,-5,-1,48,1,-5,0,1,2,-4,-5,27,1,-4,-4,3,2,-4,-1,56,1,-4,0,2,2,-3,-6,63,1,-3,-5,2,2,-3,-1,24,1,-3,0,3,2,-2,-6,63,1,-2,-5,2,2,-1,-6,63,1,-1,-5,2,2,0,-6,63,1,0,-5,2,2,1,-6,63,1,1,-5,2,2,2,-6,63,1,2,-5,2,2,3,-6,63,1,3,-5,2,2,4,-6,63,1,4,-5,2,2,5,-6,63,1,5,-5,2,2,5,0,48,1,5,1,1,2,6,-5,54,1,6,-4,1,2,6,0,26,1,6,1,3,2,7,-5,63,1,7,-4,2,2,7,-1,24,1,7,0,3,2,8,-5,63,1,8,-4,2,2],"Top":[-9,-6,511,1,-9,-5,511,1,-9,-4,511,1,-9,-3,511,1,-9,-2,511,1,-9,-1,511,1,-9,0,511,1,-9,1,511,1,-9,2,511,1,-9,3,511,1,-9,4,511,1,-9,5,511,1,-9,6,511,1,-9,7,511,1,-8,-6,511,1,-8,-5,255,1,-8,-4,219,1,-8,-3,219,1,-8,-2,219,1,-8,-1,219,1,-8,0,219,1,-8,1,219,1,-8,2,219,1,-8,3,219,1,-8,4,219,1,-8,5,219,1,-8,6,507,1,-8,7,511,1,-7,-6,511,1,-7,6,504,1,-7,7,511,1,-6,-6,511,1,-6,6,504,1,-6,7,511,1,-6,8,511,1,-6,9,511,1,-5,-7,511,1,-5,-6,511,1,-5,6,216,1,-5,7,219,1,-5,8,507,1,-5,9,511,1,-4,-7,511,1,-4,-6,255,1,-4,8,504,1,-4,9,511,1,-3,-7,511,1,-3,8,504,1,-3,9,511,1,-2,-7,511,1,-2,8,504,1,-2,9,511,1,-1,-7,511,1,-1,8,504,1,-1,9,511,1,0,-7,511,1,0,8,504,1,0,9,511,1,1,-7,511,1,1,8,504,1,1,9,511,1,2,-7,511,1,2,8,504,1,2,9,511,1,3,-7,511,1,3,8,504,1,3,9,511,1,4,-7,511,1,4,5,432,1,4,6,438,1,4,7,438,1,4,8,510,1,4,9,511,1,5,-7,511,1,5,5,504,1,5,6,511,1,5,7,511,1,5,8,511,1,5,9,511,1,6,-7,511,1,6,-6,447,1,6,-1,176,1,6,5,504,1,6,6,511,1,7,-7,511,1,7,-6,511,1,7,5,504,1,7,6,511,1,8,-6,511,1,8,5,504,1,8,6,511,1,9,-6,511,1,9,-5,447,1,9,-4,438,1,9,-3,438,1,9,-2,438,1,9,-1,438,1,9,0,438,1,9,1,438,1,9,2,438,1,9,3,438,1,9,4,438,1,9,5,510,1,9,6,511,1,10,-6,511,1,10,-5,511,1,10,-4,511,1,10,-3,511,1,10,-2,511,1,10,-1,511,1,10,0,511,1,10,1,511,1,10,2,511,1,10,3,511,1,10,4,511,1,10,5,511,1,10,6,511,1],"CustomFloor1":[-4,2,1,7,14,-3,3,1,8,15,-4,3,1,7,15,-5,3,1,6,15,6,4,1,8,15,5,4,1,7,15,-14,-6,0,24,7,-14,-5,0,24,7,-13,-5,0,24,7,-13,-6,0,25,7,-14,-4,0,24,8,-13,-4,0,24,8,-12,-4,0,24,8,-12,-5,0,24,7,-11,-4,0,24,8,-11,-5,0,24,7,-10,-4,0,24,7,-10,-5,0,24,7,-9,-4,0,24,7,-9,-5,0,25,7,-10,-3,0,24,8,-9,-3,0,24,8,-5,2,1,6,14,4,3,1,6,14,4,4,1,6,15,6,3,1,8,14,5,3,1,7,14,-3,2,1,8,14],"CustomFloor2":[],"CustomFloor3":[],"CustomMiddle1":[-3,4,1,10,5,-3,5,1,10,6,2,4,1,10,5,2,5,1,10,6],"CustomMiddle2":[5,-4,1,6,0,5,-3,1,6,1,-2,-1,1,5,0,-2,0,1,5,1],"CustomTop":[]}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/Test1/outlet/End1/RoomInfo.json b/DungeonShooting_Godot/resource/map/tileMaps/Test1/outlet/End1/RoomInfo.json
index c7f87ac..c75a9d0 100644
--- a/DungeonShooting_Godot/resource/map/tileMaps/Test1/outlet/End1/RoomInfo.json
+++ b/DungeonShooting_Godot/resource/map/tileMaps/Test1/outlet/End1/RoomInfo.json
@@ -1 +1 @@
-{"Position":{"X":-4,"Y":-6},"Size":{"X":9,"Y":10},"DoorAreaInfos":[],"GroupName":"Test1","RoomType":2,"RoomName":"End1","Weight":100,"Remark":""}
\ No newline at end of file
+{"Position":{"X":-4,"Y":-6},"Size":{"X":9,"Y":10},"DoorAreaInfos":[],"GroupName":"Test1","RoomType":4,"RoomName":"End1","Weight":100,"Remark":""}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/Test1/reward/Award1/Preview.png.import b/DungeonShooting_Godot/resource/map/tileMaps/Test1/reward/Award1/Preview.png.import
index f4902eb..f462856 100644
--- a/DungeonShooting_Godot/resource/map/tileMaps/Test1/reward/Award1/Preview.png.import
+++ b/DungeonShooting_Godot/resource/map/tileMaps/Test1/reward/Award1/Preview.png.import
@@ -2,11 +2,7 @@
importer="texture"
type="CompressedTexture2D"
-<<<<<<< HEAD
-uid="uid://wew7xnxc4d50"
-=======
-uid="uid://c08d7xo84ssqp"
->>>>>>> faff39f870b1097c233b529865b4f3ee2311c8a3
+uid="uid://b72ww741x2t0w"
path="res://.godot/imported/Preview.png-e48e389971aff40736b911be53ae62ea.ctex"
metadata={
"vram_texture": false
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/Test1/reward/Award1/RoomInfo.json b/DungeonShooting_Godot/resource/map/tileMaps/Test1/reward/Award1/RoomInfo.json
index 1c2618c..46ab0bb 100644
--- a/DungeonShooting_Godot/resource/map/tileMaps/Test1/reward/Award1/RoomInfo.json
+++ b/DungeonShooting_Godot/resource/map/tileMaps/Test1/reward/Award1/RoomInfo.json
@@ -1 +1 @@
-{"Position":{"X":-7,"Y":-6},"Size":{"X":11,"Y":12},"DoorAreaInfos":[{"Direction":3,"Start":0,"End":112},{"Direction":0,"Start":0,"End":112},{"Direction":2,"Start":0,"End":112},{"Direction":1,"Start":0,"End":112}],"GroupName":"Test1","RoomType":4,"RoomName":"Award1","Weight":100,"Remark":""}
\ No newline at end of file
+{"Position":{"X":-7,"Y":-6},"Size":{"X":11,"Y":12},"DoorAreaInfos":[],"GroupName":"Test1","RoomType":26,"RoomName":"Award1","Weight":100,"Remark":""}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/Test1/reward/Award1/TileInfo.json b/DungeonShooting_Godot/resource/map/tileMaps/Test1/reward/Award1/TileInfo.json
index 1feed79..ce0c2b2 100644
--- a/DungeonShooting_Godot/resource/map/tileMaps/Test1/reward/Award1/TileInfo.json
+++ b/DungeonShooting_Godot/resource/map/tileMaps/Test1/reward/Award1/TileInfo.json
@@ -1 +1 @@
-{"NavigationVertices":[{"X":26,"Y":66},{"X":-74,"Y":66},{"X":-74,"Y":-42},{"X":26,"Y":-42}],"NavigationPolygon":[[0,1,2,3]],"Floor":[-5,-3,0,3,-5,-2,0,3,-5,-1,0,3,-5,0,0,3,-5,1,0,3,-5,2,0,3,-4,-3,0,3,-4,-2,0,3,-4,-1,0,3,-4,0,0,3,-4,1,0,3,-4,2,0,3,-3,-3,0,3,-3,-2,0,3,-3,-1,0,3,-3,0,0,3,-3,1,0,3,-3,2,0,3,-2,-3,0,3,-2,-2,0,3,-2,-1,0,3,-2,0,0,3,-2,1,0,3,-2,2,0,3,-1,-3,0,3,-1,-2,0,3,-1,-1,0,3,-1,0,0,3,-1,1,0,3,-1,2,0,3,0,-3,0,3,0,-2,0,3,0,-1,0,3,0,0,0,3,0,1,0,3,0,2,0,3,1,-3,0,3,1,-2,0,3,1,-1,0,3,1,0,0,3,1,1,0,3,1,2,0,3,-5,3,0,3,-4,3,0,3,-3,3,0,3,-2,3,0,3,-1,3,0,3,0,3,0,3,1,3,0,3],"Middle":[-5,-5,63,1,-5,-4,2,2,-4,-5,63,1,-4,-4,2,2,-3,-5,63,1,-3,-4,2,2,-2,-5,63,1,-2,-4,2,2,-1,-5,63,1,-1,-4,2,2,0,-5,63,1,0,-4,2,2,1,-5,63,1,1,-4,2,2],"Top":[-7,-6,511,1,-7,-5,511,1,-7,-4,511,1,-7,-3,511,1,-7,-2,511,1,-7,-1,511,1,-7,0,511,1,-7,1,511,1,-7,2,511,1,-7,3,511,1,-7,4,511,1,-7,5,511,1,-6,-6,511,1,-6,-5,255,1,-6,-4,219,1,-6,-3,219,1,-6,-2,219,1,-6,-1,219,1,-6,0,219,1,-6,1,219,1,-6,2,219,1,-6,3,219,1,-6,4,507,1,-6,5,511,1,-5,-6,511,1,-5,4,504,1,-5,5,511,1,-4,-6,511,1,-4,4,504,1,-4,5,511,1,-3,-6,511,1,-3,4,504,1,-3,5,511,1,-2,-6,511,1,-2,4,504,1,-2,5,511,1,-1,-6,511,1,-1,4,504,1,-1,5,511,1,0,-6,511,1,0,4,504,1,0,5,511,1,1,-6,511,1,1,4,504,1,1,5,511,1,2,-6,511,1,2,-5,447,1,2,-4,438,1,2,-3,438,1,2,-2,438,1,2,-1,438,1,2,0,438,1,2,1,438,1,2,2,438,1,2,3,438,1,2,4,510,1,2,5,511,1,3,-6,511,1,3,-5,511,1,3,-4,511,1,3,-3,511,1,3,-2,511,1,3,-1,511,1,3,0,511,1,3,1,511,1,3,2,511,1,3,3,511,1,3,4,511,1,3,5,511,1],"CustomFloor1":[-3,-1,1,18,8,-3,0,1,18,8,-3,1,1,18,8,-2,-1,1,18,8,-2,0,1,18,8,-2,1,1,18,8,-1,-1,1,18,8,-1,0,1,18,8,-1,1,1,18,8,-4,-2,2,4,8,-4,-3,2,2,6,-1,-2,2,2,8,-1,-3,2,2,6,-2,-2,2,2,8,-2,-3,2,2,6,-3,-2,2,2,8,-3,-3,2,2,6,0,-3,2,2,6,0,-2,2,5,8,1,-3,2,3,6,1,-2,2,3,7,1,-1,2,3,7,0,-1,2,1,7,1,0,2,3,7,0,0,2,1,7,1,1,2,3,7,0,1,2,1,7,1,2,2,3,7,0,2,2,5,9,1,3,2,3,8,0,3,2,2,8,-1,3,2,2,8,-1,2,2,2,6,-2,3,2,2,8,-2,2,2,2,6,-3,3,2,2,8,-3,2,2,2,6,-4,3,2,2,8,-4,2,2,4,9,-5,3,2,1,8,-5,2,2,1,7,-4,1,2,3,7,-5,1,2,1,7,-4,0,2,3,7,-5,0,2,1,7,-4,-1,2,3,7,-5,-1,2,1,7,-5,-2,2,1,7,-5,-3,2,1,6],"CustomFloor2":[-4,-2,1,13,5,0,-2,1,13,5,-4,2,1,13,6,0,2,1,13,6],"CustomFloor3":[],"CustomMiddle1":[],"CustomMiddle2":[],"CustomTop":[]}
\ No newline at end of file
+{"NavigationVertices":[{"X":26,"Y":66},{"X":-74,"Y":66},{"X":-74,"Y":-42},{"X":26,"Y":-42}],"NavigationPolygon":[[0,1,2,3]],"Floor":[-5,-3,0,3,-5,-2,0,3,-5,-1,0,3,-5,0,0,3,-5,1,0,3,-5,2,0,3,-4,-3,0,3,-4,-2,0,3,-4,-1,0,3,-4,0,0,3,-4,1,0,3,-4,2,0,3,-3,-3,0,3,-3,-1,0,3,-3,0,0,3,-3,1,0,3,-3,2,0,3,-2,-3,0,3,-2,-2,0,3,-2,-1,0,3,-2,0,0,3,-2,1,0,3,-2,2,0,3,-1,-3,0,3,-1,-2,0,3,-1,-1,0,3,-1,0,0,3,-1,1,0,3,-1,2,0,3,0,-3,0,3,0,-2,0,3,0,-1,0,3,0,0,0,3,0,1,0,3,0,2,0,3,1,-3,0,3,1,-2,0,3,1,-1,0,3,1,0,0,3,1,1,0,3,1,2,0,3,-5,3,0,3,-4,3,0,3,-3,3,0,3,-2,3,0,3,-1,3,0,3,0,3,0,3,1,3,0,3,-3,-2,0,3],"Middle":[-5,-5,63,1,-5,-4,2,2,-4,-5,63,1,-4,-4,2,2,-3,-5,63,1,-3,-4,2,2,-2,-5,63,1,-2,-4,2,2,-1,-5,63,1,-1,-4,2,2,0,-5,63,1,0,-4,2,2,1,-5,63,1,1,-4,2,2],"Top":[-7,-6,511,1,-7,-5,511,1,-7,-4,511,1,-7,-3,511,1,-7,-2,511,1,-7,-1,511,1,-7,0,511,1,-7,1,511,1,-7,2,511,1,-7,3,511,1,-7,4,511,1,-7,5,511,1,-6,-6,511,1,-6,-5,255,1,-6,-4,219,1,-6,-3,219,1,-6,-2,219,1,-6,-1,219,1,-6,0,219,1,-6,1,219,1,-6,2,219,1,-6,3,219,1,-6,4,507,1,-6,5,511,1,-5,-6,511,1,-5,4,504,1,-5,5,511,1,-4,-6,511,1,-4,4,504,1,-4,5,511,1,-3,-6,511,1,-3,4,504,1,-3,5,511,1,-2,-6,511,1,-2,4,504,1,-2,5,511,1,-1,-6,511,1,-1,4,504,1,-1,5,511,1,0,-6,511,1,0,4,504,1,0,5,511,1,1,-6,511,1,1,4,504,1,1,5,511,1,2,-6,511,1,2,-5,447,1,2,-4,438,1,2,-3,438,1,2,-2,438,1,2,-1,438,1,2,0,438,1,2,1,438,1,2,2,438,1,2,3,438,1,2,4,510,1,2,5,511,1,3,-6,511,1,3,-5,511,1,3,-4,511,1,3,-3,511,1,3,-2,511,1,3,-1,511,1,3,0,511,1,3,1,511,1,3,2,511,1,3,3,511,1,3,4,511,1,3,5,511,1],"CustomFloor1":[-3,-1,1,18,8,-3,0,1,18,8,-3,1,1,18,8,-2,-1,1,18,8,-2,0,1,18,8,-2,1,1,18,8,-1,-1,1,18,8,-1,0,1,18,8,-1,1,1,18,8,-4,-2,2,4,8,-4,-3,2,2,6,-1,-2,2,2,8,-1,-3,2,2,6,-2,-2,2,2,8,-2,-3,2,2,6,-3,-2,2,2,8,-3,-3,2,2,6,0,-3,2,2,6,0,-2,2,5,8,1,-3,2,3,6,1,-2,2,3,7,1,-1,2,3,7,0,-1,2,1,7,1,0,2,3,7,0,0,2,1,7,1,1,2,3,7,0,1,2,1,7,1,2,2,3,7,0,2,2,5,9,1,3,2,3,8,0,3,2,2,8,-1,3,2,2,8,-1,2,2,2,6,-2,3,2,2,8,-2,2,2,2,6,-3,3,2,2,8,-3,2,2,2,6,-4,3,2,2,8,-4,2,2,4,9,-5,3,2,1,8,-5,2,2,1,7,-4,1,2,3,7,-5,1,2,1,7,-4,0,2,3,7,-5,0,2,1,7,-4,-1,2,3,7,-5,-1,2,1,7,-5,-2,2,1,7,-5,-3,2,1,6],"CustomFloor2":[-4,-2,1,13,5,0,-2,1,13,5,-4,2,1,13,6,0,2,1,13,6],"CustomFloor3":[],"CustomMiddle1":[],"CustomMiddle2":[],"CustomTop":[]}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/Test1/shop/Shop1/Preinstall.json b/DungeonShooting_Godot/resource/map/tileMaps/Test1/shop/Shop1/Preinstall.json
new file mode 100644
index 0000000..a9f951a
--- /dev/null
+++ b/DungeonShooting_Godot/resource/map/tileMaps/Test1/shop/Shop1/Preinstall.json
@@ -0,0 +1 @@
+[{"Name":"Preinstall1","Weight":100,"Remark":"","AutoFill":true,"WaveList":[[]]}]
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/Test1/shop/Shop1/Preview.png b/DungeonShooting_Godot/resource/map/tileMaps/Test1/shop/Shop1/Preview.png
new file mode 100644
index 0000000..6ca318e
--- /dev/null
+++ b/DungeonShooting_Godot/resource/map/tileMaps/Test1/shop/Shop1/Preview.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/Test1/shop/Shop1/Preview.png.import b/DungeonShooting_Godot/resource/map/tileMaps/Test1/shop/Shop1/Preview.png.import
new file mode 100644
index 0000000..8ac948a
--- /dev/null
+++ b/DungeonShooting_Godot/resource/map/tileMaps/Test1/shop/Shop1/Preview.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://b8sw1xi6iosg4"
+path="res://.godot/imported/Preview.png-a6cb6d2603055a6ca060f3ff00e023de.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/map/tileMaps/Test1/shop/Shop1/Preview.png"
+dest_files=["res://.godot/imported/Preview.png-a6cb6d2603055a6ca060f3ff00e023de.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/map/tileMaps/Test1/shop/Shop1/RoomInfo.json b/DungeonShooting_Godot/resource/map/tileMaps/Test1/shop/Shop1/RoomInfo.json
new file mode 100644
index 0000000..083719b
--- /dev/null
+++ b/DungeonShooting_Godot/resource/map/tileMaps/Test1/shop/Shop1/RoomInfo.json
@@ -0,0 +1 @@
+{"Position":{"X":-12,"Y":-8},"Size":{"X":21,"Y":22},"DoorAreaInfos":[{"Direction":3,"Start":48,"End":224},{"Direction":0,"Start":48,"End":208},{"Direction":2,"Start":80,"End":208},{"Direction":1,"Start":48,"End":208}],"GroupName":"Test1","RoomType":82,"RoomName":"Shop1","Weight":100,"Remark":""}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/Test1/shop/Shop1/TileInfo.json b/DungeonShooting_Godot/resource/map/tileMaps/Test1/shop/Shop1/TileInfo.json
new file mode 100644
index 0000000..dd6a0b7
--- /dev/null
+++ b/DungeonShooting_Godot/resource/map/tileMaps/Test1/shop/Shop1/TileInfo.json
@@ -0,0 +1 @@
+{"NavigationVertices":[{"X":58,"Y":-58},{"X":74,"Y":-58},{"X":74,"Y":-42},{"X":90,"Y":-42},{"X":90,"Y":-26},{"X":106,"Y":-26},{"X":106,"Y":130},{"X":90,"Y":130},{"X":90,"Y":146},{"X":74,"Y":146},{"X":-122,"Y":-42},{"X":-138,"Y":130},{"X":-138,"Y":-26},{"X":74,"Y":162},{"X":58,"Y":162},{"X":-122,"Y":146},{"X":58,"Y":178},{"X":42,"Y":178},{"X":-90,"Y":162},{"X":42,"Y":194},{"X":-74,"Y":194},{"X":-74,"Y":178},{"X":-90,"Y":178},{"X":-122,"Y":162},{"X":-138,"Y":146},{"X":-154,"Y":130},{"X":-154,"Y":-26},{"X":-138,"Y":-42},{"X":-122,"Y":-58},{"X":-106,"Y":-58},{"X":-106,"Y":-74},{"X":58,"Y":-74}],"NavigationPolygon":[[0,1,2],[2,3,4],[4,5,6,7],[7,8,9,10],[11,12,10,9,13,14,15],[14,16,17,18,15],[17,19,20,21],[21,22,18],[18,23,15],[15,24,11],[11,25,26,12],[12,27,10],[10,28,29,2,4,7],[29,30,31,0],[29,0,2],[18,17,21]],"Floor":[-4,-4,0,3,-3,-3,0,3,-2,-2,0,3,-1,-1,0,3,0,0,0,3,1,0,0,3,2,1,0,3,3,1,0,3,3,2,0,3,4,2,0,3,-4,-3,0,3,-4,-2,0,3,-4,-1,0,3,-4,0,0,3,-4,1,0,3,-4,2,0,3,-3,-4,0,3,-3,-2,0,3,-3,-1,0,3,-3,0,0,3,-3,1,0,3,-3,2,0,3,-2,-4,0,3,-2,-3,0,3,-2,-1,0,3,-2,0,0,3,-2,1,0,3,-2,2,0,3,-1,-4,0,3,-1,-3,0,3,-1,-2,0,3,-1,0,0,3,-1,1,0,3,-1,2,0,3,0,-4,0,3,0,-3,0,3,0,-2,0,3,0,-1,0,3,0,1,0,3,0,2,0,3,1,-4,0,3,1,-3,0,3,1,-2,0,3,1,-1,0,3,1,1,0,3,1,2,0,3,2,-4,0,3,2,-3,0,3,2,-2,0,3,2,-1,0,3,2,0,0,3,2,2,0,3,3,-4,0,3,3,-3,0,3,3,-2,0,3,3,-1,0,3,3,0,0,3,4,-4,0,3,4,-3,0,3,4,-2,0,3,4,-1,0,3,4,0,0,3,4,1,0,3,-1,3,0,3,-1,4,0,3,-1,5,0,3,-1,6,0,3,-1,7,0,3,0,3,0,3,0,4,0,3,0,5,0,3,0,6,0,3,0,7,0,3,1,3,0,3,1,4,0,3,1,5,0,3,1,6,0,3,1,7,0,3,2,3,0,3,2,4,0,3,2,5,0,3,2,6,0,3,2,7,0,3,3,3,0,3,3,4,0,3,3,5,0,3,3,6,0,3,3,7,0,3,4,3,0,3,4,4,0,3,4,5,0,3,4,6,0,3,4,7,0,3,-8,-4,0,3,-8,-3,0,3,-8,-2,0,3,-8,-1,0,3,-8,0,0,3,-8,1,0,3,-8,2,0,3,-7,-4,0,3,-7,-3,0,3,-7,-2,0,3,-7,-1,0,3,-7,0,0,3,-7,1,0,3,-7,2,0,3,-6,-4,0,3,-6,-3,0,3,-6,-2,0,3,-6,-1,0,3,-6,0,0,3,-6,1,0,3,-6,2,0,3,-5,-4,0,3,-5,-3,0,3,-5,-2,0,3,-5,-1,0,3,-5,0,0,3,-5,1,0,3,-5,2,0,3,-1,8,0,3,-1,9,0,3,0,8,0,3,0,9,0,3,1,8,0,3,1,9,0,3,2,8,0,3,2,9,0,3,3,8,0,3,3,9,0,3,4,8,0,3,4,9,0,3,-8,3,0,3,-8,4,0,3,-8,5,0,3,-8,6,0,3,-8,7,0,3,-8,8,0,3,-8,9,0,3,-7,3,0,3,-7,4,0,3,-7,5,0,3,-7,6,0,3,-7,7,0,3,-7,8,0,3,-7,9,0,3,-6,3,0,3,-6,4,0,3,-6,5,0,3,-6,6,0,3,-6,7,0,3,-6,8,0,3,-6,9,0,3,-5,3,0,3,-5,4,0,3,-5,5,0,3,-5,6,0,3,-5,7,0,3,-5,8,0,3,-5,9,0,3,-4,3,0,3,-4,4,0,3,-4,5,0,3,-4,6,0,3,-4,7,0,3,-4,8,0,3,-4,9,0,3,-3,3,0,3,-3,4,0,3,-3,5,0,3,-3,6,0,3,-3,7,0,3,-3,8,0,3,-3,9,0,3,-2,3,0,3,-2,4,0,3,-2,5,0,3,-2,6,0,3,-2,7,0,3,-2,8,0,3,-2,9,0,3,-6,10,0,3,-5,10,0,3,-4,10,0,3,-3,10,0,3,-2,10,0,3,-1,10,0,3,0,10,0,3,1,10,0,3,2,10,0,3,3,10,0,3,5,-3,0,3,5,-2,0,3,5,-1,0,3,5,0,0,3,5,1,0,3,5,2,0,3,5,3,0,3,5,4,0,3,5,5,0,3,5,6,0,3,5,7,0,3,5,8,0,3,-9,-2,0,3,-9,-1,0,3,-9,0,0,3,-9,1,0,3,-9,2,0,3,-9,3,0,3,-9,4,0,3,-9,5,0,3,-9,6,0,3,-9,7,0,3,-9,8,0,3,-9,-3,0,3,-10,-2,0,3,-10,-1,0,3,-10,0,0,3,-10,1,0,3,-10,2,0,3,-10,3,0,3,-10,4,0,3,-10,5,0,3,-10,6,0,3,-10,7,0,3,-5,11,0,3,-4,11,0,3,-3,11,0,3,-2,11,0,3,-1,11,0,3,0,11,0,3,1,11,0,3,2,11,0,3,6,-2,0,3,6,-1,0,3,6,0,0,3,6,1,0,3,6,2,0,3,6,3,0,3,6,4,0,3,6,5,0,3,6,6,0,3,6,7,0,3,-7,-5,0,3,-6,-5,0,3,-5,-5,0,3,-4,-5,0,3,-3,-5,0,3,-2,-5,0,3,-1,-5,0,3,0,-5,0,3,1,-5,0,3,2,-5,0,3,3,-5,0,3],"Middle":[-10,-4,27,1,-10,-3,3,2,-9,-5,27,1,-9,-4,3,2,-8,-6,27,1,-8,-5,3,2,-7,-7,63,1,-7,-6,2,2,-6,-7,63,1,-6,-6,2,2,-5,-7,63,1,-5,-6,2,2,-4,-7,63,1,-4,-6,2,2,-3,-7,63,1,-3,-6,2,2,-2,-7,63,1,-2,-6,2,2,-1,-7,63,1,-1,-6,2,2,0,-7,63,1,0,-6,2,2,1,-7,63,1,1,-6,2,2,2,-7,63,1,2,-6,2,2,3,-7,63,1,3,-6,2,2,4,-6,54,1,4,-5,1,2,5,-5,54,1,5,-4,1,2,6,-4,54,1,6,-3,1,2],"Top":[-12,-5,511,1,-12,-4,511,1,-12,-3,511,1,-12,-2,511,1,-12,-1,511,1,-12,0,511,1,-12,1,511,1,-12,2,511,1,-12,3,511,1,-12,4,511,1,-12,5,511,1,-12,6,511,1,-12,7,511,1,-12,8,511,1,-12,9,511,1,-11,-6,511,1,-11,-5,511,1,-11,-4,255,1,-11,-3,219,1,-11,-2,219,1,-11,-1,219,1,-11,0,219,1,-11,1,219,1,-11,2,219,1,-11,3,219,1,-11,4,219,1,-11,5,219,1,-11,6,219,1,-11,7,219,1,-11,8,507,1,-11,9,511,1,-11,10,511,1,-10,-7,511,1,-10,-6,511,1,-10,-5,255,1,-10,8,216,1,-10,9,507,1,-10,10,511,1,-10,11,511,1,-9,-8,511,1,-9,-7,511,1,-9,-6,255,1,-9,9,216,1,-9,10,507,1,-9,11,511,1,-8,-8,511,1,-8,-7,255,1,-8,10,504,1,-8,11,511,1,-8,12,511,1,-7,-8,511,1,-7,10,216,1,-7,11,507,1,-7,12,511,1,-7,13,511,1,-6,-8,511,1,-6,11,216,1,-6,12,507,1,-6,13,511,1,-5,-8,511,1,-5,12,504,1,-5,13,511,1,-4,-8,511,1,-4,12,504,1,-4,13,511,1,-3,-8,511,1,-3,12,504,1,-3,13,511,1,-2,-8,511,1,-2,12,504,1,-2,13,511,1,-1,-8,511,1,-1,12,504,1,-1,13,511,1,0,-8,511,1,0,12,504,1,0,13,511,1,1,-8,511,1,1,12,504,1,1,13,511,1,2,-8,511,1,2,12,504,1,2,13,511,1,3,-8,511,1,3,11,432,1,3,12,510,1,3,13,511,1,4,-8,511,1,4,-7,447,1,4,10,432,1,4,11,510,1,4,12,511,1,4,13,511,1,5,-8,511,1,5,-7,511,1,5,-6,447,1,5,9,432,1,5,10,510,1,5,11,511,1,5,12,511,1,6,-7,511,1,6,-6,511,1,6,-5,447,1,6,8,432,1,6,9,510,1,6,10,511,1,6,11,511,1,7,-6,511,1,7,-5,511,1,7,-4,447,1,7,-3,438,1,7,-2,438,1,7,-1,438,1,7,0,438,1,7,1,438,1,7,2,438,1,7,3,438,1,7,4,438,1,7,5,438,1,7,6,438,1,7,7,438,1,7,8,510,1,7,9,511,1,7,10,511,1,8,-5,511,1,8,-4,511,1,8,-3,511,1,8,-2,511,1,8,-1,511,1,8,0,511,1,8,1,511,1,8,2,511,1,8,3,511,1,8,4,511,1,8,5,511,1,8,6,511,1,8,7,511,1,8,8,511,1,8,9,511,1],"CustomFloor1":[],"CustomFloor2":[],"CustomFloor3":[],"CustomMiddle1":[],"CustomMiddle2":[],"CustomTop":[]}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/sound/sfx/common/gold.ogg b/DungeonShooting_Godot/resource/sound/sfx/common/gold.ogg
new file mode 100644
index 0000000..b4b2a02
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sound/sfx/common/gold.ogg
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sound/sfx/common/gold.ogg.import b/DungeonShooting_Godot/resource/sound/sfx/common/gold.ogg.import
new file mode 100644
index 0000000..e57b929
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sound/sfx/common/gold.ogg.import
@@ -0,0 +1,19 @@
+[remap]
+
+importer="oggvorbisstr"
+type="AudioStreamOggVorbis"
+uid="uid://c7u5cykgimrd4"
+path="res://.godot/imported/gold.ogg-d06a726cc6fb4031ede1140774780273.oggvorbisstr"
+
+[deps]
+
+source_file="res://resource/sound/sfx/common/gold.ogg"
+dest_files=["res://.godot/imported/gold.ogg-d06a726cc6fb4031ede1140774780273.oggvorbisstr"]
+
+[params]
+
+loop=false
+loop_offset=0
+bpm=0
+beat_count=0
+bar_beats=4
diff --git a/DungeonShooting_Godot/resource/sound/sfx/reloading/Reloading_begin0013.ogg b/DungeonShooting_Godot/resource/sound/sfx/reloading/Reloading_begin0013.ogg
new file mode 100644
index 0000000..937aa7b
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sound/sfx/reloading/Reloading_begin0013.ogg
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sound/sfx/reloading/Reloading_begin0013.ogg.import b/DungeonShooting_Godot/resource/sound/sfx/reloading/Reloading_begin0013.ogg.import
new file mode 100644
index 0000000..f339289
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sound/sfx/reloading/Reloading_begin0013.ogg.import
@@ -0,0 +1,19 @@
+[remap]
+
+importer="oggvorbisstr"
+type="AudioStreamOggVorbis"
+uid="uid://vcstbu7wion4"
+path="res://.godot/imported/Reloading_begin0013.ogg-9e3fec03cec4408e1ae49f78ae7fd10c.oggvorbisstr"
+
+[deps]
+
+source_file="res://resource/sound/sfx/reloading/Reloading_begin0013.ogg"
+dest_files=["res://.godot/imported/Reloading_begin0013.ogg-9e3fec03cec4408e1ae49f78ae7fd10c.oggvorbisstr"]
+
+[params]
+
+loop=false
+loop_offset=0
+bpm=0
+beat_count=0
+bar_beats=4
diff --git a/DungeonShooting_Godot/resource/sound/sfx/reloading/Reloading_finish0005.ogg b/DungeonShooting_Godot/resource/sound/sfx/reloading/Reloading_finish0005.ogg
new file mode 100644
index 0000000..1cd4a17
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sound/sfx/reloading/Reloading_finish0005.ogg
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sound/sfx/reloading/Reloading_finish0005.ogg.import b/DungeonShooting_Godot/resource/sound/sfx/reloading/Reloading_finish0005.ogg.import
new file mode 100644
index 0000000..04fad80
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sound/sfx/reloading/Reloading_finish0005.ogg.import
@@ -0,0 +1,19 @@
+[remap]
+
+importer="oggvorbisstr"
+type="AudioStreamOggVorbis"
+uid="uid://lf3yfq82qetp"
+path="res://.godot/imported/Reloading_finish0005.ogg-6f8f9af81ced17f866850f45f4e2a055.oggvorbisstr"
+
+[deps]
+
+source_file="res://resource/sound/sfx/reloading/Reloading_finish0005.ogg"
+dest_files=["res://.godot/imported/Reloading_finish0005.ogg-6f8f9af81ced17f866850f45f4e2a055.oggvorbisstr"]
+
+[params]
+
+loop=false
+loop_offset=0
+bpm=0
+beat_count=0
+bar_beats=4
diff --git a/DungeonShooting_Godot/resource/sound/sfx/shooting/Shooting0012.ogg b/DungeonShooting_Godot/resource/sound/sfx/shooting/Shooting0012.ogg
new file mode 100644
index 0000000..00d92b6
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sound/sfx/shooting/Shooting0012.ogg
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sound/sfx/shooting/Shooting0012.ogg.import b/DungeonShooting_Godot/resource/sound/sfx/shooting/Shooting0012.ogg.import
new file mode 100644
index 0000000..54a9ae7
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sound/sfx/shooting/Shooting0012.ogg.import
@@ -0,0 +1,19 @@
+[remap]
+
+importer="oggvorbisstr"
+type="AudioStreamOggVorbis"
+uid="uid://bhpgoq6oqhd24"
+path="res://.godot/imported/Shooting0012.ogg-6d1b24c8d5291f0e566c777a5c1a223b.oggvorbisstr"
+
+[deps]
+
+source_file="res://resource/sound/sfx/shooting/Shooting0012.ogg"
+dest_files=["res://.godot/imported/Shooting0012.ogg-6d1b24c8d5291f0e566c777a5c1a223b.oggvorbisstr"]
+
+[params]
+
+loop=false
+loop_offset=0
+bpm=0
+beat_count=0
+bar_beats=4
diff --git a/DungeonShooting_Godot/resource/sound/sfx/shooting/Shooting0013.ogg b/DungeonShooting_Godot/resource/sound/sfx/shooting/Shooting0013.ogg
new file mode 100644
index 0000000..32b39ff
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sound/sfx/shooting/Shooting0013.ogg
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sound/sfx/shooting/Shooting0013.ogg.import b/DungeonShooting_Godot/resource/sound/sfx/shooting/Shooting0013.ogg.import
new file mode 100644
index 0000000..ea34494
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sound/sfx/shooting/Shooting0013.ogg.import
@@ -0,0 +1,19 @@
+[remap]
+
+importer="oggvorbisstr"
+type="AudioStreamOggVorbis"
+uid="uid://b7dnq60ppy3rt"
+path="res://.godot/imported/Shooting0013.ogg-f68af44d2b878523bfde72871d459a6a.oggvorbisstr"
+
+[deps]
+
+source_file="res://resource/sound/sfx/shooting/Shooting0013.ogg"
+dest_files=["res://.godot/imported/Shooting0013.ogg-f68af44d2b878523bfde72871d459a6a.oggvorbisstr"]
+
+[params]
+
+loop=false
+loop_offset=0
+bpm=0
+beat_count=0
+bar_beats=4
diff --git a/DungeonShooting_Godot/resource/sprite/box/TreasureBox0001.png b/DungeonShooting_Godot/resource/sprite/box/TreasureBox0001.png
new file mode 100644
index 0000000..96ba1c1
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/box/TreasureBox0001.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/box/TreasureBox0001.png.import b/DungeonShooting_Godot/resource/sprite/box/TreasureBox0001.png.import
new file mode 100644
index 0000000..11628b1
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/box/TreasureBox0001.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dladvmgql1pwe"
+path="res://.godot/imported/TreasureBox0001.png-470db2c564e486f7e8aa1da89a50df44.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/box/TreasureBox0001.png"
+dest_files=["res://.godot/imported/TreasureBox0001.png-470db2c564e486f7e8aa1da89a50df44.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/box/TreasureBox0001_icon.png b/DungeonShooting_Godot/resource/sprite/box/TreasureBox0001_icon.png
new file mode 100644
index 0000000..6b1d441
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/box/TreasureBox0001_icon.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/box/TreasureBox0001_icon.png.import b/DungeonShooting_Godot/resource/sprite/box/TreasureBox0001_icon.png.import
new file mode 100644
index 0000000..f90f748
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/box/TreasureBox0001_icon.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dmmq0qjtk3emj"
+path="res://.godot/imported/TreasureBox0001_icon.png-84fd776b11f978d95f53508cc4a524a3.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/box/TreasureBox0001_icon.png"
+dest_files=["res://.godot/imported/TreasureBox0001_icon.png-84fd776b11f978d95f53508cc4a524a3.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/bullet/normal/bullet0004 .png b/DungeonShooting_Godot/resource/sprite/bullet/normal/bullet0004 .png
deleted file mode 100644
index d476fc1..0000000
--- a/DungeonShooting_Godot/resource/sprite/bullet/normal/bullet0004 .png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/bullet/normal/bullet0004 .png.import b/DungeonShooting_Godot/resource/sprite/bullet/normal/bullet0004 .png.import
deleted file mode 100644
index 930467a..0000000
--- a/DungeonShooting_Godot/resource/sprite/bullet/normal/bullet0004 .png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://cintp6u83g3wf"
-path="res://.godot/imported/bullet0004 .png-5a9763fc816fc8d74fd567b6735df5da.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/bullet/normal/bullet0004 .png"
-dest_files=["res://.godot/imported/bullet0004 .png-5a9763fc816fc8d74fd567b6735df5da.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/bullet/normal/bullet0006.png b/DungeonShooting_Godot/resource/sprite/bullet/normal/bullet0006.png
new file mode 100644
index 0000000..b71a05e
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/bullet/normal/bullet0006.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/bullet/normal/bullet0006.png.import b/DungeonShooting_Godot/resource/sprite/bullet/normal/bullet0006.png.import
new file mode 100644
index 0000000..3aa8d10
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/bullet/normal/bullet0006.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bn8k07n2y6lmr"
+path="res://.godot/imported/bullet0006.png-7a22d278d8906f52f8fe1d151125dd27.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/bullet/normal/bullet0006.png"
+dest_files=["res://.godot/imported/bullet0006.png-7a22d278d8906f52f8fe1d151125dd27.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/bullet/normal/bullet0007.png b/DungeonShooting_Godot/resource/sprite/bullet/normal/bullet0007.png
new file mode 100644
index 0000000..409f5ea
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/bullet/normal/bullet0007.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/bullet/normal/bullet0007.png.import b/DungeonShooting_Godot/resource/sprite/bullet/normal/bullet0007.png.import
new file mode 100644
index 0000000..d3df7c1
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/bullet/normal/bullet0007.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://ktgwsn6cecn1"
+path="res://.godot/imported/bullet0007.png-671d78db00259eec71ff1bbeb7323d38.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/bullet/normal/bullet0007.png"
+dest_files=["res://.godot/imported/bullet0007.png-671d78db00259eec71ff1bbeb7323d38.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/bullet/normal/bullet0008.png b/DungeonShooting_Godot/resource/sprite/bullet/normal/bullet0008.png
new file mode 100644
index 0000000..274f521
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/bullet/normal/bullet0008.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/bullet/normal/bullet0008.png.import b/DungeonShooting_Godot/resource/sprite/bullet/normal/bullet0008.png.import
new file mode 100644
index 0000000..75e0859
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/bullet/normal/bullet0008.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cf6jtee53ru6t"
+path="res://.godot/imported/bullet0008.png-ee2d2af8fd8c07d5f50b667ec409caea.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/bullet/normal/bullet0008.png"
+dest_files=["res://.godot/imported/bullet0008.png-ee2d2af8fd8c07d5f50b667ec409caea.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/currency/Gold_1.png b/DungeonShooting_Godot/resource/sprite/currency/Gold_1.png
new file mode 100644
index 0000000..3110228
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/currency/Gold_1.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/currency/Gold_1.png.import b/DungeonShooting_Godot/resource/sprite/currency/Gold_1.png.import
new file mode 100644
index 0000000..0597d88
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/currency/Gold_1.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://benn0iaclw8dk"
+path="res://.godot/imported/Gold_1.png-a93928c0075919d29a145c4dafb11474.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/currency/Gold_1.png"
+dest_files=["res://.godot/imported/Gold_1.png-a93928c0075919d29a145c4dafb11474.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/currency/Gold_10.png b/DungeonShooting_Godot/resource/sprite/currency/Gold_10.png
new file mode 100644
index 0000000..d7c4a53
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/currency/Gold_10.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/currency/Gold_10.png.import b/DungeonShooting_Godot/resource/sprite/currency/Gold_10.png.import
new file mode 100644
index 0000000..c89b9a9
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/currency/Gold_10.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://7dy6itvggpwy"
+path="res://.godot/imported/Gold_10.png-6dad896477e2d64ee4b53dfc61512c52.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/currency/Gold_10.png"
+dest_files=["res://.godot/imported/Gold_10.png-6dad896477e2d64ee4b53dfc61512c52.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/currency/Gold_5.png b/DungeonShooting_Godot/resource/sprite/currency/Gold_5.png
new file mode 100644
index 0000000..daf65e3
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/currency/Gold_5.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/currency/Gold_5.png.import b/DungeonShooting_Godot/resource/sprite/currency/Gold_5.png.import
new file mode 100644
index 0000000..ca47a36
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/currency/Gold_5.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bfpcqj2x8t2os"
+path="res://.godot/imported/Gold_5.png-0b8f56330acf1bae56d208261bbe00e3.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/currency/Gold_5.png"
+dest_files=["res://.godot/imported/Gold_5.png-0b8f56330acf1bae56d208261bbe00e3.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/currency/Gold_shadow.png b/DungeonShooting_Godot/resource/sprite/currency/Gold_shadow.png
new file mode 100644
index 0000000..5e67581
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/currency/Gold_shadow.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/currency/Gold_shadow.png.import b/DungeonShooting_Godot/resource/sprite/currency/Gold_shadow.png.import
new file mode 100644
index 0000000..ca0e61e
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/currency/Gold_shadow.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cthwlbqve6i1l"
+path="res://.godot/imported/Gold_shadow.png-7f96d16d057af7e8ad9968d1695208d9.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/currency/Gold_shadow.png"
+dest_files=["res://.godot/imported/Gold_shadow.png-7f96d16d057af7e8ad9968d1695208d9.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/shootFire/ShotFire0003.png b/DungeonShooting_Godot/resource/sprite/shootFire/ShotFire0003.png
new file mode 100644
index 0000000..944ab2f
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/shootFire/ShotFire0003.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/shootFire/ShotFire0003.png.import b/DungeonShooting_Godot/resource/sprite/shootFire/ShotFire0003.png.import
new file mode 100644
index 0000000..cfd03e8
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/shootFire/ShotFire0003.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dw3amegyt2ehh"
+path="res://.godot/imported/ShotFire0003.png-96bf214260aefa07ecedf1608829c903.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/shootFire/ShotFire0003.png"
+dest_files=["res://.godot/imported/ShotFire0003.png-96bf214260aefa07ecedf1608829c903.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/ui/commonIcon/Gold_10.png b/DungeonShooting_Godot/resource/sprite/ui/commonIcon/Gold_10.png
new file mode 100644
index 0000000..c0e1473
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/ui/commonIcon/Gold_10.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/ui/commonIcon/Gold_10.png.import b/DungeonShooting_Godot/resource/sprite/ui/commonIcon/Gold_10.png.import
new file mode 100644
index 0000000..d08eb20
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/ui/commonIcon/Gold_10.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cysv0dpvm52xw"
+path="res://.godot/imported/Gold_10.png-90370d287f395564703b058392c1eb5b.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/ui/commonIcon/Gold_10.png"
+dest_files=["res://.godot/imported/Gold_10.png-90370d287f395564703b058392c1eb5b.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/weapon/weapon0010/Weapon0010.png b/DungeonShooting_Godot/resource/sprite/weapon/weapon0010/Weapon0010.png
new file mode 100644
index 0000000..e7997d0
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0010/Weapon0010.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/weapon0010/Weapon0010.png.import b/DungeonShooting_Godot/resource/sprite/weapon/weapon0010/Weapon0010.png.import
new file mode 100644
index 0000000..a15a246
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0010/Weapon0010.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://7uvgno67d1aq"
+path="res://.godot/imported/Weapon0010.png-81895ae43c7fb76772f8c51d14f4b78e.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/weapon/weapon0010/Weapon0010.png"
+dest_files=["res://.godot/imported/Weapon0010.png-81895ae43c7fb76772f8c51d14f4b78e.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/weapon/weapon0010/Weapon0010_reloading.png b/DungeonShooting_Godot/resource/sprite/weapon/weapon0010/Weapon0010_reloading.png
new file mode 100644
index 0000000..f4b5ae0
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0010/Weapon0010_reloading.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/weapon0010/Weapon0010_reloading.png.import b/DungeonShooting_Godot/resource/sprite/weapon/weapon0010/Weapon0010_reloading.png.import
new file mode 100644
index 0000000..9844f79
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0010/Weapon0010_reloading.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://drhwb6yaqfocm"
+path="res://.godot/imported/Weapon0010_reloading.png-992da254579c65f8c0e81d226fb3f4c6.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/weapon/weapon0010/Weapon0010_reloading.png"
+dest_files=["res://.godot/imported/Weapon0010_reloading.png-992da254579c65f8c0e81d226fb3f4c6.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/weapon/weapon0010/scar-20.png b/DungeonShooting_Godot/resource/sprite/weapon/weapon0010/scar-20.png
deleted file mode 100644
index 6b2d15e..0000000
--- a/DungeonShooting_Godot/resource/sprite/weapon/weapon0010/scar-20.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/weapon0010/scar-20.png.import b/DungeonShooting_Godot/resource/sprite/weapon/weapon0010/scar-20.png.import
deleted file mode 100644
index ab753af..0000000
--- a/DungeonShooting_Godot/resource/sprite/weapon/weapon0010/scar-20.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://b2266sb3sbd5y"
-path="res://.godot/imported/scar-20.png-a4a07689e2e3b62ecb927ac42c9a9da5.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/weapon/weapon0010/scar-20.png"
-dest_files=["res://.godot/imported/scar-20.png-a4a07689e2e3b62ecb927ac42c9a9da5.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/weapon/weapon0010/scar-20_reloading.png b/DungeonShooting_Godot/resource/sprite/weapon/weapon0010/scar-20_reloading.png
deleted file mode 100644
index 2d6c43d..0000000
--- a/DungeonShooting_Godot/resource/sprite/weapon/weapon0010/scar-20_reloading.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/weapon0010/scar-20_reloading.png.import b/DungeonShooting_Godot/resource/sprite/weapon/weapon0010/scar-20_reloading.png.import
deleted file mode 100644
index a0be66b..0000000
--- a/DungeonShooting_Godot/resource/sprite/weapon/weapon0010/scar-20_reloading.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://c5krnv4dpvpbb"
-path="res://.godot/imported/scar-20_reloading.png-3742dafeecbf78acc177719c43b08eb0.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/weapon/weapon0010/scar-20_reloading.png"
-dest_files=["res://.godot/imported/scar-20_reloading.png-3742dafeecbf78acc177719c43b08eb0.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/weapon/weapon0011/Weapon0011.png b/DungeonShooting_Godot/resource/sprite/weapon/weapon0011/Weapon0011.png
new file mode 100644
index 0000000..63eb45e
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0011/Weapon0011.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/weapon0011/Weapon0011.png.import b/DungeonShooting_Godot/resource/sprite/weapon/weapon0011/Weapon0011.png.import
new file mode 100644
index 0000000..8eb64d2
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0011/Weapon0011.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://d2nw07bxifdv6"
+path="res://.godot/imported/Weapon0011.png-4508f5f36303362ac300f62d27601f6d.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/weapon/weapon0011/Weapon0011.png"
+dest_files=["res://.godot/imported/Weapon0011.png-4508f5f36303362ac300f62d27601f6d.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/weapon/weapon0011/gun10.png b/DungeonShooting_Godot/resource/sprite/weapon/weapon0011/gun10.png
deleted file mode 100644
index 2c86bab..0000000
--- a/DungeonShooting_Godot/resource/sprite/weapon/weapon0011/gun10.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/weapon0012/bow.png.import b/DungeonShooting_Godot/resource/sprite/weapon/weapon0012/bow.png.import
index 412e93d..4616585 100644
--- a/DungeonShooting_Godot/resource/sprite/weapon/weapon0012/bow.png.import
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0012/bow.png.import
@@ -3,15 +3,15 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://b4exgoa8t0wny"
-path="res://.godot/imported/bow.png-9ae685914082766e6dbcd1eaddb43b40.ctex"
+path="res://.godot/imported/bow.png-88942d9562b550ee90573ad2cdb4bb92.ctex"
metadata={
"vram_texture": false
}
[deps]
-source_file="res://resource/sprite/weapon/bow.png"
-dest_files=["res://.godot/imported/bow.png-9ae685914082766e6dbcd1eaddb43b40.ctex"]
+source_file="res://resource/sprite/weapon/weapon0012/bow.png"
+dest_files=["res://.godot/imported/bow.png-88942d9562b550ee90573ad2cdb4bb92.ctex"]
[params]
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/weapon0013/weapon0013.png.import b/DungeonShooting_Godot/resource/sprite/weapon/weapon0013/weapon0013.png.import
new file mode 100644
index 0000000..cc29c2c
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0013/weapon0013.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cphawlk2w0w6w"
+path="res://.godot/imported/weapon0013.png-ebf877c1ae1b135ec79dd1b6a7ae1165.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/weapon/weapon0013/weapon0013.png"
+dest_files=["res://.godot/imported/weapon0013.png-ebf877c1ae1b135ec79dd1b6a7ae1165.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/weapon/weapon0013/weapon0014-export.png.import b/DungeonShooting_Godot/resource/sprite/weapon/weapon0013/weapon0014-export.png.import
new file mode 100644
index 0000000..203d743
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0013/weapon0014-export.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cuivqyq32tjan"
+path="res://.godot/imported/weapon0014-export.png-f1691475edd2682499f71dfe7d46110d.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/weapon/weapon0013/weapon0014-export.png"
+dest_files=["res://.godot/imported/weapon0014-export.png-f1691475edd2682499f71dfe7d46110d.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/weapon/weapon0013/weapon0014.png.import b/DungeonShooting_Godot/resource/sprite/weapon/weapon0013/weapon0014.png.import
new file mode 100644
index 0000000..eb6d28b
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0013/weapon0014.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://deqflkjkgkebd"
+path="res://.godot/imported/weapon0014.png-231a4437579a4dfcadef71f1a72de1ed.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/weapon/weapon0013/weapon0014.png"
+dest_files=["res://.godot/imported/weapon0014.png-231a4437579a4dfcadef71f1a72de1ed.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/weapon/weapon0014/Weapon0014.png b/DungeonShooting_Godot/resource/sprite/weapon/weapon0014/Weapon0014.png
new file mode 100644
index 0000000..3113087
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0014/Weapon0014.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/weapon0014/Weapon0014.png.import b/DungeonShooting_Godot/resource/sprite/weapon/weapon0014/Weapon0014.png.import
new file mode 100644
index 0000000..af570f3
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0014/Weapon0014.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://d27ax1aqghn0k"
+path="res://.godot/imported/Weapon0014.png-24bed8267d2ed0e312778ce83c4afa5a.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/weapon/weapon0014/Weapon0014.png"
+dest_files=["res://.godot/imported/Weapon0014.png-24bed8267d2ed0e312778ce83c4afa5a.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/weapon/weapon0014/gun2.png.import b/DungeonShooting_Godot/resource/sprite/weapon/weapon0014/gun2.png.import
deleted file mode 100644
index feb8eb6..0000000
--- a/DungeonShooting_Godot/resource/sprite/weapon/weapon0014/gun2.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://5geiuvv6hyov"
-path="res://.godot/imported/gun2.png-78b331a2f245cfbe03b10da276435b64.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/weapon/gun2.png"
-dest_files=["res://.godot/imported/gun2.png-78b331a2f245cfbe03b10da276435b64.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/weapon/weapon0015/gun3.png.import b/DungeonShooting_Godot/resource/sprite/weapon/weapon0015/gun3.png.import
index e5154c0..80cead3 100644
--- a/DungeonShooting_Godot/resource/sprite/weapon/weapon0015/gun3.png.import
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0015/gun3.png.import
@@ -3,15 +3,15 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://c1tnh6laf172u"
-path="res://.godot/imported/gun3.png-d2428e7c1819cfb8a78ef87505aee0a3.ctex"
+path="res://.godot/imported/gun3.png-3eceb0c7c64a7bf84605307efa15f7f3.ctex"
metadata={
"vram_texture": false
}
[deps]
-source_file="res://resource/sprite/weapon/gun3.png"
-dest_files=["res://.godot/imported/gun3.png-d2428e7c1819cfb8a78ef87505aee0a3.ctex"]
+source_file="res://resource/sprite/weapon/weapon0015/gun3.png"
+dest_files=["res://.godot/imported/gun3.png-3eceb0c7c64a7bf84605307efa15f7f3.ctex"]
[params]
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/weapon0016/gun4.png.import b/DungeonShooting_Godot/resource/sprite/weapon/weapon0016/gun4.png.import
new file mode 100644
index 0000000..6b60870
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0016/gun4.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://xafbhgrxmosy"
+path="res://.godot/imported/gun4.png-3a854e99c328550ec802a641bed4ce89.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/weapon/weapon0016/gun4.png"
+dest_files=["res://.godot/imported/gun4.png-3a854e99c328550ec802a641bed4ce89.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/weapon/weapon0017/gun5.png.import b/DungeonShooting_Godot/resource/sprite/weapon/weapon0017/gun5.png.import
new file mode 100644
index 0000000..2dcc1e9
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0017/gun5.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://c2eber1v7nb4j"
+path="res://.godot/imported/gun5.png-dde9a0cdc02e2378517e9d271797761c.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/weapon/weapon0017/gun5.png"
+dest_files=["res://.godot/imported/gun5.png-dde9a0cdc02e2378517e9d271797761c.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/weapon/weapon0018/gun6.png.import b/DungeonShooting_Godot/resource/sprite/weapon/weapon0018/gun6.png.import
new file mode 100644
index 0000000..c7dff5f
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0018/gun6.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://rlp8f2rgxlbf"
+path="res://.godot/imported/gun6.png-661eed06db2d1504a8e43f81aca88938.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/weapon/weapon0018/gun6.png"
+dest_files=["res://.godot/imported/gun6.png-661eed06db2d1504a8e43f81aca88938.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/weapon/weapon0019/gun7.png.import b/DungeonShooting_Godot/resource/sprite/weapon/weapon0019/gun7.png.import
new file mode 100644
index 0000000..f37ec50
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0019/gun7.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bs6ukbtcmxuiw"
+path="res://.godot/imported/gun7.png-f1428c4b8a1ac62dafacd70a35e5813b.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/weapon/weapon0019/gun7.png"
+dest_files=["res://.godot/imported/gun7.png-f1428c4b8a1ac62dafacd70a35e5813b.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/weapon/weapon0020/gun8.png.import b/DungeonShooting_Godot/resource/sprite/weapon/weapon0020/gun8.png.import
new file mode 100644
index 0000000..6b19bf3
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0020/gun8.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://2lcc20olyi5d"
+path="res://.godot/imported/gun8.png-981667783ada37a774730057971adda6.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/weapon/weapon0020/gun8.png"
+dest_files=["res://.godot/imported/gun8.png-981667783ada37a774730057971adda6.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/spriteFrames/bullet/Bullet0006.tres b/DungeonShooting_Godot/resource/spriteFrames/bullet/Bullet0006.tres
new file mode 100644
index 0000000..4e845c6
--- /dev/null
+++ b/DungeonShooting_Godot/resource/spriteFrames/bullet/Bullet0006.tres
@@ -0,0 +1,14 @@
+[gd_resource type="SpriteFrames" load_steps=2 format=3 uid="uid://dx4t45bq8ehhq"]
+
+[ext_resource type="Texture2D" uid="uid://bn8k07n2y6lmr" path="res://resource/sprite/bullet/normal/bullet0006.png" id="1_xjtjd"]
+
+[resource]
+animations = [{
+"frames": [{
+"duration": 1.0,
+"texture": ExtResource("1_xjtjd")
+}],
+"loop": true,
+"name": &"default",
+"speed": 5.0
+}]
diff --git a/DungeonShooting_Godot/resource/spriteFrames/bullet/Bullet0007.tres b/DungeonShooting_Godot/resource/spriteFrames/bullet/Bullet0007.tres
new file mode 100644
index 0000000..c719795
--- /dev/null
+++ b/DungeonShooting_Godot/resource/spriteFrames/bullet/Bullet0007.tres
@@ -0,0 +1,14 @@
+[gd_resource type="SpriteFrames" load_steps=2 format=3 uid="uid://bkwoy70bnm74k"]
+
+[ext_resource type="Texture2D" uid="uid://ktgwsn6cecn1" path="res://resource/sprite/bullet/normal/bullet0007.png" id="1_5lygh"]
+
+[resource]
+animations = [{
+"frames": [{
+"duration": 1.0,
+"texture": ExtResource("1_5lygh")
+}],
+"loop": true,
+"name": &"default",
+"speed": 5.0
+}]
diff --git a/DungeonShooting_Godot/resource/spriteFrames/bullet/Bullet0008.tres b/DungeonShooting_Godot/resource/spriteFrames/bullet/Bullet0008.tres
new file mode 100644
index 0000000..caf8579
--- /dev/null
+++ b/DungeonShooting_Godot/resource/spriteFrames/bullet/Bullet0008.tres
@@ -0,0 +1,14 @@
+[gd_resource type="SpriteFrames" load_steps=2 format=3 uid="uid://ubdvau75andr"]
+
+[ext_resource type="Texture2D" uid="uid://cf6jtee53ru6t" path="res://resource/sprite/bullet/normal/bullet0008.png" id="1_dwc4l"]
+
+[resource]
+animations = [{
+"frames": [{
+"duration": 1.0,
+"texture": ExtResource("1_dwc4l")
+}],
+"loop": true,
+"name": &"default",
+"speed": 5.0
+}]
diff --git a/DungeonShooting_Godot/resource/spriteFrames/weapon/Weapon0010.tres b/DungeonShooting_Godot/resource/spriteFrames/weapon/Weapon0010.tres
new file mode 100644
index 0000000..fd083c4
--- /dev/null
+++ b/DungeonShooting_Godot/resource/spriteFrames/weapon/Weapon0010.tres
@@ -0,0 +1,97 @@
+[gd_resource type="SpriteFrames" load_steps=14 format=3 uid="uid://cd7fhaqk587o2"]
+
+[ext_resource type="Texture2D" uid="uid://7uvgno67d1aq" path="res://resource/sprite/weapon/weapon0010/Weapon0010.png" id="1_4kjnn"]
+[ext_resource type="Texture2D" uid="uid://drhwb6yaqfocm" path="res://resource/sprite/weapon/weapon0010/Weapon0010_reloading.png" id="2_rwx4o"]
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_0dydo"]
+atlas = ExtResource("2_rwx4o")
+region = Rect2(0, 0, 37, 17)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_dfwtc"]
+atlas = ExtResource("2_rwx4o")
+region = Rect2(37, 0, 37, 17)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_gak18"]
+atlas = ExtResource("2_rwx4o")
+region = Rect2(74, 0, 37, 17)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_rv7be"]
+atlas = ExtResource("2_rwx4o")
+region = Rect2(111, 0, 37, 17)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_5t03e"]
+atlas = ExtResource("2_rwx4o")
+region = Rect2(148, 0, 37, 17)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_lyx3v"]
+atlas = ExtResource("2_rwx4o")
+region = Rect2(185, 0, 37, 17)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_gpgko"]
+atlas = ExtResource("2_rwx4o")
+region = Rect2(222, 0, 37, 17)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_vovwl"]
+atlas = ExtResource("2_rwx4o")
+region = Rect2(259, 0, 37, 17)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_2eogh"]
+atlas = ExtResource("2_rwx4o")
+region = Rect2(296, 0, 37, 17)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_ushsg"]
+atlas = ExtResource("2_rwx4o")
+region = Rect2(333, 0, 37, 17)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_a4yk5"]
+atlas = ExtResource("2_rwx4o")
+region = Rect2(370, 0, 37, 17)
+
+[resource]
+animations = [{
+"frames": [{
+"duration": 1.0,
+"texture": ExtResource("1_4kjnn")
+}],
+"loop": true,
+"name": &"default",
+"speed": 5.0
+}, {
+"frames": [{
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_0dydo")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_dfwtc")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_gak18")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_rv7be")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_5t03e")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_lyx3v")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_gpgko")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_vovwl")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_2eogh")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_ushsg")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_a4yk5")
+}],
+"loop": false,
+"name": &"reloading_frame",
+"speed": 5.0
+}]
diff --git a/DungeonShooting_Godot/resource/spriteFrames/weapon/Weapon0011.tres b/DungeonShooting_Godot/resource/spriteFrames/weapon/Weapon0011.tres
new file mode 100644
index 0000000..9619c42
--- /dev/null
+++ b/DungeonShooting_Godot/resource/spriteFrames/weapon/Weapon0011.tres
@@ -0,0 +1,14 @@
+[gd_resource type="SpriteFrames" load_steps=2 format=3 uid="uid://xvfg1a0xj7ng"]
+
+[ext_resource type="Texture2D" uid="uid://d2nw07bxifdv6" path="res://resource/sprite/weapon/weapon0011/Weapon0011.png" id="1_d6ft8"]
+
+[resource]
+animations = [{
+"frames": [{
+"duration": 1.0,
+"texture": ExtResource("1_d6ft8")
+}],
+"loop": true,
+"name": &"default",
+"speed": 5.0
+}]
diff --git a/DungeonShooting_Godot/resource/spriteFrames/weapon/Weapon0013.tres b/DungeonShooting_Godot/resource/spriteFrames/weapon/Weapon0013.tres
new file mode 100644
index 0000000..4901466
--- /dev/null
+++ b/DungeonShooting_Godot/resource/spriteFrames/weapon/Weapon0013.tres
@@ -0,0 +1,14 @@
+[gd_resource type="SpriteFrames" load_steps=2 format=3 uid="uid://cawsi08vaqfrn"]
+
+[ext_resource type="Texture2D" uid="uid://cphawlk2w0w6w" path="res://resource/sprite/weapon/weapon0013/weapon0013.png" id="1_akn2h"]
+
+[resource]
+animations = [{
+"frames": [{
+"duration": 1.0,
+"texture": ExtResource("1_akn2h")
+}],
+"loop": true,
+"name": &"default",
+"speed": 5.0
+}]
diff --git a/DungeonShooting_Godot/resource/spriteFrames/weapon/Weapon0014.tres b/DungeonShooting_Godot/resource/spriteFrames/weapon/Weapon0014.tres
new file mode 100644
index 0000000..148385f
--- /dev/null
+++ b/DungeonShooting_Godot/resource/spriteFrames/weapon/Weapon0014.tres
@@ -0,0 +1,14 @@
+[gd_resource type="SpriteFrames" load_steps=2 format=3 uid="uid://taxfr2lcy0f3"]
+
+[ext_resource type="Texture2D" uid="uid://d27ax1aqghn0k" path="res://resource/sprite/weapon/weapon0014/Weapon0014.png" id="1_lpq2x"]
+
+[resource]
+animations = [{
+"frames": [{
+"duration": 1.0,
+"texture": ExtResource("1_lpq2x")
+}],
+"loop": true,
+"name": &"default",
+"speed": 5.0
+}]
diff --git a/DungeonShooting_Godot/scene/test/TestTrail.tscn b/DungeonShooting_Godot/scene/test/TestTrail.tscn
new file mode 100644
index 0000000..79afee9
--- /dev/null
+++ b/DungeonShooting_Godot/scene/test/TestTrail.tscn
@@ -0,0 +1,19 @@
+[gd_scene load_steps=5 format=3 uid="uid://brum5fmbt1br4"]
+
+[ext_resource type="Script" path="res://src/test/TestTrail.cs" id="1_mefd0"]
+[ext_resource type="PackedScene" uid="uid://ddwikcidm0gsi" path="res://prefab/effect/common/Trail0001.tscn" id="2_t308a"]
+[ext_resource type="Texture2D" uid="uid://bn8k07n2y6lmr" path="res://resource/sprite/bullet/normal/bullet0006.png" id="2_w7ffd"]
+
+[sub_resource type="Gradient" id="Gradient_gds2p"]
+resource_local_to_scene = true
+offsets = PackedFloat32Array(0.825949, 1)
+colors = PackedColorArray(1, 1, 1, 0.705882, 1, 1, 1, 0)
+
+[node name="TestTrail" type="Node2D"]
+script = ExtResource("1_mefd0")
+
+[node name="Trail" parent="." instance=ExtResource("2_t308a")]
+gradient = SubResource("Gradient_gds2p")
+
+[node name="Sprite2D" type="Sprite2D" parent="."]
+texture = ExtResource("2_w7ffd")
diff --git a/DungeonShooting_Godot/src/config/ExcelConfig.cs b/DungeonShooting_Godot/src/config/ExcelConfig.cs
index bf3c620..0f3fe56 100644
--- a/DungeonShooting_Godot/src/config/ExcelConfig.cs
+++ b/DungeonShooting_Godot/src/config/ExcelConfig.cs
@@ -340,11 +340,6 @@
}
}
- if (!string.IsNullOrEmpty(item.__AiUseAttribute))
- {
- item.AiUseAttribute = WeaponBase_Map[item.__AiUseAttribute];
- }
-
if (!string.IsNullOrEmpty(item.__AiAttackAttr))
{
item.AiAttackAttr = AiAttackAttr_Map[item.__AiAttackAttr];
diff --git a/DungeonShooting_Godot/src/config/ExcelConfig_ActivityBase.cs b/DungeonShooting_Godot/src/config/ExcelConfig_ActivityBase.cs
index 76d7bfb..d19cfa0 100644
--- a/DungeonShooting_Godot/src/config/ExcelConfig_ActivityBase.cs
+++ b/DungeonShooting_Godot/src/config/ExcelConfig_ActivityBase.cs
@@ -23,10 +23,11 @@
/// Shell(弹壳): 7
/// Effect(特效): 8
/// Prop(道具): 9
+ /// Treasure(宝箱): 10
/// Other(其它类型): 99
///
[JsonInclude]
- public int Type;
+ public ActivityType Type;
///
/// 物体名称
@@ -35,6 +36,25 @@
public string Name;
///
+ /// 物体品质, 用于武器和道具
+ /// 通用物品: 1
+ /// 基础: 2
+ /// 普通: 3
+ /// 稀有: 4
+ /// 史诗: 5
+ /// 传说: 6
+ /// 独一无二: 7
+ ///
+ [JsonInclude]
+ public ActivityQuality Quality;
+
+ ///
+ /// 商店售价
+ ///
+ [JsonInclude]
+ public uint Price;
+
+ ///
/// 物体简介
/// 一句对物体简短的介绍, 比如拾起物体时弹出的描述
///
@@ -88,6 +108,8 @@
inst.Id = Id;
inst.Type = Type;
inst.Name = Name;
+ inst.Quality = Quality;
+ inst.Price = Price;
inst.Intro = Intro;
inst.Details = Details;
inst.IsStatic = IsStatic;
diff --git a/DungeonShooting_Godot/src/config/ExcelConfig_EnemyBase.cs b/DungeonShooting_Godot/src/config/ExcelConfig_EnemyBase.cs
index cedad80..182c7e1 100644
--- a/DungeonShooting_Godot/src/config/ExcelConfig_EnemyBase.cs
+++ b/DungeonShooting_Godot/src/config/ExcelConfig_EnemyBase.cs
@@ -25,6 +25,12 @@
public string Remark;
///
+ /// 血量
+ ///
+ [JsonInclude]
+ public int Hp;
+
+ ///
/// 移动速度
///
[JsonInclude]
@@ -67,6 +73,13 @@
public float BackViewRange;
///
+ /// 掉落金币数量区间, 如果为负数或者0则不会掉落金币
+ /// 格式为[value]或者[min,max]
+ ///
+ [JsonInclude]
+ public int[] Gold;
+
+ ///
/// 返回浅拷贝出的新对象
///
public EnemyBase Clone()
@@ -75,6 +88,7 @@
inst.Id = Id;
inst.Activity = Activity;
inst.Remark = Remark;
+ inst.Hp = Hp;
inst.MoveSpeed = MoveSpeed;
inst.Acceleration = Acceleration;
inst.Friction = Friction;
@@ -82,6 +96,7 @@
inst.ViewRange = ViewRange;
inst.TailAfterViewRange = TailAfterViewRange;
inst.BackViewRange = BackViewRange;
+ inst.Gold = Gold;
return inst;
}
}
diff --git a/DungeonShooting_Godot/src/config/ExcelConfig_WeaponBase.cs b/DungeonShooting_Godot/src/config/ExcelConfig_WeaponBase.cs
index e3de8cf..ba3d942 100644
--- a/DungeonShooting_Godot/src/config/ExcelConfig_WeaponBase.cs
+++ b/DungeonShooting_Godot/src/config/ExcelConfig_WeaponBase.cs
@@ -259,7 +259,7 @@
public float UpliftAngleRestore;
///
- /// 开火特效
+ /// 开火特效, 该特效脚本必须实现IEffect接口
///
[JsonInclude]
public string FireEffect;
@@ -281,18 +281,18 @@
public bool ReloadThrowShell;
///
+ /// 抛壳数量
+ ///
+ [JsonInclude]
+ public int ThrowShellCount;
+
+ ///
/// 投抛弹壳的延时时间
///
[JsonInclude]
public float ThrowShellDelayTime;
///
- /// 投抛状态下物体碰撞器大小
- ///
- [JsonInclude]
- public SerializeVector2 ThrowCollisionSize;
-
- ///
/// 是否可以触发近战攻击
///
[JsonInclude]
@@ -368,13 +368,6 @@
public Dictionary OtherSoundMap;
///
- /// Ai属性
- /// Ai 使用该武器时的武器数据, 设置该字段, 可让同一把武器在敌人和玩家手上有不同属性
- /// 如果不填则Ai和玩家使用同一种属性
- ///
- public WeaponBase AiUseAttribute;
-
- ///
/// Ai使用该武器开火时的一些额外配置属性
/// 玩家使用的武器不需要填写该字段
///
@@ -431,8 +424,8 @@
inst.Bullet = Bullet;
inst.Shell = Shell;
inst.ReloadThrowShell = ReloadThrowShell;
+ inst.ThrowShellCount = ThrowShellCount;
inst.ThrowShellDelayTime = ThrowShellDelayTime;
- inst.ThrowCollisionSize = ThrowCollisionSize;
inst.CanMeleeAttack = CanMeleeAttack;
inst.MeleeAttackHarmRange = MeleeAttackHarmRange;
inst.MeleeAttackRepelRange = MeleeAttackRepelRange;
@@ -446,7 +439,6 @@
inst.BeLoadedSound = BeLoadedSound;
inst.BeLoadedSoundDelayTime = BeLoadedSoundDelayTime;
inst.OtherSoundMap = OtherSoundMap;
- inst.AiUseAttribute = AiUseAttribute;
inst.AiAttackAttr = AiAttackAttr;
return inst;
}
@@ -481,9 +473,6 @@
public Dictionary __OtherSoundMap;
[JsonInclude]
- public string __AiUseAttribute;
-
- [JsonInclude]
public string __AiAttackAttr;
}
diff --git a/DungeonShooting_Godot/src/framework/activity/ActivityId.cs b/DungeonShooting_Godot/src/framework/activity/ActivityId.cs
index de3761c..44068c1 100644
--- a/DungeonShooting_Godot/src/framework/activity/ActivityId.cs
+++ b/DungeonShooting_Godot/src/framework/activity/ActivityId.cs
@@ -5,76 +5,6 @@
public static class ActivityId
{
///
- /// 测试单位
- ///
- public const string Test = "test";
- ///
- /// 角色
- ///
- public const string Role = "role";
- ///
- /// 敌人
- ///
- public const string Enemy = "enemy";
- ///
- /// 武器
- ///
- public const string Weapon = "weapon";
- ///
- /// 子弹
- ///
- public const string Bullet = "bullet";
- ///
- /// 弹壳
- ///
- public const string Shell = "shell";
- ///
- /// 特效
- ///
- public const string Effect = "effect";
- ///
- /// 道具
- ///
- public const string Prop = "prop";
- ///
- /// 其他类型
- ///
- public const string Other = "other";
-
- ///
- /// 根据 ActivityType 中的枚举类型获取类型名称的字符串
- ///
- public static string GetIdPrefix(ActivityType activityType)
- {
- switch (activityType)
- {
- case ActivityType.None:
- return "";
- case ActivityType.Test:
- return Test;
- case ActivityType.Role:
- case ActivityType.Player:
- return Role;
- case ActivityType.Enemy:
- return Enemy;
- case ActivityType.Weapon:
- return Weapon;
- case ActivityType.Bullet:
- return Bullet;
- case ActivityType.Shell:
- return Shell;
- case ActivityType.Effect:
- return Effect;
- case ActivityType.Prop:
- return Prop;
- case ActivityType.Other:
- return Other;
- }
-
- return "";
- }
-
- ///
/// 根据 ActivityType 中的枚举类型获取类型名称的字符串
///
public static string GetTypeName(ActivityType activityType)
@@ -100,6 +30,8 @@
return "特效";
case ActivityType.Prop:
return "道具";
+ case ActivityType.Treasure:
+ return "宝箱";
case ActivityType.Other:
return "其他";
}
diff --git a/DungeonShooting_Godot/src/framework/activity/ActivityObject.cs b/DungeonShooting_Godot/src/framework/activity/ActivityObject.cs
index ccf9622..6e2a533 100644
--- a/DungeonShooting_Godot/src/framework/activity/ActivityObject.cs
+++ b/DungeonShooting_Godot/src/framework/activity/ActivityObject.cs
@@ -254,6 +254,16 @@
///
public Vector2I? BrushPrevPosition { get; set; }
+ ///
+ /// 默认所在层级
+ ///
+ public RoomLayerEnum DefaultLayer { get; set; }
+
+ ///
+ /// 投抛状态下的碰撞器层级
+ ///
+ public uint ThrowCollisionMask { get; set; } = PhysicsLayer.Wall;
+
// --------------------------------------------------------------------------------
//是否正在调用组件 Update 函数
@@ -278,9 +288,6 @@
//存储投抛该物体时所产生的数据
private readonly ActivityFallData _fallData = new ActivityFallData();
- //所在层级
- private RoomLayerEnum _currLayer;
-
//标记字典
private Dictionary _signMap;
@@ -650,7 +657,7 @@
///
public virtual void PutDown(RoomLayerEnum layer, bool showShadow = true)
{
- _currLayer = layer;
+ DefaultLayer = layer;
var parent = GetParent();
var root = GameApplication.Instance.World.GetRoomLayer(layer);
if (parent != root)
@@ -1490,7 +1497,7 @@
Collision.Position = Vector2.Zero;
Collision.Rotation = 0;
Collision.Scale = Vector2.One;
- CollisionMask = 1;
+ CollisionMask = ThrowCollisionMask;
CollisionLayer = _fallData.OriginCollisionLayer | PhysicsLayer.Throwing;
_fallData.UseOrigin = false;
}
@@ -1526,7 +1533,7 @@
private void ThrowOver()
{
var parent = GetParent();
- var roomLayer = GameApplication.Instance.World.GetRoomLayer(_currLayer);
+ var roomLayer = GameApplication.Instance.World.GetRoomLayer(DefaultLayer);
if (parent != roomLayer)
{
parent.RemoveChild(this);
diff --git a/DungeonShooting_Godot/src/framework/activity/ActivityObject_Init.cs b/DungeonShooting_Godot/src/framework/activity/ActivityObject_Init.cs
index 79056c5..b3955d7 100644
--- a/DungeonShooting_Godot/src/framework/activity/ActivityObject_Init.cs
+++ b/DungeonShooting_Godot/src/framework/activity/ActivityObject_Init.cs
@@ -69,6 +69,26 @@
///
public const string Id_weapon0009 = "weapon0009";
///
+ /// 名称: M1型热能狙击枪
+ /// 简介:
+ ///
+ public const string Id_weapon0010 = "weapon0010";
+ ///
+ /// 名称: weapon0011
+ /// 简介:
+ ///
+ public const string Id_weapon0011 = "weapon0011";
+ ///
+ /// 名称: P90
+ /// 简介:
+ ///
+ public const string Id_weapon0013 = "weapon0013";
+ ///
+ /// 名称: 左轮
+ /// 简介:
+ ///
+ public const string Id_weapon0014 = "weapon0014";
+ ///
/// 名称:
/// 简介:
///
@@ -94,6 +114,21 @@
///
public const string Id_bullet0005 = "bullet0005";
///
+ /// 名称: 拖尾子弹
+ /// 简介:
+ ///
+ public const string Id_bullet0006 = "bullet0006";
+ ///
+ /// 名称:
+ /// 简介:
+ ///
+ public const string Id_bullet0007 = "bullet0007";
+ ///
+ /// 名称:
+ /// 简介:
+ ///
+ public const string Id_bullet0008 = "bullet0008";
+ ///
/// 名称:
/// 简介:
///
@@ -204,6 +239,11 @@
///
public const string Id_prop5001 = "prop5001";
///
+ /// 名称: 木质宝箱
+ /// 简介: 木质宝箱
+ ///
+ public const string Id_treasure_box0001 = "treasure_box0001";
+ ///
/// 名称:
/// 简介: 地牢房间的门(东侧)
///
@@ -223,5 +263,20 @@
/// 简介: 地牢房间的门(北侧)
///
public const string Id_other_door_n = "other_door_n";
+ ///
+ /// 名称: 金币
+ /// 简介: 获得10金币
+ ///
+ public const string Id_gold_10 = "gold_10";
+ ///
+ /// 名称: 银币
+ /// 简介: 获得5金币
+ ///
+ public const string Id_gold_5 = "gold_5";
+ ///
+ /// 名称: 铜币
+ /// 简介: 获得1金币
+ ///
+ public const string Id_gold_1 = "gold_1";
}
}
diff --git a/DungeonShooting_Godot/src/framework/activity/ActivityQuality.cs b/DungeonShooting_Godot/src/framework/activity/ActivityQuality.cs
new file mode 100644
index 0000000..9d5641d
--- /dev/null
+++ b/DungeonShooting_Godot/src/framework/activity/ActivityQuality.cs
@@ -0,0 +1,39 @@
+
+///
+/// 物体品质
+///
+public enum ActivityQuality
+{
+ ///
+ /// 未设置
+ ///
+ None = 0,
+ ///
+ /// 通用物品
+ ///
+ Common = 1,
+ ///
+ /// 基础
+ ///
+ Basic = 2,
+ ///
+ /// 普通
+ ///
+ Ordinary = 3,
+ ///
+ /// 稀有
+ ///
+ Rare = 4,
+ ///
+ /// 史诗
+ ///
+ Epic = 5,
+ ///
+ /// 传说
+ ///
+ Legend = 6,
+ ///
+ /// 独一无二
+ ///
+ Unique = 7
+}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/framework/activity/ActivityType.cs b/DungeonShooting_Godot/src/framework/activity/ActivityType.cs
index 3a82149..d094992 100644
--- a/DungeonShooting_Godot/src/framework/activity/ActivityType.cs
+++ b/DungeonShooting_Godot/src/framework/activity/ActivityType.cs
@@ -45,6 +45,10 @@
///
Prop,
///
+ /// 宝箱
+ ///
+ Treasure,
+ ///
/// 其它类型
///
Other = 99,
diff --git a/DungeonShooting_Godot/src/framework/activity/CheckInteractiveResult.cs b/DungeonShooting_Godot/src/framework/activity/CheckInteractiveResult.cs
index 99b1296..fb38e21 100644
--- a/DungeonShooting_Godot/src/framework/activity/CheckInteractiveResult.cs
+++ b/DungeonShooting_Godot/src/framework/activity/CheckInteractiveResult.cs
@@ -20,6 +20,14 @@
/// 替换
///
Replace,
+ ///
+ /// 打开宝箱
+ ///
+ OpenTreasureBox,
+ ///
+ /// 其他互动类型
+ ///
+ Other,
}
///
diff --git a/DungeonShooting_Godot/src/framework/activity/hurt/HurtArea.cs b/DungeonShooting_Godot/src/framework/activity/hurt/HurtArea.cs
new file mode 100644
index 0000000..5a1ca5c
--- /dev/null
+++ b/DungeonShooting_Godot/src/framework/activity/hurt/HurtArea.cs
@@ -0,0 +1,28 @@
+using Godot;
+
+public partial class HurtArea : Area2D, IHurt
+{
+ public delegate void HurtDelegate(ActivityObject target, int damage, float angle);
+
+ public event HurtDelegate OnHurtEvent;
+
+ public ActivityObject ActivityObject { get; private set; }
+
+ public void InitActivityObject(ActivityObject activityObject)
+ {
+ ActivityObject = activityObject;
+ }
+
+ public override void _Ready()
+ {
+ Monitoring = false;
+ }
+
+ public void Hurt(ActivityObject target, int damage, float angle)
+ {
+ if (OnHurtEvent != null)
+ {
+ OnHurtEvent(target, damage, angle);
+ }
+ }
+}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/framework/activity/hurt/IHurt.cs b/DungeonShooting_Godot/src/framework/activity/hurt/IHurt.cs
new file mode 100644
index 0000000..fd27abc
--- /dev/null
+++ b/DungeonShooting_Godot/src/framework/activity/hurt/IHurt.cs
@@ -0,0 +1,13 @@
+
+using Godot;
+
+public interface IHurt
+{
+ ///
+ /// 受到伤害
+ ///
+ /// 触发伤害的对象, 为 null 表示不存在对象或者对象已经被销毁
+ /// 伤害的量
+ /// 伤害角度(弧度制)
+ void Hurt(ActivityObject target, int damage, float angle);
+}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/framework/common/NodeExtend.cs b/DungeonShooting_Godot/src/framework/common/NodeExtend.cs
index 250aea8..4c3151a 100644
--- a/DungeonShooting_Godot/src/framework/common/NodeExtend.cs
+++ b/DungeonShooting_Godot/src/framework/common/NodeExtend.cs
@@ -8,40 +8,44 @@
public static class NodeExtend
{
///
- /// 尝试将一个 Node2d 节点转换成一个 ActivityObject 对象, 如果转换失败, 则返回 null
+ /// 获取 IHurt 绑定的 ActivityObject, 没有则返回 null
///
- public static ActivityObject AsActivityObject(this Node2D node2d)
+ ///
+ ///
+ public static ActivityObject GetActivityObject(this IHurt hurt)
{
- if (node2d is ActivityObject p)
+ if (hurt is ActivityObject activityObject)
{
- return p;
+ return activityObject;
}
- var parent = node2d.GetParent();
- if (parent != null && parent is ActivityObject p2)
+
+ if (hurt is HurtArea hurtArea)
{
- return p2;
+ return hurtArea.ActivityObject;
}
- return null;
- }
-
- ///
- /// 尝试将一个 Node2d 节点转换成一个 ActivityObject 对象, 如果转换失败, 则返回 null
- ///
- public static T AsActivityObject(this Node2D node2d) where T : ActivityObject
- {
- if (node2d is T p)
- {
- return p;
- }
- var parent = node2d.GetParent();
- if (parent != null && parent is T p2)
- {
- return p2;
- }
+
return null;
}
///
+ /// 获取 IHurt 节点的坐标
+ ///
+ public static Vector2 GetPosition(this IHurt hurt)
+ {
+ if (hurt is ActivityObject role)
+ {
+ return role.GetCenterPosition();
+ }
+
+ if (hurt is Node2D node2D)
+ {
+ return node2D.GlobalPosition;
+ }
+
+ return Vector2.Zero;
+ }
+
+ ///
/// 将节点插入的房间物体根节点
///
/// 实例
diff --git a/DungeonShooting_Godot/src/framework/common/Utils.cs b/DungeonShooting_Godot/src/framework/common/Utils.cs
index 04657df..4302194 100644
--- a/DungeonShooting_Godot/src/framework/common/Utils.cs
+++ b/DungeonShooting_Godot/src/framework/common/Utils.cs
@@ -530,4 +530,31 @@
}
return arr;
}
+
+ ///
+ /// 根据金币数量获取金币对象id数组
+ ///
+ public static string[] GetGoldList(int gold)
+ {
+ var list = new List();
+ while (gold > 0)
+ {
+ if (gold >= 10)
+ {
+ list.Add(ActivityObject.Ids.Id_gold_10);
+ gold -= 10;
+ }
+ else if (gold >= 5)
+ {
+ list.Add(ActivityObject.Ids.Id_gold_5);
+ gold -= 5;
+ }
+ else
+ {
+ list.Add(ActivityObject.Ids.Id_gold_1);
+ gold -= 1;
+ }
+ }
+ return list.ToArray();
+ }
}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/framework/map/DungeonConfig.cs b/DungeonShooting_Godot/src/framework/map/DungeonConfig.cs
index 313e874..f05f144 100644
--- a/DungeonShooting_Godot/src/framework/map/DungeonConfig.cs
+++ b/DungeonShooting_Godot/src/framework/map/DungeonConfig.cs
@@ -41,6 +41,56 @@
///
public int RoomCount => BattleRoomCount + RewardRoomCount + ShopRoomCount + OutRoomCount + BossRoomCount;
+ ///
+ /// 房间最大层级
+ ///
+ public int MaxLayer = 5;
+
+ ///
+ /// 房间最小间隔
+ ///
+ public int RoomMinInterval = 2;
+
+ ///
+ /// 房间最大间隔
+ ///
+ public int RoomMaxInterval = 5;
+
+ ///
+ /// 房间横轴最小分散程度
+ ///
+ public float RoomHorizontalMinDispersion = -0.6f;
+
+ ///
+ /// 房间横轴最大分散程度
+ ///
+ public float RoomHorizontalMaxDispersion = 0.6f;
+
+ ///
+ /// 房间纵轴最小分散程度
+ ///
+ public float RoomVerticalMinDispersion = -0.6f;
+
+ ///
+ /// 房间纵轴最大分散程度
+ ///
+ public float RoomVerticalMaxDispersion = 0.6f;
+
+ ///
+ /// 是否启用区域限制
+ ///
+ public bool EnableLimitRange = true;
+
+ ///
+ /// 横轴范围
+ ///
+ public int RangeX = 120;
+
+ ///
+ /// 纵轴范围
+ ///
+ public int RangeY = 120;
+
//----------------------- 地牢编辑使用 -------------------------
///
/// 是否指定了房间
diff --git a/DungeonShooting_Godot/src/framework/map/DungeonGenerator.cs b/DungeonShooting_Godot/src/framework/map/DungeonGenerator.cs
index 1b400f8..cba1da9 100644
--- a/DungeonShooting_Godot/src/framework/map/DungeonGenerator.cs
+++ b/DungeonShooting_Godot/src/framework/map/DungeonGenerator.cs
@@ -65,25 +65,9 @@
private int _id;
//下一个房间类型
- private DungeonRoomType _nextRoomType = DungeonRoomType.Battle;
-
- //间隔
- private int _roomMinInterval = 2;
- private int _roomMaxInterval = 5;
-
- //房间横轴分散程度
- private float _roomHorizontalMinDispersion = -0.6f;
- private float _roomHorizontalMaxDispersion = 0.6f;
-
- //房间纵轴分散程度
- private float _roomVerticalMinDispersion = -0.6f;
- private float _roomVerticalMaxDispersion = 0.6f;
-
- //房间最大层级
- private int _maxLayer = 5;
+ private DungeonRoomType _nextRoomType = DungeonRoomType.None;
//区域限制
- private bool _enableLimitRange = true;
private int _rangeX = 120;
private int _rangeY = 120;
@@ -97,25 +81,18 @@
//地牢房间规则处理类
private DungeonRule _rule;
-
- private enum GenerateRoomErrorCode
- {
- NoError,
- //超出区域
- OutArea,
- //没有合适的位置
- NoSuitableLocation
- // //碰到其他房间或过道
- // HasCollision,
- // //没有合适的门
- // NoProperDoor,
- }
+
+ //上一个房间
+ private RoomInfo prevRoomInfo = null;
+ private readonly List _tempList = new List();
public DungeonGenerator(DungeonConfig config, SeedRandom seedRandom)
{
Config = config;
Random = seedRandom;
RoomGroup = GameApplication.Instance.RoomConfig[config.GroupName];
+ _rangeX = config.RangeX;
+ _rangeY = config.RangeY;
//验证该组是否满足生成地牢的条件
var result = DungeonManager.CheckDungeon(config.GroupName);
@@ -180,62 +157,23 @@
if (StartRoomInfo != null) return false;
_rule = rule;
- _nextRoomType = _rule.GetNextRoomType(null);
- //用于排除上一级房间
- var excludePrevRoom = new List();
- //上一个房间
- RoomInfo prevRoomInfo = null;
-
- var chainTryCount = 0;
- var chainMaxTryCount = 3;
-
//最大尝试次数
- var maxTryCount = 1000;
+ var maxTryCount = 2000;
//当前尝试次数
var currTryCount = 0;
//如果房间数量不够, 就一直生成
- while (!_rule.CanOverGenerator() || EndRoomInfos.Count == 0)
+ while (!_rule.CanOverGenerator())
{
+ if (_nextRoomType == DungeonRoomType.None)
+ {
+ _nextRoomType = _rule.GetNextRoomType(prevRoomInfo);
+ }
var nextRoomType = _nextRoomType;
//上一个房间
- RoomInfo tempPrevRoomInfo;
- if (nextRoomType == DungeonRoomType.Inlet)
- {
- tempPrevRoomInfo = null;
- }
- else if (nextRoomType == DungeonRoomType.Boss)
- {
- tempPrevRoomInfo = FindMaxLayerRoom(excludePrevRoom);
- }
- else if (nextRoomType == DungeonRoomType.Outlet || nextRoomType == DungeonRoomType.Reward || nextRoomType == DungeonRoomType.Shop || nextRoomType == DungeonRoomType.Event)
- {
- tempPrevRoomInfo = prevRoomInfo;
- }
- else if (nextRoomType == DungeonRoomType.Battle)
- {
- if (chainTryCount < chainMaxTryCount)
- {
- if (prevRoomInfo != null && prevRoomInfo.Layer >= _maxLayer - 1) //层数太高, 下一个房间生成在低层级
- {
- tempPrevRoomInfo = RoundRoomLessThanLayer(Mathf.Max(1, _maxLayer / 2));
- }
- else
- {
- tempPrevRoomInfo = prevRoomInfo;
- }
- }
- else
- {
- tempPrevRoomInfo = Random.RandomChoose(RoomInfos);
- }
- }
- else
- {
- tempPrevRoomInfo = Random.RandomChoose(RoomInfos);
- }
+ var tempPrevRoomInfo = _rule.GetConnectPrevRoom(prevRoomInfo, nextRoomType);
//生成下一个房间
var errorCode = GenerateRoom(tempPrevRoomInfo, nextRoomType, out var nextRoom);
@@ -250,7 +188,6 @@
else if (nextRoomType == DungeonRoomType.Boss) //boss房间
{
BossRoomInfos.Add(nextRoom);
- excludePrevRoom.Clear();
}
else if (nextRoomType == DungeonRoomType.Outlet)
{
@@ -259,8 +196,6 @@
else if (nextRoomType == DungeonRoomType.Battle)
{
BattleRoomInfos.Add(nextRoom);
- chainTryCount = 0;
- chainMaxTryCount = Random.RandomRangeInt(1, 3);
}
else if (nextRoomType == DungeonRoomType.Reward)
{
@@ -271,36 +206,12 @@
ShopRoomInfos.Add(nextRoom);
}
prevRoomInfo = nextRoom;
- _nextRoomType = _rule.GetNextRoomType(prevRoomInfo);
+ _rule.GenerateRoomSuccess(tempPrevRoomInfo, nextRoom);
+ _nextRoomType = _rule.GetNextRoomType(nextRoom);
}
else //生成失败
{
- if (nextRoomType == DungeonRoomType.Boss)
- {
- //生成boss房间成功
- excludePrevRoom.Add(tempPrevRoomInfo);
- if (excludePrevRoom.Count >= RoomInfos.Count)
- {
- //全都没找到合适的, 那就再来一遍
- excludePrevRoom.Clear();
- }
- }
- else if (nextRoomType == DungeonRoomType.Outlet)
- {
- //生成结束房间失败, 那么只能回滚boss房间
- if (prevRoomInfo != null)
- {
- var bossPrev = prevRoomInfo.Prev;
- BossRoomInfos.Remove(prevRoomInfo);
- RollbackRoom(prevRoomInfo);
- _nextRoomType = _rule.GetNextRoomType(bossPrev);
- prevRoomInfo = null;
- }
- }
- else if (nextRoomType == DungeonRoomType.Battle)
- {
- chainTryCount++;
- }
+ _rule.GenerateRoomFail(tempPrevRoomInfo, nextRoomType);
//Debug.Log("生成第" + (_count + 1) + "个房间失败! 失败原因: " + errorCode);
if (errorCode == GenerateRoomErrorCode.OutArea)
@@ -326,12 +237,12 @@
_roomGrid.Clear();
Debug.Log("房间总数: " + RoomInfos.Count);
-
+ Debug.Log("尝试次数: " + currTryCount);
return true;
}
//生成房间
- private GenerateRoomErrorCode GenerateRoom(RoomInfo prevRoomInfo, DungeonRoomType roomType, out RoomInfo resultRoomInfo)
+ private GenerateRoomErrorCode GenerateRoom(RoomInfo prevRoom, DungeonRoomType roomType, out RoomInfo resultRoomInfo)
{
// if (_count >= _config.RoomCount)
// {
@@ -348,7 +259,7 @@
{
//随机选择一个房间
var list = RoomGroup.GetRoomList(roomType);
- if (list.Count == 0) //如果没有指定类型的房间, 就生成战斗房间
+ if (list.Count == 0) //如果没有指定类型的房间, 或者房间数量不够, 就生成战斗房间
{
roomSplit = RoomGroup.GetRandomRoom(DungeonRoomType.Battle);
}
@@ -363,9 +274,9 @@
//房间大小
room.Size = new Vector2I((int)roomSplit.RoomInfo.Size.X, (int)roomSplit.RoomInfo.Size.Y);
- if (prevRoomInfo != null) //表示这不是第一个房间, 就得判断当前位置下的房间是否被遮挡
+ if (prevRoom != null) //表示这不是第一个房间, 就得判断当前位置下的房间是否被遮挡
{
- room.Layer = prevRoomInfo.Layer + 1;
+ room.Layer = prevRoom.Layer + 1;
if (_currMaxLayer < room.Layer)
{
_currMaxLayer = room.Layer;
@@ -384,50 +295,40 @@
for (; tryCount < maxTryCount; tryCount++)
{
//下一个房间方向
- var direction = Random.RandomRangeInt(0, 3);
+ var direction = _rule.GetNextRoomDoorDirection(prevRoom, roomType);
//房间间隔
- var space = Random.RandomRangeInt(_roomMinInterval, _roomMaxInterval);
- if (direction == 0 || direction == 2)
+ var space = _rule.GetNextRoomInterval(prevRoom, roomType, direction);
+ if (direction == RoomDirection.Up || direction == RoomDirection.Down)
{
space += 1;
}
//中心偏移
- int offset;
- if (direction == 0 || direction == 2)
- {
- offset = Random.RandomRangeInt((int)(prevRoomInfo.Size.X * _roomVerticalMinDispersion),
- (int)(prevRoomInfo.Size.X * _roomVerticalMaxDispersion));
- }
- else
- {
- offset = Random.RandomRangeInt((int)(prevRoomInfo.Size.Y * _roomHorizontalMinDispersion),
- (int)(prevRoomInfo.Size.Y * _roomHorizontalMaxDispersion));
- }
+ var offset = _rule.GetNextRoomOffset(prevRoom, roomType, direction);
//计算房间位置
- if (direction == 0) //上
+ if (direction == RoomDirection.Up) //上
{
- room.Position = new Vector2I(prevRoomInfo.Position.X + offset,
- prevRoomInfo.Position.Y - room.Size.Y - space);
+ room.Position = new Vector2I(prevRoom.Position.X + offset,
+ prevRoom.Position.Y - room.Size.Y - space);
}
- else if (direction == 1) //右
+ else if (direction == RoomDirection.Right) //右
{
- room.Position = new Vector2I(prevRoomInfo.Position.X + prevRoomInfo.Size.Y + space,
- prevRoomInfo.Position.Y + offset);
+ room.Position = new Vector2I(prevRoom.Position.X + prevRoom.Size.Y + space,
+ prevRoom.Position.Y + offset);
}
- else if (direction == 2) //下
+ else if (direction == RoomDirection.Down) //下
{
- room.Position = new Vector2I(prevRoomInfo.Position.X + offset,
- prevRoomInfo.Position.Y + prevRoomInfo.Size.Y + space);
+ room.Position = new Vector2I(prevRoom.Position.X + offset,
+ prevRoom.Position.Y + prevRoom.Size.Y + space);
}
- else if (direction == 3) //左
+ else if (direction == RoomDirection.Left) //左
{
- room.Position = new Vector2I(prevRoomInfo.Position.X - room.Size.X - space,
- prevRoomInfo.Position.Y + offset);
+ room.Position = new Vector2I(prevRoom.Position.X - room.Size.X - space,
+ prevRoom.Position.Y + offset);
}
//是否在限制区域内
- if (_enableLimitRange)
+ if (Config.EnableLimitRange)
{
if (room.GetHorizontalStart() < -_rangeX || room.GetHorizontalEnd() > _rangeX ||
room.GetVerticalStart() < -_rangeY || room.GetVerticalEnd() > _rangeY)
@@ -449,7 +350,7 @@
_roomGrid.SetRect(room.Position, room.Size, true);
//找门, 与上一个房间是否能连通
- if (!ConnectDoor(prevRoomInfo, room))
+ if (!ConnectDoor(prevRoom, room))
{
_roomGrid.RemoveRect(room.Position, room.Size);
//Debug.Log("链接通道失败");
@@ -474,23 +375,41 @@
}
_id++;
- room.Prev = prevRoomInfo;
- if (prevRoomInfo != null)
+ room.Prev = prevRoom;
+ if (prevRoom != null)
{
- prevRoomInfo.Next.Add(room);
+ prevRoom.Next.Add(room);
}
resultRoomInfo = room;
return GenerateRoomErrorCode.NoError;
}
- //回滚一个房间
- private bool RollbackRoom(RoomInfo roomInfo)
+ ///
+ /// 设置上一个房间
+ ///
+ public void SetPrevRoom(RoomInfo roomInfo)
+ {
+ prevRoomInfo = roomInfo;
+ }
+
+ ///
+ /// 回滚一个房间
+ ///
+ public bool RollbackRoom(RoomInfo roomInfo)
{
if (roomInfo.Next.Count > 0)
{
Debug.LogError("当前房间还有连接的子房间, 不能回滚!");
return false;
}
+
+ if (!roomInfo.CanRollback)
+ {
+ Debug.LogError("当前房间不能回滚!");
+ return false;
+ }
+ var prevRoom = roomInfo.Prev;
+
//退掉占用的房间区域和过道占用区域
_roomGrid.RemoveRect(roomInfo.Position, roomInfo.Size);
foreach (var rect2 in roomInfo.AisleArea)
@@ -499,7 +418,7 @@
}
//roomInfo.Doors[0].
- if (roomInfo.Prev != null)
+ if (prevRoom != null)
{
roomInfo.Prev.Next.Remove(roomInfo);
}
@@ -512,26 +431,54 @@
}
RoomInfos.Remove(roomInfo);
+ switch (roomInfo.RoomType)
+ {
+ case DungeonRoomType.Battle:
+ BattleRoomInfos.Remove(roomInfo);
+ break;
+ case DungeonRoomType.Inlet:
+ StartRoomInfo = null;
+ break;
+ case DungeonRoomType.Outlet:
+ EndRoomInfos.Remove(roomInfo);
+ break;
+ case DungeonRoomType.Boss:
+ BossRoomInfos.Remove(roomInfo);
+ break;
+ case DungeonRoomType.Reward:
+ RewardRoomInfos.Remove(roomInfo);
+ break;
+ case DungeonRoomType.Shop:
+ ShopRoomInfos.Remove(roomInfo);
+ break;
+ case DungeonRoomType.Event:
+ break;
+ }
+
roomInfo.Destroy();
_id--;
+ _nextRoomType = DungeonRoomType.None;
+ SetPrevRoom(prevRoom);
return true;
}
///
/// 寻找层级最高的房间
///
+ /// 指定房间类型, 如果传 None 则表示选择所有类型房间
/// 排除的房间
- private RoomInfo FindMaxLayerRoom(List exclude)
+ public RoomInfo FindMaxLayerRoom(DungeonRoomType roomType, List exclude = null)
{
RoomInfo temp = null;
foreach (var roomInfo in RoomInfos)
{
- if (temp == null || roomInfo.Layer > temp.Layer)
+ if (roomInfo.CanRollback)
{
- if (exclude == null || !exclude.Contains(roomInfo))
- {
- temp = roomInfo;
- }
+ continue;
+ }
+ if ((temp == null || roomInfo.Layer > temp.Layer) && (roomType == DungeonRoomType.None || (roomInfo.RoomType & roomType) != DungeonRoomType.None) && (exclude == null || !exclude.Contains(roomInfo)))
+ {
+ temp = roomInfo;
}
}
@@ -541,18 +488,83 @@
///
/// 随机抽取层级小于 layer 的房间
///
- private RoomInfo RoundRoomLessThanLayer(int layer)
+ /// 指定房间类型, 如果传 None 则表示选择所有类型房间
+ ///
+ /// 排除的房间
+ public RoomInfo RandomRoomLessThanLayer(DungeonRoomType roomType, int layer, List exclude = null)
{
- var list = new List();
+ _tempList.Clear();
foreach (var roomInfo in RoomInfos)
{
- if (roomInfo.Layer < layer)
+ if (roomInfo.CanRollback)
{
- list.Add(roomInfo);
+ continue;
+ }
+ if (roomInfo.Layer < layer && (roomType == DungeonRoomType.None || (roomInfo.RoomType & roomType) != DungeonRoomType.None) && (exclude == null || !exclude.Contains(roomInfo)))
+ {
+ _tempList.Add(roomInfo);
}
}
- return Random.RandomChoose(list);
+ return Random.RandomChoose(_tempList);
+ }
+
+ ///
+ /// 随机抽取层级大于 layer 的房间
+ ///
+ /// 指定房间类型, 如果传 None 则表示选择所有类型房间
+ ///
+ /// 排除的房间
+ public RoomInfo RandomRoomGreaterThanLayer(DungeonRoomType roomType, int layer, List exclude = null)
+ {
+ _tempList.Clear();
+ foreach (var roomInfo in RoomInfos)
+ {
+ if (roomInfo.CanRollback)
+ {
+ continue;
+ }
+ if (roomInfo.Layer > layer && (roomType == DungeonRoomType.None || (roomInfo.RoomType & roomType) != DungeonRoomType.None) && (exclude == null || !exclude.Contains(roomInfo)))
+ {
+ _tempList.Add(roomInfo);
+ }
+ }
+
+ return Random.RandomChoose(_tempList);
+ }
+
+ ///
+ /// 随机抽取房间
+ ///
+ /// 指定房间类型, 如果传 None 则表示选择所有类型房间
+ public RoomInfo GetRandomRoom(DungeonRoomType roomType)
+ {
+ _tempList.Clear();
+ foreach (var roomInfo in RoomInfos)
+ {
+ if (roomInfo.CanRollback)
+ {
+ continue;
+ }
+
+ if (roomType == DungeonRoomType.None || (roomInfo.RoomType & roomType) != DungeonRoomType.None)
+ {
+ _tempList.Add(roomInfo);
+ }
+ }
+
+ return Random.RandomChoose(_tempList);
+ }
+
+ ///
+ /// 提交所有可以回滚的房间
+ ///
+ public void SubmitCanRollbackRoom()
+ {
+ foreach (var roomInfo in RoomInfos)
+ {
+ roomInfo.CanRollback = false;
+ }
}
///
diff --git a/DungeonShooting_Godot/src/framework/map/DungeonRoomType.cs b/DungeonShooting_Godot/src/framework/map/DungeonRoomType.cs
index b08eec4..64bf354 100644
--- a/DungeonShooting_Godot/src/framework/map/DungeonRoomType.cs
+++ b/DungeonShooting_Godot/src/framework/map/DungeonRoomType.cs
@@ -1,35 +1,42 @@
+using System;
+
///
/// 模板房间类型
///
+[Flags]
public enum DungeonRoomType
{
///
+ /// 无
+ ///
+ None = 0,
+ ///
/// 普通战斗房间, 进入该房间时会关上门, 并刷出若干波敌人, 消灭所有敌人后开门
///
- Battle,
+ Battle = 0b1,
///
/// 起始房间, 由上一层地牢的结束房间进入该房间, 每层包含一个起始房间
///
- Inlet,
+ Inlet = 0b10,
///
/// 结束房间, 进入另一层地牢, 每层只是包含一个结束房间
///
- Outlet,
+ Outlet = 0b100,
///
/// boss战房间, 进入房间时会关上没, 刷出boss, 消灭boss后开门
///
- Boss,
+ Boss = 0b1000,
///
/// 奖励房间, 给予玩家武器或者道具奖励的房间
///
- Reward,
+ Reward = 0b10000,
///
/// 商店, 玩家买卖道具装备的房间
///
- Shop,
+ Shop = 0b100000,
///
/// 事件房间, 触发剧情或者解锁NPC的房间
///
- Event,
+ Event = 0b1000000,
}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/framework/map/DungeonRule.cs b/DungeonShooting_Godot/src/framework/map/DungeonRule.cs
index 7357120..91cb309 100644
--- a/DungeonShooting_Godot/src/framework/map/DungeonRule.cs
+++ b/DungeonShooting_Godot/src/framework/map/DungeonRule.cs
@@ -10,20 +10,55 @@
public SeedRandom Random { get; }
+ public DungeonRoomGroup RoomGroup { get; }
+
public DungeonRule(DungeonGenerator generator)
{
Generator = generator;
Config = generator.Config;
Random = generator.Random;
+ RoomGroup = generator.RoomGroup;
}
///
/// 是否可以结束生成了
///
public abstract bool CanOverGenerator();
+
+ ///
+ /// 获取指定房间类型与之相连的上一个房间对象, prevRoom 可能为 null
+ ///
+ public abstract RoomInfo GetConnectPrevRoom(RoomInfo prevRoom, DungeonRoomType nextRoomType);
///
- /// 计算下一个房间类型
+ /// 计算下一个房间类型, prevRoom 可能为 null
///
- public abstract DungeonRoomType GetNextRoomType(RoomInfo prev);
+ public abstract DungeonRoomType GetNextRoomType(RoomInfo prevRoom);
+
+ ///
+ /// 执行生成指定房间成功, prevRoom 可能为 null
+ ///
+ public abstract void GenerateRoomSuccess(RoomInfo prevRoom, RoomInfo roomInfo);
+
+ ///
+ /// 执行生成指定类型房间失败, prevRoom 可能为 null
+ ///
+ public abstract void GenerateRoomFail(RoomInfo prevRoom, DungeonRoomType roomType);
+
+ //-------------------------- 下面的函数 prevRoom 一定不会为 null --------------------------
+
+ ///
+ /// 获取下一个房间的方向, prevRoom 一定不为 null
+ ///
+ public abstract RoomDirection GetNextRoomDoorDirection(RoomInfo prevRoom, DungeonRoomType roomType);
+
+ ///
+ /// 获取下一个房间的间隔距离, prevRoom 一定不为 null
+ ///
+ public abstract int GetNextRoomInterval(RoomInfo prevRoom, DungeonRoomType roomType, RoomDirection direction);
+
+ ///
+ /// 获取下一个房间相对于当前房间的原点偏移 (单位: 格), prevRoom 一定不为 null
+ ///
+ public abstract int GetNextRoomOffset(RoomInfo prevRoom, DungeonRoomType roomType, RoomDirection direction);
}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/framework/map/GenerateRoomErrorCode.cs b/DungeonShooting_Godot/src/framework/map/GenerateRoomErrorCode.cs
new file mode 100644
index 0000000..c9e1c3e
--- /dev/null
+++ b/DungeonShooting_Godot/src/framework/map/GenerateRoomErrorCode.cs
@@ -0,0 +1,13 @@
+
+public enum GenerateRoomErrorCode
+{
+ NoError,
+ //超出区域
+ OutArea,
+ //没有合适的位置
+ NoSuitableLocation
+ // //碰到其他房间或过道
+ // HasCollision,
+ // //没有合适的门
+ // NoProperDoor,
+}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/framework/map/RandomPool.cs b/DungeonShooting_Godot/src/framework/map/RandomPool.cs
index 50d0e33..3328785 100644
--- a/DungeonShooting_Godot/src/framework/map/RandomPool.cs
+++ b/DungeonShooting_Godot/src/framework/map/RandomPool.cs
@@ -114,8 +114,8 @@
private void FillRewardRoom(RoomPreinstall preinstall)
{
var wave = GetOrCreateWave(preinstall, 0);
- var mark = CreateMark(ActivityType.Prop, 0, (preinstall.RoomInfo.Waypoints + new Vector2(0.5f, 0.5f)) * GameConfig.TileCellSize);
- mark.Id = GetRandomProp().Id;
+ var mark = CreateMark(ActivityType.Treasure, 0, (preinstall.RoomInfo.Waypoints + new Vector2(0.5f, 0.5f)) * GameConfig.TileCellSize);
+ mark.Id = "treasure_box0001";
wave.Add(mark);
}
diff --git a/DungeonShooting_Godot/src/framework/map/RoomDirection.cs b/DungeonShooting_Godot/src/framework/map/RoomDirection.cs
new file mode 100644
index 0000000..0befbc9
--- /dev/null
+++ b/DungeonShooting_Godot/src/framework/map/RoomDirection.cs
@@ -0,0 +1,11 @@
+
+///
+/// 生成房间的方向
+///
+public enum RoomDirection
+{
+ Up,
+ Down,
+ Left,
+ Right
+}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/framework/map/preinstall/PreinstallMarkManager.cs b/DungeonShooting_Godot/src/framework/map/preinstall/PreinstallMarkManager.cs
index cde2d24..f292bd4 100644
--- a/DungeonShooting_Godot/src/framework/map/preinstall/PreinstallMarkManager.cs
+++ b/DungeonShooting_Godot/src/framework/map/preinstall/PreinstallMarkManager.cs
@@ -8,11 +8,11 @@
///
/// 随机武器
///
- public static readonly RandomActivityBase Weapon = new RandomActivityBase()
+ public static readonly RandomActivityBase RandomWeapon = new RandomActivityBase()
{
Id = "$RandomGun",
Name = "随机武器",
- Type = (int)ActivityType.Other,
+ Type = ActivityType.Other,
Icon = ResourcePath.resource_sprite_ui_commonIcon_Dice_png,
ShowInMapEditor = true
};
@@ -20,11 +20,11 @@
///
/// 随机敌人
///
- public static readonly RandomActivityBase Enemy = new RandomActivityBase()
+ public static readonly RandomActivityBase RandomEnemy = new RandomActivityBase()
{
Id = "$RandomEnemy",
Name = "随机敌人",
- Type = (int)ActivityType.Other,
+ Type = ActivityType.Other,
Icon = ResourcePath.resource_sprite_ui_commonIcon_Dice_png,
ShowInMapEditor = true
};
@@ -32,17 +32,16 @@
///
/// 随机道具
///
- public static readonly RandomActivityBase Prop = new RandomActivityBase()
+ public static readonly RandomActivityBase RandomProp = new RandomActivityBase()
{
Id = "$RandomProp",
Name = "随机道具",
- Type = (int)ActivityType.Other,
+ Type = ActivityType.Other,
Icon = ResourcePath.resource_sprite_ui_commonIcon_Dice_png,
ShowInMapEditor = true
};
- private static Dictionary> _cache =
- new Dictionary>();
+ private static Dictionary> _cache = new Dictionary>();
private static bool _init = false;
@@ -67,17 +66,17 @@
///
public static ExcelConfig.ActivityBase GetMarkConfig(string id)
{
- if (Weapon.Id == id)
+ if (RandomWeapon.Id == id)
{
- return Weapon;
+ return RandomWeapon;
}
- else if (Enemy.Id == id)
+ else if (RandomEnemy.Id == id)
{
- return Enemy;
+ return RandomEnemy;
}
- else if (Prop.Id == id)
+ else if (RandomProp.Id == id)
{
- return Prop;
+ return RandomProp;
}
ExcelConfig.ActivityBase_Map.TryGetValue(id, out var activityBase);
diff --git a/DungeonShooting_Godot/src/framework/map/preinstall/RoomPreinstall.cs b/DungeonShooting_Godot/src/framework/map/preinstall/RoomPreinstall.cs
index 458b8bc..47a70cc 100644
--- a/DungeonShooting_Godot/src/framework/map/preinstall/RoomPreinstall.cs
+++ b/DungeonShooting_Godot/src/framework/map/preinstall/RoomPreinstall.cs
@@ -122,17 +122,17 @@
if (activityBase is RandomActivityBase) //随机物体
{
- if (markInfoItem.Id == PreinstallMarkManager.Weapon.Id) //随机武器
+ if (markInfoItem.Id == PreinstallMarkManager.RandomWeapon.Id) //随机武器
{
mark.Id = world.RandomPool.GetRandomWeapon()?.Id;
mark.ActivityType = ActivityType.Weapon;
}
- else if (markInfoItem.Id == PreinstallMarkManager.Enemy.Id) //随机敌人
+ else if (markInfoItem.Id == PreinstallMarkManager.RandomEnemy.Id) //随机敌人
{
mark.Id = world.RandomPool.GetRandomEnemy()?.Id;
mark.ActivityType = ActivityType.Enemy;
}
- else if (markInfoItem.Id == PreinstallMarkManager.Prop.Id) //随机道具
+ else if (markInfoItem.Id == PreinstallMarkManager.RandomProp.Id) //随机道具
{
mark.Id = world.RandomPool.GetRandomProp()?.Id;
mark.ActivityType = ActivityType.Prop;
@@ -422,7 +422,7 @@
//获取物体默认所在层级
private RoomLayerEnum GetDefaultLayer(ActivityMark activityMark)
{
- if (activityMark.ActivityType == ActivityType.Player || activityMark.ActivityType == ActivityType.Enemy)
+ if (activityMark.ActivityType == ActivityType.Player || activityMark.ActivityType == ActivityType.Enemy || activityMark.ActivityType == ActivityType.Treasure)
{
return RoomLayerEnum.YSortLayer;
}
diff --git a/DungeonShooting_Godot/src/framework/map/room/RoomInfo.cs b/DungeonShooting_Godot/src/framework/map/room/RoomInfo.cs
index e257b69..02fb5fa 100644
--- a/DungeonShooting_Godot/src/framework/map/room/RoomInfo.cs
+++ b/DungeonShooting_Godot/src/framework/map/room/RoomInfo.cs
@@ -139,6 +139,12 @@
/// 导航网格对象
///
public NavigationRegion2D NavigationRegion { get; set; }
+
+ ///
+ /// 在 DungeonGenerator 中是否可以回滚, 如果可以回滚, 那么当前房间就只会有一个 NextRoom
+ ///
+ public bool CanRollback { get; set; } = false;
+
public bool IsDestroyed { get; private set; }
private bool _openDoorFlag = true;
diff --git a/DungeonShooting_Godot/src/framework/map/serialize/room/DungeonRoomGroup.cs b/DungeonShooting_Godot/src/framework/map/serialize/room/DungeonRoomGroup.cs
index df4b135..e48086f 100644
--- a/DungeonShooting_Godot/src/framework/map/serialize/room/DungeonRoomGroup.cs
+++ b/DungeonShooting_Godot/src/framework/map/serialize/room/DungeonRoomGroup.cs
@@ -160,6 +160,7 @@
foreach (var roomType in Enum.GetValues())
{
+ if (roomType == DungeonRoomType.None) continue;
InitAdRewardWeight(roomType, random);
}
}
diff --git a/DungeonShooting_Godot/src/game/GameApplication.cs b/DungeonShooting_Godot/src/game/GameApplication.cs
index 32add5e..bef0085 100644
--- a/DungeonShooting_Godot/src/game/GameApplication.cs
+++ b/DungeonShooting_Godot/src/game/GameApplication.cs
@@ -88,7 +88,8 @@
public GameApplication()
{
Instance = this;
- TargetFps = (int)DisplayServer.ScreenGetRefreshRate();
+ //TargetFps = 20;
+ TargetFps = Mathf.RoundToInt(DisplayServer.ScreenGetRefreshRate());
Utils.InitRandom();
diff --git a/DungeonShooting_Godot/src/game/activity/box/TreasureBox.cs b/DungeonShooting_Godot/src/game/activity/box/TreasureBox.cs
new file mode 100644
index 0000000..ff8883c
--- /dev/null
+++ b/DungeonShooting_Godot/src/game/activity/box/TreasureBox.cs
@@ -0,0 +1,42 @@
+using Godot;
+
+///
+/// 宝箱
+///
+[Tool]
+public partial class TreasureBox : ActivityObject, IHurt
+{
+ public bool IsOpen { get; private set; }
+
+ public override void OnInit()
+ {
+ AnimatedSprite.AnimationFinished += OnAnimationFinished;
+ }
+
+ public override CheckInteractiveResult CheckInteractive(ActivityObject master)
+ {
+ return new CheckInteractiveResult(this, !IsOpen, CheckInteractiveResult.InteractiveType.OpenTreasureBox);
+ }
+
+ public override void Interactive(ActivityObject master)
+ {
+ if (IsOpen)
+ {
+ return;
+ }
+
+ IsOpen = true;
+ AnimatedSprite.Play(AnimatorNames.Open);
+ }
+
+ private void OnAnimationFinished()
+ {
+ var weapon = Create(World.RandomPool.GetRandomProp());
+ weapon.Throw(Position, 2, 95, new Vector2(0, 11), 0);
+ }
+
+ public void Hurt(ActivityObject target, int damage, float angle)
+ {
+ PlayHitAnimation();
+ }
+}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/game/activity/bullet/explode/Explode.cs b/DungeonShooting_Godot/src/game/activity/bullet/explode/Explode.cs
index 637b9b3..17edff3 100644
--- a/DungeonShooting_Godot/src/game/activity/bullet/explode/Explode.cs
+++ b/DungeonShooting_Godot/src/game/activity/bullet/explode/Explode.cs
@@ -70,6 +70,7 @@
CollisionShape = GetNode("CollisionShape2D");
CircleShape = (CircleShape2D)CollisionShape.Shape;
AnimationPlayer.AnimationFinished += OnAnimationFinish;
+ AreaEntered += OnArea2dEntered;
BodyEntered += OnBodyEntered;
}
@@ -133,34 +134,45 @@
private void OnBodyEntered(Node2D node)
{
- var o = node.AsActivityObject();
- if (o != null)
+ if (node is IHurt hurt)
{
- var temp = o.Position - Position;
- var len = temp.Length();
- var angle = temp.Angle();
-
- if (len <= _hitRadius) //在伤害半径内
+ HandlerCollision(hurt);
+ }
+ else if (node is Bullet bullet) //是子弹
+ {
+ if (bullet is BoomBullet boomBullet) //如果是爆炸子弹, 则直接销毁
{
- if (o is Role role) //是角色
- {
- role.CallDeferred(nameof(role.Hurt), BulletData.TriggerRole.IsDestroyed ? null : BulletData.TriggerRole, _harm, angle);
- }
- else if (o is Bullet bullet) //是子弹
- {
- if (bullet is BoomBullet boomBullet) //如果是爆炸子弹, 则直接销毁
- {
- boomBullet.PlayBoom();
- }
- bullet.Destroy();
- return;
- }
+ boomBullet.PlayBoom();
}
-
- if (len <= _repelledRadius) //击退半径内
+ bullet.Destroy();
+ }
+ }
+
+ private void OnArea2dEntered(Area2D other)
+ {
+ if (other is IHurt hurt)
+ {
+ HandlerCollision(hurt);
+ }
+ }
+
+ private void HandlerCollision(IHurt hurt)
+ {
+ var temp = hurt.GetPosition() - Position;
+ var len = temp.Length();
+ var angle = temp.Angle();
+
+ if (len <= _hitRadius) //在伤害半径内
+ {
+ hurt.Hurt(BulletData.TriggerRole.IsDestroyed ? null : BulletData.TriggerRole, _harm, angle);
+ }
+
+ if (len <= _repelledRadius) //击退半径内
+ {
+ var o = hurt.GetActivityObject();
+ if (o != null)
{
var repelled = (_repelledRadius - len) / _repelledRadius * _maxRepelled;
- //o.MoveController.SetAllVelocity(Vector2.Zero);
o.AddRepelForce(Vector2.FromAngle(angle) * repelled);
}
}
diff --git a/DungeonShooting_Godot/src/game/activity/bullet/laser/Laser.cs b/DungeonShooting_Godot/src/game/activity/bullet/laser/Laser.cs
index de08f5b..cbde60e 100644
--- a/DungeonShooting_Godot/src/game/activity/bullet/laser/Laser.cs
+++ b/DungeonShooting_Godot/src/game/activity/bullet/laser/Laser.cs
@@ -45,7 +45,6 @@
//开启的协程
private List _coroutineList;
private float _pixelScale;
- private float _speed = 2000;
private Tween _tween;
private bool _init = false;
@@ -65,6 +64,7 @@
_pixelScale = 1f / LineSprite.Texture.GetHeight();
AreaEntered += OnArea2dEntered;
+ BodyEntered += OnBodyEntered;
_init = true;
}
@@ -112,7 +112,7 @@
}
//激光飞行时间
- var time = distance / _speed;
+ var time = distance / data.FlySpeed;
_tween = CreateTween();
_tween.SetParallel();
@@ -193,22 +193,38 @@
}
}
}
+
+ private void OnBodyEntered(Node2D body)
+ {
+ if (body is IHurt hurt)
+ {
+ HandlerCollision(hurt);
+ }
+ }
private void OnArea2dEntered(Area2D other)
{
- var role = other.AsActivityObject();
- if (role != null)
+ if (other is IHurt hurt)
{
- //击退
- if (BulletData.Repel != 0)
- {
- role.AddRepelForce(Vector2.FromAngle(Rotation) * BulletData.Repel);
- }
- //造成伤害
- role.CallDeferred(nameof(Role.Hurt), BulletData.TriggerRole.IsDestroyed ? null : BulletData.TriggerRole, BulletData.Harm, Rotation);
+ HandlerCollision(hurt);
}
}
+ private void HandlerCollision(IHurt hurt)
+ {
+ if (BulletData.Repel != 0)
+ {
+ var o = hurt.GetActivityObject();
+ if (o != null && o is not Player) //目标不是玩家才会触发击退
+ {
+ o.AddRepelForce(Vector2.FromAngle(Rotation) * BulletData.Repel);
+ }
+ }
+
+ //造成伤害
+ hurt.Hurt(BulletData.TriggerRole.IsDestroyed ? null : BulletData.TriggerRole, BulletData.Harm, Rotation);
+ }
+
public long StartCoroutine(IEnumerator able)
{
return ProxyCoroutineHandler.ProxyStartCoroutine(ref _coroutineList, able);
diff --git a/DungeonShooting_Godot/src/game/activity/bullet/normal/BoomBullet.cs b/DungeonShooting_Godot/src/game/activity/bullet/normal/BoomBullet.cs
index 1a763f3..36702cc 100644
--- a/DungeonShooting_Godot/src/game/activity/bullet/normal/BoomBullet.cs
+++ b/DungeonShooting_Godot/src/game/activity/bullet/normal/BoomBullet.cs
@@ -19,7 +19,7 @@
DoReclaim();
}
- public override void OnCollisionTarget(ActivityObject o)
+ public override void OnCollisionTarget(IHurt o)
{
PlayBoom();
DoReclaim();
@@ -53,7 +53,7 @@
public void PlayBoom()
{
var explode = ObjectManager.GetPoolItem(ResourcePath.prefab_bullet_explode_Explode0001_tscn);
- var pos = Position;
+ var pos = CollisionArea.GlobalPosition;
explode.Position = pos;
explode.RotationDegrees = Utils.Random.RandomRangeInt(0, 360);
explode.AddToActivityRootDeferred(RoomLayerEnum.YSortLayer);
diff --git a/DungeonShooting_Godot/src/game/activity/bullet/normal/Bullet.cs b/DungeonShooting_Godot/src/game/activity/bullet/normal/Bullet.cs
index 7741652..77c8d38 100644
--- a/DungeonShooting_Godot/src/game/activity/bullet/normal/Bullet.cs
+++ b/DungeonShooting_Godot/src/game/activity/bullet/normal/Bullet.cs
@@ -54,11 +54,15 @@
///
public int CurrentPenetration { get; protected set; } = 0;
+ ///
+ /// 是否是敌人使用的子弹
+ ///
+ public bool IsEnemyBullet { get; private set; } = false;
+
//当前子弹已经飞行的距离
private float CurrFlyDistance = 0;
private bool _init = false;
- private bool _isEnemyBullet = false;
public override void OnInit()
{
@@ -72,6 +76,7 @@
if (!_init)
{
CollisionArea.AreaEntered += OnArea2dEntered;
+ CollisionArea.BodyEntered += OnBodyEntered;
_init = true;
}
@@ -109,18 +114,14 @@
//如果子弹会对玩家造成伤害, 则显示红色描边
if (Player.Current.CollisionWithMask(attackLayer))
{
- if (!_isEnemyBullet)
+ if (!IsEnemyBullet)
{
- _isEnemyBullet = true;
- ShowOutline = true;
- SetBlendSchedule(1);
+ RefreshBulletColor(true);
}
}
- else if (_isEnemyBullet)
+ else if (IsEnemyBullet)
{
- _isEnemyBullet = false;
- ShowOutline = false;
- SetBlendSchedule(0);
+ RefreshBulletColor(false);
}
PutDown(RoomLayerEnum.YSortLayer);
@@ -144,6 +145,25 @@
}
}
+ ///
+ /// 刷新子弹的颜色
+ ///
+ /// 是否是敌人使用的子弹
+ public virtual void RefreshBulletColor(bool isEnemyBullet)
+ {
+ IsEnemyBullet = isEnemyBullet;
+ if (isEnemyBullet)
+ {
+ ShowOutline = true;
+ SetBlendSchedule(1);
+ }
+ else
+ {
+ ShowOutline = false;
+ SetBlendSchedule(0);
+ }
+ }
+
public override void OnMoveCollision(KinematicCollision2D collision)
{
CurrentBounce++;
@@ -158,30 +178,26 @@
///
/// 碰到目标
///
- public virtual void OnCollisionTarget(ActivityObject o)
+ public virtual void OnCollisionTarget(IHurt hurt)
{
- if (o is Role role)
+ OnPlayDisappearEffect();
+ if (BulletData.Repel != 0)
{
- OnPlayDisappearEffect();
-
- //击退
- if (role is not Player) //目标不是玩家才会触发击退
+ var o = hurt.GetActivityObject();
+ if (o != null && o is not Player) //目标不是玩家才会触发击退
{
- if (BulletData.Repel != 0)
- {
- role.AddRepelForce(Velocity.Normalized() * BulletData.Repel);
- }
+ o.AddRepelForce(Velocity.Normalized() * BulletData.Repel);
}
-
- //造成伤害
- role.CallDeferred(nameof(Role.Hurt), BulletData.TriggerRole.IsDestroyed ? null : BulletData.TriggerRole, BulletData.Harm, Rotation);
+ }
- //穿透次数
- CurrentPenetration++;
- if (CurrentPenetration > BulletData.Penetration)
- {
- DoReclaim();
- }
+ //造成伤害
+ hurt.Hurt(BulletData.TriggerRole.IsDestroyed ? null : BulletData.TriggerRole, BulletData.Harm, Rotation);
+
+ //穿透次数
+ CurrentPenetration++;
+ if (CurrentPenetration > BulletData.Penetration)
+ {
+ DoReclaim();
}
}
@@ -286,17 +302,33 @@
OnMaxDistance();
}
}
-
+
+ private void OnBodyEntered(Node2D body)
+ {
+ if (IsDestroyed)
+ {
+ return;
+ }
+
+ if (body is IHurt hurt)
+ {
+ OnCollisionTarget(hurt);
+ }
+ }
+
private void OnArea2dEntered(Area2D other)
{
if (IsDestroyed)
{
return;
}
- var activityObject = other.AsActivityObject();
- OnCollisionTarget(activityObject);
+
+ if (other is IHurt hurt)
+ {
+ OnCollisionTarget(hurt);
+ }
}
-
+
public virtual void DoReclaim()
{
ObjectPool.Reclaim(this);
diff --git a/DungeonShooting_Godot/src/game/activity/bullet/normal/ColorBullet.cs b/DungeonShooting_Godot/src/game/activity/bullet/normal/ColorBullet.cs
new file mode 100644
index 0000000..3ffbd3c
--- /dev/null
+++ b/DungeonShooting_Godot/src/game/activity/bullet/normal/ColorBullet.cs
@@ -0,0 +1,28 @@
+
+using Godot;
+
+[Tool]
+public partial class ColorBullet : Bullet
+{
+ public override void OnInit()
+ {
+ base.OnInit();
+ SetRandomColor();
+ }
+
+ public override void OnLeavePool()
+ {
+ base.OnLeavePool();
+ SetRandomColor();
+ }
+
+ private void SetRandomColor()
+ {
+ //随机颜色
+ var color = new Color(Utils.Random.RandomRangeFloat(0, 1), Utils.Random.RandomRangeFloat(0, 1), Utils.Random.RandomRangeFloat(0, 1));
+ color.R += 0.6f;
+ color.G += 0.6f;
+ color.B += 0.6f;
+ Modulate = color;
+ }
+}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/game/activity/bullet/normal/TrailBullet.cs b/DungeonShooting_Godot/src/game/activity/bullet/normal/TrailBullet.cs
new file mode 100644
index 0000000..67f6da9
--- /dev/null
+++ b/DungeonShooting_Godot/src/game/activity/bullet/normal/TrailBullet.cs
@@ -0,0 +1,38 @@
+
+using Godot;
+
+[Tool]
+public partial class TrailBullet : Bullet
+{
+ private static Color TerrainColor = new Color(0xf5 / 255f + 0.8f, 0x7e / 255f + 0.45f, 0x7a / 255f + 0.45f, 0.7f);
+ private static Color EnemyTerrainColor = new Color(1.5f, 0, 0, 0.7f);
+ private Trail trail;
+
+ public override void InitData(BulletData data, uint attackLayer)
+ {
+ base.InitData(data, attackLayer);
+
+ trail = ObjectManager.GetPoolItem(ResourcePath.prefab_effect_common_Trail0001_tscn);
+ trail.SetTarget(AnimatedSprite);
+ trail.AddPoint(trail.Target.GlobalPosition);
+ trail.AddToActivityRoot(RoomLayerEnum.YSortLayer);
+ trail.ZIndex = 1;
+
+ if (IsEnemyBullet)
+ {
+ trail.SetColor(EnemyTerrainColor);
+ }
+ else
+ {
+ trail.SetColor(TerrainColor);
+ }
+ }
+
+
+ public override void OnReclaim()
+ {
+ base.OnReclaim();
+ trail.SetTarget(null);
+ trail = null;
+ }
+}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/game/activity/currency/Gold.cs b/DungeonShooting_Godot/src/game/activity/currency/Gold.cs
new file mode 100644
index 0000000..b991fb6
--- /dev/null
+++ b/DungeonShooting_Godot/src/game/activity/currency/Gold.cs
@@ -0,0 +1,73 @@
+
+using Godot;
+
+///
+/// 金币类
+///
+[Tool]
+public partial class Gold : ActivityObject, IPoolItem
+{
+ ///
+ /// 金币数量
+ ///
+ [Export]
+ public int GoldCount { get; set; } = 1;
+
+ public bool IsRecycled { get; set; }
+ public string Logotype { get; set; }
+
+ private float _maxSpeed = 250;
+ private float _speed = 0;
+ private Role _moveTarget;
+
+ public override void OnInit()
+ {
+ DefaultLayer = RoomLayerEnum.YSortLayer;
+ }
+
+ protected override void OnThrowOver()
+ {
+ var current = Player.Current;
+ if (current != null)
+ {
+ this.CallDelay(0.3f, () =>
+ {
+ _moveTarget = current;
+ MoveController.Enable = false;
+ });
+ }
+ }
+
+ protected override void Process(float delta)
+ {
+ if (_moveTarget != null && !_moveTarget.IsDestroyed)
+ {
+ var position = Position;
+ var targetPosition = _moveTarget.Position;
+ if (position.DistanceSquaredTo(targetPosition) < 3 * 3)
+ {
+ _moveTarget.AddGold(GoldCount);
+ ObjectPool.Reclaim(this);
+ }
+ else
+ {
+ _speed = Mathf.MoveToward(_speed, _maxSpeed, _maxSpeed * delta);
+ Position = position.MoveToward(targetPosition, _speed * delta);
+ }
+ }
+ }
+
+ public void OnReclaim()
+ {
+ GetParent().RemoveChild(this);
+ _moveTarget = null;
+ }
+
+ public void OnLeavePool()
+ {
+ _speed = 0;
+ MoveController.Enable = true;
+ MoveController.ClearForce();
+ MoveController.SetAllVelocity(Vector2.Zero);
+ }
+}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/game/activity/prop/Prop.cs b/DungeonShooting_Godot/src/game/activity/prop/Prop.cs
index c79dfc0..90fb6e7 100644
--- a/DungeonShooting_Godot/src/game/activity/prop/Prop.cs
+++ b/DungeonShooting_Godot/src/game/activity/prop/Prop.cs
@@ -21,6 +21,11 @@
///
public abstract void OnRemoveItem();
+ public override void OnInit()
+ {
+ ThrowCollisionMask = PhysicsLayer.Wall;
+ }
+
///
/// 如果道具放入了角色背包中, 则每帧调用
///
diff --git a/DungeonShooting_Godot/src/game/activity/prop/active/ActiveProp5000.cs b/DungeonShooting_Godot/src/game/activity/prop/active/ActiveProp5000.cs
index 2770ac7..bdc2ce4 100644
--- a/DungeonShooting_Godot/src/game/activity/prop/active/ActiveProp5000.cs
+++ b/DungeonShooting_Godot/src/game/activity/prop/active/ActiveProp5000.cs
@@ -9,6 +9,7 @@
{
public override void OnInit()
{
+ base.OnInit();
AutoDestroy = true;
MaxCount = 10;
Superposition = true;
diff --git a/DungeonShooting_Godot/src/game/activity/prop/active/ActiveProp5001.cs b/DungeonShooting_Godot/src/game/activity/prop/active/ActiveProp5001.cs
index 2bac5e6..43770cb 100644
--- a/DungeonShooting_Godot/src/game/activity/prop/active/ActiveProp5001.cs
+++ b/DungeonShooting_Godot/src/game/activity/prop/active/ActiveProp5001.cs
@@ -9,6 +9,7 @@
{
public override void OnInit()
{
+ base.OnInit();
Superposition = true;
AutoDestroy = true;
MaxCount = 10;
diff --git a/DungeonShooting_Godot/src/game/activity/role/Role.cs b/DungeonShooting_Godot/src/game/activity/role/Role.cs
index 67748b5..7342725 100644
--- a/DungeonShooting_Godot/src/game/activity/role/Role.cs
+++ b/DungeonShooting_Godot/src/game/activity/role/Role.cs
@@ -1,6 +1,7 @@
using System.Collections;
using System.Collections.Generic;
+using Config;
using Godot;
///
@@ -21,13 +22,13 @@
///
/// 默认攻击对象层级
///
- public const uint DefaultAttackLayer = PhysicsLayer.Player | PhysicsLayer.Enemy | PhysicsLayer.Wall;
+ public const uint DefaultAttackLayer = PhysicsLayer.Player | PhysicsLayer.Enemy | PhysicsLayer.Obstacle;
///
/// 伤害区域
///
[Export, ExportFillNode]
- public Area2D HurtArea { get; set; }
+ public HurtArea HurtArea { get; set; }
///
/// 伤害区域碰撞器
@@ -43,7 +44,7 @@
///
/// 攻击目标的碰撞器所属层级, 数据源自于:
///
- public uint AttackLayer { get; set; } = PhysicsLayer.Wall;
+ public uint AttackLayer { get; set; } = PhysicsLayer.Wall | PhysicsLayer.Obstacle;
///
/// 该角色敌对目标的碰撞器所属层级, 数据源自于:
@@ -463,9 +464,15 @@
_startScale = Scale;
+ HurtArea.InitActivityObject(this);
HurtArea.CollisionLayer = CollisionLayer;
- HurtArea.CollisionMask = 0;
+ HurtArea.CollisionMask = PhysicsLayer.None;
_currentLayer = HurtArea.CollisionLayer;
+ //CollisionLayer = PhysicsLayer.None;
+ HurtArea.OnHurtEvent += (target, damage, angle) =>
+ {
+ CallDeferred(nameof(HurtHandler), target, damage, angle);
+ };
Face = FaceDirection.Right;
@@ -485,6 +492,7 @@
WeaponPack.ChangeActiveItemEvent += OnChangeActiveItem;
//近战区域进入物体
MeleeAttackArea.BodyEntered += OnMeleeAttackBodyEntered;
+ MeleeAttackArea.AreaEntered += OnMeleeAttackAreaEntered;
}
protected override void Process(float delta)
@@ -787,14 +795,14 @@
activeItem.Use();
}
}
-
+
///
/// 受到伤害, 如果是在碰撞信号处理函数中调用该函数, 请使用 CallDeferred 来延时调用, 否则很有可能导致报错
///
/// 触发伤害的对象, 为 null 表示不存在对象或者对象已经被销毁
/// 伤害的量
/// 伤害角度(弧度制)
- public virtual void Hurt(ActivityObject target, int damage, float angle)
+ protected virtual void HurtHandler(ActivityObject target, int damage, float angle)
{
//受伤闪烁, 无敌状态
if (Invincible)
@@ -1236,6 +1244,16 @@
});
}
}
+
+ ///
+ /// 添加金币
+ ///
+ public virtual void AddGold(int goldCount)
+ {
+ RoleState.Gold += goldCount;
+ //播放音效
+ SoundManager.PlaySoundByConfig(ExcelConfig.Sound_Map["gold"], Position, this);
+ }
///
/// 切换当前使用的武器的回调
@@ -1255,6 +1273,20 @@
}
}
+ private void OnMeleeAttackAreaEntered(Area2D area)
+ {
+ var activeWeapon = WeaponPack.ActiveItem;
+ if (activeWeapon == null)
+ {
+ return;
+ }
+
+ if (area is IHurt hurt)
+ {
+ HandlerCollision(hurt, activeWeapon);
+ }
+ }
+
///
/// 近战区域碰到敌人
///
@@ -1265,38 +1297,41 @@
{
return;
}
- var activityObject = body.AsActivityObject();
- if (activityObject != null)
+
+ if (body is IHurt hurt)
{
- if (activityObject is Role role) //攻击角色
+ HandlerCollision(hurt, activeWeapon);
+ }
+ else if (body is Bullet bullet) //攻击子弹
+ {
+ var attackLayer = bullet.AttackLayer;
+ if (CollisionWithMask(attackLayer)) //是攻击玩家的子弹
{
- var damage = Utils.Random.RandomConfigRange(activeWeapon.Attribute.MeleeAttackHarmRange);
- damage = RoleState.CalcDamage(damage);
-
- //击退
- if (role is not Player) //目标不是玩家才会触发击退
- {
- var attr = IsAi ? activeWeapon.AiUseAttribute : activeWeapon.PlayerUseAttribute;
- var repel = Utils.Random.RandomConfigRange(attr.MeleeAttackRepelRange);
- var position = role.GlobalPosition - MountPoint.GlobalPosition;
- var v2 = position.Normalized() * repel;
- role.AddRepelForce(v2);
- }
-
- role.CallDeferred(nameof(Hurt), this, damage, (role.GetCenterPosition() - GlobalPosition).Angle());
- }
- else if (activityObject is Bullet bullet) //攻击子弹
- {
- var attackLayer = bullet.AttackLayer;
- if (CollisionWithMask(attackLayer)) //是攻击玩家的子弹
- {
- bullet.OnPlayDisappearEffect();
- bullet.Destroy();
- }
+ bullet.OnPlayDisappearEffect();
+ bullet.Destroy();
}
}
}
-
+
+ private void HandlerCollision(IHurt hurt, Weapon activeWeapon)
+ {
+ var damage = Utils.Random.RandomConfigRange(activeWeapon.Attribute.MeleeAttackHarmRange);
+ damage = RoleState.CalcDamage(damage);
+
+ var o = hurt.GetActivityObject();
+ var pos = hurt.GetPosition();
+ if (o != null && o is not Player) //不是玩家才能被击退
+ {
+ var attr = IsAi ? activeWeapon.AiUseAttribute : activeWeapon.PlayerUseAttribute;
+ var repel = Utils.Random.RandomConfigRange(attr.MeleeAttackRepelRange);
+ var position = pos - MountPoint.GlobalPosition;
+ var v2 = position.Normalized() * repel;
+ o.AddRepelForce(v2);
+ }
+
+ hurt.Hurt(this, damage, (pos - GlobalPosition).Angle());
+ }
+
protected override void OnDestroy()
{
//销毁道具
diff --git a/DungeonShooting_Godot/src/game/activity/role/RoleState.cs b/DungeonShooting_Godot/src/game/activity/role/RoleState.cs
index 2af6bf3..f974546 100644
--- a/DungeonShooting_Godot/src/game/activity/role/RoleState.cs
+++ b/DungeonShooting_Godot/src/game/activity/role/RoleState.cs
@@ -7,6 +7,11 @@
public class RoleState
{
///
+ /// 金币数量
+ ///
+ public int Gold = 0;
+
+ ///
/// 是否可以拾起武器
///
public bool CanPickUpWeapon = false;
diff --git a/DungeonShooting_Godot/src/game/activity/role/SubLine.cs b/DungeonShooting_Godot/src/game/activity/role/SubLine.cs
index 5f9dd84..4839685 100644
--- a/DungeonShooting_Godot/src/game/activity/role/SubLine.cs
+++ b/DungeonShooting_Godot/src/game/activity/role/SubLine.cs
@@ -28,7 +28,7 @@
AddChild(_line2D);
_rayCast2D = new RayCast2D();
- _rayCast2D.CollisionMask = PhysicsLayer.Wall;
+ _rayCast2D.CollisionMask = PhysicsLayer.Wall | PhysicsLayer.Obstacle;
AddChild(_rayCast2D);
Master.WeaponPack.ChangeActiveItemEvent += OnChangeWeapon;
diff --git a/DungeonShooting_Godot/src/game/activity/role/enemy/Enemy.cs b/DungeonShooting_Godot/src/game/activity/role/enemy/Enemy.cs
index 47aa18d..37faa8e 100644
--- a/DungeonShooting_Godot/src/game/activity/role/enemy/Enemy.cs
+++ b/DungeonShooting_Godot/src/game/activity/role/enemy/Enemy.cs
@@ -134,7 +134,7 @@
StateController = AddComponent>();
- AttackLayer = PhysicsLayer.Wall | PhysicsLayer.Player;
+ AttackLayer = PhysicsLayer.Obstacle | PhysicsLayer.Player;
EnemyLayer = PhysicsLayer.Player;
Camp = CampEnum.Camp2;
@@ -165,6 +165,8 @@
var enemyBase = GetEnemyAttribute(ActivityBase.Id).Clone();
_enemyAttribute = enemyBase;
+ MaxHp = enemyBase.Hp;
+ Hp = enemyBase.Hp;
roleState.CanPickUpWeapon = enemyBase.CanPickUpWeapon;
roleState.MoveSpeed = enemyBase.MoveSpeed;
roleState.Acceleration = enemyBase.Acceleration;
@@ -172,6 +174,8 @@
roleState.ViewRange = enemyBase.ViewRange;
roleState.TailAfterViewRange = enemyBase.TailAfterViewRange;
roleState.BackViewRange = enemyBase.BackViewRange;
+
+ roleState.Gold = Mathf.Max(0, Utils.Random.RandomConfigRange(enemyBase.Gold));
return roleState;
}
@@ -210,6 +214,9 @@
debris.MoveController.AddForce(Velocity + realVelocity);
}
+ //创建金币
+ CreateGold();
+
//派发敌人死亡信号
EventManager.EmitEvent(EventEnum.OnEnemyDie, this);
Destroy();
@@ -249,6 +256,24 @@
}
}
+ ///
+ /// 创建散落的金币
+ ///
+ protected void CreateGold()
+ {
+ var goldList = Utils.GetGoldList(RoleState.Gold);
+ foreach (var id in goldList)
+ {
+ var o = ObjectManager.GetActivityObject(id);
+ o.Position = Position;
+ o.Throw(0,
+ Utils.Random.RandomRangeInt(50, 110),
+ new Vector2(Utils.Random.RandomRangeInt(-20, 20), Utils.Random.RandomRangeInt(-20, 20)),
+ 0
+ );
+ }
+ }
+
public override bool IsAllWeaponTotalAmmoEmpty()
{
if (!_enemyAttribute.CanPickUpWeapon)
diff --git a/DungeonShooting_Godot/src/game/activity/role/enemy/NoWeaponEnemy.cs b/DungeonShooting_Godot/src/game/activity/role/enemy/NoWeaponEnemy.cs
index 937f133..2e1e4ae 100644
--- a/DungeonShooting_Godot/src/game/activity/role/enemy/NoWeaponEnemy.cs
+++ b/DungeonShooting_Godot/src/game/activity/role/enemy/NoWeaponEnemy.cs
@@ -42,7 +42,7 @@
public virtual void OnAttack()
{
//攻击特效
- var effect = ObjectManager.GetPoolItem(ResourcePath.prefab_effect_weapon_ShotFire3_tscn);
+ var effect = ObjectManager.GetPoolItem(ResourcePath.prefab_effect_weapon_ShotFire0003_tscn);
var node = (Node2D)effect;
node.GlobalPosition = FirePoint.GlobalPosition;
node.Rotation = MountPoint.Rotation;
@@ -70,6 +70,9 @@
debris.SetForwardDirection(Face);
debris.BrushPrevPosition = BrushPrevPosition;
+ //创建金币
+ CreateGold();
+
//派发敌人死亡信号
EventManager.EmitEvent(EventEnum.OnEnemyDie, this);
Destroy();
diff --git a/DungeonShooting_Godot/src/game/activity/role/player/Player.cs b/DungeonShooting_Godot/src/game/activity/role/player/Player.cs
index 482be7a..f301669 100644
--- a/DungeonShooting_Godot/src/game/activity/role/player/Player.cs
+++ b/DungeonShooting_Godot/src/game/activity/role/player/Player.cs
@@ -48,7 +48,7 @@
IsAi = false;
StateController = AddComponent>();
- AttackLayer = PhysicsLayer.Wall | PhysicsLayer.Enemy;
+ AttackLayer = PhysicsLayer.Obstacle | PhysicsLayer.Enemy;
EnemyLayer = EnemyLayer = PhysicsLayer.Enemy;
Camp = CampEnum.Camp1;
@@ -61,20 +61,7 @@
ActivePropsPack.SetCapacity(1);
// debug用
- // RoleState.Acceleration = 3000;
- // RoleState.Friction = 3000;
- // RoleState.MoveSpeed = 500;
- // CollisionLayer = 0;
- // CollisionMask = 0;
- // GameCamera.Main.Zoom = new Vector2(0.5f, 0.5f);
- //GameCamera.Main.Zoom = new Vector2(0.2f, 0.2f);
- // this.CallDelay(0.5f, () =>
- // {
- // PickUpWeapon(Create(Ids.Id_weapon0009));
- // PickUpWeapon(Create(Ids.Id_weapon0008));
- // PickUpWeapon(Create(Ids.Id_weapon0007));
- // PickUpWeapon(Create(Ids.Id_weapon0006));
- // });
+ // DebugSet();
//注册状态机
StateController.Register(new PlayerIdleState());
@@ -88,6 +75,37 @@
_brushData2 = new BrushImageData(ExcelConfig.LiquidMaterial_Map["0001"]);
}
+ private void DebugSet()
+ {
+ RoleState.Acceleration = 3000;
+ RoleState.Friction = 3000;
+ RoleState.MoveSpeed = 500;
+ CollisionLayer = PhysicsLayer.None;
+ CollisionMask = PhysicsLayer.None;
+ GameCamera.Main.Zoom = new Vector2(0.5f, 0.5f);
+ // this.CallDelay(0.5f, () =>
+ // {
+ // PickUpWeapon(Create(Ids.Id_weapon0009));
+ // PickUpWeapon(Create(Ids.Id_weapon0008));
+ // PickUpWeapon(Create(Ids.Id_weapon0007));
+ // PickUpWeapon(Create(Ids.Id_weapon0006));
+ // });
+ World.Color = new Color(1, 1, 1, 1); //关闭迷雾
+ //显示房间小地图
+ this.CallDelay(1, () =>
+ {
+ GameApplication.Instance.DungeonManager.StartRoomInfo.EachRoom(info =>
+ {
+ info.PreviewSprite.Visible = true;
+ foreach (var roomDoorInfo in info.Doors)
+ {
+ roomDoorInfo.AislePreviewSprite.Visible = true;
+ }
+ });
+ });
+
+ }
+
protected override RoleState OnCreateRoleState()
{
var roleState = new PlayerRoleState();
@@ -202,14 +220,14 @@
{
//Hurt(1000, 0);
Hp = 0;
- Hurt(this, 1000, 0);
+ HurtHandler(this, 1000, 0);
}
else if (Input.IsKeyPressed(Key.O)) //测试用, 消灭房间内所有敌人
{
var enemyList = AffiliationArea.FindIncludeItems(o => o.CollisionWithMask(PhysicsLayer.Enemy));
foreach (var enemy in enemyList)
{
- ((Enemy)enemy).Hurt(this, 1000, 0);
+ ((Enemy)enemy).HurtArea.Hurt(this, 1000, 0);
}
}
// //测试用
@@ -386,4 +404,10 @@
// base.DebugDraw();
// DrawArc(GetLocalMousePosition(), 25, 0, Mathf.Pi * 2f, 20, Colors.Red, 1);
// }
+
+ public override void AddGold(int goldCount)
+ {
+ base.AddGold(goldCount);
+ EventManager.EmitEvent(EventEnum.OnPlayerGoldChange, RoleState.Gold);
+ }
}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/game/activity/role/player/PlayerRoleState.cs b/DungeonShooting_Godot/src/game/activity/role/player/PlayerRoleState.cs
index f52b21d..c9e2f7d 100644
--- a/DungeonShooting_Godot/src/game/activity/role/player/PlayerRoleState.cs
+++ b/DungeonShooting_Godot/src/game/activity/role/player/PlayerRoleState.cs
@@ -14,5 +14,5 @@
///
/// 翻滚冷却时间
///
- public float RollCoolingTime = 0.4f;
+ public float RollCoolingTime = 0.2f;
}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/game/activity/weapon/Weapon.cs b/DungeonShooting_Godot/src/game/activity/weapon/Weapon.cs
index 34008d9..4499111 100644
--- a/DungeonShooting_Godot/src/game/activity/weapon/Weapon.cs
+++ b/DungeonShooting_Godot/src/game/activity/weapon/Weapon.cs
@@ -214,7 +214,8 @@
private Vector2 _gripOffset;
//碰撞器位置
- private Vector2 _collPoint;
+ private Vector2 _collPoint1;
+ private Vector2 _collPoint2;
//换弹计时器
private float _reloadTimer = 0;
@@ -294,10 +295,11 @@
AnimationPlayer.AnimationFinished += OnAnimationPlayerFinished;
_gripPoint = AnimatedSprite.Position;
_gripOffset = AnimatedSprite.Offset;
- _collPoint = Collision.Position;
+ _collPoint1 = Collision.Position;
+ _collPoint2 = _collPoint1 - AnimatedSprite.Offset - AnimatedSprite.Position;
AnimatedSprite.Position = Vector2.Zero;
AnimatedSprite.Offset = Vector2.Zero;
- Collision.Position = Vector2.Zero;
+ Collision.Position = _collPoint2;
}
///
@@ -307,12 +309,13 @@
{
_playerWeaponAttribute = attribute;
SetCurrentWeaponAttribute(attribute);
- if (attribute.AiUseAttribute != null)
+ if (ExcelConfig.WeaponBase_Map.TryGetValue(attribute.Id + "_ai", out var aiAttr))
{
- _aiWeaponAttribute = attribute.AiUseAttribute;
+ _aiWeaponAttribute = aiAttr;
}
else
{
+ Debug.LogError("警告: 未找到 AI 武器属性: " + attribute.Id);
_aiWeaponAttribute = attribute;
}
@@ -325,8 +328,15 @@
CurrAmmo = Attribute.AmmoCapacity;
//剩余弹药量
ResidueAmmo = Mathf.Min(Attribute.StandbyAmmoCapacity + CurrAmmo, Attribute.MaxAmmoCapacity) - CurrAmmo;
-
- ThrowCollisionSize = attribute.ThrowCollisionSize.AsVector2();
+
+ if (Collision.Shape is RectangleShape2D rectangleShape)
+ {
+ ThrowCollisionSize = rectangleShape.Size;
+ }
+ else
+ {
+ ThrowCollisionSize = new Vector2(-1, -1);
+ }
}
///
@@ -1500,23 +1510,30 @@
//抛弹逻辑
private void ThrowShellHandler(float speedScale)
{
- if (Attribute.Shell == null)
+ var attribute = Attribute;
+ if (attribute.Shell == null)
{
return;
}
//创建一个弹壳
- if (Attribute.ThrowShellDelayTime > 0)
+ if (attribute.ThrowShellDelayTime > 0)
{
- this.CallDelay(Attribute.ThrowShellDelayTime, () =>
+ this.CallDelay(attribute.ThrowShellDelayTime, () =>
{
_reloadShellFlag = true;
- FireManager.ThrowShell(this, Attribute.Shell, speedScale);
+ for (var i = 0; i < attribute.ThrowShellCount; i++)
+ {
+ FireManager.ThrowShell(this, attribute.Shell, speedScale);
+ }
});
}
- else if (Attribute.ThrowShellDelayTime == 0)
+ else if (attribute.ThrowShellDelayTime == 0)
{
_reloadShellFlag = true;
- FireManager.ThrowShell(this, Attribute.Shell, speedScale);
+ for (var i = 0; i < attribute.ThrowShellCount; i++)
+ {
+ FireManager.ThrowShell(this, attribute.Shell, speedScale);
+ }
}
}
@@ -1915,7 +1932,7 @@
//精灵位置, 旋转中心点
AnimatedSprite.Position = Vector2.Zero;
AnimatedSprite.Offset = Vector2.Zero;
- Collision.Position = Vector2.Zero;
+ Collision.Position = _collPoint2;
//清除 Ai 拾起标记
RemoveSign(SignNames.AiFindWeaponSign);
//停止换弹
@@ -1945,7 +1962,7 @@
//Collision.Disabled = true;
AnimatedSprite.Position = _gripPoint;
AnimatedSprite.Offset = _gripOffset;
- Collision.Position = _collPoint;
+ Collision.Position = _collPoint1;
//修改层级
_tempLayer = CollisionLayer;
CollisionLayer = PhysicsLayer.OnHand;
diff --git a/DungeonShooting_Godot/src/game/activity/weapon/knife/Knife.cs b/DungeonShooting_Godot/src/game/activity/weapon/knife/Knife.cs
index 3d386d0..f9c117f 100644
--- a/DungeonShooting_Godot/src/game/activity/weapon/knife/Knife.cs
+++ b/DungeonShooting_Godot/src/game/activity/weapon/knife/Knife.cs
@@ -39,6 +39,7 @@
_hitArea.Monitoring = false;
_hitArea.Monitorable = false;
_hitArea.BodyEntered += OnBodyEntered;
+ _hitArea.AreaEntered += OnArea2dEntered;
//禁用自动播放动画
IsAutoPlaySpriteFrames = false;
@@ -82,7 +83,7 @@
if (IsActive) //被使用
{
//播放挥刀特效
- SpecialEffectManager.Play(
+ SpecialEffectManager.PlaySpriteFrames(
Master,
ResourcePath.resource_spriteFrames_weapon_Weapon0004_hit_tres, "default",
Master.MountPoint.Position,
@@ -123,56 +124,71 @@
private void OnBodyEntered(Node2D body)
{
- //Debug.Log("碰到物体: " + body.Name);
- var activityObject = body.AsActivityObject();
- if (activityObject != null)
+ if (body is IHurt hurt)
{
- if (activityObject is Role role) //碰到角色
+ HandlerCollision(hurt);
+ }
+ else if (body is Bullet bullet) //攻击子弹
+ {
+ var attackLayer = bullet.AttackLayer;
+ if (TriggerRole != null && TriggerRole.CollisionWithMask(attackLayer)) //是攻击玩家的子弹
{
- var damage = Utils.Random.RandomConfigRange(Attribute.Bullet.HarmRange);
- //计算子弹造成的伤害
- if (TriggerRole != null)
- {
- damage = TriggerRole.RoleState.CalcDamage(damage);
- }
- //击退
- var attr = GetUseAttribute(TriggerRole);
- var repel = Utils.Random.RandomConfigRange(attr.Bullet.RepelRange);
- //计算击退
- if (TriggerRole != null)
- {
- repel = TriggerRole.RoleState.CalcBulletRepel(repel);
- }
- if (repel != 0)
- {
- Vector2 position;
- if (TriggerRole != null)
- {
- position = role.GlobalPosition - TriggerRole.MountPoint.GlobalPosition;
- }
- else
- {
- position = role.GlobalPosition - GlobalPosition;
- }
- var v2 = position.Normalized() * repel;
- role.AddRepelForce(v2);
- }
-
- //造成伤害
- role.CallDeferred(nameof(Role.Hurt), TriggerRole, damage, (role.GetCenterPosition() - GlobalPosition).Angle());
- }
- else if (activityObject is Bullet bullet) //攻击子弹
- {
- var attackLayer = bullet.AttackLayer;
- if (TriggerRole != null && TriggerRole.CollisionWithMask(attackLayer)) //是攻击玩家的子弹
- {
- //反弹子弹
- bullet.OnPlayDisappearEffect();
- bullet.MoveController.ScaleAllVelocity(-1);
- bullet.Rotation += Mathf.Pi;
- bullet.AttackLayer = TriggerRole.AttackLayer;
- }
+ //反弹子弹
+ bullet.OnPlayDisappearEffect();
+ bullet.MoveController.ScaleAllVelocity(-1);
+ bullet.Rotation += Mathf.Pi;
+ bullet.AttackLayer = TriggerRole.AttackLayer;
+ bullet.RefreshBulletColor(false);
}
}
}
+
+ private void OnArea2dEntered(Area2D area)
+ {
+ if (area is IHurt hurt)
+ {
+ HandlerCollision(hurt);
+ }
+ }
+
+ private void HandlerCollision(IHurt hurt)
+ {
+ var damage = Utils.Random.RandomConfigRange(Attribute.Bullet.HarmRange);
+ //计算子弹造成的伤害
+ if (TriggerRole != null)
+ {
+ damage = TriggerRole.RoleState.CalcDamage(damage);
+ }
+ //击退
+ var attr = GetUseAttribute(TriggerRole);
+ var repel = Utils.Random.RandomConfigRange(attr.Bullet.RepelRange);
+ //计算击退
+ if (TriggerRole != null)
+ {
+ repel = TriggerRole.RoleState.CalcBulletRepel(repel);
+ }
+
+ var globalPosition = GlobalPosition;
+ if (repel != 0)
+ {
+ var o = hurt.GetActivityObject();
+ if (o != null && o is not Player) //不是玩家才能被击退
+ {
+ Vector2 position;
+ if (TriggerRole != null)
+ {
+ position = o.GlobalPosition - TriggerRole.MountPoint.GlobalPosition;
+ }
+ else
+ {
+ position = o.GlobalPosition - globalPosition;
+ }
+ var v2 = position.Normalized() * repel;
+ o.AddRepelForce(v2);
+ }
+ }
+
+ //造成伤害
+ hurt.Hurt(TriggerRole, damage, (hurt.GetPosition() - globalPosition).Angle());
+ }
}
diff --git a/DungeonShooting_Godot/src/game/data/property/AnimatorNames.cs b/DungeonShooting_Godot/src/game/data/property/AnimatorNames.cs
index bf3d97d..747cff3 100644
--- a/DungeonShooting_Godot/src/game/data/property/AnimatorNames.cs
+++ b/DungeonShooting_Godot/src/game/data/property/AnimatorNames.cs
@@ -90,4 +90,9 @@
/// 重置动画
///
public static readonly StringName Reset = "RESET";
+
+ ///
+ /// 打开宝箱
+ ///
+ public static readonly StringName Open = "open";
}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/game/data/property/PhysicsLayer.cs b/DungeonShooting_Godot/src/game/data/property/PhysicsLayer.cs
index f181de2..d1675e4 100644
--- a/DungeonShooting_Godot/src/game/data/property/PhysicsLayer.cs
+++ b/DungeonShooting_Godot/src/game/data/property/PhysicsLayer.cs
@@ -43,4 +43,8 @@
/// 投抛中
///
public const uint Throwing = 0b100000000;
+ ///
+ /// 障碍物
+ ///
+ public const uint Obstacle = 0b1000000000;
}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/game/effects/Trail.cs b/DungeonShooting_Godot/src/game/effects/Trail.cs
new file mode 100644
index 0000000..91825a5
--- /dev/null
+++ b/DungeonShooting_Godot/src/game/effects/Trail.cs
@@ -0,0 +1,124 @@
+using Godot;
+
+///
+/// 拖尾效果
+///
+public partial class Trail : Line2D, IPoolItem
+{
+ ///
+ /// 拖尾效果固定更新帧率
+ ///
+ public const int TrailUpdateFrame = 20;
+
+ ///
+ /// 拖尾最大点数
+ ///
+ public int MaxLength { get; set; } = 20;
+ ///
+ /// 拖尾绑定的物体
+ ///
+ public Node2D Target { get; private set; }
+
+ public bool IsDestroyed { get; private set; }
+
+ public bool IsRecycled { get; set; }
+ public string Logotype { get; set; }
+
+ private double _time = 0;
+ private IPoolItem _targetPoolItem;
+
+ ///
+ /// 设置拖尾跟随的物体
+ ///
+ public void SetTarget(Node2D target)
+ {
+ Target = target;
+ if (target is IPoolItem poolItem)
+ {
+ _targetPoolItem = poolItem;
+ }
+ else
+ {
+ _targetPoolItem = null;
+ }
+
+ if (target != null)
+ {
+ ClearPoints();
+ }
+
+ _time = 1f / TrailUpdateFrame;
+ }
+
+ public void SetColor(Color color)
+ {
+ Gradient.SetColor(0, color);
+ color.A = 0;
+ Gradient.SetColor(1, color);
+ }
+
+ public override void _Process(double delta)
+ {
+ if (_targetPoolItem != null && _targetPoolItem.IsRecycled) //目标物体被回收
+ {
+ SetTarget(null);
+ }
+
+ _time += delta;
+ var v = 1f / TrailUpdateFrame;
+ if (_time >= v) //执行更新点
+ {
+ _time %= v;
+
+ var pointCount = GetPointCount();
+ if (Target != null) //没有被回收
+ {
+ AddPoint(Target.GlobalPosition, 0);
+ if (pointCount > MaxLength)
+ {
+ RemovePoint(pointCount);
+ }
+ }
+ else //被回收了,
+ {
+ if (pointCount > 0)
+ {
+ RemovePoint(pointCount - 1);
+ }
+
+ if (pointCount <= 1) //没有点了, 执行回收
+ {
+ ObjectPool.Reclaim(this);
+ }
+ }
+ }
+ else if (Target != null && GetPointCount() >= 2) //没有被回收, 更新第一个点
+ {
+ SetPointPosition(0, Target.GlobalPosition);
+ }
+ }
+
+ public void Destroy()
+ {
+ if (IsDestroyed)
+ {
+ return;
+ }
+
+ IsDestroyed = true;
+ QueueFree();
+ }
+ public void OnReclaim()
+ {
+ GetParent().CallDeferred(Node.MethodName.RemoveChild, this);
+ Target = null;
+ _targetPoolItem = null;
+ }
+
+ public void OnLeavePool()
+ {
+ ClearPoints();
+ _time = 0;
+ ZIndex = 0;
+ }
+}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/game/event/EventEnum.cs b/DungeonShooting_Godot/src/game/event/EventEnum.cs
index d526ae0..afe09d8 100644
--- a/DungeonShooting_Godot/src/game/event/EventEnum.cs
+++ b/DungeonShooting_Godot/src/game/event/EventEnum.cs
@@ -47,6 +47,10 @@
///
OnPlayerMaxShieldChange,
///
+ /// 玩家金币发生改变, 参数为玩家金币值
+ ///
+ OnPlayerGoldChange,
+ ///
/// 玩家拾起武器, 参数为
///
OnPlayerPickUpWeapon,
diff --git a/DungeonShooting_Godot/src/game/manager/FireManager.cs b/DungeonShooting_Godot/src/game/manager/FireManager.cs
index 65e7fa8..375765e 100644
--- a/DungeonShooting_Godot/src/game/manager/FireManager.cs
+++ b/DungeonShooting_Godot/src/game/manager/FireManager.cs
@@ -272,6 +272,7 @@
BounceCount = Utils.Random.RandomConfigRange(bullet.BounceCount),
LifeTime = Utils.Random.RandomConfigRange(bullet.LifeTimeRange),
Position = weapon.FirePoint.GlobalPosition,
+ FlySpeed = Utils.Random.RandomConfigRange(bullet.SpeedRange),
};
var deviationAngle = Utils.Random.RandomConfigRange(bullet.DeviationAngleRange);
diff --git a/DungeonShooting_Godot/src/game/manager/NameManager.cs b/DungeonShooting_Godot/src/game/manager/NameManager.cs
deleted file mode 100644
index e823f5b..0000000
--- a/DungeonShooting_Godot/src/game/manager/NameManager.cs
+++ /dev/null
@@ -1,36 +0,0 @@
-
-public class NameManager
-{
- ///
- /// 获取物体属性名称字符串
- ///
- public static string GetActivityTypeName(int type)
- {
- switch ((ActivityType)type)
- {
- case ActivityType.None:
- return "";
- case ActivityType.Test:
- return "测试";
- case ActivityType.Role:
- case ActivityType.Player:
- return "角色";
- case ActivityType.Enemy:
- return "敌人";
- case ActivityType.Weapon:
- return "武器";
- case ActivityType.Bullet:
- return "子弹";
- case ActivityType.Shell:
- return "弹壳";
- case ActivityType.Effect:
- return "特效";
- case ActivityType.Prop:
- return "道具";
- case ActivityType.Other:
- return "其他";
- }
-
- return "";
- }
-}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/game/manager/ObjectManager.cs b/DungeonShooting_Godot/src/game/manager/ObjectManager.cs
index 27206a3..fc62066 100644
--- a/DungeonShooting_Godot/src/game/manager/ObjectManager.cs
+++ b/DungeonShooting_Godot/src/game/manager/ObjectManager.cs
@@ -51,6 +51,18 @@
return item;
}
+ public static T GetActivityObject(string id) where T : ActivityObject, IPoolItem
+ {
+ var item = ObjectPool.GetItem(id);
+ if (item == null)
+ {
+ item = ActivityObject.Create(id);
+ item.Logotype = id;
+ }
+
+ return item;
+ }
+
public static Bullet GetBullet(string id)
{
var bullet = ObjectPool.GetItem(id);
diff --git a/DungeonShooting_Godot/src/game/manager/ResourcePath.cs b/DungeonShooting_Godot/src/game/manager/ResourcePath.cs
index 2e45225..9ae2b7a 100644
--- a/DungeonShooting_Godot/src/game/manager/ResourcePath.cs
+++ b/DungeonShooting_Godot/src/game/manager/ResourcePath.cs
@@ -6,9 +6,58 @@
public const string default_bus_layout_tres = "res://default_bus_layout.tres";
public const string default_env_tres = "res://default_env.tres";
public const string icon_png = "res://icon.png";
- public const string _VSCodeCounter_20240121_181451_diff_txt = "res://.VSCodeCounter/2024-01-21_18-14-51/diff.txt";
- public const string _VSCodeCounter_20240121_181451_results_json = "res://.VSCodeCounter/2024-01-21_18-14-51/results.json";
- public const string _VSCodeCounter_20240121_181451_results_txt = "res://.VSCodeCounter/2024-01-21_18-14-51/results.txt";
+ public const string build_windows_data_DungeonShooting_windows_x86_64_DungeonShooting_deps_json = "res://build/windows/data_DungeonShooting_windows_x86_64/DungeonShooting.deps.json";
+ public const string build_windows_data_DungeonShooting_windows_x86_64_DungeonShooting_runtimeconfig_json = "res://build/windows/data_DungeonShooting_windows_x86_64/DungeonShooting.runtimeconfig.json";
+ public const string build_windows_resource_map_tileMaps_GroupConfig_json = "res://build/windows/resource/map/tileMaps/GroupConfig.json";
+ public const string build_windows_resource_map_tileMaps_Test1_battle_Battle1_Preinstall_json = "res://build/windows/resource/map/tileMaps/Test1/battle/Battle1/Preinstall.json";
+ public const string build_windows_resource_map_tileMaps_Test1_battle_Battle1_Preview_png = "res://build/windows/resource/map/tileMaps/Test1/battle/Battle1/Preview.png";
+ public const string build_windows_resource_map_tileMaps_Test1_battle_Battle1_RoomInfo_json = "res://build/windows/resource/map/tileMaps/Test1/battle/Battle1/RoomInfo.json";
+ public const string build_windows_resource_map_tileMaps_Test1_battle_Battle1_TileInfo_json = "res://build/windows/resource/map/tileMaps/Test1/battle/Battle1/TileInfo.json";
+ public const string build_windows_resource_map_tileMaps_Test1_battle_Battle2_Preinstall_json = "res://build/windows/resource/map/tileMaps/Test1/battle/Battle2/Preinstall.json";
+ public const string build_windows_resource_map_tileMaps_Test1_battle_Battle2_Preview_png = "res://build/windows/resource/map/tileMaps/Test1/battle/Battle2/Preview.png";
+ public const string build_windows_resource_map_tileMaps_Test1_battle_Battle2_RoomInfo_json = "res://build/windows/resource/map/tileMaps/Test1/battle/Battle2/RoomInfo.json";
+ public const string build_windows_resource_map_tileMaps_Test1_battle_Battle2_TileInfo_json = "res://build/windows/resource/map/tileMaps/Test1/battle/Battle2/TileInfo.json";
+ public const string build_windows_resource_map_tileMaps_Test1_battle_Battle3_Preinstall_json = "res://build/windows/resource/map/tileMaps/Test1/battle/Battle3/Preinstall.json";
+ public const string build_windows_resource_map_tileMaps_Test1_battle_Battle3_Preview_png = "res://build/windows/resource/map/tileMaps/Test1/battle/Battle3/Preview.png";
+ public const string build_windows_resource_map_tileMaps_Test1_battle_Battle3_RoomInfo_json = "res://build/windows/resource/map/tileMaps/Test1/battle/Battle3/RoomInfo.json";
+ public const string build_windows_resource_map_tileMaps_Test1_battle_Battle3_TileInfo_json = "res://build/windows/resource/map/tileMaps/Test1/battle/Battle3/TileInfo.json";
+ public const string build_windows_resource_map_tileMaps_Test1_battle_Battle4_Preinstall_json = "res://build/windows/resource/map/tileMaps/Test1/battle/Battle4/Preinstall.json";
+ public const string build_windows_resource_map_tileMaps_Test1_battle_Battle4_Preview_png = "res://build/windows/resource/map/tileMaps/Test1/battle/Battle4/Preview.png";
+ public const string build_windows_resource_map_tileMaps_Test1_battle_Battle4_RoomInfo_json = "res://build/windows/resource/map/tileMaps/Test1/battle/Battle4/RoomInfo.json";
+ public const string build_windows_resource_map_tileMaps_Test1_battle_Battle4_TileInfo_json = "res://build/windows/resource/map/tileMaps/Test1/battle/Battle4/TileInfo.json";
+ public const string build_windows_resource_map_tileMaps_Test1_battle_Battle5_Preinstall_json = "res://build/windows/resource/map/tileMaps/Test1/battle/Battle5/Preinstall.json";
+ public const string build_windows_resource_map_tileMaps_Test1_battle_Battle5_Preview_png = "res://build/windows/resource/map/tileMaps/Test1/battle/Battle5/Preview.png";
+ public const string build_windows_resource_map_tileMaps_Test1_battle_Battle5_RoomInfo_json = "res://build/windows/resource/map/tileMaps/Test1/battle/Battle5/RoomInfo.json";
+ public const string build_windows_resource_map_tileMaps_Test1_battle_Battle5_TileInfo_json = "res://build/windows/resource/map/tileMaps/Test1/battle/Battle5/TileInfo.json";
+ public const string build_windows_resource_map_tileMaps_Test1_boss_Boss1_Preinstall_json = "res://build/windows/resource/map/tileMaps/Test1/boss/Boss1/Preinstall.json";
+ public const string build_windows_resource_map_tileMaps_Test1_boss_Boss1_Preview_png = "res://build/windows/resource/map/tileMaps/Test1/boss/Boss1/Preview.png";
+ public const string build_windows_resource_map_tileMaps_Test1_boss_Boss1_RoomInfo_json = "res://build/windows/resource/map/tileMaps/Test1/boss/Boss1/RoomInfo.json";
+ public const string build_windows_resource_map_tileMaps_Test1_boss_Boss1_TileInfo_json = "res://build/windows/resource/map/tileMaps/Test1/boss/Boss1/TileInfo.json";
+ public const string build_windows_resource_map_tileMaps_Test1_inlet_Start_Preinstall_json = "res://build/windows/resource/map/tileMaps/Test1/inlet/Start/Preinstall.json";
+ public const string build_windows_resource_map_tileMaps_Test1_inlet_Start_Preview_png = "res://build/windows/resource/map/tileMaps/Test1/inlet/Start/Preview.png";
+ public const string build_windows_resource_map_tileMaps_Test1_inlet_Start_RoomInfo_json = "res://build/windows/resource/map/tileMaps/Test1/inlet/Start/RoomInfo.json";
+ public const string build_windows_resource_map_tileMaps_Test1_inlet_Start_TileInfo_json = "res://build/windows/resource/map/tileMaps/Test1/inlet/Start/TileInfo.json";
+ public const string build_windows_resource_map_tileMaps_Test1_outlet_End1_Preinstall_json = "res://build/windows/resource/map/tileMaps/Test1/outlet/End1/Preinstall.json";
+ public const string build_windows_resource_map_tileMaps_Test1_outlet_End1_Preview_png = "res://build/windows/resource/map/tileMaps/Test1/outlet/End1/Preview.png";
+ public const string build_windows_resource_map_tileMaps_Test1_outlet_End1_RoomInfo_json = "res://build/windows/resource/map/tileMaps/Test1/outlet/End1/RoomInfo.json";
+ public const string build_windows_resource_map_tileMaps_Test1_outlet_End1_TileInfo_json = "res://build/windows/resource/map/tileMaps/Test1/outlet/End1/TileInfo.json";
+ public const string build_windows_resource_map_tileMaps_Test1_reward_Award1_Preinstall_json = "res://build/windows/resource/map/tileMaps/Test1/reward/Award1/Preinstall.json";
+ public const string build_windows_resource_map_tileMaps_Test1_reward_Award1_Preview_png = "res://build/windows/resource/map/tileMaps/Test1/reward/Award1/Preview.png";
+ public const string build_windows_resource_map_tileMaps_Test1_reward_Award1_RoomInfo_json = "res://build/windows/resource/map/tileMaps/Test1/reward/Award1/RoomInfo.json";
+ public const string build_windows_resource_map_tileMaps_Test1_reward_Award1_TileInfo_json = "res://build/windows/resource/map/tileMaps/Test1/reward/Award1/TileInfo.json";
+ public const string build_windows_resource_map_tileMaps_Test1_shop_Shop1_Preinstall_json = "res://build/windows/resource/map/tileMaps/Test1/shop/Shop1/Preinstall.json";
+ public const string build_windows_resource_map_tileMaps_Test1_shop_Shop1_Preview_png = "res://build/windows/resource/map/tileMaps/Test1/shop/Shop1/Preview.png";
+ public const string build_windows_resource_map_tileMaps_Test1_shop_Shop1_RoomInfo_json = "res://build/windows/resource/map/tileMaps/Test1/shop/Shop1/RoomInfo.json";
+ public const string build_windows_resource_map_tileMaps_Test1_shop_Shop1_TileInfo_json = "res://build/windows/resource/map/tileMaps/Test1/shop/Shop1/TileInfo.json";
+ public const string build_windows_resource_map_tileSet_TileSetConfig_json = "res://build/windows/resource/map/tileSet/TileSetConfig.json";
+ public const string build_windows_resource_map_tileSet_TileSet1_Main_png = "res://build/windows/resource/map/tileSet/TileSet1/Main.png";
+ public const string build_windows_resource_map_tileSet_TileSet1_Test1_png = "res://build/windows/resource/map/tileSet/TileSet1/Test1.png";
+ public const string build_windows_resource_map_tileSet_TileSet1_Test2_png = "res://build/windows/resource/map/tileSet/TileSet1/Test2.png";
+ public const string build_windows_resource_map_tileSet_TileSet1_Test3_png = "res://build/windows/resource/map/tileSet/TileSet1/Test3.png";
+ public const string build_windows_resource_map_tileSet_TileSet1_TileSet_json = "res://build/windows/resource/map/tileSet/TileSet1/TileSet.json";
+ public const string build_windows_resource_map_tileSet_TileSet2_Main_png = "res://build/windows/resource/map/tileSet/TileSet2/Main.png";
+ public const string build_windows_resource_map_tileSet_TileSet2_Test2_png = "res://build/windows/resource/map/tileSet/TileSet2/Test2.png";
+ public const string build_windows_resource_map_tileSet_TileSet2_TileSet_json = "res://build/windows/resource/map/tileSet/TileSet2/TileSet.json";
public const string excelTool_bin_Release_net8_0_winx64_ExcelTool_deps_json = "res://excelTool/bin/Release/net8.0/win-x64/ExcelTool.deps.json";
public const string excelTool_bin_Release_net8_0_winx64_ExcelTool_runtimeconfig_json = "res://excelTool/bin/Release/net8.0/win-x64/ExcelTool.runtimeconfig.json";
public const string excelTool_obj_ExcelTool_csproj_nuget_dgspec_json = "res://excelTool/obj/ExcelTool.csproj.nuget.dgspec.json";
@@ -18,27 +67,37 @@
public const string excelTool_publish_winx64_ExcelTool_deps_json = "res://excelTool/publish/win-x64/ExcelTool.deps.json";
public const string excelTool_publish_winx64_ExcelTool_runtimeconfig_json = "res://excelTool/publish/win-x64/ExcelTool.runtimeconfig.json";
public const string prefab_Cursor_tscn = "res://prefab/Cursor.tscn";
+ public const string prefab_box_TreasureBox0001_tscn = "res://prefab/box/TreasureBox0001.tscn";
public const string prefab_bullet_explode_Explode0001_tscn = "res://prefab/bullet/explode/Explode0001.tscn";
public const string prefab_bullet_laser_Laser0001_tscn = "res://prefab/bullet/laser/Laser0001.tscn";
+ public const string prefab_bullet_laser_Laser0002_tscn = "res://prefab/bullet/laser/Laser0002.tscn";
public const string prefab_bullet_normal_Bullet0001_tscn = "res://prefab/bullet/normal/Bullet0001.tscn";
public const string prefab_bullet_normal_Bullet0002_tscn = "res://prefab/bullet/normal/Bullet0002.tscn";
public const string prefab_bullet_normal_Bullet0003_tscn = "res://prefab/bullet/normal/Bullet0003.tscn";
public const string prefab_bullet_normal_Bullet0004_tscn = "res://prefab/bullet/normal/Bullet0004.tscn";
public const string prefab_bullet_normal_Bullet0005_tscn = "res://prefab/bullet/normal/Bullet0005.tscn";
+ public const string prefab_bullet_normal_Bullet0006_tscn = "res://prefab/bullet/normal/Bullet0006.tscn";
+ public const string prefab_bullet_normal_Bullet0007_tscn = "res://prefab/bullet/normal/Bullet0007.tscn";
+ public const string prefab_currency_Gold1_tscn = "res://prefab/currency/Gold1.tscn";
+ public const string prefab_currency_Gold10_tscn = "res://prefab/currency/Gold10.tscn";
+ public const string prefab_currency_Gold5_tscn = "res://prefab/currency/Gold5.tscn";
+ public const string prefab_currency_GoldTemplate_tscn = "res://prefab/currency/GoldTemplate.tscn";
public const string prefab_effect_Blood_tscn = "res://prefab/effect/Blood.tscn";
public const string prefab_effect_bullet_BulletDisappear0001_tscn = "res://prefab/effect/bullet/BulletDisappear0001.tscn";
public const string prefab_effect_bullet_BulletDisappear0002_tscn = "res://prefab/effect/bullet/BulletDisappear0002.tscn";
public const string prefab_effect_bullet_BulletSmoke0001_tscn = "res://prefab/effect/bullet/BulletSmoke0001.tscn";
public const string prefab_effect_bullet_BulletSmoke0002_tscn = "res://prefab/effect/bullet/BulletSmoke0002.tscn";
public const string prefab_effect_common_Effect1_tscn = "res://prefab/effect/common/Effect1.tscn";
+ public const string prefab_effect_common_Trail0001_tscn = "res://prefab/effect/common/Trail0001.tscn";
public const string prefab_effect_enemy_EnemyBlood0001_tscn = "res://prefab/effect/enemy/EnemyBlood0001.tscn";
public const string prefab_effect_enemy_EnemyDead0001_tscn = "res://prefab/effect/enemy/EnemyDead0001.tscn";
public const string prefab_effect_enemy_EnemyDead0002_tscn = "res://prefab/effect/enemy/EnemyDead0002.tscn";
public const string prefab_effect_weapon_MeleeAttack1_tscn = "res://prefab/effect/weapon/MeleeAttack1.tscn";
public const string prefab_effect_weapon_MeleeAttack2_tscn = "res://prefab/effect/weapon/MeleeAttack2.tscn";
- public const string prefab_effect_weapon_ShotFire_tscn = "res://prefab/effect/weapon/ShotFire.tscn";
- public const string prefab_effect_weapon_ShotFire2_tscn = "res://prefab/effect/weapon/ShotFire2.tscn";
- public const string prefab_effect_weapon_ShotFire3_tscn = "res://prefab/effect/weapon/ShotFire3.tscn";
+ public const string prefab_effect_weapon_ShotFire0001_tscn = "res://prefab/effect/weapon/ShotFire0001.tscn";
+ public const string prefab_effect_weapon_ShotFire0002_tscn = "res://prefab/effect/weapon/ShotFire0002.tscn";
+ public const string prefab_effect_weapon_ShotFire0003_tscn = "res://prefab/effect/weapon/ShotFire0003.tscn";
+ public const string prefab_effect_weapon_ShotFire0004_tscn = "res://prefab/effect/weapon/ShotFire0004.tscn";
public const string prefab_map_RoomDoor_E_tscn = "res://prefab/map/RoomDoor_E.tscn";
public const string prefab_map_RoomDoor_N_tscn = "res://prefab/map/RoomDoor_N.tscn";
public const string prefab_map_RoomDoor_S_tscn = "res://prefab/map/RoomDoor_S.tscn";
@@ -114,6 +173,10 @@
public const string prefab_weapon_Weapon0007_tscn = "res://prefab/weapon/Weapon0007.tscn";
public const string prefab_weapon_Weapon0008_tscn = "res://prefab/weapon/Weapon0008.tscn";
public const string prefab_weapon_Weapon0009_tscn = "res://prefab/weapon/Weapon0009.tscn";
+ public const string prefab_weapon_Weapon0010_tscn = "res://prefab/weapon/Weapon0010.tscn";
+ public const string prefab_weapon_Weapon0011_tscn = "res://prefab/weapon/Weapon0011.tscn";
+ public const string prefab_weapon_Weapon0013_tscn = "res://prefab/weapon/Weapon0013.tscn";
+ public const string prefab_weapon_Weapon0014_tscn = "res://prefab/weapon/Weapon0014.tscn";
public const string prefab_weapon_WeaponTemplate_tscn = "res://prefab/weapon/WeaponTemplate.tscn";
public const string resource_config_ActivityBase_json = "res://resource/config/ActivityBase.json";
public const string resource_config_ActivityMaterial_json = "res://resource/config/ActivityMaterial.json";
@@ -129,15 +192,6 @@
public const string resource_font_DinkieBitmap9pxItalicDemo_ttf = "res://resource/font/DinkieBitmap-9pxItalicDemo.ttf";
public const string resource_font_VonwaonBitmap12px_ttf = "res://resource/font/VonwaonBitmap-12px.ttf";
public const string resource_font_VonwaonBitmap16px_ttf = "res://resource/font/VonwaonBitmap-16px.ttf";
- public const string resource_map_tileSet_TileSetConfig_json = "res://resource/map/tileSet/TileSetConfig.json";
- public const string resource_map_tileSet_TileSet1_Main_png = "res://resource/map/tileSet/TileSet1/Main.png";
- public const string resource_map_tileSet_TileSet1_Test1_png = "res://resource/map/tileSet/TileSet1/Test1.png";
- public const string resource_map_tileSet_TileSet1_Test2_png = "res://resource/map/tileSet/TileSet1/Test2.png";
- public const string resource_map_tileSet_TileSet1_Test3_png = "res://resource/map/tileSet/TileSet1/Test3.png";
- public const string resource_map_tileSet_TileSet1_TileSet_json = "res://resource/map/tileSet/TileSet1/TileSet.json";
- public const string resource_map_tileSet_TileSet2_Main_png = "res://resource/map/tileSet/TileSet2/Main.png";
- public const string resource_map_tileSet_TileSet2_Test2_png = "res://resource/map/tileSet/TileSet2/Test2.png";
- public const string resource_map_tileSet_TileSet2_TileSet_json = "res://resource/map/tileSet/TileSet2/TileSet.json";
public const string resource_material_Blend_gdshader = "res://resource/material/Blend.gdshader";
public const string resource_material_Blend_tres = "res://resource/material/Blend.tres";
public const string resource_material_GodRays_gdshader = "res://resource/material/GodRays.gdshader";
@@ -171,6 +225,7 @@
public const string resource_sound_sfx_beLoaded_BeLoaded0016_ogg = "res://resource/sound/sfx/beLoaded/BeLoaded0016.ogg";
public const string resource_sound_sfx_beLoaded_BeLoaded0017_ogg = "res://resource/sound/sfx/beLoaded/BeLoaded0017.ogg";
public const string resource_sound_sfx_collision_Collision0001_ogg = "res://resource/sound/sfx/collision/Collision0001.ogg";
+ public const string resource_sound_sfx_common_gold_ogg = "res://resource/sound/sfx/common/gold.ogg";
public const string resource_sound_sfx_explosion_Explosion0001_ogg = "res://resource/sound/sfx/explosion/Explosion0001.ogg";
public const string resource_sound_sfx_explosion_Explosion0002_ogg = "res://resource/sound/sfx/explosion/Explosion0002.ogg";
public const string resource_sound_sfx_explosion_Explosion0003_ogg = "res://resource/sound/sfx/explosion/Explosion0003.ogg";
@@ -189,10 +244,12 @@
public const string resource_sound_sfx_reloading_Reloading_begin0010_ogg = "res://resource/sound/sfx/reloading/Reloading_begin0010.ogg";
public const string resource_sound_sfx_reloading_Reloading_begin0011_ogg = "res://resource/sound/sfx/reloading/Reloading_begin0011.ogg";
public const string resource_sound_sfx_reloading_Reloading_begin0012_ogg = "res://resource/sound/sfx/reloading/Reloading_begin0012.ogg";
+ public const string resource_sound_sfx_reloading_Reloading_begin0013_ogg = "res://resource/sound/sfx/reloading/Reloading_begin0013.ogg";
public const string resource_sound_sfx_reloading_Reloading_finish0001_ogg = "res://resource/sound/sfx/reloading/Reloading_finish0001.ogg";
public const string resource_sound_sfx_reloading_Reloading_finish0002_ogg = "res://resource/sound/sfx/reloading/Reloading_finish0002.ogg";
public const string resource_sound_sfx_reloading_Reloading_finish0003_ogg = "res://resource/sound/sfx/reloading/Reloading_finish0003.ogg";
public const string resource_sound_sfx_reloading_Reloading_finish0004_ogg = "res://resource/sound/sfx/reloading/Reloading_finish0004.ogg";
+ public const string resource_sound_sfx_reloading_Reloading_finish0005_ogg = "res://resource/sound/sfx/reloading/Reloading_finish0005.ogg";
public const string resource_sound_sfx_shooting_Shooting0001_ogg = "res://resource/sound/sfx/shooting/Shooting0001.ogg";
public const string resource_sound_sfx_shooting_Shooting0002_ogg = "res://resource/sound/sfx/shooting/Shooting0002.ogg";
public const string resource_sound_sfx_shooting_Shooting0003_ogg = "res://resource/sound/sfx/shooting/Shooting0003.ogg";
@@ -204,7 +261,10 @@
public const string resource_sound_sfx_shooting_Shooting0009_ogg = "res://resource/sound/sfx/shooting/Shooting0009.ogg";
public const string resource_sound_sfx_shooting_Shooting0010_ogg = "res://resource/sound/sfx/shooting/Shooting0010.ogg";
public const string resource_sound_sfx_shooting_Shooting0011_ogg = "res://resource/sound/sfx/shooting/Shooting0011.ogg";
- public const string resource_sprite_1234_txt = "res://resource/sprite/1234.txt";
+ public const string resource_sound_sfx_shooting_Shooting0012_ogg = "res://resource/sound/sfx/shooting/Shooting0012.ogg";
+ public const string resource_sound_sfx_shooting_Shooting0013_ogg = "res://resource/sound/sfx/shooting/Shooting0013.ogg";
+ public const string resource_sprite_box_TreasureBox0001_png = "res://resource/sprite/box/TreasureBox0001.png";
+ public const string resource_sprite_box_TreasureBox0001_icon_png = "res://resource/sprite/box/TreasureBox0001_icon.png";
public const string resource_sprite_brush_Brush1_png = "res://resource/sprite/brush/Brush1.png";
public const string resource_sprite_brush_Brush2_png = "res://resource/sprite/brush/Brush2.png";
public const string resource_sprite_brush_Brush3_png = "res://resource/sprite/brush/Brush3.png";
@@ -219,6 +279,8 @@
public const string resource_sprite_bullet_normal_bullet0003_png = "res://resource/sprite/bullet/normal/bullet0003.png";
public const string resource_sprite_bullet_normal_bullet0004_png = "res://resource/sprite/bullet/normal/bullet0004.png";
public const string resource_sprite_bullet_normal_bullet0005_png = "res://resource/sprite/bullet/normal/bullet0005.png";
+ public const string resource_sprite_bullet_normal_bullet0006_png = "res://resource/sprite/bullet/normal/bullet0006.png";
+ public const string resource_sprite_bullet_normal_bullet0007_png = "res://resource/sprite/bullet/normal/bullet0007.png";
public const string resource_sprite_bullet_normal_bullet2_png = "res://resource/sprite/bullet/normal/bullet2.png";
public const string resource_sprite_common_Circle_png = "res://resource/sprite/common/Circle.png";
public const string resource_sprite_common_Circle2_png = "res://resource/sprite/common/Circle2.png";
@@ -229,6 +291,10 @@
public const string resource_sprite_common_Smoke2_png = "res://resource/sprite/common/Smoke2.png";
public const string resource_sprite_common_Smoke3_png = "res://resource/sprite/common/Smoke3.png";
public const string resource_sprite_common_Smoke4_png = "res://resource/sprite/common/Smoke4.png";
+ public const string resource_sprite_currency_Gold_1_png = "res://resource/sprite/currency/Gold_1.png";
+ public const string resource_sprite_currency_Gold_10_png = "res://resource/sprite/currency/Gold_10.png";
+ public const string resource_sprite_currency_Gold_5_png = "res://resource/sprite/currency/Gold_5.png";
+ public const string resource_sprite_currency_Gold_shadow_png = "res://resource/sprite/currency/Gold_shadow.png";
public const string resource_sprite_explode_Explode_circle0001_png = "res://resource/sprite/explode/Explode_circle0001.png";
public const string resource_sprite_explode_Explode_circle0002_png = "res://resource/sprite/explode/Explode_circle0002.png";
public const string resource_sprite_explode_Explode_circle0003_png = "res://resource/sprite/explode/Explode_circle0003.png";
@@ -252,6 +318,7 @@
public const string resource_sprite_map_WallTransition3_png = "res://resource/sprite/map/WallTransition3.png";
public const string resource_sprite_prop_active_ActiveProp5000_png = "res://resource/sprite/prop/active/ActiveProp5000.png";
public const string resource_sprite_prop_active_ActiveProp5001_png = "res://resource/sprite/prop/active/ActiveProp5001.png";
+ public const string resource_sprite_prop_buff_BuffProp0001export_png = "res://resource/sprite/prop/buff/BuffProp0001-export.png";
public const string resource_sprite_prop_buff_BuffProp0001_png = "res://resource/sprite/prop/buff/BuffProp0001.png";
public const string resource_sprite_prop_buff_BuffProp0002_png = "res://resource/sprite/prop/buff/BuffProp0002.png";
public const string resource_sprite_prop_buff_BuffProp0003_png = "res://resource/sprite/prop/buff/BuffProp0003.png";
@@ -274,6 +341,7 @@
public const string resource_sprite_role_role7_png = "res://resource/sprite/role/role7.png";
public const string resource_sprite_role_role8_png = "res://resource/sprite/role/role8.png";
public const string resource_sprite_role_role9_png = "res://resource/sprite/role/role9.png";
+ public const string resource_sprite_role_scarecrow0001_png = "res://resource/sprite/role/scarecrow0001.png";
public const string resource_sprite_role_common_Role_astonished_png = "res://resource/sprite/role/common/Role_astonished.png";
public const string resource_sprite_role_common_Role_notify_png = "res://resource/sprite/role/common/Role_notify.png";
public const string resource_sprite_role_common_Role_query_png = "res://resource/sprite/role/common/Role_query.png";
@@ -320,6 +388,7 @@
public const string resource_sprite_shell_Shell0004_png = "res://resource/sprite/shell/Shell0004.png";
public const string resource_sprite_shootFire_ShotFire0001_png = "res://resource/sprite/shootFire/ShotFire0001.png";
public const string resource_sprite_shootFire_ShotFire0002_png = "res://resource/sprite/shootFire/ShotFire0002.png";
+ public const string resource_sprite_shootFire_ShotFire0003_png = "res://resource/sprite/shootFire/ShotFire0003.png";
public const string resource_sprite_ui_font_bg_png = "res://resource/sprite/ui/font_bg.png";
public const string resource_sprite_ui_GUI_png = "res://resource/sprite/ui/GUI.png";
public const string resource_sprite_ui_commonIcon_Add_png = "res://resource/sprite/ui/commonIcon/Add.png";
@@ -336,6 +405,7 @@
public const string resource_sprite_ui_commonIcon_DragTool_png = "res://resource/sprite/ui/commonIcon/DragTool.png";
public const string resource_sprite_ui_commonIcon_Edit_png = "res://resource/sprite/ui/commonIcon/Edit.png";
public const string resource_sprite_ui_commonIcon_Error_mini_png = "res://resource/sprite/ui/commonIcon/Error_mini.png";
+ public const string resource_sprite_ui_commonIcon_Gold_10_png = "res://resource/sprite/ui/commonIcon/Gold_10.png";
public const string resource_sprite_ui_commonIcon_Hide_png = "res://resource/sprite/ui/commonIcon/Hide.png";
public const string resource_sprite_ui_commonIcon_Import_png = "res://resource/sprite/ui/commonIcon/Import.png";
public const string resource_sprite_ui_commonIcon_Lock_png = "res://resource/sprite/ui/commonIcon/Lock.png";
@@ -382,15 +452,6 @@
public const string resource_sprite_ui_sursors_CursorCenter_png = "res://resource/sprite/ui/sursors/CursorCenter.png";
public const string resource_sprite_ui_sursors_Cursors_png = "res://resource/sprite/ui/sursors/Cursors.png";
public const string resource_sprite_ui_sursors_Cursors_Ui_png = "res://resource/sprite/ui/sursors/Cursors_Ui.png";
- public const string resource_sprite_weapon_bow_png = "res://resource/sprite/weapon/bow.png";
- public const string resource_sprite_weapon_gun1_png = "res://resource/sprite/weapon/gun1.png";
- public const string resource_sprite_weapon_gun2_png = "res://resource/sprite/weapon/gun2.png";
- public const string resource_sprite_weapon_gun3_png = "res://resource/sprite/weapon/gun3.png";
- public const string resource_sprite_weapon_gun4_png = "res://resource/sprite/weapon/gun4.png";
- public const string resource_sprite_weapon_gun5_png = "res://resource/sprite/weapon/gun5.png";
- public const string resource_sprite_weapon_gun6_png = "res://resource/sprite/weapon/gun6.png";
- public const string resource_sprite_weapon_gun7_png = "res://resource/sprite/weapon/gun7.png";
- public const string resource_sprite_weapon_gun8_png = "res://resource/sprite/weapon/gun8.png";
public const string resource_sprite_weapon_weapon0001_Weapon0001_png = "res://resource/sprite/weapon/weapon0001/Weapon0001.png";
public const string resource_sprite_weapon_weapon0002_Weapon0002_png = "res://resource/sprite/weapon/weapon0002/Weapon0002.png";
public const string resource_sprite_weapon_weapon0002_Weapon0002_reloading_png = "res://resource/sprite/weapon/weapon0002/Weapon0002_reloading.png";
@@ -404,11 +465,27 @@
public const string resource_sprite_weapon_weapon0008_Weapon0008_reloading_png = "res://resource/sprite/weapon/weapon0008/Weapon0008_reloading.png";
public const string resource_sprite_weapon_weapon0009_weapon0009_png = "res://resource/sprite/weapon/weapon0009/weapon0009.png";
public const string resource_sprite_weapon_weapon0009_Weapon0009_reload_png = "res://resource/sprite/weapon/weapon0009/Weapon0009_reload.png";
+ public const string resource_sprite_weapon_weapon0010_Weapon0010_png = "res://resource/sprite/weapon/weapon0010/Weapon0010.png";
+ public const string resource_sprite_weapon_weapon0010_Weapon0010_reloading_png = "res://resource/sprite/weapon/weapon0010/Weapon0010_reloading.png";
+ public const string resource_sprite_weapon_weapon0011_Weapon0011_png = "res://resource/sprite/weapon/weapon0011/Weapon0011.png";
+ public const string resource_sprite_weapon_weapon0012_bow_png = "res://resource/sprite/weapon/weapon0012/bow.png";
+ public const string resource_sprite_weapon_weapon0013_weapon0013_png = "res://resource/sprite/weapon/weapon0013/weapon0013.png";
+ public const string resource_sprite_weapon_weapon0013_weapon0014export_png = "res://resource/sprite/weapon/weapon0013/weapon0014-export.png";
+ public const string resource_sprite_weapon_weapon0013_weapon0014_png = "res://resource/sprite/weapon/weapon0013/weapon0014.png";
+ public const string resource_sprite_weapon_weapon0014_Weapon0014_png = "res://resource/sprite/weapon/weapon0014/Weapon0014.png";
+ public const string resource_sprite_weapon_weapon0015_gun3_png = "res://resource/sprite/weapon/weapon0015/gun3.png";
+ public const string resource_sprite_weapon_weapon0016_gun4_png = "res://resource/sprite/weapon/weapon0016/gun4.png";
+ public const string resource_sprite_weapon_weapon0017_gun5_png = "res://resource/sprite/weapon/weapon0017/gun5.png";
+ public const string resource_sprite_weapon_weapon0018_gun6_png = "res://resource/sprite/weapon/weapon0018/gun6.png";
+ public const string resource_sprite_weapon_weapon0019_gun7_png = "res://resource/sprite/weapon/weapon0019/gun7.png";
+ public const string resource_sprite_weapon_weapon0020_gun8_png = "res://resource/sprite/weapon/weapon0020/gun8.png";
public const string resource_spriteFrames_bullet_Bullet0001_tres = "res://resource/spriteFrames/bullet/Bullet0001.tres";
public const string resource_spriteFrames_bullet_Bullet0002_tres = "res://resource/spriteFrames/bullet/Bullet0002.tres";
public const string resource_spriteFrames_bullet_Bullet0003_tres = "res://resource/spriteFrames/bullet/Bullet0003.tres";
public const string resource_spriteFrames_bullet_Bullet0004_tres = "res://resource/spriteFrames/bullet/Bullet0004.tres";
public const string resource_spriteFrames_bullet_Bullet0005_tres = "res://resource/spriteFrames/bullet/Bullet0005.tres";
+ public const string resource_spriteFrames_bullet_Bullet0006_tres = "res://resource/spriteFrames/bullet/Bullet0006.tres";
+ public const string resource_spriteFrames_bullet_Bullet0007_tres = "res://resource/spriteFrames/bullet/Bullet0007.tres";
public const string resource_spriteFrames_bullet_Collision0001_tres = "res://resource/spriteFrames/bullet/Collision0001.tres";
public const string resource_spriteFrames_bullet_Collision0002_tres = "res://resource/spriteFrames/bullet/Collision0002.tres";
public const string resource_spriteFrames_other_RoomDoor_E_Down_tres = "res://resource/spriteFrames/other/RoomDoor_E_Down.tres";
@@ -451,6 +528,10 @@
public const string resource_spriteFrames_weapon_Weapon0007_tres = "res://resource/spriteFrames/weapon/Weapon0007.tres";
public const string resource_spriteFrames_weapon_Weapon0008_tres = "res://resource/spriteFrames/weapon/Weapon0008.tres";
public const string resource_spriteFrames_weapon_Weapon0009_tres = "res://resource/spriteFrames/weapon/Weapon0009.tres";
+ public const string resource_spriteFrames_weapon_Weapon0010_tres = "res://resource/spriteFrames/weapon/Weapon0010.tres";
+ public const string resource_spriteFrames_weapon_Weapon0011_tres = "res://resource/spriteFrames/weapon/Weapon0011.tres";
+ public const string resource_spriteFrames_weapon_Weapon0013_tres = "res://resource/spriteFrames/weapon/Weapon0013.tres";
+ public const string resource_spriteFrames_weapon_Weapon0014_tres = "res://resource/spriteFrames/weapon/Weapon0014.tres";
public const string resource_theme_mainTheme_tres = "res://resource/theme/mainTheme.tres";
public const string resource_theme_theme1_tres = "res://resource/theme/theme1.tres";
public const string scene_Main_tscn = "res://scene/Main.tscn";
@@ -472,4 +553,5 @@
public const string scene_test_TestRoomFog_tscn = "res://scene/test/TestRoomFog.tscn";
public const string scene_test_TestTerrain2x2_tscn = "res://scene/test/TestTerrain2x2.tscn";
public const string scene_test_TestTileLayer_tscn = "res://scene/test/TestTileLayer.tscn";
+ public const string scene_test_TestTrail_tscn = "res://scene/test/TestTrail.tscn";
}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/game/manager/SpecialEffectManager.cs b/DungeonShooting_Godot/src/game/manager/SpecialEffectManager.cs
index 0d74206..5e5330e 100644
--- a/DungeonShooting_Godot/src/game/manager/SpecialEffectManager.cs
+++ b/DungeonShooting_Godot/src/game/manager/SpecialEffectManager.cs
@@ -51,7 +51,7 @@
/// 层级
/// 播放速度
/// 循环次数, 到达该次数特效停止播放
- public static void Play(Node root, string path, string animName, Vector2 pos, float rotation, Vector2 scale, Vector2 offset, int zIndex = 0, float speed = 1, int loopCount = 1)
+ public static void PlaySpriteFrames(Node root, string path, string animName, Vector2 pos, float rotation, Vector2 scale, Vector2 offset, int zIndex = 0, float speed = 1, int loopCount = 1)
{
var spriteFrames = ResourceManager.Load(path);
var specialEffect = new SpecialEffect();
diff --git a/DungeonShooting_Godot/src/game/room/DefaultDungeonRule.cs b/DungeonShooting_Godot/src/game/room/DefaultDungeonRule.cs
index d092b84..115ada8 100644
--- a/DungeonShooting_Godot/src/game/room/DefaultDungeonRule.cs
+++ b/DungeonShooting_Godot/src/game/room/DefaultDungeonRule.cs
@@ -1,40 +1,207 @@
+using System.Collections.Generic;
+using Godot;
+
///
/// 默认实现地牢房间规则
///
public class DefaultDungeonRule : DungeonRule
{
+ //用于排除上一级房间
+ private List excludePrevRoom = new List();
+
+ //战斗房间尝试链接次数
+ private int battleTryCount = 0;
+ private int battleMaxTryCount = 3;
+
+ //结束房间尝试链接次数
+ private int outletTryCount = 0;
+ //奖励房间绑定的上一个房间
+ private List rewardBindRoom = new List();
+
+ private readonly RoomDirection[] _roomDirections = new []{ RoomDirection.Up, RoomDirection.Down, RoomDirection.Left, RoomDirection.Right };
+
public DefaultDungeonRule(DungeonGenerator generator) : base(generator)
{
}
public override bool CanOverGenerator()
{
- return Generator.BattleRoomInfos.Count >= Config.BattleRoomCount;
+ return Generator.BattleRoomInfos.Count >= Config.BattleRoomCount && Generator.EndRoomInfos.Count > 0;
}
- public override DungeonRoomType GetNextRoomType(RoomInfo prev)
+ public override RoomInfo GetConnectPrevRoom(RoomInfo prevRoom, DungeonRoomType nextRoomType)
+ {
+ if (nextRoomType == DungeonRoomType.Inlet)
+ {
+ return null;
+ }
+ else if (nextRoomType == DungeonRoomType.Boss)
+ {
+ return Generator.FindMaxLayerRoom(DungeonRoomType.Battle | DungeonRoomType.Shop, excludePrevRoom);
+ }
+ else if (nextRoomType == DungeonRoomType.Outlet || nextRoomType == DungeonRoomType.Shop || nextRoomType == DungeonRoomType.Event)
+ {
+ return prevRoom;
+ }
+ else if (nextRoomType == DungeonRoomType.Reward)
+ {
+ foreach (var temp in rewardBindRoom)
+ {
+ if (!excludePrevRoom.Contains(temp))
+ {
+ excludePrevRoom.Add(temp);
+ }
+ }
+
+ return Generator.FindMaxLayerRoom(DungeonRoomType.Battle | DungeonRoomType.Shop | DungeonRoomType.Event, excludePrevRoom);
+ }
+ else if (nextRoomType == DungeonRoomType.Battle)
+ {
+ if (battleTryCount < battleMaxTryCount)
+ {
+ if (prevRoom == null || prevRoom.Layer >= Config.MaxLayer - 1) //层数太高, 下一个房间生成在低层级
+ {
+ return Generator.RandomRoomLessThanLayer(DungeonRoomType.Battle | DungeonRoomType.Shop | DungeonRoomType.Event | DungeonRoomType.Inlet, Mathf.Max(1, Config.MaxLayer / 2));
+ }
+
+ return prevRoom;
+ }
+ return Generator.GetRandomRoom(DungeonRoomType.Battle | DungeonRoomType.Shop | DungeonRoomType.Event | DungeonRoomType.Inlet);
+ }
+
+ return Generator.GetRandomRoom(DungeonRoomType.None);
+ }
+
+ public override DungeonRoomType GetNextRoomType(RoomInfo prevRoom)
{
if (Generator.StartRoomInfo == null) //生成第一个房间
{
return DungeonRoomType.Inlet;
}
- // else if (Generator.BattleRoomInfos.Count == 0) //奖励房间
- // {
- // return DungeonRoomType.Reward;
- // }
- else if (Generator.BattleRoomInfos.Count == Config.BattleRoomCount - 1) //最后一个房间是boss房间
+
+ if (prevRoom != null)
{
- return DungeonRoomType.Boss;
+ if (prevRoom.RoomType == DungeonRoomType.Boss) //boss房间后生成结束房间
+ {
+ return DungeonRoomType.Outlet;
+ }
+
+ if (Generator.RewardRoomInfos.Count < Config.RewardRoomCount)
+ {
+ if (Generator.BattleRoomInfos.Count == Config.BattleRoomCount / (Config.RewardRoomCount + 1) * (Generator.RewardRoomInfos.Count + 1)) //奖励房间
+ {
+ return DungeonRoomType.Reward;
+ }
+ }
+ if (Generator.ShopRoomInfos.Count < Config.ShopRoomCount)
+ {
+ if (Generator.BattleRoomInfos.Count == Config.BattleRoomCount / (Config.ShopRoomCount + 1) * (Generator.ShopRoomInfos.Count + 1)) //商店
+ {
+ return DungeonRoomType.Shop;
+ }
+ }
}
- else if (Generator.BattleRoomInfos.Count >= Config.BattleRoomCount) //结束房间
+
+ if (Generator.BattleRoomInfos.Count >= Config.BattleRoomCount) //战斗房间已满
{
- return DungeonRoomType.Outlet;
- }
- else if (prev.RoomType == DungeonRoomType.Boss) //生成结束房间
- {
- return DungeonRoomType.Outlet;
+ if (Generator.BossRoomInfos.Count < Config.BossRoomCount) //最后一个房间是boss房间
+ {
+ if (RoomGroup.BossList.Count == 0) //没有预设boss房间
+ {
+ return DungeonRoomType.Battle;
+ }
+ //生成boss房间
+ return DungeonRoomType.Boss;
+ }
}
return DungeonRoomType.Battle;
}
+
+ public override void GenerateRoomSuccess(RoomInfo prevRoom, RoomInfo roomInfo)
+ {
+ if (roomInfo.RoomType == DungeonRoomType.Boss) //boss房间
+ {
+ roomInfo.CanRollback = true;
+ excludePrevRoom.Clear();
+ }
+ else if (roomInfo.RoomType == DungeonRoomType.Battle)
+ {
+ battleTryCount = 0;
+ battleMaxTryCount = Random.RandomRangeInt(1, 3);
+ }
+ else if (roomInfo.RoomType == DungeonRoomType.Outlet)
+ {
+ outletTryCount = 0;
+ Generator.SubmitCanRollbackRoom();
+ }
+ else if (roomInfo.RoomType == DungeonRoomType.Reward)
+ {
+ rewardBindRoom.Add(prevRoom);
+ excludePrevRoom.Clear();
+ }
+
+ if (prevRoom != null && prevRoom.CanRollback)
+ {
+ roomInfo.CanRollback = true;
+ }
+ }
+
+ public override void GenerateRoomFail(RoomInfo prevRoom, DungeonRoomType roomType)
+ {
+ if (roomType == DungeonRoomType.Boss || roomType == DungeonRoomType.Reward)
+ {
+ //生成房间失败
+ excludePrevRoom.Add(prevRoom);
+ if (excludePrevRoom.Count >= Generator.RoomInfos.Count)
+ {
+ //全都没找到合适的, 那就再来一遍
+ excludePrevRoom.Clear();
+ }
+ }
+ else if (roomType == DungeonRoomType.Outlet)
+ {
+ outletTryCount++;
+ if (outletTryCount >= 3 && prevRoom != null) //生成结束房间失败, 那么只能回滚boss房间
+ {
+ outletTryCount = 0;
+ Generator.RollbackRoom(prevRoom);
+ }
+ }
+ else if (roomType == DungeonRoomType.Battle)
+ {
+ battleTryCount++;
+ }
+ }
+
+ public override RoomDirection GetNextRoomDoorDirection(RoomInfo prevRoom, DungeonRoomType roomType)
+ {
+ return Random.RandomChoose(_roomDirections);
+ }
+
+ public override int GetNextRoomInterval(RoomInfo prevRoom, DungeonRoomType roomType, RoomDirection direction)
+ {
+ return Random.RandomRangeInt(Config.RoomMinInterval, Config.RoomMaxInterval);
+ }
+
+ public override int GetNextRoomOffset(RoomInfo prevRoom, DungeonRoomType roomType, RoomDirection direction)
+ {
+ //为什么最后的值要减4或者5? 因为这个值是房间地板向外扩充的格子数量
+
+ if (roomType == DungeonRoomType.Outlet)
+ {
+ if (direction == RoomDirection.Up || direction == RoomDirection.Down)
+ {
+ return (int)(prevRoom.Size.X * 0.5f - 4);
+ }
+ return (int)(prevRoom.Size.Y * 0.5f - 5);
+ }
+ if (direction == RoomDirection.Up || direction == RoomDirection.Down)
+ {
+ return Random.RandomRangeInt((int)(prevRoom.Size.X * Config.RoomVerticalMinDispersion),
+ (int)(prevRoom.Size.X * Config.RoomVerticalMaxDispersion)) + (int)(prevRoom.Size.X * 0.5f - 4);
+ }
+ return Random.RandomRangeInt((int)(prevRoom.Size.Y * Config.RoomHorizontalMinDispersion),
+ (int)(prevRoom.Size.Y * Config.RoomHorizontalMaxDispersion)) + (int)(prevRoom.Size.Y * 0.5f - 5);
+ }
}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/game/ui/editorTools/EditorToolsPanel.cs b/DungeonShooting_Godot/src/game/ui/editorTools/EditorToolsPanel.cs
index b4a17af..e46541d 100644
--- a/DungeonShooting_Godot/src/game/ui/editorTools/EditorToolsPanel.cs
+++ b/DungeonShooting_Godot/src/game/ui/editorTools/EditorToolsPanel.cs
@@ -353,5 +353,11 @@
public override void OnHideUi()
{
}
+ public void OnBeforeSerialize()
+ {
+ }
+ public void OnAfterDeserialize()
+ {
+ }
#endif
}
diff --git a/DungeonShooting_Godot/src/game/ui/mapEditorCreateMark/MapEditorCreateMarkPanel.cs b/DungeonShooting_Godot/src/game/ui/mapEditorCreateMark/MapEditorCreateMarkPanel.cs
index 8377944..0ac1067 100644
--- a/DungeonShooting_Godot/src/game/ui/mapEditorCreateMark/MapEditorCreateMarkPanel.cs
+++ b/DungeonShooting_Godot/src/game/ui/mapEditorCreateMark/MapEditorCreateMarkPanel.cs
@@ -209,14 +209,14 @@
};
//初始高度
- if (activityObject.Type == (int)ActivityType.Weapon || activityObject.Type == (int)ActivityType.Prop)
+ if (activityObject.Type == ActivityType.Weapon || activityObject.Type == ActivityType.Prop)
{
markInfoItem.Altitude = 8;
}
- else if (activityObject.Type == (int)ActivityType.Other)
+ else if (activityObject.Type == ActivityType.Other)
{
//随机道具或者随机武器
- if (activityObject.Id == PreinstallMarkManager.Weapon.Id || activityObject.Id == PreinstallMarkManager.Prop.Id)
+ if (activityObject.Id == PreinstallMarkManager.RandomWeapon.Id || activityObject.Id == PreinstallMarkManager.RandomProp.Id)
{
markInfoItem.Altitude = 8;
}
diff --git a/DungeonShooting_Godot/src/game/ui/mapEditorCreateMark/MarkObjectCell.cs b/DungeonShooting_Godot/src/game/ui/mapEditorCreateMark/MarkObjectCell.cs
index 8b2c588..aed3c2b 100644
--- a/DungeonShooting_Godot/src/game/ui/mapEditorCreateMark/MarkObjectCell.cs
+++ b/DungeonShooting_Godot/src/game/ui/mapEditorCreateMark/MarkObjectCell.cs
@@ -50,7 +50,7 @@
//物体名称
CellNode.L_VBoxContainer.L_HBoxContainer.L_NameLabel.Instance.Text = _activityObject.Name;
//物体类型
- CellNode.L_VBoxContainer.L_HBoxContainer.L_TypeLabel.Instance.Text = NameManager.GetActivityTypeName(_activityObject.Type);
+ CellNode.L_VBoxContainer.L_HBoxContainer.L_TypeLabel.Instance.Text = ActivityId.GetTypeName(_activityObject.Type);
//图标
if (string.IsNullOrEmpty(_activityObject.Icon))
@@ -206,7 +206,7 @@
_vSpeed.L_NumInput.Instance.Value = markInfoItem.VerticalSpeed;
}
- if (activityObject.Type == (int)ActivityType.Weapon) //武器类型
+ if (activityObject.Type == ActivityType.Weapon) //武器类型
{
var numberBar = CellNode.UiPanel.CreateNumberBar("CurrAmmon", "弹夹弹药量:");
var numberBar2 = CellNode.UiPanel.CreateNumberBar("ResidueAmmo", "剩余弹药量:");
@@ -246,7 +246,7 @@
}
}
}
- else if (activityObject.Type == (int)ActivityType.Enemy) //敌人
+ else if (activityObject.Type == ActivityType.Enemy) //敌人
{
var faceBar = CellNode.UiPanel.CreateOptionBar("Face", "脸朝向:");
faceBar.Instance.AddItem("随机", 0);
diff --git a/DungeonShooting_Godot/src/game/ui/mapEditorCreateRoom/MapEditorCreateRoomPanel.cs b/DungeonShooting_Godot/src/game/ui/mapEditorCreateRoom/MapEditorCreateRoomPanel.cs
index d70d9ec..2b015ec 100644
--- a/DungeonShooting_Godot/src/game/ui/mapEditorCreateRoom/MapEditorCreateRoomPanel.cs
+++ b/DungeonShooting_Godot/src/game/ui/mapEditorCreateRoom/MapEditorCreateRoomPanel.cs
@@ -31,6 +31,7 @@
for (var i = 0; i < roomTypes.Length; i++)
{
var item = roomTypes[i];
+ if (item == DungeonRoomType.None) continue;
var text = DungeonManager.DungeonRoomTypeToDescribeString(item);
selectButton.AddItem(text, (int)item);
}
diff --git a/DungeonShooting_Godot/src/game/ui/mapEditorMapMark/EditorMarkCell.cs b/DungeonShooting_Godot/src/game/ui/mapEditorMapMark/EditorMarkCell.cs
index 155885f..ed605f4 100644
--- a/DungeonShooting_Godot/src/game/ui/mapEditorMapMark/EditorMarkCell.cs
+++ b/DungeonShooting_Godot/src/game/ui/mapEditorMapMark/EditorMarkCell.cs
@@ -109,7 +109,7 @@
public override int OnSort(UiCell other)
{
- if (!Data.Preloading && other.Data.Preloading)
+ if (Data.Preloading && other.Data.Preloading)
{
return 0;
}
diff --git a/DungeonShooting_Godot/src/game/ui/mapEditorProject/MapEditorProjectPanel.cs b/DungeonShooting_Godot/src/game/ui/mapEditorProject/MapEditorProjectPanel.cs
index 2b3e0d8..8edcc66 100644
--- a/DungeonShooting_Godot/src/game/ui/mapEditorProject/MapEditorProjectPanel.cs
+++ b/DungeonShooting_Godot/src/game/ui/mapEditorProject/MapEditorProjectPanel.cs
@@ -29,6 +29,7 @@
for (var i = 0; i < roomTypes.Length; i++)
{
var dungeonRoomType = roomTypes[i];
+ if (dungeonRoomType == DungeonRoomType.None) continue;
optionButton.AddItem(DungeonManager.DungeonRoomTypeToDescribeString(dungeonRoomType),
(int)dungeonRoomType + 1);
}
diff --git a/DungeonShooting_Godot/src/game/ui/mapEditorSelectObject/MapEditorSelectObjectPanel.cs b/DungeonShooting_Godot/src/game/ui/mapEditorSelectObject/MapEditorSelectObjectPanel.cs
index 79b68f0..101e836 100644
--- a/DungeonShooting_Godot/src/game/ui/mapEditorSelectObject/MapEditorSelectObjectPanel.cs
+++ b/DungeonShooting_Godot/src/game/ui/mapEditorSelectObject/MapEditorSelectObjectPanel.cs
@@ -23,9 +23,9 @@
///
/// 类型值
///
- public int Type;
+ public ActivityType Type;
- public TypeButtonData(string name, int type)
+ public TypeButtonData(string name, ActivityType type)
{
Name = name;
Type = type;
@@ -36,7 +36,7 @@
//物体网格组件
private UiGrid _objectGrid;
//允许出现在该面板中的物体类型
- private int[] _typeArray = new[] { 4, 5, 9 };
+ private ActivityType[] _typeArray = new[] { ActivityType.Enemy, ActivityType.Weapon, ActivityType.Prop };
public override void OnCreateUi()
{
@@ -67,14 +67,14 @@
_typeGrid.RemoveAll();
if (activityType == ActivityType.None)
{
- _typeGrid.Add(new TypeButtonData("所有", -1));
- _typeGrid.Add(new TypeButtonData(ActivityId.GetTypeName(ActivityType.Weapon), (int)ActivityType.Weapon));
- _typeGrid.Add(new TypeButtonData(ActivityId.GetTypeName(ActivityType.Prop), (int)ActivityType.Prop));
- _typeGrid.Add(new TypeButtonData(ActivityId.GetTypeName(ActivityType.Enemy), (int)ActivityType.Enemy));
+ _typeGrid.Add(new TypeButtonData("所有", ActivityType.None));
+ _typeGrid.Add(new TypeButtonData(ActivityId.GetTypeName(ActivityType.Weapon), ActivityType.Weapon));
+ _typeGrid.Add(new TypeButtonData(ActivityId.GetTypeName(ActivityType.Prop), ActivityType.Prop));
+ _typeGrid.Add(new TypeButtonData(ActivityId.GetTypeName(ActivityType.Enemy), ActivityType.Enemy));
}
else
{
- _typeGrid.Add(new TypeButtonData(ActivityId.GetTypeName(activityType), (int)activityType));
+ _typeGrid.Add(new TypeButtonData(ActivityId.GetTypeName(activityType), activityType));
}
_typeGrid.SelectIndex = 0;
}
@@ -85,7 +85,7 @@
public void OnSearch()
{
//类型
- int type;
+ ActivityType type;
//名称
var name = S_LineEdit.Instance.Text;
var buttonData = _typeGrid.GetData(_typeGrid.SelectIndex);
@@ -95,7 +95,7 @@
}
else
{
- type = -1;
+ type = ActivityType.None;
}
//搜索结果
@@ -103,29 +103,29 @@
switch (type)
{
//全部类型
- case -1:
- arr.Add(PreinstallMarkManager.Enemy);
- arr.Add(PreinstallMarkManager.Prop);
- arr.Add(PreinstallMarkManager.Weapon);
+ case ActivityType.None:
+ arr.Add(PreinstallMarkManager.RandomEnemy);
+ arr.Add(PreinstallMarkManager.RandomProp);
+ arr.Add(PreinstallMarkManager.RandomWeapon);
break;
//随机武器
- case (int)ActivityType.Weapon:
- arr.Add(PreinstallMarkManager.Weapon);
+ case ActivityType.Weapon:
+ arr.Add(PreinstallMarkManager.RandomWeapon);
break;
//随机道具
- case (int)ActivityType.Prop:
- arr.Add(PreinstallMarkManager.Prop);
+ case ActivityType.Prop:
+ arr.Add(PreinstallMarkManager.RandomProp);
break;
//随机敌人
- case (int)ActivityType.Enemy:
- arr.Add(PreinstallMarkManager.Enemy);
+ case ActivityType.Enemy:
+ arr.Add(PreinstallMarkManager.RandomEnemy);
break;
}
foreach (var o in ExcelConfig.ActivityBase_List)
{
if (o.ShowInMapEditor &&
(string.IsNullOrEmpty(name) || o.Name.Contains(name) || o.Id.Contains(name)) &&
- (type < 0 ? _typeArray.Contains(o.Type) : o.Type == type))
+ (type == ActivityType.None ? _typeArray.Contains(o.Type) : o.Type == type))
{
arr.Add(o);
}
diff --git a/DungeonShooting_Godot/src/game/ui/roomMap/RoomMapPanel.cs b/DungeonShooting_Godot/src/game/ui/roomMap/RoomMapPanel.cs
index 6d50aab..ca80d6c 100644
--- a/DungeonShooting_Godot/src/game/ui/roomMap/RoomMapPanel.cs
+++ b/DungeonShooting_Godot/src/game/ui/roomMap/RoomMapPanel.cs
@@ -159,9 +159,10 @@
S_Mark.Instance.Position = S_DrawContainer.Instance.Size / 2 + _mapOffset;
}
+ var area = Player.Current.AffiliationArea;
//传送
if (_pressMapFlag && _mouseHoverRoom != null &&
- !Player.Current.AffiliationArea.RoomInfo.IsSeclusion &&
+ area != null && !area.RoomInfo.IsSeclusion &&
Input.IsMouseButtonPressed(MouseButton.Right))
{
//执行传送操作
@@ -245,14 +246,18 @@
var shaderMaterial = (ShaderMaterial)roomInfo.PreviewSprite.Material;
_originOutlineColor = shaderMaterial.GetShaderParameter("outline_color").AsColor();
//玩家所在的房间门是否打开
- var isOpen = !Player.Current.AffiliationArea.RoomInfo.IsSeclusion;
- if (isOpen)
+ var area = Player.Current.AffiliationArea;
+ if (area != null)
{
- shaderMaterial.SetShaderParameter("outline_color", new Color(0, 1, 0, 0.9f));
- }
- else
- {
- shaderMaterial.SetShaderParameter("outline_color", new Color(1, 0, 0, 0.9f));
+ var isOpen = !area.RoomInfo.IsSeclusion;
+ if (isOpen)
+ {
+ shaderMaterial.SetShaderParameter("outline_color", new Color(0, 1, 0, 0.9f));
+ }
+ else
+ {
+ shaderMaterial.SetShaderParameter("outline_color", new Color(1, 0, 0, 0.9f));
+ }
}
};
roomInfo.PreviewSprite.MouseExited += () =>
diff --git a/DungeonShooting_Godot/src/game/ui/roomUI/LifeBarHandler.cs b/DungeonShooting_Godot/src/game/ui/roomUI/LifeBarHandler.cs
index 3bc3dd4..104c005 100644
--- a/DungeonShooting_Godot/src/game/ui/roomUI/LifeBarHandler.cs
+++ b/DungeonShooting_Godot/src/game/ui/roomUI/LifeBarHandler.cs
@@ -9,15 +9,17 @@
private RoomUI.LifeBar _bar;
private UiGrid _grid;
private EventFactory _eventFactory;
- private bool _refreshFlag = false;
+ private bool _refreshHpFlag = false;
+ private bool _refreshGoldFlag = false;
public LifeBarHandler(RoomUI.LifeBar lifeBar)
{
_bar = lifeBar;
var uiNodeLife = lifeBar.L_Life;
- _grid = new UiGrid(uiNodeLife, typeof(LifeCell));
- _grid.SetColumns(20);
+ _grid = lifeBar.UiPanel.CreateUiGrid(uiNodeLife);
+ _grid.SetAutoColumns(true);
+ _grid.SetHorizontalExpand(true);
_grid.SetCellOffset(new Vector2I(1, 2));
}
@@ -28,7 +30,9 @@
_eventFactory.AddEventListener(EventEnum.OnPlayerMaxHpChange, o => RefreshLife());
_eventFactory.AddEventListener(EventEnum.OnPlayerShieldChange, o => RefreshLife());
_eventFactory.AddEventListener(EventEnum.OnPlayerMaxShieldChange, o => RefreshLife());
+ _eventFactory.AddEventListener(EventEnum.OnPlayerGoldChange, o => RefreshGold());
RefreshLife();
+ RefreshGold();
}
public void OnHide()
@@ -38,16 +42,27 @@
public void Process(float delta)
{
- if (_refreshFlag)
+ if (_refreshHpFlag)
{
- _refreshFlag = false;
+ _refreshHpFlag = false;
HandlerRefreshLife();
}
+
+ if (_refreshGoldFlag)
+ {
+ _refreshGoldFlag = false;
+ HandlerRefreshGold();
+ }
+ }
+
+ public void RefreshGold()
+ {
+ _refreshGoldFlag = true;
}
public void RefreshLife()
{
- _refreshFlag = true;
+ _refreshHpFlag = true;
}
private void HandlerRefreshLife()
@@ -90,5 +105,10 @@
//var maxHp
_grid.SetDataList(list.ToArray());
}
+
+ private void HandlerRefreshGold()
+ {
+ _bar.L_Gold.L_GoldText.Instance.Text = Player.Current.RoleState.Gold.ToString();
+ }
}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/game/ui/roomUI/LifeCell.cs b/DungeonShooting_Godot/src/game/ui/roomUI/LifeCell.cs
index d549158..abdcd9b 100644
--- a/DungeonShooting_Godot/src/game/ui/roomUI/LifeCell.cs
+++ b/DungeonShooting_Godot/src/game/ui/roomUI/LifeCell.cs
@@ -17,19 +17,19 @@
switch (data)
{
case LifeIconEnum.FullHeart:
- CellNode.Instance.Texture = ResourceManager.Load(ResourcePath.resource_sprite_ui_roomUI_Life_full_png);
+ CellNode.L_LifeIcon.Instance.Texture = ResourceManager.Load(ResourcePath.resource_sprite_ui_roomUI_Life_full_png);
break;
case LifeIconEnum.HalfHeart:
- CellNode.Instance.Texture = ResourceManager.Load(ResourcePath.resource_sprite_ui_roomUI_Life_half_png);
+ CellNode.L_LifeIcon.Instance.Texture = ResourceManager.Load(ResourcePath.resource_sprite_ui_roomUI_Life_half_png);
break;
case LifeIconEnum.EmptyHeart:
- CellNode.Instance.Texture = ResourceManager.Load(ResourcePath.resource_sprite_ui_roomUI_Life_empty_png);
+ CellNode.L_LifeIcon.Instance.Texture = ResourceManager.Load(ResourcePath.resource_sprite_ui_roomUI_Life_empty_png);
break;
case LifeIconEnum.FullShield:
- CellNode.Instance.Texture = ResourceManager.Load(ResourcePath.resource_sprite_ui_roomUI_Shield_full_png);
+ CellNode.L_LifeIcon.Instance.Texture = ResourceManager.Load(ResourcePath.resource_sprite_ui_roomUI_Shield_full_png);
break;
case LifeIconEnum.EmptyShield:
- CellNode.Instance.Texture = ResourceManager.Load(ResourcePath.resource_sprite_ui_roomUI_Shield_empty_png);
+ CellNode.L_LifeIcon.Instance.Texture = ResourceManager.Load(ResourcePath.resource_sprite_ui_roomUI_Shield_empty_png);
break;
}
}
diff --git a/DungeonShooting_Godot/src/game/ui/roomUI/RoomUI.cs b/DungeonShooting_Godot/src/game/ui/roomUI/RoomUI.cs
index 64f9203..1dfdf85 100644
--- a/DungeonShooting_Godot/src/game/ui/roomUI/RoomUI.cs
+++ b/DungeonShooting_Godot/src/game/ui/roomUI/RoomUI.cs
@@ -236,34 +236,122 @@
}
///
- /// 类型: , 路径: RoomUI.Control.LifeBar.Life
+ /// 类型: , 路径: RoomUI.Control.LifeBar.Life.LifeIcon
///
- public class Life : UiNode
+ public class LifeIcon : UiNode
{
- public Life(RoomUIPanel uiPanel, Godot.TextureRect node) : base(uiPanel, node) { }
- public override Life Clone() => new (UiPanel, (Godot.TextureRect)Instance.Duplicate());
+ public LifeIcon(RoomUIPanel uiPanel, Godot.TextureRect node) : base(uiPanel, node) { }
+ public override LifeIcon Clone() => new (UiPanel, (Godot.TextureRect)Instance.Duplicate());
}
///
- /// 类型: , 路径: RoomUI.Control.LifeBar
+ /// 类型: , 路径: RoomUI.Control.LifeBar.Life
///
- public class LifeBar : UiNode
+ public class Life : UiNode
{
///
- /// 使用 Instance 属性获取当前节点实例对象, 节点类型: , 节点路径: RoomUI.Control.Life
+ /// 使用 Instance 属性获取当前节点实例对象, 节点类型: , 节点路径: RoomUI.Control.LifeBar.LifeIcon
+ ///
+ public LifeIcon L_LifeIcon
+ {
+ get
+ {
+ if (_L_LifeIcon == null) _L_LifeIcon = new LifeIcon(UiPanel, Instance.GetNode("LifeIcon"));
+ return _L_LifeIcon;
+ }
+ }
+ private LifeIcon _L_LifeIcon;
+
+ public Life(RoomUIPanel uiPanel, Godot.Control node) : base(uiPanel, node) { }
+ public override Life Clone() => new (UiPanel, (Godot.Control)Instance.Duplicate());
+ }
+
+ ///
+ /// 类型: , 路径: RoomUI.Control.LifeBar.Gold.GoldIcon
+ ///
+ public class GoldIcon : UiNode
+ {
+ public GoldIcon(RoomUIPanel uiPanel, Godot.TextureRect node) : base(uiPanel, node) { }
+ public override GoldIcon Clone() => new (UiPanel, (Godot.TextureRect)Instance.Duplicate());
+ }
+
+ ///
+ /// 类型: , 路径: RoomUI.Control.LifeBar.Gold.GoldText
+ ///
+ public class GoldText : UiNode
+ {
+ public GoldText(RoomUIPanel uiPanel, Godot.Label node) : base(uiPanel, node) { }
+ public override GoldText Clone() => new (UiPanel, (Godot.Label)Instance.Duplicate());
+ }
+
+ ///
+ /// 类型: , 路径: RoomUI.Control.LifeBar.Gold
+ ///
+ public class Gold : UiNode
+ {
+ ///
+ /// 使用 Instance 属性获取当前节点实例对象, 节点类型: , 节点路径: RoomUI.Control.LifeBar.GoldIcon
+ ///
+ public GoldIcon L_GoldIcon
+ {
+ get
+ {
+ if (_L_GoldIcon == null) _L_GoldIcon = new GoldIcon(UiPanel, Instance.GetNode("GoldIcon"));
+ return _L_GoldIcon;
+ }
+ }
+ private GoldIcon _L_GoldIcon;
+
+ ///
+ /// 使用 Instance 属性获取当前节点实例对象, 节点类型: , 节点路径: RoomUI.Control.LifeBar.GoldText
+ ///
+ public GoldText L_GoldText
+ {
+ get
+ {
+ if (_L_GoldText == null) _L_GoldText = new GoldText(UiPanel, Instance.GetNode("GoldText"));
+ return _L_GoldText;
+ }
+ }
+ private GoldText _L_GoldText;
+
+ public Gold(RoomUIPanel uiPanel, Godot.Control node) : base(uiPanel, node) { }
+ public override Gold Clone() => new (UiPanel, (Godot.Control)Instance.Duplicate());
+ }
+
+ ///
+ /// 类型: , 路径: RoomUI.Control.LifeBar
+ ///
+ public class LifeBar : UiNode
+ {
+ ///
+ /// 使用 Instance 属性获取当前节点实例对象, 节点类型: , 节点路径: RoomUI.Control.Life
///
public Life L_Life
{
get
{
- if (_L_Life == null) _L_Life = new Life(UiPanel, Instance.GetNode("Life"));
+ if (_L_Life == null) _L_Life = new Life(UiPanel, Instance.GetNode("Life"));
return _L_Life;
}
}
private Life _L_Life;
- public LifeBar(RoomUIPanel uiPanel, Godot.Control node) : base(uiPanel, node) { }
- public override LifeBar Clone() => new (UiPanel, (Godot.Control)Instance.Duplicate());
+ ///
+ /// 使用 Instance 属性获取当前节点实例对象, 节点类型: , 节点路径: RoomUI.Control.Gold
+ ///
+ public Gold L_Gold
+ {
+ get
+ {
+ if (_L_Gold == null) _L_Gold = new Gold(UiPanel, Instance.GetNode("Gold"));
+ return _L_Gold;
+ }
+ }
+ private Gold _L_Gold;
+
+ public LifeBar(RoomUIPanel uiPanel, Godot.VBoxContainer node) : base(uiPanel, node) { }
+ public override LifeBar Clone() => new (UiPanel, (Godot.VBoxContainer)Instance.Duplicate());
}
///
@@ -510,13 +598,13 @@
public class Control : UiNode
{
///
- /// 使用 Instance 属性获取当前节点实例对象, 节点类型: , 节点路径: RoomUI.LifeBar
+ /// 使用 Instance 属性获取当前节点实例对象, 节点类型: , 节点路径: RoomUI.LifeBar
///
public LifeBar L_LifeBar
{
get
{
- if (_L_LifeBar == null) _L_LifeBar = new LifeBar(UiPanel, Instance.GetNode("LifeBar"));
+ if (_L_LifeBar == null) _L_LifeBar = new LifeBar(UiPanel, Instance.GetNode("LifeBar"));
return _L_LifeBar;
}
}
@@ -619,12 +707,32 @@
public ReloadBar S_ReloadBar => L_ReloadBar;
///
- /// 场景中唯一名称的节点, 节点类型: , 节点路径: RoomUI.Control.LifeBar.Life
+ /// 场景中唯一名称的节点, 节点类型: , 节点路径: RoomUI.Control.LifeBar.Life.LifeIcon
+ ///
+ public LifeIcon S_LifeIcon => L_Control.L_LifeBar.L_Life.L_LifeIcon;
+
+ ///
+ /// 场景中唯一名称的节点, 节点类型: , 节点路径: RoomUI.Control.LifeBar.Life
///
public Life S_Life => L_Control.L_LifeBar.L_Life;
///
- /// 场景中唯一名称的节点, 节点类型: , 节点路径: RoomUI.Control.LifeBar
+ /// 场景中唯一名称的节点, 节点类型: , 节点路径: RoomUI.Control.LifeBar.Gold.GoldIcon
+ ///
+ public GoldIcon S_GoldIcon => L_Control.L_LifeBar.L_Gold.L_GoldIcon;
+
+ ///
+ /// 场景中唯一名称的节点, 节点类型: , 节点路径: RoomUI.Control.LifeBar.Gold.GoldText
+ ///
+ public GoldText S_GoldText => L_Control.L_LifeBar.L_Gold.L_GoldText;
+
+ ///
+ /// 场景中唯一名称的节点, 节点类型: , 节点路径: RoomUI.Control.LifeBar.Gold
+ ///
+ public Gold S_Gold => L_Control.L_LifeBar.L_Gold;
+
+ ///
+ /// 场景中唯一名称的节点, 节点类型: , 节点路径: RoomUI.Control.LifeBar
///
public LifeBar S_LifeBar => L_Control.L_LifeBar;
diff --git a/DungeonShooting_Godot/src/test/TestTrail.cs b/DungeonShooting_Godot/src/test/TestTrail.cs
new file mode 100644
index 0000000..f722c97
--- /dev/null
+++ b/DungeonShooting_Godot/src/test/TestTrail.cs
@@ -0,0 +1,20 @@
+using Godot;
+using System;
+
+public partial class TestTrail : Node2D
+{
+ private Sprite2D sprite;
+ private Trail trail;
+
+ public override void _Ready()
+ {
+ sprite = GetNode("Sprite2D");
+ trail = GetNode("Trail");
+ trail.SetTarget(sprite);
+ }
+
+ public override void _Process(double delta)
+ {
+ sprite.Position = GetLocalMousePosition();
+ }
+}