Compare commits

..

No commits in common. "191937eae8dc7f1dc71a255588fc0d7175f8217f" and "06d586d8f0d225ee0fb67f19e610448491332028" have entirely different histories.

40 changed files with 175 additions and 997 deletions

View File

@ -36,7 +36,7 @@ loop-variable-name: _?[a-z][a-z0-9]*(_[a-z0-9]+)*
max-file-lines: 1000
max-line-length: 100
max-public-methods: 40
max-returns: 99
max-returns: 6
mixed-tabs-and-spaces: null
no-elif-return: null
no-else-return: null

View File

@ -3,27 +3,25 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://tancoet1lih5"
path.s3tc="res://.godot/imported/basic_icon.png-bc904292cc126e1d3e1fd0eb1ba5acc2.s3tc.ctex"
path.etc2="res://.godot/imported/basic_icon.png-bc904292cc126e1d3e1fd0eb1ba5acc2.etc2.ctex"
path="res://.godot/imported/basic_icon.png-bc904292cc126e1d3e1fd0eb1ba5acc2.ctex"
metadata={
"imported_formats": ["s3tc_bptc", "etc2_astc"],
"vram_texture": true
"vram_texture": false
}
[deps]
source_file="res://assets/ui/ball_icons/basic_icon.png"
dest_files=["res://.godot/imported/basic_icon.png-bc904292cc126e1d3e1fd0eb1ba5acc2.s3tc.ctex", "res://.godot/imported/basic_icon.png-bc904292cc126e1d3e1fd0eb1ba5acc2.etc2.ctex"]
dest_files=["res://.godot/imported/basic_icon.png-bc904292cc126e1d3e1fd0eb1ba5acc2.ctex"]
[params]
compress/mode=2
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=true
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
@ -33,4 +31,4 @@ 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
detect_3d/compress_to=1

View File

