generated from krampus/template-godot4
Compare commits
6 Commits
e723e0c022
...
15cd409e04
Author | SHA1 | Date |
---|---|---|
Rob Kelly | 15cd409e04 | |
Rob Kelly | 42d1a9a77c | |
Rob Kelly | 49dd2fecf0 | |
Rob Kelly | ed91c9c9d8 | |
Rob Kelly | 1a622ff3b1 | |
Rob Kelly | 9d6821962b |
BIN
asset_dev/characters/gfolf_girl/gfolf_girl.blend (Stored with Git LFS)
BIN
asset_dev/characters/gfolf_girl/gfolf_girl.blend (Stored with Git LFS)
Binary file not shown.
Binary file not shown.
Binary file not shown.
After Width: | Height: | Size: 15 KiB |
Binary file not shown.
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,58 @@
|
||||||
|
[gd_resource type="AnimatedTexture" load_steps=18 format=3 uid="uid://2yoipvd107t1"]
|
||||||
|
|
||||||
|
[ext_resource type="Texture2D" uid="uid://chqekagriducf" path="res://assets/sprites/dope_explosion/explosion_01.png" id="1_d0hbp"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://djb4jup2y27wq" path="res://assets/sprites/dope_explosion/explosion_02.png" id="2_bjmaj"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://jevcsn483blb" path="res://assets/sprites/dope_explosion/explosion_11.png" id="3_21mo1"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://2rvfj0y7nebi" path="res://assets/sprites/dope_explosion/explosion_12.png" id="4_qthhk"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://dmd5ehswxcln" path="res://assets/sprites/dope_explosion/explosion_13.png" id="5_0684l"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://cdlqxt5nuhnh4" path="res://assets/sprites/dope_explosion/explosion_14.png" id="6_y6mm3"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://d8y1dfsg5bpn" path="res://assets/sprites/dope_explosion/explosion_15.png" id="7_4d5db"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://beq64w121e2qc" path="res://assets/sprites/dope_explosion/explosion_16.png" id="8_icpm3"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://cekhbr07t01y0" path="res://assets/sprites/dope_explosion/explosion_17.png" id="9_mv3mc"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://d1r2rxhg0ag4m" path="res://assets/sprites/dope_explosion/explosion_03.png" id="10_e4v3n"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://7b4mmhs7im5n" path="res://assets/sprites/dope_explosion/explosion_04.png" id="11_7y6m6"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://djgx3xsgidr0d" path="res://assets/sprites/dope_explosion/explosion_05.png" id="12_702rw"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://b5w0kigbqsnjd" path="res://assets/sprites/dope_explosion/explosion_06.png" id="13_orlo6"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://bwotlyctrl3vl" path="res://assets/sprites/dope_explosion/explosion_07.png" id="14_doi0c"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://b5jrnjaq065wu" path="res://assets/sprites/dope_explosion/explosion_08.png" id="15_8snwx"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://cw0whu63w450u" path="res://assets/sprites/dope_explosion/explosion_09.png" id="16_kbc1f"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://bj8isy502gjw6" path="res://assets/sprites/dope_explosion/explosion_10.png" id="17_ip4qp"]
|
||||||
|
|
||||||
|
[resource]
|
||||||
|
resource_local_to_scene = true
|
||||||
|
frames = 17
|
||||||
|
pause = true
|
||||||
|
frame_0/texture = ExtResource("1_d0hbp")
|
||||||
|
frame_0/duration = 0.1
|
||||||
|
frame_1/texture = ExtResource("2_bjmaj")
|
||||||
|
frame_1/duration = 0.1
|
||||||
|
frame_2/texture = ExtResource("10_e4v3n")
|
||||||
|
frame_2/duration = 0.1
|
||||||
|
frame_3/texture = ExtResource("11_7y6m6")
|
||||||
|
frame_3/duration = 0.1
|
||||||
|
frame_4/texture = ExtResource("12_702rw")
|
||||||
|
frame_4/duration = 0.1
|
||||||
|
frame_5/texture = ExtResource("13_orlo6")
|
||||||
|
frame_5/duration = 0.1
|
||||||
|
frame_6/texture = ExtResource("14_doi0c")
|
||||||
|
frame_6/duration = 0.1
|
||||||
|
frame_7/texture = ExtResource("15_8snwx")
|
||||||
|
frame_7/duration = 0.1
|
||||||
|
frame_8/texture = ExtResource("16_kbc1f")
|
||||||
|
frame_8/duration = 0.1
|
||||||
|
frame_9/texture = ExtResource("17_ip4qp")
|
||||||
|
frame_9/duration = 0.1
|
||||||
|
frame_10/texture = ExtResource("3_21mo1")
|
||||||
|
frame_10/duration = 0.1
|
||||||
|
frame_11/texture = ExtResource("4_qthhk")
|
||||||
|
frame_11/duration = 0.1
|
||||||
|
frame_12/texture = ExtResource("5_0684l")
|
||||||
|
frame_12/duration = 0.1
|
||||||
|
frame_13/texture = ExtResource("6_y6mm3")
|
||||||
|
frame_13/duration = 0.1
|
||||||
|
frame_14/texture = ExtResource("7_4d5db")
|
||||||
|
frame_14/duration = 0.1
|
||||||
|
frame_15/texture = ExtResource("8_icpm3")
|
||||||
|
frame_15/duration = 0.1
|
||||||
|
frame_16/texture = ExtResource("9_mv3mc")
|
||||||
|
frame_16/duration = 0.1
|
Binary file not shown.
|
@ -0,0 +1,35 @@
|
||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://chqekagriducf"
|
||||||
|
path.s3tc="res://.godot/imported/explosion_01.png-ea15c98c46d7ced9a98a3d938aafa3d6.s3tc.ctex"
|
||||||
|
metadata={
|
||||||
|
"imported_formats": ["s3tc_bptc"],
|
||||||
|
"vram_texture": true
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://assets/sprites/dope_explosion/explosion_01.png"
|
||||||
|
dest_files=["res://.godot/imported/explosion_01.png-ea15c98c46d7ced9a98a3d938aafa3d6.s3tc.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=2
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=true
|
||||||
|
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=0
|
Binary file not shown.
|
@ -0,0 +1,35 @@
|
||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://djb4jup2y27wq"
|
||||||
|
path.s3tc="res://.godot/imported/explosion_02.png-6bdf44084d88475de4755061ef9c774f.s3tc.ctex"
|
||||||
|
metadata={
|
||||||
|
"imported_formats": ["s3tc_bptc"],
|
||||||
|
"vram_texture": true
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://assets/sprites/dope_explosion/explosion_02.png"
|
||||||
|
dest_files=["res://.godot/imported/explosion_02.png-6bdf44084d88475de4755061ef9c774f.s3tc.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=2
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=true
|
||||||
|
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=0
|
Binary file not shown.
|
@ -0,0 +1,35 @@
|
||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://d1r2rxhg0ag4m"
|
||||||
|
path.s3tc="res://.godot/imported/explosion_03.png-3741482b47d48f53c7163e411676c921.s3tc.ctex"
|
||||||
|
metadata={
|
||||||
|
"imported_formats": ["s3tc_bptc"],
|
||||||
|
"vram_texture": true
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://assets/sprites/dope_explosion/explosion_03.png"
|
||||||
|
dest_files=["res://.godot/imported/explosion_03.png-3741482b47d48f53c7163e411676c921.s3tc.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=2
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=true
|
||||||
|
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=0
|
Binary file not shown.
|
@ -0,0 +1,35 @@
|
||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://7b4mmhs7im5n"
|
||||||
|
path.s3tc="res://.godot/imported/explosion_04.png-29690fff39e4940b97828e9d3a7201c5.s3tc.ctex"
|
||||||
|
metadata={
|
||||||
|
"imported_formats": ["s3tc_bptc"],
|
||||||
|
"vram_texture": true
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://assets/sprites/dope_explosion/explosion_04.png"
|
||||||
|
dest_files=["res://.godot/imported/explosion_04.png-29690fff39e4940b97828e9d3a7201c5.s3tc.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=2
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=true
|
||||||
|
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=0
|
Binary file not shown.
|
@ -0,0 +1,35 @@
|
||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://djgx3xsgidr0d"
|
||||||
|
path.s3tc="res://.godot/imported/explosion_05.png-d7d4f42d242024b84d657d700a7397a3.s3tc.ctex"
|
||||||
|
metadata={
|
||||||
|
"imported_formats": ["s3tc_bptc"],
|
||||||
|
"vram_texture": true
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://assets/sprites/dope_explosion/explosion_05.png"
|
||||||
|
dest_files=["res://.godot/imported/explosion_05.png-d7d4f42d242024b84d657d700a7397a3.s3tc.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=2
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=true
|
||||||
|
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=0
|
Binary file not shown.
|
@ -0,0 +1,35 @@
|
||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://b5w0kigbqsnjd"
|
||||||
|
path.s3tc="res://.godot/imported/explosion_06.png-31d0edf502b444bb0800a8140e9a9e34.s3tc.ctex"
|
||||||
|
metadata={
|
||||||
|
"imported_formats": ["s3tc_bptc"],
|
||||||
|
"vram_texture": true
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://assets/sprites/dope_explosion/explosion_06.png"
|
||||||
|
dest_files=["res://.godot/imported/explosion_06.png-31d0edf502b444bb0800a8140e9a9e34.s3tc.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=2
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=true
|
||||||
|
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=0
|
Binary file not shown.
|
@ -0,0 +1,35 @@
|
||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://bwotlyctrl3vl"
|
||||||
|
path.s3tc="res://.godot/imported/explosion_07.png-2456b0502621a22c875dd250014514e0.s3tc.ctex"
|
||||||
|
metadata={
|
||||||
|
"imported_formats": ["s3tc_bptc"],
|
||||||
|
"vram_texture": true
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://assets/sprites/dope_explosion/explosion_07.png"
|
||||||
|
dest_files=["res://.godot/imported/explosion_07.png-2456b0502621a22c875dd250014514e0.s3tc.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=2
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=true
|
||||||
|
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=0
|
Binary file not shown.
|
@ -0,0 +1,35 @@
|
||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://b5jrnjaq065wu"
|
||||||
|
path.s3tc="res://.godot/imported/explosion_08.png-103ad47e718348f9a399144a1f0bc1be.s3tc.ctex"
|
||||||
|
metadata={
|
||||||
|
"imported_formats": ["s3tc_bptc"],
|
||||||
|
"vram_texture": true
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://assets/sprites/dope_explosion/explosion_08.png"
|
||||||
|
dest_files=["res://.godot/imported/explosion_08.png-103ad47e718348f9a399144a1f0bc1be.s3tc.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=2
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=true
|
||||||
|
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=0
|
Binary file not shown.
|
@ -0,0 +1,35 @@
|
||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://cw0whu63w450u"
|
||||||
|
path.s3tc="res://.godot/imported/explosion_09.png-3cbb649bbd414406620d278bd39066c9.s3tc.ctex"
|
||||||
|
metadata={
|
||||||
|
"imported_formats": ["s3tc_bptc"],
|
||||||
|
"vram_texture": true
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://assets/sprites/dope_explosion/explosion_09.png"
|
||||||
|
dest_files=["res://.godot/imported/explosion_09.png-3cbb649bbd414406620d278bd39066c9.s3tc.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=2
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=true
|
||||||
|
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=0
|
Binary file not shown.
|
@ -0,0 +1,35 @@
|
||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://bj8isy502gjw6"
|
||||||
|
path.s3tc="res://.godot/imported/explosion_10.png-57fecff27a473611c5a8c1e26629554f.s3tc.ctex"
|
||||||
|
metadata={
|
||||||
|
"imported_formats": ["s3tc_bptc"],
|
||||||
|
"vram_texture": true
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://assets/sprites/dope_explosion/explosion_10.png"
|
||||||
|
dest_files=["res://.godot/imported/explosion_10.png-57fecff27a473611c5a8c1e26629554f.s3tc.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=2
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=true
|
||||||
|
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=0
|
Binary file not shown.
|
@ -0,0 +1,35 @@
|
||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://jevcsn483blb"
|
||||||
|
path.s3tc="res://.godot/imported/explosion_11.png-31268dcc8dd3fde767054c54543a85a0.s3tc.ctex"
|
||||||
|
metadata={
|
||||||
|
"imported_formats": ["s3tc_bptc"],
|
||||||
|
"vram_texture": true
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://assets/sprites/dope_explosion/explosion_11.png"
|
||||||
|
dest_files=["res://.godot/imported/explosion_11.png-31268dcc8dd3fde767054c54543a85a0.s3tc.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=2
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=true
|
||||||
|
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=0
|
Binary file not shown.
|
@ -0,0 +1,35 @@
|
||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://2rvfj0y7nebi"
|
||||||
|
path.s3tc="res://.godot/imported/explosion_12.png-17a5c2c7984eae5f9ce67d887299262b.s3tc.ctex"
|
||||||
|
metadata={
|
||||||
|
"imported_formats": ["s3tc_bptc"],
|
||||||
|
"vram_texture": true
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://assets/sprites/dope_explosion/explosion_12.png"
|
||||||
|
dest_files=["res://.godot/imported/explosion_12.png-17a5c2c7984eae5f9ce67d887299262b.s3tc.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=2
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=true
|
||||||
|
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=0
|
Binary file not shown.
|
@ -0,0 +1,35 @@
|
||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://dmd5ehswxcln"
|
||||||
|
path.s3tc="res://.godot/imported/explosion_13.png-d47096656d64fa3031e82fbf818b2193.s3tc.ctex"
|
||||||
|
metadata={
|
||||||
|
"imported_formats": ["s3tc_bptc"],
|
||||||
|
"vram_texture": true
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://assets/sprites/dope_explosion/explosion_13.png"
|
||||||
|
dest_files=["res://.godot/imported/explosion_13.png-d47096656d64fa3031e82fbf818b2193.s3tc.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=2
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=true
|
||||||
|
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=0
|
Binary file not shown.
|
@ -0,0 +1,35 @@
|
||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://cdlqxt5nuhnh4"
|
||||||
|
path.s3tc="res://.godot/imported/explosion_14.png-a88792680320ae6175944801610075e0.s3tc.ctex"
|
||||||
|
metadata={
|
||||||
|
"imported_formats": ["s3tc_bptc"],
|
||||||
|
"vram_texture": true
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://assets/sprites/dope_explosion/explosion_14.png"
|
||||||
|
dest_files=["res://.godot/imported/explosion_14.png-a88792680320ae6175944801610075e0.s3tc.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=2
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=true
|
||||||
|
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=0
|
Binary file not shown.
|
@ -0,0 +1,35 @@
|
||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://d8y1dfsg5bpn"
|
||||||
|
path.s3tc="res://.godot/imported/explosion_15.png-f284e8ba353bc8d9357cc6cd40a570a5.s3tc.ctex"
|
||||||
|
metadata={
|
||||||
|
"imported_formats": ["s3tc_bptc"],
|
||||||
|
"vram_texture": true
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://assets/sprites/dope_explosion/explosion_15.png"
|
||||||
|
dest_files=["res://.godot/imported/explosion_15.png-f284e8ba353bc8d9357cc6cd40a570a5.s3tc.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=2
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=true
|
||||||
|
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=0
|
Binary file not shown.
|
@ -0,0 +1,35 @@
|
||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://beq64w121e2qc"
|
||||||
|
path.s3tc="res://.godot/imported/explosion_16.png-c103231805ba5f296cbaa36dd356c168.s3tc.ctex"
|
||||||
|
metadata={
|
||||||
|
"imported_formats": ["s3tc_bptc"],
|
||||||
|
"vram_texture": true
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://assets/sprites/dope_explosion/explosion_16.png"
|
||||||
|
dest_files=["res://.godot/imported/explosion_16.png-c103231805ba5f296cbaa36dd356c168.s3tc.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=2
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=true
|
||||||
|
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=0
|
Binary file not shown.
|
@ -0,0 +1,35 @@
|
||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://cekhbr07t01y0"
|
||||||
|
path.s3tc="res://.godot/imported/explosion_17.png-cafb80a5021d1b819bf52a4094e32be5.s3tc.ctex"
|
||||||
|
metadata={
|
||||||
|
"imported_formats": ["s3tc_bptc"],
|
||||||
|
"vram_texture": true
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://assets/sprites/dope_explosion/explosion_17.png"
|
||||||
|
dest_files=["res://.godot/imported/explosion_17.png-cafb80a5021d1b819bf52a4094e32be5.s3tc.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=2
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=true
|
||||||
|
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=0
|
|
@ -21,6 +21,11 @@ func hold_right(node: Node3D = null) -> void:
|
||||||
node.transform = Transform3D.IDENTITY
|
node.transform = Transform3D.IDENTITY
|
||||||
|
|
||||||
|
|
||||||
|
## Set this character's color. Implementation-dependent.
|
||||||
|
func set_color(color: Color) -> void:
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
func reset() -> void:
|
func reset() -> void:
|
||||||
animation_state.start("stand_to_idle")
|
animation_state.start("stand_to_idle")
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,16 @@
|
||||||
|
extends CharacterController
|
||||||
|
|
||||||
|
const SHIRT_MAT := preload("res://assets/models/characters/gfolf_girl/Shirt.tres")
|
||||||
|
const SHIRT_SURFACE_ID := 0
|
||||||
|
const ARM_SURFACE_ID := 0
|
||||||
|
|
||||||
|
@onready var shirt: MeshInstance3D = $Armature/Skeleton3D/Shirt
|
||||||
|
@onready var arm: MeshInstance3D = $Armature/Skeleton3D/Arm_L
|
||||||
|
|
||||||
|
|
||||||
|
func set_color(color: Color) -> void:
|
||||||
|
var material: BaseMaterial3D = SHIRT_MAT.duplicate()
|
||||||
|
material.resource_local_to_scene = true
|
||||||
|
material.albedo_color = color
|
||||||
|
shirt.set_surface_override_material(SHIRT_SURFACE_ID, material)
|
||||||
|
arm.set_surface_override_material(ARM_SURFACE_ID, material)
|
|
@ -1,7 +1,7 @@
|
||||||
[gd_scene load_steps=22 format=3 uid="uid://1s3gywmoi20e"]
|
[gd_scene load_steps=22 format=3 uid="uid://1s3gywmoi20e"]
|
||||||
|
|
||||||
[ext_resource type="PackedScene" uid="uid://ha6jxf4v5845" path="res://assets/models/characters/gfolf_girl/gfolf_girl.gltf" id="1_j80rr"]
|
[ext_resource type="PackedScene" uid="uid://ha6jxf4v5845" path="res://assets/models/characters/gfolf_girl/gfolf_girl.gltf" id="1_j80rr"]
|
||||||
[ext_resource type="Script" path="res://src/characters/player_characters/character_controller.gd" id="2_7o84v"]
|
[ext_resource type="Script" path="res://src/characters/player_characters/gfolf_girl/gfolf_girl.gd" id="2_y16an"]
|
||||||
[ext_resource type="Script" path="res://src/util/random_timer.gd" id="3_ex68g"]
|
[ext_resource type="Script" path="res://src/util/random_timer.gd" id="3_ex68g"]
|
||||||
|
|
||||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_fokhu"]
|
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_fokhu"]
|
||||||
|
@ -122,7 +122,7 @@ _data = {
|
||||||
}
|
}
|
||||||
|
|
||||||
[node name="GfolfGirl" instance=ExtResource("1_j80rr")]
|
[node name="GfolfGirl" instance=ExtResource("1_j80rr")]
|
||||||
script = ExtResource("2_7o84v")
|
script = ExtResource("2_y16an")
|
||||||
|
|
||||||
[node name="Armature" parent="." index="0"]
|
[node name="Armature" parent="." index="0"]
|
||||||
transform = Transform3D(0.2, 0, 0, 0, 0.2, 0, 0, 0, 0.2, 0, 0, 0)
|
transform = Transform3D(0.2, 0, 0, 0, 0.2, 0, 0, 0, 0.2, 0, 0, 0)
|
||||||
|
@ -169,7 +169,7 @@ bones/23/scale = Vector3(1, 1, 1)
|
||||||
visible = false
|
visible = false
|
||||||
|
|
||||||
[node name="BoneAttachment3D" type="BoneAttachment3D" parent="Armature/Skeleton3D" index="6"]
|
[node name="BoneAttachment3D" type="BoneAttachment3D" parent="Armature/Skeleton3D" index="6"]
|
||||||
transform = Transform3D(-0.0322545, -0.997872, -0.0566733, 0.99947, -0.0324594, 0.00269896, -0.00453261, -0.0565562, 0.998389, -2.5177, 5.22011, -0.516371)
|
transform = Transform3D(-0.0322548, -0.997872, -0.0566729, 0.999469, -0.0324597, 0.00269911, -0.00453275, -0.0565558, 0.998389, -2.5177, 5.22011, -0.51637)
|
||||||
bone_name = "Hand.R"
|
bone_name = "Hand.R"
|
||||||
bone_idx = 11
|
bone_idx = 11
|
||||||
|
|
||||||
|
@ -179,7 +179,6 @@ transform = Transform3D(0.934826, 0.266239, -0.23498, -0.336326, 0.876157, -0.34
|
||||||
|
|
||||||
[node name="ReferenceClub" type="MeshInstance3D" parent="Armature/Skeleton3D/BoneAttachment3D/RightHandGrip" index="0"]
|
[node name="ReferenceClub" type="MeshInstance3D" parent="Armature/Skeleton3D/BoneAttachment3D/RightHandGrip" index="0"]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.205, 0)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.205, 0)
|
||||||
visible = false
|
|
||||||
mesh = SubResource("BoxMesh_363n0")
|
mesh = SubResource("BoxMesh_363n0")
|
||||||
skeleton = NodePath("../..")
|
skeleton = NodePath("../..")
|
||||||
|
|
||||||
|
|
|
@ -44,6 +44,9 @@ const IRON_DAMPING := 9999.0
|
||||||
## Base damage inflicted on impact with a player
|
## Base damage inflicted on impact with a player
|
||||||
@export var base_damage := 15.0
|
@export var base_damage := 15.0
|
||||||
|
|
||||||
|
## Scaling factor for additional force-based damage
|
||||||
|
@export var damage_force_scale := 0.01
|
||||||
|
|
||||||
var _last_contact_normal: Vector3 = Vector3.UP
|
var _last_contact_normal: Vector3 = Vector3.UP
|
||||||
var _position_on_last_wake: Vector3
|
var _position_on_last_wake: Vector3
|
||||||
var _awake := false
|
var _awake := false
|
||||||
|
@ -64,6 +67,11 @@ func enter_water() -> void:
|
||||||
entered_water.emit()
|
entered_water.emit()
|
||||||
|
|
||||||
|
|
||||||
|
func get_damage() -> float:
|
||||||
|
print("velocity: ", linear_velocity.length())
|
||||||
|
return base_damage + linear_velocity.length_squared() * damage_force_scale
|
||||||
|
|
||||||
|
|
||||||
func _total_terrain_angular_damping() -> float:
|
func _total_terrain_angular_damping() -> float:
|
||||||
return _zones.reduce(
|
return _zones.reduce(
|
||||||
func(a: float, b: BallZone) -> float: return a + b.terrain_angular_damping, 0.0
|
func(a: float, b: BallZone) -> float: return a + b.terrain_angular_damping, 0.0
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
[gd_resource type="PhysicsMaterial" format=3 uid="uid://3bih72l068ic"]
|
[gd_resource type="PhysicsMaterial" format=3 uid="uid://3bih72l068ic"]
|
||||||
|
|
||||||
[resource]
|
[resource]
|
||||||
friction = 0.8
|
|
||||||
bounce = 0.5
|
bounce = 0.5
|
||||||
|
|
|
@ -49,6 +49,7 @@ size = Vector2(0.4, 0.4)
|
||||||
|
|
||||||
[node name="PlasmaBall" instance=ExtResource("1_yh4fp")]
|
[node name="PlasmaBall" instance=ExtResource("1_yh4fp")]
|
||||||
script = ExtResource("2_pdts3")
|
script = ExtResource("2_pdts3")
|
||||||
|
base_damage = 30.0
|
||||||
|
|
||||||
[node name="PlasmaFireEffect" type="GPUParticles3D" parent="BallMesh" index="0"]
|
[node name="PlasmaFireEffect" type="GPUParticles3D" parent="BallMesh" index="0"]
|
||||||
amount = 20
|
amount = 20
|
||||||
|
|
|
@ -0,0 +1,21 @@
|
||||||
|
[gd_resource type="Resource" script_class="WorldPlayer" load_steps=6 format=3 uid="uid://b5j0lmo4jayk4"]
|
||||||
|
|
||||||
|
[ext_resource type="Resource" uid="uid://c1pnqsddvey3m" path="res://src/equipment/clubs/drivers/debug_driver.tres" id="1_nb6c3"]
|
||||||
|
[ext_resource type="Resource" uid="uid://ck17u5yn6k0bi" path="res://src/equipment/clubs/irons/debug_iron.tres" id="2_0ti3p"]
|
||||||
|
[ext_resource type="Resource" uid="uid://dagld0q5krapu" path="res://src/equipment/clubs/putters/debug_putter.tres" id="3_274x5"]
|
||||||
|
[ext_resource type="Script" path="res://src/player/world_player.gd" id="4_vid1t"]
|
||||||
|
[ext_resource type="Resource" uid="uid://dthtc1no2c4wy" path="res://src/equipment/clubs/wedges/debug_wedge.tres" id="5_hfqcn"]
|
||||||
|
|
||||||
|
[resource]
|
||||||
|
script = ExtResource("4_vid1t")
|
||||||
|
life = 100.0
|
||||||
|
name = "Orange Gfolfer"
|
||||||
|
color = Color(1, 0.748, 0.44, 1)
|
||||||
|
driver = ExtResource("1_nb6c3")
|
||||||
|
iron = ExtResource("2_0ti3p")
|
||||||
|
wedge = ExtResource("5_hfqcn")
|
||||||
|
putter = ExtResource("3_274x5")
|
||||||
|
_balls = {
|
||||||
|
1: -1,
|
||||||
|
2: 5
|
||||||
|
}
|
|
@ -10,7 +10,7 @@
|
||||||
script = ExtResource("4_8ybyj")
|
script = ExtResource("4_8ybyj")
|
||||||
life = 100.0
|
life = 100.0
|
||||||
name = "DEBUG Gfolfer"
|
name = "DEBUG Gfolfer"
|
||||||
color = Color(1, 0.439216, 0.439216, 1)
|
color = Color(0.48, 1, 1, 1)
|
||||||
driver = ExtResource("1_sn8fd")
|
driver = ExtResource("1_sn8fd")
|
||||||
iron = ExtResource("2_piku2")
|
iron = ExtResource("2_piku2")
|
||||||
wedge = ExtResource("5_wm4ae")
|
wedge = ExtResource("5_wm4ae")
|
||||||
|
|
|
@ -154,8 +154,11 @@ var _tracking_camera: OrbitalCamera
|
||||||
@onready var putt_ref: RayCast3D = %PuttRef
|
@onready var putt_ref: RayCast3D = %PuttRef
|
||||||
@onready var putt_arrow: Node3D = %PuttArrow
|
@onready var putt_arrow: Node3D = %PuttArrow
|
||||||
|
|
||||||
|
@onready var downswing_timer: Timer = %DownswingTimer
|
||||||
@onready var ball_return_timer: Timer = %BallReturnTimer
|
@onready var ball_return_timer: Timer = %BallReturnTimer
|
||||||
|
|
||||||
|
@onready var explosion_animation: AnimationPlayer = %ExplosionAnimation
|
||||||
|
|
||||||
@onready var camera_distance := zoom.position.z:
|
@onready var camera_distance := zoom.position.z:
|
||||||
set = _set_camera_distance
|
set = _set_camera_distance
|
||||||
|
|
||||||
|
@ -173,6 +176,8 @@ func _ready() -> void:
|
||||||
world.ui.add_player_hud(hud)
|
world.ui.add_player_hud(hud)
|
||||||
ball_type = initial_ball
|
ball_type = initial_ball
|
||||||
club = initial_club
|
club = initial_club
|
||||||
|
character.set_color(player.color)
|
||||||
|
_on_phase_change(phase)
|
||||||
|
|
||||||
|
|
||||||
func _set_camera_distance(value: float) -> void:
|
func _set_camera_distance(value: float) -> void:
|
||||||
|
@ -241,13 +246,14 @@ func take_shot() -> void:
|
||||||
var impulse := get_shot_impulse(shot_power)
|
var impulse := get_shot_impulse(shot_power)
|
||||||
print_debug("Shot impulse: ", impulse, "; ", impulse.length(), " N*s")
|
print_debug("Shot impulse: ", impulse, "; ", impulse.length(), " N*s")
|
||||||
|
|
||||||
|
# Curve the curve
|
||||||
var curve := shot_ref.global_basis.x.normalized() * shot_curve
|
var curve := shot_ref.global_basis.x.normalized() * shot_curve
|
||||||
|
|
||||||
# Position where the ball is hit (imparts spin)
|
# Position where the ball is hit (imparts spin)
|
||||||
var offset := curve * 0.001
|
var offset := curve * 0.001
|
||||||
print_debug("Shot offset: ", offset, "; ", offset.length(), " m")
|
print_debug("Shot offset: ", offset, "; ", offset.length(), " m")
|
||||||
# Rotate impulse
|
# Rotate impulse
|
||||||
impulse = impulse.rotated(Vector3.UP, -shot_curve * CURVE_INFLUENCE)
|
impulse = impulse.rotated(Vector3.UP, -shot_curve * CURVE_INFLUENCE * shot_power)
|
||||||
|
|
||||||
if game_ball:
|
if game_ball:
|
||||||
game_ball.iron_ball = club == Club.Type.IRON
|
game_ball.iron_ball = club == Club.Type.IRON
|
||||||
|
@ -264,6 +270,7 @@ func _show_shot_projection() -> void:
|
||||||
if not game_ball:
|
if not game_ball:
|
||||||
return
|
return
|
||||||
|
|
||||||
|
shot_projection.putt_projection = club == Club.Type.PUTTER
|
||||||
shot_projection.initial_speed = 1
|
shot_projection.initial_speed = 1
|
||||||
shot_projection.basis = shot_ref.basis.orthonormalized()
|
shot_projection.basis = shot_ref.basis.orthonormalized()
|
||||||
var shot_speed := get_shot_impulse(1.0).length() / game_ball.mass
|
var shot_speed := get_shot_impulse(1.0).length() / game_ball.mass
|
||||||
|
@ -414,10 +421,9 @@ func _on_phase_change(new_phase: Phase) -> void:
|
||||||
hud.curve_bar.show()
|
hud.curve_bar.show()
|
||||||
hud.start_curve_bar()
|
hud.start_curve_bar()
|
||||||
Phase.DOWNSWING:
|
Phase.DOWNSWING:
|
||||||
hud.power_bar.hide()
|
hud.gauge_flourish()
|
||||||
hud.curve_bar.hide()
|
|
||||||
character.downswing()
|
character.downswing()
|
||||||
shot_animation.play("swing_delay") # calls `take_shot`
|
downswing_timer.start()
|
||||||
Phase.SHOT:
|
Phase.SHOT:
|
||||||
hud.power_bar.hide()
|
hud.power_bar.hide()
|
||||||
hud.curve_bar.hide()
|
hud.curve_bar.hide()
|
||||||
|
@ -437,6 +443,7 @@ func _on_phase_change(new_phase: Phase) -> void:
|
||||||
Phase.FINISHED:
|
Phase.FINISHED:
|
||||||
hud.power_bar.hide()
|
hud.power_bar.hide()
|
||||||
hud.curve_bar.hide()
|
hud.curve_bar.hide()
|
||||||
|
hud.hide_hud()
|
||||||
finished.emit(self)
|
finished.emit(self)
|
||||||
|
|
||||||
|
|
||||||
|
@ -576,7 +583,12 @@ func _on_ball_return_timer_timeout() -> void:
|
||||||
|
|
||||||
func _on_hitbox_ball_collision(ball: GameBall) -> void:
|
func _on_hitbox_ball_collision(ball: GameBall) -> void:
|
||||||
# TODO play animation
|
# TODO play animation
|
||||||
player.life -= ball.base_damage
|
var damage := ball.get_damage()
|
||||||
|
player.life -= damage
|
||||||
|
game.viewport.hit_lag_big()
|
||||||
|
game.viewport.screen_shake(damage, 0.4)
|
||||||
|
explosion_animation.play("explode")
|
||||||
|
# TODO kinematic collisions
|
||||||
|
|
||||||
|
|
||||||
## Create a new instance for the given player.
|
## Create a new instance for the given player.
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
[gd_scene load_steps=17 format=3 uid="uid://cy7t2tc4y3b4"]
|
[gd_scene load_steps=22 format=3 uid="uid://cy7t2tc4y3b4"]
|
||||||
|
|
||||||
[ext_resource type="Script" path="res://src/player/shot_setup/shot_setup.gd" id="1_r6ei4"]
|
[ext_resource type="Script" path="res://src/player/shot_setup/shot_setup.gd" id="1_r6ei4"]
|
||||||
[ext_resource type="Script" path="res://src/player/shot_setup/ball_point.gd" id="2_e6i3g"]
|
[ext_resource type="Script" path="res://src/player/shot_setup/ball_point.gd" id="2_e6i3g"]
|
||||||
|
@ -7,6 +7,7 @@
|
||||||
[ext_resource type="PackedScene" uid="uid://fht6j87o8ecr" path="res://src/ui/3d/projectile_arc/projectile_arc.tscn" id="4_ry2ho"]
|
[ext_resource type="PackedScene" uid="uid://fht6j87o8ecr" path="res://src/ui/3d/projectile_arc/projectile_arc.tscn" id="4_ry2ho"]
|
||||||
[ext_resource type="PackedScene" uid="uid://dbdul15c4oblg" path="res://src/ui/3d/projected_target.tscn" id="6_mynqj"]
|
[ext_resource type="PackedScene" uid="uid://dbdul15c4oblg" path="res://src/ui/3d/projected_target.tscn" id="6_mynqj"]
|
||||||
[ext_resource type="Script" path="res://src/player/shot_setup/hitbox.gd" id="7_uh8kn"]
|
[ext_resource type="Script" path="res://src/player/shot_setup/hitbox.gd" id="7_uh8kn"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://2yoipvd107t1" path="res://assets/sprites/dope_explosion/dope_explosion.tres" id="8_5ghmo"]
|
||||||
|
|
||||||
[sub_resource type="Animation" id="Animation_ug2a7"]
|
[sub_resource type="Animation" id="Animation_ug2a7"]
|
||||||
length = 0.001
|
length = 0.001
|
||||||
|
@ -169,35 +170,89 @@ tracks/2/keys = {
|
||||||
}]
|
}]
|
||||||
}
|
}
|
||||||
|
|
||||||
[sub_resource type="Animation" id="Animation_u8k07"]
|
|
||||||
resource_name = "swing_delay"
|
|
||||||
length = 0.0667
|
|
||||||
step = 0.01
|
|
||||||
tracks/0/type = "method"
|
|
||||||
tracks/0/imported = false
|
|
||||||
tracks/0/enabled = true
|
|
||||||
tracks/0/path = NodePath("%Direction/..")
|
|
||||||
tracks/0/interp = 1
|
|
||||||
tracks/0/loop_wrap = true
|
|
||||||
tracks/0/keys = {
|
|
||||||
"times": PackedFloat32Array(0.0667),
|
|
||||||
"transitions": PackedFloat32Array(1),
|
|
||||||
"values": [{
|
|
||||||
"args": [],
|
|
||||||
"method": &"finish_downswing"
|
|
||||||
}]
|
|
||||||
}
|
|
||||||
|
|
||||||
[sub_resource type="AnimationLibrary" id="AnimationLibrary_u78hq"]
|
[sub_resource type="AnimationLibrary" id="AnimationLibrary_u78hq"]
|
||||||
_data = {
|
_data = {
|
||||||
"RESET": SubResource("Animation_oks0y"),
|
"RESET": SubResource("Animation_oks0y"),
|
||||||
"shoot": SubResource("Animation_e65hh"),
|
"shoot": SubResource("Animation_e65hh")
|
||||||
"swing_delay": SubResource("Animation_u8k07")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
[sub_resource type="SphereShape3D" id="SphereShape3D_xvvdi"]
|
[sub_resource type="SphereShape3D" id="SphereShape3D_xvvdi"]
|
||||||
radius = 1.5
|
radius = 1.5
|
||||||
|
|
||||||
|
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_4n2rd"]
|
||||||
|
transparency = 1
|
||||||
|
shading_mode = 0
|
||||||
|
albedo_texture = ExtResource("8_5ghmo")
|
||||||
|
texture_filter = 4
|
||||||
|
billboard_mode = 1
|
||||||
|
grow = true
|
||||||
|
grow_amount = 1.0
|
||||||
|
|
||||||
|
[sub_resource type="QuadMesh" id="QuadMesh_t34ji"]
|
||||||
|
material = SubResource("StandardMaterial3D_4n2rd")
|
||||||
|
size = Vector2(2.84, 4)
|
||||||
|
|
||||||
|
[sub_resource type="Animation" id="Animation_vahxw"]
|
||||||
|
length = 0.001
|
||||||
|
tracks/0/type = "value"
|
||||||
|
tracks/0/imported = false
|
||||||
|
tracks/0/enabled = true
|
||||||
|
tracks/0/path = NodePath("ExplosionMesh:mesh:material:albedo_texture:pause")
|
||||||
|
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 = "value"
|
||||||
|
tracks/1/imported = false
|
||||||
|
tracks/1/enabled = true
|
||||||
|
tracks/1/path = NodePath("ExplosionMesh:visible")
|
||||||
|
tracks/1/interp = 1
|
||||||
|
tracks/1/loop_wrap = true
|
||||||
|
tracks/1/keys = {
|
||||||
|
"times": PackedFloat32Array(0),
|
||||||
|
"transitions": PackedFloat32Array(1),
|
||||||
|
"update": 1,
|
||||||
|
"values": [false]
|
||||||
|
}
|
||||||
|
|
||||||
|
[sub_resource type="Animation" id="Animation_bv1ov"]
|
||||||
|
resource_name = "explode"
|
||||||
|
length = 1.618
|
||||||
|
tracks/0/type = "value"
|
||||||
|
tracks/0/imported = false
|
||||||
|
tracks/0/enabled = true
|
||||||
|
tracks/0/path = NodePath("ExplosionMesh:mesh:material:albedo_texture:pause")
|
||||||
|
tracks/0/interp = 1
|
||||||
|
tracks/0/loop_wrap = true
|
||||||
|
tracks/0/keys = {
|
||||||
|
"times": PackedFloat32Array(0, 1.618),
|
||||||
|
"transitions": PackedFloat32Array(1, 1),
|
||||||
|
"update": 1,
|
||||||
|
"values": [false, true]
|
||||||
|
}
|
||||||
|
tracks/1/type = "value"
|
||||||
|
tracks/1/imported = false
|
||||||
|
tracks/1/enabled = true
|
||||||
|
tracks/1/path = NodePath("ExplosionMesh:visible")
|
||||||
|
tracks/1/interp = 1
|
||||||
|
tracks/1/loop_wrap = true
|
||||||
|
tracks/1/keys = {
|
||||||
|
"times": PackedFloat32Array(0, 1.618),
|
||||||
|
"transitions": PackedFloat32Array(1, 1),
|
||||||
|
"update": 1,
|
||||||
|
"values": [true, false]
|
||||||
|
}
|
||||||
|
|
||||||
|
[sub_resource type="AnimationLibrary" id="AnimationLibrary_dg262"]
|
||||||
|
_data = {
|
||||||
|
"RESET": SubResource("Animation_vahxw"),
|
||||||
|
"explode": SubResource("Animation_bv1ov")
|
||||||
|
}
|
||||||
|
|
||||||
[node name="ShotSetup" type="Node3D"]
|
[node name="ShotSetup" type="Node3D"]
|
||||||
script = ExtResource("1_r6ei4")
|
script = ExtResource("1_r6ei4")
|
||||||
|
|
||||||
|
@ -340,6 +395,11 @@ libraries = {
|
||||||
"": SubResource("AnimationLibrary_u78hq")
|
"": SubResource("AnimationLibrary_u78hq")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[node name="DownswingTimer" type="Timer" parent="."]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
wait_time = 0.42
|
||||||
|
one_shot = true
|
||||||
|
|
||||||
[node name="BallReturnTimer" type="Timer" parent="."]
|
[node name="BallReturnTimer" type="Timer" parent="."]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
one_shot = true
|
one_shot = true
|
||||||
|
@ -350,7 +410,20 @@ script = ExtResource("7_uh8kn")
|
||||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Hitbox"]
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="Hitbox"]
|
||||||
shape = SubResource("SphereShape3D_xvvdi")
|
shape = SubResource("SphereShape3D_xvvdi")
|
||||||
|
|
||||||
|
[node name="ExplosionMesh" type="MeshInstance3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0)
|
||||||
|
visible = false
|
||||||
|
mesh = SubResource("QuadMesh_t34ji")
|
||||||
|
|
||||||
|
[node name="ExplosionAnimation" type="AnimationPlayer" parent="ExplosionMesh"]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
root_node = NodePath("../..")
|
||||||
|
libraries = {
|
||||||
|
"": SubResource("AnimationLibrary_dg262")
|
||||||
|
}
|
||||||
|
|
||||||
[connection signal="ball_changed" from="BallPoint" to="." method="_on_game_ball_changed"]
|
[connection signal="ball_changed" from="BallPoint" to="." method="_on_game_ball_changed"]
|
||||||
|
[connection signal="timeout" from="DownswingTimer" to="." method="finish_downswing"]
|
||||||
[connection signal="timeout" from="BallReturnTimer" to="." method="_on_ball_return_timer_timeout"]
|
[connection signal="timeout" from="BallReturnTimer" to="." method="_on_ball_return_timer_timeout"]
|
||||||
[connection signal="ball_collision" from="Hitbox" to="." method="_on_hitbox_ball_collision"]
|
[connection signal="ball_collision" from="Hitbox" to="." method="_on_hitbox_ball_collision"]
|
||||||
[connection signal="body_entered" from="Hitbox" to="Hitbox" method="_on_body_entered"]
|
[connection signal="body_entered" from="Hitbox" to="Hitbox" method="_on_body_entered"]
|
||||||
|
|
|
@ -0,0 +1,9 @@
|
||||||
|
shader_type canvas_item;
|
||||||
|
|
||||||
|
uniform vec4 flash_color: source_color = vec4(1.0);
|
||||||
|
|
||||||
|
void fragment() {
|
||||||
|
vec4 base_color = texture(TEXTURE, UV);
|
||||||
|
COLOR.rgb = mix(base_color.rgb, flash_color.rgb, flash_color.a);
|
||||||
|
COLOR.a = base_color.a;
|
||||||
|
}
|
|
@ -3,6 +3,11 @@ class_name ProjectileArc extends Node3D
|
||||||
##
|
##
|
||||||
## If this node has any children, they will be positioned wherever the projection ends.
|
## If this node has any children, they will be positioned wherever the projection ends.
|
||||||
|
|
||||||
|
## Constant attrition factor for putting collisions
|
||||||
|
## The actual velocity attrition is dependent on lots of factors
|
||||||
|
#const PUTT_ATTRITION := 0.75 # rough?
|
||||||
|
const PUTT_ATTRITION := 0.8325 # green?
|
||||||
|
|
||||||
## Initial speed of the projectile, in m/s.
|
## Initial speed of the projectile, in m/s.
|
||||||
## The projectile's initial direction vector is the negative Z direction relative to this node.
|
## The projectile's initial direction vector is the negative Z direction relative to this node.
|
||||||
@export var initial_speed := 1.0
|
@export var initial_speed := 1.0
|
||||||
|
@ -14,6 +19,8 @@ class_name ProjectileArc extends Node3D
|
||||||
@export var max_steps := 50
|
@export var max_steps := 50
|
||||||
## Ticks between each projection update. 0 means update every tick.
|
## Ticks between each projection update. 0 means update every tick.
|
||||||
@export var ticks_per_update := 0
|
@export var ticks_per_update := 0
|
||||||
|
## If enabled, project a linear putt instead of an arcing shot
|
||||||
|
@export var putt_projection := false
|
||||||
|
|
||||||
@export_category("Collision")
|
@export_category("Collision")
|
||||||
## Enables collision checking. Projection will end at the point where a collision is detected.
|
## Enables collision checking. Projection will end at the point where a collision is detected.
|
||||||
|
@ -27,12 +34,16 @@ class_name ProjectileArc extends Node3D
|
||||||
|
|
||||||
var _tick_counter := 0
|
var _tick_counter := 0
|
||||||
|
|
||||||
|
var _debug_points: Array[Vector3] = []
|
||||||
|
|
||||||
@onready var polygon: CSGPolygon3D = %Polygon
|
@onready var polygon: CSGPolygon3D = %Polygon
|
||||||
@onready var path: Path3D = %Path
|
@onready var path: Path3D = %Path
|
||||||
|
|
||||||
@onready var gravity: float = ProjectSettings.get_setting("physics/3d/default_gravity")
|
@onready var gravity: float = ProjectSettings.get_setting("physics/3d/default_gravity")
|
||||||
@onready var gravity_vec: Vector3 = ProjectSettings.get_setting("physics/3d/default_gravity_vector")
|
@onready var gravity_vec: Vector3 = ProjectSettings.get_setting("physics/3d/default_gravity_vector")
|
||||||
|
|
||||||
|
@onready var debug_draw: Control = %DebugDraw
|
||||||
|
|
||||||
|
|
||||||
func _process(_delta: float) -> void:
|
func _process(_delta: float) -> void:
|
||||||
if not visible:
|
if not visible:
|
||||||
|
@ -45,6 +56,8 @@ func _process(_delta: float) -> void:
|
||||||
return
|
return
|
||||||
_tick_counter = ticks_per_update
|
_tick_counter = ticks_per_update
|
||||||
|
|
||||||
|
_debug_points = []
|
||||||
|
|
||||||
# Rebuild path curve
|
# Rebuild path curve
|
||||||
path.global_basis = Basis.IDENTITY
|
path.global_basis = Basis.IDENTITY
|
||||||
path.curve.clear_points()
|
path.curve.clear_points()
|
||||||
|
@ -72,10 +85,15 @@ func _process(_delta: float) -> void:
|
||||||
var collision := space.intersect_ray(ray_params)
|
var collision := space.intersect_ray(ray_params)
|
||||||
if collision:
|
if collision:
|
||||||
# Set current position to collision point, so it will be added to the path
|
# Set current position to collision point, so it will be added to the path
|
||||||
# TODO: we could project further using the surface normal here...
|
|
||||||
pos = collision["position"]
|
pos = collision["position"]
|
||||||
# End projection!
|
_debug_points.append(pos)
|
||||||
break
|
if putt_projection:
|
||||||
|
var norm: Vector3 = (collision["normal"] as Vector3).normalized()
|
||||||
|
next_pos = pos + norm * 0.05
|
||||||
|
vel = PUTT_ATTRITION * (vel - 2 * norm * vel.dot(norm))
|
||||||
|
else:
|
||||||
|
# End projection!
|
||||||
|
break
|
||||||
|
|
||||||
pos = next_pos
|
pos = next_pos
|
||||||
|
|
||||||
|
@ -89,6 +107,8 @@ func _process(_delta: float) -> void:
|
||||||
node_3d.global_position = pos
|
node_3d.global_position = pos
|
||||||
node_3d.global_basis = Basis.IDENTITY
|
node_3d.global_basis = Basis.IDENTITY
|
||||||
|
|
||||||
|
(%DebugDraw as CanvasItem).queue_redraw()
|
||||||
|
|
||||||
|
|
||||||
func _on_visibility_changed() -> void:
|
func _on_visibility_changed() -> void:
|
||||||
# Force update as soon as visible
|
# Force update as soon as visible
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
[gd_scene load_steps=9 format=3 uid="uid://fht6j87o8ecr"]
|
[gd_scene load_steps=10 format=3 uid="uid://fht6j87o8ecr"]
|
||||||
|
|
||||||
[ext_resource type="Script" path="res://src/ui/3d/projectile_arc/projectile_arc.gd" id="1_vafqi"]
|
[ext_resource type="Script" path="res://src/ui/3d/projectile_arc/projectile_arc.gd" id="1_vafqi"]
|
||||||
[ext_resource type="Shader" path="res://src/shaders/plasma.gdshader" id="2_pi36v"]
|
[ext_resource type="Shader" path="res://src/shaders/plasma.gdshader" id="2_pi36v"]
|
||||||
|
|
||||||
[sub_resource type="Curve3D" id="Curve3D_rfv3d"]
|
[sub_resource type="Curve3D" id="Curve3D_sj0rs"]
|
||||||
|
|
||||||
[sub_resource type="Gradient" id="Gradient_28hbf"]
|
[sub_resource type="Gradient" id="Gradient_28hbf"]
|
||||||
offsets = PackedFloat32Array(0, 0.37193, 0.838596, 1)
|
offsets = PackedFloat32Array(0, 0.37193, 0.838596, 1)
|
||||||
|
@ -34,12 +34,31 @@ shader_parameter/pulse_speed = 0.3
|
||||||
shader_parameter/wave_gradient = SubResource("GradientTexture1D_l8ond")
|
shader_parameter/wave_gradient = SubResource("GradientTexture1D_l8ond")
|
||||||
shader_parameter/pulse_gradient = SubResource("GradientTexture1D_8xhfy")
|
shader_parameter/pulse_gradient = SubResource("GradientTexture1D_8xhfy")
|
||||||
|
|
||||||
|
[sub_resource type="GDScript" id="GDScript_hbqgy"]
|
||||||
|
script/source = "extends Control
|
||||||
|
|
||||||
|
const COLOR := Color(0, 1, 0)
|
||||||
|
const WIDTH := 4
|
||||||
|
const RADIUS := 16
|
||||||
|
|
||||||
|
@onready var root: ProjectileArc = owner
|
||||||
|
|
||||||
|
func _draw() -> void:
|
||||||
|
if not visible:
|
||||||
|
return
|
||||||
|
|
||||||
|
var camera := get_viewport().get_camera_3d()
|
||||||
|
for p: Vector3 in root._debug_points:
|
||||||
|
var pos := camera.unproject_position(p)
|
||||||
|
draw_circle(pos, RADIUS, COLOR, false, WIDTH, true)
|
||||||
|
"
|
||||||
|
|
||||||
[node name="ProjectileArc" type="Node3D"]
|
[node name="ProjectileArc" type="Node3D"]
|
||||||
script = ExtResource("1_vafqi")
|
script = ExtResource("1_vafqi")
|
||||||
|
|
||||||
[node name="Path" type="Path3D" parent="."]
|
[node name="Path" type="Path3D" parent="."]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
curve = SubResource("Curve3D_rfv3d")
|
curve = SubResource("Curve3D_sj0rs")
|
||||||
|
|
||||||
[node name="Polygon" type="CSGPolygon3D" parent="Path"]
|
[node name="Polygon" type="CSGPolygon3D" parent="Path"]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
|
@ -56,4 +75,13 @@ path_u_distance = 1.0
|
||||||
path_joined = false
|
path_joined = false
|
||||||
material = SubResource("ShaderMaterial_ahf42")
|
material = SubResource("ShaderMaterial_ahf42")
|
||||||
|
|
||||||
|
[node name="DebugDraw" type="Control" parent="."]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
visible = false
|
||||||
|
layout_mode = 3
|
||||||
|
anchors_preset = 0
|
||||||
|
offset_right = 40.0
|
||||||
|
offset_bottom = 40.0
|
||||||
|
script = SubResource("GDScript_hbqgy")
|
||||||
|
|
||||||
[connection signal="visibility_changed" from="." to="." method="_on_visibility_changed"]
|
[connection signal="visibility_changed" from="." to="." method="_on_visibility_changed"]
|
||||||
|
|
|
@ -3,15 +3,39 @@ class_name Arc extends Control
|
||||||
|
|
||||||
const BASE_POINTS := 64
|
const BASE_POINTS := 64
|
||||||
|
|
||||||
@export var gap_angle := 0.1
|
@export_range(-360, 360, 0.001, "radians") var arc_start := 0.1:
|
||||||
@export var width := 1.0
|
set(value):
|
||||||
@export var antialiased := true
|
arc_start = value
|
||||||
@export var color: Color
|
queue_redraw()
|
||||||
|
@export_range(-360, 360, 0.001, "radians") var arc_end := TAU:
|
||||||
|
set(value):
|
||||||
|
arc_end = value
|
||||||
|
queue_redraw()
|
||||||
|
@export var width := 1.0:
|
||||||
|
set(value):
|
||||||
|
width = value
|
||||||
|
queue_redraw()
|
||||||
|
@export var antialiased := true:
|
||||||
|
set(value):
|
||||||
|
antialiased = value
|
||||||
|
queue_redraw()
|
||||||
|
@export var color: Color:
|
||||||
|
set(value):
|
||||||
|
color = value
|
||||||
|
queue_redraw()
|
||||||
|
|
||||||
|
|
||||||
func _draw() -> void:
|
func _draw() -> void:
|
||||||
var radius: float = minf(size.x, size.y) / 2.0
|
var radius: float = minf(size.x, size.y) / 2.0
|
||||||
var point_count: int = int(BASE_POINTS * (TAU - gap_angle) / TAU)
|
var width_buffer: float = floor(width / 2.0)
|
||||||
|
var point_count: int = int(BASE_POINTS * (arc_end - arc_start) / TAU)
|
||||||
draw_arc(
|
draw_arc(
|
||||||
Vector2(radius, radius), radius, gap_angle, TAU, point_count, color, width, antialiased
|
Vector2(radius, radius),
|
||||||
|
radius - width_buffer,
|
||||||
|
arc_start,
|
||||||
|
arc_end,
|
||||||
|
point_count,
|
||||||
|
color,
|
||||||
|
width,
|
||||||
|
antialiased
|
||||||
)
|
)
|
||||||
|
|
|
@ -68,7 +68,7 @@ grow_horizontal = 2
|
||||||
grow_vertical = 2
|
grow_vertical = 2
|
||||||
pivot_offset = Vector2(300, 300)
|
pivot_offset = Vector2(300, 300)
|
||||||
script = ExtResource("2_vijl7")
|
script = ExtResource("2_vijl7")
|
||||||
gap_angle = 0.6
|
arc_start = 0.610865
|
||||||
width = 36.0
|
width = 36.0
|
||||||
color = Color(0, 0, 0, 0.392157)
|
color = Color(0, 0, 0, 0.392157)
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,31 @@
|
||||||
|
@tool
|
||||||
|
class_name CurveBar extends Control
|
||||||
|
## Swinging arc used to set the curve of a shot.
|
||||||
|
|
||||||
|
const PIVOT_SCALE := -PI / 4
|
||||||
|
|
||||||
|
@export var gradient: Gradient:
|
||||||
|
set(value):
|
||||||
|
if gradient_tex:
|
||||||
|
gradient_tex.gradient = value
|
||||||
|
gradient = value
|
||||||
|
|
||||||
|
@export var value: float:
|
||||||
|
set(v):
|
||||||
|
if pivot:
|
||||||
|
pivot.rotation = v * PIVOT_SCALE
|
||||||
|
get:
|
||||||
|
return pivot.rotation / PIVOT_SCALE if pivot else 0
|
||||||
|
|
||||||
|
@onready var pivot: Control = %Pivot
|
||||||
|
@onready var gradient_fill: TextureRect = %GradientFill
|
||||||
|
@onready var gradient_tex: GradientTexture2D = gradient_fill.texture
|
||||||
|
@onready var animation_player: AnimationPlayer = $Reticle/AnimationPlayer
|
||||||
|
|
||||||
|
|
||||||
|
func _ready() -> void:
|
||||||
|
gradient = gradient
|
||||||
|
|
||||||
|
|
||||||
|
func flourish() -> void:
|
||||||
|
animation_player.play("flourish")
|
|
@ -0,0 +1,184 @@
|
||||||
|
[gd_scene load_steps=9 format=3 uid="uid://mm02j126jo1h"]
|
||||||
|
|
||||||
|
[ext_resource type="Script" path="res://src/ui/shot_hud/curve_bar/curve_bar.gd" id="1_aqvdi"]
|
||||||
|
[ext_resource type="Gradient" uid="uid://k7867gxaxx57" path="res://src/ui/shot_hud/curve_bar/one_sided_gradient.tres" id="2_f3fom"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://du3vk5nnksohs" path="res://assets/sprites/particles/sparkle.png" id="3_2tv33"]
|
||||||
|
[ext_resource type="Script" path="res://src/ui/decorations/arc.gd" id="4_s2bpl"]
|
||||||
|
|
||||||
|
[sub_resource type="GradientTexture2D" id="GradientTexture2D_o88ik"]
|
||||||
|
gradient = ExtResource("2_f3fom")
|
||||||
|
width = 128
|
||||||
|
height = 128
|
||||||
|
fill = 1
|
||||||
|
fill_from = Vector2(0.5, 0.02)
|
||||||
|
fill_to = Vector2(0.5, 0.37)
|
||||||
|
metadata/_snap_enabled = true
|
||||||
|
|
||||||
|
[sub_resource type="Animation" id="Animation_kfg2n"]
|
||||||
|
length = 0.001
|
||||||
|
tracks/0/type = "value"
|
||||||
|
tracks/0/imported = false
|
||||||
|
tracks/0/enabled = true
|
||||||
|
tracks/0/path = NodePath("Reticle:rotation")
|
||||||
|
tracks/0/interp = 2
|
||||||
|
tracks/0/loop_wrap = true
|
||||||
|
tracks/0/keys = {
|
||||||
|
"times": PackedFloat32Array(0),
|
||||||
|
"transitions": PackedFloat32Array(1),
|
||||||
|
"update": 0,
|
||||||
|
"values": [0.0]
|
||||||
|
}
|
||||||
|
tracks/1/type = "value"
|
||||||
|
tracks/1/imported = false
|
||||||
|
tracks/1/enabled = true
|
||||||
|
tracks/1/path = NodePath("Reticle:scale")
|
||||||
|
tracks/1/interp = 1
|
||||||
|
tracks/1/loop_wrap = true
|
||||||
|
tracks/1/keys = {
|
||||||
|
"times": PackedFloat32Array(0),
|
||||||
|
"transitions": PackedFloat32Array(1),
|
||||||
|
"update": 0,
|
||||||
|
"values": [Vector2(1, 1)]
|
||||||
|
}
|
||||||
|
tracks/2/type = "value"
|
||||||
|
tracks/2/imported = false
|
||||||
|
tracks/2/enabled = true
|
||||||
|
tracks/2/path = NodePath("Pivot/ArcBG:color")
|
||||||
|
tracks/2/interp = 1
|
||||||
|
tracks/2/loop_wrap = true
|
||||||
|
tracks/2/keys = {
|
||||||
|
"times": PackedFloat32Array(0),
|
||||||
|
"transitions": PackedFloat32Array(1),
|
||||||
|
"update": 0,
|
||||||
|
"values": [Color(0.0352941, 0.0784314, 0.160784, 0.784314)]
|
||||||
|
}
|
||||||
|
|
||||||
|
[sub_resource type="Animation" id="Animation_pt3no"]
|
||||||
|
resource_name = "flourish"
|
||||||
|
length = 0.42
|
||||||
|
step = 0.01
|
||||||
|
tracks/0/type = "value"
|
||||||
|
tracks/0/imported = false
|
||||||
|
tracks/0/enabled = true
|
||||||
|
tracks/0/path = NodePath("Reticle:rotation")
|
||||||
|
tracks/0/interp = 2
|
||||||
|
tracks/0/loop_wrap = true
|
||||||
|
tracks/0/keys = {
|
||||||
|
"times": PackedFloat32Array(0, 0.42),
|
||||||
|
"transitions": PackedFloat32Array(1.618, 1),
|
||||||
|
"update": 0,
|
||||||
|
"values": [0.0, 6.28319]
|
||||||
|
}
|
||||||
|
tracks/1/type = "value"
|
||||||
|
tracks/1/imported = false
|
||||||
|
tracks/1/enabled = true
|
||||||
|
tracks/1/path = NodePath("Reticle:scale")
|
||||||
|
tracks/1/interp = 2
|
||||||
|
tracks/1/loop_wrap = true
|
||||||
|
tracks/1/keys = {
|
||||||
|
"times": PackedFloat32Array(0, 0.0333333, 0.2, 0.42),
|
||||||
|
"transitions": PackedFloat32Array(1, 1.618, 1.618, 1),
|
||||||
|
"update": 0,
|
||||||
|
"values": [Vector2(1, 1), Vector2(0.6, 0.6), Vector2(2, 2), Vector2(1, 1)]
|
||||||
|
}
|
||||||
|
tracks/2/type = "value"
|
||||||
|
tracks/2/imported = false
|
||||||
|
tracks/2/enabled = true
|
||||||
|
tracks/2/path = NodePath("Pivot/ArcBG:color")
|
||||||
|
tracks/2/interp = 1
|
||||||
|
tracks/2/loop_wrap = true
|
||||||
|
tracks/2/keys = {
|
||||||
|
"times": PackedFloat32Array(0, 0.105, 0.21, 0.315, 0.42),
|
||||||
|
"transitions": PackedFloat32Array(1, 1, 1, 1, 1),
|
||||||
|
"update": 0,
|
||||||
|
"values": [Color(0.0352941, 0.0784314, 0.160784, 0.784314), Color(1, 1, 1, 1), Color(0.0352941, 0.0784314, 0.160784, 0.784314), Color(1, 1, 1, 1), Color(0.0352941, 0.0784314, 0.160784, 0.784314)]
|
||||||
|
}
|
||||||
|
|
||||||
|
[sub_resource type="AnimationLibrary" id="AnimationLibrary_eqkfk"]
|
||||||
|
_data = {
|
||||||
|
"RESET": SubResource("Animation_kfg2n"),
|
||||||
|
"flourish": SubResource("Animation_pt3no")
|
||||||
|
}
|
||||||
|
|
||||||
|
[node name="CurveBar" type="Control"]
|
||||||
|
layout_mode = 3
|
||||||
|
anchors_preset = 8
|
||||||
|
anchor_left = 0.5
|
||||||
|
anchor_top = 0.5
|
||||||
|
anchor_right = 0.5
|
||||||
|
anchor_bottom = 0.5
|
||||||
|
grow_horizontal = 2
|
||||||
|
grow_vertical = 2
|
||||||
|
script = ExtResource("1_aqvdi")
|
||||||
|
gradient = ExtResource("2_f3fom")
|
||||||
|
|
||||||
|
[node name="Pivot" type="Control" parent="."]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
show_behind_parent = true
|
||||||
|
texture_filter = 6
|
||||||
|
custom_minimum_size = Vector2(600, 600)
|
||||||
|
anchors_preset = 0
|
||||||
|
offset_left = -300.0
|
||||||
|
offset_top = -32.0
|
||||||
|
offset_right = 300.0
|
||||||
|
offset_bottom = 568.0
|
||||||
|
pivot_offset = Vector2(300, 300)
|
||||||
|
|
||||||
|
[node name="ArcBG" type="Control" parent="Pivot"]
|
||||||
|
layout_mode = 1
|
||||||
|
anchors_preset = 15
|
||||||
|
anchor_right = 1.0
|
||||||
|
anchor_bottom = 1.0
|
||||||
|
grow_horizontal = 2
|
||||||
|
grow_vertical = 2
|
||||||
|
script = ExtResource("4_s2bpl")
|
||||||
|
arc_start = -2.35619
|
||||||
|
arc_end = -0.785398
|
||||||
|
width = 32.0
|
||||||
|
color = Color(0.0352941, 0.0784314, 0.160784, 0.784314)
|
||||||
|
|
||||||
|
[node name="MarginContainer" type="MarginContainer" parent="Pivot"]
|
||||||
|
layout_mode = 1
|
||||||
|
anchors_preset = 15
|
||||||
|
anchor_right = 1.0
|
||||||
|
anchor_bottom = 1.0
|
||||||
|
grow_horizontal = 2
|
||||||
|
grow_vertical = 2
|
||||||
|
theme_override_constants/margin_left = 3
|
||||||
|
theme_override_constants/margin_top = 3
|
||||||
|
theme_override_constants/margin_right = 3
|
||||||
|
theme_override_constants/margin_bottom = 3
|
||||||
|
|
||||||
|
[node name="ArcFill" type="Control" parent="Pivot/MarginContainer"]
|
||||||
|
clip_children = 1
|
||||||
|
layout_mode = 2
|
||||||
|
script = ExtResource("4_s2bpl")
|
||||||
|
arc_start = -2.35619
|
||||||
|
arc_end = -0.785398
|
||||||
|
width = 26.0
|
||||||
|
|
||||||
|
[node name="GradientFill" type="TextureRect" parent="Pivot/MarginContainer/ArcFill"]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
layout_mode = 1
|
||||||
|
anchors_preset = 15
|
||||||
|
anchor_right = 1.0
|
||||||
|
anchor_bottom = 1.0
|
||||||
|
grow_horizontal = 2
|
||||||
|
grow_vertical = 2
|
||||||
|
texture = SubResource("GradientTexture2D_o88ik")
|
||||||
|
|
||||||
|
[node name="Reticle" type="TextureRect" parent="."]
|
||||||
|
texture_filter = 1
|
||||||
|
layout_mode = 0
|
||||||
|
offset_left = -20.0
|
||||||
|
offset_top = -20.0
|
||||||
|
offset_right = 20.0
|
||||||
|
offset_bottom = 20.0
|
||||||
|
pivot_offset = Vector2(20, 20)
|
||||||
|
texture = ExtResource("3_2tv33")
|
||||||
|
|
||||||
|
[node name="AnimationPlayer" type="AnimationPlayer" parent="Reticle"]
|
||||||
|
root_node = NodePath("../..")
|
||||||
|
libraries = {
|
||||||
|
"": SubResource("AnimationLibrary_eqkfk")
|
||||||
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
[gd_resource type="Gradient" format=3 uid="uid://k7867gxaxx57"]
|
||||||
|
|
||||||
|
[resource]
|
||||||
|
interpolation_color_space = 2
|
||||||
|
offsets = PackedFloat32Array(0, 0.25, 0.5, 0.75, 1)
|
||||||
|
colors = PackedColorArray(1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0)
|
|
@ -0,0 +1,6 @@
|
||||||
|
[gd_resource type="Gradient" format=3 uid="uid://3achrua4vnny"]
|
||||||
|
|
||||||
|
[resource]
|
||||||
|
interpolation_color_space = 2
|
||||||
|
offsets = PackedFloat32Array(0, 0.125, 0.25, 0.375, 0.5, 0.625, 0.75, 0.875, 1)
|
||||||
|
colors = PackedColorArray(1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0)
|
|
@ -9,7 +9,7 @@ const LIFE_BAR_DAMAGE_RUMBLE_TIME := 0.2
|
||||||
var player: WorldPlayer
|
var player: WorldPlayer
|
||||||
|
|
||||||
@onready var power_bar: TextureProgressBar = %PowerBar
|
@onready var power_bar: TextureProgressBar = %PowerBar
|
||||||
@onready var curve_bar: ProgressBar = %CurveBar
|
@onready var curve_bar: CurveBar = %CurveBar
|
||||||
@onready var life_bar: TextureProgressBar = %LifeBar
|
@onready var life_bar: TextureProgressBar = %LifeBar
|
||||||
|
|
||||||
@onready var club_selector: ClubSelector = %ClubSelector
|
@onready var club_selector: ClubSelector = %ClubSelector
|
||||||
|
@ -81,6 +81,10 @@ func reset_curve_bar() -> void:
|
||||||
_curve_animation.stop()
|
_curve_animation.stop()
|
||||||
|
|
||||||
|
|
||||||
|
func gauge_flourish() -> void:
|
||||||
|
curve_bar.flourish()
|
||||||
|
|
||||||
|
|
||||||
func play_nice_animation() -> void:
|
func play_nice_animation() -> void:
|
||||||
_nice_animation.play("display")
|
_nice_animation.play("display")
|
||||||
|
|
||||||
|
@ -111,8 +115,8 @@ func set_life_value(new_value: float) -> void:
|
||||||
life_bar.value = new_value
|
life_bar.value = new_value
|
||||||
|
|
||||||
|
|
||||||
static func create(player: WorldPlayer) -> ShotHUD:
|
static func create(_player: WorldPlayer) -> ShotHUD:
|
||||||
var instance: ShotHUD = scene.instantiate()
|
var instance: ShotHUD = scene.instantiate()
|
||||||
instance.player = player
|
instance.player = _player
|
||||||
|
|
||||||
return instance
|
return instance
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
[gd_scene load_steps=34 format=3 uid="uid://c4ifdiohng830"]
|
[gd_scene load_steps=35 format=3 uid="uid://c4ifdiohng830"]
|
||||||
|
|
||||||
[ext_resource type="Script" path="res://src/ui/shot_hud/shot_hud.gd" id="1_x5b4c"]
|
[ext_resource type="Script" path="res://src/ui/shot_hud/shot_hud.gd" id="1_x5b4c"]
|
||||||
[ext_resource type="Shader" path="res://src/shaders/canvas_retro.gdshader" id="1_ybxxp"]
|
[ext_resource type="Shader" path="res://src/shaders/canvas_retro.gdshader" id="1_ybxxp"]
|
||||||
|
@ -7,6 +7,7 @@
|
||||||
[ext_resource type="Texture2D" uid="uid://b5812y3pmmgg5" path="res://assets/ui/gauge_patch.png" id="4_5kcpe"]
|
[ext_resource type="Texture2D" uid="uid://b5812y3pmmgg5" path="res://assets/ui/gauge_patch.png" id="4_5kcpe"]
|
||||||
[ext_resource type="Texture2D" uid="uid://76fjx2ukavqe" path="res://assets/ui/power_gauge_fill.png" id="5_3i1yq"]
|
[ext_resource type="Texture2D" uid="uid://76fjx2ukavqe" path="res://assets/ui/power_gauge_fill.png" id="5_3i1yq"]
|
||||||
[ext_resource type="Texture2D" uid="uid://4a8tvjgwegv3" path="res://assets/ui/power_gauge_tab.png" id="6_sw48q"]
|
[ext_resource type="Texture2D" uid="uid://4a8tvjgwegv3" path="res://assets/ui/power_gauge_tab.png" id="6_sw48q"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://mm02j126jo1h" path="res://src/ui/shot_hud/curve_bar/curve_bar.tscn" id="7_kqi7w"]
|
||||||
[ext_resource type="PackedScene" uid="uid://b0yr0w0xv8cm5" path="res://src/ui/shot_hud/ball_selector/ball_selector.tscn" id="8_b2302"]
|
[ext_resource type="PackedScene" uid="uid://b0yr0w0xv8cm5" path="res://src/ui/shot_hud/ball_selector/ball_selector.tscn" id="8_b2302"]
|
||||||
[ext_resource type="FontFile" uid="uid://dsa0oh7c0h4pu" path="res://assets/fonts/Racing_Sans_One/RacingSansOne-Regular.ttf" id="8_bejx4"]
|
[ext_resource type="FontFile" uid="uid://dsa0oh7c0h4pu" path="res://assets/fonts/Racing_Sans_One/RacingSansOne-Regular.ttf" id="8_bejx4"]
|
||||||
[ext_resource type="Texture2D" uid="uid://tancoet1lih5" path="res://assets/ui/ball_icons/basic_icon.png" id="8_tt8i3"]
|
[ext_resource type="Texture2D" uid="uid://tancoet1lih5" path="res://assets/ui/ball_icons/basic_icon.png" id="8_tt8i3"]
|
||||||
|
@ -670,7 +671,6 @@ script = ExtResource("3_6groq")
|
||||||
|
|
||||||
[node name="PowerBar" type="TextureProgressBar" parent="ShotGauges/PowerGauge/Rumbler"]
|
[node name="PowerBar" type="TextureProgressBar" parent="ShotGauges/PowerGauge/Rumbler"]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
visible = false
|
|
||||||
texture_filter = 5
|
texture_filter = 5
|
||||||
custom_minimum_size = Vector2(64, 0)
|
custom_minimum_size = Vector2(64, 0)
|
||||||
layout_mode = 1
|
layout_mode = 1
|
||||||
|
@ -718,19 +718,9 @@ grow_horizontal = 2
|
||||||
grow_vertical = 2
|
grow_vertical = 2
|
||||||
mouse_filter = 1
|
mouse_filter = 1
|
||||||
|
|
||||||
[node name="CurveBar" type="ProgressBar" parent="ShotGauges/CurveGauge"]
|
[node name="CurveBar" parent="ShotGauges/CurveGauge" instance=ExtResource("7_kqi7w")]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
visible = false
|
|
||||||
layout_mode = 1
|
layout_mode = 1
|
||||||
anchors_preset = 15
|
|
||||||
anchor_right = 1.0
|
|
||||||
anchor_bottom = 1.0
|
|
||||||
offset_top = -13.5
|
|
||||||
offset_bottom = 13.5
|
|
||||||
grow_horizontal = 2
|
|
||||||
grow_vertical = 2
|
|
||||||
min_value = -1.0
|
|
||||||
max_value = 1.0
|
|
||||||
|
|
||||||
[node name="CurveAnimation" type="AnimationPlayer" parent="ShotGauges/CurveGauge"]
|
[node name="CurveAnimation" type="AnimationPlayer" parent="ShotGauges/CurveGauge"]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
[gd_scene load_steps=8 format=3 uid="uid://cwnwcd8kushl3"]
|
[gd_scene load_steps=9 format=3 uid="uid://cwnwcd8kushl3"]
|
||||||
|
|
||||||
[ext_resource type="Script" path="res://src/world/world.gd" id="1_ybjyx"]
|
[ext_resource type="Script" path="res://src/world/world.gd" id="1_ybjyx"]
|
||||||
[ext_resource type="PackedScene" uid="uid://bm2o3mex10v11" path="res://levels/debug_level/debug_level.tscn" id="2_0xu5a"]
|
[ext_resource type="PackedScene" uid="uid://bm2o3mex10v11" path="res://levels/debug_level/debug_level.tscn" id="2_0xu5a"]
|
||||||
|
@ -6,10 +6,11 @@
|
||||||
[ext_resource type="Script" path="res://src/ui/world_ui.gd" id="2_imewa"]
|
[ext_resource type="Script" path="res://src/ui/world_ui.gd" id="2_imewa"]
|
||||||
[ext_resource type="Resource" uid="uid://crock3revdn73" path="res://src/player/debug_player.tres" id="3_pyw81"]
|
[ext_resource type="Resource" uid="uid://crock3revdn73" path="res://src/player/debug_player.tres" id="3_pyw81"]
|
||||||
[ext_resource type="Script" path="res://src/world/play_manager/round_robin_manager.gd" id="5_h6mje"]
|
[ext_resource type="Script" path="res://src/world/play_manager/round_robin_manager.gd" id="5_h6mje"]
|
||||||
|
[ext_resource type="Resource" uid="uid://b5j0lmo4jayk4" path="res://src/player/debug_orange.tres" id="5_ym50e"]
|
||||||
|
|
||||||
[sub_resource type="Resource" id="Resource_rdjhi"]
|
[sub_resource type="Resource" id="Resource_rdjhi"]
|
||||||
script = ExtResource("5_h6mje")
|
script = ExtResource("5_h6mje")
|
||||||
players = Array[ExtResource("2_e743i")]([ExtResource("3_pyw81")])
|
players = Array[ExtResource("2_e743i")]([ExtResource("3_pyw81"), ExtResource("5_ym50e")])
|
||||||
|
|
||||||
[node name="World" type="Node" groups=["WorldGroup"]]
|
[node name="World" type="Node" groups=["WorldGroup"]]
|
||||||
script = ExtResource("1_ybjyx")
|
script = ExtResource("1_ybjyx")
|
||||||
|
|
Loading…
Reference in New Issue