Compare commits

..

No commits in common. "15cd409e0447e3a83e0f6ab8d92e8a687f8e2919" and "e723e0c022299d777367b2373770090803ce5acb" have entirely different histories.

62 changed files with 902 additions and 2043 deletions

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

File diff suppressed because it is too large Load Diff

View File

@ -1,58 +0,0 @@
[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.

View File

@ -1,35 +0,0 @@
[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.

View File

@ -1,35 +0,0 @@
[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.

View File

@ -1,35 +0,0 @@
[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.

View File

@ -1,35 +0,0 @@
[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.

View File

@ -1,35 +0,0 @@
[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.

View File

@ -1,35 +0,0 @@
[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.

View File

@ -1,35 +0,0 @@
[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.

View File

@ -1,35 +0,0 @@
[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.

View File

@ -1,35 +0,0 @@
[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.

View File

@ -1,35 +0,0 @@
[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.

View File

@ -1,35 +0,0 @@
[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.

View File

@ -1,35 +0,0 @@
[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.

View File

@ -1,35 +0,0 @@
[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.

View File

@ -1,35 +0,0 @@
[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.

View File

@ -1,35 +0,0 @@
[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.

View File

@ -1,35 +0,0 @@
[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.

View File

@ -1,35 +0,0 @@
[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

View File

@ -21,11 +21,6 @@ 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")

View File

@ -1,16 +0,0 @@
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)

View File

@ -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/gfolf_girl/gfolf_girl.gd" id="2_y16an"] [ext_resource type="Script" path="res://src/characters/player_characters/character_controller.gd" id="2_7o84v"]
[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_y16an") script = ExtResource("2_7o84v")
[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.0322548, -0.997872, -0.0566729, 0.999469, -0.0324597, 0.00269911, -0.00453275, -0.0565558, 0.998389, -2.5177, 5.22011, -0.51637) 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)
bone_name = "Hand.R" bone_name = "Hand.R"
bone_idx = 11 bone_idx = 11
@ -179,6 +179,7 @@ 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("../..")

View File

@ -44,9 +44,6 @@ 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
@ -67,11 +64,6 @@ 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

View File

@ -1,4 +1,5 @@
[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

View File

@ -49,7 +49,6 @@ 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

View File

@ -1,21 +0,0 @@
[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
}

View File

@ -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(0.48, 1, 1, 1) color = Color(1, 0.439216, 0.439216, 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")

View File

@ -154,11 +154,8 @@ 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
@ -176,8 +173,6 @@ 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:
@ -246,14 +241,13 @@ 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 * shot_power) impulse = impulse.rotated(Vector3.UP, -shot_curve * CURVE_INFLUENCE)
if game_ball: if game_ball:
game_ball.iron_ball = club == Club.Type.IRON game_ball.iron_ball = club == Club.Type.IRON
@ -270,7 +264,6 @@ 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
@ -421,9 +414,10 @@ 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.gauge_flourish() hud.power_bar.hide()
hud.curve_bar.hide()
character.downswing() character.downswing()
downswing_timer.start() shot_animation.play("swing_delay") # calls `take_shot`
Phase.SHOT: Phase.SHOT:
hud.power_bar.hide() hud.power_bar.hide()
hud.curve_bar.hide() hud.curve_bar.hide()
@ -443,7 +437,6 @@ 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)
@ -583,12 +576,7 @@ 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
var damage := ball.get_damage() player.life -= ball.base_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.

View File

@ -1,4 +1,4 @@
[gd_scene load_steps=22 format=3 uid="uid://cy7t2tc4y3b4"] [gd_scene load_steps=17 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,7 +7,6 @@
[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
@ -170,89 +169,35 @@ 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")
@ -395,11 +340,6 @@ 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
@ -410,20 +350,7 @@ 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"]

View File

@ -1,9 +0,0 @@
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;
}

View File

@ -3,11 +3,6 @@ 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
@ -19,8 +14,6 @@ const PUTT_ATTRITION := 0.8325 # green?
@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.
@ -34,16 +27,12 @@ const PUTT_ATTRITION := 0.8325 # green?
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:
@ -56,8 +45,6 @@ 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()
@ -85,15 +72,10 @@ 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"]
_debug_points.append(pos) # End projection!
if putt_projection: break
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
@ -107,8 +89,6 @@ 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

View File

@ -1,9 +1,9 @@
[gd_scene load_steps=10 format=3 uid="uid://fht6j87o8ecr"] [gd_scene load_steps=9 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_sj0rs"] [sub_resource type="Curve3D" id="Curve3D_rfv3d"]
[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,31 +34,12 @@ 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_sj0rs") curve = SubResource("Curve3D_rfv3d")
[node name="Polygon" type="CSGPolygon3D" parent="Path"] [node name="Polygon" type="CSGPolygon3D" parent="Path"]
unique_name_in_owner = true unique_name_in_owner = true
@ -75,13 +56,4 @@ 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"]

View File

@ -3,39 +3,15 @@ class_name Arc extends Control
const BASE_POINTS := 64 const BASE_POINTS := 64
@export_range(-360, 360, 0.001, "radians") var arc_start := 0.1: @export var gap_angle := 0.1
set(value): @export var width := 1.0
arc_start = value @export var antialiased := true
queue_redraw() @export var color: Color
@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 width_buffer: float = floor(width / 2.0) var point_count: int = int(BASE_POINTS * (TAU - gap_angle) / TAU)
var point_count: int = int(BASE_POINTS * (arc_end - arc_start) / TAU)
draw_arc( draw_arc(
Vector2(radius, radius), Vector2(radius, radius), radius, gap_angle, TAU, point_count, color, width, antialiased
radius - width_buffer,
arc_start,
arc_end,
point_count,
color,
width,
antialiased
) )

View File

@ -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")
arc_start = 0.610865 gap_angle = 0.6
width = 36.0 width = 36.0
color = Color(0, 0, 0, 0.392157) color = Color(0, 0, 0, 0.392157)

View File

@ -1,31 +0,0 @@
@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")

View File

@ -1,184 +0,0 @@
[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")
}

View File

@ -1,6 +0,0 @@
[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)

View File

@ -1,6 +0,0 @@
[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)

View File

@ -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: CurveBar = %CurveBar @onready var curve_bar: ProgressBar = %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,10 +81,6 @@ 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")
@ -115,8 +111,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

View File

@ -1,4 +1,4 @@
[gd_scene load_steps=35 format=3 uid="uid://c4ifdiohng830"] [gd_scene load_steps=34 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,7 +7,6 @@
[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"]
@ -671,6 +670,7 @@ 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,9 +718,19 @@ grow_horizontal = 2
grow_vertical = 2 grow_vertical = 2
mouse_filter = 1 mouse_filter = 1
[node name="CurveBar" parent="ShotGauges/CurveGauge" instance=ExtResource("7_kqi7w")] [node name="CurveBar" type="ProgressBar" parent="ShotGauges/CurveGauge"]
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

View File

@ -1,4 +1,4 @@
[gd_scene load_steps=9 format=3 uid="uid://cwnwcd8kushl3"] [gd_scene load_steps=8 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,11 +6,10 @@
[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"), ExtResource("5_ym50e")]) players = Array[ExtResource("2_e743i")]([ExtResource("3_pyw81")])
[node name="World" type="Node" groups=["WorldGroup"]] [node name="World" type="Node" groups=["WorldGroup"]]
script = ExtResource("1_ybjyx") script = ExtResource("1_ybjyx")