@ -1,4 +1,4 @@
[gd_scene load_steps=65 format=3 uid="uid://bm2o3mex10v11"]
[gd_scene load_steps=64 format=3 uid="uid://bm2o3mex10v11"]
[ext_resource type="Terrain3DAssets" uid="uid://cwl34gstabgrx" path="res://levels/debug_level/terrain_assets.res" id="1_5smdk"]
[ext_resource type="Material" uid="uid://drxnue0xsen13" path="res://assets/materials/tropical_water.tres" id="4_bwkbv"]
@ -24,7 +24,6 @@
[ext_resource type="Texture2D" uid="uid://bq8dxuxfw1rwu" path="res://assets/textures/wood/lacquered_planks.png" id="17_xciuf"]
[ext_resource type="Texture2D" path="res://assets/textures/grass_green/grass_green_albedo.dds" id="18_scall"]
[ext_resource type="PackedScene" uid="uid://cblsayfgirexr" path="res://src/characters/umineko/umineko.tscn" id="21_ch6qk"]
[ext_resource type="Script" path="res://src/world/terrain_marker.gd" id="23_7p8cl"]
[sub_resource type="FastNoiseLite" id="FastNoiseLite_rpgb7"]
noise_type = 0
@ -68,12 +67,12 @@ auto_shader = true
[sub_resource type="PanoramaSkyMaterial" id="PanoramaSkyMaterial_h8tes"]
panorama = ExtResource("6_ectru")
[sub_resource type="Sky" id="Sky_x5sbg"]
[sub_resource type="Sky" id="Sky_3yoab"]
sky_material = SubResource("PanoramaSkyMaterial_h8tes")
[sub_resource type="Environment" id="Environment_k6wwx"]
background_mode = 2
sky = SubResource("Sky_x5sbg")
sky = SubResource("Sky_3yoab")
ambient_light_source = 2
ambient_light_color = Color(0.78, 0.78, 0.78, 1)
ssao_enabled = true
@ -574,10 +573,6 @@ mesh = SubResource("BoxMesh_jpetf")
[node name="StaticBody3D" type="StaticBody3D" parent="GravityCube/MeshInstance3D"]
[node name="TerrainMarker" type="Node" parent="GravityCube/MeshInstance3D/StaticBody3D"]
script = ExtResource("23_7p8cl")
type = 9
[node name="CollisionShape3D" type="CollisionShape3D" parent="GravityCube/MeshInstance3D/StaticBody3D"]
shape = SubResource("BoxShape3D_74f5g")
@ -644,10 +639,6 @@ mesh = SubResource("SphereMesh_ooxtq")
[node name="StaticBody3D" type="StaticBody3D" parent="GravityOrb/MeshInstance3D"]
[node name="TerrainMarker" type="Node" parent="GravityOrb/MeshInstance3D/StaticBody3D"]
script = ExtResource("23_7p8cl")
type = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="GravityOrb/MeshInstance3D/StaticBody3D"]
shape = SubResource("SphereShape3D_ne5nm")
@ -667,10 +658,6 @@ transform = Transform3D(2.33934e-08, 0.535178, -0.844739, 1, -4.37114e-08, 0, -3
[node name="CSGCombiner3D" type="CSGCombiner3D" parent="GravityBowl"]
use_collision = true
[node name="TerrainMarker" type="Node" parent="GravityBowl/CSGCombiner3D"]
script = ExtResource("23_7p8cl")
type = 7
[node name="OuterCylinder" type="CSGCylinder3D" parent="GravityBowl/CSGCombiner3D"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 16, 0)
radius = 32.0
@ -702,10 +689,6 @@ transform = Transform3D(0.688355, -0.285755, 0.666717, 0, 0.919135, 0.393942, -0
[node name="CSGCombiner3D" type="CSGCombiner3D" parent="GravityHalo"]
use_collision = true
[node name="TerrainMarker" type="Node" parent="GravityHalo/CSGCombiner3D"]
script = ExtResource("23_7p8cl")
type = 7
[node name="OuterShell" type="CSGTorus3D" parent="GravityHalo/CSGCombiner3D"]
inner_radius = 32.0
outer_radius = 108.0

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -1,22 +0,0 @@
extends Node3D
const BALL_SPAWN_GROUP := "BallSpawn"
@export var ball_scene: PackedScene
func spawn_balls() -> void:
for spawn: Node3D in get_tree().get_nodes_in_group(BALL_SPAWN_GROUP):
var ball: GameBall = ball_scene.instantiate()
var callback := func() -> void:
if ball.sleeping:
ball.queue_free()
ball.sleeping_state_changed.connect(callback)
spawn.add_sibling(ball)
ball.global_transform = spawn.global_transform
ball.freeze = false
func _process(_delta: float) -> void:
if Input.is_action_just_pressed("debug_1"):
spawn_balls()

View File

@ -1,519 +0,0 @@
[gd_scene load_steps=37 format=3 uid="uid://cvs546kk7t7aw"]
[ext_resource type="Texture2D" uid="uid://c47ern0l2d50r" path="res://assets/vista_2.png" id="1_d1wmn"]
[ext_resource type="Script" path="res://levels/terrain_test/terrain_test.gd" id="1_drk48"]
[ext_resource type="Terrain3DAssets" uid="uid://cwl34gstabgrx" path="res://levels/debug_level/terrain_assets.res" id="2_25igk"]
[ext_resource type="PackedScene" uid="uid://b7pgvftmj7nbe" path="res://src/equipment/balls/debug_ball/debug_ball.tscn" id="2_77pf6"]
[ext_resource type="Texture2D" path="res://assets/textures/grass_rough/grass_rough_albedo.dds" id="4_rm170"]
[ext_resource type="FontFile" uid="uid://cbaqlaqdobnux" path="res://assets/fonts/Orbitron/Orbitron-VariableFont_wght.ttf" id="5_h18yf"]
[ext_resource type="Script" path="res://src/world/terrain_marker.gd" id="6_4bo0x"]
[ext_resource type="Texture2D" path="res://assets/textures/grass_fairway/grass_fairway_albedo.dds" id="6_wdukl"]
[ext_resource type="Texture2D" path="res://assets/textures/grass_green/grass_green_albedo.dds" id="8_gxslv"]
[ext_resource type="Texture2D" path="res://assets/textures/sand_trap/sand_trap_albedo.dds" id="9_ris7y"]
[ext_resource type="Texture2D" uid="uid://cqlp0tjmadi75" path="res://assets/textures/highway/highway_road.png" id="10_4nt4g"]
[ext_resource type="Texture2D" path="res://assets/textures/mountain_rock/mountain_rock_albedo.dds" id="11_2lq7o"]
[ext_resource type="Texture2D" uid="uid://bq8dxuxfw1rwu" path="res://assets/textures/wood/lacquered_planks.png" id="12_e07mg"]
[ext_resource type="Texture2D" uid="uid://b8vgf8wy7h4nx" path="res://assets/textures/guard_rail/guard_rail.png" id="13_ll3kp"]
[ext_resource type="Material" uid="uid://c5hidbq5gbmr" path="res://assets/materials/crystal.tres" id="14_o81al"]
[sub_resource type="PanoramaSkyMaterial" id="PanoramaSkyMaterial_kd0nc"]
panorama = ExtResource("1_d1wmn")
[sub_resource type="Sky" id="Sky_3yoab"]
sky_material = SubResource("PanoramaSkyMaterial_kd0nc")
[sub_resource type="Environment" id="Environment_qax3v"]
background_mode = 2
sky = SubResource("Sky_3yoab")
ambient_light_source = 2
ambient_light_color = Color(0.78, 0.78, 0.78, 1)
ssao_enabled = true
ssao_intensity = 1.7
glow_enabled = true
glow_bloom = 0.05
volumetric_fog_enabled = true
volumetric_fog_density = 0.001
volumetric_fog_emission = Color(0.6, 1, 1, 1)
volumetric_fog_length = 1024.0
volumetric_fog_sky_affect = 0.0
[sub_resource type="CameraAttributesPractical" id="CameraAttributesPractical_ph8qj"]
dof_blur_far_distance = 200.0
dof_blur_far_transition = 800.0
dof_blur_near_enabled = true
dof_blur_near_distance = 1.0
dof_blur_near_transition = 0.5
[sub_resource type="FastNoiseLite" id="FastNoiseLite_rpgb7"]
noise_type = 0
frequency = 1.0
[sub_resource type="NoiseTexture2D" id="NoiseTexture2D_sb318"]
width = 256
height = 256
seamless = true
noise = SubResource("FastNoiseLite_rpgb7")
[sub_resource type="Terrain3DMaterial" id="Terrain3DMaterial_4xim8"]
_shader_parameters = {
"auto_base_texture": 4,
"auto_height_reduction": 0.1,
"auto_overlay_texture": 0,
"auto_slope": 0.41,
"blend_sharpness": 1.0,
"height_blending": true,
"macro_variation1": Color(0.964742, 0.964742, 0.964742, 1),
"macro_variation2": Color(1, 1, 1, 1),
"noise1_angle": 0.0,
"noise1_offset": Vector2(0.5, 0.5),
"noise1_scale": 0.062,
"noise2_scale": 0.076,
"noise3_scale": 0.021,
"noise_texture": SubResource("NoiseTexture2D_sb318"),
"vertex_normals_distance": 128.0,
"world_noise_height": 74.0,
"world_noise_lod_distance": 7500.0,
"world_noise_max_octaves": 8,
"world_noise_min_octaves": 2,
"world_noise_offset": Vector3(0, -8, 0),
"world_noise_region_blend": 0.55,
"world_noise_scale": 5.0
}
world_background = 2
texture_filtering = 1
auto_shader = true
[sub_resource type="BoxMesh" id="BoxMesh_7awoq"]
size = Vector3(10, 1, 60)
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_ceq7g"]
albedo_texture = ExtResource("4_rm170")
[sub_resource type="PrismMesh" id="PrismMesh_kdeya"]
left_to_right = 1.0
size = Vector3(100, 50, 10)
[sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_ufirn"]
data = PackedVector3Array(-5, 0.5, 30, 5, 0.5, 30, -5, -0.5, 30, 5, 0.5, 30, 5, -0.5, 30, -5, -0.5, 30, 5, 0.5, -30, -5, 0.5, -30, 5, -0.5, -30, -5, 0.5, -30, -5, -0.5, -30, 5, -0.5, -30, 5, 0.5, 30, 5, 0.5, -30, 5, -0.5, 30, 5, 0.5, -30, 5, -0.5, -30, 5, -0.5, 30, -5, 0.5, -30, -5, 0.5, 30, -5, -0.5, -30, -5, 0.5, 30, -5, -0.5, 30, -5, -0.5, -30, 5, 0.5, 30, -5, 0.5, 30, 5, 0.5, -30, -5, 0.5, 30, -5, 0.5, -30, 5, 0.5, -30, -5, -0.5, 30, 5, -0.5, 30, -5, -0.5, -30, 5, -0.5, 30, 5, -0.5, -30, -5, -0.5, -30)
[sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_gq475"]
data = PackedVector3Array(50, 25, 5, 50, -25, 5, -50, -25, 5, 50, 25, -5, -50, -25, -5, 50, -25, -5, 50, 25, 5, 50, 25, -5, 50, -25, 5, 50, 25, -5, 50, -25, -5, 50, -25, 5, 50, 25, -5, 50, 25, 5, -50, -25, -5, 50, 25, 5, -50, -25, 5, -50, -25, -5, -50, -25, 5, 50, -25, 5, -50, -25, -5, 50, -25, 5, 50, -25, -5, -50, -25, -5)
[sub_resource type="BoxMesh" id="BoxMesh_oukkf"]
size = Vector3(10, 1, 60)
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_c7541"]
albedo_texture = ExtResource("6_wdukl")
[sub_resource type="PrismMesh" id="PrismMesh_c7rfr"]
left_to_right = 1.0
size = Vector3(100, 50, 10)
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_18mqp"]
albedo_texture = ExtResource("8_gxslv")
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_2lnp3"]
albedo_texture = ExtResource("9_ris7y")
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_nflf8"]
albedo_texture = ExtResource("10_4nt4g")
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_3qcr7"]
albedo_texture = ExtResource("11_2lq7o")
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_5nlxd"]
albedo_texture = ExtResource("12_e07mg")
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_fhrit"]
albedo_texture = ExtResource("13_ll3kp")
[node name="TerrainTestMap" type="Node3D"]
script = ExtResource("1_drk48")
ball_scene = ExtResource("2_77pf6")
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
environment = SubResource("Environment_qax3v")
camera_attributes = SubResource("CameraAttributesPractical_ph8qj")
[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."]
transform = Transform3D(0.782608, -0.611691, 0.11558, 0, 0.185667, 0.982613, -0.622515, -0.769001, 0.145304, 0, 0, 0)
shadow_enabled = true
shadow_blur = 4.0
directional_shadow_split_1 = 0.017
directional_shadow_split_2 = 0.042
directional_shadow_split_3 = 0.247
directional_shadow_fade_start = 0.98
directional_shadow_max_distance = 750.0
directional_shadow_pancake_size = 5.0
[node name="Terrain3D" type="Terrain3D" parent="."]
data_directory = "res://levels/terrain_test/terrain_3d_data"
material = SubResource("Terrain3DMaterial_4xim8")
assets = ExtResource("2_25igk")
mesh_size = 64
top_level = true
metadata/_edit_lock_ = true
[node name="PlayerSpawn" type="Marker3D" parent="." groups=["PlayerSpawn"]]
[node name="TestRamps" type="Node3D" parent="."]
[node name="Rough" type="Node3D" parent="TestRamps"]
transform = Transform3D(-4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, 0, 0, 0)
[node name="RampGeometry" type="Node3D" parent="TestRamps/Rough"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 30)
[node name="MeshInstance3D" type="MeshInstance3D" parent="TestRamps/Rough/RampGeometry"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 30)
mesh = SubResource("BoxMesh_7awoq")
surface_material_override/0 = SubResource("StandardMaterial3D_ceq7g")
[node name="MeshInstance3D2" type="MeshInstance3D" parent="TestRamps/Rough/RampGeometry"]
transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, 0, 25, 109)
mesh = SubResource("PrismMesh_kdeya")
surface_material_override/0 = SubResource("StandardMaterial3D_ceq7g")
[node name="Label3D" type="Label3D" parent="TestRamps/Rough/RampGeometry"]
transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 0, 8, 0)
text = "Rough"
font = ExtResource("5_h18yf")
font_size = 300
outline_size = 48
[node name="StaticBody3D" type="StaticBody3D" parent="TestRamps/Rough/RampGeometry"]
[node name="TerrainMarker" type="Node" parent="TestRamps/Rough/RampGeometry/StaticBody3D"]
script = ExtResource("6_4bo0x")
type = 1
[node name="CollisionShape3D" type="CollisionShape3D" parent="TestRamps/Rough/RampGeometry/StaticBody3D"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 30)
shape = SubResource("ConcavePolygonShape3D_ufirn")
[node name="CollisionShape3D2" type="CollisionShape3D" parent="TestRamps/Rough/RampGeometry/StaticBody3D"]
transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, 0, 25, 109)
shape = SubResource("ConcavePolygonShape3D_gq475")
[node name="BallSpawn" type="Marker3D" parent="TestRamps/Rough/RampGeometry" groups=["BallSpawn"]]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 50, 158)
[node name="Fairway" type="Node3D" parent="TestRamps"]
transform = Transform3D(0.34202, 0, 0.939693, 0, 1, 0, -0.939693, 0, 0.34202, 0, 0, 0)
[node name="RampGeometry" type="Node3D" parent="TestRamps/Fairway"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 30)
[node name="MeshInstance3D" type="MeshInstance3D" parent="TestRamps/Fairway/RampGeometry"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 30)
mesh = SubResource("BoxMesh_oukkf")
surface_material_override/0 = SubResource("StandardMaterial3D_c7541")
[node name="MeshInstance3D2" type="MeshInstance3D" parent="TestRamps/Fairway/RampGeometry"]
transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, 0, 25, 109)
mesh = SubResource("PrismMesh_c7rfr")
surface_material_override/0 = SubResource("StandardMaterial3D_c7541")
[node name="Label3D" type="Label3D" parent="TestRamps/Fairway/RampGeometry"]
transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 0, 8, 0)
text = "Fairway"
font = ExtResource("5_h18yf")
font_size = 300
outline_size = 48
[node name="StaticBody3D2" type="StaticBody3D" parent="TestRamps/Fairway/RampGeometry"]
[node name="TerrainMarker" type="Node" parent="TestRamps/Fairway/RampGeometry/StaticBody3D2"]
script = ExtResource("6_4bo0x")
type = 2
[node name="CollisionShape3D" type="CollisionShape3D" parent="TestRamps/Fairway/RampGeometry/StaticBody3D2"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 30)
shape = SubResource("ConcavePolygonShape3D_ufirn")
[node name="CollisionShape3D2" type="CollisionShape3D" parent="TestRamps/Fairway/RampGeometry/StaticBody3D2"]
transform = Transform3D(-2.98023e-08, 0, -1, 0, 1, 0, 1, 0, -2.98023e-08, 0, 25, 109)
shape = SubResource("ConcavePolygonShape3D_gq475")
[node name="BallSpawn" type="Marker3D" parent="TestRamps/Fairway/RampGeometry" groups=["BallSpawn"]]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 50, 158)
[node name="Green" type="Node3D" parent="TestRamps"]
transform = Transform3D(0.642788, 0, 0.766044, 0, 1, 0, -0.766044, 0, 0.642788, 0, 0, 0)
[node name="RampGeometry" type="Node3D" parent="TestRamps/Green"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 30)
[node name="MeshInstance3D" type="MeshInstance3D" parent="TestRamps/Green/RampGeometry"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 30)
mesh = SubResource("BoxMesh_oukkf")
surface_material_override/0 = SubResource("StandardMaterial3D_18mqp")
[node name="MeshInstance3D2" type="MeshInstance3D" parent="TestRamps/Green/RampGeometry"]
transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, 0, 25, 109)
mesh = SubResource("PrismMesh_c7rfr")
surface_material_override/0 = SubResource("StandardMaterial3D_18mqp")
[node name="Label3D" type="Label3D" parent="TestRamps/Green/RampGeometry"]
transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 0, 8, 0)
text = "Green"
font = ExtResource("5_h18yf")
font_size = 300
outline_size = 48
[node name="StaticBody3D2" type="StaticBody3D" parent="TestRamps/Green/RampGeometry"]
[node name="TerrainMarker" type="Node" parent="TestRamps/Green/RampGeometry/StaticBody3D2"]
script = ExtResource("6_4bo0x")
type = 3
[node name="CollisionShape3D" type="CollisionShape3D" parent="TestRamps/Green/RampGeometry/StaticBody3D2"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 30)
shape = SubResource("ConcavePolygonShape3D_ufirn")
[node name="CollisionShape3D2" type="CollisionShape3D" parent="TestRamps/Green/RampGeometry/StaticBody3D2"]
transform = Transform3D(-2.98023e-08, 0, -1, 0, 1, 0, 1, 0, -2.98023e-08, 0, 25, 109)
shape = SubResource("ConcavePolygonShape3D_gq475")
[node name="BallSpawn" type="Marker3D" parent="TestRamps/Green/RampGeometry" groups=["BallSpawn"]]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 50, 158)
[node name="Sand" type="Node3D" parent="TestRamps"]
transform = Transform3D(0.866025, 0, 0.5, 0, 1, 0, -0.5, 0, 0.866025, 0, 0, 0)
[node name="RampGeometry" type="Node3D" parent="TestRamps/Sand"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 30)
[node name="MeshInstance3D" type="MeshInstance3D" parent="TestRamps/Sand/RampGeometry"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 30)
mesh = SubResource("BoxMesh_oukkf")
surface_material_override/0 = SubResource("StandardMaterial3D_2lnp3")
[node name="MeshInstance3D2" type="MeshInstance3D" parent="TestRamps/Sand/RampGeometry"]
transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, 0, 25, 109)
mesh = SubResource("PrismMesh_c7rfr")
surface_material_override/0 = SubResource("StandardMaterial3D_2lnp3")
[node name="Label3D" type="Label3D" parent="TestRamps/Sand/RampGeometry"]
transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 0, 8, 0)
text = "Sand"
font = ExtResource("5_h18yf")
font_size = 300
outline_size = 48
[node name="StaticBody3D2" type="StaticBody3D" parent="TestRamps/Sand/RampGeometry"]
[node name="TerrainMarker" type="Node" parent="TestRamps/Sand/RampGeometry/StaticBody3D2"]
script = ExtResource("6_4bo0x")
type = 4
[node name="CollisionShape3D" type="CollisionShape3D" parent="TestRamps/Sand/RampGeometry/StaticBody3D2"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 30)
shape = SubResource("ConcavePolygonShape3D_ufirn")
[node name="CollisionShape3D2" type="CollisionShape3D" parent="TestRamps/Sand/RampGeometry/StaticBody3D2"]
transform = Transform3D(-2.98023e-08, 0, -1, 0, 1, 0, 1, 0, -2.98023e-08, 0, 25, 109)
shape = SubResource("ConcavePolygonShape3D_gq475")
[node name="BallSpawn" type="Marker3D" parent="TestRamps/Sand/RampGeometry" groups=["BallSpawn"]]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 50, 158)
[node name="Concrete" type="Node3D" parent="TestRamps"]
transform = Transform3D(0.984808, 0, 0.173648, 0, 1, 0, -0.173648, 0, 0.984808, 0, 0, 0)
[node name="RampGeometry" type="Node3D" parent="TestRamps/Concrete"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 30)
[node name="MeshInstance3D" type="MeshInstance3D" parent="TestRamps/Concrete/RampGeometry"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 30)
mesh = SubResource("BoxMesh_oukkf")
surface_material_override/0 = SubResource("StandardMaterial3D_nflf8")
[node name="MeshInstance3D2" type="MeshInstance3D" parent="TestRamps/Concrete/RampGeometry"]
transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, 0, 25, 109)
mesh = SubResource("PrismMesh_c7rfr")
surface_material_override/0 = SubResource("StandardMaterial3D_nflf8")
[node name="Label3D" type="Label3D" parent="TestRamps/Concrete/RampGeometry"]
transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 0, 8, 0)
text = "Concrete"
font = ExtResource("5_h18yf")
font_size = 300
outline_size = 48
[node name="StaticBody3D2" type="StaticBody3D" parent="TestRamps/Concrete/RampGeometry"]
[node name="TerrainMarker" type="Node" parent="TestRamps/Concrete/RampGeometry/StaticBody3D2"]
script = ExtResource("6_4bo0x")
type = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="TestRamps/Concrete/RampGeometry/StaticBody3D2"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 30)
shape = SubResource("ConcavePolygonShape3D_ufirn")
[node name="CollisionShape3D2" type="CollisionShape3D" parent="TestRamps/Concrete/RampGeometry/StaticBody3D2"]
transform = Transform3D(-2.98023e-08, 0, -1, 0, 1, 0, 1, 0, -2.98023e-08, 0, 25, 109)
shape = SubResource("ConcavePolygonShape3D_gq475")
[node name="BallSpawn" type="Marker3D" parent="TestRamps/Concrete/RampGeometry" groups=["BallSpawn"]]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 50, 158)
[node name="Rock" type="Node3D" parent="TestRamps"]
transform = Transform3D(0.984808, 0, -0.173648, 0, 1, 0, 0.173648, 0, 0.984808, 0, 0, 0)
[node name="RampGeometry" type="Node3D" parent="TestRamps/Rock"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 30)
[node name="MeshInstance3D" type="MeshInstance3D" parent="TestRamps/Rock/RampGeometry"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 30)
mesh = SubResource("BoxMesh_oukkf")
surface_material_override/0 = SubResource("StandardMaterial3D_3qcr7")
[node name="MeshInstance3D2" type="MeshInstance3D" parent="TestRamps/Rock/RampGeometry"]
transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, 0, 25, 109)
mesh = SubResource("PrismMesh_c7rfr")
surface_material_override/0 = SubResource("StandardMaterial3D_3qcr7")
[node name="Label3D" type="Label3D" parent="TestRamps/Rock/RampGeometry"]
transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 0, 8, 0)
text = "Rock"
font = ExtResource("5_h18yf")
font_size = 300
outline_size = 48
[node name="StaticBody3D2" type="StaticBody3D" parent="TestRamps/Rock/RampGeometry"]
[node name="TerrainMarker" type="Node" parent="TestRamps/Rock/RampGeometry/StaticBody3D2"]
script = ExtResource("6_4bo0x")
type = 6
[node name="CollisionShape3D" type="CollisionShape3D" parent="TestRamps/Rock/RampGeometry/StaticBody3D2"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 30)
shape = SubResource("ConcavePolygonShape3D_ufirn")
[node name="CollisionShape3D2" type="CollisionShape3D" parent="TestRamps/Rock/RampGeometry/StaticBody3D2"]
transform = Transform3D(-2.98023e-08, 0, -1, 0, 1, 0, 1, 0, -2.98023e-08, 0, 25, 109)
shape = SubResource("ConcavePolygonShape3D_gq475")
[node name="BallSpawn" type="Marker3D" parent="TestRamps/Rock/RampGeometry" groups=["BallSpawn"]]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 50, 158)
[node name="Wood" type="Node3D" parent="TestRamps"]
transform = Transform3D(0.866025, 0, -0.5, 0, 1, 0, 0.5, 0, 0.866025, 0, 0, 0)
[node name="RampGeometry" type="Node3D" parent="TestRamps/Wood"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 30)
[node name="MeshInstance3D" type="MeshInstance3D" parent="TestRamps/Wood/RampGeometry"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 30)
mesh = SubResource("BoxMesh_oukkf")
surface_material_override/0 = SubResource("StandardMaterial3D_5nlxd")
[node name="MeshInstance3D2" type="MeshInstance3D" parent="TestRamps/Wood/RampGeometry"]
transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, 0, 25, 109)
mesh = SubResource("PrismMesh_c7rfr")
surface_material_override/0 = SubResource("StandardMaterial3D_5nlxd")
[node name="Label3D" type="Label3D" parent="TestRamps/Wood/RampGeometry"]
transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 0, 8, 0)
text = "Wood"
font = ExtResource("5_h18yf")
font_size = 300
outline_size = 48
[node name="StaticBody3D2" type="StaticBody3D" parent="TestRamps/Wood/RampGeometry"]
[node name="TerrainMarker" type="Node" parent="TestRamps/Wood/RampGeometry/StaticBody3D2"]
script = ExtResource("6_4bo0x")
type = 7
[node name="CollisionShape3D" type="CollisionShape3D" parent="TestRamps/Wood/RampGeometry/StaticBody3D2"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 30)
shape = SubResource("ConcavePolygonShape3D_ufirn")
[node name="CollisionShape3D2" type="CollisionShape3D" parent="TestRamps/Wood/RampGeometry/StaticBody3D2"]
transform = Transform3D(-2.98023e-08, 0, -1, 0, 1, 0, 1, 0, -2.98023e-08, 0, 25, 109)
shape = SubResource("ConcavePolygonShape3D_gq475")
[node name="BallSpawn" type="Marker3D" parent="TestRamps/Wood/RampGeometry" groups=["BallSpawn"]]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 50, 158)
[node name="Metal" type="Node3D" parent="TestRamps"]
transform = Transform3D(0.642788, 0, -0.766044, 0, 1, 0, 0.766044, 0, 0.642788, 0, 0, 0)
[node name="RampGeometry" type="Node3D" parent="TestRamps/Metal"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 30)
[node name="MeshInstance3D" type="MeshInstance3D" parent="TestRamps/Metal/RampGeometry"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 30)
mesh = SubResource("BoxMesh_oukkf")
surface_material_override/0 = SubResource("StandardMaterial3D_fhrit")
[node name="MeshInstance3D2" type="MeshInstance3D" parent="TestRamps/Metal/RampGeometry"]
transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, 0, 25, 109)
mesh = SubResource("PrismMesh_c7rfr")
surface_material_override/0 = SubResource("StandardMaterial3D_fhrit")
[node name="Label3D" type="Label3D" parent="TestRamps/Metal/RampGeometry"]
transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 0, 8, 0)
text = "Metal"
font = ExtResource("5_h18yf")
font_size = 300
outline_size = 48
[node name="StaticBody3D2" type="StaticBody3D" parent="TestRamps/Metal/RampGeometry"]
[node name="TerrainMarker" type="Node" parent="TestRamps/Metal/RampGeometry/StaticBody3D2"]
script = ExtResource("6_4bo0x")
type = 8
[node name="CollisionShape3D" type="CollisionShape3D" parent="TestRamps/Metal/RampGeometry/StaticBody3D2"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 30)
shape = SubResource("ConcavePolygonShape3D_ufirn")
[node name="CollisionShape3D2" type="CollisionShape3D" parent="TestRamps/Metal/RampGeometry/StaticBody3D2"]
transform = Transform3D(-2.98023e-08, 0, -1, 0, 1, 0, 1, 0, -2.98023e-08, 0, 25, 109)
shape = SubResource("ConcavePolygonShape3D_gq475")
[node name="BallSpawn" type="Marker3D" parent="TestRamps/Metal/RampGeometry" groups=["BallSpawn"]]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 50, 158)
[node name="Glass" type="Node3D" parent="TestRamps"]
transform = Transform3D(0.34202, 0, -0.939692, 0, 1, 0, 0.939692, 0, 0.34202, 0, 0, 0)
[node name="RampGeometry" type="Node3D" parent="TestRamps/Glass"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 30)
[node name="MeshInstance3D" type="MeshInstance3D" parent="TestRamps/Glass/RampGeometry"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 30)
mesh = SubResource("BoxMesh_oukkf")
surface_material_override/0 = ExtResource("14_o81al")
[node name="MeshInstance3D2" type="MeshInstance3D" parent="TestRamps/Glass/RampGeometry"]
transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, 0, 25, 109)
mesh = SubResource("PrismMesh_c7rfr")
surface_material_override/0 = ExtResource("14_o81al")
[node name="Label3D" type="Label3D" parent="TestRamps/Glass/RampGeometry"]
transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 0, 8, 0)
text = "Glass"
font = ExtResource("5_h18yf")
font_size = 300
outline_size = 48
[node name="StaticBody3D2" type="StaticBody3D" parent="TestRamps/Glass/RampGeometry"]
[node name="TerrainMarker" type="Node" parent="TestRamps/Glass/RampGeometry/StaticBody3D2"]
script = ExtResource("6_4bo0x")
type = 9
[node name="CollisionShape3D" type="CollisionShape3D" parent="TestRamps/Glass/RampGeometry/StaticBody3D2"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 30)
shape = SubResource("ConcavePolygonShape3D_ufirn")
[node name="CollisionShape3D2" type="CollisionShape3D" parent="TestRamps/Glass/RampGeometry/StaticBody3D2"]
transform = Transform3D(-2.98023e-08, 0, -1, 0, 1, 0, 1, 0, -2.98023e-08, 0, 25, 109)
shape = SubResource("ConcavePolygonShape3D_gq475")
[node name="BallSpawn" type="Marker3D" parent="TestRamps/Glass/RampGeometry" groups=["BallSpawn"]]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 50, 158)

