diff --git a/TEST/Ranged Weapon/1_Slingshot.png b/TEST/Ranged Weapon/1_Slingshot.png new file mode 100644 index 0000000..2509182 Binary files /dev/null and b/TEST/Ranged Weapon/1_Slingshot.png differ diff --git a/TEST/Ranged Weapon/1_Slingshot.png.import b/TEST/Ranged Weapon/1_Slingshot.png.import new file mode 100644 index 0000000..0912da4 --- /dev/null +++ b/TEST/Ranged Weapon/1_Slingshot.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://yx6i71kdwm6j" +path="res://.godot/imported/1_Slingshot.png-8a70f8f5f5bd430fbaa9ec05bd5153ce.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://TEST/Ranged Weapon/1_Slingshot.png" +dest_files=["res://.godot/imported/1_Slingshot.png-8a70f8f5f5bd430fbaa9ec05bd5153ce.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/TEST/Ranged Weapon/1_Slingshot_pull.png b/TEST/Ranged Weapon/1_Slingshot_pull.png new file mode 100644 index 0000000..5a465b3 Binary files /dev/null and b/TEST/Ranged Weapon/1_Slingshot_pull.png differ diff --git a/TEST/Ranged Weapon/1_Slingshot_pull.png.import b/TEST/Ranged Weapon/1_Slingshot_pull.png.import new file mode 100644 index 0000000..2df8973 --- /dev/null +++ b/TEST/Ranged Weapon/1_Slingshot_pull.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://0renymshjnfj" +path="res://.godot/imported/1_Slingshot_pull.png-16dce7dfdab330745dc47518256551b1.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://TEST/Ranged Weapon/1_Slingshot_pull.png" +dest_files=["res://.godot/imported/1_Slingshot_pull.png-16dce7dfdab330745dc47518256551b1.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/TEST/Ranged Weapon/2_Bow.png b/TEST/Ranged Weapon/2_Bow.png new file mode 100644 index 0000000..ea7776e Binary files /dev/null and b/TEST/Ranged Weapon/2_Bow.png differ diff --git a/TEST/Ranged Weapon/2_Bow.png.import b/TEST/Ranged Weapon/2_Bow.png.import new file mode 100644 index 0000000..5f7b165 --- /dev/null +++ b/TEST/Ranged Weapon/2_Bow.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cyrr46lmsbrbx" +path="res://.godot/imported/2_Bow.png-42c406f3dbf3d4c06007d07f5d210e65.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://TEST/Ranged Weapon/2_Bow.png" +dest_files=["res://.godot/imported/2_Bow.png-42c406f3dbf3d4c06007d07f5d210e65.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/TEST/Ranged Weapon/2_Bow_pull.png b/TEST/Ranged Weapon/2_Bow_pull.png new file mode 100644 index 0000000..9960d8f Binary files /dev/null and b/TEST/Ranged Weapon/2_Bow_pull.png differ diff --git a/TEST/Ranged Weapon/2_Bow_pull.png.import b/TEST/Ranged Weapon/2_Bow_pull.png.import new file mode 100644 index 0000000..1743380 --- /dev/null +++ b/TEST/Ranged Weapon/2_Bow_pull.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cp3ecqqm2mpoc" +path="res://.godot/imported/2_Bow_pull.png-0ccda659a9989499951af5a122b3b5e1.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://TEST/Ranged Weapon/2_Bow_pull.png" +dest_files=["res://.godot/imported/2_Bow_pull.png-0ccda659a9989499951af5a122b3b5e1.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/TEST/Ranged Weapon/3_Longbow.png b/TEST/Ranged Weapon/3_Longbow.png new file mode 100644 index 0000000..6b20d97 Binary files /dev/null and b/TEST/Ranged Weapon/3_Longbow.png differ diff --git a/TEST/Ranged Weapon/3_Longbow.png.import b/TEST/Ranged Weapon/3_Longbow.png.import new file mode 100644 index 0000000..7148c2b --- /dev/null +++ b/TEST/Ranged Weapon/3_Longbow.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bs81okrb5bf1" +path="res://.godot/imported/3_Longbow.png-374f2a8c4ff364aeb2656f1a54eb2d7f.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://TEST/Ranged Weapon/3_Longbow.png" +dest_files=["res://.godot/imported/3_Longbow.png-374f2a8c4ff364aeb2656f1a54eb2d7f.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/TEST/Ranged Weapon/3_Longbow_pull.png b/TEST/Ranged Weapon/3_Longbow_pull.png new file mode 100644 index 0000000..469c955 Binary files /dev/null and b/TEST/Ranged Weapon/3_Longbow_pull.png differ diff --git a/TEST/Ranged Weapon/3_Longbow_pull.png.import b/TEST/Ranged Weapon/3_Longbow_pull.png.import new file mode 100644 index 0000000..c73fb64 --- /dev/null +++ b/TEST/Ranged Weapon/3_Longbow_pull.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://se3khy8uem13" +path="res://.godot/imported/3_Longbow_pull.png-9b86c2a8250d003f179725c5205d37b8.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://TEST/Ranged Weapon/3_Longbow_pull.png" +dest_files=["res://.godot/imported/3_Longbow_pull.png-9b86c2a8250d003f179725c5205d37b8.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/TEST/Ranged Weapon/All.png b/TEST/Ranged Weapon/All.png new file mode 100644 index 0000000..e848cbb Binary files /dev/null and b/TEST/Ranged Weapon/All.png differ diff --git a/TEST/Ranged Weapon/All.png.import b/TEST/Ranged Weapon/All.png.import new file mode 100644 index 0000000..d406930 --- /dev/null +++ b/TEST/Ranged Weapon/All.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://btwwewwpfdhwu" +path="res://.godot/imported/All.png-a9834e43ab00a8148d501ade9718f255.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://TEST/Ranged Weapon/All.png" +dest_files=["res://.godot/imported/All.png-a9834e43ab00a8148d501ade9718f255.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/TEST/Ranged Weapon/Bullet/1_Stone (1).png b/TEST/Ranged Weapon/Bullet/1_Stone (1).png new file mode 100644 index 0000000..778d088 Binary files /dev/null and b/TEST/Ranged Weapon/Bullet/1_Stone (1).png differ diff --git a/TEST/Ranged Weapon/Bullet/1_Stone (1).png.import b/TEST/Ranged Weapon/Bullet/1_Stone (1).png.import new file mode 100644 index 0000000..fd40c36 --- /dev/null +++ b/TEST/Ranged Weapon/Bullet/1_Stone (1).png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cf5pkf10sn6" +path="res://.godot/imported/1_Stone (1).png-5d53da38b61708e4a89e0087a68bec03.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://TEST/Ranged Weapon/Bullet/1_Stone (1).png" +dest_files=["res://.godot/imported/1_Stone (1).png-5d53da38b61708e4a89e0087a68bec03.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/TEST/Ranged Weapon/Bullet/1_Stone (2).png b/TEST/Ranged Weapon/Bullet/1_Stone (2).png new file mode 100644 index 0000000..1d3ac94 Binary files /dev/null and b/TEST/Ranged Weapon/Bullet/1_Stone (2).png differ diff --git a/TEST/Ranged Weapon/Bullet/1_Stone (2).png.import b/TEST/Ranged Weapon/Bullet/1_Stone (2).png.import new file mode 100644 index 0000000..6db8c79 --- /dev/null +++ b/TEST/Ranged Weapon/Bullet/1_Stone (2).png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://wcoid17psj8k" +path="res://.godot/imported/1_Stone (2).png-d6610342c5191ebcbdf70c6410b9da15.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://TEST/Ranged Weapon/Bullet/1_Stone (2).png" +dest_files=["res://.godot/imported/1_Stone (2).png-d6610342c5191ebcbdf70c6410b9da15.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/TEST/Ranged Weapon/Bullet/1_Stone (3).png b/TEST/Ranged Weapon/Bullet/1_Stone (3).png new file mode 100644 index 0000000..5091a8c Binary files /dev/null and b/TEST/Ranged Weapon/Bullet/1_Stone (3).png differ diff --git a/TEST/Ranged Weapon/Bullet/1_Stone (3).png.import b/TEST/Ranged Weapon/Bullet/1_Stone (3).png.import new file mode 100644 index 0000000..7329006 --- /dev/null +++ b/TEST/Ranged Weapon/Bullet/1_Stone (3).png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://broprsurqu223" +path="res://.godot/imported/1_Stone (3).png-20ba3d170c3181f446ef088049338eab.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://TEST/Ranged Weapon/Bullet/1_Stone (3).png" +dest_files=["res://.godot/imported/1_Stone (3).png-20ba3d170c3181f446ef088049338eab.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/TEST/Ranged Weapon/Bullet/1_Stone (4).png b/TEST/Ranged Weapon/Bullet/1_Stone (4).png new file mode 100644 index 0000000..5c8cb10 Binary files /dev/null and b/TEST/Ranged Weapon/Bullet/1_Stone (4).png differ diff --git a/TEST/Ranged Weapon/Bullet/1_Stone (4).png.import b/TEST/Ranged Weapon/Bullet/1_Stone (4).png.import new file mode 100644 index 0000000..7f3f077 --- /dev/null +++ b/TEST/Ranged Weapon/Bullet/1_Stone (4).png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bv5xyjlbyftle" +path="res://.godot/imported/1_Stone (4).png-fac442b59a76c7f8916ab594135af36a.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://TEST/Ranged Weapon/Bullet/1_Stone (4).png" +dest_files=["res://.godot/imported/1_Stone (4).png-fac442b59a76c7f8916ab594135af36a.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/TEST/Ranged Weapon/Bullet/1_Stone (5).png b/TEST/Ranged Weapon/Bullet/1_Stone (5).png new file mode 100644 index 0000000..de4c986 Binary files /dev/null and b/TEST/Ranged Weapon/Bullet/1_Stone (5).png differ diff --git a/TEST/Ranged Weapon/Bullet/1_Stone (5).png.import b/TEST/Ranged Weapon/Bullet/1_Stone (5).png.import new file mode 100644 index 0000000..358f83e --- /dev/null +++ b/TEST/Ranged Weapon/Bullet/1_Stone (5).png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://d01h2gifkwwrk" +path="res://.godot/imported/1_Stone (5).png-af725fa56b3a72b7638b6445536ac1b9.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://TEST/Ranged Weapon/Bullet/1_Stone (5).png" +dest_files=["res://.godot/imported/1_Stone (5).png-af725fa56b3a72b7638b6445536ac1b9.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/TEST/Ranged Weapon/Bullet/1_Stone (6).png b/TEST/Ranged Weapon/Bullet/1_Stone (6).png new file mode 100644 index 0000000..cc00bdc Binary files /dev/null and b/TEST/Ranged Weapon/Bullet/1_Stone (6).png differ diff --git a/TEST/Ranged Weapon/Bullet/1_Stone (6).png.import b/TEST/Ranged Weapon/Bullet/1_Stone (6).png.import new file mode 100644 index 0000000..377664b --- /dev/null +++ b/TEST/Ranged Weapon/Bullet/1_Stone (6).png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://m4axta8kmju3" +path="res://.godot/imported/1_Stone (6).png-ac181f528405c74bb604c71e9c291350.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://TEST/Ranged Weapon/Bullet/1_Stone (6).png" +dest_files=["res://.godot/imported/1_Stone (6).png-ac181f528405c74bb604c71e9c291350.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/TEST/Ranged Weapon/Bullet/1_Stone (7).png b/TEST/Ranged Weapon/Bullet/1_Stone (7).png new file mode 100644 index 0000000..de0b504 Binary files /dev/null and b/TEST/Ranged Weapon/Bullet/1_Stone (7).png differ diff --git a/TEST/Ranged Weapon/Bullet/1_Stone (7).png.import b/TEST/Ranged Weapon/Bullet/1_Stone (7).png.import new file mode 100644 index 0000000..7a9bb71 --- /dev/null +++ b/TEST/Ranged Weapon/Bullet/1_Stone (7).png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dcgpaty41sqvn" +path="res://.godot/imported/1_Stone (7).png-f1c3d6496d68acc00ecddef97b91f312.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://TEST/Ranged Weapon/Bullet/1_Stone (7).png" +dest_files=["res://.godot/imported/1_Stone (7).png-f1c3d6496d68acc00ecddef97b91f312.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/TEST/Ranged Weapon/Bullet/1_Stone (8).png b/TEST/Ranged Weapon/Bullet/1_Stone (8).png new file mode 100644 index 0000000..7f73ffc Binary files /dev/null and b/TEST/Ranged Weapon/Bullet/1_Stone (8).png differ diff --git a/TEST/Ranged Weapon/Bullet/1_Stone (8).png.import b/TEST/Ranged Weapon/Bullet/1_Stone (8).png.import new file mode 100644 index 0000000..a75abfa --- /dev/null +++ b/TEST/Ranged Weapon/Bullet/1_Stone (8).png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dlre68qjbd6wx" +path="res://.godot/imported/1_Stone (8).png-43e804bd99dd10904843efbf035bb839.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://TEST/Ranged Weapon/Bullet/1_Stone (8).png" +dest_files=["res://.godot/imported/1_Stone (8).png-43e804bd99dd10904843efbf035bb839.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/TEST/Ranged Weapon/Bullet/2_Arrow.png b/TEST/Ranged Weapon/Bullet/2_Arrow.png new file mode 100644 index 0000000..69a9122 Binary files /dev/null and b/TEST/Ranged Weapon/Bullet/2_Arrow.png differ diff --git a/TEST/Ranged Weapon/Bullet/2_Arrow.png.import b/TEST/Ranged Weapon/Bullet/2_Arrow.png.import new file mode 100644 index 0000000..e0e3953 --- /dev/null +++ b/TEST/Ranged Weapon/Bullet/2_Arrow.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bc54jgmswd7x4" +path="res://.godot/imported/2_Arrow.png-ea8717abd702e43c75ee3eb350920cfd.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://TEST/Ranged Weapon/Bullet/2_Arrow.png" +dest_files=["res://.godot/imported/2_Arrow.png-ea8717abd702e43c75ee3eb350920cfd.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/TEST/Ranged Weapon/Bullet/3_Shuriken.png b/TEST/Ranged Weapon/Bullet/3_Shuriken.png new file mode 100644 index 0000000..59fe73a Binary files /dev/null and b/TEST/Ranged Weapon/Bullet/3_Shuriken.png differ diff --git a/TEST/Ranged Weapon/Bullet/3_Shuriken.png.import b/TEST/Ranged Weapon/Bullet/3_Shuriken.png.import new file mode 100644 index 0000000..1fa6fc0 --- /dev/null +++ b/TEST/Ranged Weapon/Bullet/3_Shuriken.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dpysapdru7mb6" +path="res://.godot/imported/3_Shuriken.png-416d7026b4cf3a52217d8f9c3ebd31a5.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://TEST/Ranged Weapon/Bullet/3_Shuriken.png" +dest_files=["res://.godot/imported/3_Shuriken.png-416d7026b4cf3a52217d8f9c3ebd31a5.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/TEST/Ranged Weapon/Bullet/4_Kunai.png b/TEST/Ranged Weapon/Bullet/4_Kunai.png new file mode 100644 index 0000000..b284c2d Binary files /dev/null and b/TEST/Ranged Weapon/Bullet/4_Kunai.png differ diff --git a/TEST/Ranged Weapon/Bullet/4_Kunai.png.import b/TEST/Ranged Weapon/Bullet/4_Kunai.png.import new file mode 100644 index 0000000..9b38582 --- /dev/null +++ b/TEST/Ranged Weapon/Bullet/4_Kunai.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://crsldqc14uwrp" +path="res://.godot/imported/4_Kunai.png-1cc98e64aef835d99885d89f1096f865.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://TEST/Ranged Weapon/Bullet/4_Kunai.png" +dest_files=["res://.godot/imported/4_Kunai.png-1cc98e64aef835d99885d89f1096f865.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/TEST/Ranged Weapon/Bullet/5_Snowball.png b/TEST/Ranged Weapon/Bullet/5_Snowball.png new file mode 100644 index 0000000..1b9e973 Binary files /dev/null and b/TEST/Ranged Weapon/Bullet/5_Snowball.png differ diff --git a/TEST/Ranged Weapon/Bullet/5_Snowball.png.import b/TEST/Ranged Weapon/Bullet/5_Snowball.png.import new file mode 100644 index 0000000..b7ab110 --- /dev/null +++ b/TEST/Ranged Weapon/Bullet/5_Snowball.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://b3ckn2ypt81yh" +path="res://.godot/imported/5_Snowball.png-71a9f5e8b230b54360d0abc0cb80c583.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://TEST/Ranged Weapon/Bullet/5_Snowball.png" +dest_files=["res://.godot/imported/5_Snowball.png-71a9f5e8b230b54360d0abc0cb80c583.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/autoload/database/database.gd b/autoload/database/database.gd index d8ff216..048a5c9 100644 --- a/autoload/database/database.gd +++ b/autoload/database/database.gd @@ -31,3 +31,35 @@ func get_init_favour(self_type:String,other_type:String): pass + +static func pre_proces_data(dic:Dictionary): + var new_dic=dic.duplicate(true) + for i in new_dic.keys(): + new_dic[i]["id"]=i + for j in other_unit_data.keys(): + new_dic[i][j]=other_unit_data[j] + return new_dic +static var other_unit_data={ + + + "hungry":0, + "fatigue":0, + "rage":0, + "tensity":0, + + "panic":0, + #压力 + "pressure":0, + + "hp_max":100, + "hp":100, + + "atk":10, +} +#角色数据 +@onready var character_data:Dictionary=pre_proces_data(preload("res://json/character.json").data) +func get_unit_data(id:String): + if character_data.has(id): + return character_data[id].duplicate(true) + else: + return null diff --git a/json/character.json b/json/character.json new file mode 100644 index 0000000..d986d5a --- /dev/null +++ b/json/character.json @@ -0,0 +1,24 @@ +{ + "test_character_base":{ + "unit_id":"default", + "unit_type":"default", + "sprite_frames":"res://res/animation/other_character_default.tres", + "sprite_offset":[0,-80], + "sprite_scale":[5,5], + "hp_base":100, + "atk_base":10, + "speed_base":1, + "attack_scene":"res://scene/character/attack/base/attack_scene_base.tscn", + }, + "test_character_ranged":{ + "unit_id":"default", + "unit_type":"default", + "sprite_frames":"res://res/animation/other_character_default.tres", + "sprite_offset":[0,-80], + "sprite_scale":[5,5], + "hp_base":100, + "atk_base":10, + "speed_base":1, + "attack_scene":"res://scene/character/attack/ranged/attack_scene_ranged.tscn", + } +} diff --git a/scene/behavour_tree/base/base_behaviour_tree.tscn b/scene/behavour_tree/base/base_behaviour_tree.tscn new file mode 100644 index 0000000..3ee4436 --- /dev/null +++ b/scene/behavour_tree/base/base_behaviour_tree.tscn @@ -0,0 +1,67 @@ +[gd_scene load_steps=15 format=3 uid="uid://dirg8ytcjol3c"] + +[ext_resource type="Script" path="res://addons/beehave/nodes/beehave_tree.gd" id="1_56xd6"] +[ext_resource type="Script" path="res://addons/beehave/nodes/composites/selector.gd" id="2_nj431"] +[ext_resource type="Script" path="res://addons/beehave/nodes/composites/sequence.gd" id="3_gw4kq"] +[ext_resource type="PackedScene" uid="uid://dukqa6ha8aeic" path="res://scene/test/condition_hungry.tscn" id="4_wp4ax"] +[ext_resource type="PackedScene" uid="uid://b65amfq474sv7" path="res://scene/test/action_move_to_target.tscn" id="5_nj8r8"] +[ext_resource type="PackedScene" uid="uid://k7sldgn2joe0" path="res://scene/test/action_eat.tscn" id="6_20yyb"] +[ext_resource type="PackedScene" uid="uid://hgsb64hg78m5" path="res://scene/test/condition_accuse.tscn" id="7_pm41v"] +[ext_resource type="PackedScene" uid="uid://cm7nelq3tbye6" path="res://scene/test/action_move_to_unit.tscn" id="8_gb1l0"] +[ext_resource type="PackedScene" uid="uid://c3pouwk6mbovv" path="res://scene/test/action_accuse.tscn" id="9_qjbcp"] +[ext_resource type="PackedScene" uid="uid://jkwn820drv43" path="res://scene/test/await_time.tscn" id="10_2383g"] +[ext_resource type="PackedScene" uid="uid://qrl0pc72e3q6" path="res://scene/test/condition_attack.tscn" id="11_35qx1"] +[ext_resource type="PackedScene" uid="uid://bcr5oa32fvxwa" path="res://scene/test/action_attack.tscn" id="12_h43ad"] +[ext_resource type="PackedScene" uid="uid://ldjrnwapxefe" path="res://scene/test/action_set_rand_pos.tscn" id="13_vko5r"] +[ext_resource type="PackedScene" uid="uid://dg0gnl5n62gq6" path="res://scene/test/run_await.tscn" id="14_pbpal"] + +[node name="BeehaveTree" type="Node" node_paths=PackedStringArray("blackboard", "actor")] +script = ExtResource("1_56xd6") +blackboard = NodePath("@Node@17291") +actor = NodePath("") + +[node name="SelectorComposite" type="Node" parent="."] +script = ExtResource("2_nj431") + +[node name="eat" type="Node" parent="SelectorComposite"] +script = ExtResource("3_gw4kq") + +[node name="condition_hungry" parent="SelectorComposite/eat" instance=ExtResource("4_wp4ax")] + +[node name="action_move_to_target" parent="SelectorComposite/eat" instance=ExtResource("5_nj8r8")] + +[node name="action_eat" parent="SelectorComposite/eat" instance=ExtResource("6_20yyb")] + +[node name="accuse" type="Node" parent="SelectorComposite"] +script = ExtResource("3_gw4kq") + +[node name="condition_accuse" parent="SelectorComposite/accuse" instance=ExtResource("7_pm41v")] + +[node name="action_move_to_unit" parent="SelectorComposite/accuse" instance=ExtResource("8_gb1l0")] + +[node name="action_accuse" parent="SelectorComposite/accuse" instance=ExtResource("9_qjbcp")] + +[node name="await_time" parent="SelectorComposite/accuse" instance=ExtResource("10_2383g")] +await_time = 2.0 + +[node name="attack" type="Node" parent="SelectorComposite"] +script = ExtResource("3_gw4kq") + +[node name="condition_attack" parent="SelectorComposite/attack" instance=ExtResource("11_35qx1")] + +[node name="action_move_to_unit" parent="SelectorComposite/attack" instance=ExtResource("8_gb1l0")] + +[node name="action_attack" parent="SelectorComposite/attack" instance=ExtResource("12_h43ad")] + +[node name="await_time" parent="SelectorComposite/attack" instance=ExtResource("10_2383g")] +await_time = 1.0 + +[node name="rand_walk" type="Node" parent="SelectorComposite"] +script = ExtResource("3_gw4kq") + +[node name="await_time" parent="SelectorComposite/rand_walk" instance=ExtResource("10_2383g")] +await_time = 2.0 + +[node name="action_set_rand_pos" parent="SelectorComposite/rand_walk" instance=ExtResource("13_vko5r")] + +[node name="run_await" parent="SelectorComposite/rand_walk" instance=ExtResource("14_pbpal")] diff --git a/scene/behavour_tree/ranged/action_move_to_unit_ranged.gd b/scene/behavour_tree/ranged/action_move_to_unit_ranged.gd new file mode 100644 index 0000000..4344e38 --- /dev/null +++ b/scene/behavour_tree/ranged/action_move_to_unit_ranged.gd @@ -0,0 +1,55 @@ +extends ActionLeaf +#执行成功后是否抹除黑板目标数据 +@export var should_erase_target_id:bool=false + +#用于移动到特定单位的可交互范围内 +func tick(actor:Node,black_board:Blackboard): + var unit:Unit=actor + if black_board.has_value("target_unit_id"): + var target_id:String=black_board.get_value("target_unit_id") + if Global.get_unit_instance(target_id)==null: + #移除目标 + black_board.erase_value("target_unit_id") + return FAILURE + #获取要移动到的目标实例 + var target_instance:Unit=Global.get_unit_instance(target_id) + + if not unit.is_unit_instance_in_touch_area(target_instance): + unit.set_target_pos(target_instance.global_position) + match unit.get_dir(): + 0: + unit.play_animation("up") + 1: + unit.play_animation("down") + 2: + unit.play_animation("left_right") + 3: + unit.play_animation("left_right") + return RUNNING + else: + unit.stop_move() + if should_erase_target_id: + black_board.erase_value("target_unit_id") + match unit.get_dir(): + 0: + unit.play_animation("up_idle") + 1: + unit.play_animation("down_idle") + 2: + unit.play_animation("left_right_idle") + 3: + unit.play_animation("left_right_idle") + return SUCCESS + else: + black_board.erase_value("target_unit_id") + match unit.get_dir(): + 0: + unit.play_animation("up_idle") + 1: + unit.play_animation("down_idle") + 2: + unit.play_animation("left_right_idle") + 3: + unit.play_animation("left_right_idle") + return FAILURE + diff --git a/scene/behavour_tree/ranged/action_move_to_unit_ranged.tscn b/scene/behavour_tree/ranged/action_move_to_unit_ranged.tscn new file mode 100644 index 0000000..ef0f40b --- /dev/null +++ b/scene/behavour_tree/ranged/action_move_to_unit_ranged.tscn @@ -0,0 +1,6 @@ +[gd_scene load_steps=2 format=3 uid="uid://sxe0f3fvvkh0"] + +[ext_resource type="Script" path="res://scene/behavour_tree/ranged/action_move_to_unit_ranged.gd" id="1_5b1jd"] + +[node name="action_move_to_unit_ranged" type="Node"] +script = ExtResource("1_5b1jd") diff --git a/scene/behavour_tree/ranged/ranged_behaviour_tree.tscn b/scene/behavour_tree/ranged/ranged_behaviour_tree.tscn new file mode 100644 index 0000000..a680d27 --- /dev/null +++ b/scene/behavour_tree/ranged/ranged_behaviour_tree.tscn @@ -0,0 +1,67 @@ +[gd_scene load_steps=15 format=3 uid="uid://pgntryipq1n5"] + +[ext_resource type="Script" path="res://addons/beehave/nodes/beehave_tree.gd" id="1_4oqpx"] +[ext_resource type="Script" path="res://addons/beehave/nodes/composites/selector.gd" id="2_fltu2"] +[ext_resource type="Script" path="res://addons/beehave/nodes/composites/sequence.gd" id="3_gvxjj"] +[ext_resource type="PackedScene" uid="uid://dukqa6ha8aeic" path="res://scene/test/condition_hungry.tscn" id="4_oa75w"] +[ext_resource type="PackedScene" uid="uid://b65amfq474sv7" path="res://scene/test/action_move_to_target.tscn" id="5_ehseb"] +[ext_resource type="PackedScene" uid="uid://k7sldgn2joe0" path="res://scene/test/action_eat.tscn" id="6_2ghtm"] +[ext_resource type="PackedScene" uid="uid://hgsb64hg78m5" path="res://scene/test/condition_accuse.tscn" id="7_68ri4"] +[ext_resource type="PackedScene" uid="uid://cm7nelq3tbye6" path="res://scene/test/action_move_to_unit.tscn" id="8_pawul"] +[ext_resource type="PackedScene" uid="uid://c3pouwk6mbovv" path="res://scene/test/action_accuse.tscn" id="9_qbv7q"] +[ext_resource type="PackedScene" uid="uid://jkwn820drv43" path="res://scene/test/await_time.tscn" id="10_3kn43"] +[ext_resource type="PackedScene" uid="uid://qrl0pc72e3q6" path="res://scene/test/condition_attack.tscn" id="11_5kbxa"] +[ext_resource type="PackedScene" uid="uid://bcr5oa32fvxwa" path="res://scene/test/action_attack.tscn" id="12_p0fu4"] +[ext_resource type="PackedScene" uid="uid://ldjrnwapxefe" path="res://scene/test/action_set_rand_pos.tscn" id="13_gb573"] +[ext_resource type="PackedScene" uid="uid://dg0gnl5n62gq6" path="res://scene/test/run_await.tscn" id="14_ub8eh"] + +[node name="BeehaveTree" type="Node" node_paths=PackedStringArray("blackboard", "actor")] +script = ExtResource("1_4oqpx") +blackboard = NodePath("@Node@17286") +actor = NodePath("") + +[node name="SelectorComposite" type="Node" parent="."] +script = ExtResource("2_fltu2") + +[node name="eat" type="Node" parent="SelectorComposite"] +script = ExtResource("3_gvxjj") + +[node name="condition_hungry" parent="SelectorComposite/eat" instance=ExtResource("4_oa75w")] + +[node name="action_move_to_target" parent="SelectorComposite/eat" instance=ExtResource("5_ehseb")] + +[node name="action_eat" parent="SelectorComposite/eat" instance=ExtResource("6_2ghtm")] + +[node name="accuse" type="Node" parent="SelectorComposite"] +script = ExtResource("3_gvxjj") + +[node name="condition_accuse" parent="SelectorComposite/accuse" instance=ExtResource("7_68ri4")] + +[node name="action_move_to_unit" parent="SelectorComposite/accuse" instance=ExtResource("8_pawul")] + +[node name="action_accuse" parent="SelectorComposite/accuse" instance=ExtResource("9_qbv7q")] + +[node name="await_time" parent="SelectorComposite/accuse" instance=ExtResource("10_3kn43")] +await_time = 2.0 + +[node name="attack" type="Node" parent="SelectorComposite"] +script = ExtResource("3_gvxjj") + +[node name="condition_attack" parent="SelectorComposite/attack" instance=ExtResource("11_5kbxa")] + +[node name="action_move_to_unit" parent="SelectorComposite/attack" instance=ExtResource("8_pawul")] + +[node name="action_attack" parent="SelectorComposite/attack" instance=ExtResource("12_p0fu4")] + +[node name="await_time" parent="SelectorComposite/attack" instance=ExtResource("10_3kn43")] +await_time = 1.0 + +[node name="rand_walk" type="Node" parent="SelectorComposite"] +script = ExtResource("3_gvxjj") + +[node name="await_time" parent="SelectorComposite/rand_walk" instance=ExtResource("10_3kn43")] +await_time = 2.0 + +[node name="action_set_rand_pos" parent="SelectorComposite/rand_walk" instance=ExtResource("13_gb573")] + +[node name="run_await" parent="SelectorComposite/rand_walk" instance=ExtResource("14_ub8eh")] diff --git a/scene/character/attack/base/attack_scene_base.gd b/scene/character/attack/base/attack_scene_base.gd new file mode 100644 index 0000000..5d14b5e --- /dev/null +++ b/scene/character/attack/base/attack_scene_base.gd @@ -0,0 +1,53 @@ +extends Area2D +class_name AttackModel +func attack(): + player().show_action("伤害") + match player().get_dir(): + 0: + player().play_animation("up_attack") + 1: + player().play_animation("down_attack") + 2: + player().play_animation("left_right_attack") + 3: + player().play_animation("left_right_attack") + +#判断单位是否再攻击范围内 +func is_unit_instance_in_attack_area(instance:Node): + if instance is PhysicsBody2D: + return instance in get_overlapping_bodies() + if instance is Area2D: + return instance in get_overlapping_areas() +func _ready() -> void: + player().animation.frame_changed.connect(frame_changed) + pass +var attack_frames=2 +func player()->Unit: + return get_parent().get_parent() +func frame_changed(): + if player().animation.animation in [&"up_attack",&"down_attack",&"left_right_attack"] and player().animation.frame==attack_frames: + use_attack_damage() + +#在固定帧使用攻击 +func use_attack_damage(): + print("使用攻击") + for i in %attack_area.get_overlapping_bodies(): + print(i) + if i is Unit and i!=player(): + i.attacked(player().unit_id,player().get_atk()) +#if animation.animation in [&"up_attack",&"down_attack",&"left_right_attack"] and not animation.is_playing(): + #return true + #else: + #return false +func is_attack_finished(): + if player().animation.animation in [&"up_attack",&"down_attack",&"left_right_attack"] and not player().animation.is_playing(): + return true + else: + return false +func is_attacking(): + return player().animation.animation in [&"up_attack",&"down_attack",&"left_right_attack"] and player().animation.is_playing() +#攻击复位 +func attack_reset(): + + + pass diff --git a/scene/character/attack/base/attack_scene_base.tscn b/scene/character/attack/base/attack_scene_base.tscn new file mode 100644 index 0000000..d7102fc --- /dev/null +++ b/scene/character/attack/base/attack_scene_base.tscn @@ -0,0 +1,22 @@ +[gd_scene load_steps=4 format=3 uid="uid://daj4pnrtakfby"] + +[ext_resource type="Script" path="res://scene/character/attack/base/attack_scene_base.gd" id="1_wkpgy"] + +[sub_resource type="CircleShape2D" id="CircleShape2D_dqxim"] +radius = 104.12 + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_ho5n7"] +size = Vector2(121, 136) + +[node name="attack_scene_base" type="Area2D"] +script = ExtResource("1_wkpgy") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="."] +shape = SubResource("CircleShape2D_dqxim") + +[node name="attack_area" type="Area2D" parent="."] +unique_name_in_owner = true + +[node name="CollisionShape2D" type="CollisionShape2D" parent="attack_area"] +position = Vector2(60.5, 3) +shape = SubResource("RectangleShape2D_ho5n7") diff --git a/scene/character/attack/ranged/attack_range_bullet.gd b/scene/character/attack/ranged/attack_range_bullet.gd new file mode 100644 index 0000000..5208467 --- /dev/null +++ b/scene/character/attack/ranged/attack_range_bullet.gd @@ -0,0 +1,24 @@ +extends Area2D + +var speed=1000 + +var unit_id:String="" +var atk:float=10 +# Called when the node enters the scene tree for the first time. +func _ready() -> void: + pass # Replace with function body. + + +# Called every frame. 'delta' is the elapsed time since the previous frame. +func _process(delta: float) -> void: + self.global_position+=Vector2(cos(self.global_rotation),sin(self.global_rotation))*speed*delta + pass + + +func _on_body_entered(body: Node2D) -> void: + if body is Unit and body!=Global.get_unit_instance(unit_id): + body.attacked(unit_id,atk) + if body!=Global.get_unit_instance(unit_id): + queue_free() + + pass # Replace with function body. diff --git a/scene/character/attack/ranged/attack_range_bullet.tscn b/scene/character/attack/ranged/attack_range_bullet.tscn new file mode 100644 index 0000000..9d34052 --- /dev/null +++ b/scene/character/attack/ranged/attack_range_bullet.tscn @@ -0,0 +1,20 @@ +[gd_scene load_steps=4 format=3 uid="uid://bpk3f8nuoxeff"] + +[ext_resource type="Texture2D" uid="uid://bc54jgmswd7x4" path="res://TEST/Ranged Weapon/Bullet/2_Arrow.png" id="1_2txil"] +[ext_resource type="Script" path="res://scene/character/attack/ranged/attack_range_bullet.gd" id="1_qqft1"] + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_d6whh"] +size = Vector2(71, 20) + +[node name="attack_range_bullet" type="Area2D"] +script = ExtResource("1_qqft1") + +[node name="Sprite2D" type="Sprite2D" parent="."] +scale = Vector2(0.43, 0.43) +texture = ExtResource("1_2txil") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="."] +position = Vector2(0.5, 0) +shape = SubResource("RectangleShape2D_d6whh") + +[connection signal="body_entered" from="." to="." method="_on_body_entered"] diff --git a/scene/character/attack/ranged/attack_scene_ranged.gd b/scene/character/attack/ranged/attack_scene_ranged.gd new file mode 100644 index 0000000..7ca929b --- /dev/null +++ b/scene/character/attack/ranged/attack_scene_ranged.gd @@ -0,0 +1,52 @@ +extends AttackModel + + +func attack(): + %AnimatedSprite2D.play("attack") + attack_state=1 +var attack_state:int=0 +#判断单位是否再攻击范围内 +func is_unit_instance_in_attack_area(instance:Node): + if instance is PhysicsBody2D: + return instance in get_overlapping_bodies() + if instance is Area2D: + return instance in get_overlapping_areas() +func _ready() -> void: + %AnimatedSprite2D.frame_changed.connect(frame_changed) + pass +func player()->Unit: + return get_parent().get_parent() +func frame_changed(): + print(%AnimatedSprite2D.frame) + if %AnimatedSprite2D.frame==attack_frames: + use_attack_damage() + if %AnimatedSprite2D.frame==2: + attack_state=2 +const ATTACK_RANGE_BULLET = preload("res://scene/character/attack/ranged/attack_range_bullet.tscn") +#在固定帧使用攻击 +func use_attack_damage(): + print("使用攻击") + #for i in %attack_area.get_overlapping_bodies(): + #print(i) + #if i is Unit and i!=player(): + #i.attacked(player().unit_id,player().get_atk()) + var new_bullet=ATTACK_RANGE_BULLET.instantiate() + new_bullet.global_position=player().global_position + new_bullet.global_rotation=global_rotation + new_bullet.unit_id=player().unit_id + new_bullet.atk=player().get_atk() + player().get_parent().add_child(new_bullet) + +#if animation.animation in [&"up_attack",&"down_attack",&"left_right_attack"] and not animation.is_playing(): + #return true + #else: + #return false +func is_attack_finished(): + return attack_state ==2 +func is_attacking(): + return attack_state ==1 + +func attack_reset(): + attack_state=0 + + pass diff --git a/scene/character/attack/ranged/attack_scene_ranged.tscn b/scene/character/attack/ranged/attack_scene_ranged.tscn new file mode 100644 index 0000000..6b00a3e --- /dev/null +++ b/scene/character/attack/ranged/attack_scene_ranged.tscn @@ -0,0 +1,44 @@ +[gd_scene load_steps=6 format=3 uid="uid://dao1drdc1dla6"] + +[ext_resource type="Script" path="res://scene/character/attack/ranged/attack_scene_ranged.gd" id="1_rpaof"] +[ext_resource type="Texture2D" uid="uid://bs81okrb5bf1" path="res://TEST/Ranged Weapon/3_Longbow.png" id="2_1o465"] +[ext_resource type="Texture2D" uid="uid://se3khy8uem13" path="res://TEST/Ranged Weapon/3_Longbow_pull.png" id="3_i46q8"] + +[sub_resource type="SpriteFrames" id="SpriteFrames_35llq"] +animations = [{ +"frames": [{ +"duration": 1.0, +"texture": ExtResource("2_1o465") +}, { +"duration": 1.0, +"texture": ExtResource("3_i46q8") +}, { +"duration": 1.0, +"texture": ExtResource("2_1o465") +}], +"loop": false, +"name": &"attack", +"speed": 5.0 +}, { +"frames": [], +"loop": true, +"name": &"normal", +"speed": 5.0 +}] + +[sub_resource type="CircleShape2D" id="CircleShape2D_5ekof"] +radius = 486.901 + +[node name="attack_scene_ranged" type="Area2D"] +z_index = 1 +scale = Vector2(0.992374, 0.996413) +script = ExtResource("1_rpaof") + +[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="."] +unique_name_in_owner = true +scale = Vector2(0.515, 0.515) +sprite_frames = SubResource("SpriteFrames_35llq") +animation = &"attack" + +[node name="CollisionShape2D" type="CollisionShape2D" parent="."] +shape = SubResource("CircleShape2D_5ekof") diff --git a/scene/character/dead_scene_sprite/dead_scene.tscn b/scene/character/dead_scene_sprite/dead_scene.tscn index 41bda40..f3b692c 100644 --- a/scene/character/dead_scene_sprite/dead_scene.tscn +++ b/scene/character/dead_scene_sprite/dead_scene.tscn @@ -2,6 +2,21 @@ [ext_resource type="Script" path="res://scene/character/dead_scene_sprite/dead_scene.gd" id="1_ugaxh"] +[sub_resource type="Animation" id="Animation_mdkhy"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:modulate") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Color(1, 1, 1, 1)] +} + [sub_resource type="Animation" id="Animation_w6wlf"] resource_name = "modulutehide" length = 0.5 @@ -18,21 +33,6 @@ tracks/0/keys = { "values": [Color(1, 1, 1, 1), Color(1, 1, 1, 0)] } -[sub_resource type="Animation" id="Animation_mdkhy"] -length = 0.001 -tracks/0/type = "value" -tracks/0/imported = false -tracks/0/enabled = true -tracks/0/path = NodePath(".:modulate") -tracks/0/interp = 1 -tracks/0/loop_wrap = true -tracks/0/keys = { -"times": PackedFloat32Array(0), -"transitions": PackedFloat32Array(1), -"update": 0, -"values": [Color(1, 1, 1, 1)] -} - [sub_resource type="AnimationLibrary" id="AnimationLibrary_a2cak"] _data = { "RESET": SubResource("Animation_mdkhy"), diff --git a/scene/class/game_data.gd b/scene/class/game_data.gd new file mode 100644 index 0000000..a250ca4 --- /dev/null +++ b/scene/class/game_data.gd @@ -0,0 +1,14 @@ +class_name GameData + +var data:Dictionary={ + +} +func _init(use_character_id:String) -> void: + var cdata=Database.get_character_data(use_character_id) + if cdata!=null: + data["character_data"]=cdata + else: + push_error("未找到角色数据") + pass +func get_character_data(): + return data["character_data"] diff --git a/scene/test/action_attack.gd b/scene/test/action_attack.gd index a8343c8..610ca6a 100644 --- a/scene/test/action_attack.gd +++ b/scene/test/action_attack.gd @@ -10,6 +10,16 @@ func tick(actor:Node,black_board:Blackboard): return RUNNING if unit.is_attack_finished(): black_board.erase_value("target_unit_id") + match unit.get_dir(): + 0: + unit.play_animation("up_idle") + 1: + unit.play_animation("down_idle") + 2: + unit.play_animation("left_right_idle") + 3: + unit.play_animation("left_right_idle") + unit.attack_reset() return SUCCESS if black_board.has_value("target_unit_id") and not unit.is_attacking(): unit.attack() diff --git a/scene/test/action_move_to_unit.gd b/scene/test/action_move_to_unit.gd index 4344e38..5add8df 100644 --- a/scene/test/action_move_to_unit.gd +++ b/scene/test/action_move_to_unit.gd @@ -14,7 +14,7 @@ func tick(actor:Node,black_board:Blackboard): #获取要移动到的目标实例 var target_instance:Unit=Global.get_unit_instance(target_id) - if not unit.is_unit_instance_in_touch_area(target_instance): + if not unit.is_unit_instance_in_attack_area(target_instance): unit.set_target_pos(target_instance.global_position) match unit.get_dir(): 0: diff --git a/scene/test/character.gd b/scene/test/character.gd index 27b5156..f0b93f6 100644 --- a/scene/test/character.gd +++ b/scene/test/character.gd @@ -34,19 +34,6 @@ var action_emoji:Dictionary={ #状态值 #饥饿,疲劳,怒气,紧张,恐慌,压力 - "hungry":0, - "fatigue":0, - "rage":0, - "tensity":0, - - "panic":0, - #压力 - "pressure":0, - - "hp_max":100, - "hp":100, - - "atk":10, } #允许的状态队列 var state_value_array:Array=["hungry","fatigue","rage","tensity","panic","pressure","hp_max","hp","atk"] @@ -109,27 +96,21 @@ const JUMP_VELOCITY = -400.0 ##与其他单位交互的范围,目标进入此范围内才进行交互 @export var touch_area:Area2D -##感知范围 +##行为感知范围 @export var sense_area:Area2D - +#攻击范围 +@export var attack_sense_area:Area2D +#攻击检测 @export var attack_area:Area2D +#攻击模组 +var attack_scene:AttackModel - - - - -#var hungry:float=0: - #set(val): - #hungry=val - #if %hungry!=null: - #%hungry.text="饥饿值:"+str(val) -func _ready() -> void: +#使用数据进行初始化角色 +func init_from_data(): Global.set_unit_instance(unit_id,self) agent.max_speed=unit_speed agent.velocity_computed.connect(safe_speed) - if animation!=null: - animation.frame_changed.connect(frame_changed) second_timer=Timer.new() second_timer.autostart=true second_timer.one_shot=false @@ -141,11 +122,27 @@ func _ready() -> void: new_sprite_animation.sprite_frames=load(unit_data["sprite_frames"]) add_child(new_sprite_animation) - new_sprite_animation.position=unit_data["sprite_offset"] - new_sprite_animation.scale=unit_data["sprite_scale"] + + new_sprite_animation.position=Vector2(unit_data["sprite_offset"][0],unit_data["sprite_offset"][1]) + new_sprite_animation.scale=Vector2(unit_data["sprite_scale"][0],unit_data["sprite_scale"][1]) animation=new_sprite_animation - animation.frame_changed.connect(frame_changed) - #state_machine.launch() + if unit_data.has("attack_scene"): + if %rotate!=null: + var new_attack_scene=load(unit_data["attack_scene"]).instantiate() + %rotate.add_child(new_attack_scene) + attack_scene=new_attack_scene + + + +#var hungry:float=0: + #set(val): + #hungry=val + #if %hungry!=null: + #%hungry.text="饥饿值:"+str(val) +func _ready() -> void: + unit_data=Database.get_unit_data("test_character_ranged") + init_from_data() + pass func set_target_pos(target:Vector2): agent.target_position=target @@ -198,15 +195,19 @@ func is_unit_instance_in_touch_area(instance:Node): #判断单位是否再攻击范围内 func is_unit_instance_in_attack_area(instance:Node): - if attack_area==null: + #if attack_sense_area==null: + #return false + #else: + #if instance is PhysicsBody2D: + #return instance in attack_sense_area.get_overlapping_bodies() + #if instance is Area2D: + #return instance in attack_sense_area.get_overlapping_areas() + # + #pass + if attack_scene==null: return false else: - if instance is PhysicsBody2D: - return instance in attack_area.get_overlapping_bodies() - if instance is Area2D: - return instance in attack_area.get_overlapping_areas() - - pass + return attack_scene.is_unit_instance_in_attack_area(instance) #指责(口角) func accuse(unit_id:String): show_action("指责") @@ -224,36 +225,50 @@ func accused(by_unit_id:String): #攻击 func attack(): - show_action("伤害") - match get_dir(): - 0: - play_animation("up_attack") - 1: - play_animation("down_attack") - 2: - play_animation("left_right_attack") - 3: - play_animation("left_right_attack") - pass + #show_action("伤害") + #match get_dir(): + #0: + #play_animation("up_attack") + #1: + #play_animation("down_attack") + #2: + #play_animation("left_right_attack") + #3: + #play_animation("left_right_attack") + #pass + if attack_scene: + print("攻击") + attack_scene.attack() -func frame_changed(): - if animation.animation in [&"up_attack",&"down_attack",&"left_right_attack"] and animation.frame==attack_frames: - use_attack_damage() +#func frame_changed(): + #if animation.animation in [&"up_attack",&"down_attack",&"left_right_attack"] and animation.frame==attack_frames: + #use_attack_damage() func is_attack_finished(): - if animation.animation in [&"up_attack",&"down_attack",&"left_right_attack"] and not animation.is_playing(): + #if animation.animation in [&"up_attack",&"down_attack",&"left_right_attack"] and not animation.is_playing(): + #return true + #else: + #return false + if attack_scene is AttackModel: + return attack_scene.is_attack_finished() + else: return true +func is_attacking(): + #return animation.animation in [&"up_attack",&"down_attack",&"left_right_attack"] and animation.is_playing() + if attack_scene is AttackModel: + return attack_scene.is_attacking() else: return false -func is_attacking(): - return animation.animation in [&"up_attack",&"down_attack",&"left_right_attack"] and animation.is_playing() -#在固定帧使用攻击 -func use_attack_damage(): - print("使用攻击") - for i in attack_area.get_overlapping_bodies(): - if i is Unit and i!=self: - i.attacked(unit_id,get_atk()) - - pass +##在固定帧使用攻击 +#func use_attack_damage(): + #print("使用攻击") + #for i in attack_area.get_overlapping_bodies(): + #if i is Unit and i!=self: + #i.attacked(unit_id,get_atk()) + # + #pass +func attack_reset(): + if attack_scene: + attack_scene.attack_reset() func attacked(by_unit_id:String,damage:float): show_action("受伤") Global.set_unit_favour(unit_id,by_unit_id,Global.get_unit_favour(unit_id,by_unit_id)-20) diff --git a/scene/test/other_character.tscn b/scene/test/other_character.tscn index 58d40cb..aa9071c 100644 --- a/scene/test/other_character.tscn +++ b/scene/test/other_character.tscn @@ -1,32 +1,16 @@ -[gd_scene load_steps=28 format=3 uid="uid://dl1axae8yeeeh"] +[gd_scene load_steps=14 format=3 uid="uid://dl1axae8yeeeh"] [ext_resource type="Script" path="res://scene/test/other_character.gd" id="1_6f8fy"] [ext_resource type="Texture2D" uid="uid://csk8u15wepd1w" path="res://icon.svg" id="2_tbr4x"] -[ext_resource type="Script" path="res://addons/beehave/nodes/beehave_tree.gd" id="2_twyt5"] -[ext_resource type="Script" path="res://addons/beehave/nodes/composites/selector.gd" id="3_0pv7j"] -[ext_resource type="PackedScene" uid="uid://ldjrnwapxefe" path="res://scene/test/action_set_rand_pos.tscn" id="3_a6loo"] -[ext_resource type="Script" path="res://addons/beehave/nodes/composites/sequence.gd" id="3_gehdk"] -[ext_resource type="PackedScene" uid="uid://jkwn820drv43" path="res://scene/test/await_time.tscn" id="4_hl4be"] -[ext_resource type="PackedScene" uid="uid://dg0gnl5n62gq6" path="res://scene/test/run_await.tscn" id="4_hydke"] -[ext_resource type="PackedScene" uid="uid://hgsb64hg78m5" path="res://scene/test/condition_accuse.tscn" id="5_tomxt"] -[ext_resource type="PackedScene" uid="uid://dukqa6ha8aeic" path="res://scene/test/condition_hungry.tscn" id="6_qkap5"] -[ext_resource type="PackedScene" uid="uid://cm7nelq3tbye6" path="res://scene/test/action_move_to_unit.tscn" id="6_wkm0p"] -[ext_resource type="PackedScene" uid="uid://b65amfq474sv7" path="res://scene/test/action_move_to_target.tscn" id="7_phvf1"] -[ext_resource type="PackedScene" uid="uid://c3pouwk6mbovv" path="res://scene/test/action_accuse.tscn" id="7_wxwf6"] -[ext_resource type="PackedScene" uid="uid://k7sldgn2joe0" path="res://scene/test/action_eat.tscn" id="8_xfqbv"] -[ext_resource type="PackedScene" uid="uid://qrl0pc72e3q6" path="res://scene/test/condition_attack.tscn" id="10_85ndl"] -[ext_resource type="PackedScene" uid="uid://bcr5oa32fvxwa" path="res://scene/test/action_attack.tscn" id="11_7tlfn"] +[ext_resource type="PackedScene" uid="uid://dirg8ytcjol3c" path="res://scene/behavour_tree/base/base_behaviour_tree.tscn" id="3_5u10o"] [sub_resource type="CircleShape2D" id="CircleShape2D_s46hi"] -[sub_resource type="RectangleShape2D" id="RectangleShape2D_lphpm"] -size = Vector2(121, 136) - [sub_resource type="CircleShape2D" id="CircleShape2D_fp36j"] radius = 104.12 [sub_resource type="CircleShape2D" id="CircleShape2D_0d77h"] -radius = 472.662 +radius = 847.191 [sub_resource type="Animation" id="Animation_tov45"] length = 0.001 @@ -77,13 +61,12 @@ colors = PackedColorArray(0, 1, 0, 1, 0, 1, 0, 1) [sub_resource type="GradientTexture1D" id="GradientTexture1D_6t72h"] gradient = SubResource("Gradient_qd3pc") -[node name="other_character" type="CharacterBody2D" node_paths=PackedStringArray("agent", "rotate", "touch_area", "sense_area", "attack_area")] +[node name="other_character" type="CharacterBody2D" node_paths=PackedStringArray("agent", "rotate", "touch_area", "sense_area")] script = ExtResource("1_6f8fy") agent = NodePath("agent") rotate = NodePath("rotate") touch_area = NodePath("touch_area") sense_area = NodePath("sense_area") -attack_area = NodePath("rotate/attack_area") [node name="Sprite2D" type="Sprite2D" parent="."] visible = false @@ -99,63 +82,7 @@ debug_enabled = true shape = SubResource("CircleShape2D_s46hi") [node name="rotate" type="Node2D" parent="."] - -[node name="attack_area" type="Area2D" parent="rotate"] - -[node name="CollisionShape2D" type="CollisionShape2D" parent="rotate/attack_area"] -position = Vector2(60.5, 3) -shape = SubResource("RectangleShape2D_lphpm") - -[node name="BeehaveTree" type="Node" parent="." node_paths=PackedStringArray("blackboard", "actor")] -script = ExtResource("2_twyt5") -blackboard = NodePath("@Node@113329") -actor = NodePath("..") - -[node name="SelectorComposite" type="Node" parent="BeehaveTree"] -script = ExtResource("3_0pv7j") - -[node name="eat" type="Node" parent="BeehaveTree/SelectorComposite"] -script = ExtResource("3_gehdk") - -[node name="condition_hungry" parent="BeehaveTree/SelectorComposite/eat" instance=ExtResource("6_qkap5")] - -[node name="action_move_to_target" parent="BeehaveTree/SelectorComposite/eat" instance=ExtResource("7_phvf1")] - -[node name="action_eat" parent="BeehaveTree/SelectorComposite/eat" instance=ExtResource("8_xfqbv")] - -[node name="accuse" type="Node" parent="BeehaveTree/SelectorComposite"] -script = ExtResource("3_gehdk") - -[node name="condition_accuse" parent="BeehaveTree/SelectorComposite/accuse" instance=ExtResource("5_tomxt")] - -[node name="action_move_to_unit" parent="BeehaveTree/SelectorComposite/accuse" instance=ExtResource("6_wkm0p")] - -[node name="action_accuse" parent="BeehaveTree/SelectorComposite/accuse" instance=ExtResource("7_wxwf6")] - -[node name="await_time" parent="BeehaveTree/SelectorComposite/accuse" instance=ExtResource("4_hl4be")] -await_time = 2.0 - -[node name="attack" type="Node" parent="BeehaveTree/SelectorComposite"] -script = ExtResource("3_gehdk") - -[node name="condition_attack" parent="BeehaveTree/SelectorComposite/attack" instance=ExtResource("10_85ndl")] - -[node name="action_move_to_unit" parent="BeehaveTree/SelectorComposite/attack" instance=ExtResource("6_wkm0p")] - -[node name="action_attack" parent="BeehaveTree/SelectorComposite/attack" instance=ExtResource("11_7tlfn")] - -[node name="await_time" parent="BeehaveTree/SelectorComposite/attack" instance=ExtResource("4_hl4be")] -await_time = 1.0 - -[node name="rand_walk" type="Node" parent="BeehaveTree/SelectorComposite"] -script = ExtResource("3_gehdk") - -[node name="await_time" parent="BeehaveTree/SelectorComposite/rand_walk" instance=ExtResource("4_hl4be")] -await_time = 2.0 - -[node name="action_set_rand_pos" parent="BeehaveTree/SelectorComposite/rand_walk" instance=ExtResource("3_a6loo")] - -[node name="run_await" parent="BeehaveTree/SelectorComposite/rand_walk" instance=ExtResource("4_hydke")] +unique_name_in_owner = true [node name="touch_area" type="Area2D" parent="."] unique_name_in_owner = true @@ -210,5 +137,9 @@ nine_patch_stretch = true texture_under = SubResource("GradientTexture1D_ioncu") texture_progress = SubResource("GradientTexture1D_6t72h") +[node name="BeehaveTree" parent="." node_paths=PackedStringArray("blackboard", "actor") instance=ExtResource("3_5u10o")] +blackboard = NodePath("@Node@34592") +actor = NodePath("..") + [connection signal="state_value_changed" from="." to="." method="_on_state_value_changed"] [connection signal="body_entered" from="sense_area" to="." method="_on_sense_area_body_entered"] diff --git a/scene/test/test_main.gd b/scene/test/test_main.gd index 5399d7e..ba614d8 100644 --- a/scene/test/test_main.gd +++ b/scene/test/test_main.gd @@ -32,7 +32,7 @@ func get_closest_node(self_node:Node2D,array:Array,target_class): var node=null for i in range(0,array.size()): print(is_instance_of(i,target_class)) - if is_instance_of(array[i],target_class): + if is_instance_of(array[i],target_class) and array[i]!=self_node: var l=(array[i].global_position-self_node.global_position).length() if l