diff --git a/DungeonShooting_Godot/excel/excelFile/ActivityObject.xlsx b/DungeonShooting_Godot/excel/excelFile/ActivityObject.xlsx index f322a2c..8b0e0b8 100644 --- a/DungeonShooting_Godot/excel/excelFile/ActivityObject.xlsx +++ b/DungeonShooting_Godot/excel/excelFile/ActivityObject.xlsx Binary files differ diff --git a/DungeonShooting_Godot/excel/excelFile/Sound.xlsx b/DungeonShooting_Godot/excel/excelFile/Sound.xlsx index 8d51f17..603d0e4 100644 --- a/DungeonShooting_Godot/excel/excelFile/Sound.xlsx +++ b/DungeonShooting_Godot/excel/excelFile/Sound.xlsx Binary files differ diff --git a/DungeonShooting_Godot/excel/excelFile/Weapon.xlsx b/DungeonShooting_Godot/excel/excelFile/Weapon.xlsx index 1dc152e..27f6dfd 100644 --- a/DungeonShooting_Godot/excel/excelFile/Weapon.xlsx +++ b/DungeonShooting_Godot/excel/excelFile/Weapon.xlsx Binary files differ diff --git a/DungeonShooting_Godot/prefab/effect/BulletDisappear.tscn b/DungeonShooting_Godot/prefab/effect/BulletDisappear.tscn deleted file mode 100644 index 54549a1..0000000 --- a/DungeonShooting_Godot/prefab/effect/BulletDisappear.tscn +++ /dev/null @@ -1,145 +0,0 @@ -[gd_scene load_steps=15 format=3] - -[ext_resource type="Texture2D" uid="uid://d8ot2wrdoe4j" path="res://resource/sprite/effects/Explosion.png" id="1_qqm6c"] -[ext_resource type="Texture2D" uid="uid://h7hkgbwj1li" path="res://resource/sprite/effects/Smoke.png" id="1_ybsvf"] - - -[sub_resource type="AtlasTexture" id="AtlasTexture_tscb3"] -atlas = ExtResource("1_qqm6c") -region = Rect2(0, 0, 16, 16) - -[sub_resource type="AtlasTexture" id="AtlasTexture_l2nv6"] -atlas = ExtResource("1_qqm6c") -region = Rect2(16, 0, 16, 16) - -[sub_resource type="AtlasTexture" id="AtlasTexture_5133m"] -atlas = ExtResource("1_qqm6c") -region = Rect2(32, 0, 16, 16) - -[sub_resource type="AtlasTexture" id="AtlasTexture_41eg5"] -atlas = ExtResource("1_qqm6c") -region = Rect2(48, 0, 16, 16) - -[sub_resource type="SpriteFrames" id="SpriteFrames_ub3cw"] -animations = [{ -"frames": [{ -"duration": 1.0, -"texture": SubResource("AtlasTexture_tscb3") -}, { -"duration": 1.0, -"texture": SubResource("AtlasTexture_l2nv6") -}, { -"duration": 1.0, -"texture": SubResource("AtlasTexture_5133m") -}, { -"duration": 1.0, -"texture": SubResource("AtlasTexture_41eg5") -}], -"loop": false, -"name": &"default", -"speed": 13.0 -}] - -[sub_resource type="CanvasItemMaterial" id="CanvasItemMaterial_4bd3q"] -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, 0.736364), 0.0, 0.0, 0, 0, Vector2(0.396825, 1), 0.0, 0.0, 0, 0, Vector2(0.990476, 0), 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_r1yeu"] -lifetime_randomness = 0.3 -particle_flag_disable_z = true -spread = 180.0 -gravity = Vector3(0, 0, 0) -initial_velocity_min = 45.0 -initial_velocity_max = 65.0 -orbit_velocity_min = 0.0 -orbit_velocity_max = 0.0 -angle_max = 360.0 -scale_min = 0.3 -scale_max = 0.6 -scale_curve = SubResource("CurveTexture_j77i6") -color = Color(0.909804, 0.909804, 0.909804, 0.380392) -anim_offset_max = 1.0 - -[sub_resource type="Animation" id="Animation_jnfgg"] -resource_name = "Start" -length = 0.3 -tracks/0/type = "value" -tracks/0/imported = false -tracks/0/enabled = true -tracks/0/path = NodePath(".:emitting") -tracks/0/interp = 1 -tracks/0/loop_wrap = true -tracks/0/keys = { -"times": PackedFloat32Array(0), -"transitions": PackedFloat32Array(1), -"update": 1, -"values": [true] -} -tracks/1/type = "method" -tracks/1/imported = false -tracks/1/enabled = true -tracks/1/path = NodePath("..") -tracks/1/interp = 1 -tracks/1/loop_wrap = true -tracks/1/keys = { -"times": PackedFloat32Array(0.3), -"transitions": PackedFloat32Array(1), -"values": [{ -"args": [], -"method": &"queue_free" -}] -} - -[sub_resource type="Animation" id="Animation_yr61b"] -length = 0.001 -tracks/0/type = "value" -tracks/0/imported = false -tracks/0/enabled = true -tracks/0/path = NodePath(".:emitting") -tracks/0/interp = 1 -tracks/0/loop_wrap = true -tracks/0/keys = { -"times": PackedFloat32Array(0), -"transitions": PackedFloat32Array(1), -"update": 1, -"values": [false] -} - -[sub_resource type="AnimationLibrary" id="AnimationLibrary_1spnw"] -_data = { -"RESET": SubResource("Animation_yr61b"), -"Start": SubResource("Animation_jnfgg") -} - -[node name="BulletDisappear" type="AnimatedSprite2D"] -modulate = Color(1, 1, 1, 0.784314) -z_index = -4 -scale = Vector2(0.5, 0.5) -sprite_frames = SubResource("SpriteFrames_ub3cw") -autoplay = "default" - -[node name="GPUParticles2D" type="GPUParticles2D" parent="."] -material = SubResource("CanvasItemMaterial_4bd3q") -emitting = false -process_material = SubResource("ParticleProcessMaterial_r1yeu") -texture = ExtResource("1_ybsvf") -lifetime = 0.3 -one_shot = true -explosiveness = 0.9 -fixed_fps = 20 - -[node name="AnimationPlayer" type="AnimationPlayer" parent="."] -root_node = NodePath("../GPUParticles2D") -autoplay = "Start" -libraries = { -"": SubResource("AnimationLibrary_1spnw") -} diff --git a/DungeonShooting_Godot/prefab/effect/BulletSmoke.tscn b/DungeonShooting_Godot/prefab/effect/BulletSmoke.tscn deleted file mode 100644 index 247c6b2..0000000 --- a/DungeonShooting_Godot/prefab/effect/BulletSmoke.tscn +++ /dev/null @@ -1,145 +0,0 @@ -[gd_scene load_steps=9 format=3 uid="uid://b8ogu2l8pa70y"] - -[ext_resource type="Texture2D" uid="uid://h7hkgbwj1li" path="res://resource/sprite/effects/Smoke.png" id="1"] -[ext_resource type="Texture2D" uid="uid://bs1lan5uwxyfg" path="res://resource/curve/Curve1.tres" id="1_8pe88"] -[ext_resource type="Texture2D" uid="uid://dwa4chrugc6b1" path="res://resource/sprite/effects/Collision.png" id="2"] - -[sub_resource type="CanvasItemMaterial" id="1"] -particles_animation = true -particles_anim_h_frames = 3 -particles_anim_v_frames = 1 -particles_anim_loop = false - -[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_gpp81"] -lifetime_randomness = 0.5 -particle_flag_disable_z = true -spread = 25.0 -gravity = Vector3(0, 0, 0) -initial_velocity_max = 90.0 -orbit_velocity_min = 0.0 -orbit_velocity_max = 0.0 -angle_max = 360.0 -scale_curve = ExtResource("1_8pe88") -color = Color(0.75, 0.75, 0.75, 0.470588) -anim_offset_max = 1.0 - -[sub_resource type="Animation" id="5"] -length = 0.001 -tracks/0/type = "value" -tracks/0/imported = false -tracks/0/enabled = true -tracks/0/path = NodePath(".:emitting") -tracks/0/interp = 1 -tracks/0/loop_wrap = true -tracks/0/keys = { -"times": PackedFloat32Array(0), -"transitions": PackedFloat32Array(1), -"update": 0, -"values": [false] -} -tracks/1/type = "value" -tracks/1/imported = false -tracks/1/enabled = true -tracks/1/path = NodePath("Sprite2D:frame") -tracks/1/interp = 1 -tracks/1/loop_wrap = true -tracks/1/keys = { -"times": PackedFloat32Array(0), -"transitions": PackedFloat32Array(1), -"update": 0, -"values": [0] -} -tracks/2/type = "value" -tracks/2/imported = false -tracks/2/enabled = true -tracks/2/path = NodePath("Sprite2D:visible") -tracks/2/interp = 1 -tracks/2/loop_wrap = true -tracks/2/keys = { -"times": PackedFloat32Array(0), -"transitions": PackedFloat32Array(1), -"update": 0, -"values": [true] -} - -[sub_resource type="Animation" id="6"] -resource_name = "Smoke" -step = 0.05 -tracks/0/type = "value" -tracks/0/imported = false -tracks/0/enabled = true -tracks/0/path = NodePath(".:emitting") -tracks/0/interp = 1 -tracks/0/loop_wrap = true -tracks/0/keys = { -"times": PackedFloat32Array(0), -"transitions": PackedFloat32Array(1), -"update": 1, -"values": [true] -} -tracks/1/type = "method" -tracks/1/imported = false -tracks/1/enabled = true -tracks/1/path = NodePath(".") -tracks/1/interp = 1 -tracks/1/loop_wrap = true -tracks/1/keys = { -"times": PackedFloat32Array(1), -"transitions": PackedFloat32Array(1), -"values": [{ -"args": [], -"method": &"queue_free" -}] -} -tracks/2/type = "value" -tracks/2/imported = false -tracks/2/enabled = true -tracks/2/path = NodePath("Sprite2D:frame") -tracks/2/interp = 1 -tracks/2/loop_wrap = true -tracks/2/keys = { -"times": PackedFloat32Array(0, 0.05, 0.1, 0.15), -"transitions": PackedFloat32Array(1, 1, 1, 1), -"update": 1, -"values": [0, 1, 2, 3] -} -tracks/3/type = "value" -tracks/3/imported = false -tracks/3/enabled = true -tracks/3/path = NodePath("Sprite2D:visible") -tracks/3/interp = 1 -tracks/3/loop_wrap = true -tracks/3/keys = { -"times": PackedFloat32Array(0, 0.2), -"transitions": PackedFloat32Array(1, 1), -"update": 1, -"values": [true, false] -} - -[sub_resource type="AnimationLibrary" id="AnimationLibrary_uuiu7"] -_data = { -"RESET": SubResource("5"), -"Smoke": SubResource("6") -} - -[node name="BulletSmoke" type="GPUParticles2D"] -material = SubResource("1") -emitting = false -process_material = SubResource("ParticleProcessMaterial_gpp81") -texture = ExtResource("1") -lifetime = 0.4 -one_shot = true -explosiveness = 0.9 -fixed_fps = 20 - -[node name="Sprite2D" type="Sprite2D" parent="."] -modulate = Color(1.6, 1.6, 1.6, 1) -texture = ExtResource("2") -offset = Vector2(8, 0) -hframes = 4 - -[node name="AnimationPlayer" type="AnimationPlayer" parent="."] -autoplay = "Smoke" -libraries = { -"": SubResource("AnimationLibrary_uuiu7") -} diff --git a/DungeonShooting_Godot/prefab/effect/Effect1.tscn b/DungeonShooting_Godot/prefab/effect/Effect1.tscn deleted file mode 100644 index 9f4e524..0000000 --- a/DungeonShooting_Godot/prefab/effect/Effect1.tscn +++ /dev/null @@ -1,50 +0,0 @@ -[gd_scene load_steps=8 format=3 uid="uid://dbhgioeoksa7"] - -[ext_resource type="Material" uid="uid://c1chld6lkpgji" path="res://resource/material/SmokeParticleMaterial.tres" id="1_dxavj"] -[ext_resource type="Texture2D" uid="uid://bs1lan5uwxyfg" path="res://resource/curve/Curve1.tres" id="1_s60r7"] -[ext_resource type="Texture2D" uid="uid://h7hkgbwj1li" path="res://resource/sprite/effects/Smoke.png" id="2_3kyig"] -[ext_resource type="Texture2D" uid="uid://csud4e6kc3iku" path="res://resource/sprite/effects/Effect1.png" id="3_1mceu"] -[ext_resource type="Script" path="res://src/game/effects/Effect1.cs" id="3_ax5u4"] - -[sub_resource type="CanvasItemMaterial" id="CanvasItemMaterial_ipadv"] -particles_animation = true -particles_anim_h_frames = 3 -particles_anim_v_frames = 1 -particles_anim_loop = false - -[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_p8jst"] -particle_flag_align_y = true -particle_flag_disable_z = true -spread = 180.0 -gravity = Vector3(0, 0, 0) -initial_velocity_min = 40.0 -initial_velocity_max = 70.0 -orbit_velocity_min = 0.0 -orbit_velocity_max = 0.0 -scale_min = 0.2 -scale_max = 0.3 -scale_curve = ExtResource("1_s60r7") - -[node name="Effect1" type="GPUParticles2D"] -modulate = Color(0.760784, 0.760784, 0.760784, 0.533333) -z_index = 5 -material = SubResource("CanvasItemMaterial_ipadv") -emitting = false -amount = 10 -process_material = ExtResource("1_dxavj") -texture = ExtResource("2_3kyig") -lifetime = 0.7 -one_shot = true -explosiveness = 1.0 -fixed_fps = 20 -script = ExtResource("3_ax5u4") - -[node name="GPUParticles2D" type="GPUParticles2D" parent="."] -emitting = false -process_material = SubResource("ParticleProcessMaterial_p8jst") -texture = ExtResource("3_1mceu") -lifetime = 0.5 -one_shot = true -explosiveness = 1.0 -randomness = 0.5 -fixed_fps = 20 diff --git a/DungeonShooting_Godot/prefab/effect/FirePart.tscn b/DungeonShooting_Godot/prefab/effect/FirePart.tscn deleted file mode 100644 index 629586a..0000000 --- a/DungeonShooting_Godot/prefab/effect/FirePart.tscn +++ /dev/null @@ -1,13 +0,0 @@ -[gd_scene load_steps=2 format=3 uid="uid://bh6vo2i6x7lmj"] - -[sub_resource type="ParticleProcessMaterial" id="1"] -spread = 60.0 -gravity = Vector3(0, 0, 0) - -[node name="FirePart" type="GPUParticles2D"] -emitting = false -amount = 10 -process_material = SubResource("1") -lifetime = 0.2 -one_shot = true -explosiveness = 1.0 diff --git a/DungeonShooting_Godot/prefab/effect/ShotFire.tscn b/DungeonShooting_Godot/prefab/effect/ShotFire.tscn deleted file mode 100644 index 1d05905..0000000 --- a/DungeonShooting_Godot/prefab/effect/ShotFire.tscn +++ /dev/null @@ -1,67 +0,0 @@ -[gd_scene load_steps=5 format=3 uid="uid://cglrxe3hmhmg2"] - -[ext_resource type="Texture2D" uid="uid://b0jsyrbk4bydt" path="res://resource/sprite/effects/ShotFire.png" id="1"] - -[sub_resource type="Animation" id="2"] -length = 0.001 -tracks/0/type = "value" -tracks/0/imported = false -tracks/0/enabled = true -tracks/0/path = NodePath(".:frame") -tracks/0/interp = 1 -tracks/0/loop_wrap = true -tracks/0/keys = { -"times": PackedFloat32Array(0), -"transitions": PackedFloat32Array(1), -"update": 0, -"values": [0] -} - -[sub_resource type="Animation" id="1"] -resource_name = "ShotFire" -length = 0.2 -step = 0.05 -tracks/0/type = "value" -tracks/0/imported = false -tracks/0/enabled = true -tracks/0/path = NodePath(".:frame") -tracks/0/interp = 1 -tracks/0/loop_wrap = true -tracks/0/keys = { -"times": PackedFloat32Array(0, 0.05, 0.1, 0.15), -"transitions": PackedFloat32Array(1, 1, 1, 1), -"update": 1, -"values": [0, 1, 2, 3] -} -tracks/1/type = "method" -tracks/1/imported = false -tracks/1/enabled = true -tracks/1/path = NodePath(".") -tracks/1/interp = 1 -tracks/1/loop_wrap = true -tracks/1/keys = { -"times": PackedFloat32Array(0.2), -"transitions": PackedFloat32Array(1), -"values": [{ -"args": [], -"method": &"queue_free" -}] -} - -[sub_resource type="AnimationLibrary" id="AnimationLibrary_apwxv"] -_data = { -"RESET": SubResource("2"), -"ShotFire": SubResource("1") -} - -[node name="ShotFire" type="Sprite2D"] -modulate = Color(1.6, 1.6, 1.6, 1) -texture = ExtResource("1") -offset = Vector2(8, 0) -hframes = 4 - -[node name="AnimationPlayer" type="AnimationPlayer" parent="."] -autoplay = "ShotFire" -libraries = { -"": SubResource("AnimationLibrary_apwxv") -} diff --git a/DungeonShooting_Godot/prefab/effect/activityObject/Effect0001.tscn b/DungeonShooting_Godot/prefab/effect/activityObject/Effect0001.tscn deleted file mode 100644 index 83b7a8b..0000000 --- a/DungeonShooting_Godot/prefab/effect/activityObject/Effect0001.tscn +++ /dev/null @@ -1,200 +0,0 @@ -[gd_scene load_steps=30 format=3 uid="uid://pr88a1phtxgb"] - -[ext_resource type="Script" path="res://src/game/effects/EnemyDebris.cs" id="1_jnsw0"] -[ext_resource type="Shader" path="res://resource/material/Blend.gdshader" id="2_b3d83"] -[ext_resource type="Texture2D" uid="uid://cn64eauvwx1uj" path="res://resource/sprite/role/enemy0001/Enemy0001_Debris.png" id="3_ntutm"] -[ext_resource type="Texture2D" uid="uid://h7hkgbwj1li" path="res://resource/sprite/effects/Smoke.png" id="4_egbbr"] - -[sub_resource type="ShaderMaterial" id="ShaderMaterial_s1mj2"] -resource_local_to_scene = true -shader = ExtResource("2_b3d83") -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 - -[sub_resource type="ShaderMaterial" id="ShaderMaterial_08fn3"] -shader = ExtResource("2_b3d83") -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 - -[sub_resource type="AtlasTexture" id="AtlasTexture_cldwb"] -atlas = ExtResource("3_ntutm") -region = Rect2(0, 0, 16, 16) - -[sub_resource type="AtlasTexture" id="AtlasTexture_ehtnl"] -atlas = ExtResource("3_ntutm") -region = Rect2(16, 0, 16, 16) - -[sub_resource type="AtlasTexture" id="AtlasTexture_j05gd"] -atlas = ExtResource("3_ntutm") -region = Rect2(32, 0, 16, 16) - -[sub_resource type="AtlasTexture" id="AtlasTexture_7el6f"] -atlas = ExtResource("3_ntutm") -region = Rect2(48, 0, 16, 16) - -[sub_resource type="AtlasTexture" id="AtlasTexture_n7sw3"] -atlas = ExtResource("3_ntutm") -region = Rect2(64, 0, 16, 16) - -[sub_resource type="AtlasTexture" id="AtlasTexture_mumsm"] -atlas = ExtResource("3_ntutm") -region = Rect2(80, 0, 16, 16) - -[sub_resource type="AtlasTexture" id="AtlasTexture_gx41d"] -atlas = ExtResource("3_ntutm") -region = Rect2(96, 0, 16, 16) - -[sub_resource type="AtlasTexture" id="AtlasTexture_r4nx1"] -atlas = ExtResource("3_ntutm") -region = Rect2(112, 0, 16, 16) - -[sub_resource type="AtlasTexture" id="AtlasTexture_s8j4o"] -atlas = ExtResource("3_ntutm") -region = Rect2(128, 0, 16, 16) - -[sub_resource type="AtlasTexture" id="AtlasTexture_2svrb"] -atlas = ExtResource("3_ntutm") -region = Rect2(144, 0, 16, 16) - -[sub_resource type="AtlasTexture" id="AtlasTexture_twd5t"] -atlas = ExtResource("3_ntutm") -region = Rect2(160, 0, 16, 16) - -[sub_resource type="AtlasTexture" id="AtlasTexture_8w5ka"] -atlas = ExtResource("3_ntutm") -region = Rect2(176, 0, 16, 16) - -[sub_resource type="AtlasTexture" id="AtlasTexture_6iumv"] -atlas = ExtResource("3_ntutm") -region = Rect2(192, 0, 16, 16) - -[sub_resource type="AtlasTexture" id="AtlasTexture_lpilf"] -atlas = ExtResource("3_ntutm") -region = Rect2(208, 0, 16, 16) - -[sub_resource type="AtlasTexture" id="AtlasTexture_n1a5a"] -atlas = ExtResource("3_ntutm") -region = Rect2(224, 0, 16, 16) - -[sub_resource type="AtlasTexture" id="AtlasTexture_q0oeq"] -atlas = ExtResource("3_ntutm") -region = Rect2(240, 0, 16, 16) - -[sub_resource type="SpriteFrames" id="SpriteFrames_15g84"] -animations = [{ -"frames": [{ -"duration": 1.0, -"texture": SubResource("AtlasTexture_cldwb") -}, { -"duration": 1.0, -"texture": SubResource("AtlasTexture_ehtnl") -}, { -"duration": 1.0, -"texture": SubResource("AtlasTexture_j05gd") -}, { -"duration": 1.0, -"texture": SubResource("AtlasTexture_7el6f") -}, { -"duration": 1.0, -"texture": SubResource("AtlasTexture_n7sw3") -}, { -"duration": 1.0, -"texture": SubResource("AtlasTexture_mumsm") -}, { -"duration": 1.0, -"texture": SubResource("AtlasTexture_gx41d") -}, { -"duration": 1.0, -"texture": SubResource("AtlasTexture_r4nx1") -}, { -"duration": 1.0, -"texture": SubResource("AtlasTexture_s8j4o") -}, { -"duration": 1.0, -"texture": SubResource("AtlasTexture_2svrb") -}, { -"duration": 1.0, -"texture": SubResource("AtlasTexture_twd5t") -}, { -"duration": 1.0, -"texture": SubResource("AtlasTexture_8w5ka") -}, { -"duration": 1.0, -"texture": SubResource("AtlasTexture_6iumv") -}, { -"duration": 1.0, -"texture": SubResource("AtlasTexture_lpilf") -}, { -"duration": 1.0, -"texture": SubResource("AtlasTexture_n1a5a") -}, { -"duration": 1.0, -"texture": SubResource("AtlasTexture_q0oeq") -}], -"loop": true, -"name": &"default", -"speed": 5.0 -}] - -[sub_resource type="CanvasItemMaterial" id="CanvasItemMaterial_p3lv8"] -particles_animation = true -particles_anim_h_frames = 3 -particles_anim_v_frames = 1 -particles_anim_loop = false - -[sub_resource type="Gradient" id="Gradient_ryemi"] -colors = PackedColorArray(1, 1, 1, 1, 1, 1, 1, 0.537255) - -[sub_resource type="GradientTexture1D" id="GradientTexture1D_orgu0"] -gradient = SubResource("Gradient_ryemi") - -[sub_resource type="Curve" id="Curve_21dxk"] -_data = [Vector2(0, 0), 0.0, 0.0, 0, 0, Vector2(0.177419, 1), 0.0, 0.0, 0, 0, Vector2(1, 0.0272727), 0.0, 0.0, 0, 0] -point_count = 3 - -[sub_resource type="CurveTexture" id="CurveTexture_rutlp"] -curve = SubResource("Curve_21dxk") - -[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_ku1mm"] -particle_flag_disable_z = true -gravity = Vector3(0, 0, 0) -orbit_velocity_min = 0.0 -orbit_velocity_max = 0.0 -angle_max = 360.0 -scale_min = 0.4 -scale_max = 1.5 -scale_curve = SubResource("CurveTexture_rutlp") -color = Color(0.811765, 0.0980392, 0.0980392, 0.627451) -color_ramp = SubResource("GradientTexture1D_orgu0") -anim_offset_max = 1.0 - -[node name="Effect0001" type="CharacterBody2D" node_paths=PackedStringArray("ShadowSprite", "AnimatedSprite", "Collision")] -script = ExtResource("1_jnsw0") -ShadowSprite = NodePath("ShadowSprite") -AnimatedSprite = NodePath("AnimatedSprite") -Collision = NodePath("Collision") - -[node name="ShadowSprite" type="Sprite2D" parent="."] -z_index = -1 -material = SubResource("ShaderMaterial_s1mj2") - -[node name="AnimatedSprite" type="AnimatedSprite2D" parent="."] -material = SubResource("ShaderMaterial_08fn3") -sprite_frames = SubResource("SpriteFrames_15g84") - -[node name="Collision" type="CollisionShape2D" parent="."] - -[node name="GPUParticles2D" type="GPUParticles2D" parent="."] -material = SubResource("CanvasItemMaterial_p3lv8") -emitting = false -process_material = SubResource("ParticleProcessMaterial_ku1mm") -texture = ExtResource("4_egbbr") -fixed_fps = 20 diff --git a/DungeonShooting_Godot/prefab/effect/activityObject/EnemyBloodEffect.tscn b/DungeonShooting_Godot/prefab/effect/activityObject/EnemyBloodEffect.tscn deleted file mode 100644 index 20408ca..0000000 --- a/DungeonShooting_Godot/prefab/effect/activityObject/EnemyBloodEffect.tscn +++ /dev/null @@ -1,45 +0,0 @@ -[gd_scene load_steps=8 format=3 uid="uid://m0s0k5nw7nbi"] - -[ext_resource type="Texture2D" uid="uid://bs1lan5uwxyfg" path="res://resource/curve/Curve1.tres" id="1_1bm8t"] -[ext_resource type="Texture2D" uid="uid://h7hkgbwj1li" path="res://resource/sprite/effects/Smoke.png" id="2_xg444"] -[ext_resource type="Script" path="res://src/game/effects/AutoDestroyEffect.cs" id="3_lldtd"] - -[sub_resource type="CanvasItemMaterial" id="CanvasItemMaterial_emuda"] -particles_animation = true -particles_anim_h_frames = 3 -particles_anim_v_frames = 1 -particles_anim_loop = false - -[sub_resource type="Gradient" id="Gradient_ryemi"] -colors = PackedColorArray(1, 1, 1, 1, 1, 1, 1, 0.537255) - -[sub_resource type="GradientTexture1D" id="GradientTexture1D_4mhw0"] -gradient = SubResource("Gradient_ryemi") - -[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_fwcoe"] -particle_flag_disable_z = true -spread = 180.0 -gravity = Vector3(0, 0, 0) -initial_velocity_min = 5.0 -initial_velocity_max = 35.0 -orbit_velocity_min = 0.0 -orbit_velocity_max = 0.0 -scale_min = 0.8 -scale_max = 0.8 -scale_curve = ExtResource("1_1bm8t") -color = Color(0.811765, 0.0980392, 0.0980392, 0.627451) -color_ramp = SubResource("GradientTexture1D_4mhw0") -anim_offset_max = 1.0 - -[node name="EnemyBloodEffect" type="GPUParticles2D"] -material = SubResource("CanvasItemMaterial_emuda") -emitting = false -amount = 10 -process_material = SubResource("ParticleProcessMaterial_fwcoe") -texture = ExtResource("2_xg444") -lifetime = 1.2 -one_shot = true -explosiveness = 1.0 -fixed_fps = 20 -script = ExtResource("3_lldtd") -DelayTime = 1.5 diff --git a/DungeonShooting_Godot/prefab/effect/common/Effect1.tscn b/DungeonShooting_Godot/prefab/effect/common/Effect1.tscn new file mode 100644 index 0000000..9f4e524 --- /dev/null +++ b/DungeonShooting_Godot/prefab/effect/common/Effect1.tscn @@ -0,0 +1,50 @@ +[gd_scene load_steps=8 format=3 uid="uid://dbhgioeoksa7"] + +[ext_resource type="Material" uid="uid://c1chld6lkpgji" path="res://resource/material/SmokeParticleMaterial.tres" id="1_dxavj"] +[ext_resource type="Texture2D" uid="uid://bs1lan5uwxyfg" path="res://resource/curve/Curve1.tres" id="1_s60r7"] +[ext_resource type="Texture2D" uid="uid://h7hkgbwj1li" path="res://resource/sprite/effects/Smoke.png" id="2_3kyig"] +[ext_resource type="Texture2D" uid="uid://csud4e6kc3iku" path="res://resource/sprite/effects/Effect1.png" id="3_1mceu"] +[ext_resource type="Script" path="res://src/game/effects/Effect1.cs" id="3_ax5u4"] + +[sub_resource type="CanvasItemMaterial" id="CanvasItemMaterial_ipadv"] +particles_animation = true +particles_anim_h_frames = 3 +particles_anim_v_frames = 1 +particles_anim_loop = false + +[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_p8jst"] +particle_flag_align_y = true +particle_flag_disable_z = true +spread = 180.0 +gravity = Vector3(0, 0, 0) +initial_velocity_min = 40.0 +initial_velocity_max = 70.0 +orbit_velocity_min = 0.0 +orbit_velocity_max = 0.0 +scale_min = 0.2 +scale_max = 0.3 +scale_curve = ExtResource("1_s60r7") + +[node name="Effect1" type="GPUParticles2D"] +modulate = Color(0.760784, 0.760784, 0.760784, 0.533333) +z_index = 5 +material = SubResource("CanvasItemMaterial_ipadv") +emitting = false +amount = 10 +process_material = ExtResource("1_dxavj") +texture = ExtResource("2_3kyig") +lifetime = 0.7 +one_shot = true +explosiveness = 1.0 +fixed_fps = 20 +script = ExtResource("3_ax5u4") + +[node name="GPUParticles2D" type="GPUParticles2D" parent="."] +emitting = false +process_material = SubResource("ParticleProcessMaterial_p8jst") +texture = ExtResource("3_1mceu") +lifetime = 0.5 +one_shot = true +explosiveness = 1.0 +randomness = 0.5 +fixed_fps = 20 diff --git a/DungeonShooting_Godot/prefab/effect/enemy/Effect0001.tscn b/DungeonShooting_Godot/prefab/effect/enemy/Effect0001.tscn new file mode 100644 index 0000000..6b7176e --- /dev/null +++ b/DungeonShooting_Godot/prefab/effect/enemy/Effect0001.tscn @@ -0,0 +1,200 @@ +[gd_scene load_steps=30 format=3 uid="uid://pr88a1phtxgb"] + +[ext_resource type="Script" path="res://src/game/effects/EnemyDebris.cs" id="1_ttosm"] +[ext_resource type="Shader" path="res://resource/material/Blend.gdshader" id="2_h62s7"] +[ext_resource type="Texture2D" uid="uid://cn64eauvwx1uj" path="res://resource/sprite/role/enemy0001/enemy0001_Debris.png" id="3_6ewaj"] +[ext_resource type="Texture2D" uid="uid://h7hkgbwj1li" path="res://resource/sprite/effects/common/Smoke.png" id="4_wu0t6"] + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_s1mj2"] +resource_local_to_scene = true +shader = ExtResource("2_h62s7") +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 + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_08fn3"] +shader = ExtResource("2_h62s7") +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 + +[sub_resource type="AtlasTexture" id="AtlasTexture_cldwb"] +atlas = ExtResource("3_6ewaj") +region = Rect2(0, 0, 16, 16) + +[sub_resource type="AtlasTexture" id="AtlasTexture_ehtnl"] +atlas = ExtResource("3_6ewaj") +region = Rect2(16, 0, 16, 16) + +[sub_resource type="AtlasTexture" id="AtlasTexture_j05gd"] +atlas = ExtResource("3_6ewaj") +region = Rect2(32, 0, 16, 16) + +[sub_resource type="AtlasTexture" id="AtlasTexture_7el6f"] +atlas = ExtResource("3_6ewaj") +region = Rect2(48, 0, 16, 16) + +[sub_resource type="AtlasTexture" id="AtlasTexture_n7sw3"] +atlas = ExtResource("3_6ewaj") +region = Rect2(64, 0, 16, 16) + +[sub_resource type="AtlasTexture" id="AtlasTexture_mumsm"] +atlas = ExtResource("3_6ewaj") +region = Rect2(80, 0, 16, 16) + +[sub_resource type="AtlasTexture" id="AtlasTexture_gx41d"] +atlas = ExtResource("3_6ewaj") +region = Rect2(96, 0, 16, 16) + +[sub_resource type="AtlasTexture" id="AtlasTexture_r4nx1"] +atlas = ExtResource("3_6ewaj") +region = Rect2(112, 0, 16, 16) + +[sub_resource type="AtlasTexture" id="AtlasTexture_s8j4o"] +atlas = ExtResource("3_6ewaj") +region = Rect2(128, 0, 16, 16) + +[sub_resource type="AtlasTexture" id="AtlasTexture_2svrb"] +atlas = ExtResource("3_6ewaj") +region = Rect2(144, 0, 16, 16) + +[sub_resource type="AtlasTexture" id="AtlasTexture_twd5t"] +atlas = ExtResource("3_6ewaj") +region = Rect2(160, 0, 16, 16) + +[sub_resource type="AtlasTexture" id="AtlasTexture_8w5ka"] +atlas = ExtResource("3_6ewaj") +region = Rect2(176, 0, 16, 16) + +[sub_resource type="AtlasTexture" id="AtlasTexture_6iumv"] +atlas = ExtResource("3_6ewaj") +region = Rect2(192, 0, 16, 16) + +[sub_resource type="AtlasTexture" id="AtlasTexture_lpilf"] +atlas = ExtResource("3_6ewaj") +region = Rect2(208, 0, 16, 16) + +[sub_resource type="AtlasTexture" id="AtlasTexture_n1a5a"] +atlas = ExtResource("3_6ewaj") +region = Rect2(224, 0, 16, 16) + +[sub_resource type="AtlasTexture" id="AtlasTexture_q0oeq"] +atlas = ExtResource("3_6ewaj") +region = Rect2(240, 0, 16, 16) + +[sub_resource type="SpriteFrames" id="SpriteFrames_15g84"] +animations = [{ +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_cldwb") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_ehtnl") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_j05gd") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_7el6f") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_n7sw3") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_mumsm") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_gx41d") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_r4nx1") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_s8j4o") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_2svrb") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_twd5t") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_8w5ka") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_6iumv") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_lpilf") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_n1a5a") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_q0oeq") +}], +"loop": true, +"name": &"default", +"speed": 5.0 +}] + +[sub_resource type="CanvasItemMaterial" id="CanvasItemMaterial_p3lv8"] +particles_animation = true +particles_anim_h_frames = 3 +particles_anim_v_frames = 1 +particles_anim_loop = false + +[sub_resource type="Gradient" id="Gradient_ryemi"] +colors = PackedColorArray(1, 1, 1, 1, 1, 1, 1, 0.537255) + +[sub_resource type="GradientTexture1D" id="GradientTexture1D_orgu0"] +gradient = SubResource("Gradient_ryemi") + +[sub_resource type="Curve" id="Curve_21dxk"] +_data = [Vector2(0, 0), 0.0, 0.0, 0, 0, Vector2(0.177419, 1), 0.0, 0.0, 0, 0, Vector2(1, 0.0272727), 0.0, 0.0, 0, 0] +point_count = 3 + +[sub_resource type="CurveTexture" id="CurveTexture_rutlp"] +curve = SubResource("Curve_21dxk") + +[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_ku1mm"] +particle_flag_disable_z = true +gravity = Vector3(0, 0, 0) +orbit_velocity_min = 0.0 +orbit_velocity_max = 0.0 +angle_max = 360.0 +scale_min = 0.4 +scale_max = 1.5 +scale_curve = SubResource("CurveTexture_rutlp") +color = Color(0.811765, 0.0980392, 0.0980392, 0.627451) +color_ramp = SubResource("GradientTexture1D_orgu0") +anim_offset_max = 1.0 + +[node name="Effect0001" type="CharacterBody2D" node_paths=PackedStringArray("ShadowSprite", "AnimatedSprite", "Collision")] +script = ExtResource("1_ttosm") +ShadowSprite = NodePath("ShadowSprite") +AnimatedSprite = NodePath("AnimatedSprite") +Collision = NodePath("Collision") + +[node name="ShadowSprite" type="Sprite2D" parent="."] +z_index = -1 +material = SubResource("ShaderMaterial_s1mj2") + +[node name="AnimatedSprite" type="AnimatedSprite2D" parent="."] +material = SubResource("ShaderMaterial_08fn3") +sprite_frames = SubResource("SpriteFrames_15g84") + +[node name="Collision" type="CollisionShape2D" parent="."] + +[node name="GPUParticles2D" type="GPUParticles2D" parent="."] +material = SubResource("CanvasItemMaterial_p3lv8") +emitting = false +process_material = SubResource("ParticleProcessMaterial_ku1mm") +texture = ExtResource("4_wu0t6") +fixed_fps = 20 diff --git a/DungeonShooting_Godot/prefab/effect/enemy/EnemyBloodEffect.tscn b/DungeonShooting_Godot/prefab/effect/enemy/EnemyBloodEffect.tscn new file mode 100644 index 0000000..8b4aa0a --- /dev/null +++ b/DungeonShooting_Godot/prefab/effect/enemy/EnemyBloodEffect.tscn @@ -0,0 +1,25 @@ +[gd_scene load_steps=5 format=3 uid="uid://m0s0k5nw7nbi"] + +[ext_resource type="Material" uid="uid://c1chld6lkpgji" path="res://resource/material/SmokeParticleMaterial.tres" id="1_leomh"] +[ext_resource type="Texture2D" uid="uid://h7hkgbwj1li" path="res://resource/sprite/effects/common/Smoke.png" id="2_c2t2e"] +[ext_resource type="Script" path="res://src/game/effects/AutoDestroyParticles.cs" id="3_5cpi6"] + +[sub_resource type="CanvasItemMaterial" id="CanvasItemMaterial_emuda"] +particles_animation = true +particles_anim_h_frames = 3 +particles_anim_v_frames = 1 +particles_anim_loop = false + +[node name="EnemyBloodEffect" type="GPUParticles2D"] +modulate = Color(0.811765, 0.0980392, 0.0980392, 0.627451) +material = SubResource("CanvasItemMaterial_emuda") +emitting = false +amount = 10 +process_material = ExtResource("1_leomh") +texture = ExtResource("2_c2t2e") +lifetime = 1.2 +one_shot = true +explosiveness = 1.0 +fixed_fps = 20 +script = ExtResource("3_5cpi6") +DelayTime = 1.5 diff --git a/DungeonShooting_Godot/prefab/effect/weapon/BulletDisappear.tscn b/DungeonShooting_Godot/prefab/effect/weapon/BulletDisappear.tscn new file mode 100644 index 0000000..54549a1 --- /dev/null +++ b/DungeonShooting_Godot/prefab/effect/weapon/BulletDisappear.tscn @@ -0,0 +1,145 @@ +[gd_scene load_steps=15 format=3] + +[ext_resource type="Texture2D" uid="uid://d8ot2wrdoe4j" path="res://resource/sprite/effects/Explosion.png" id="1_qqm6c"] +[ext_resource type="Texture2D" uid="uid://h7hkgbwj1li" path="res://resource/sprite/effects/Smoke.png" id="1_ybsvf"] + + +[sub_resource type="AtlasTexture" id="AtlasTexture_tscb3"] +atlas = ExtResource("1_qqm6c") +region = Rect2(0, 0, 16, 16) + +[sub_resource type="AtlasTexture" id="AtlasTexture_l2nv6"] +atlas = ExtResource("1_qqm6c") +region = Rect2(16, 0, 16, 16) + +[sub_resource type="AtlasTexture" id="AtlasTexture_5133m"] +atlas = ExtResource("1_qqm6c") +region = Rect2(32, 0, 16, 16) + +[sub_resource type="AtlasTexture" id="AtlasTexture_41eg5"] +atlas = ExtResource("1_qqm6c") +region = Rect2(48, 0, 16, 16) + +[sub_resource type="SpriteFrames" id="SpriteFrames_ub3cw"] +animations = [{ +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_tscb3") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_l2nv6") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_5133m") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_41eg5") +}], +"loop": false, +"name": &"default", +"speed": 13.0 +}] + +[sub_resource type="CanvasItemMaterial" id="CanvasItemMaterial_4bd3q"] +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, 0.736364), 0.0, 0.0, 0, 0, Vector2(0.396825, 1), 0.0, 0.0, 0, 0, Vector2(0.990476, 0), 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_r1yeu"] +lifetime_randomness = 0.3 +particle_flag_disable_z = true +spread = 180.0 +gravity = Vector3(0, 0, 0) +initial_velocity_min = 45.0 +initial_velocity_max = 65.0 +orbit_velocity_min = 0.0 +orbit_velocity_max = 0.0 +angle_max = 360.0 +scale_min = 0.3 +scale_max = 0.6 +scale_curve = SubResource("CurveTexture_j77i6") +color = Color(0.909804, 0.909804, 0.909804, 0.380392) +anim_offset_max = 1.0 + +[sub_resource type="Animation" id="Animation_jnfgg"] +resource_name = "Start" +length = 0.3 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:emitting") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} +tracks/1/type = "method" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("..") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0.3), +"transitions": PackedFloat32Array(1), +"values": [{ +"args": [], +"method": &"queue_free" +}] +} + +[sub_resource type="Animation" id="Animation_yr61b"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:emitting") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [false] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_1spnw"] +_data = { +"RESET": SubResource("Animation_yr61b"), +"Start": SubResource("Animation_jnfgg") +} + +[node name="BulletDisappear" type="AnimatedSprite2D"] +modulate = Color(1, 1, 1, 0.784314) +z_index = -4 +scale = Vector2(0.5, 0.5) +sprite_frames = SubResource("SpriteFrames_ub3cw") +autoplay = "default" + +[node name="GPUParticles2D" type="GPUParticles2D" parent="."] +material = SubResource("CanvasItemMaterial_4bd3q") +emitting = false +process_material = SubResource("ParticleProcessMaterial_r1yeu") +texture = ExtResource("1_ybsvf") +lifetime = 0.3 +one_shot = true +explosiveness = 0.9 +fixed_fps = 20 + +[node name="AnimationPlayer" type="AnimationPlayer" parent="."] +root_node = NodePath("../GPUParticles2D") +autoplay = "Start" +libraries = { +"": SubResource("AnimationLibrary_1spnw") +} diff --git a/DungeonShooting_Godot/prefab/effect/weapon/BulletSmoke.tscn b/DungeonShooting_Godot/prefab/effect/weapon/BulletSmoke.tscn new file mode 100644 index 0000000..444e13a --- /dev/null +++ b/DungeonShooting_Godot/prefab/effect/weapon/BulletSmoke.tscn @@ -0,0 +1,146 @@ +[gd_scene load_steps=9 format=3 uid="uid://b8ogu2l8pa70y"] + +[ext_resource type="Texture2D" uid="uid://h7hkgbwj1li" path="res://resource/sprite/effects/common/Smoke.png" id="1"] +[ext_resource type="Texture2D" uid="uid://bs1lan5uwxyfg" path="res://resource/curve/Curve1.tres" id="1_8pe88"] +[ext_resource type="Texture2D" uid="uid://dwa4chrugc6b1" path="res://resource/sprite/effects/Collision.png" id="2"] + + +[sub_resource type="CanvasItemMaterial" id="1"] +particles_animation = true +particles_anim_h_frames = 3 +particles_anim_v_frames = 1 +particles_anim_loop = false + +[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_gpp81"] +lifetime_randomness = 0.5 +particle_flag_disable_z = true +spread = 25.0 +gravity = Vector3(0, 0, 0) +initial_velocity_max = 90.0 +orbit_velocity_min = 0.0 +orbit_velocity_max = 0.0 +angle_max = 360.0 +scale_curve = ExtResource("1_8pe88") +color = Color(0.75, 0.75, 0.75, 0.470588) +anim_offset_max = 1.0 + +[sub_resource type="Animation" id="5"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:emitting") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [false] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Sprite2D:frame") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [0] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("Sprite2D:visible") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [true] +} + +[sub_resource type="Animation" id="6"] +resource_name = "Smoke" +step = 0.05 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:emitting") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} +tracks/1/type = "method" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath(".") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(1), +"transitions": PackedFloat32Array(1), +"values": [{ +"args": [], +"method": &"queue_free" +}] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("Sprite2D:frame") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0, 0.05, 0.1, 0.15), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 1, +"values": [0, 1, 2, 3] +} +tracks/3/type = "value" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("Sprite2D:visible") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0, 0.2), +"transitions": PackedFloat32Array(1, 1), +"update": 1, +"values": [true, false] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_uuiu7"] +_data = { +"RESET": SubResource("5"), +"Smoke": SubResource("6") +} + +[node name="BulletSmoke" type="GPUParticles2D"] +material = SubResource("1") +emitting = false +process_material = SubResource("ParticleProcessMaterial_gpp81") +texture = ExtResource("1") +lifetime = 0.4 +one_shot = true +explosiveness = 0.9 +fixed_fps = 20 + +[node name="Sprite2D" type="Sprite2D" parent="."] +modulate = Color(1.6, 1.6, 1.6, 1) +texture = ExtResource("2") +offset = Vector2(8, 0) +hframes = 4 + +[node name="AnimationPlayer" type="AnimationPlayer" parent="."] +autoplay = "Smoke" +libraries = { +"": SubResource("AnimationLibrary_uuiu7") +} diff --git a/DungeonShooting_Godot/prefab/effect/weapon/FirePart.tscn b/DungeonShooting_Godot/prefab/effect/weapon/FirePart.tscn new file mode 100644 index 0000000..629586a --- /dev/null +++ b/DungeonShooting_Godot/prefab/effect/weapon/FirePart.tscn @@ -0,0 +1,13 @@ +[gd_scene load_steps=2 format=3 uid="uid://bh6vo2i6x7lmj"] + +[sub_resource type="ParticleProcessMaterial" id="1"] +spread = 60.0 +gravity = Vector3(0, 0, 0) + +[node name="FirePart" type="GPUParticles2D"] +emitting = false +amount = 10 +process_material = SubResource("1") +lifetime = 0.2 +one_shot = true +explosiveness = 1.0 diff --git a/DungeonShooting_Godot/prefab/effect/weapon/MeleeAttack1.tscn b/DungeonShooting_Godot/prefab/effect/weapon/MeleeAttack1.tscn new file mode 100644 index 0000000..5ba7c89 --- /dev/null +++ b/DungeonShooting_Godot/prefab/effect/weapon/MeleeAttack1.tscn @@ -0,0 +1,39 @@ +[gd_scene load_steps=7 format=3 uid="uid://cylm455bsio3g"] + +[ext_resource type="Texture2D" uid="uid://7jhe2mmctmr1" path="res://resource/sprite/effects/weapon/MeleeAttack1.png" id="1_bjxle"] +[ext_resource type="Script" path="res://src/game/effects/AutoDestroySprite.cs" id="2_bjagc"] + +[sub_resource type="AtlasTexture" id="AtlasTexture_h5mw5"] +atlas = ExtResource("1_bjxle") +region = Rect2(0, 0, 16, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_rjd0g"] +atlas = ExtResource("1_bjxle") +region = Rect2(16, 0, 16, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_q06ex"] +atlas = ExtResource("1_bjxle") +region = Rect2(32, 0, 16, 32) + +[sub_resource type="SpriteFrames" id="SpriteFrames_hkcv6"] +animations = [{ +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_h5mw5") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_rjd0g") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_q06ex") +}], +"loop": false, +"name": &"default", +"speed": 20.0 +}] + +[node name="MeleeAttack1" type="AnimatedSprite2D"] +sprite_frames = SubResource("SpriteFrames_hkcv6") +autoplay = "default" +script = ExtResource("2_bjagc") +DelayTime = 0.15 diff --git a/DungeonShooting_Godot/prefab/effect/weapon/ShotFire.tscn b/DungeonShooting_Godot/prefab/effect/weapon/ShotFire.tscn new file mode 100644 index 0000000..b0161a5 --- /dev/null +++ b/DungeonShooting_Godot/prefab/effect/weapon/ShotFire.tscn @@ -0,0 +1,48 @@ +[gd_scene load_steps=8 format=3 uid="uid://433h6huyctl1"] + +[ext_resource type="Texture2D" uid="uid://b0jsyrbk4bydt" path="res://resource/sprite/effects/weapon/ShotFire.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") +}], +"loop": false, +"name": &"default", +"speed": 20.0 +}] + +[node name="ShotFire" type="AnimatedSprite2D"] +modulate = Color(1.6, 1.6, 1.6, 1) +sprite_frames = SubResource("SpriteFrames_73j16") +autoplay = "default" +offset = Vector2(8, 0) +script = ExtResource("2_lnwju") +DelayTime = 0.2 diff --git a/DungeonShooting_Godot/prefab/role/Enemy0001.tscn b/DungeonShooting_Godot/prefab/role/Enemy0001.tscn index 5f153c2..6d6eeaf 100644 --- a/DungeonShooting_Godot/prefab/role/Enemy0001.tscn +++ b/DungeonShooting_Godot/prefab/role/Enemy0001.tscn @@ -25,14 +25,16 @@ shader_parameter/outline_color = Color(0, 0, 0, 1) shader_parameter/outline_rainbow = false -[node name="Enemy0001" node_paths=PackedStringArray("HurtArea", "MountPoint", "BackMountPoint", "InteractiveArea", "ShadowSprite", "AnimatedSprite", "Collision") instance=ExtResource("1_5po38")] +[node name="Enemy0001" node_paths=PackedStringArray("HurtArea", "HurtCollision", "MountPoint", "BackMountPoint", "InteractiveArea", "InteractiveCollision", "ShadowSprite", "AnimatedSprite", "Collision") instance=ExtResource("1_5po38")] collision_layer = 16 collision_mask = 25 script = ExtResource("2_1plrq") HurtArea = NodePath("HurtArea") +HurtCollision = NodePath("HurtArea/HurtCollision") MountPoint = NodePath("MountPoint") BackMountPoint = NodePath("BackMountPoint") InteractiveArea = NodePath("InteractiveArea") +InteractiveCollision = NodePath("InteractiveArea/InteractiveCollision") ShadowSprite = NodePath("ShadowSprite") AnimatedSprite = NodePath("AnimatedSprite") Collision = NodePath("Collision") diff --git a/DungeonShooting_Godot/prefab/role/Role0001.tscn b/DungeonShooting_Godot/prefab/role/Role0001.tscn index 4560a76..b8e436d 100644 --- a/DungeonShooting_Godot/prefab/role/Role0001.tscn +++ b/DungeonShooting_Godot/prefab/role/Role0001.tscn @@ -1,7 +1,7 @@ [gd_scene load_steps=7 format=3 uid="uid://cxhrcytrx0kcf"] [ext_resource type="PackedScene" uid="uid://cyrcv2jdgr8cf" path="res://prefab/role/RoleTemplate.tscn" id="1_10c2n"] -[ext_resource type="Script" path="res://src/game/activity/role/Player.cs" id="2_i08u4"] +[ext_resource type="Script" path="res://src/game/activity/role/player/Player.cs" id="2_6xwnt"] [ext_resource type="Shader" path="res://resource/material/Blend.gdshader" id="3_rk4gg"] [ext_resource type="SpriteFrames" uid="uid://n11thtali6es" path="res://resource/spriteFrames/role/Role0001.tres" id="4_galcc"] @@ -25,13 +25,15 @@ shader_parameter/outline_color = Color(0, 0, 0, 1) shader_parameter/outline_rainbow = false -[node name="Role0001" node_paths=PackedStringArray("HurtArea", "MountPoint", "BackMountPoint", "InteractiveArea", "ShadowSprite", "AnimatedSprite", "Collision") instance=ExtResource("1_10c2n")] +[node name="Role0001" node_paths=PackedStringArray("HurtArea", "HurtCollision", "MountPoint", "BackMountPoint", "InteractiveArea", "InteractiveCollision", "ShadowSprite", "AnimatedSprite", "Collision") instance=ExtResource("1_10c2n")] collision_layer = 8 -script = ExtResource("2_i08u4") +script = ExtResource("2_6xwnt") HurtArea = NodePath("HurtArea") +HurtCollision = NodePath("HurtArea/HurtCollision") MountPoint = NodePath("MountPoint") BackMountPoint = NodePath("BackMountPoint") InteractiveArea = NodePath("InteractiveArea") +InteractiveCollision = NodePath("InteractiveArea/InteractiveCollision") ShadowSprite = NodePath("ShadowSprite") AnimatedSprite = NodePath("AnimatedSprite") Collision = NodePath("Collision") @@ -42,10 +44,3 @@ [node name="AnimatedSprite" parent="." index="2"] material = SubResource("ShaderMaterial_8hgu2") sprite_frames = ExtResource("4_galcc") -frame_progress = 0.0995217 - -[node name="CollisionShape2D" parent="HurtArea" index="0"] -position = Vector2(0, -12) - -[node name="MountPoint" parent="." index="6"] -position = Vector2(2, -8) diff --git a/DungeonShooting_Godot/prefab/role/RoleTemplate.tscn b/DungeonShooting_Godot/prefab/role/RoleTemplate.tscn index fde7ce1..2217fee 100644 --- a/DungeonShooting_Godot/prefab/role/RoleTemplate.tscn +++ b/DungeonShooting_Godot/prefab/role/RoleTemplate.tscn @@ -8,7 +8,7 @@ shader = ExtResource("1_xk5yk") shader_parameter/blend = Color(0, 0, 0, 0.470588) shader_parameter/schedule = 0.0 -shader_parameter/alpha = 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 @@ -18,7 +18,7 @@ shader = ExtResource("1_xk5yk") shader_parameter/blend = Color(1, 1, 1, 1) shader_parameter/schedule = 0.0 -shader_parameter/alpha = 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 @@ -54,7 +54,7 @@ collision_mask = 0 monitoring = false -[node name="CollisionShape2D" type="CollisionShape2D" parent="HurtArea"] +[node name="HurtCollision" type="CollisionShape2D" parent="HurtArea"] position = Vector2(0, -9) shape = SubResource("RectangleShape2D_1eja2") @@ -64,10 +64,10 @@ collision_mask = 4 monitorable = false -[node name="Collision" type="CollisionShape2D" parent="InteractiveArea"] +[node name="InteractiveCollision" type="CollisionShape2D" parent="InteractiveArea"] position = Vector2(0, -5) shape = SubResource("RectangleShape2D_n68nu") [node name="MountPoint" type="Marker2D" parent="."] -position = Vector2(1, -6) +position = Vector2(2, -8) script = ExtResource("2_5ddpw") diff --git a/DungeonShooting_Godot/project.godot b/DungeonShooting_Godot/project.godot index 6dccd9a..ba66a76 100644 --- a/DungeonShooting_Godot/project.godot +++ b/DungeonShooting_Godot/project.godot @@ -114,32 +114,32 @@ } 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":65,"physical_keycode":0,"key_label":0,"unicode":97,"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":0,"physical_keycode":65,"key_label":0,"unicode":97,"echo":false,"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":68,"physical_keycode":0,"key_label":0,"unicode":100,"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":0,"physical_keycode":68,"key_label":0,"unicode":100,"echo":false,"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":87,"physical_keycode":0,"key_label":0,"unicode":119,"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":0,"physical_keycode":87,"key_label":0,"unicode":119,"echo":false,"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":83,"physical_keycode":0,"key_label":0,"unicode":115,"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":0,"physical_keycode":83,"key_label":0,"unicode":115,"echo":false,"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":81,"physical_keycode":0,"key_label":0,"unicode":113,"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":0,"physical_keycode":81,"key_label":0,"unicode":113,"echo":false,"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":71,"physical_keycode":0,"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":0,"physical_keycode":71,"key_label":0,"unicode":103,"echo":false,"script":null) ] } mouse_roll_up={ @@ -154,32 +154,32 @@ } 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":69,"physical_keycode":0,"key_label":0,"unicode":101,"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":0,"physical_keycode":69,"key_label":0,"unicode":101,"echo":false,"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":82,"physical_keycode":0,"key_label":0,"unicode":114,"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":0,"physical_keycode":82,"key_label":0,"unicode":114,"echo":false,"script":null) ] } meleeAttack={ "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(34.8, 12.8),"global_position":Vector2(38, 46),"factor":1.0,"button_index":2,"canceled":false,"pressed":true,"double_click":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":0,"physical_keycode":32,"key_label":0,"unicode":32,"echo":false,"script":null) ] } roll={ "deadzone": 0.5, -"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":32,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +"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) ] } 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":70,"physical_keycode":0,"key_label":0,"unicode":102,"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":0,"physical_keycode":70,"key_label":0,"unicode":102,"echo":false,"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":88,"physical_keycode":0,"key_label":0,"unicode":120,"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":0,"physical_keycode":88,"key_label":0,"unicode":120,"echo":false,"script":null) ] } diff --git a/DungeonShooting_Godot/resource/config/ActivityObject.json b/DungeonShooting_Godot/resource/config/ActivityObject.json index d66af1d..49cb525 100644 --- a/DungeonShooting_Godot/resource/config/ActivityObject.json +++ b/DungeonShooting_Godot/resource/config/ActivityObject.json @@ -155,7 +155,7 @@ "Name": "", "Intro": "\u654C\u4EBA\u6B7B\u4EA1\u788E\u7247", "Details": "", - "Prefab": "res://prefab/effect/activityObject/Effect0001.tscn", + "Prefab": "res://prefab/effect/enemy/Effect0001.tscn", "Icon": "", "ShowInMapEditor": false }, @@ -165,7 +165,7 @@ "Name": "\u978B\u5B50", "Intro": "\u63D0\u9AD8\u79FB\u52A8\u901F\u5EA6", "Details": "", - "Prefab": "res://prefab/prop/buff/BuffProp0001.tscn", + "Prefab": "res://prefab/effect/enemy/Effect0001.tscn", "Icon": "res://resource/sprite/prop/buff/BuffProp0001.png", "ShowInMapEditor": true }, diff --git a/DungeonShooting_Godot/resource/config/Weapon.json b/DungeonShooting_Godot/resource/config/Weapon.json index 2ee18aa..1bf292c 100644 --- a/DungeonShooting_Godot/resource/config/Weapon.json +++ b/DungeonShooting_Godot/resource/config/Weapon.json @@ -20,42 +20,57 @@ "ManualBeLoaded": false, "AutoManualBeLoaded": false, "BeLoadedTime": 0, - "MinContinuousCount": 1, - "MaxContinuousCount": 1, + "ContinuousCountRange": [ + 1 + ], "TriggerInterval": 0, "StartFiringSpeed": 480, "FinalFiringSpeed": 480, "FiringSpeedAddSpeed": 0, "FiringSpeedBackSpeed": 0, - "MinFireBulletCount": 1, - "MaxFireBulletCount": 1, + "FireBulletCountRange": [ + 1 + ], "DelayedTime": 0, "StartScatteringRange": 5, "FinalScatteringRange": 45, "ScatteringRangeAddValue": 3, "ScatteringRangeBackSpeed": 40, "ScatteringRangeBackDelayTime": 0.5, - "MinBacklash": 2, - "MaxBacklash": 4, + "BacklashRange": [ + 2, + 4 + ], "BacklashRegressionSpeed": 35, "UpliftAngle": 10, "DefaultAngle": 0, "UpliftAngleRestore": 1, "BulletId": "bullet0001", - "BulletMaxHarm": 4, - "BulletMinHarm": 4, - "BulletMinDeviationAngle": 0, - "BulletMaxDeviationAngle": 0, - "BulletMaxSpeed": 320, - "BulletMinSpeed": 350, - "BulletMinDistance": 300, - "BulletMaxDistance": 400, + "BulletHarmRange": [ + 4 + ], + "BulletDeviationAngleRange": [ + 0 + ], + "BulletSpeedRange": [ + 320, + 350 + ], + "BulletDistanceRange": [ + 300, + 400 + ], "ShellId": "shell0001", "ThrowShellDelayTime": 0, "ThrowCollisionSize": { "X": 20, "Y": 15 }, + "CanMeleeAttack": true, + "MeleeAttackHarmRange": [ + 5, + 8 + ], "__ShootSound": "shooting0005", "__BeginReloadSound": "reloadBegin0004", "BeginReloadSoundDelayTime": 0.2, @@ -92,42 +107,57 @@ "ManualBeLoaded": false, "AutoManualBeLoaded": false, "BeLoadedTime": 0, - "MinContinuousCount": 3, - "MaxContinuousCount": 3, + "ContinuousCountRange": [ + 3 + ], "TriggerInterval": 3, "StartFiringSpeed": 480, "FinalFiringSpeed": 480, "FiringSpeedAddSpeed": 0, "FiringSpeedBackSpeed": 0, - "MinFireBulletCount": 1, - "MaxFireBulletCount": 1, + "FireBulletCountRange": [ + 1 + ], "DelayedTime": 0, "StartScatteringRange": 5, "FinalScatteringRange": 45, "ScatteringRangeAddValue": 3, "ScatteringRangeBackSpeed": 40, "ScatteringRangeBackDelayTime": 0.5, - "MinBacklash": 2, - "MaxBacklash": 4, + "BacklashRange": [ + 2, + 4 + ], "BacklashRegressionSpeed": 35, "UpliftAngle": 10, "DefaultAngle": 0, "UpliftAngleRestore": 1, "BulletId": "bullet0001", - "BulletMaxHarm": 4, - "BulletMinHarm": 4, - "BulletMinDeviationAngle": 0, - "BulletMaxDeviationAngle": 0, - "BulletMaxSpeed": 320, - "BulletMinSpeed": 350, - "BulletMinDistance": 300, - "BulletMaxDistance": 400, + "BulletHarmRange": [ + 4 + ], + "BulletDeviationAngleRange": [ + 0 + ], + "BulletSpeedRange": [ + 320, + 350 + ], + "BulletDistanceRange": [ + 300, + 400 + ], "ShellId": "shell0001", "ThrowShellDelayTime": 0, "ThrowCollisionSize": { "X": 20, "Y": 15 }, + "CanMeleeAttack": true, + "MeleeAttackHarmRange": [ + 5, + 8 + ], "__ShootSound": "shooting0005", "__BeginReloadSound": "reloadBegin0004", "BeginReloadSoundDelayTime": 0.2, @@ -164,42 +194,58 @@ "ManualBeLoaded": true, "AutoManualBeLoaded": true, "BeLoadedTime": 0.6, - "MinContinuousCount": 1, - "MaxContinuousCount": 1, + "ContinuousCountRange": [ + 1 + ], "TriggerInterval": 0, "StartFiringSpeed": 120, "FinalFiringSpeed": 120, "FiringSpeedAddSpeed": 0, "FiringSpeedBackSpeed": 0, - "MinFireBulletCount": 5, - "MaxFireBulletCount": 5, + "FireBulletCountRange": [ + 5 + ], "DelayedTime": 0, "StartScatteringRange": 12, "FinalScatteringRange": 30, "ScatteringRangeAddValue": 20, "ScatteringRangeBackSpeed": 40, "ScatteringRangeBackDelayTime": 0.5, - "MinBacklash": 5, - "MaxBacklash": 6, + "BacklashRange": [ + 5, + 6 + ], "BacklashRegressionSpeed": 35, "UpliftAngle": 15, "DefaultAngle": 0, "UpliftAngleRestore": 1, "BulletId": "bullet0002", - "BulletMaxHarm": 4, - "BulletMinHarm": 4, - "BulletMinDeviationAngle": -10, - "BulletMaxDeviationAngle": 10, - "BulletMaxSpeed": 280, - "BulletMinSpeed": 380, - "BulletMinDistance": 200, - "BulletMaxDistance": 250, + "BulletHarmRange": [ + 4 + ], + "BulletDeviationAngleRange": [ + -10, + 10 + ], + "BulletSpeedRange": [ + 280, + 380 + ], + "BulletDistanceRange": [ + 200, + 250 + ], "ShellId": "shell0002", "ThrowShellDelayTime": 0.2, "ThrowCollisionSize": { "X": 20, "Y": 15 }, + "CanMeleeAttack": true, + "MeleeAttackHarmRange": [ + 5, + 8 + ], "__ShootSound": "shooting0003", "__BeginReloadSound": "reloadBegin0002", "BeginReloadSoundDelayTime": 0, @@ -236,42 +282,58 @@ "ManualBeLoaded": true, "AutoManualBeLoaded": true, "BeLoadedTime": 0.6, - "MinContinuousCount": 1, - "MaxContinuousCount": 1, + "ContinuousCountRange": [ + 1 + ], "TriggerInterval": 3.5, "StartFiringSpeed": 120, "FinalFiringSpeed": 120, "FiringSpeedAddSpeed": 0, "FiringSpeedBackSpeed": 0, - "MinFireBulletCount": 5, - "MaxFireBulletCount": 5, + "FireBulletCountRange": [ + 5 + ], "DelayedTime": 0, "StartScatteringRange": 12, "FinalScatteringRange": 30, "ScatteringRangeAddValue": 20, "ScatteringRangeBackSpeed": 40, "ScatteringRangeBackDelayTime": 0.5, - "MinBacklash": 5, - "MaxBacklash": 6, + "BacklashRange": [ + 5, + 6 + ], "BacklashRegressionSpeed": 35, "UpliftAngle": 15, "DefaultAngle": 0, "UpliftAngleRestore": 1, "BulletId": "bullet0002", - "BulletMaxHarm": 4, - "BulletMinHarm": 4, - "BulletMinDeviationAngle": -10, - "BulletMaxDeviationAngle": 10, - "BulletMaxSpeed": 280, - "BulletMinSpeed": 380, - "BulletMinDistance": 200, - "BulletMaxDistance": 250, + "BulletHarmRange": [ + 4 + ], + "BulletDeviationAngleRange": [ + -10, + 10 + ], + "BulletSpeedRange": [ + 280, + 380 + ], + "BulletDistanceRange": [ + 200, + 250 + ], "ShellId": "shell0002", "ThrowShellDelayTime": 0.2, "ThrowCollisionSize": { "X": 20, "Y": 15 }, + "CanMeleeAttack": true, + "MeleeAttackHarmRange": [ + 5, + 8 + ], "__ShootSound": "shooting0003", "__BeginReloadSound": "reloadBegin0002", "BeginReloadSoundDelayTime": 0, @@ -308,42 +370,57 @@ "ManualBeLoaded": false, "AutoManualBeLoaded": false, "BeLoadedTime": 0.05, - "MinContinuousCount": 1, - "MaxContinuousCount": 1, + "ContinuousCountRange": [ + 1 + ], "TriggerInterval": 0, "StartFiringSpeed": 460, "FinalFiringSpeed": 460, "FiringSpeedAddSpeed": 0, "FiringSpeedBackSpeed": 0, - "MinFireBulletCount": 1, - "MaxFireBulletCount": 1, + "FireBulletCountRange": [ + 1 + ], "DelayedTime": 0, "StartScatteringRange": 5, "FinalScatteringRange": 25, "ScatteringRangeAddValue": 4, "ScatteringRangeBackSpeed": 40, "ScatteringRangeBackDelayTime": 0.5, - "MinBacklash": 3, - "MaxBacklash": 5, + "BacklashRange": [ + 3, + 5 + ], "BacklashRegressionSpeed": 35, "UpliftAngle": 20, "DefaultAngle": 0, "UpliftAngleRestore": 1, "BulletId": "bullet0001", - "BulletMaxHarm": 4, - "BulletMinHarm": 4, - "BulletMinDeviationAngle": 0, - "BulletMaxDeviationAngle": 0, - "BulletMaxSpeed": 320, - "BulletMinSpeed": 350, - "BulletMinDistance": 250, - "BulletMaxDistance": 300, + "BulletHarmRange": [ + 4 + ], + "BulletDeviationAngleRange": [ + 0 + ], + "BulletSpeedRange": [ + 320, + 350 + ], + "BulletDistanceRange": [ + 250, + 300 + ], "ShellId": "shell0001", "ThrowShellDelayTime": 0, "ThrowCollisionSize": { "X": 20, "Y": 15 }, + "CanMeleeAttack": true, + "MeleeAttackHarmRange": [ + 5, + 8 + ], "__ShootSound": "shooting0004", "__BeginReloadSound": "reloading0001", "BeginReloadSoundDelayTime": 0, @@ -380,42 +457,57 @@ "ManualBeLoaded": false, "AutoManualBeLoaded": false, "BeLoadedTime": 0.05, - "MinContinuousCount": 1, - "MaxContinuousCount": 1, + "ContinuousCountRange": [ + 1 + ], "TriggerInterval": 2, "StartFiringSpeed": 300, "FinalFiringSpeed": 300, "FiringSpeedAddSpeed": 0, "FiringSpeedBackSpeed": 0, - "MinFireBulletCount": 1, - "MaxFireBulletCount": 1, + "FireBulletCountRange": [ + 1 + ], "DelayedTime": 0, "StartScatteringRange": 5, "FinalScatteringRange": 25, "ScatteringRangeAddValue": 4, "ScatteringRangeBackSpeed": 40, "ScatteringRangeBackDelayTime": 0.5, - "MinBacklash": 3, - "MaxBacklash": 5, + "BacklashRange": [ + 3, + 5 + ], "BacklashRegressionSpeed": 35, "UpliftAngle": 20, "DefaultAngle": 0, "UpliftAngleRestore": 1, "BulletId": "bullet0001", - "BulletMaxHarm": 4, - "BulletMinHarm": 4, - "BulletMinDeviationAngle": 0, - "BulletMaxDeviationAngle": 0, - "BulletMaxSpeed": 320, - "BulletMinSpeed": 350, - "BulletMinDistance": 250, - "BulletMaxDistance": 300, + "BulletHarmRange": [ + 4 + ], + "BulletDeviationAngleRange": [ + 0 + ], + "BulletSpeedRange": [ + 320, + 350 + ], + "BulletDistanceRange": [ + 250, + 300 + ], "ShellId": "shell0001", "ThrowShellDelayTime": 0, "ThrowCollisionSize": { "X": 20, "Y": 15 }, + "CanMeleeAttack": true, + "MeleeAttackHarmRange": [ + 5, + 8 + ], "__ShootSound": "shooting0004", "__BeginReloadSound": "reloading0001", "BeginReloadSoundDelayTime": 0, @@ -452,42 +544,54 @@ "ManualBeLoaded": false, "AutoManualBeLoaded": false, "BeLoadedTime": 0, - "MinContinuousCount": 1, - "MaxContinuousCount": 1, + "ContinuousCountRange": [ + 1 + ], "TriggerInterval": 0, "StartFiringSpeed": 180, "FinalFiringSpeed": 180, "FiringSpeedAddSpeed": 0, "FiringSpeedBackSpeed": 0, - "MinFireBulletCount": 1, - "MaxFireBulletCount": 1, + "FireBulletCountRange": [ + 1 + ], "DelayedTime": 0, "StartScatteringRange": 0, "FinalScatteringRange": 0, "ScatteringRangeAddValue": 0, "ScatteringRangeBackSpeed": 0, "ScatteringRangeBackDelayTime": 0, - "MinBacklash": -8, - "MaxBacklash": -8, + "BacklashRange": [ + -8 + ], "BacklashRegressionSpeed": 24, "UpliftAngle": -95, "DefaultAngle": 0, "UpliftAngleRestore": 1, "BulletId": "bullet0001", - "BulletMaxHarm": 25, - "BulletMinHarm": 25, - "BulletMinDeviationAngle": 0, - "BulletMaxDeviationAngle": 0, - "BulletMaxSpeed": 350, - "BulletMinSpeed": 350, - "BulletMinDistance": 35, - "BulletMaxDistance": 35, + "BulletHarmRange": [ + 25 + ], + "BulletDeviationAngleRange": [ + 0 + ], + "BulletSpeedRange": [ + 350 + ], + "BulletDistanceRange": [ + 35 + ], "ShellId": "", "ThrowShellDelayTime": 0, "ThrowCollisionSize": { "X": 20, "Y": 15 }, + "CanMeleeAttack": true, + "MeleeAttackHarmRange": [ + 5, + 8 + ], "__ShootSound": "", "__BeginReloadSound": "", "BeginReloadSoundDelayTime": 0, @@ -524,42 +628,54 @@ "ManualBeLoaded": false, "AutoManualBeLoaded": false, "BeLoadedTime": 0, - "MinContinuousCount": 1, - "MaxContinuousCount": 1, + "ContinuousCountRange": [ + 1 + ], "TriggerInterval": 3, "StartFiringSpeed": 180, "FinalFiringSpeed": 180, "FiringSpeedAddSpeed": 0, "FiringSpeedBackSpeed": 0, - "MinFireBulletCount": 1, - "MaxFireBulletCount": 1, + "FireBulletCountRange": [ + 1 + ], "DelayedTime": 0, "StartScatteringRange": 0, "FinalScatteringRange": 0, "ScatteringRangeAddValue": 0, "ScatteringRangeBackSpeed": 0, "ScatteringRangeBackDelayTime": 0, - "MinBacklash": -8, - "MaxBacklash": -8, + "BacklashRange": [ + -8 + ], "BacklashRegressionSpeed": 24, "UpliftAngle": -95, "DefaultAngle": 0, "UpliftAngleRestore": 1, "BulletId": "bullet0001", - "BulletMaxHarm": 25, - "BulletMinHarm": 25, - "BulletMinDeviationAngle": 0, - "BulletMaxDeviationAngle": 0, - "BulletMaxSpeed": 350, - "BulletMinSpeed": 350, - "BulletMinDistance": 35, - "BulletMaxDistance": 35, + "BulletHarmRange": [ + 25 + ], + "BulletDeviationAngleRange": [ + 0 + ], + "BulletSpeedRange": [ + 350 + ], + "BulletDistanceRange": [ + 35 + ], "ShellId": "", "ThrowShellDelayTime": 0, "ThrowCollisionSize": { "X": 20, "Y": 15 }, + "CanMeleeAttack": true, + "MeleeAttackHarmRange": [ + 5, + 8 + ], "__ShootSound": "", "__BeginReloadSound": "", "BeginReloadSoundDelayTime": 0, @@ -596,42 +712,57 @@ "ManualBeLoaded": true, "AutoManualBeLoaded": false, "BeLoadedTime": 0.9, - "MinContinuousCount": 1, - "MaxContinuousCount": 1, + "ContinuousCountRange": [ + 1 + ], "TriggerInterval": 0, "StartFiringSpeed": 150, "FinalFiringSpeed": 150, "FiringSpeedAddSpeed": 0, "FiringSpeedBackSpeed": 0, - "MinFireBulletCount": 1, - "MaxFireBulletCount": 1, + "FireBulletCountRange": [ + 1 + ], "DelayedTime": 0, "StartScatteringRange": 3, "FinalScatteringRange": 60, "ScatteringRangeAddValue": 40, "ScatteringRangeBackSpeed": 40, "ScatteringRangeBackDelayTime": 0.8, - "MinBacklash": 5, - "MaxBacklash": 7, + "BacklashRange": [ + 5, + 7 + ], "BacklashRegressionSpeed": 20, "UpliftAngle": 15, "DefaultAngle": 0, "UpliftAngleRestore": 1, "BulletId": "bullet0001", - "BulletMaxHarm": 30, - "BulletMinHarm": 30, - "BulletMinDeviationAngle": 0, - "BulletMaxDeviationAngle": 0, - "BulletMaxSpeed": 600, - "BulletMinSpeed": 620, - "BulletMinDistance": 700, - "BulletMaxDistance": 900, + "BulletHarmRange": [ + 30 + ], + "BulletDeviationAngleRange": [ + 0 + ], + "BulletSpeedRange": [ + 600, + 620 + ], + "BulletDistanceRange": [ + 700, + 900 + ], "ShellId": "shell0003", "ThrowShellDelayTime": 0.2, "ThrowCollisionSize": { "X": 20, "Y": 15 }, + "CanMeleeAttack": true, + "MeleeAttackHarmRange": [ + 5, + 8 + ], "__ShootSound": "shooting0008", "__BeginReloadSound": "reloadBegin0009", "BeginReloadSoundDelayTime": 0, @@ -668,42 +799,57 @@ "ManualBeLoaded": true, "AutoManualBeLoaded": false, "BeLoadedTime": 0.9, - "MinContinuousCount": 1, - "MaxContinuousCount": 1, + "ContinuousCountRange": [ + 1 + ], "TriggerInterval": 5, "StartFiringSpeed": 150, "FinalFiringSpeed": 150, "FiringSpeedAddSpeed": 0, "FiringSpeedBackSpeed": 0, - "MinFireBulletCount": 1, - "MaxFireBulletCount": 1, + "FireBulletCountRange": [ + 1 + ], "DelayedTime": 0, "StartScatteringRange": 3, "FinalScatteringRange": 60, "ScatteringRangeAddValue": 40, "ScatteringRangeBackSpeed": 40, "ScatteringRangeBackDelayTime": 0.8, - "MinBacklash": 5, - "MaxBacklash": 7, + "BacklashRange": [ + 5, + 7 + ], "BacklashRegressionSpeed": 20, "UpliftAngle": 15, "DefaultAngle": 0, "UpliftAngleRestore": 1, "BulletId": "bullet0001", - "BulletMaxHarm": 30, - "BulletMinHarm": 30, - "BulletMinDeviationAngle": 0, - "BulletMaxDeviationAngle": 0, - "BulletMaxSpeed": 600, - "BulletMinSpeed": 620, - "BulletMinDistance": 700, - "BulletMaxDistance": 900, + "BulletHarmRange": [ + 30 + ], + "BulletDeviationAngleRange": [ + 0 + ], + "BulletSpeedRange": [ + 600, + 620 + ], + "BulletDistanceRange": [ + 700, + 900 + ], "ShellId": "shell0003", "ThrowShellDelayTime": 0.2, "ThrowCollisionSize": { "X": 20, "Y": 15 }, + "CanMeleeAttack": true, + "MeleeAttackHarmRange": [ + 5, + 8 + ], "__ShootSound": "shooting0008", "__BeginReloadSound": "reloadBegin0009", "BeginReloadSoundDelayTime": 0, @@ -740,42 +886,57 @@ "ManualBeLoaded": false, "AutoManualBeLoaded": false, "BeLoadedTime": 0, - "MinContinuousCount": 1, - "MaxContinuousCount": 1, + "ContinuousCountRange": [ + 1 + ], "TriggerInterval": 0, "StartFiringSpeed": 700, "FinalFiringSpeed": 700, "FiringSpeedAddSpeed": 0, "FiringSpeedBackSpeed": 0, - "MinFireBulletCount": 1, - "MaxFireBulletCount": 1, + "FireBulletCountRange": [ + 1 + ], "DelayedTime": 0, "StartScatteringRange": 3, "FinalScatteringRange": 30, "ScatteringRangeAddValue": 2, "ScatteringRangeBackSpeed": 40, "ScatteringRangeBackDelayTime": 0.3, - "MinBacklash": 1, - "MaxBacklash": 2, + "BacklashRange": [ + 1, + 2 + ], "BacklashRegressionSpeed": 35, "UpliftAngle": 5, "DefaultAngle": 0, "UpliftAngleRestore": 1, "BulletId": "bullet0002", - "BulletMaxHarm": 3, - "BulletMinHarm": 3, - "BulletMinDeviationAngle": 0, - "BulletMaxDeviationAngle": 0, - "BulletMaxSpeed": 320, - "BulletMinSpeed": 340, - "BulletMinDistance": 300, - "BulletMaxDistance": 400, + "BulletHarmRange": [ + 3 + ], + "BulletDeviationAngleRange": [ + 0 + ], + "BulletSpeedRange": [ + 320, + 340 + ], + "BulletDistanceRange": [ + 300, + 400 + ], "ShellId": "shell0001", "ThrowShellDelayTime": 0, "ThrowCollisionSize": { "X": 20, "Y": 15 }, + "CanMeleeAttack": true, + "MeleeAttackHarmRange": [ + 5, + 8 + ], "__ShootSound": "shooting0002", "__BeginReloadSound": "reloadBegin0005", "BeginReloadSoundDelayTime": 0.2, @@ -812,42 +973,57 @@ "ManualBeLoaded": false, "AutoManualBeLoaded": false, "BeLoadedTime": 0, - "MinContinuousCount": 5, - "MaxContinuousCount": 5, + "ContinuousCountRange": [ + 5 + ], "TriggerInterval": 3.5, "StartFiringSpeed": 700, "FinalFiringSpeed": 700, "FiringSpeedAddSpeed": 0, "FiringSpeedBackSpeed": 0, - "MinFireBulletCount": 1, - "MaxFireBulletCount": 1, + "FireBulletCountRange": [ + 1 + ], "DelayedTime": 0, "StartScatteringRange": 3, "FinalScatteringRange": 30, "ScatteringRangeAddValue": 2, "ScatteringRangeBackSpeed": 30, "ScatteringRangeBackDelayTime": 0.3, - "MinBacklash": 1, - "MaxBacklash": 2, + "BacklashRange": [ + 1, + 2 + ], "BacklashRegressionSpeed": 35, "UpliftAngle": 5, "DefaultAngle": 0, "UpliftAngleRestore": 1, "BulletId": "bullet0002", - "BulletMaxHarm": 3, - "BulletMinHarm": 3, - "BulletMinDeviationAngle": 0, - "BulletMaxDeviationAngle": 0, - "BulletMaxSpeed": 320, - "BulletMinSpeed": 340, - "BulletMinDistance": 300, - "BulletMaxDistance": 400, + "BulletHarmRange": [ + 3 + ], + "BulletDeviationAngleRange": [ + 0 + ], + "BulletSpeedRange": [ + 320, + 340 + ], + "BulletDistanceRange": [ + 300, + 400 + ], "ShellId": "shell0001", "ThrowShellDelayTime": 0, "ThrowCollisionSize": { "X": 20, "Y": 15 }, + "CanMeleeAttack": true, + "MeleeAttackHarmRange": [ + 5, + 8 + ], "__ShootSound": "shooting0002", "__BeginReloadSound": "reloadBegin0005", "BeginReloadSoundDelayTime": 0.2, @@ -884,42 +1060,57 @@ "ManualBeLoaded": false, "AutoManualBeLoaded": false, "BeLoadedTime": 0, - "MinContinuousCount": 1, - "MaxContinuousCount": 1, + "ContinuousCountRange": [ + 1 + ], "TriggerInterval": 0, "StartFiringSpeed": 700, "FinalFiringSpeed": 700, "FiringSpeedAddSpeed": 0, "FiringSpeedBackSpeed": 0, - "MinFireBulletCount": 1, - "MaxFireBulletCount": 1, + "FireBulletCountRange": [ + 1 + ], "DelayedTime": 0, "StartScatteringRange": 6, "FinalScatteringRange": 60, "ScatteringRangeAddValue": 3, "ScatteringRangeBackSpeed": 50, "ScatteringRangeBackDelayTime": 0.3, - "MinBacklash": 1, - "MaxBacklash": 2, + "BacklashRange": [ + 1, + 2 + ], "BacklashRegressionSpeed": 35, "UpliftAngle": 5, "DefaultAngle": 0, "UpliftAngleRestore": 1, "BulletId": "bullet0003", - "BulletMaxHarm": 3, - "BulletMinHarm": 3, - "BulletMinDeviationAngle": 0, - "BulletMaxDeviationAngle": 0, - "BulletMaxSpeed": 300, - "BulletMinSpeed": 330, - "BulletMinDistance": 270, - "BulletMaxDistance": 360, + "BulletHarmRange": [ + 3 + ], + "BulletDeviationAngleRange": [ + 0 + ], + "BulletSpeedRange": [ + 300, + 330 + ], + "BulletDistanceRange": [ + 270, + 360 + ], "ShellId": "shell0001", "ThrowShellDelayTime": 0, "ThrowCollisionSize": { "X": 20, "Y": 15 }, + "CanMeleeAttack": true, + "MeleeAttackHarmRange": [ + 5, + 8 + ], "__ShootSound": "shooting0007", "__BeginReloadSound": "reloadBegin0006", "BeginReloadSoundDelayTime": 0.2, @@ -956,42 +1147,57 @@ "ManualBeLoaded": false, "AutoManualBeLoaded": false, "BeLoadedTime": 0, - "MinContinuousCount": 10, - "MaxContinuousCount": 10, + "ContinuousCountRange": [ + 10 + ], "TriggerInterval": 5, "StartFiringSpeed": 200, "FinalFiringSpeed": 200, "FiringSpeedAddSpeed": 0, "FiringSpeedBackSpeed": 0, - "MinFireBulletCount": 1, - "MaxFireBulletCount": 1, + "FireBulletCountRange": [ + 1 + ], "DelayedTime": 0, "StartScatteringRange": 10, "FinalScatteringRange": 30, "ScatteringRangeAddValue": 3, "ScatteringRangeBackSpeed": 50, "ScatteringRangeBackDelayTime": 0.3, - "MinBacklash": 1, - "MaxBacklash": 2, + "BacklashRange": [ + 1, + 2 + ], "BacklashRegressionSpeed": 35, "UpliftAngle": 5, "DefaultAngle": 0, "UpliftAngleRestore": 1, "BulletId": "bullet0003", - "BulletMaxHarm": 3, - "BulletMinHarm": 3, - "BulletMinDeviationAngle": 0, - "BulletMaxDeviationAngle": 0, - "BulletMaxSpeed": 300, - "BulletMinSpeed": 330, - "BulletMinDistance": 270, - "BulletMaxDistance": 360, + "BulletHarmRange": [ + 3 + ], + "BulletDeviationAngleRange": [ + 0 + ], + "BulletSpeedRange": [ + 300, + 330 + ], + "BulletDistanceRange": [ + 270, + 360 + ], "ShellId": "shell0001", "ThrowShellDelayTime": 0, "ThrowCollisionSize": { "X": 20, "Y": 15 }, + "CanMeleeAttack": true, + "MeleeAttackHarmRange": [ + 5, + 8 + ], "__ShootSound": "shooting0007", "__BeginReloadSound": "reloadBegin0006", "BeginReloadSoundDelayTime": 0.2, diff --git a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/inlet/Start1/Preinstall.json b/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/inlet/Start1/Preinstall.json index 131108d..1c55d41 100644 --- a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/inlet/Start1/Preinstall.json +++ b/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/inlet/Start1/Preinstall.json @@ -1 +1 @@ -[{"Name":"test1","Weight":100,"Remark":"","WaveList":[[{"Position":{"X":19,"Y":2},"Size":{"X":0,"Y":0},"SpecialMarkType":1,"DelayTime":0,"MarkList":[]},{"Position":{"X":10,"Y":22},"Size":{"X":0,"Y":0},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"weapon0001","Weight":100,"Attr":{"CurrAmmon":"30","ResidueAmmo":"210"},"Altitude":8,"VerticalSpeed":0}]}],[{"Position":{"X":11,"Y":38},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"prop0003","Weight":100,"Attr":null,"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":-15,"Y":31},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0.5,"MarkList":[{"Id":"prop5000","Weight":100,"Attr":null,"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":36,"Y":36},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":1,"MarkList":[{"Id":"prop5001","Weight":100,"Attr":null,"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":35,"Y":2},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":1.5,"MarkList":[{"Id":"prop0002","Weight":100,"Attr":null,"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":-12,"Y":3},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":2,"MarkList":[{"Id":"weapon0001","Weight":100,"Attr":{"CurrAmmon":"30","ResidueAmmo":"210"},"Altitude":8,"VerticalSpeed":0}]}]]}] \ No newline at end of file +[{"Name":"test1","Weight":100,"Remark":"","WaveList":[[{"Position":{"X":19,"Y":2},"Size":{"X":0,"Y":0},"SpecialMarkType":1,"DelayTime":0,"MarkList":[]},{"Position":{"X":10,"Y":22},"Size":{"X":0,"Y":0},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"weapon0001","Weight":100,"Attr":{"CurrAmmon":"30","ResidueAmmo":"210"},"Altitude":8,"VerticalSpeed":0}]}],[{"Position":{"X":11,"Y":38},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"prop0003","Weight":100,"Attr":null,"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":-15,"Y":31},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0.5,"MarkList":[{"Id":"prop5000","Weight":100,"Attr":null,"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":36,"Y":36},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":1,"MarkList":[{"Id":"prop5001","Weight":100,"Attr":null,"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":35,"Y":2},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":1.5,"MarkList":[{"Id":"prop0002","Weight":100,"Attr":null,"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":-12,"Y":3},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":2,"MarkList":[{"Id":"weapon0001","Weight":100,"Attr":{"CurrAmmon":"30","ResidueAmmo":"210"},"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":-36,"Y":-18},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"prop5000","Weight":100,"Attr":null,"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":56,"Y":-24},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"prop5001","Weight":100,"Attr":null,"Altitude":8,"VerticalSpeed":0}]}]]}] \ No newline at end of file diff --git a/DungeonShooting_Godot/resource/sprite/effects/Collision.png b/DungeonShooting_Godot/resource/sprite/effects/Collision.png deleted file mode 100644 index f15c822..0000000 --- a/DungeonShooting_Godot/resource/sprite/effects/Collision.png +++ /dev/null Binary files differ diff --git a/DungeonShooting_Godot/resource/sprite/effects/Collision.png.import b/DungeonShooting_Godot/resource/sprite/effects/Collision.png.import deleted file mode 100644 index a7cddfb..0000000 --- a/DungeonShooting_Godot/resource/sprite/effects/Collision.png.import +++ /dev/null @@ -1,34 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://dwa4chrugc6b1" -path="res://.godot/imported/Collision.png-c44899b0822a30bd5fe788c9b566e1c7.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://resource/sprite/effects/Collision.png" -dest_files=["res://.godot/imported/Collision.png-c44899b0822a30bd5fe788c9b566e1c7.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/effects/Effect1.png b/DungeonShooting_Godot/resource/sprite/effects/Effect1.png deleted file mode 100644 index 51ef9a9..0000000 --- a/DungeonShooting_Godot/resource/sprite/effects/Effect1.png +++ /dev/null Binary files differ diff --git a/DungeonShooting_Godot/resource/sprite/effects/Effect1.png.import b/DungeonShooting_Godot/resource/sprite/effects/Effect1.png.import deleted file mode 100644 index 73c78cc..0000000 --- a/DungeonShooting_Godot/resource/sprite/effects/Effect1.png.import +++ /dev/null @@ -1,34 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://csud4e6kc3iku" -path="res://.godot/imported/Effect1.png-851e49cafde0258e42b0cba6b7034139.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://resource/sprite/effects/Effect1.png" -dest_files=["res://.godot/imported/Effect1.png-851e49cafde0258e42b0cba6b7034139.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/effects/KnifeHit1.png b/DungeonShooting_Godot/resource/sprite/effects/KnifeHit1.png deleted file mode 100644 index 83465d0..0000000 --- a/DungeonShooting_Godot/resource/sprite/effects/KnifeHit1.png +++ /dev/null Binary files differ diff --git a/DungeonShooting_Godot/resource/sprite/effects/KnifeHit1.png.import b/DungeonShooting_Godot/resource/sprite/effects/KnifeHit1.png.import deleted file mode 100644 index 1e10427..0000000 --- a/DungeonShooting_Godot/resource/sprite/effects/KnifeHit1.png.import +++ /dev/null @@ -1,34 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://dx07ta0asnmuw" -path="res://.godot/imported/KnifeHit1.png-6ddd3aef14cf0bb7d2f668cd41ac74d0.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://resource/sprite/effects/KnifeHit1.png" -dest_files=["res://.godot/imported/KnifeHit1.png-6ddd3aef14cf0bb7d2f668cd41ac74d0.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/effects/ShotFire.png b/DungeonShooting_Godot/resource/sprite/effects/ShotFire.png deleted file mode 100644 index 5c6d63a..0000000 --- a/DungeonShooting_Godot/resource/sprite/effects/ShotFire.png +++ /dev/null Binary files differ diff --git a/DungeonShooting_Godot/resource/sprite/effects/ShotFire.png.import b/DungeonShooting_Godot/resource/sprite/effects/ShotFire.png.import deleted file mode 100644 index 6eda108..0000000 --- a/DungeonShooting_Godot/resource/sprite/effects/ShotFire.png.import +++ /dev/null @@ -1,34 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://b0jsyrbk4bydt" -path="res://.godot/imported/ShotFire.png-19fbeb61d685dfc2c763d73aa70d548b.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://resource/sprite/effects/ShotFire.png" -dest_files=["res://.godot/imported/ShotFire.png-19fbeb61d685dfc2c763d73aa70d548b.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/effects/Smoke.png b/DungeonShooting_Godot/resource/sprite/effects/Smoke.png deleted file mode 100644 index f358c57..0000000 --- a/DungeonShooting_Godot/resource/sprite/effects/Smoke.png +++ /dev/null Binary files differ diff --git a/DungeonShooting_Godot/resource/sprite/effects/Smoke.png.import b/DungeonShooting_Godot/resource/sprite/effects/Smoke.png.import deleted file mode 100644 index 11eadf7..0000000 --- a/DungeonShooting_Godot/resource/sprite/effects/Smoke.png.import +++ /dev/null @@ -1,34 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://h7hkgbwj1li" -path="res://.godot/imported/Smoke.png-6cf8f8f0055f43a859d02942814cba94.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://resource/sprite/effects/Smoke.png" -dest_files=["res://.godot/imported/Smoke.png-6cf8f8f0055f43a859d02942814cba94.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/effects/common/Effect1.png b/DungeonShooting_Godot/resource/sprite/effects/common/Effect1.png new file mode 100644 index 0000000..51ef9a9 --- /dev/null +++ b/DungeonShooting_Godot/resource/sprite/effects/common/Effect1.png Binary files differ diff --git a/DungeonShooting_Godot/resource/sprite/effects/common/Effect1.png.import b/DungeonShooting_Godot/resource/sprite/effects/common/Effect1.png.import new file mode 100644 index 0000000..ded10aa --- /dev/null +++ b/DungeonShooting_Godot/resource/sprite/effects/common/Effect1.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://csud4e6kc3iku" +path="res://.godot/imported/Effect1.png-b381c54ce9f36be8da8d9d5787e0d539.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://resource/sprite/effects/common/Effect1.png" +dest_files=["res://.godot/imported/Effect1.png-b381c54ce9f36be8da8d9d5787e0d539.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/effects/common/Smoke.png b/DungeonShooting_Godot/resource/sprite/effects/common/Smoke.png new file mode 100644 index 0000000..f358c57 --- /dev/null +++ b/DungeonShooting_Godot/resource/sprite/effects/common/Smoke.png Binary files differ diff --git a/DungeonShooting_Godot/resource/sprite/effects/common/Smoke.png.import b/DungeonShooting_Godot/resource/sprite/effects/common/Smoke.png.import new file mode 100644 index 0000000..d7f7f6e --- /dev/null +++ b/DungeonShooting_Godot/resource/sprite/effects/common/Smoke.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://h7hkgbwj1li" +path="res://.godot/imported/Smoke.png-c890fc56df0c1a3ef083465f2627ab8b.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://resource/sprite/effects/common/Smoke.png" +dest_files=["res://.godot/imported/Smoke.png-c890fc56df0c1a3ef083465f2627ab8b.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/effects/weapon/Collision1.png b/DungeonShooting_Godot/resource/sprite/effects/weapon/Collision1.png new file mode 100644 index 0000000..f15c822 --- /dev/null +++ b/DungeonShooting_Godot/resource/sprite/effects/weapon/Collision1.png Binary files differ diff --git a/DungeonShooting_Godot/resource/sprite/effects/weapon/Collision1.png.import b/DungeonShooting_Godot/resource/sprite/effects/weapon/Collision1.png.import new file mode 100644 index 0000000..1737a56 --- /dev/null +++ b/DungeonShooting_Godot/resource/sprite/effects/weapon/Collision1.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dwa4chrugc6b1" +path="res://.godot/imported/Collision1.png-21b57f1716aaa61033dc15fa90c3af13.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://resource/sprite/effects/weapon/Collision1.png" +dest_files=["res://.godot/imported/Collision1.png-21b57f1716aaa61033dc15fa90c3af13.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/effects/weapon/KnifeHit1.png b/DungeonShooting_Godot/resource/sprite/effects/weapon/KnifeHit1.png new file mode 100644 index 0000000..83465d0 --- /dev/null +++ b/DungeonShooting_Godot/resource/sprite/effects/weapon/KnifeHit1.png Binary files differ diff --git a/DungeonShooting_Godot/resource/sprite/effects/weapon/KnifeHit1.png.import b/DungeonShooting_Godot/resource/sprite/effects/weapon/KnifeHit1.png.import new file mode 100644 index 0000000..890932d --- /dev/null +++ b/DungeonShooting_Godot/resource/sprite/effects/weapon/KnifeHit1.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dx07ta0asnmuw" +path="res://.godot/imported/KnifeHit1.png-2f433b2240ee3b74ce7f49e4905f3ded.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://resource/sprite/effects/weapon/KnifeHit1.png" +dest_files=["res://.godot/imported/KnifeHit1.png-2f433b2240ee3b74ce7f49e4905f3ded.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/effects/weapon/MeleeAttack1.png b/DungeonShooting_Godot/resource/sprite/effects/weapon/MeleeAttack1.png new file mode 100644 index 0000000..c22890a --- /dev/null +++ b/DungeonShooting_Godot/resource/sprite/effects/weapon/MeleeAttack1.png Binary files differ diff --git a/DungeonShooting_Godot/resource/sprite/effects/weapon/MeleeAttack1.png.import b/DungeonShooting_Godot/resource/sprite/effects/weapon/MeleeAttack1.png.import new file mode 100644 index 0000000..1faa5b9 --- /dev/null +++ b/DungeonShooting_Godot/resource/sprite/effects/weapon/MeleeAttack1.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://7jhe2mmctmr1" +path="res://.godot/imported/MeleeAttack1.png-fcea1547355ce99fe204cf5180b8c02d.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://resource/sprite/effects/weapon/MeleeAttack1.png" +dest_files=["res://.godot/imported/MeleeAttack1.png-fcea1547355ce99fe204cf5180b8c02d.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/effects/weapon/ShotFire.png b/DungeonShooting_Godot/resource/sprite/effects/weapon/ShotFire.png new file mode 100644 index 0000000..5c6d63a --- /dev/null +++ b/DungeonShooting_Godot/resource/sprite/effects/weapon/ShotFire.png Binary files differ diff --git a/DungeonShooting_Godot/resource/sprite/effects/weapon/ShotFire.png.import b/DungeonShooting_Godot/resource/sprite/effects/weapon/ShotFire.png.import new file mode 100644 index 0000000..66623d6 --- /dev/null +++ b/DungeonShooting_Godot/resource/sprite/effects/weapon/ShotFire.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://b0jsyrbk4bydt" +path="res://.godot/imported/ShotFire.png-c837a3bb80e273a615c459f36fadc870.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://resource/sprite/effects/weapon/ShotFire.png" +dest_files=["res://.godot/imported/ShotFire.png-c837a3bb80e273a615c459f36fadc870.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/effect/KnifeHit1.tres b/DungeonShooting_Godot/resource/spriteFrames/effect/KnifeHit1.tres index a491979..e519ec9 100644 --- a/DungeonShooting_Godot/resource/spriteFrames/effect/KnifeHit1.tres +++ b/DungeonShooting_Godot/resource/spriteFrames/effect/KnifeHit1.tres @@ -1,6 +1,6 @@ [gd_resource type="SpriteFrames" load_steps=8 format=3 uid="uid://dj8o7ws03bik4"] -[ext_resource type="Texture2D" uid="uid://dx07ta0asnmuw" path="res://resource/sprite/effects/KnifeHit1.png" id="1_0yl3h"] +[ext_resource type="Texture2D" uid="uid://dx07ta0asnmuw" path="res://resource/sprite/effects/weapon/KnifeHit1.png" id="1_0yl3h"] [sub_resource type="AtlasTexture" id="1"] atlas = ExtResource("1_0yl3h") diff --git a/DungeonShooting_Godot/resource/spriteFrames/role/Role0001.tres b/DungeonShooting_Godot/resource/spriteFrames/role/Role0001.tres index e262de5..8205354 100644 --- a/DungeonShooting_Godot/resource/spriteFrames/role/Role0001.tres +++ b/DungeonShooting_Godot/resource/spriteFrames/role/Role0001.tres @@ -1,4 +1,4 @@ -[gd_resource type="SpriteFrames" load_steps=15 format=3 uid="uid://n11thtali6es"] +[gd_resource type="SpriteFrames" load_steps=21 format=3 uid="uid://n11thtali6es"] [ext_resource type="Texture2D" uid="uid://ekas4lqprrml" path="res://resource/sprite/role/role0001/idle/Sprite-0002.png" id="1_le6bk"] [ext_resource type="Texture2D" uid="uid://b81k08ofpf2oo" path="res://resource/sprite/role/role0001/idle/Sprite-0003.png" id="2_whsc2"] @@ -14,6 +14,12 @@ [ext_resource type="Texture2D" uid="uid://d32g0f5vk68sj" path="res://resource/sprite/role/role0001/run/Sprite-0004.png" id="12_cbabh"] [ext_resource type="Texture2D" uid="uid://cw83liyy6gnln" path="res://resource/sprite/role/role0001/run/Sprite-0003.png" id="13_u0cmp"] [ext_resource type="Texture2D" uid="uid://b1gh481w2xvsl" path="res://resource/sprite/role/role0001/run/Sprite-0002.png" id="14_nlfq5"] +[ext_resource type="Texture2D" uid="uid://sknj4eflhbvc" path="res://resource/sprite/role/role0001/roll/Sprite-0004.png" id="17_xnddk"] +[ext_resource type="Texture2D" uid="uid://c8ijooj30lvpw" path="res://resource/sprite/role/role0001/roll/Sprite-0005.png" id="18_1doii"] +[ext_resource type="Texture2D" uid="uid://blqx76rvx6c34" path="res://resource/sprite/role/role0001/roll/Sprite-0006.png" id="19_ilt25"] +[ext_resource type="Texture2D" uid="uid://48qebkjqggub" path="res://resource/sprite/role/role0001/roll/Sprite-0007.png" id="20_tp03g"] +[ext_resource type="Texture2D" uid="uid://dvrxriqd6dk1d" path="res://resource/sprite/role/role0001/roll/Sprite-0008.png" id="21_oocqa"] +[ext_resource type="Texture2D" uid="uid://ceqi6d4vhbpt" path="res://resource/sprite/role/role0001/roll/Sprite-0009.png" id="22_yc5ek"] [resource] animations = [{ @@ -53,9 +59,6 @@ }, { "frames": [{ "duration": 1.0, -"texture": ExtResource("8_scwvl") -}, { -"duration": 1.0, "texture": ExtResource("9_yjs5f") }, { "duration": 1.0, @@ -72,6 +75,9 @@ }, { "duration": 1.0, "texture": ExtResource("14_nlfq5") +}, { +"duration": 1.0, +"texture": ExtResource("8_scwvl") }], "loop": true, "name": &"reverseRun", @@ -79,6 +85,29 @@ }, { "frames": [{ "duration": 1.0, +"texture": ExtResource("17_xnddk") +}, { +"duration": 1.0, +"texture": ExtResource("18_1doii") +}, { +"duration": 1.0, +"texture": ExtResource("19_ilt25") +}, { +"duration": 1.0, +"texture": ExtResource("20_tp03g") +}, { +"duration": 1.0, +"texture": ExtResource("21_oocqa") +}, { +"duration": 1.0, +"texture": ExtResource("22_yc5ek") +}], +"loop": false, +"name": &"roll", +"speed": 15.0 +}, { +"frames": [{ +"duration": 1.0, "texture": ExtResource("14_nlfq5") }, { "duration": 1.0, diff --git a/DungeonShooting_Godot/resource/spriteFrames/role/Role1001.tres b/DungeonShooting_Godot/resource/spriteFrames/role/Role1001.tres index dd4a35a..600ba06 100644 --- a/DungeonShooting_Godot/resource/spriteFrames/role/Role1001.tres +++ b/DungeonShooting_Godot/resource/spriteFrames/role/Role1001.tres @@ -1,6 +1,6 @@ [gd_resource type="SpriteFrames" load_steps=15 format=3 uid="uid://cnctpyrn02rhd"] -[ext_resource type="Texture2D" path="res://resource/sprite/role/enemy0001/enemy0001.png" id="1_xi6qw"] +[ext_resource type="Texture2D" uid="uid://ddhkhfaos2w1g" path="res://resource/sprite/role/enemy0001/enemy0001.png" id="1_xi6qw"] [sub_resource type="AtlasTexture" id="AtlasTexture_jttte"] atlas = ExtResource("1_xi6qw") diff --git a/DungeonShooting_Godot/src/config/ExcelConfig_Weapon.cs b/DungeonShooting_Godot/src/config/ExcelConfig_Weapon.cs index 7c87cef..8f2f8ec 100644 --- a/DungeonShooting_Godot/src/config/ExcelConfig_Weapon.cs +++ b/DungeonShooting_Godot/src/config/ExcelConfig_Weapon.cs @@ -131,16 +131,11 @@ public float BeLoadedTime; /// - /// 连续发射最小次数, 仅当 'ContinuousShoot' 为 false 时生效 + /// 连续发射次数范围, 仅当 'ContinuousShoot' 为 false 时生效
+ /// 格式为[value]或者[min,max] ///
[JsonInclude] - public int MinContinuousCount; - - /// - /// 连续发射最大次数, 仅当 'ContinuousShoot' 为 false 时生效 - /// - [JsonInclude] - public int MaxContinuousCount; + public int[] ContinuousCountRange; /// /// 按下一次扳机后需要多长时间才能再次感应按下 @@ -173,16 +168,11 @@ public float FiringSpeedBackSpeed; /// - /// 单次开火发射子弹最小数量 + /// 单次开火发射子弹数量范围
+ /// 格式为[value]或者[min,max] ///
[JsonInclude] - public int MinFireBulletCount; - - /// - /// 单次开火发射子弹最大数量 - /// - [JsonInclude] - public int MaxFireBulletCount; + public int[] FireBulletCountRange; /// /// 从按下扳机到发射第一发子弹的延时时, 如果中途松开扳机, 那么延时时间会重新计算, 必须将 'LooseShoot' 设置为 false @@ -221,16 +211,11 @@ public float ScatteringRangeBackDelayTime; /// - /// 最小后坐力 (仅用于开火后武器身抖动) + /// 后坐力范围 (仅用于开火后武器身抖动)
+ /// 格式为[value]或者[min,max] ///
[JsonInclude] - public float MinBacklash; - - /// - /// 最大后坐力 (仅用于开火后武器身抖动) - /// - [JsonInclude] - public float MaxBacklash; + public float[] BacklashRange; /// /// 后坐力偏移回归回归速度 @@ -263,53 +248,33 @@ public string BulletId; /// - /// 子弹造成的最大伤害 + /// 子弹造成的伤害范围
+ /// 格式为[value]或者[min,max] ///
[JsonInclude] - public int BulletMaxHarm; + public int[] BulletHarmRange; /// - /// 子弹造成的最小伤害 + /// 子弹偏移角度范围
+ /// 用于设置子弹偏移朝向, 该属性和射半径效果类似, 但与其不同的是, 散射半径是用来控制枪口朝向的, 而该属性是控制子弹朝向的, 可用于制作霰弹枪子弹效果
+ /// 格式为[value]或者[min,max] ///
[JsonInclude] - public int BulletMinHarm; + public float[] BulletDeviationAngleRange; /// - /// 子弹最小偏移角度
- /// 用于设置子弹偏移朝向, 该属性和射半径效果类似, 但与其不同的是, 散射半径是用来控制枪口朝向的, 而该属性是控制子弹朝向的, 可用于制作霰弹枪子弹效果 + /// 子弹初速度范围
+ /// 格式为[value]或者[min,max] ///
[JsonInclude] - public float BulletMinDeviationAngle; + public float[] BulletSpeedRange; /// - /// 子弹最大偏移角度 + /// 子弹飞行距离范围
+ /// 格式为[value]或者[min,max] ///
[JsonInclude] - public float BulletMaxDeviationAngle; - - /// - /// 子弹最大初速度 - /// - [JsonInclude] - public float BulletMaxSpeed; - - /// - /// 子弹最小初速度 - /// - [JsonInclude] - public float BulletMinSpeed; - - /// - /// 子弹飞行最小距离 - /// - [JsonInclude] - public float BulletMinDistance; - - /// - /// 子弹飞行最大距离 - /// - [JsonInclude] - public float BulletMaxDistance; + public float[] BulletDistanceRange; /// /// 默认抛出的弹壳 @@ -331,6 +296,19 @@ public SerializeVector2 ThrowCollisionSize; /// + /// 是否可以触发近战攻击 + /// + [JsonInclude] + public bool CanMeleeAttack; + + /// + /// 近战攻击伤害范围
+ /// 格式为格式为[value]或者[min,max] + ///
+ [JsonInclude] + public int[] MeleeAttackHarmRange; + + /// /// 射击音效 /// public Sound ShootSound; @@ -439,39 +417,34 @@ inst.ManualBeLoaded = ManualBeLoaded; inst.AutoManualBeLoaded = AutoManualBeLoaded; inst.BeLoadedTime = BeLoadedTime; - inst.MinContinuousCount = MinContinuousCount; - inst.MaxContinuousCount = MaxContinuousCount; + inst.ContinuousCountRange = ContinuousCountRange; inst.TriggerInterval = TriggerInterval; inst.StartFiringSpeed = StartFiringSpeed; inst.FinalFiringSpeed = FinalFiringSpeed; inst.FiringSpeedAddSpeed = FiringSpeedAddSpeed; inst.FiringSpeedBackSpeed = FiringSpeedBackSpeed; - inst.MinFireBulletCount = MinFireBulletCount; - inst.MaxFireBulletCount = MaxFireBulletCount; + inst.FireBulletCountRange = FireBulletCountRange; inst.DelayedTime = DelayedTime; inst.StartScatteringRange = StartScatteringRange; inst.FinalScatteringRange = FinalScatteringRange; inst.ScatteringRangeAddValue = ScatteringRangeAddValue; inst.ScatteringRangeBackSpeed = ScatteringRangeBackSpeed; inst.ScatteringRangeBackDelayTime = ScatteringRangeBackDelayTime; - inst.MinBacklash = MinBacklash; - inst.MaxBacklash = MaxBacklash; + inst.BacklashRange = BacklashRange; inst.BacklashRegressionSpeed = BacklashRegressionSpeed; inst.UpliftAngle = UpliftAngle; inst.DefaultAngle = DefaultAngle; inst.UpliftAngleRestore = UpliftAngleRestore; inst.BulletId = BulletId; - inst.BulletMaxHarm = BulletMaxHarm; - inst.BulletMinHarm = BulletMinHarm; - inst.BulletMinDeviationAngle = BulletMinDeviationAngle; - inst.BulletMaxDeviationAngle = BulletMaxDeviationAngle; - inst.BulletMaxSpeed = BulletMaxSpeed; - inst.BulletMinSpeed = BulletMinSpeed; - inst.BulletMinDistance = BulletMinDistance; - inst.BulletMaxDistance = BulletMaxDistance; + inst.BulletHarmRange = BulletHarmRange; + inst.BulletDeviationAngleRange = BulletDeviationAngleRange; + inst.BulletSpeedRange = BulletSpeedRange; + inst.BulletDistanceRange = BulletDistanceRange; inst.ShellId = ShellId; inst.ThrowShellDelayTime = ThrowShellDelayTime; inst.ThrowCollisionSize = ThrowCollisionSize; + inst.CanMeleeAttack = CanMeleeAttack; + inst.MeleeAttackHarmRange = MeleeAttackHarmRange; inst.ShootSound = ShootSound; inst.BeginReloadSound = BeginReloadSound; inst.BeginReloadSoundDelayTime = BeginReloadSoundDelayTime; diff --git a/DungeonShooting_Godot/src/framework/activity/ActivityObject.cs b/DungeonShooting_Godot/src/framework/activity/ActivityObject.cs index d5c52fa..fd0bd6d 100644 --- a/DungeonShooting_Godot/src/framework/activity/ActivityObject.cs +++ b/DungeonShooting_Godot/src/framework/activity/ActivityObject.cs @@ -425,7 +425,7 @@ _prevAnimationFrame = frame; IsShowShadow = true; - CalcTransform(); + CalcShadowTransform(); ShadowSprite.Visible = true; } @@ -659,7 +659,7 @@ { //注意需要延时调用 CallDeferred(nameof(ShowShadowSprite)); - CalcTransform(); + CalcShadowTransform(); } } else @@ -1008,7 +1008,7 @@ _prevAnimationFrame = frame; //计算阴影 - CalcTransform(); + CalcShadowTransform(); } // Hit 动画 @@ -1136,7 +1136,7 @@ /// /// 重新计算物体阴影的位置和旋转信息, 无论是否显示阴影 /// - public void CalcTransform() + public void CalcShadowTransform() { //缩放 ShadowSprite.Scale = AnimatedSprite.Scale; diff --git a/DungeonShooting_Godot/src/framework/activity/ActivityObject_Init.cs b/DungeonShooting_Godot/src/framework/activity/ActivityObject_Init.cs index a94b145..8b3dd8a 100644 --- a/DungeonShooting_Godot/src/framework/activity/ActivityObject_Init.cs +++ b/DungeonShooting_Godot/src/framework/activity/ActivityObject_Init.cs @@ -188,8 +188,8 @@ _activityRegisterMap.Add("shell0001", new RegisterActivityData("res://prefab/shell/Shell0001.tscn", ExcelConfig.ActivityObject_Map["shell0001"])); _activityRegisterMap.Add("shell0002", new RegisterActivityData("res://prefab/shell/Shell0002.tscn", ExcelConfig.ActivityObject_Map["shell0002"])); _activityRegisterMap.Add("shell0003", new RegisterActivityData("res://prefab/shell/Shell0003.tscn", ExcelConfig.ActivityObject_Map["shell0003"])); - _activityRegisterMap.Add("effect0001", new RegisterActivityData("res://prefab/effect/activityObject/Effect0001.tscn", ExcelConfig.ActivityObject_Map["effect0001"])); - _activityRegisterMap.Add("prop0001", new RegisterActivityData("res://prefab/prop/buff/BuffProp0001.tscn", ExcelConfig.ActivityObject_Map["prop0001"])); + _activityRegisterMap.Add("effect0001", new RegisterActivityData("res://prefab/effect/enemy/Effect0001.tscn", ExcelConfig.ActivityObject_Map["effect0001"])); + _activityRegisterMap.Add("prop0001", new RegisterActivityData("res://prefab/effect/enemy/Effect0001.tscn", ExcelConfig.ActivityObject_Map["prop0001"])); _activityRegisterMap.Add("prop0002", new RegisterActivityData("res://prefab/prop/buff/BuffProp0002.tscn", ExcelConfig.ActivityObject_Map["prop0002"])); _activityRegisterMap.Add("prop0003", new RegisterActivityData("res://prefab/prop/buff/BuffProp0003.tscn", ExcelConfig.ActivityObject_Map["prop0003"])); _activityRegisterMap.Add("prop0004", new RegisterActivityData("res://prefab/prop/buff/BuffProp0004.tscn", ExcelConfig.ActivityObject_Map["prop0004"])); diff --git a/DungeonShooting_Godot/src/framework/activity/Component.cs b/DungeonShooting_Godot/src/framework/activity/Component.cs index f96b8dd..ec1897d 100644 --- a/DungeonShooting_Godot/src/framework/activity/Component.cs +++ b/DungeonShooting_Godot/src/framework/activity/Component.cs @@ -1,10 +1,11 @@ +using System.Collections; using Godot; /// /// 组件基类, 用于挂载到游戏物体上, 相比于原生 Node 更加轻量化, 实例化 Component 不会创建额外的 Node, 可以大量添加组件 /// -public abstract class Component : IProcess, IDestroy +public abstract class Component : IProcess, IDestroy, ICoroutine { /// /// 当前组件所挂载的游戏对象 @@ -212,4 +213,24 @@ ActivityInstance.RemoveComponent(this); OnDestroy(); } + + public long StartCoroutine(IEnumerator able) + { + return ActivityInstance.StartCoroutine(able); + } + + public void StopCoroutine(long coroutineId) + { + ActivityInstance.StopCoroutine(coroutineId); + } + + public bool IsCoroutineOver(long coroutineId) + { + return ActivityInstance.IsCoroutineOver(coroutineId); + } + + public void StopAllCoroutine() + { + ActivityInstance.StopAllCoroutine(); + } } \ No newline at end of file diff --git a/DungeonShooting_Godot/src/framework/common/SeedRandom.cs b/DungeonShooting_Godot/src/framework/common/SeedRandom.cs index 35da336..6fd42c4 100644 --- a/DungeonShooting_Godot/src/framework/common/SeedRandom.cs +++ b/DungeonShooting_Godot/src/framework/common/SeedRandom.cs @@ -78,6 +78,22 @@ } /// + /// 根据配置表中配置的范围数据, 随机返回范围内的一个值 + /// + public int RandomConfigRange(int[] range) + { + return RandomRangeInt(Utils.GetConfigRangeStart(range), Utils.GetConfigRangeEnd(range)); + } + + /// + /// 根据配置表中配置的范围数据, 随机返回范围内的一个值 + /// + public float RandomConfigRange(float[] range) + { + return RandomRangeFloat(Utils.GetConfigRangeStart(range), Utils.GetConfigRangeEnd(range)); + } + + /// /// 随机返回其中一个参数 /// public T RandomChoose(params T[] list) diff --git a/DungeonShooting_Godot/src/framework/common/Utils.cs b/DungeonShooting_Godot/src/framework/common/Utils.cs index ea77986..762dad8 100644 --- a/DungeonShooting_Godot/src/framework/common/Utils.cs +++ b/DungeonShooting_Godot/src/framework/common/Utils.cs @@ -1,5 +1,3 @@ -using System; -using System.Collections.Generic; using Godot; /// @@ -171,4 +169,46 @@ return pos.X >= rect2.Position.X && pos.X <= rect2.Position.X + rect2.Size.X && pos.Y >= rect2.Position.Y && pos.Y <= rect2.Position.Y + rect2.Size.Y; } + + /// + /// 返回区域起始值, 用于获取配置表范围配置数据 + /// + public static int GetConfigRangeStart(int[] range) + { + return range[0]; + } + + /// + /// 返回区域结束值, 用于获取配置表范围配置数据 + /// + public static int GetConfigRangeEnd(int[] range) + { + if (range.Length > 1) + { + return range[1]; + } + + return range[0]; + } + + /// + /// 返回区域起始值, 用于获取配置表范围配置数据 + /// + public static float GetConfigRangeStart(float[] range) + { + return range[0]; + } + + /// + /// 返回区域结束值, 用于获取配置表范围配置数据 + /// + public static float GetConfigRangeEnd(float[] range) + { + if (range.Length > 1) + { + return range[1]; + } + + return range[0]; + } } \ No newline at end of file diff --git a/DungeonShooting_Godot/src/framework/map/preinstall/RoomPreinstall.cs b/DungeonShooting_Godot/src/framework/map/preinstall/RoomPreinstall.cs index 9536b85..5aef09a 100644 --- a/DungeonShooting_Godot/src/framework/map/preinstall/RoomPreinstall.cs +++ b/DungeonShooting_Godot/src/framework/map/preinstall/RoomPreinstall.cs @@ -298,7 +298,7 @@ activityObject.StartCoroutine(OnActivityObjectBirth(activityObject)); activityObject.PutDown(GetDefaultLayer(activityMark)); - var effect1 = ResourceManager.LoadAndInstantiate(ResourcePath.prefab_effect_Effect1_tscn); + var effect1 = ResourceManager.LoadAndInstantiate(ResourcePath.prefab_effect_common_Effect1_tscn); effect1.Position = activityObject.Position + new Vector2(0, -activityMark.Altitude); effect1.AddToActivityRoot(RoomLayerEnum.YSortLayer); } diff --git a/DungeonShooting_Godot/src/game/activity/bullet/Bullet.cs b/DungeonShooting_Godot/src/game/activity/bullet/Bullet.cs index 350cc34..e3f87cd 100644 --- a/DungeonShooting_Godot/src/game/activity/bullet/Bullet.cs +++ b/DungeonShooting_Godot/src/game/activity/bullet/Bullet.cs @@ -100,7 +100,7 @@ if (lastSlideCollision != null) { //创建粒子特效 - var packedScene = ResourceManager.Load(ResourcePath.prefab_effect_BulletSmoke_tscn); + var packedScene = ResourceManager.Load(ResourcePath.prefab_effect_weapon_BulletSmoke_tscn); var smoke = packedScene.Instantiate(); smoke.GlobalPosition = lastSlideCollision.GetPosition(); smoke.GlobalRotation = lastSlideCollision.GetNormal().Angle(); @@ -113,7 +113,7 @@ CurrFlyDistance += FlySpeed * delta; if (CurrFlyDistance >= MaxDistance) { - var packedScene = ResourceManager.Load(ResourcePath.prefab_effect_BulletDisappear_tscn); + var packedScene = ResourceManager.Load(ResourcePath.prefab_effect_weapon_BulletDisappear_tscn); var node = packedScene.Instantiate(); node.GlobalPosition = GlobalPosition; node.AddToActivityRoot(RoomLayerEnum.YSortLayer); @@ -127,7 +127,7 @@ var role = other.AsActivityObject(); if (role != null) { - var packedScene = ResourceManager.Load(ResourcePath.prefab_effect_BulletDisappear_tscn); + var packedScene = ResourceManager.Load(ResourcePath.prefab_effect_weapon_BulletDisappear_tscn); var node = packedScene.Instantiate(); node.GlobalPosition = GlobalPosition; node.AddToActivityRoot(RoomLayerEnum.YSortLayer); @@ -138,7 +138,6 @@ { var d = damage; damage = Role.RoleState.CallCalcDamageEvent(damage); - GD.Print($"原伤害: {d}, 计算伤害: {damage}"); } role.CallDeferred(nameof(Role.Hurt), damage, Rotation); diff --git a/DungeonShooting_Godot/src/game/activity/prop/active/ActiveProp.cs b/DungeonShooting_Godot/src/game/activity/prop/active/ActiveProp.cs index ce037b4..ac660c5 100644 --- a/DungeonShooting_Godot/src/game/activity/prop/active/ActiveProp.cs +++ b/DungeonShooting_Godot/src/game/activity/prop/active/ActiveProp.cs @@ -33,7 +33,7 @@ private int _count = 1; /// - /// 道具最大可使用次数 + /// 道具最大叠加用次数 /// public int MaxCount { @@ -238,7 +238,10 @@ player.ThrowActiveProp(player.ActivePropsPack.ActiveIndex); } //替换手中的道具 - player.PickUpActiveProp(this); + if (player.PickUpActiveProp(this)) + { + Pickup(); + } } else { @@ -255,6 +258,7 @@ item.Count += Count; Count = 0; } + Destroy(); } } } @@ -292,7 +296,6 @@ public override void OnPickUpItem() { - Pickup(); } public override void OnRemoveItem() diff --git a/DungeonShooting_Godot/src/game/activity/role/Player.cs b/DungeonShooting_Godot/src/game/activity/role/Player.cs deleted file mode 100644 index a4f3640..0000000 --- a/DungeonShooting_Godot/src/game/activity/role/Player.cs +++ /dev/null @@ -1,287 +0,0 @@ -using Godot; - - -/// -/// 玩家角色基类, 所有角色都必须继承该类 -/// -[Tool] -public partial class Player : Role -{ - /// - /// 获取当前操作的角色 - /// - public static Player Current { get; private set; } - - /// - /// 设置当前操作的玩家对象 - /// - public static void SetCurrentPlayer(Player player) - { - Current = player; - //设置相机和鼠标跟随玩家 - GameCamera.Main.SetFollowTarget(player); - GameApplication.Instance.Cursor.SetMountRole(player); - } - - public override void OnInit() - { - base.OnInit(); - - AttackLayer = PhysicsLayer.Wall | PhysicsLayer.Prop | PhysicsLayer.Enemy; - Camp = CampEnum.Camp1; - - MaxHp = 6; - Hp = 6; - MaxShield = 0; - Shield = 0; - - // debug用 - // RoleState.Acceleration = 3000; - // RoleState.Friction = 3000; - // RoleState.MoveSpeed = 500; - // CollisionLayer = 0; - // CollisionMask = 0; - // GameCamera.Main.Zoom = new Vector2(0.2f, 0.2f); - // //GameCamera.Main.Zoom = new Vector2(0.5f, 0.5f); - } - - protected override void Process(float delta) - { - if (IsDie) - { - return; - } - base.Process(delta); - //脸的朝向 - if (LookTarget == null) - { - var gPos = GlobalPosition; - Vector2 mousePos = InputManager.CursorPosition; - if (mousePos.X > gPos.X && Face == FaceDirection.Left) - { - Face = FaceDirection.Right; - } - else if (mousePos.X < gPos.X && Face == FaceDirection.Right) - { - Face = FaceDirection.Left; - } - //枪口跟随鼠标 - MountPoint.SetLookAt(mousePos); - } - - if (InputManager.ExchangeWeapon) //切换武器 - { - ExchangeNextWeapon(); - } - else if (InputManager.ThrowWeapon) //扔掉武器 - { - ThrowWeapon(); - - // //测试用的, 所有敌人也扔掉武器 - // if (Affiliation != null) - // { - // var enemies = Affiliation.FindIncludeItems(o => - // { - // return o.CollisionWithMask(PhysicsLayer.Enemy); - // }); - // foreach (var activityObject in enemies) - // { - // if (activityObject is Enemy enemy) - // { - // enemy.ThrowWeapon(); - // } - // } - // } - } - else if (InputManager.Interactive) //互动物体 - { - TriggerInteractive(); - } - else if (InputManager.Reload) //换弹 - { - Reload(); - } - - if (InputManager.Fire) //开火 - { - Attack(); - // var weaponArray = AffiliationArea.FindEnterItems(o => o is Weapon); - // foreach (Weapon activityObject in weaponArray) - // { - // activityObject.Trigger(this); - // } - } - - if (InputManager.UseActiveProp) //使用道具 - { - UseActiveProp(); - } - else if (InputManager.RemoveProp) //扔掉道具 - { - ThrowActiveProp(); - } - - if (Input.IsKeyPressed(Key.P)) - { - //Hurt(1000, 0); - Hp = 0; - Hurt(1000, 0); - } - } - - protected override void PhysicsProcess(float delta) - { - if (IsDie) - { - return; - } - - base.PhysicsProcess(delta); - HandleMoveInput(delta); - //播放动画 - PlayAnim(); - } - - protected override void OnPickUpWeapon(Weapon weapon) - { - EventManager.EmitEvent(EventEnum.OnPlayerPickUpWeapon, weapon); - } - - protected override void OnThrowWeapon(Weapon weapon) - { - EventManager.EmitEvent(EventEnum.OnPlayerRemoveWeapon, weapon); - } - - protected override int OnHandlerHurt(int damage) - { - //修改受到的伤害, 每次只受到1点伤害 - return 1; - } - - protected override void OnHit(int damage, bool realHarm) - { - //进入无敌状态 - if (realHarm) //真实伤害 - { - PlayInvincibleFlashing(RoleState.WoundedInvincibleTime); - } - else //护盾抵消掉的 - { - PlayInvincibleFlashing(RoleState.ShieldInvincibleTime); - } - } - - protected override void OnChangeHp(int hp) - { - //GameApplication.Instance.Ui.SetHp(hp); - EventManager.EmitEvent(EventEnum.OnPlayerHpChange, hp); - } - - protected override void OnChangeMaxHp(int maxHp) - { - //GameApplication.Instance.Ui.SetMaxHp(maxHp); - EventManager.EmitEvent(EventEnum.OnPlayerMaxHpChange, maxHp); - } - - protected override void ChangeInteractiveItem(CheckInteractiveResult prev, CheckInteractiveResult result) - { - if (prev != null && prev.Target.ShowOutline) - { - prev.Target.OutlineColor = Colors.Black; - } - if (result != null && result.Target.ShowOutline) - { - result.Target.OutlineColor = Colors.White; - } - //派发互动对象改变事件 - EventManager.EmitEvent(EventEnum.OnPlayerChangeInteractiveItem, result); - } - - protected override void OnChangeShield(int shield) - { - //GameApplication.Instance.Ui.SetShield(shield); - EventManager.EmitEvent(EventEnum.OnPlayerShieldChange, shield); - } - - protected override void OnChangeMaxShield(int maxShield) - { - //GameApplication.Instance.Ui.SetMaxShield(maxShield); - EventManager.EmitEvent(EventEnum.OnPlayerMaxShieldChange, maxShield); - } - - protected override void OnDie() - { - GameCamera.Main.SetFollowTarget(null); - BasisVelocity = Vector2.Zero; - MoveController.ClearForce(); - UiManager.Open_Settlement(); - } - - protected override void OnPickUpActiveProp(ActiveProp activeProp) - { - EventManager.EmitEvent(EventEnum.OnPlayerPickUpProp, activeProp); - } - - protected override void OnRemoveActiveProp(ActiveProp activeProp) - { - EventManager.EmitEvent(EventEnum.OnPlayerRemoveProp, activeProp); - } - - protected override void OnPickUpBuffProp(BuffProp buffProp) - { - EventManager.EmitEvent(EventEnum.OnPlayerPickUpProp, buffProp); - } - - protected override void OnRemoveBuffProp(BuffProp buffProp) - { - EventManager.EmitEvent(EventEnum.OnPlayerRemoveProp, buffProp); - } - - //处理角色移动的输入 - private void HandleMoveInput(float delta) - { - //角色移动 - Vector2 dir = InputManager.MoveAxis; - // 移动. 如果移动的数值接近0(是用 摇杆可能出现 方向 可能会出现浮点),就friction的值 插值 到 0 - // 如果 有输入 就以当前速度,用acceleration 插值到 对应方向 * 最大速度 - if (Mathf.IsZeroApprox(dir.X)) - { - BasisVelocity = new Vector2(Mathf.MoveToward(BasisVelocity.X, 0, RoleState.Friction * delta), BasisVelocity.Y); - } - else - { - BasisVelocity = new Vector2(Mathf.MoveToward(BasisVelocity.X, dir.X * RoleState.MoveSpeed, RoleState.Acceleration * delta), - BasisVelocity.Y); - } - - if (Mathf.IsZeroApprox(dir.Y)) - { - BasisVelocity = new Vector2(BasisVelocity.X, Mathf.MoveToward(BasisVelocity.Y, 0, RoleState.Friction * delta)); - } - else - { - BasisVelocity = new Vector2(BasisVelocity.X, - Mathf.MoveToward(BasisVelocity.Y, dir.Y * RoleState.MoveSpeed, RoleState.Acceleration * delta)); - } - } - - // 播放动画 - private void PlayAnim() - { - if (BasisVelocity != Vector2.Zero) - { - if ((Face == FaceDirection.Right && BasisVelocity.X >= 0) || Face == FaceDirection.Left && BasisVelocity.X <= 0) //向前走 - { - AnimatedSprite.Play(AnimatorNames.Run); - } - else if ((Face == FaceDirection.Right && BasisVelocity.X < 0) || Face == FaceDirection.Left && BasisVelocity.X > 0) //向后走 - { - AnimatedSprite.Play(AnimatorNames.ReverseRun); - } - } - else - { - AnimatedSprite.Play(AnimatorNames.Idle); - } - } -} \ No newline at end of file diff --git a/DungeonShooting_Godot/src/game/activity/role/Role.cs b/DungeonShooting_Godot/src/game/activity/role/Role.cs index 1221d33..e66a0d7 100644 --- a/DungeonShooting_Godot/src/game/activity/role/Role.cs +++ b/DungeonShooting_Godot/src/game/activity/role/Role.cs @@ -27,6 +27,12 @@ /// [Export, ExportFillNode] public Area2D HurtArea { get; set; } + + /// + /// 伤害区域碰撞器 + /// + [Export, ExportFillNode] + public CollisionShape2D HurtCollision { get; set; } /// /// 所属阵营 @@ -71,6 +77,17 @@ public Area2D InteractiveArea { get; set; } /// + /// 互动区域碰撞器 + /// + [Export, ExportFillNode] + public CollisionShape2D InteractiveCollision { get; set; } + + /// + /// 武器挂载点是否始终指向目标 + /// + public bool MountLookTarget { get; set; } = true; + + /// /// 脸的朝向 /// public FaceDirection Face { get => _face; set => SetFace(value); } @@ -210,6 +227,18 @@ /// public ActivityObject InteractiveItem { get; private set; } + /// + /// 是否可以翻滚 + /// + public bool CanRoll => _rollCoolingTimer <= 0; + + /// + /// 是否处于近战攻击中 + /// + public bool IsMeleeAttack { get; private set; } + + //翻滚冷却计时器 + private float _rollCoolingTimer = 0; //初始缩放 private Vector2 _startScale; //所有角色碰撞的物体 @@ -225,6 +254,8 @@ private long _invincibleFlashingId = -1; //护盾恢复计时器 private float _shieldRecoveryTimer = 0; + //近战计时器 + private float _meleeAttackTimer = 0; /// /// 当血量改变时调用 @@ -371,6 +402,16 @@ protected override void Process(float delta) { + if (_rollCoolingTimer > 0) + { + _rollCoolingTimer -= delta; + } + + if (_meleeAttackTimer > 0) + { + _meleeAttackTimer -= delta; + } + //看向目标 if (LookTarget != null) { @@ -385,8 +426,12 @@ { Face = FaceDirection.Left; } - //枪口跟随目标 - MountPoint.SetLookAt(pos); + + if (MountLookTarget) + { + //枪口跟随目标 + MountPoint.SetLookAt(pos); + } } //检查可互动的物体 @@ -558,7 +603,6 @@ /// 使角色看向指定的坐标, /// 注意, 调用该函数会清空 LookTarget, 因为拥有 LookTarget 时也会每帧更新玩家视野位置 /// - /// public void LookTargetPosition(Vector2 pos) { LookTarget = null; @@ -572,8 +616,12 @@ { Face = FaceDirection.Left; } - //枪口跟随目标 - MountPoint.SetLookAt(pos); + + if (MountLookTarget) + { + //枪口跟随目标 + MountPoint.SetLookAt(pos); + } } /// @@ -842,13 +890,39 @@ /// public virtual void Attack() { - if (WeaponPack.ActiveItem != null) + if (!IsMeleeAttack && WeaponPack.ActiveItem != null) { WeaponPack.ActiveItem.Trigger(this); } } /// + /// 触发近战攻击 + /// + public virtual void MeleeAttack() + { + if (IsMeleeAttack || _meleeAttackTimer > 0) + { + return; + } + + if (WeaponPack.ActiveItem != null && WeaponPack.ActiveItem.Attribute.CanMeleeAttack) + { + IsMeleeAttack = true; + _meleeAttackTimer = RoleState.MeleeAttackTime; + MountLookTarget = false; + + WeaponPack.ActiveItem.TriggerMeleeAttack(this); + //播放近战动画 + PlayAnimation_MeleeAttack(() => + { + MountLookTarget = true; + IsMeleeAttack = false; + }); + } + } + + /// /// 触发使用道具 /// public virtual void UseActiveProp() @@ -1016,4 +1090,12 @@ ActivePropsPack.Destroy(); WeaponPack.Destroy(); } + + /// + /// 翻滚结束 + /// + public void OverRoll() + { + _rollCoolingTimer = RoleState.RollTime; + } } \ No newline at end of file diff --git a/DungeonShooting_Godot/src/game/activity/role/RoleState.cs b/DungeonShooting_Godot/src/game/activity/role/RoleState.cs index 0585f25..d195c75 100644 --- a/DungeonShooting_Godot/src/game/activity/role/RoleState.cs +++ b/DungeonShooting_Godot/src/game/activity/role/RoleState.cs @@ -17,14 +17,24 @@ public float Acceleration = 1500f; /// - /// 移动摩擦力 + /// 移动摩擦力, 仅用于人物基础移动 /// public float Friction = 900f; /// + /// 翻滚速度 + /// + public float RollSpeed = 180f; + + /// + /// 翻滚冷却时间 + /// + public float RollTime = 0.5f; + + /// /// 单格护盾恢复时间, 单位: 秒 /// - public float ShieldRecoveryTime = 8; + public float ShieldRecoveryTime = 18; /// /// 受伤后的无敌时间, 单位: 秒 @@ -34,7 +44,12 @@ /// /// 护盾被攻击后的无敌时间, 单位: 秒 /// - public float ShieldInvincibleTime = 0.5f; + public float ShieldInvincibleTime = 0.4f; + + /// + /// 近战攻击间隔时间 + /// + public float MeleeAttackTime = 0.5f; /// /// 攻击/发射后计算伤害 diff --git a/DungeonShooting_Godot/src/game/activity/role/Role_Animation.cs b/DungeonShooting_Godot/src/game/activity/role/Role_Animation.cs new file mode 100644 index 0000000..3a09f55 --- /dev/null +++ b/DungeonShooting_Godot/src/game/activity/role/Role_Animation.cs @@ -0,0 +1,65 @@ + +using System; +using Godot; +using Vector2 = Godot.Vector2; + +public partial class Role +{ + /// + /// 播放近战攻击动画 + /// + public virtual void PlayAnimation_MeleeAttack(Action finish) + { + var r = MountPoint.RotationDegrees; + //var gp = MountPoint.GlobalPosition; + var p1 = MountPoint.Position; + var p2 = p1 + new Vector2(6, 0).Rotated(Mathf.DegToRad(r - 60)); + var p3 = p1 + new Vector2(6, 0).Rotated(Mathf.DegToRad(r + 60)); + + var tween = CreateTween(); + tween.SetParallel(); + + tween.TweenProperty(MountPoint, "rotation_degrees", r - 60, 0.12); + tween.TweenProperty(MountPoint, "position", p2, 0.12); + tween.TweenProperty(MountPoint, "position", p2, 0.12); + tween.Chain(); + + tween.TweenCallback(Callable.From(() => + { + MountPoint.RotationDegrees = r + 60; + MountPoint.Position = p3; + //重新计算武器阴影位置 + var activeItem = WeaponPack.ActiveItem; + activeItem.CalcShadowTransform(); + //创建屏幕抖动 + if (Face == FaceDirection.Right) + { + //GameCamera.Main.DirectionalShake(Vector2.FromAngle(Mathf.DegToRad(r - 90)) * 5); + GameCamera.Main.DirectionalShake(Vector2.FromAngle(Mathf.DegToRad(r - 180)) * 6); + } + else + { + //GameCamera.Main.DirectionalShake(Vector2.FromAngle(Mathf.DegToRad(270 - r)) * 5); + GameCamera.Main.DirectionalShake(Vector2.FromAngle(Mathf.DegToRad(-r)) * 6); + } + //播放特效 + var sprite = ResourceManager.LoadAndInstantiate(ResourcePath.prefab_effect_weapon_MeleeAttack1_tscn); + var localFirePosition = activeItem.GetLocalFirePosition(); + localFirePosition.X *= 0.85f; + sprite.Position = p1 + localFirePosition.Rotated(Mathf.DegToRad(r)); + sprite.RotationDegrees = r; + AddChild(sprite); + })); + tween.Chain(); + + tween.TweenProperty(MountPoint, "rotation_degrees", r, 0.2); + tween.TweenProperty(MountPoint, "position", p1, 0.2); + tween.Chain(); + + tween.TweenCallback(Callable.From(() => + { + finish(); + })); + tween.Play(); + } +} \ No newline at end of file diff --git a/DungeonShooting_Godot/src/game/activity/role/enemy/Enemy.cs b/DungeonShooting_Godot/src/game/activity/role/enemy/Enemy.cs index 3c327dd..c333c8c 100644 --- a/DungeonShooting_Godot/src/game/activity/role/enemy/Enemy.cs +++ b/DungeonShooting_Godot/src/game/activity/role/enemy/Enemy.cs @@ -119,7 +119,7 @@ var effPos = Position + new Vector2(0, -Altitude); //血液特效 - var blood = ResourceManager.LoadAndInstantiate(ResourcePath.prefab_effect_activityObject_EnemyBloodEffect_tscn); + var blood = ResourceManager.LoadAndInstantiate(ResourcePath.prefab_effect_enemy_EnemyBloodEffect_tscn); blood.Position = effPos - new Vector2(0, 12); blood.AddToActivityRoot(RoomLayerEnum.NormalLayer); @@ -341,7 +341,7 @@ if (WeaponPack.ActiveItem != null) { var attribute = WeaponPack.ActiveItem.Attribute; - return Mathf.Lerp(attribute.BulletMinDistance, attribute.BulletMaxDistance, weight); + return Mathf.Lerp(Utils.GetConfigRangeStart(attribute.BulletDistanceRange), Utils.GetConfigRangeEnd(attribute.BulletDistanceRange), weight); } return 0; diff --git a/DungeonShooting_Godot/src/game/activity/role/enemy/state/AiFollowUpState.cs b/DungeonShooting_Godot/src/game/activity/role/enemy/state/AiFollowUpState.cs index 7bf1d93..e0953eb 100644 --- a/DungeonShooting_Godot/src/game/activity/role/enemy/state/AiFollowUpState.cs +++ b/DungeonShooting_Godot/src/game/activity/role/enemy/state/AiFollowUpState.cs @@ -106,7 +106,7 @@ Master.EnemyAttack(delta); //距离够近, 可以切换到环绕模式 - if (Master.GlobalPosition.DistanceSquaredTo(playerPos) <= Mathf.Pow(weapon.Attribute.BulletMinDistance, 2) * 0.7f) + if (Master.GlobalPosition.DistanceSquaredTo(playerPos) <= Mathf.Pow(Utils.GetConfigRangeStart(weapon.Attribute.BulletDistanceRange), 2) * 0.7f) { ChangeState(AiStateEnum.AiSurround); } diff --git a/DungeonShooting_Godot/src/game/activity/role/enemy/state/AiSurroundState.cs b/DungeonShooting_Godot/src/game/activity/role/enemy/state/AiSurroundState.cs index e8c0827..1e7f4c4 100644 --- a/DungeonShooting_Godot/src/game/activity/role/enemy/state/AiSurroundState.cs +++ b/DungeonShooting_Godot/src/game/activity/role/enemy/state/AiSurroundState.cs @@ -161,7 +161,7 @@ private void RunOver(Vector2 targetPos) { var weapon = Master.WeaponPack.ActiveItem; - var distance = (int)(weapon == null ? 150 : (weapon.Attribute.BulletMinDistance * 0.7f)); + var distance = (int)(weapon == null ? 150 : (Utils.GetConfigRangeStart(weapon.Attribute.BulletDistanceRange) * 0.7f)); _nextPosition = new Vector2( targetPos.X + Utils.Random.RandomRangeInt(-distance, distance), targetPos.Y + Utils.Random.RandomRangeInt(-distance, distance) diff --git a/DungeonShooting_Godot/src/game/activity/role/player/Player.cs b/DungeonShooting_Godot/src/game/activity/role/player/Player.cs new file mode 100644 index 0000000..4600a54 --- /dev/null +++ b/DungeonShooting_Godot/src/game/activity/role/player/Player.cs @@ -0,0 +1,306 @@ +using Godot; + + +/// +/// 玩家角色基类, 所有角色都必须继承该类 +/// +[Tool] +public partial class Player : Role +{ + /// + /// 获取当前操作的角色 + /// + public static Player Current { get; private set; } + + /// + /// 玩家身上的状态机控制器 + /// + public StateController StateController { get; private set; } + + /// + /// 是否翻滚中 + /// + public bool IsRolling { get; private set; } + + /// + /// 设置当前操作的玩家对象 + /// + public static void SetCurrentPlayer(Player player) + { + Current = player; + //设置相机和鼠标跟随玩家 + GameCamera.Main.SetFollowTarget(player); + GameApplication.Instance.Cursor.SetMountRole(player); + } + + public override void OnInit() + { + base.OnInit(); + + IsAi = false; + StateController = AddComponent>(); + AttackLayer = PhysicsLayer.Wall | PhysicsLayer.Prop | PhysicsLayer.Enemy; + Camp = CampEnum.Camp1; + + MaxHp = 6; + Hp = 6; + MaxShield = 0; + Shield = 0; + + // debug用 + // RoleState.Acceleration = 3000; + // RoleState.Friction = 3000; + // RoleState.MoveSpeed = 500; + // CollisionLayer = 0; + // CollisionMask = 0; + // GameCamera.Main.Zoom = new Vector2(0.2f, 0.2f); + // //GameCamera.Main.Zoom = new Vector2(0.5f, 0.5f); + + //注册状态机 + StateController.Register(new PlayerIdleState()); + StateController.Register(new PlayerMoveState()); + StateController.Register(new PlayerRollState()); + //默认状态 + StateController.ChangeStateInstant(PlayerStateEnum.Idle); + } + + protected override void Process(float delta) + { + if (IsDie) + { + return; + } + base.Process(delta); + //脸的朝向 + if (LookTarget == null) + { + var gPos = GlobalPosition; + Vector2 mousePos = InputManager.CursorPosition; + if (mousePos.X > gPos.X && Face == FaceDirection.Left) + { + Face = FaceDirection.Right; + } + else if (mousePos.X < gPos.X && Face == FaceDirection.Right) + { + Face = FaceDirection.Left; + } + + if (MountLookTarget) + { + //枪口跟随鼠标 + MountPoint.SetLookAt(mousePos); + } + } + + if (InputManager.ExchangeWeapon) //切换武器 + { + ExchangeNextWeapon(); + } + else if (InputManager.ThrowWeapon) //扔掉武器 + { + ThrowWeapon(); + + // //测试用的, 所有敌人也扔掉武器 + // if (Affiliation != null) + // { + // var enemies = Affiliation.FindIncludeItems(o => + // { + // return o.CollisionWithMask(PhysicsLayer.Enemy); + // }); + // foreach (var activityObject in enemies) + // { + // if (activityObject is Enemy enemy) + // { + // enemy.ThrowWeapon(); + // } + // } + // } + } + else if (InputManager.Interactive) //互动物体 + { + TriggerInteractive(); + } + else if (InputManager.Reload) //换弹 + { + Reload(); + } + + var meleeAttackFlag = false; + if (InputManager.MeleeAttack) //近战攻击 + { + if (StateController.CurrState != PlayerStateEnum.Roll) //不能是翻滚状态 + { + if (WeaponPack.ActiveItem != null && WeaponPack.ActiveItem.Attribute.CanMeleeAttack) + { + meleeAttackFlag = true; + MeleeAttack(); + } + } + } + if (!meleeAttackFlag && InputManager.Fire) //正常开火 + { + if (StateController.CurrState != PlayerStateEnum.Roll) //不能是翻滚状态 + { + Attack(); + // var weaponArray = AffiliationArea.FindEnterItems(o => o is Weapon); + // foreach (Weapon activityObject in weaponArray) + // { + // activityObject.Trigger(this); + // } + } + } + + if (InputManager.UseActiveProp) //使用道具 + { + UseActiveProp(); + } + else if (InputManager.RemoveProp) //扔掉道具 + { + ThrowActiveProp(); + } + + if (Input.IsKeyPressed(Key.P)) //测试用, 自杀 + { + //Hurt(1000, 0); + Hp = 0; + Hurt(1000, 0); + } + } + + // protected override void PhysicsProcess(float delta) + // { + // if (IsDie) + // { + // return; + // } + // + // base.PhysicsProcess(delta); + // //处理移动 + // HandleMoveInput(delta); + // //播放动画 + // PlayAnim(); + // } + + protected override void OnPickUpWeapon(Weapon weapon) + { + EventManager.EmitEvent(EventEnum.OnPlayerPickUpWeapon, weapon); + } + + protected override void OnThrowWeapon(Weapon weapon) + { + EventManager.EmitEvent(EventEnum.OnPlayerRemoveWeapon, weapon); + } + + protected override int OnHandlerHurt(int damage) + { + //修改受到的伤害, 每次只受到1点伤害 + return 1; + } + + protected override void OnHit(int damage, bool realHarm) + { + //进入无敌状态 + if (realHarm) //真实伤害 + { + PlayInvincibleFlashing(RoleState.WoundedInvincibleTime); + } + else //护盾抵消掉的 + { + PlayInvincibleFlashing(RoleState.ShieldInvincibleTime); + } + } + + protected override void OnChangeHp(int hp) + { + //GameApplication.Instance.Ui.SetHp(hp); + EventManager.EmitEvent(EventEnum.OnPlayerHpChange, hp); + } + + protected override void OnChangeMaxHp(int maxHp) + { + //GameApplication.Instance.Ui.SetMaxHp(maxHp); + EventManager.EmitEvent(EventEnum.OnPlayerMaxHpChange, maxHp); + } + + protected override void ChangeInteractiveItem(CheckInteractiveResult prev, CheckInteractiveResult result) + { + if (prev != null && prev.Target.ShowOutline) + { + prev.Target.OutlineColor = Colors.Black; + } + if (result != null && result.Target.ShowOutline) + { + result.Target.OutlineColor = Colors.White; + } + //派发互动对象改变事件 + EventManager.EmitEvent(EventEnum.OnPlayerChangeInteractiveItem, result); + } + + protected override void OnChangeShield(int shield) + { + //GameApplication.Instance.Ui.SetShield(shield); + EventManager.EmitEvent(EventEnum.OnPlayerShieldChange, shield); + } + + protected override void OnChangeMaxShield(int maxShield) + { + //GameApplication.Instance.Ui.SetMaxShield(maxShield); + EventManager.EmitEvent(EventEnum.OnPlayerMaxShieldChange, maxShield); + } + + protected override void OnDie() + { + StateController.Enable = false; + GameCamera.Main.SetFollowTarget(null); + BasisVelocity = Vector2.Zero; + MoveController.ClearForce(); + UiManager.Open_Settlement(); + } + + protected override void OnPickUpActiveProp(ActiveProp activeProp) + { + EventManager.EmitEvent(EventEnum.OnPlayerPickUpProp, activeProp); + } + + protected override void OnRemoveActiveProp(ActiveProp activeProp) + { + EventManager.EmitEvent(EventEnum.OnPlayerRemoveProp, activeProp); + } + + protected override void OnPickUpBuffProp(BuffProp buffProp) + { + EventManager.EmitEvent(EventEnum.OnPlayerPickUpProp, buffProp); + } + + protected override void OnRemoveBuffProp(BuffProp buffProp) + { + EventManager.EmitEvent(EventEnum.OnPlayerRemoveProp, buffProp); + } + + /// + /// 处理角色移动的输入 + /// + public void HandleMoveInput(float delta) + { + var dir = InputManager.MoveAxis; + // 移动. 如果移动的数值接近0(是用 摇杆可能出现 方向 可能会出现浮点),就friction的值 插值 到 0 + // 如果 有输入 就以当前速度,用acceleration 插值到 对应方向 * 最大速度 + if (Mathf.IsZeroApprox(dir.X)) + { + BasisVelocity = new Vector2(Mathf.MoveToward(BasisVelocity.X, 0, RoleState.Friction * delta), BasisVelocity.Y); + } + else + { + BasisVelocity = new Vector2(Mathf.MoveToward(BasisVelocity.X, dir.X * RoleState.MoveSpeed, RoleState.Acceleration * delta), BasisVelocity.Y); + } + + if (Mathf.IsZeroApprox(dir.Y)) + { + BasisVelocity = new Vector2(BasisVelocity.X, Mathf.MoveToward(BasisVelocity.Y, 0, RoleState.Friction * delta)); + } + else + { + BasisVelocity = new Vector2(BasisVelocity.X, Mathf.MoveToward(BasisVelocity.Y, dir.Y * RoleState.MoveSpeed, RoleState.Acceleration * delta)); + } + } +} \ No newline at end of file diff --git a/DungeonShooting_Godot/src/game/activity/role/player/state/PlayerIdleState.cs b/DungeonShooting_Godot/src/game/activity/role/player/state/PlayerIdleState.cs new file mode 100644 index 0000000..be67372 --- /dev/null +++ b/DungeonShooting_Godot/src/game/activity/role/player/state/PlayerIdleState.cs @@ -0,0 +1,38 @@ + +using Godot; + +/// +/// 空闲状态 +/// +public class PlayerIdleState : StateBase +{ + public PlayerIdleState() : base(PlayerStateEnum.Idle) + { + } + + public override void Enter(PlayerStateEnum prev, params object[] args) + { + Master.HandleMoveInput((float)Master.GetProcessDeltaTime()); + Master.AnimatedSprite.Play(AnimatorNames.Idle); + } + + public override void Process(float delta) + { + var dir = InputManager.MoveAxis; + if (dir != Vector2.Zero) + { + if (InputManager.Roll && Master.CanRoll) //按下翻滚 + { + ChangeState(PlayerStateEnum.Roll); + } + else //移动 + { + ChangeState(PlayerStateEnum.Move); + } + } + else + { + Master.HandleMoveInput(delta); + } + } +} \ No newline at end of file diff --git a/DungeonShooting_Godot/src/game/activity/role/player/state/PlayerMoveState.cs b/DungeonShooting_Godot/src/game/activity/role/player/state/PlayerMoveState.cs new file mode 100644 index 0000000..b234832 --- /dev/null +++ b/DungeonShooting_Godot/src/game/activity/role/player/state/PlayerMoveState.cs @@ -0,0 +1,51 @@ + +using Godot; + +/// +/// 移动状态 +/// +public class PlayerMoveState : StateBase +{ + public PlayerMoveState() : base(PlayerStateEnum.Move) + { + } + + public override void Enter(PlayerStateEnum prev, params object[] args) + { + Master.HandleMoveInput((float)Master.GetProcessDeltaTime()); + PlayAnim(); + } + + public override void Process(float delta) + { + if (InputManager.MoveAxis == Vector2.Zero) //停止移动 + { + ChangeState(PlayerStateEnum.Idle); + } + else + { + if (InputManager.Roll && Master.CanRoll) //翻滚 + { + ChangeState(PlayerStateEnum.Roll); + } + else //执行移动 + { + Master.HandleMoveInput(delta); + PlayAnim(); + } + } + } + + // 播放动画 + private void PlayAnim() + { + if ((Master.Face == FaceDirection.Right && Master.BasisVelocity.X >= 0) || Master.Face == FaceDirection.Left && Master.BasisVelocity.X <= 0) //向前走 + { + Master.AnimatedSprite.Play(AnimatorNames.Run); + } + else if ((Master.Face == FaceDirection.Right && Master.BasisVelocity.X < 0) || Master.Face == FaceDirection.Left && Master.BasisVelocity.X > 0) //向后走 + { + Master.AnimatedSprite.Play(AnimatorNames.ReverseRun); + } + } +} \ No newline at end of file diff --git a/DungeonShooting_Godot/src/game/activity/role/player/state/PlayerRollState.cs b/DungeonShooting_Godot/src/game/activity/role/player/state/PlayerRollState.cs new file mode 100644 index 0000000..229b5df --- /dev/null +++ b/DungeonShooting_Godot/src/game/activity/role/player/state/PlayerRollState.cs @@ -0,0 +1,67 @@ + +using System.Collections; +using Godot; + +/// +/// 翻滚状态 +/// +public class PlayerRollState : StateBase +{ + private long _coroutineId = -1; + private Vector2 _moveDir; + + public PlayerRollState() : base(PlayerStateEnum.Roll) + { + } + + public override void Enter(PlayerStateEnum prev, params object[] args) + { + if (_coroutineId >= 0) + { + Master.StopCoroutine(_coroutineId); + } + + _coroutineId = Master.StartCoroutine(RunRoll()); + Master.AnimatedSprite.Play(AnimatorNames.Roll); + + //隐藏武器 + Master.BackMountPoint.Visible = false; + Master.MountPoint.Visible = false; + //禁用伤害碰撞 + Master.HurtCollision.Disabled = true; + + //翻滚移动方向 + _moveDir = InputManager.MoveAxis; + Master.BasisVelocity = _moveDir * Master.RoleState.RollSpeed; + } + + public override void Exit(PlayerStateEnum next) + { + //显示武器 + Master.BackMountPoint.Visible = true; + Master.MountPoint.Visible = true; + //启用伤害碰撞 + Master.HurtCollision.Disabled = false; + } + + public override void Process(float delta) + { + Master.BasisVelocity = _moveDir * Master.RoleState.RollSpeed; + } + + //翻滚逻辑处理 + private IEnumerator RunRoll() + { + yield return Master.AnimatedSprite.ToSignal(Master.AnimatedSprite, AnimatedSprite2D.SignalName.AnimationFinished); + _coroutineId = -1; + Master.OverRoll(); + if (InputManager.MoveAxis != Vector2.Zero) //切换到移动状态 + { + ChangeState(PlayerStateEnum.Move); + } + else //切换空闲状态 + { + ChangeState(PlayerStateEnum.Idle); + } + } +} \ No newline at end of file diff --git a/DungeonShooting_Godot/src/game/activity/role/player/state/PlayerStateEnum.cs b/DungeonShooting_Godot/src/game/activity/role/player/state/PlayerStateEnum.cs new file mode 100644 index 0000000..5bbd421 --- /dev/null +++ b/DungeonShooting_Godot/src/game/activity/role/player/state/PlayerStateEnum.cs @@ -0,0 +1,16 @@ + +public enum PlayerStateEnum +{ + /// + /// 待机状态 + /// + Idle, + /// + /// 移动状态 + /// + Move, + /// + /// 翻滚状态 + /// + Roll +} \ 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 f8d877d..ace9948 100644 --- a/DungeonShooting_Godot/src/game/activity/weapon/Weapon.cs +++ b/DungeonShooting_Godot/src/game/activity/weapon/Weapon.cs @@ -765,8 +765,7 @@ //连发数量 if (!Attribute.ContinuousShoot) { - _continuousCount = - Utils.Random.RandomRangeInt(Attribute.MinContinuousCount, Attribute.MaxContinuousCount); + _continuousCount = Utils.Random.RandomConfigRange(Attribute.ContinuousCountRange); } } @@ -938,7 +937,7 @@ var fireRotation = tempRotation; //开火发射的子弹数量 - var bulletCount = Utils.Random.RandomRangeInt(Attribute.MaxFireBulletCount, Attribute.MinFireBulletCount); + var bulletCount = Utils.Random.RandomConfigRange(Attribute.FireBulletCountRange); if (Master != null) { bulletCount = Master.RoleState.CallCalcBulletCountEvent(this, bulletCount); @@ -966,9 +965,9 @@ if (Master != null) //是否被拾起 { //武器身位置 - var max = Mathf.Abs(Mathf.Max(Attribute.MaxBacklash, Attribute.MinBacklash)); + var max = Mathf.Abs(Mathf.Max(Utils.GetConfigRangeStart(Attribute.BacklashRange), Utils.GetConfigRangeEnd(Attribute.BacklashRange))); _currBacklashLength = Mathf.Clamp( - _currBacklashLength - Utils.Random.RandomRangeFloat(Attribute.MinBacklash, Attribute.MaxBacklash), + _currBacklashLength - Utils.Random.RandomConfigRange(Attribute.BacklashRange), -max, max ); Position = new Vector2(_currBacklashLength, 0).Rotated(Rotation); @@ -981,6 +980,14 @@ } /// + /// 触发武器的近战攻击 + /// + public void TriggerMeleeAttack(Role trigger) + { + + } + + /// /// 获取武器攻击的目标层级 /// /// @@ -1736,6 +1743,22 @@ Master.ThrowWeapon(PackageIndex); } + /// + /// 获取相对于武器本地坐标的开火位置 + /// + public Vector2 GetLocalFirePosition() + { + return AnimatedSprite.Position + FirePoint.Position; + } + + /// + /// 获取相对于武器本地坐标的抛壳位置 + /// + public Vector2 GetLocalShellPosition() + { + return AnimatedSprite.Position + ShellPoint.Position; + } + //-------------------------- ----- 子弹相关 ----------------------------- /// @@ -1781,10 +1804,10 @@ /// protected Bullet ShootBullet(float fireRotation, string bulletId) { - var speed = Utils.Random.RandomRangeFloat(Attribute.BulletMinSpeed, Attribute.BulletMaxSpeed); - var distance = Utils.Random.RandomRangeFloat(Attribute.BulletMinDistance, Attribute.BulletMaxDistance); + var speed = Utils.Random.RandomConfigRange(Attribute.BulletSpeedRange); + var distance = Utils.Random.RandomConfigRange(Attribute.BulletDistanceRange); var deviationAngle = - Utils.Random.RandomRangeFloat(Attribute.BulletMinDeviationAngle, Attribute.BulletMaxDeviationAngle); + Utils.Random.RandomConfigRange(Attribute.BulletDeviationAngleRange); if (Master != null) { speed = Master.RoleState.CallCalcBulletSpeedEvent(this, speed); @@ -1804,8 +1827,8 @@ fireRotation + Mathf.DegToRad(deviationAngle), attackLayer ); - bullet.MinHarm = Attribute.BulletMinHarm; - bullet.MaxHarm = Attribute.BulletMaxHarm; + bullet.MinHarm = Utils.GetConfigRangeStart(Attribute.BulletHarmRange); + bullet.MaxHarm = Utils.GetConfigRangeEnd(Attribute.BulletHarmRange); bullet.PutDown(RoomLayerEnum.YSortLayer); return bullet; } diff --git a/DungeonShooting_Godot/src/game/activity/weapon/gun/Gun.cs b/DungeonShooting_Godot/src/game/activity/weapon/gun/Gun.cs index fe01cd4..0dfeaeb 100644 --- a/DungeonShooting_Godot/src/game/activity/weapon/gun/Gun.cs +++ b/DungeonShooting_Godot/src/game/activity/weapon/gun/Gun.cs @@ -15,11 +15,13 @@ } //创建开火特效 - var packedScene = ResourceManager.Load(ResourcePath.prefab_effect_ShotFire_tscn); - var sprite = packedScene.Instantiate(); - sprite.GlobalPosition = FirePoint.GlobalPosition; - sprite.GlobalRotation = FirePoint.GlobalRotation; - sprite.AddToActivityRoot(RoomLayerEnum.YSortLayer); + var packedScene = ResourceManager.Load(ResourcePath.prefab_effect_weapon_ShotFire_tscn); + var sprite = packedScene.Instantiate(); + // sprite.GlobalPosition = FirePoint.GlobalPosition; + // sprite.GlobalRotation = FirePoint.GlobalRotation; + // sprite.AddToActivityRoot(RoomLayerEnum.YSortLayer); + sprite.Position = GetLocalFirePosition(); + AddChild(sprite); } protected override void OnShoot(float fireRotation) diff --git a/DungeonShooting_Godot/src/game/activity/weapon/knife/Knife.cs b/DungeonShooting_Godot/src/game/activity/weapon/knife/Knife.cs index c754fa0..e9651c8 100644 --- a/DungeonShooting_Godot/src/game/activity/weapon/knife/Knife.cs +++ b/DungeonShooting_Godot/src/game/activity/weapon/knife/Knife.cs @@ -93,7 +93,7 @@ if (activityObject is Role role) { role.CallDeferred(nameof(Role.Hurt), - Utils.Random.RandomRangeInt(Attribute.BulletMinHarm, Attribute.BulletMaxHarm), (role.GetCenterPosition() - GlobalPosition).Angle()); + Utils.Random.RandomConfigRange(Attribute.BulletHarmRange), (role.GetCenterPosition() - GlobalPosition).Angle()); } } } diff --git a/DungeonShooting_Godot/src/game/effects/AutoDestroyEffect.cs b/DungeonShooting_Godot/src/game/effects/AutoDestroyEffect.cs deleted file mode 100644 index c8e2b97..0000000 --- a/DungeonShooting_Godot/src/game/effects/AutoDestroyEffect.cs +++ /dev/null @@ -1,19 +0,0 @@ - -using Godot; - -public partial class AutoDestroyEffect : GpuParticles2D -{ - /// - /// 延时销毁时间 - /// - [Export] - public float DelayTime = 1f; - - public override async void _Ready() - { - Emitting = true; - var sceneTreeTimer = GetTree().CreateTimer(DelayTime); - await ToSignal(sceneTreeTimer, Timer.SignalName.Timeout); - QueueFree(); - } -} \ No newline at end of file diff --git a/DungeonShooting_Godot/src/game/effects/AutoDestroyParticles.cs b/DungeonShooting_Godot/src/game/effects/AutoDestroyParticles.cs new file mode 100644 index 0000000..e7aba73 --- /dev/null +++ b/DungeonShooting_Godot/src/game/effects/AutoDestroyParticles.cs @@ -0,0 +1,22 @@ + +using Godot; + +/// +/// 到期自动销毁的粒子特效 +/// +public partial class AutoDestroyParticles : GpuParticles2D +{ + /// + /// 延时销毁时间 + /// + [Export] + public float DelayTime { get; set; } = 1f; + + public override async void _Ready() + { + Emitting = true; + var sceneTreeTimer = GetTree().CreateTimer(DelayTime); + await ToSignal(sceneTreeTimer, Timer.SignalName.Timeout); + QueueFree(); + } +} \ No newline at end of file diff --git a/DungeonShooting_Godot/src/game/effects/AutoDestroySprite.cs b/DungeonShooting_Godot/src/game/effects/AutoDestroySprite.cs new file mode 100644 index 0000000..857819d --- /dev/null +++ b/DungeonShooting_Godot/src/game/effects/AutoDestroySprite.cs @@ -0,0 +1,20 @@ +using Godot; + +/// +/// 到期自动销毁的帧动画 +/// +public partial class AutoDestroySprite : AnimatedSprite2D +{ + /// + /// 延时销毁时间 + /// + [Export] + public float DelayTime { get; set; } = 1f; + + public override async void _Ready() + { + var sceneTreeTimer = GetTree().CreateTimer(DelayTime); + await ToSignal(sceneTreeTimer, Timer.SignalName.Timeout); + QueueFree(); + } +} \ No newline at end of file diff --git a/DungeonShooting_Godot/src/game/effects/Effect1.cs b/DungeonShooting_Godot/src/game/effects/Effect1.cs index 7905f99..485bd80 100644 --- a/DungeonShooting_Godot/src/game/effects/Effect1.cs +++ b/DungeonShooting_Godot/src/game/effects/Effect1.cs @@ -1,6 +1,6 @@ using Godot; -public partial class Effect1 : AutoDestroyEffect +public partial class Effect1 : AutoDestroyParticles { public override void _Ready() { diff --git a/DungeonShooting_Godot/src/game/manager/InputManager.cs b/DungeonShooting_Godot/src/game/manager/InputManager.cs index 9ebf832..6d92161 100644 --- a/DungeonShooting_Godot/src/game/manager/InputManager.cs +++ b/DungeonShooting_Godot/src/game/manager/InputManager.cs @@ -7,7 +7,7 @@ public static class InputManager { /// - /// 移动方向, 键鼠: 键盘WASD + /// 移动方向, 已经归一化, 键鼠: 键盘WASD /// public static Vector2 MoveAxis { get; private set; } @@ -62,17 +62,17 @@ public static bool Fire { get; private set; } /// - /// 是否按钮近战攻击按钮 (使用远程武器发起的近战攻击), 键鼠: 鼠标右键 + /// 是否按钮近战攻击按钮 (使用远程武器发起的近战攻击), 键鼠: 键盘Space /// public static bool MeleeAttack { get; private set; } /// - /// 是否按下翻滚按钮, 键鼠: 键盘Space + /// 是否按下翻滚按钮, 键鼠: 鼠标右键 /// public static bool Roll { get; private set; } /// - /// 是否按下打开地图按钮, 键鼠: 键盘Ctrl + /// 是否按下打开地图按钮, 键鼠: 键盘Ctrl /// public static bool Map { get; private set; } diff --git a/DungeonShooting_Godot/src/game/manager/ResourcePath.cs b/DungeonShooting_Godot/src/game/manager/ResourcePath.cs index 3796f08..5aaa8f5 100644 --- a/DungeonShooting_Godot/src/game/manager/ResourcePath.cs +++ b/DungeonShooting_Godot/src/game/manager/ResourcePath.cs @@ -14,13 +14,14 @@ public const string prefab_bullet_Bullet0002_tscn = "res://prefab/bullet/Bullet0002.tscn"; public const string prefab_bullet_Bullet0003_tscn = "res://prefab/bullet/Bullet0003.tscn"; public const string prefab_effect_Blood_tscn = "res://prefab/effect/Blood.tscn"; - public const string prefab_effect_BulletDisappear_tscn = "res://prefab/effect/BulletDisappear.tscn"; - public const string prefab_effect_BulletSmoke_tscn = "res://prefab/effect/BulletSmoke.tscn"; - public const string prefab_effect_Effect1_tscn = "res://prefab/effect/Effect1.tscn"; - public const string prefab_effect_FirePart_tscn = "res://prefab/effect/FirePart.tscn"; - public const string prefab_effect_ShotFire_tscn = "res://prefab/effect/ShotFire.tscn"; - public const string prefab_effect_activityObject_Effect0001_tscn = "res://prefab/effect/activityObject/Effect0001.tscn"; - public const string prefab_effect_activityObject_EnemyBloodEffect_tscn = "res://prefab/effect/activityObject/EnemyBloodEffect.tscn"; + public const string prefab_effect_common_Effect1_tscn = "res://prefab/effect/common/Effect1.tscn"; + public const string prefab_effect_enemy_Effect0001_tscn = "res://prefab/effect/enemy/Effect0001.tscn"; + public const string prefab_effect_enemy_EnemyBloodEffect_tscn = "res://prefab/effect/enemy/EnemyBloodEffect.tscn"; + public const string prefab_effect_weapon_BulletDisappear_tscn = "res://prefab/effect/weapon/BulletDisappear.tscn"; + public const string prefab_effect_weapon_BulletSmoke_tscn = "res://prefab/effect/weapon/BulletSmoke.tscn"; + public const string prefab_effect_weapon_FirePart_tscn = "res://prefab/effect/weapon/FirePart.tscn"; + public const string prefab_effect_weapon_MeleeAttack1_tscn = "res://prefab/effect/weapon/MeleeAttack1.tscn"; + public const string prefab_effect_weapon_ShotFire_tscn = "res://prefab/effect/weapon/ShotFire.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"; @@ -72,7 +73,6 @@ public const string prefab_weapon_Weapon0006_tscn = "res://prefab/weapon/Weapon0006.tscn"; public const string prefab_weapon_Weapon0007_tscn = "res://prefab/weapon/Weapon0007.tscn"; public const string prefab_weapon_WeaponTemplate_tscn = "res://prefab/weapon/WeaponTemplate.tscn"; - public const string resource_Enviromenent_tres = "res://resource/Enviromenent.tres"; public const string resource_config_ActivityObject_json = "res://resource/config/ActivityObject.json"; public const string resource_config_Sound_json = "res://resource/config/Sound.json"; public const string resource_config_Weapon_json = "res://resource/config/Weapon.json"; @@ -136,13 +136,14 @@ public const string resource_sprite_bullet_bullet0003_png = "res://resource/sprite/bullet/bullet0003.png"; public const string resource_sprite_bullet_bullet2_png = "res://resource/sprite/bullet/bullet2.png"; public const string resource_sprite_effects_Circle_png = "res://resource/sprite/effects/Circle.png"; - public const string resource_sprite_effects_Collision_png = "res://resource/sprite/effects/Collision.png"; public const string resource_sprite_effects_debug_arrows_png = "res://resource/sprite/effects/debug_arrows.png"; - public const string resource_sprite_effects_Effect1_png = "res://resource/sprite/effects/Effect1.png"; public const string resource_sprite_effects_Explosion_png = "res://resource/sprite/effects/Explosion.png"; - public const string resource_sprite_effects_KnifeHit1_png = "res://resource/sprite/effects/KnifeHit1.png"; - public const string resource_sprite_effects_ShotFire_png = "res://resource/sprite/effects/ShotFire.png"; - public const string resource_sprite_effects_Smoke_png = "res://resource/sprite/effects/Smoke.png"; + public const string resource_sprite_effects_common_Effect1_png = "res://resource/sprite/effects/common/Effect1.png"; + public const string resource_sprite_effects_common_Smoke_png = "res://resource/sprite/effects/common/Smoke.png"; + public const string resource_sprite_effects_weapon_Collision1_png = "res://resource/sprite/effects/weapon/Collision1.png"; + public const string resource_sprite_effects_weapon_KnifeHit1_png = "res://resource/sprite/effects/weapon/KnifeHit1.png"; + public const string resource_sprite_effects_weapon_MeleeAttack1_png = "res://resource/sprite/effects/weapon/MeleeAttack1.png"; + public const string resource_sprite_effects_weapon_ShotFire_png = "res://resource/sprite/effects/weapon/ShotFire.png"; public const string resource_sprite_map_map1_16x16dungeoniiwallreconfigv04spritesheet_png = "res://resource/sprite/map/map1/16x16 dungeon ii wall reconfig v04 spritesheet.png"; public const string resource_sprite_map_map1_door1_down_png = "res://resource/sprite/map/map1/door1_down.png"; public const string resource_sprite_map_map1_website_txt = "res://resource/sprite/map/map1/website.txt"; @@ -171,6 +172,29 @@ public const string resource_sprite_role_enemy0001_enemy0001_Icon_png = "res://resource/sprite/role/enemy0001/enemy0001_Icon.png"; public const string resource_sprite_role_role0001_Role0001_png = "res://resource/sprite/role/role0001/Role0001.png"; public const string resource_sprite_role_role0001_Role0001_Icon_png = "res://resource/sprite/role/role0001/Role0001_Icon.png"; + public const string resource_sprite_role_role0001_idle_Sprite0002_png = "res://resource/sprite/role/role0001/idle/Sprite-0002.png"; + public const string resource_sprite_role_role0001_idle_Sprite0003_png = "res://resource/sprite/role/role0001/idle/Sprite-0003.png"; + public const string resource_sprite_role_role0001_idle_Sprite0004_png = "res://resource/sprite/role/role0001/idle/Sprite-0004.png"; + public const string resource_sprite_role_role0001_idle_Sprite0005_png = "res://resource/sprite/role/role0001/idle/Sprite-0005.png"; + public const string resource_sprite_role_role0001_idle_Sprite0006_png = "res://resource/sprite/role/role0001/idle/Sprite-0006.png"; + public const string resource_sprite_role_role0001_idle_Sprite0007_png = "res://resource/sprite/role/role0001/idle/Sprite-0007.png"; + public const string resource_sprite_role_role0001_idle_Sprite0008_png = "res://resource/sprite/role/role0001/idle/Sprite-0008.png"; + public const string resource_sprite_role_role0001_roll_Sprite0002_png = "res://resource/sprite/role/role0001/roll/Sprite-0002.png"; + public const string resource_sprite_role_role0001_roll_Sprite0003_png = "res://resource/sprite/role/role0001/roll/Sprite-0003.png"; + public const string resource_sprite_role_role0001_roll_Sprite0004_png = "res://resource/sprite/role/role0001/roll/Sprite-0004.png"; + public const string resource_sprite_role_role0001_roll_Sprite0005_png = "res://resource/sprite/role/role0001/roll/Sprite-0005.png"; + public const string resource_sprite_role_role0001_roll_Sprite0006_png = "res://resource/sprite/role/role0001/roll/Sprite-0006.png"; + public const string resource_sprite_role_role0001_roll_Sprite0007_png = "res://resource/sprite/role/role0001/roll/Sprite-0007.png"; + public const string resource_sprite_role_role0001_roll_Sprite0008_png = "res://resource/sprite/role/role0001/roll/Sprite-0008.png"; + public const string resource_sprite_role_role0001_roll_Sprite0009_png = "res://resource/sprite/role/role0001/roll/Sprite-0009.png"; + public const string resource_sprite_role_role0001_roll_Sprite0010_png = "res://resource/sprite/role/role0001/roll/Sprite-0010.png"; + public const string resource_sprite_role_role0001_run_Sprite0002_png = "res://resource/sprite/role/role0001/run/Sprite-0002.png"; + public const string resource_sprite_role_role0001_run_Sprite0003_png = "res://resource/sprite/role/role0001/run/Sprite-0003.png"; + public const string resource_sprite_role_role0001_run_Sprite0004_png = "res://resource/sprite/role/role0001/run/Sprite-0004.png"; + public const string resource_sprite_role_role0001_run_Sprite0005_png = "res://resource/sprite/role/role0001/run/Sprite-0005.png"; + public const string resource_sprite_role_role0001_run_Sprite0006_png = "res://resource/sprite/role/role0001/run/Sprite-0006.png"; + public const string resource_sprite_role_role0001_run_Sprite0007_png = "res://resource/sprite/role/role0001/run/Sprite-0007.png"; + public const string resource_sprite_role_role0001_run_Sprite0008_png = "res://resource/sprite/role/role0001/run/Sprite-0008.png"; public const string resource_sprite_shell_Shell0001_png = "res://resource/sprite/shell/Shell0001.png"; public const string resource_sprite_shell_Shell0002_png = "res://resource/sprite/shell/Shell0002.png"; public const string resource_sprite_shell_Shell0003_png = "res://resource/sprite/shell/Shell0003.png";