View File

@ -248,6 +248,14 @@ locale/translations=PackedStringArray("res://assets/text/text.en.translation")
3d_physics/layer_1="Collision Geometry"
3d_physics/layer_2="Water"
3d_physics/layer_25="Green Material"
3d_physics/layer_26="Fairway Material"
3d_physics/layer_27="Glass Material"
3d_physics/layer_28="Metal Material"
3d_physics/layer_29="Rock Material"
3d_physics/layer_30="Wood Material"
3d_physics/layer_31="Sand Material"
3d_physics/layer_32="Grass Material"
[physics]
@ -255,7 +263,6 @@ locale/translations=PackedStringArray("res://assets/text/text.en.translation")
3d/sleep_threshold_angular=2.0
jolt_3d/sleep/velocity_threshold=0.1
jolt_3d/sleep/time_threshold=1.0
jolt_3d/limits/max_angular_velocity=270000.0
jolt_3d/limits/max_temporary_memory=64
[rendering]

View File

@ -1,18 +0,0 @@
extends GameBall
const INFO_FMT := "speed: {0} m/s\nang.spd: {1}\nsurface: {2}\ntime: {3} s"
@onready var debug_info: Label3D = %DebugInfo
func _physics_process(delta: float) -> void:
super._physics_process(delta)
debug_info.text = INFO_FMT.format(
[
linear_velocity.length(),
angular_velocity.length(),
Terrain.Type.keys()[_surface_terrain],
_shot_time_s
]
)

