Compare commits
| Author | SHA256 | Date | |
|---|---|---|---|
|
|
5e2c395a88 | ||
|
|
3f5d30c490 | ||
|
|
a237d0c887 | ||
|
|
b3836e266f |
@@ -0,0 +1,45 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="scene"
|
||||||
|
importer_version=1
|
||||||
|
type="PackedScene"
|
||||||
|
uid="uid://fp0gcwcyfd7g"
|
||||||
|
path="res://.godot/imported/Dart.glb-82b423f0f21d37c1bf28626083e1030e.scn"
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://Models/Dart/Dart.glb"
|
||||||
|
dest_files=["res://.godot/imported/Dart.glb-82b423f0f21d37c1bf28626083e1030e.scn"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
nodes/root_type=""
|
||||||
|
nodes/root_name=""
|
||||||
|
nodes/root_script=null
|
||||||
|
mesh_library/use_node_names_as_mesh_names=false
|
||||||
|
array_mesh/deduplicate_surfaces=true
|
||||||
|
nodes/apply_root_scale=true
|
||||||
|
nodes/root_scale=1.0
|
||||||
|
nodes/import_as_skeleton_bones=false
|
||||||
|
nodes/use_name_suffixes=true
|
||||||
|
nodes/use_node_type_suffixes=true
|
||||||
|
meshes/ensure_tangents=true
|
||||||
|
meshes/generate_lods=true
|
||||||
|
meshes/create_shadow_meshes=true
|
||||||
|
meshes/light_baking=1
|
||||||
|
meshes/lightmap_texel_size=0.2
|
||||||
|
meshes/force_disable_compression=false
|
||||||
|
skins/use_named_skins=true
|
||||||
|
animation/import=true
|
||||||
|
animation/fps=30
|
||||||
|
animation/trimming=false
|
||||||
|
animation/remove_immutable_tracks=true
|
||||||
|
animation/import_rest_as_RESET=false
|
||||||
|
import_script/path=""
|
||||||
|
materials/extract=0
|
||||||
|
materials/extract_format=0
|
||||||
|
materials/extract_path=""
|
||||||
|
_subresources={}
|
||||||
|
gltf/naming_version=2
|
||||||
|
gltf/embedded_image_handling=1
|
||||||
|
gltf/texture_map_mode=1
|
||||||
|
After Width: | Height: | Size: 26 KiB |
@@ -0,0 +1,44 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://bobnv6cyi7dc6"
|
||||||
|
path.s3tc="res://.godot/imported/Dart_Dart-Default.png-4bd6068152c7966988ca2c23bd03ba76.s3tc.ctex"
|
||||||
|
metadata={
|
||||||
|
"imported_formats": ["s3tc_bptc"],
|
||||||
|
"vram_texture": true
|
||||||
|
}
|
||||||
|
generator_parameters={
|
||||||
|
"md5": "9c4718c8d2830abe8cc9971ef621b46a"
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://Models/Dart/Dart_Dart-Default.png"
|
||||||
|
dest_files=["res://.godot/imported/Dart_Dart-Default.png-4bd6068152c7966988ca2c23bd03ba76.s3tc.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=2
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/uastc_level=0
|
||||||
|
compress/rdo_quality_loss=0.0
|
||||||
|
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/channel_remap/red=0
|
||||||
|
process/channel_remap/green=1
|
||||||
|
process/channel_remap/blue=2
|
||||||
|
process/channel_remap/alpha=3
|
||||||
|
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
|
||||||
|
After Width: | Height: | Size: 31 KiB |
@@ -0,0 +1,44 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://bqxi7x76uv4tq"
|
||||||
|
path.s3tc="res://.godot/imported/Dart_Wings-Default.png-358040735cbc551a0d2abb04506c708a.s3tc.ctex"
|
||||||
|
metadata={
|
||||||
|
"imported_formats": ["s3tc_bptc"],
|
||||||
|
"vram_texture": true
|
||||||
|
}
|
||||||
|
generator_parameters={
|
||||||
|
"md5": "52ee9a89e7c6ed5f537103a41115551e"
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://Models/Dart/Dart_Wings-Default.png"
|
||||||
|
dest_files=["res://.godot/imported/Dart_Wings-Default.png-358040735cbc551a0d2abb04506c708a.s3tc.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=2
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/uastc_level=0
|
||||||
|
compress/rdo_quality_loss=0.0
|
||||||
|
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/channel_remap/red=0
|
||||||
|
process/channel_remap/green=1
|
||||||
|
process/channel_remap/blue=2
|
||||||
|
process/channel_remap/alpha=3
|
||||||
|
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
|
||||||
|
After Width: | Height: | Size: 26 KiB |
@@ -0,0 +1,40 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://c7jxj25ophbsb"
|
||||||
|
path="res://.godot/imported/Dart-Default.png-2feb9f56821a29d976ec19a662a6977f.ctex"
|
||||||
|
metadata={
|
||||||
|
"vram_texture": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://Models/Dart/Textures/Dart-Default.png"
|
||||||
|
dest_files=["res://.godot/imported/Dart-Default.png-2feb9f56821a29d976ec19a662a6977f.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=0
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/uastc_level=0
|
||||||
|
compress/rdo_quality_loss=0.0
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=false
|
||||||
|
mipmaps/limit=-1
|
||||||
|
roughness/mode=0
|
||||||
|
roughness/src_normal=""
|
||||||
|
process/channel_remap/red=0
|
||||||
|
process/channel_remap/green=1
|
||||||
|
process/channel_remap/blue=2
|
||||||
|
process/channel_remap/alpha=3
|
||||||
|
process/fix_alpha_border=true
|
||||||
|
process/premult_alpha=false
|
||||||
|
process/normal_map_invert_y=false
|
||||||
|
process/hdr_as_srgb=false
|
||||||
|
process/hdr_clamp_exposure=false
|
||||||
|
process/size_limit=0
|
||||||
|
detect_3d/compress_to=1
|
||||||
|
After Width: | Height: | Size: 31 KiB |
@@ -0,0 +1,40 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://bhbtrcw8xbp1g"
|
||||||
|
path="res://.godot/imported/Wings-Default.png-b4a7a92ebd237d86daaae21adc10d873.ctex"
|
||||||
|
metadata={
|
||||||
|
"vram_texture": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://Models/Dart/Textures/Wings-Default.png"
|
||||||
|
dest_files=["res://.godot/imported/Wings-Default.png-b4a7a92ebd237d86daaae21adc10d873.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=0
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/uastc_level=0
|
||||||
|
compress/rdo_quality_loss=0.0
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=false
|
||||||
|
mipmaps/limit=-1
|
||||||
|
roughness/mode=0
|
||||||
|
roughness/src_normal=""
|
||||||
|
process/channel_remap/red=0
|
||||||
|
process/channel_remap/green=1
|
||||||
|
process/channel_remap/blue=2
|
||||||
|
process/channel_remap/alpha=3
|
||||||
|
process/fix_alpha_border=true
|
||||||
|
process/premult_alpha=false
|
||||||
|
process/normal_map_invert_y=false
|
||||||
|
process/hdr_as_srgb=false
|
||||||
|
process/hdr_clamp_exposure=false
|
||||||
|
process/size_limit=0
|
||||||
|
detect_3d/compress_to=1
|
||||||
|
After Width: | Height: | Size: 31 KiB |
@@ -0,0 +1,40 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://ch4b1pnokuu8d"
|
||||||
|
path="res://.godot/imported/Wings-Red-Blue.png-701faf0c1b6c3af11eb52058dfda7798.ctex"
|
||||||
|
metadata={
|
||||||
|
"vram_texture": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://Models/Dart/Textures/Wings-Red-Blue.png"
|
||||||
|
dest_files=["res://.godot/imported/Wings-Red-Blue.png-701faf0c1b6c3af11eb52058dfda7798.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=0
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/uastc_level=0
|
||||||
|
compress/rdo_quality_loss=0.0
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=false
|
||||||
|
mipmaps/limit=-1
|
||||||
|
roughness/mode=0
|
||||||
|
roughness/src_normal=""
|
||||||
|
process/channel_remap/red=0
|
||||||
|
process/channel_remap/green=1
|
||||||
|
process/channel_remap/blue=2
|
||||||
|
process/channel_remap/alpha=3
|
||||||
|
process/fix_alpha_border=true
|
||||||
|
process/premult_alpha=false
|
||||||
|
process/normal_map_invert_y=false
|
||||||
|
process/hdr_as_srgb=false
|
||||||
|
process/hdr_clamp_exposure=false
|
||||||
|
process/size_limit=0
|
||||||
|
detect_3d/compress_to=1
|
||||||
@@ -0,0 +1,45 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="scene"
|
||||||
|
importer_version=1
|
||||||
|
type="PackedScene"
|
||||||
|
uid="uid://c7ysojicqbx2v"
|
||||||
|
path="res://.godot/imported/Dartboard-Proto.glb-f1487085b0c09a3b97c6aa8be3864f01.scn"
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://Models/Dartboard/Dartboard-Proto.glb"
|
||||||
|
dest_files=["res://.godot/imported/Dartboard-Proto.glb-f1487085b0c09a3b97c6aa8be3864f01.scn"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
nodes/root_type=""
|
||||||
|
nodes/root_name=""
|
||||||
|
nodes/root_script=null
|
||||||
|
mesh_library/use_node_names_as_mesh_names=false
|
||||||
|
array_mesh/deduplicate_surfaces=true
|
||||||
|
nodes/apply_root_scale=true
|
||||||
|
nodes/root_scale=1.0
|
||||||
|
nodes/import_as_skeleton_bones=false
|
||||||
|
nodes/use_name_suffixes=true
|
||||||
|
nodes/use_node_type_suffixes=true
|
||||||
|
meshes/ensure_tangents=true
|
||||||
|
meshes/generate_lods=true
|
||||||
|
meshes/create_shadow_meshes=true
|
||||||
|
meshes/light_baking=1
|
||||||
|
meshes/lightmap_texel_size=0.2
|
||||||
|
meshes/force_disable_compression=false
|
||||||
|
skins/use_named_skins=true
|
||||||
|
animation/import=true
|
||||||
|
animation/fps=30
|
||||||
|
animation/trimming=false
|
||||||
|
animation/remove_immutable_tracks=true
|
||||||
|
animation/import_rest_as_RESET=false
|
||||||
|
import_script/path=""
|
||||||
|
materials/extract=0
|
||||||
|
materials/extract_format=0
|
||||||
|
materials/extract_path=""
|
||||||
|
_subresources={}
|
||||||
|
gltf/naming_version=2
|
||||||
|
gltf/embedded_image_handling=1
|
||||||
|
gltf/texture_map_mode=1
|
||||||
|
After Width: | Height: | Size: 20 KiB |
@@ -0,0 +1,44 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://dk6gnbvgumq7c"
|
||||||
|
path.s3tc="res://.godot/imported/Dartboard-Proto_Cork.png-9700f4c0b675dee65dc4e1c14aa931b3.s3tc.ctex"
|
||||||
|
metadata={
|
||||||
|
"imported_formats": ["s3tc_bptc"],
|
||||||
|
"vram_texture": true
|
||||||
|
}
|
||||||
|
generator_parameters={
|
||||||
|
"md5": "5b186b11689f911ad6691488292c3475"
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://Models/Dartboard/Dartboard-Proto_Cork.png"
|
||||||
|
dest_files=["res://.godot/imported/Dartboard-Proto_Cork.png-9700f4c0b675dee65dc4e1c14aa931b3.s3tc.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=2
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/uastc_level=0
|
||||||
|
compress/rdo_quality_loss=0.0
|
||||||
|
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/channel_remap/red=0
|
||||||
|
process/channel_remap/green=1
|
||||||
|
process/channel_remap/blue=2
|
||||||
|
process/channel_remap/alpha=3
|
||||||
|
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
|
||||||
|
After Width: | Height: | Size: 20 KiB |
@@ -0,0 +1,44 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://cs381hglod4k1"
|
||||||
|
path.s3tc="res://.godot/imported/Dartboard-Proto_Green.png-0f939f85106a12f4ae54352c096222a2.s3tc.ctex"
|
||||||
|
metadata={
|
||||||
|
"imported_formats": ["s3tc_bptc"],
|
||||||
|
"vram_texture": true
|
||||||
|
}
|
||||||
|
generator_parameters={
|
||||||
|
"md5": "c03f264d9d0115e28f662ed5ab27bbb2"
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://Models/Dartboard/Dartboard-Proto_Green.png"
|
||||||
|
dest_files=["res://.godot/imported/Dartboard-Proto_Green.png-0f939f85106a12f4ae54352c096222a2.s3tc.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=2
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/uastc_level=0
|
||||||
|
compress/rdo_quality_loss=0.0
|
||||||
|
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/channel_remap/red=0
|
||||||
|
process/channel_remap/green=1
|
||||||
|
process/channel_remap/blue=2
|
||||||
|
process/channel_remap/alpha=3
|
||||||
|
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
|
||||||
|
After Width: | Height: | Size: 20 KiB |
@@ -0,0 +1,44 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://cvv4akpwsudu3"
|
||||||
|
path.s3tc="res://.godot/imported/Dartboard-Proto_Red.png-e757930c4a42a8dc67547b3409641a91.s3tc.ctex"
|
||||||
|
metadata={
|
||||||
|
"imported_formats": ["s3tc_bptc"],
|
||||||
|
"vram_texture": true
|
||||||
|
}
|
||||||
|
generator_parameters={
|
||||||
|
"md5": "e46ac968aab4da0b0c65bc59957f2f96"
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://Models/Dartboard/Dartboard-Proto_Red.png"
|
||||||
|
dest_files=["res://.godot/imported/Dartboard-Proto_Red.png-e757930c4a42a8dc67547b3409641a91.s3tc.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=2
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/uastc_level=0
|
||||||
|
compress/rdo_quality_loss=0.0
|
||||||
|
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/channel_remap/red=0
|
||||||
|
process/channel_remap/green=1
|
||||||
|
process/channel_remap/blue=2
|
||||||
|
process/channel_remap/alpha=3
|
||||||
|
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
|
||||||
@@ -0,0 +1,45 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="scene"
|
||||||
|
importer_version=1
|
||||||
|
type="PackedScene"
|
||||||
|
uid="uid://6nml3641dpce"
|
||||||
|
path="res://.godot/imported/Dartboard.glb-35f0707e0e9b18915b2d48c5c14ac862.scn"
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://Models/Dartboard/Dartboard.glb"
|
||||||
|
dest_files=["res://.godot/imported/Dartboard.glb-35f0707e0e9b18915b2d48c5c14ac862.scn"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
nodes/root_type=""
|
||||||
|
nodes/root_name=""
|
||||||
|
nodes/root_script=null
|
||||||
|
mesh_library/use_node_names_as_mesh_names=false
|
||||||
|
array_mesh/deduplicate_surfaces=true
|
||||||
|
nodes/apply_root_scale=true
|
||||||
|
nodes/root_scale=1.0
|
||||||
|
nodes/import_as_skeleton_bones=false
|
||||||
|
nodes/use_name_suffixes=true
|
||||||
|
nodes/use_node_type_suffixes=true
|
||||||
|
meshes/ensure_tangents=true
|
||||||
|
meshes/generate_lods=true
|
||||||
|
meshes/create_shadow_meshes=true
|
||||||
|
meshes/light_baking=1
|
||||||
|
meshes/lightmap_texel_size=0.2
|
||||||
|
meshes/force_disable_compression=false
|
||||||
|
skins/use_named_skins=true
|
||||||
|
animation/import=true
|
||||||
|
animation/fps=30
|
||||||
|
animation/trimming=false
|
||||||
|
animation/remove_immutable_tracks=true
|
||||||
|
animation/import_rest_as_RESET=false
|
||||||
|
import_script/path=""
|
||||||
|
materials/extract=0
|
||||||
|
materials/extract_format=0
|
||||||
|
materials/extract_path=""
|
||||||
|
_subresources={}
|
||||||
|
gltf/naming_version=2
|
||||||
|
gltf/embedded_image_handling=1
|
||||||
|
gltf/texture_map_mode=1
|
||||||
|
After Width: | Height: | Size: 74 KiB |
@@ -0,0 +1,44 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://ctr7mydgfca75"
|
||||||
|
path.s3tc="res://.godot/imported/Dartboard_Spider.png-3a7e01e42d10301e2794b3c6268069b4.s3tc.ctex"
|
||||||
|
metadata={
|
||||||
|
"imported_formats": ["s3tc_bptc"],
|
||||||
|
"vram_texture": true
|
||||||
|
}
|
||||||
|
generator_parameters={
|
||||||
|
"md5": "693560c0ab922fba23ec09a26ead7f48"
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://Models/Dartboard/Dartboard_Spider.png"
|
||||||
|
dest_files=["res://.godot/imported/Dartboard_Spider.png-3a7e01e42d10301e2794b3c6268069b4.s3tc.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=2
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/uastc_level=0
|
||||||
|
compress/rdo_quality_loss=0.0
|
||||||
|
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/channel_remap/red=0
|
||||||
|
process/channel_remap/green=1
|
||||||
|
process/channel_remap/blue=2
|
||||||
|
process/channel_remap/alpha=3
|
||||||
|
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
|
||||||
|
After Width: | Height: | Size: 210 KiB |
@@ -0,0 +1,40 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://b1vf3204p4ys6"
|
||||||
|
path="res://.godot/imported/Coffee.png-7ec89259677377dfb36274d8ce0e9258.ctex"
|
||||||
|
metadata={
|
||||||
|
"vram_texture": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://Models/Dartboard/Textures/Coffee.png"
|
||||||
|
dest_files=["res://.godot/imported/Coffee.png-7ec89259677377dfb36274d8ce0e9258.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=0
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/uastc_level=0
|
||||||
|
compress/rdo_quality_loss=0.0
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=false
|
||||||
|
mipmaps/limit=-1
|
||||||
|
roughness/mode=0
|
||||||
|
roughness/src_normal=""
|
||||||
|
process/channel_remap/red=0
|
||||||
|
process/channel_remap/green=1
|
||||||
|
process/channel_remap/blue=2
|
||||||
|
process/channel_remap/alpha=3
|
||||||
|
process/fix_alpha_border=true
|
||||||
|
process/premult_alpha=false
|
||||||
|
process/normal_map_invert_y=false
|
||||||
|
process/hdr_as_srgb=false
|
||||||
|
process/hdr_clamp_exposure=false
|
||||||
|
process/size_limit=0
|
||||||
|
detect_3d/compress_to=1
|
||||||
|
After Width: | Height: | Size: 20 KiB |
@@ -0,0 +1,40 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://blvifdtblwcxg"
|
||||||
|
path="res://.godot/imported/Cork.png-8b577bb6a5aa8a82bae563118e794e18.ctex"
|
||||||
|
metadata={
|
||||||
|
"vram_texture": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://Models/Dartboard/Textures/Cork.png"
|
||||||
|
dest_files=["res://.godot/imported/Cork.png-8b577bb6a5aa8a82bae563118e794e18.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=0
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/uastc_level=0
|
||||||
|
compress/rdo_quality_loss=0.0
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=false
|
||||||
|
mipmaps/limit=-1
|
||||||
|
roughness/mode=0
|
||||||
|
roughness/src_normal=""
|
||||||
|
process/channel_remap/red=0
|
||||||
|
process/channel_remap/green=1
|
||||||
|
process/channel_remap/blue=2
|
||||||
|
process/channel_remap/alpha=3
|
||||||
|
process/fix_alpha_border=true
|
||||||
|
process/premult_alpha=false
|
||||||
|
process/normal_map_invert_y=false
|
||||||
|
process/hdr_as_srgb=false
|
||||||
|
process/hdr_clamp_exposure=false
|
||||||
|
process/size_limit=0
|
||||||
|
detect_3d/compress_to=1
|
||||||
|
After Width: | Height: | Size: 437 KiB |
@@ -0,0 +1,40 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://dxxon6pdl5aw4"
|
||||||
|
path="res://.godot/imported/Flowers.jpg-4755265eb848ca410e8aa3e15ab13280.ctex"
|
||||||
|
metadata={
|
||||||
|
"vram_texture": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://Models/Dartboard/Textures/Flowers.jpg"
|
||||||
|
dest_files=["res://.godot/imported/Flowers.jpg-4755265eb848ca410e8aa3e15ab13280.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=0
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/uastc_level=0
|
||||||
|
compress/rdo_quality_loss=0.0
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=false
|
||||||
|
mipmaps/limit=-1
|
||||||
|
roughness/mode=0
|
||||||
|
roughness/src_normal=""
|
||||||
|
process/channel_remap/red=0
|
||||||
|
process/channel_remap/green=1
|
||||||
|
process/channel_remap/blue=2
|
||||||
|
process/channel_remap/alpha=3
|
||||||
|
process/fix_alpha_border=true
|
||||||
|
process/premult_alpha=false
|
||||||
|
process/normal_map_invert_y=false
|
||||||
|
process/hdr_as_srgb=false
|
||||||
|
process/hdr_clamp_exposure=false
|
||||||
|
process/size_limit=0
|
||||||
|
detect_3d/compress_to=1
|
||||||
|
After Width: | Height: | Size: 20 KiB |
@@ -0,0 +1,40 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://c2qvwu0v2uolj"
|
||||||
|
path="res://.godot/imported/Green.png-6f1f5b0c58d2ec51c6b638c11ba4264b.ctex"
|
||||||
|
metadata={
|
||||||
|
"vram_texture": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://Models/Dartboard/Textures/Green.png"
|
||||||
|
dest_files=["res://.godot/imported/Green.png-6f1f5b0c58d2ec51c6b638c11ba4264b.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=0
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/uastc_level=0
|
||||||
|
compress/rdo_quality_loss=0.0
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=false
|
||||||
|
mipmaps/limit=-1
|
||||||
|
roughness/mode=0
|
||||||
|
roughness/src_normal=""
|
||||||
|
process/channel_remap/red=0
|
||||||
|
process/channel_remap/green=1
|
||||||
|
process/channel_remap/blue=2
|
||||||
|
process/channel_remap/alpha=3
|
||||||
|
process/fix_alpha_border=true
|
||||||
|
process/premult_alpha=false
|
||||||
|
process/normal_map_invert_y=false
|
||||||
|
process/hdr_as_srgb=false
|
||||||
|
process/hdr_clamp_exposure=false
|
||||||
|
process/size_limit=0
|
||||||
|
detect_3d/compress_to=1
|
||||||
|
After Width: | Height: | Size: 20 KiB |
@@ -0,0 +1,40 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://b1lclw6s66ou7"
|
||||||
|
path="res://.godot/imported/Red.png-5fe46449e66850590891dfad1c596ebf.ctex"
|
||||||
|
metadata={
|
||||||
|
"vram_texture": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://Models/Dartboard/Textures/Red.png"
|
||||||
|
dest_files=["res://.godot/imported/Red.png-5fe46449e66850590891dfad1c596ebf.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=0
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/uastc_level=0
|
||||||
|
compress/rdo_quality_loss=0.0
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=false
|
||||||
|
mipmaps/limit=-1
|
||||||
|
roughness/mode=0
|
||||||
|
roughness/src_normal=""
|
||||||
|
process/channel_remap/red=0
|
||||||
|
process/channel_remap/green=1
|
||||||
|
process/channel_remap/blue=2
|
||||||
|
process/channel_remap/alpha=3
|
||||||
|
process/fix_alpha_border=true
|
||||||
|
process/premult_alpha=false
|
||||||
|
process/normal_map_invert_y=false
|
||||||
|
process/hdr_as_srgb=false
|
||||||
|
process/hdr_clamp_exposure=false
|
||||||
|
process/size_limit=0
|
||||||
|
detect_3d/compress_to=1
|
||||||
|
After Width: | Height: | Size: 74 KiB |
@@ -0,0 +1,40 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://b3qw07lguggu6"
|
||||||
|
path="res://.godot/imported/Spider.png-3f1c947c2e5bcf6b7d7e259d62e6005a.ctex"
|
||||||
|
metadata={
|
||||||
|
"vram_texture": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://Models/Dartboard/Textures/Spider.png"
|
||||||
|
dest_files=["res://.godot/imported/Spider.png-3f1c947c2e5bcf6b7d7e259d62e6005a.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=0
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/uastc_level=0
|
||||||
|
compress/rdo_quality_loss=0.0
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=false
|
||||||
|
mipmaps/limit=-1
|
||||||
|
roughness/mode=0
|
||||||
|
roughness/src_normal=""
|
||||||
|
process/channel_remap/red=0
|
||||||
|
process/channel_remap/green=1
|
||||||
|
process/channel_remap/blue=2
|
||||||
|
process/channel_remap/alpha=3
|
||||||
|
process/fix_alpha_border=true
|
||||||
|
process/premult_alpha=false
|
||||||
|
process/normal_map_invert_y=false
|
||||||
|
process/hdr_as_srgb=false
|
||||||
|
process/hdr_clamp_exposure=false
|
||||||
|
process/size_limit=0
|
||||||
|
detect_3d/compress_to=1
|
||||||
|
After Width: | Height: | Size: 83 KiB |
@@ -0,0 +1,40 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://ccoht16d1pkr3"
|
||||||
|
path="res://.godot/imported/Stars.jpg-9cc50027cae80115a1f7344b30169970.ctex"
|
||||||
|
metadata={
|
||||||
|
"vram_texture": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://Models/Dartboard/Textures/Stars.jpg"
|
||||||
|
dest_files=["res://.godot/imported/Stars.jpg-9cc50027cae80115a1f7344b30169970.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=0
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/uastc_level=0
|
||||||
|
compress/rdo_quality_loss=0.0
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=false
|
||||||
|
mipmaps/limit=-1
|
||||||
|
roughness/mode=0
|
||||||
|
roughness/src_normal=""
|
||||||
|
process/channel_remap/red=0
|
||||||
|
process/channel_remap/green=1
|
||||||
|
process/channel_remap/blue=2
|
||||||
|
process/channel_remap/alpha=3
|
||||||
|
process/fix_alpha_border=true
|
||||||
|
process/premult_alpha=false
|
||||||
|
process/normal_map_invert_y=false
|
||||||
|
process/hdr_as_srgb=false
|
||||||
|
process/hdr_clamp_exposure=false
|
||||||
|
process/size_limit=0
|
||||||
|
detect_3d/compress_to=1
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
[gd_resource type="Resource" script_class="Modifier" format=3 uid="uid://ccyxtrth046pt"]
|
||||||
|
|
||||||
|
[ext_resource type="Script" uid="uid://duh0lxb7gdimr" path="res://Scripts/Modifier.gd" id="1_6fe4u"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://b1vf3204p4ys6" path="res://Models/Dartboard/Textures/Coffee.png" id="2_6fe4u"]
|
||||||
|
|
||||||
|
[resource]
|
||||||
|
script = ExtResource("1_6fe4u")
|
||||||
|
id = "0"
|
||||||
|
title = "Stars"
|
||||||
|
description = "Adds 40 to your score"
|
||||||
|
texture = ExtResource("2_6fe4u")
|
||||||
|
score_add = 40
|
||||||
|
metadata/_custom_type_script = "uid://duh0lxb7gdimr"
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
[gd_resource type="Resource" script_class="Modifier" format=3 uid="uid://bu11ohgune4yf"]
|
||||||
|
|
||||||
|
[ext_resource type="Script" uid="uid://duh0lxb7gdimr" path="res://Scripts/Modifier.gd" id="1_urlsx"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://dxxon6pdl5aw4" path="res://Models/Dartboard/Textures/Flowers.jpg" id="2_urlsx"]
|
||||||
|
|
||||||
|
[resource]
|
||||||
|
script = ExtResource("1_urlsx")
|
||||||
|
id = "0"
|
||||||
|
title = "Stars"
|
||||||
|
description = "Adds 40 to your score"
|
||||||
|
texture = ExtResource("2_urlsx")
|
||||||
|
score_add = 40
|
||||||
|
metadata/_custom_type_script = "uid://duh0lxb7gdimr"
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
[gd_resource type="Resource" script_class="Modifier" format=3 uid="uid://bigyh63smlbh5"]
|
||||||
|
|
||||||
|
[ext_resource type="Script" uid="uid://duh0lxb7gdimr" path="res://Scripts/Modifier.gd" id="1_oxvfs"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://ccoht16d1pkr3" path="res://Models/Dartboard/Textures/Stars.jpg" id="2_5aq3x"]
|
||||||
|
|
||||||
|
[resource]
|
||||||
|
script = ExtResource("1_oxvfs")
|
||||||
|
id = "0"
|
||||||
|
title = "Stars"
|
||||||
|
description = "Adds 40 to your score"
|
||||||
|
texture = ExtResource("2_5aq3x")
|
||||||
|
score_add = 40
|
||||||
|
metadata/_custom_type_script = "uid://duh0lxb7gdimr"
|
||||||
@@ -0,0 +1,49 @@
|
|||||||
|
[gd_scene format=3 uid="uid://cqe6bo8v564dc"]
|
||||||
|
|
||||||
|
[ext_resource type="Script" uid="uid://d1i0lhibtflvq" path="res://Scripts/Main.gd" id="1_fq6v0"]
|
||||||
|
[ext_resource type="Script" uid="uid://x5kcjofb5pek" path="res://Scripts/DropCatcher.gd" id="3_qdhrm"]
|
||||||
|
[ext_resource type="Script" uid="uid://dnek55fao0l72" path="res://Scripts/ModifierTray.gd" id="5_kax6v"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://6nml3641dpce" path="res://Models/Dartboard/Dartboard.glb" id="5_thh7l"]
|
||||||
|
|
||||||
|
[node name="DartboardProto" type="Node3D" unique_id=1829621191 node_paths=PackedStringArray("dartboard_root")]
|
||||||
|
script = ExtResource("1_fq6v0")
|
||||||
|
dartboard_root = NodePath("Dartboard")
|
||||||
|
|
||||||
|
[node name="Camera3D" type="Camera3D" parent="." unique_id=393502700]
|
||||||
|
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 2.6578834, 0.6292654, 0)
|
||||||
|
|
||||||
|
[node name="DirectionalLight3D" type="DirectionalLight3D" parent="." unique_id=1020512688]
|
||||||
|
|
||||||
|
[node name="Dartboard" parent="." unique_id=1632971704 instance=ExtResource("5_thh7l")]
|
||||||
|
transform = Transform3D(-4.371139e-08, 0, -1, 0, 1, 0, 1, 0, -4.371139e-08, 0.16272092, 1.2674973, 0)
|
||||||
|
|
||||||
|
[node name="CanvasLayer" type="CanvasLayer" parent="." unique_id=80012783]
|
||||||
|
|
||||||
|
[node name="DropCatcher" type="Control" parent="CanvasLayer" unique_id=1371111637 node_paths=PackedStringArray("camera", "main")]
|
||||||
|
layout_mode = 3
|
||||||
|
anchors_preset = 15
|
||||||
|
anchor_right = 1.0
|
||||||
|
anchor_bottom = 1.0
|
||||||
|
grow_horizontal = 2
|
||||||
|
grow_vertical = 2
|
||||||
|
script = ExtResource("3_qdhrm")
|
||||||
|
camera = NodePath("../../Camera3D")
|
||||||
|
main = NodePath("../..")
|
||||||
|
reverse_direction = true
|
||||||
|
triple_max = 0.5
|
||||||
|
outer_max = 0.7
|
||||||
|
|
||||||
|
[node name="TextureTray" type="HBoxContainer" parent="CanvasLayer/DropCatcher" unique_id=799936408]
|
||||||
|
layout_mode = 0
|
||||||
|
offset_right = 40.0
|
||||||
|
offset_bottom = 40.0
|
||||||
|
|
||||||
|
[node name="ModifierTray" type="Control" parent="CanvasLayer" unique_id=2127296352 node_paths=PackedStringArray("drop_catcher")]
|
||||||
|
layout_mode = 3
|
||||||
|
anchors_preset = 15
|
||||||
|
anchor_right = 1.0
|
||||||
|
anchor_bottom = 1.0
|
||||||
|
grow_horizontal = 2
|
||||||
|
grow_vertical = 2
|
||||||
|
script = ExtResource("5_kax6v")
|
||||||
|
drop_catcher = NodePath("../DropCatcher")
|
||||||
@@ -0,0 +1,156 @@
|
|||||||
|
extends Control
|
||||||
|
# DropCatcher.gd (manual-drag version)
|
||||||
|
# No longer uses Godot's built-in _drop_data. Instead it exposes
|
||||||
|
# paint_at_screen_pos(), which the trapezoid calls on release.
|
||||||
|
# This Control no longer needs to catch mouse events at all, so it can be
|
||||||
|
# tiny/invisible — but keep it in the tree so it can reach the camera & board.
|
||||||
|
|
||||||
|
@export var camera: Camera3D
|
||||||
|
@export var main: Node # the ROOT node (DartboardProto)
|
||||||
|
|
||||||
|
const RAY_LENGTH := 1000.0
|
||||||
|
var dartboard: MeshInstance3D
|
||||||
|
|
||||||
|
# Standard dartboard number sequence, clockwise starting from the TOP (12 o'clock).
|
||||||
|
const DART_NUMBERS := [20, 1, 18, 4, 13, 6, 10, 15, 2, 17,
|
||||||
|
3, 19, 7, 16, 8, 11, 14, 9, 12, 5]
|
||||||
|
|
||||||
|
# Calibration: rotate which sector counts as "top". If the wrong number gets
|
||||||
|
# hit, bump this by 1 until it lines up. Range 0-19.
|
||||||
|
@export var sector_offset := 0
|
||||||
|
# If your board's numbers go counter-clockwise in 3D, flip this.
|
||||||
|
@export var reverse_direction := false
|
||||||
|
|
||||||
|
# --- Radial band boundaries (fractions of outer radius, 0=center 1=rim) ---
|
||||||
|
# Tune these in the Inspector by reading the norm= prints for each ring.
|
||||||
|
@export var bull_inner_max := 0.04 # <= this = inner bull (50)
|
||||||
|
@export var bull_outer_max := 0.09 # <= this = outer bull (25)
|
||||||
|
@export var inner_max := 0.45 # <= this = inner single
|
||||||
|
@export var triple_max := 0.55 # <= this = triple ring
|
||||||
|
@export var outer_max := 0.80 # <= this = outer single; above = double
|
||||||
|
|
||||||
|
# Stores which modifier is applied to each surface index: { surface_index: Modifier }
|
||||||
|
var applied_modifiers: Dictionary = {}
|
||||||
|
|
||||||
|
func _ready() -> void:
|
||||||
|
# Don't block mouse input; the trapezoids handle their own dragging.
|
||||||
|
mouse_filter = Control.MOUSE_FILTER_IGNORE
|
||||||
|
print("DropCatcher ready. camera=", camera, " main=", main)
|
||||||
|
|
||||||
|
func _get_board() -> MeshInstance3D:
|
||||||
|
if dartboard == null and main != null and "dartboard" in main:
|
||||||
|
dartboard = main.dartboard
|
||||||
|
return dartboard
|
||||||
|
|
||||||
|
# Public: try to apply a modifier (paint its texture + store its rule) at a
|
||||||
|
# screen position. Returns true if it hit the board, false if it missed.
|
||||||
|
func apply_modifier_at_screen_pos(screen_pos: Vector2, modifier: Resource) -> bool:
|
||||||
|
var board := _get_board()
|
||||||
|
if board == null:
|
||||||
|
push_error("DropCatcher: no dartboard mesh (is 'main' set?).")
|
||||||
|
return false
|
||||||
|
if camera == null:
|
||||||
|
push_error("DropCatcher: camera export not set.")
|
||||||
|
return false
|
||||||
|
if modifier == null:
|
||||||
|
return false
|
||||||
|
|
||||||
|
var ray_origin := camera.project_ray_origin(screen_pos)
|
||||||
|
var ray_dir := camera.project_ray_normal(screen_pos)
|
||||||
|
var ray_end := ray_origin + ray_dir * RAY_LENGTH
|
||||||
|
|
||||||
|
var space_state := get_viewport().world_3d.direct_space_state
|
||||||
|
var query := PhysicsRayQueryParameters3D.create(ray_origin, ray_end)
|
||||||
|
query.collide_with_areas = false
|
||||||
|
query.collide_with_bodies = true
|
||||||
|
var result := space_state.intersect_ray(query)
|
||||||
|
if result.is_empty():
|
||||||
|
print(" drop missed the board")
|
||||||
|
return false
|
||||||
|
|
||||||
|
var surface_index := _surface_from_hit(result, board)
|
||||||
|
if surface_index < 0:
|
||||||
|
return false
|
||||||
|
|
||||||
|
_paint_surface(board, surface_index, modifier.texture)
|
||||||
|
applied_modifiers[surface_index] = modifier # remember the scoring rule
|
||||||
|
print(" applied '", modifier.id, "' to surface ", surface_index)
|
||||||
|
return true
|
||||||
|
|
||||||
|
# Call this when a dart lands on a surface to get the modified score.
|
||||||
|
func score_for_surface(surface_index: int, base_value: int) -> int:
|
||||||
|
if applied_modifiers.has(surface_index):
|
||||||
|
return applied_modifiers[surface_index].apply_score(base_value)
|
||||||
|
return base_value
|
||||||
|
|
||||||
|
func _surface_from_hit(result: Dictionary, board: MeshInstance3D) -> int:
|
||||||
|
var hit_point: Vector3 = result.get("position", Vector3.ZERO)
|
||||||
|
var local := board.to_local(hit_point)
|
||||||
|
var aabb := board.get_aabb()
|
||||||
|
var center := aabb.position + aabb.size * 0.5
|
||||||
|
# Board disc lies in the X/Y plane (thin on Z). Measure radius/angle in X/Y.
|
||||||
|
var dx := local.x - center.x
|
||||||
|
var dy := local.y - center.y
|
||||||
|
var radius := Vector2(dx, dy).length()
|
||||||
|
var outer_radius : float = max(aabb.size.x, aabb.size.y) * 0.5
|
||||||
|
var norm := radius / outer_radius if outer_radius > 0.0 else 0.0
|
||||||
|
print(" local=", local, " dx=", "%.3f" % dx, " dy=", "%.3f" % dy, " norm=", "%.3f" % norm)
|
||||||
|
|
||||||
|
# --- RADIAL BAND ---
|
||||||
|
# These thresholds are fractions of the outer radius. TUNE to match your art:
|
||||||
|
# the real proportions of a dartboard, from center outward.
|
||||||
|
var seg_name := ""
|
||||||
|
if norm <= bull_inner_max:
|
||||||
|
seg_name = "bull_inner" # inner bull (50)
|
||||||
|
elif norm <= bull_outer_max:
|
||||||
|
seg_name = "bull_outer" # outer bull (25)
|
||||||
|
elif norm > 1.0:
|
||||||
|
print(" outside board")
|
||||||
|
return -1
|
||||||
|
else:
|
||||||
|
# --- ANGULAR SECTOR ---
|
||||||
|
# atan2 gives angle of the hit point. We map it to one of 20 sectors,
|
||||||
|
# then index into the dartboard number sequence.
|
||||||
|
var angle := atan2(dx, dy) # -PI..PI, 0 = straight up (+y = top)
|
||||||
|
# Convert to 0..1 going clockwise from top. Adjust the rotation so 0 = top.
|
||||||
|
var t := angle / (2.0 * PI)
|
||||||
|
t = fposmod(t, 1.0)
|
||||||
|
if reverse_direction:
|
||||||
|
t = 1.0 - t
|
||||||
|
var sector_index := int(floor(t * 20.0 + 0.5)) % 20
|
||||||
|
sector_index = (sector_index + sector_offset) % 20
|
||||||
|
var number : int = DART_NUMBERS[sector_index]
|
||||||
|
|
||||||
|
# Which ring band within the sector.
|
||||||
|
var band := ""
|
||||||
|
if norm <= inner_max:
|
||||||
|
band = "inner" # inner single
|
||||||
|
elif norm <= triple_max:
|
||||||
|
band = "triple" # triple ring
|
||||||
|
elif norm <= outer_max:
|
||||||
|
band = "outer" # outer single
|
||||||
|
else:
|
||||||
|
band = "double" # double ring
|
||||||
|
seg_name = "seg_%d_%s" % [number, band]
|
||||||
|
|
||||||
|
print(" norm=", "%.3f" % norm, " -> ", seg_name)
|
||||||
|
return _index_of_surface_named(board, seg_name)
|
||||||
|
|
||||||
|
func _index_of_surface_named(board: MeshInstance3D, target_name: String) -> int:
|
||||||
|
var mesh := board.mesh
|
||||||
|
for i in mesh.get_surface_count():
|
||||||
|
var mat := mesh.surface_get_material(i)
|
||||||
|
if mat and mat.resource_name == target_name:
|
||||||
|
return i
|
||||||
|
return -1
|
||||||
|
|
||||||
|
func _paint_surface(board: MeshInstance3D, surface_index: int, tex: Texture2D) -> void:
|
||||||
|
# Always build a fresh StandardMaterial3D so the texture shows as an IMAGE,
|
||||||
|
# not tinted by the old base color. If the segment looks like a flat color
|
||||||
|
# instead of the pattern, the mesh is missing proper UVs on that face.
|
||||||
|
var new_mat := StandardMaterial3D.new()
|
||||||
|
new_mat.albedo_color = Color.WHITE # white so texture isn't tinted
|
||||||
|
new_mat.albedo_texture = tex
|
||||||
|
new_mat.texture_filter = BaseMaterial3D.TEXTURE_FILTER_LINEAR
|
||||||
|
new_mat.shading_mode = BaseMaterial3D.SHADING_MODE_UNSHADED
|
||||||
|
board.set_surface_override_material(surface_index, new_mat)
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
uid://x5kcjofb5pek
|
||||||
@@ -0,0 +1,61 @@
|
|||||||
|
extends Node3D
|
||||||
|
# Attach to the ROOT node (DartboardProto).
|
||||||
|
# Leave `dartboard_root` empty to auto-search, or drag the glb node in.
|
||||||
|
|
||||||
|
@export var dartboard_root: Node
|
||||||
|
|
||||||
|
var dartboard: MeshInstance3D
|
||||||
|
|
||||||
|
func _ready() -> void:
|
||||||
|
dartboard = _find_mesh_instance(dartboard_root if dartboard_root else self)
|
||||||
|
if dartboard == null:
|
||||||
|
push_error("Could not find a MeshInstance3D. Check that the glb is in the scene.")
|
||||||
|
return
|
||||||
|
print("Found dartboard mesh node: ", dartboard.name)
|
||||||
|
_print_surfaces()
|
||||||
|
_ensure_collision()
|
||||||
|
|
||||||
|
func _find_mesh_instance(node: Node) -> MeshInstance3D:
|
||||||
|
if node is MeshInstance3D and node.mesh != null:
|
||||||
|
return node
|
||||||
|
for child in node.get_children():
|
||||||
|
var found := _find_mesh_instance(child)
|
||||||
|
if found:
|
||||||
|
return found
|
||||||
|
return null
|
||||||
|
|
||||||
|
func _print_surfaces() -> void:
|
||||||
|
var mesh := dartboard.mesh
|
||||||
|
print("=== Dartboard surfaces ===")
|
||||||
|
for i in mesh.get_surface_count():
|
||||||
|
var mat := mesh.surface_get_material(i)
|
||||||
|
var mat_name := mat.resource_name if mat else "(no material)"
|
||||||
|
print("Surface ", i, " material name: '", mat_name, "'")
|
||||||
|
print("==========================")
|
||||||
|
var aabb := dartboard.get_aabb()
|
||||||
|
print("Board local size (x,y,z): ", aabb.size)
|
||||||
|
|
||||||
|
# CHEAP collision: one box that matches the board's bounding box.
|
||||||
|
# This replaces create_trimesh_collision(), which was making it run at ~3 FPS
|
||||||
|
# because it built a collision triangle for every face of the board.
|
||||||
|
func _ensure_collision() -> void:
|
||||||
|
# Remove any existing auto-added body so we don't stack shapes on re-runs.
|
||||||
|
for child in dartboard.get_children():
|
||||||
|
if child is StaticBody3D and child.name == "AutoBoardBody":
|
||||||
|
child.queue_free()
|
||||||
|
|
||||||
|
var body := StaticBody3D.new()
|
||||||
|
body.name = "AutoBoardBody"
|
||||||
|
|
||||||
|
var col := CollisionShape3D.new()
|
||||||
|
var box := BoxShape3D.new()
|
||||||
|
# Match the mesh's bounding box. Use the AABB size directly as the box size.
|
||||||
|
var aabb := dartboard.get_aabb()
|
||||||
|
box.size = aabb.size
|
||||||
|
col.shape = box
|
||||||
|
# Center the box on the mesh's bounding-box center (not always the origin).
|
||||||
|
col.position = aabb.position + aabb.size * 0.5
|
||||||
|
|
||||||
|
body.add_child(col)
|
||||||
|
dartboard.add_child(body)
|
||||||
|
print("Created cheap box collision for the dartboard.")
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
uid://d1i0lhibtflvq
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
extends Resource
|
||||||
|
class_name Modifier
|
||||||
|
# One modifier definition: title + description + texture + scoring rule.
|
||||||
|
# Create instances of this as .tres files in the editor (right-click in
|
||||||
|
# FileSystem -> New Resource -> Modifier), OR build them in code in the catalog.
|
||||||
|
#
|
||||||
|
# Because a texture always maps to the same modifier, the texture lives HERE.
|
||||||
|
|
||||||
|
# A stable unique id (e.g. "stars_x5"). Useful for saving which modifiers are
|
||||||
|
# applied to which segments, and for lookups. Keep it unique across the catalog.
|
||||||
|
@export var id: String = ""
|
||||||
|
|
||||||
|
# Shown to the player when offered the piece.
|
||||||
|
@export var title: String = ""
|
||||||
|
@export_multiline var description: String = ""
|
||||||
|
|
||||||
|
# The texture painted onto the segment when this modifier is applied.
|
||||||
|
@export var texture: Texture2D
|
||||||
|
|
||||||
|
# --- Scoring rule ---
|
||||||
|
# Simple, data-only rules cover most cases without writing code per modifier.
|
||||||
|
# value = (base_value * mult + add) for the affected segment.
|
||||||
|
@export var score_mult: float = 1.0
|
||||||
|
@export var score_add: int = 0
|
||||||
|
|
||||||
|
# Optional: rarity weight for random selection (higher = more common).
|
||||||
|
@export var weight: float = 1.0
|
||||||
|
|
||||||
|
# Apply this modifier's rule to a segment's base value.
|
||||||
|
func apply_score(base_value: int) -> int:
|
||||||
|
return int(round(base_value * score_mult)) + score_add
|
||||||
|
|
||||||
|
# A short human-readable summary of the effect, for tooltips/UI.
|
||||||
|
func effect_text() -> String:
|
||||||
|
var parts: Array[String] = []
|
||||||
|
if score_mult != 1.0:
|
||||||
|
parts.append("x%s" % str(score_mult))
|
||||||
|
if score_add != 0:
|
||||||
|
parts.append(("+%d" % score_add) if score_add > 0 else str(score_add))
|
||||||
|
return " ".join(parts) if parts.size() > 0 else "no change"
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
uid://duh0lxb7gdimr
|
||||||
@@ -0,0 +1,84 @@
|
|||||||
|
extends Node
|
||||||
|
# ModifierCatalog.gd
|
||||||
|
# Holds the master list of every modifier in the game and picks random sets
|
||||||
|
# for each round. Register this as an AUTOLOAD (Project > Project Settings >
|
||||||
|
# Autoload) with the name "ModifierCatalog" so any script can reach it globally.
|
||||||
|
#
|
||||||
|
# Two ways to fill the catalog:
|
||||||
|
# A) Drop .tres Modifier files into res://Modifiers/ and they auto-load (below).
|
||||||
|
# B) Build them in code in _register_builtins() for quick prototyping.
|
||||||
|
|
||||||
|
var modifiers: Array[Modifier] = []
|
||||||
|
var _by_id: Dictionary = {} # id -> Modifier, for fast lookup
|
||||||
|
|
||||||
|
func _ready() -> void:
|
||||||
|
_load_from_folder("res://Modifiers/")
|
||||||
|
if modifiers.is_empty():
|
||||||
|
# Fallback so the prototype works before you author .tres files.
|
||||||
|
_register_builtins()
|
||||||
|
_reindex()
|
||||||
|
print("ModifierCatalog loaded ", modifiers.size(), " modifiers.")
|
||||||
|
|
||||||
|
# Load every .tres Modifier resource from a folder.
|
||||||
|
func _load_from_folder(path: String) -> void:
|
||||||
|
var dir := DirAccess.open(path)
|
||||||
|
if dir == null:
|
||||||
|
return
|
||||||
|
dir.list_dir_begin()
|
||||||
|
var fname := dir.get_next()
|
||||||
|
while fname != "":
|
||||||
|
if not dir.current_is_dir() and fname.ends_with(".tres"):
|
||||||
|
var res := load(path + fname)
|
||||||
|
if res is Modifier:
|
||||||
|
modifiers.append(res)
|
||||||
|
fname = dir.get_next()
|
||||||
|
dir.list_dir_end()
|
||||||
|
|
||||||
|
# Quick code-defined modifiers for prototyping. Replace texture paths with yours.
|
||||||
|
func _register_builtins() -> void:
|
||||||
|
modifiers.append(_make("stars_x5", "Stars", "Multiplies this segment's value by 5.",
|
||||||
|
"res://Models/Dartboard/Dartboard-Proto_Red.png", 5.0, 0))
|
||||||
|
modifiers.append(_make("double", "Double", "Doubles this segment's value.",
|
||||||
|
"res://Models/Dartboard/Dartboard-Proto_Green.png", 2.0, 0))
|
||||||
|
modifiers.append(_make("plus10", "Bonus +10", "Adds 10 points to this segment.",
|
||||||
|
"res://Models/Dartboard/Dartboard-Proto_Cork.png", 1.0, 10))
|
||||||
|
|
||||||
|
func _make(id: String, title: String, desc: String, tex_path: String,
|
||||||
|
mult: float, add: int) -> Modifier:
|
||||||
|
var m := Modifier.new()
|
||||||
|
m.id = id
|
||||||
|
m.title = title
|
||||||
|
m.description = desc
|
||||||
|
m.texture = load(tex_path)
|
||||||
|
m.score_mult = mult
|
||||||
|
m.score_add = add
|
||||||
|
return m
|
||||||
|
|
||||||
|
func _reindex() -> void:
|
||||||
|
_by_id.clear()
|
||||||
|
for m in modifiers:
|
||||||
|
_by_id[m.id] = m
|
||||||
|
|
||||||
|
func get_by_id(id: String) -> Modifier:
|
||||||
|
return _by_id.get(id)
|
||||||
|
|
||||||
|
# Pick `count` distinct random modifiers, respecting weight. Returns an Array.
|
||||||
|
func pick_random(count: int) -> Array[Modifier]:
|
||||||
|
var pool := modifiers.duplicate()
|
||||||
|
var chosen: Array[Modifier] = []
|
||||||
|
count = min(count, pool.size())
|
||||||
|
for _i in count:
|
||||||
|
var total := 0.0
|
||||||
|
for m in pool:
|
||||||
|
total += max(m.weight, 0.0001)
|
||||||
|
var r := randf() * total
|
||||||
|
var acc := 0.0
|
||||||
|
var picked_index := 0
|
||||||
|
for j in pool.size():
|
||||||
|
acc += max(pool[j].weight, 0.0001)
|
||||||
|
if r <= acc:
|
||||||
|
picked_index = j
|
||||||
|
break
|
||||||
|
chosen.append(pool[picked_index])
|
||||||
|
pool.remove_at(picked_index) # distinct: don't pick the same one twice
|
||||||
|
return chosen
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
uid://btm4dwci50xmu
|
||||||
@@ -0,0 +1,69 @@
|
|||||||
|
extends Control
|
||||||
|
# ModifierTray.gd (catalog-driven)
|
||||||
|
# Each round, asks ModifierCatalog for 3 random modifiers and spawns a draggable
|
||||||
|
# trapezoid for each at the bottom-center. Dropping one onto the board applies it
|
||||||
|
# and consumes the round's pieces.
|
||||||
|
|
||||||
|
@export var drop_catcher: Control
|
||||||
|
@export var pieces_per_round := 3
|
||||||
|
|
||||||
|
@export var piece_size := Vector2(90, 110)
|
||||||
|
@export var spacing := 24.0
|
||||||
|
@export var bottom_margin := 30.0
|
||||||
|
|
||||||
|
const TrapezoidSwatch := preload("res://Scripts/TrapezoidSwatch.gd")
|
||||||
|
|
||||||
|
var _pieces: Array[Control] = []
|
||||||
|
|
||||||
|
func _ready() -> void:
|
||||||
|
mouse_filter = Control.MOUSE_FILTER_IGNORE
|
||||||
|
spawn_round()
|
||||||
|
|
||||||
|
# Offer a fresh set of random modifier pieces for a new round.
|
||||||
|
func spawn_round() -> void:
|
||||||
|
_clear_pieces()
|
||||||
|
# ModifierCatalog is an autoload singleton (set it up in Project Settings).
|
||||||
|
var choices: Array = ModifierCatalog.pick_random(pieces_per_round)
|
||||||
|
if choices.is_empty():
|
||||||
|
push_warning("ModifierTray: catalog returned no modifiers.")
|
||||||
|
return
|
||||||
|
|
||||||
|
for mod in choices:
|
||||||
|
var piece := Control.new()
|
||||||
|
piece.set_script(TrapezoidSwatch)
|
||||||
|
piece.custom_minimum_size = piece_size
|
||||||
|
piece.size = piece_size
|
||||||
|
piece.modifier = mod # carries the WHOLE modifier
|
||||||
|
piece.paint_texture = mod.texture # convenience for drawing
|
||||||
|
piece.drop_catcher = drop_catcher
|
||||||
|
piece.tray = self
|
||||||
|
add_child(piece)
|
||||||
|
_pieces.append(piece)
|
||||||
|
|
||||||
|
_layout_pieces()
|
||||||
|
|
||||||
|
func _layout_pieces() -> void:
|
||||||
|
var count := _pieces.size()
|
||||||
|
if count == 0:
|
||||||
|
return
|
||||||
|
var total_w := count * piece_size.x + (count - 1) * spacing
|
||||||
|
var screen := get_viewport_rect().size
|
||||||
|
var start_x := (screen.x - total_w) * 0.5
|
||||||
|
var y := screen.y - piece_size.y - bottom_margin
|
||||||
|
for i in count:
|
||||||
|
_pieces[i].position = Vector2(start_x + i * (piece_size.x + spacing), y)
|
||||||
|
|
||||||
|
# Called by a piece when successfully used: remove the whole set.
|
||||||
|
func consume() -> void:
|
||||||
|
_clear_pieces()
|
||||||
|
|
||||||
|
func _clear_pieces() -> void:
|
||||||
|
for p in _pieces:
|
||||||
|
if is_instance_valid(p):
|
||||||
|
p.queue_free()
|
||||||
|
_pieces.clear()
|
||||||
|
|
||||||
|
# TESTING ONLY: press SPACE to roll a new round of pieces.
|
||||||
|
func _unhandled_input(event: InputEvent) -> void:
|
||||||
|
if event is InputEventKey and event.pressed and event.keycode == KEY_SPACE:
|
||||||
|
spawn_round()
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
uid://dnek55fao0l72
|
||||||
@@ -0,0 +1,97 @@
|
|||||||
|
extends Control
|
||||||
|
# TrapezoidSwatch.gd (manual-drag version)
|
||||||
|
# The trapezoid node ITSELF follows the cursor while dragging (no ghost).
|
||||||
|
# On release over the board, it tells DropCatcher to paint the hit segment,
|
||||||
|
# then asks the tray to consume the round's modifiers.
|
||||||
|
|
||||||
|
@export var paint_texture: Texture2D:
|
||||||
|
set(value):
|
||||||
|
paint_texture = value
|
||||||
|
queue_redraw()
|
||||||
|
@export_range(0.0, 1.0) var top_width_ratio := 0.55
|
||||||
|
|
||||||
|
# Set by the tray when it spawns this piece.
|
||||||
|
var drop_catcher: Control # the DropCatcher node (does the 3D raycast+paint)
|
||||||
|
var tray: Node # the ModifierTray (so we can consume on use)
|
||||||
|
|
||||||
|
# The full modifier this piece carries (texture + title + scoring rule).
|
||||||
|
var modifier: Resource
|
||||||
|
|
||||||
|
var _dragging := false
|
||||||
|
var _home_position := Vector2.ZERO # where it sits in the tray
|
||||||
|
var _drag_offset := Vector2.ZERO # cursor-to-corner offset so it doesn't snap
|
||||||
|
|
||||||
|
func _ready() -> void:
|
||||||
|
mouse_filter = Control.MOUSE_FILTER_STOP
|
||||||
|
if custom_minimum_size == Vector2.ZERO:
|
||||||
|
custom_minimum_size = Vector2(90, 110)
|
||||||
|
size = custom_minimum_size
|
||||||
|
|
||||||
|
func _draw() -> void:
|
||||||
|
var w := size.x
|
||||||
|
var h := size.y
|
||||||
|
var inset := w * (1.0 - top_width_ratio) * 0.5
|
||||||
|
var points := PackedVector2Array([
|
||||||
|
Vector2(inset, 0), Vector2(w - inset, 0),
|
||||||
|
Vector2(w, h), Vector2(0, h),
|
||||||
|
])
|
||||||
|
if paint_texture != null:
|
||||||
|
var uvs := PackedVector2Array([
|
||||||
|
Vector2(inset / w, 0), Vector2((w - inset) / w, 0),
|
||||||
|
Vector2(1, 1), Vector2(0, 1),
|
||||||
|
])
|
||||||
|
draw_polygon(points, PackedColorArray([Color.WHITE, Color.WHITE, Color.WHITE, Color.WHITE]), uvs, paint_texture)
|
||||||
|
else:
|
||||||
|
draw_colored_polygon(points, Color(0.8, 0.8, 0.8))
|
||||||
|
var outline := points
|
||||||
|
outline.append(points[0])
|
||||||
|
draw_polyline(outline, Color(0, 0, 0, 0.6), 2.0)
|
||||||
|
|
||||||
|
func _gui_input(event: InputEvent) -> void:
|
||||||
|
if event is InputEventMouseButton and event.button_index == MOUSE_BUTTON_LEFT:
|
||||||
|
if event.pressed:
|
||||||
|
_start_drag()
|
||||||
|
else:
|
||||||
|
_end_drag()
|
||||||
|
|
||||||
|
func _start_drag() -> void:
|
||||||
|
_dragging = true
|
||||||
|
_home_position = global_position
|
||||||
|
_drag_offset = global_position - get_global_mouse_position()
|
||||||
|
# top_level lets us move by global_position freely, ignoring the container
|
||||||
|
# layout, WITHOUT reparenting (reparenting mid-drag breaks the release event).
|
||||||
|
top_level = true
|
||||||
|
z_index = 100 # float above everything during drag
|
||||||
|
modulate.a = 0.85
|
||||||
|
|
||||||
|
func _end_drag() -> void:
|
||||||
|
if not _dragging:
|
||||||
|
return
|
||||||
|
_dragging = false
|
||||||
|
modulate.a = 1.0
|
||||||
|
z_index = 0
|
||||||
|
|
||||||
|
# Ask the DropCatcher to try painting wherever we released.
|
||||||
|
var painted := false
|
||||||
|
print("PIECE released. drop_catcher=", drop_catcher, " modifier=", modifier)
|
||||||
|
if drop_catcher == null:
|
||||||
|
push_error("Piece has no drop_catcher reference! (tray export not set?)")
|
||||||
|
elif not drop_catcher.has_method("apply_modifier_at_screen_pos"):
|
||||||
|
push_error("drop_catcher has no apply_modifier_at_screen_pos method.")
|
||||||
|
else:
|
||||||
|
painted = drop_catcher.apply_modifier_at_screen_pos(get_global_mouse_position(), modifier)
|
||||||
|
|
||||||
|
if painted:
|
||||||
|
# Used successfully: consume this round's modifier choices.
|
||||||
|
if tray and tray.has_method("consume"):
|
||||||
|
tray.consume()
|
||||||
|
else:
|
||||||
|
queue_free()
|
||||||
|
else:
|
||||||
|
# Missed the board: snap back home.
|
||||||
|
top_level = false
|
||||||
|
global_position = _home_position
|
||||||
|
|
||||||
|
func _process(_delta: float) -> void:
|
||||||
|
if _dragging:
|
||||||
|
global_position = get_global_mouse_position() + _drag_offset
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
uid://d0cdxnymxd6bs
|
||||||
@@ -18,6 +18,8 @@ dest_files=["res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.cte
|
|||||||
compress/mode=0
|
compress/mode=0
|
||||||
compress/high_quality=false
|
compress/high_quality=false
|
||||||
compress/lossy_quality=0.7
|
compress/lossy_quality=0.7
|
||||||
|
compress/uastc_level=0
|
||||||
|
compress/rdo_quality_loss=0.0
|
||||||
compress/hdr_compression=1
|
compress/hdr_compression=1
|
||||||
compress/normal_map=0
|
compress/normal_map=0
|
||||||
compress/channel_pack=0
|
compress/channel_pack=0
|
||||||
@@ -25,6 +27,10 @@ mipmaps/generate=false
|
|||||||
mipmaps/limit=-1
|
mipmaps/limit=-1
|
||||||
roughness/mode=0
|
roughness/mode=0
|
||||||
roughness/src_normal=""
|
roughness/src_normal=""
|
||||||
|
process/channel_remap/red=0
|
||||||
|
process/channel_remap/green=1
|
||||||
|
process/channel_remap/blue=2
|
||||||
|
process/channel_remap/alpha=3
|
||||||
process/fix_alpha_border=true
|
process/fix_alpha_border=true
|
||||||
process/premult_alpha=false
|
process/premult_alpha=false
|
||||||
process/normal_map_invert_y=false
|
process/normal_map_invert_y=false
|
||||||
|
|||||||
@@ -15,15 +15,23 @@ compatibility/default_parent_skeleton_in_mesh_instance_3d=true
|
|||||||
[application]
|
[application]
|
||||||
|
|
||||||
config/name="Dart Game"
|
config/name="Dart Game"
|
||||||
run/main_scene="uid://doh7p84eej78c"
|
run/main_scene="uid://cqe6bo8v564dc"
|
||||||
config/features=PackedStringArray("4.7", "Mobile")
|
config/features=PackedStringArray("4.7", "Mobile")
|
||||||
config/icon="res://icon.svg"
|
config/icon="res://icon.svg"
|
||||||
|
|
||||||
|
[autoload]
|
||||||
|
|
||||||
|
ModifierCatalog="*uid://btm4dwci50xmu"
|
||||||
|
|
||||||
[display]
|
[display]
|
||||||
|
|
||||||
window/stretch/mode="viewport"
|
window/stretch/mode="viewport"
|
||||||
window/stretch/aspect="expand"
|
window/stretch/aspect="expand"
|
||||||
|
|
||||||
|
[filesystem]
|
||||||
|
|
||||||
|
import/blender/enabled=false
|
||||||
|
|
||||||
[global_group]
|
[global_group]
|
||||||
|
|
||||||
Dart="All throwable darts"
|
Dart="All throwable darts"
|
||||||
|
|||||||