View File

@ -1,44 +0,0 @@
[gd_scene load_steps=7 format=3 uid="uid://b7pgvftmj7nbe"]
[ext_resource type="PackedScene" uid="uid://dfttci386ohip" path="res://src/equipment/balls/physics_ball/physics_ball.tscn" id="1_gcsxs"]
[ext_resource type="Script" path="res://src/equipment/balls/debug_ball/debug_ball.gd" id="2_edye5"]
[ext_resource type="Texture2D" uid="uid://tancoet1lih5" path="res://assets/ui/ball_icons/basic_icon.png" id="2_h3ccx"]
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_8pnwh"]
transparency = 1
no_depth_test = true
shading_mode = 0
albedo_texture = ExtResource("2_h3ccx")
texture_filter = 2
billboard_mode = 1
fixed_size = true
[sub_resource type="QuadMesh" id="QuadMesh_lf5f4"]
material = SubResource("StandardMaterial3D_8pnwh")
size = Vector2(0.05, 0.05)
[sub_resource type="SystemFont" id="SystemFont_td87w"]
font_names = PackedStringArray("Monospace")
subpixel_positioning = 0
[node name="DebugBall" instance=ExtResource("1_gcsxs")]
script = ExtResource("2_edye5")
[node name="MeshInstance3D" type="MeshInstance3D" parent="BallMesh" index="0"]
mesh = SubResource("QuadMesh_lf5f4")
[node name="DebugInfo" type="Label3D" parent="BallMesh" index="1"]
unique_name_in_owner = true
pixel_size = 0.0005
offset = Vector2(0, -64)
billboard = 1
no_depth_test = true
fixed_size = true
texture_filter = 2
text = "DEBUG INFO
DEBUG INFO
DEBUG INFO"
font = SubResource("SystemFont_td87w")
outline_size = 10
horizontal_alignment = 0
vertical_alignment = 0

View File

@ -14,28 +14,16 @@ enum Type {
POWER,
}
const MAGNUS_SQ_EPSILON := 1e-3
const TERRAIN_DAMPING_EPSILON := 1e-6
const MAGNUS_EPSILON := 1e-3
## If enabled, ball ability cooldown is only reset at end of shot.
@export var once_per_shot_ability := false
## Material physics configuration for this ball.
@export var terrain_physics: TerrainPhysics
## Coefficient of the roll damping quadratic curve.
## This applies progressively greater damping after the ball rolls for a period of time.
@export var roll_damping_coefficient := 0.4
## Time in seconds after the ball begins rolling after which roll damping will start to apply.
## This applies progressively greater damping after the ball rolls for a period of time.
@export var roll_damping_delay := 12.0
## Coefficient of the roll cull linear curve.
## The ball be frozen if it rolls with speed under this curve.
@export var roll_cull_coefficient := 0.2
## Time in seconds after the ball begins rolling after which roll culling will start to apply.
@export var roll_cull_delay := 16.0
## Angular damping while in air
@export var air_damping := 0.0
## Angular damping while in collision with rough terrain
@export var rough_damping := 8.0
#@export var fluid_density := 1.225
#@export var lift_coefficient := 0.05
@ -70,9 +58,6 @@ var _position_on_last_wake: Vector3
var _awake := false
var _ability_triggered := false
var _zones: Array[BallZone] = []
var _shot_time_s := 0.0
var _surface_time_s := 0.0
var _surface_terrain: Terrain.Type
@onready var ability_cooldown: Timer = %AbilityCooldown
@onready var manual_sleep_timer: Timer = %ManualSleepTimer
@ -117,6 +102,12 @@ func get_damage() -> float:
return base_damage + linear_velocity.length_squared() * damage_force_scale
func _total_terrain_angular_damping() -> float:
return _zones.reduce(
func(a: float, b: BallZone) -> float: return a + b.terrain_angular_damping, 0.0
)
func _magnus_force() -> Vector3:
return magnus_coefficient * radius * angular_velocity.cross(linear_velocity)
@ -129,52 +120,33 @@ func _integrate_forces(state: PhysicsDirectBodyState3D) -> void:
_ability_triggered = false
_position_on_last_wake = global_position
_last_contact_normal = Vector3.UP
_shot_time_s = 0.0
_surface_time_s = 0.0
# TODO something's fucky here... I think this gets called once after the ball sleeps
var damping := air_damping
if state.get_contact_count():
# Ball is in contact with a surface
constant_force = Vector3.ZERO
# We want the contact normal which minimizes the angle to the up vector
var min_dot := -1.0
var primary_body: Node
for i: int in range(state.get_contact_count()):
var norm := state.get_contact_local_normal(i)
var dot := norm.dot(Vector3.UP)
if dot > min_dot:
min_dot = dot
_last_contact_normal = norm
primary_body = state.get_contact_collider_object(i)
_surface_terrain = Terrain.from_collision(global_position, primary_body)
else:
# Ball is in the air
_surface_terrain = Terrain.Type.NONE
_surface_time_s = 0.0
var params := terrain_physics.get_params(_surface_terrain)
angular_damp = params.angular_damp
linear_damp = params.linear_damp
# Progressively increase linear damping after a delay.
linear_damp += roll_damping_coefficient * pow(maxf(_surface_time_s - roll_damping_delay, 0), 2)
var cull_speed := roll_cull_coefficient * maxf(_surface_time_s - roll_cull_delay, 0)
if linear_velocity.length_squared() < pow(cull_speed, 2):
_manual_sleep()
damping = _total_terrain_angular_damping()
if damping <= TERRAIN_DAMPING_EPSILON:
damping = rough_damping
angular_damp = damping
func _physics_process(delta: float) -> void:
func _physics_process(_delta: float) -> void:
# Simulate magnus effect
var magnus := _magnus_force()
if magnus.length_squared() > MAGNUS_SQ_EPSILON:
if magnus.length_squared() > MAGNUS_EPSILON:
apply_central_force(magnus)
# Keep shot time
_shot_time_s += delta
_surface_time_s += delta
func enter_zone(zone: BallZone) -> void:
_zones.push_back(zone)
@ -204,20 +176,21 @@ func _on_sleeping_state_changed() -> void:
_awake = false
func _manual_sleep() -> void:
freeze = true
linear_velocity = Vector3.ZERO
angular_velocity = Vector3.ZERO
manual_sleep_timer.start()
func _on_collision(body: Node) -> void:
if is_sticky():
# Freeze physics as soon as we hit something
_manual_sleep()
freeze = true
manual_sleep_timer.start()
var terrain := Terrain.from_collision(global_position, body)
print_debug("Collision terrain: ", Terrain.Type.keys()[terrain])
var terrain: Terrain.Type
if body is Terrain3D:
terrain = Terrain.at_position(global_position, body as Terrain3D)
elif body is CSGShape3D:
terrain = Terrain.from_physical_layer((body as CSGShape3D).collision_layer)
elif body is CollisionObject3D:
terrain = Terrain.from_physical_layer((body as CollisionObject3D).collision_layer)
else:
print_debug("COLLIDER: ", body)
if terrain:
sfx.play_sfx(terrain)

View File

@ -1,4 +1,4 @@
[gd_resource type="PhysicsMaterial" format=3 uid="uid://3bih72l068ic"]
[resource]
bounce = 0.4
bounce = 0.5

View File

@ -1,10 +1,8 @@
[gd_scene load_steps=38 format=3 uid="uid://dfttci386ohip"]
[gd_scene load_steps=25 format=3 uid="uid://dfttci386ohip"]
[ext_resource type="Script" path="res://src/equipment/balls/physics_ball/game_ball.gd" id="1_iwh2u"]
[ext_resource type="PhysicsMaterial" uid="uid://3bih72l068ic" path="res://src/equipment/balls/physics_ball/normal_physics.tres" id="1_l23pw"]
[ext_resource type="Script" path="res://src/equipment/balls/physics_ball/terrain_physics/terrain_physics.gd" id="3_52hui"]
[ext_resource type="Material" uid="uid://dpsmjlhjpc7vs" path="res://assets/materials/basic_ball_material.tres" id="3_rc7m1"]
[ext_resource type="Script" path="res://src/equipment/balls/physics_ball/terrain_physics/terrain_parameters.gd" id="4_onl6o"]
[ext_resource type="Script" path="res://src/equipment/balls/physics_ball/ball_sfx.gd" id="5_bhshl"]
[ext_resource type="AudioStream" uid="uid://cayyndwmxua5x" path="res://assets/sound/sfx/ball/grass2.wav" id="7_l22cv"]
[ext_resource type="AudioStream" uid="uid://orisjdcj3mes" path="res://assets/sound/sfx/ball/concrete3.wav" id="7_t2ak2"]
@ -17,69 +15,6 @@
[ext_resource type="Texture2D" uid="uid://c47bkx508biqr" path="res://assets/sprites/particles/plasma.png" id="12_guipt"]
[ext_resource type="PackedScene" uid="uid://cm4bb3lg4mfd2" path="res://src/world/effects/splash/splash_effect.tscn" id="12_qlrvx"]
[sub_resource type="Resource" id="Resource_casfi"]
script = ExtResource("4_onl6o")
linear_damp = 0.0
angular_damp = 1.4
[sub_resource type="Resource" id="Resource_3k63c"]
script = ExtResource("4_onl6o")
linear_damp = 0.0
angular_damp = 0.0
[sub_resource type="Resource" id="Resource_xf73q"]
script = ExtResource("4_onl6o")
linear_damp = 0.0
angular_damp = 2.0
[sub_resource type="Resource" id="Resource_nhn3l"]
script = ExtResource("4_onl6o")
linear_damp = 0.0
angular_damp = 0.6
[sub_resource type="Resource" id="Resource_m3wjo"]
script = ExtResource("4_onl6o")
linear_damp = 0.0
angular_damp = 1.0
[sub_resource type="Resource" id="Resource_h4rld"]
script = ExtResource("4_onl6o")
linear_damp = 0.0
angular_damp = 0.9
[sub_resource type="Resource" id="Resource_j6lib"]
script = ExtResource("4_onl6o")
linear_damp = 0.0
angular_damp = 2.5
[sub_resource type="Resource" id="Resource_7f7ql"]
script = ExtResource("4_onl6o")
linear_damp = 0.0
angular_damp = 4.0
[sub_resource type="Resource" id="Resource_pusmf"]
script = ExtResource("4_onl6o")
linear_damp = 0.0
angular_damp = 8.0
[sub_resource type="Resource" id="Resource_edkxb"]
script = ExtResource("4_onl6o")
linear_damp = 0.0
angular_damp = 0.9
[sub_resource type="Resource" id="Resource_3ngau"]
script = ExtResource("3_52hui")
default = SubResource("Resource_3k63c")
rough = SubResource("Resource_7f7ql")
fairway = SubResource("Resource_xf73q")
green = SubResource("Resource_m3wjo")
sand = SubResource("Resource_pusmf")
concrete = SubResource("Resource_casfi")
rock = SubResource("Resource_j6lib")
wood = SubResource("Resource_edkxb")
metal = SubResource("Resource_h4rld")
glass = SubResource("Resource_nhn3l")
[sub_resource type="SphereMesh" id="SphereMesh_y0d13"]
material = ExtResource("3_rc7m1")
radius = 0.05
@ -197,15 +132,14 @@ size = Vector2(0.2, 0.2)
[node name="PhysicsBall" type="RigidBody3D"]
mass = 0.05
physics_material_override = ExtResource("1_l23pw")
sleeping = true
freeze = true
continuous_cd = true
contact_monitor = true
max_contacts_reported = 3
linear_damp_mode = 1
angular_damp_mode = 1
angular_damp = 8.0
script = ExtResource("1_iwh2u")
terrain_physics = SubResource("Resource_3ngau")
[node name="BallMesh" type="MeshInstance3D" parent="."]
mesh = SubResource("SphereMesh_y0d13")

View File

@ -1,5 +0,0 @@
class_name TerrainParameters extends Resource
## Physical parameters for an individual terrain type.
@export var linear_damp := 0.0
@export var angular_damp := 0.0

View File

@ -1,40 +0,0 @@
class_name TerrainPhysics extends Resource
## Container for ball behavior parameters when in contact with different terrain types
@export var default: TerrainParameters
@export var rough: TerrainParameters
@export var fairway: TerrainParameters
@export var green: TerrainParameters
@export var sand: TerrainParameters
@export var concrete: TerrainParameters
@export var rock: TerrainParameters
@export var wood: TerrainParameters
@export var metal: TerrainParameters
@export var glass: TerrainParameters
func get_params(type: Terrain.Type) -> TerrainParameters:
# NOTE: sure would be nice to just store this in a dict,
# but that makes editing physics through the editor unweildy.
match type:
Terrain.Type.ROUGH:
return rough
Terrain.Type.FAIRWAY:
return fairway
Terrain.Type.GREEN:
return green
Terrain.Type.SAND:
return sand
Terrain.Type.CONCRETE:
return concrete
Terrain.Type.ROCK:
return rock
Terrain.Type.WOOD:
return wood
Terrain.Type.METAL:
return metal
Terrain.Type.GLASS:
return glass
_:
return default

View File

@ -1,7 +1,7 @@
class_name Game extends Node
## Wrapper for the game application
@export_file("*.tscn") var start_scene: String = "res://src/ui/menus/title_screen/title_screen.tscn"
@export var start_scene: String = "res://src/ui/menus/title_screen/title_screen.tscn"
var _loading_resources := {}

View File

@ -119,7 +119,6 @@ _data = {
[node name="Game" type="Node" groups=["GameGroup"]]
process_mode = 3
script = ExtResource("1_4qa87")
start_scene = "res://src/world/world.tscn"
[node name="RootControl" type="Control" parent="."]
unique_name_in_owner = true

View File

@ -426,7 +426,6 @@ stream_0/stream = ExtResource("15_fn6g1")
[node name="ShotSetup" type="Node3D"]
script = ExtResource("1_r6ei4")
perfect_aim = true
[node name="BallPoint" type="Node3D" parent="."]
unique_name_in_owner = true

File diff suppressed because one or more lines are too long

View File

@ -1,7 +1,6 @@
[gd_scene load_steps=4 format=3 uid="uid://dagh38vap4t1d"]
[gd_scene load_steps=3 format=3 uid="uid://dagh38vap4t1d"]
[ext_resource type="PackedScene" uid="uid://mhycq1tk1bpm" path="res://assets/models/scenery/city/concrete_building_1/concrete_building_1.gltf" id="1_id6ph"]
[ext_resource type="Script" path="res://src/world/terrain_marker.gd" id="2_5x2lp"]
[sub_resource type="BoxShape3D" id="BoxShape3D_5g4vq"]
size = Vector3(16, 24, 16)
@ -10,10 +9,6 @@ size = Vector3(16, 24, 16)
[node name="StaticBody3D" type="StaticBody3D" parent="." index="1"]
[node name="TerrainMarker" type="Node" parent="StaticBody3D" index="0"]
script = ExtResource("2_5x2lp")
type = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="StaticBody3D" index="1"]
[node name="CollisionShape3D" type="CollisionShape3D" parent="StaticBody3D" index="0"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 12, 0)
shape = SubResource("BoxShape3D_5g4vq")

View File

@ -1,8 +1,7 @@
[gd_scene load_steps=6 format=3 uid="uid://cjubxs7peir5k"]
[gd_scene load_steps=5 format=3 uid="uid://cjubxs7peir5k"]
[ext_resource type="PackedScene" uid="uid://hwc1px831dgm" path="res://assets/models/scenery/city/kana_signboard/kana_signboard.gltf" id="1_o4tvg"]
[ext_resource type="Texture2D" uid="uid://d0lsrrx0r5wnu" path="res://assets/models/scenery/city/kana_signboard/kana_signboard.png" id="2_85s5u"]
[ext_resource type="Script" path="res://src/world/terrain_marker.gd" id="3_dllon"]
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_dwyvb"]
albedo_texture = ExtResource("2_85s5u")
@ -19,17 +18,13 @@ surface_material_override/0 = SubResource("StandardMaterial3D_dwyvb")
[node name="StaticBody3D" type="StaticBody3D" parent="." index="3"]
[node name="TerrainMarker" type="Node" parent="StaticBody3D" index="0"]
script = ExtResource("3_dllon")
type = 8
[node name="CollisionShape3D" type="CollisionShape3D" parent="StaticBody3D" index="1"]
[node name="CollisionShape3D" type="CollisionShape3D" parent="StaticBody3D" index="0"]
shape = SubResource("BoxShape3D_kp4b0")
[node name="CollisionShape3D2" type="CollisionShape3D" parent="StaticBody3D" index="2"]
[node name="CollisionShape3D2" type="CollisionShape3D" parent="StaticBody3D" index="1"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.5, 1.2)
shape = SubResource("BoxShape3D_kp4b0")
[node name="CollisionShape3D3" type="CollisionShape3D" parent="StaticBody3D" index="3"]
[node name="CollisionShape3D3" type="CollisionShape3D" parent="StaticBody3D" index="2"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -1.5, 1.2)
shape = SubResource("BoxShape3D_kp4b0")

View File

@ -1,11 +1,10 @@
[gd_scene load_steps=6 format=3 uid="uid://nqar1qcun8ax"]
[gd_scene load_steps=5 format=3 uid="uid://nqar1qcun8ax"]
[ext_resource type="Script" path="res://src/props/scenery/highway/guard_rail/guard_rail.gd" id="1_imntf"]
[ext_resource type="Material" uid="uid://cift6p0wn1oce" path="res://assets/materials/guard_rail.tres" id="2_1s4wy"]
[ext_resource type="PlaneMesh" uid="uid://bdcmgvgpj1e0w" path="res://src/props/scenery/highway/guard_rail/guard_rail_post_mesh.tres" id="3_hha2c"]
[ext_resource type="Script" path="res://src/world/terrain_marker.gd" id="3_nfjvf"]
[sub_resource type="MultiMesh" id="MultiMesh_1dcl6"]
[sub_resource type="MultiMesh" id="MultiMesh_1o4mq"]
transform_format = 1
mesh = ExtResource("3_hha2c")
@ -27,10 +26,6 @@ path_u_distance = 1.0
path_joined = false
material = ExtResource("2_1s4wy")
[node name="TerrainMarker" type="Node" parent="UpperRail"]
script = ExtResource("3_nfjvf")
type = 8
[node name="LowerRail" type="CSGPolygon3D" parent="."]
use_collision = true
polygon = PackedVector2Array(0, 0.4, -0.01, 0.5, 0, 0.6, 0.01, 0.5)
@ -46,11 +41,7 @@ path_u_distance = 1.0
path_joined = false
material = ExtResource("2_1s4wy")
[node name="TerrainMarker" type="Node" parent="LowerRail"]
script = ExtResource("3_nfjvf")
type = 8
[node name="PostMultiMesh" type="MultiMeshInstance3D" parent="."]
multimesh = SubResource("MultiMesh_1dcl6")
multimesh = SubResource("MultiMesh_1o4mq")
[connection signal="curve_changed" from="." to="." method="_on_curve_changed"]

View File

@ -1,7 +1,6 @@
[gd_scene load_steps=4 format=3 uid="uid://d0tcr6uijpym5"]
[gd_scene load_steps=3 format=3 uid="uid://d0tcr6uijpym5"]
[ext_resource type="Texture2D" uid="uid://dloe67udf7fpd" path="res://assets/textures/highway/highway_road_grass.png" id="1_f3xui"]
[ext_resource type="Script" path="res://src/world/terrain_marker.gd" id="2_4f0hb"]
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_nkovu"]
transparency = 1
@ -26,7 +25,3 @@ path_continuous_u = true
path_u_distance = 1.0
path_joined = false
material = SubResource("StandardMaterial3D_nkovu")
[node name="TerrainMarker" type="Node" parent="CSGPolygon3D"]
script = ExtResource("2_4f0hb")
type = 5

View File

@ -1,7 +1,6 @@
[gd_scene load_steps=9 format=3 uid="uid://di7aql54lksn7"]
[gd_scene load_steps=8 format=3 uid="uid://di7aql54lksn7"]
[ext_resource type="PackedScene" uid="uid://bgdgd3lky5w60" path="res://assets/models/scenery/trees/palm_tree/palm_tree.gltf" id="1_o3thn"]
[ext_resource type="Script" path="res://src/world/terrain_marker.gd" id="2_1lamy"]
[sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_bp5t6"]
data = PackedVector3Array(-0.6467, 5.2727, -3.6037, -0.7678, 3.663, -4.1571, 0.0705, 4.1529, -5.0529, 0.1793, 5.4514, -3.9613, 1.1035, 5.3325, -3.712, 0.2063, 5.6673, -3.3214, 0.2063, 5.6673, -3.3214, 1.1035, 5.3325, -3.712, 0.2526, 6.0382, -2.2225, -0.102, 1.5632, -4.5545, 0.9292, 3.4191, -4.4363, 0.0705, 4.1529, -5.0529, 0.0705, 4.1529, -5.0529, -0.7379, 3.4651, -4.2526, -0.102, 1.5632, -4.5545, 0.0705, 4.1529, -5.0529, 0.992, 3.6309, -4.3423, 1.1035, 5.3325, -3.712, 0.0705, 4.1529, -5.0529, 1.1035, 5.3325, -3.712, 0.1793, 5.4514, -3.9613, 0.0705, 4.1529, -5.0529, 0.1793, 5.4514, -3.9613, -0.6467, 5.2727, -3.6037, 0.2063, 5.6673, -3.3214, 0.2526, 6.0382, -2.2225, -0.4953, 5.4015, -3.3712, 0.2063, 5.6673, -3.3214, -0.6467, 5.2727, -3.6037, 0.1793, 5.4514, -3.9613)
@ -45,35 +44,26 @@ bones/10/rotation = Quaternion(0.183326, -0.237737, -0.342496, 0.890264)
bones/10/scale = Vector3(1, 1, 1)
bones/11/rotation = Quaternion(-0.13894, 0.0183908, 0.000355869, 0.99013)
[node name="LeafBody" type="StaticBody3D" parent="." index="2"]
[node name="StaticBody3D" type="StaticBody3D" parent="." index="2"]
collision_layer = 2147483649
[node name="TerrainMarker" type="Node" parent="LeafBody" index="0"]
script = ExtResource("2_1lamy")
type = 1
[node name="CollisionShape3D2" type="CollisionShape3D" parent="LeafBody" index="1"]
[node name="CollisionShape3D2" type="CollisionShape3D" parent="StaticBody3D" index="0"]
shape = SubResource("ConcavePolygonShape3D_bp5t6")
[node name="CollisionShape3D3" type="CollisionShape3D" parent="LeafBody" index="2"]
[node name="CollisionShape3D3" type="CollisionShape3D" parent="StaticBody3D" index="1"]
shape = SubResource("ConcavePolygonShape3D_j5qxc")
[node name="CollisionShape3D4" type="CollisionShape3D" parent="LeafBody" index="3"]
[node name="CollisionShape3D4" type="CollisionShape3D" parent="StaticBody3D" index="2"]
shape = SubResource("ConcavePolygonShape3D_eopyd")
[node name="CollisionShape3D5" type="CollisionShape3D" parent="LeafBody" index="4"]
[node name="CollisionShape3D5" type="CollisionShape3D" parent="StaticBody3D" index="3"]
shape = SubResource("ConcavePolygonShape3D_npgp7")
[node name="CollisionShape3D6" type="CollisionShape3D" parent="LeafBody" index="5"]
[node name="CollisionShape3D6" type="CollisionShape3D" parent="StaticBody3D" index="4"]
shape = SubResource("ConcavePolygonShape3D_xl1fh")
[node name="TrunkBody" type="StaticBody3D" parent="." index="3"]
[node name="TerrainMarker" type="Node" parent="TrunkBody" index="0"]
script = ExtResource("2_1lamy")
type = 7
[node name="CollisionShape3D" type="CollisionShape3D" parent="TrunkBody" index="1"]
[node name="CollisionShape3D" type="CollisionShape3D" parent="StaticBody3D" index="5"]
shape = SubResource("ConcavePolygonShape3D_lol7j")
[node name="AnimationPlayer" parent="." index="4"]
[node name="AnimationPlayer" parent="." index="3"]
autoplay = "sway_circle"

View File

@ -64,25 +64,25 @@ void fragment() {
vec2 centered_uv = (UV - 0.5) * size;
float radius = length(centered_uv);
float angle = atan(centered_uv.y, centered_uv.x) + PI; // Add PI to fix left side cutoff
vec2 ray1 = vec2(angle * ray1_density + TIME * speed + seed + sin(angle * 3.0), radius * 2.0);
vec2 ray2 = vec2(angle * ray2_density + TIME * speed * 1.5 + seed + cos(angle * 2.0), radius * 2.0);
float cut = 1.0 - smoothstep(cutoff, cutoff + 0.2, radius);
ray1 *= cut;
ray2 *= cut;
float rays = hdr ?
float rays = hdr ?
noise(ray1) + (noise(ray2) * ray2_intensity) :
clamp(noise(ray1) + (noise(ray2) * ray2_intensity), 0., 1.);
rays *= smoothstep(spread, spread * 0.3, radius);
float core = smoothstep(0.2, 0.0, radius) * core_intensity;
rays += core;
vec4 gradient_color = texture(gradient, vec2(rays, 0.5));
vec3 shine = vec3(rays) * gradient_color.rgb;
float blur_amount = radius * 0.1;
vec2 blur_uv = SCREEN_UV + centered_uv * blur_amount;
vec4 blurred = texture(SCREEN_TEXTURE, blur_uv);

View File

@ -63,8 +63,7 @@ var _cached_vel: Vector3
func set_ball(ball: GameBall) -> void:
global_position = ball.global_position
linear_damp = ball.terrain_physics.default.linear_damp
print("using linear damp: ", linear_damp)
linear_damp = ball.linear_damp
func _process(_delta: float) -> void:

View File

@ -110,57 +110,6 @@ particles_anim_loop = false
material = SubResource("StandardMaterial3D_l1irr")
size = Vector2(0.1, 0.1)
[sub_resource type="Animation" id="Animation_mg6va"]
length = 0.001
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("Decal:size")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector3(2, 4, 2)]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("Decal:modulate")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Color(1, 1, 1, 1)]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("SprayParticles:emitting")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [false]
}
tracks/3/type = "value"
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/path = NodePath("BubbleParticles:emitting")
tracks/3/interp = 1
tracks/3/loop_wrap = true
tracks/3/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [false]
}
[sub_resource type="Animation" id="Animation_ifddj"]
resource_name = "effect"
length = 2.0
@ -227,6 +176,57 @@ tracks/4/keys = {
}]
}
[sub_resource type="Animation" id="Animation_mg6va"]
length = 0.001
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("Decal:size")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector3(2, 4, 2)]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("Decal:modulate")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Color(1, 1, 1, 1)]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("SprayParticles:emitting")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [false]
}
tracks/3/type = "value"
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/path = NodePath("BubbleParticles:emitting")
tracks/3/interp = 1
tracks/3/loop_wrap = true
tracks/3/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [false]
}
[sub_resource type="AnimationLibrary" id="AnimationLibrary_87fye"]
_data = {
"RESET": SubResource("Animation_mg6va"),

View File

@ -16,7 +16,17 @@ enum Type {
GLASS,
}
const DEFAULT_MATERIAL := Type.CONCRETE
## We use the upper bits of collision layers to encode material data
const PHYSICAL_LAYERS := {
1 << 31: Type.ROUGH,
1 << 30: Type.SAND,
1 << 29: Type.WOOD,
1 << 28: Type.ROCK,
1 << 27: Type.METAL,
1 << 26: Type.GLASS,
1 << 25: Type.FAIRWAY,
1 << 24: Type.GREEN,
}
## Get the `Terrain.Type` value which corresponds to the given Terrain3D texture ID.
@ -36,18 +46,18 @@ static func from_texture_id(tex_id: int) -> Type:
4:
return Type.ROCK
_:
return DEFAULT_MATERIAL
return Type.NONE
## Get the `Terrain.Type` value associated with a collision body.
## Get the `Terrain.Type` value encoded in the given collision layer setting.
##
## This returns the type stored in the first `TerrainMarker` direct child of the body.
## Use this method to set the terrain type of arbitrary bodies!
static func from_body(body: Node) -> Type:
for n: Node in body.get_children():
if n is TerrainMarker:
return (n as TerrainMarker).type
return DEFAULT_MATERIAL
## We use the upper bits in the collision layer to encode material data.
## Check the collision layer descriptions for more information.
static func from_physical_layer(collision_layer: int) -> Type:
for bit: int in PHYSICAL_LAYERS:
if collision_layer & bit:
return PHYSICAL_LAYERS[bit]
return Type.CONCRETE
## Get the `Terrain.Type` value at the given position in a Terrain3D node.
@ -59,13 +69,3 @@ static func at_position(global_position: Vector3, terrain3d: Terrain3D) -> Type:
else:
id = int(blend.x)
return from_texture_id(id)
## Get the Terrain.Type value at the given position for the given body.
##
## Position is only used when colliding with a Terrain3D node.
## Other bodies will have one material type for the entire body node.
static func from_collision(global_position: Vector3, body: Node) -> Type:
if body is Terrain3D:
return Terrain.at_position(global_position, body as Terrain3D)
return Terrain.from_body(body)

View File

@ -1,4 +0,0 @@
class_name TerrainMarker extends Node
## Marks the terrain type of a parent collision body.
@export var type: Terrain.Type

View File

@ -1,20 +1,32 @@
[gd_scene load_steps=22 format=3 uid="uid://cwnwcd8kushl3"]
[gd_scene load_steps=24 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/player/world_player.gd" id="2_e743i"]
[ext_resource type="Script" path="res://src/ui/world_ui.gd" id="2_imewa"]
[ext_resource type="PackedScene" uid="uid://bm2o3mex10v11" path="res://levels/debug_level/debug_level.tscn" id="2_l08a0"]
[ext_resource type="PackedScene" uid="uid://ciqd8r8yt00y0" path="res://levels/mall/mall.tscn" id="2_u4xvm"]
[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/practice_manager.gd" id="5_yk526"]
[ext_resource type="Resource" uid="uid://c1pnqsddvey3m" path="res://src/equipment/clubs/drivers/debug_driver.tres" id="5_28hal"]
[ext_resource type="Script" path="res://src/world/play_manager/round_robin_manager.gd" id="5_h6mje"]
[ext_resource type="PackedScene" uid="uid://byvjsvavbg5xe" path="res://src/ui/menus/pause_menu/pause_menu.tscn" id="7_0gd42"]
[ext_resource type="PackedScene" uid="uid://biokiug3e0ipk" path="res://src/ui/shot_hud/death_alert.tscn" id="8_fuyxc"]
[ext_resource type="PackedScene" uid="uid://dwyy7tt3nose1" path="res://src/ui/shot_hud/winner_alert.tscn" id="9_lln1k"]
[ext_resource type="FontFile" uid="uid://dwy8k2w7vt64x" path="res://assets/fonts/classic-better-vcr/classic-better-vcr.otf" id="11_uv5b5"]
[ext_resource type="Shader" path="res://src/shaders/vcr_distortion.gdshader" id="11_xag32"]
[sub_resource type="Resource" id="Resource_hpydy"]
script = ExtResource("5_yk526")
players = Array[ExtResource("2_e743i")]([ExtResource("3_pyw81")])
[sub_resource type="Resource" id="Resource_mbhdy"]
script = ExtResource("2_e743i")
life = 3.0
name = "DeadGfolfer"
color = Color(1, 0.439216, 0.439216, 1)
driver = ExtResource("5_28hal")
_balls = {
1: -1,
2: -1
}
[sub_resource type="Resource" id="Resource_rdjhi"]
script = ExtResource("5_h6mje")
players = Array[ExtResource("2_e743i")]([ExtResource("3_pyw81"), SubResource("Resource_mbhdy")])
[sub_resource type="Animation" id="Animation_6350f"]
length = 0.001
@ -155,8 +167,8 @@ _data = {
[node name="World" type="Node" groups=["WorldGroup"]]
script = ExtResource("1_ybjyx")
initial_level = ExtResource("2_l08a0")
manager = SubResource("Resource_hpydy")
initial_level = ExtResource("2_u4xvm")
manager = SubResource("Resource_rdjhi")
[node name="Level" type="Node3D" parent="."]
unique_name_in_owner = true