Compare commits

...

3 commits

Author SHA1 Message Date
cc177f7beb scene manager system 2025-02-27 02:12:49 -05:00
aa6b9cb4aa waterpole improvements 2025-02-26 04:01:29 -05:00
9549acde6e Revert "scale up canny"
This reverts commit 53d564b4a4.
2025-02-26 01:28:23 -05:00
12 changed files with 125 additions and 31 deletions

View file

@ -0,0 +1,19 @@
shader_type spatial;
render_mode specular_disabled, vertex_lighting;
uniform vec3 color_a : source_color = vec3(1.0);
uniform vec3 color_b : source_color = vec3(0.0);
uniform float stripe_count = 2.0;
uniform float twist_factor = 1.0;
uniform float speed = 0.5;
void vertex() {
float world_height = (MODEL_MATRIX * vec4(VERTEX, 1.0)).y;
UV.y = world_height - TIME * speed;
}
void fragment() {
float twisted_x = UV.x - (UV.y * twist_factor);
float stripe = step(sin(twisted_x * stripe_count * TAU), 0.0);
ALBEDO = mix(color_a, color_b, stripe);
}

View file

@ -0,0 +1,30 @@
extends Node
@export var scene_parent: Node
var current_scene: Node
func _ready() -> void:
var tree = get_tree()
# capture main scene
if tree.current_scene != self:
change_scene(tree.current_scene)
tree.current_scene = self
func change_scene(new_scene: Node) -> void:
# avoid infinite recursion :P
if current_scene == new_scene:
return
# remove current scene
if current_scene:
scene_parent.remove_child(current_scene)
current_scene.queue_free()
# add new scene
if new_scene.is_inside_tree():
new_scene.get_parent().remove_child.call_deferred(new_scene)
scene_parent.add_child.call_deferred(new_scene)
current_scene = new_scene

View file

@ -0,0 +1,37 @@
[gd_scene load_steps=2 format=3 uid="uid://dxrvocxjk8vs3"]
[ext_resource type="Script" path="res://autoloads/scene_manager.gd" id="1_d112a"]
[node name="SceneManager" type="Node" node_paths=PackedStringArray("scene_parent")]
script = ExtResource("1_d112a")
scene_parent = NodePath("HBoxContainer/MainView/SubViewportContainer/SubViewport")
[node name="HBoxContainer" type="HBoxContainer" parent="."]
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
[node name="SideBar" type="Control" parent="HBoxContainer"]
layout_mode = 2
size_flags_horizontal = 3
[node name="MainView" type="Control" parent="HBoxContainer"]
custom_minimum_size = Vector2(288, 216)
layout_mode = 2
size_flags_horizontal = 10
[node name="SubViewportContainer" type="SubViewportContainer" parent="HBoxContainer/MainView"]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
[node name="SubViewport" type="SubViewport" parent="HBoxContainer/MainView/SubViewportContainer"]
handle_input_locally = false
audio_listener_enable_3d = true
size = Vector2i(288, 216)
render_target_update_mode = 4

View file

@ -163,8 +163,10 @@ func _start_winning() -> void:
#region Pole Spinning #region Pole Spinning
var _attached_pole: WatermanPole = null var _attached_pole: WatermanPole = null
var _pole_angle: float = 0.0 var _pole_angle: float = 0.0
var _pole_stored_speed: float = 0.0
func _start_pole_spin() -> void: func _start_pole_spin() -> void:
_pole_stored_speed = flatten_vector(velocity).length()
velocity = Vector3.ZERO velocity = Vector3.ZERO
var pole_xz = flatten_vector(_attached_pole.global_position) var pole_xz = flatten_vector(_attached_pole.global_position)
var self_xz = flatten_vector(global_position) var self_xz = flatten_vector(global_position)
@ -189,7 +191,7 @@ func _process_pole_spin(delta: float) -> void:
func _end_pole_spin() -> void: func _end_pole_spin() -> void:
var pole_xz = flatten_vector(_attached_pole.global_position) var pole_xz = flatten_vector(_attached_pole.global_position)
var impulse = Vector3.FORWARD.rotated(Vector3.UP, _pole_angle) * _attached_pole.release_boost var impulse = Vector3.FORWARD.rotated(Vector3.UP, _pole_angle) * _pole_stored_speed
velocity.x = impulse.x velocity.x = impulse.x
velocity.z = impulse.z velocity.z = impulse.z
#endregion #endregion

View file

@ -24,7 +24,7 @@ shading_mode = 0
albedo_color = Color(0.916968, 0.113727, 0, 1) albedo_color = Color(0.916968, 0.113727, 0, 1)
[sub_resource type="SphereShape3D" id="SphereShape3D_4o01j"] [sub_resource type="SphereShape3D" id="SphereShape3D_4o01j"]
radius = 0.9 radius = 0.45
[sub_resource type="AudioStreamInteractive" id="AudioStreamInteractive_plnjn"] [sub_resource type="AudioStreamInteractive" id="AudioStreamInteractive_plnjn"]
clip_count = 3 clip_count = 3
@ -39,7 +39,7 @@ clip_2/auto_advance = 0
[sub_resource type="CylinderMesh" id="CylinderMesh_b16dl"] [sub_resource type="CylinderMesh" id="CylinderMesh_b16dl"]
top_radius = 0.05 top_radius = 0.05
bottom_radius = 0.05 bottom_radius = 0.05
height = 8.0 height = 4.0
radial_segments = 4 radial_segments = 4
rings = 0 rings = 0
@ -87,7 +87,7 @@ shape = SubResource("SphereShape3D_4o01j")
[node name="Graphics" type="Node3D" parent="."] [node name="Graphics" type="Node3D" parent="."]
[node name="CannySprite" type="Sprite3D" parent="Graphics"] [node name="CannySprite" type="Sprite3D" parent="Graphics"]
pixel_size = 0.0313 pixel_size = 0.0156
billboard = 1 billboard = 1
texture_filter = 0 texture_filter = 0
texture = ExtResource("1_cp4br") texture = ExtResource("1_cp4br")
@ -127,7 +127,7 @@ bus = &"Sounds"
visible = false visible = false
[node name="PowerLine" type="MeshInstance3D" parent="PowerIndicator"] [node name="PowerLine" type="MeshInstance3D" parent="PowerIndicator"]
transform = Transform3D(1, 0, 0, 0, -4.37114e-08, -1, 0, 1, -4.37114e-08, 0, 0, 4) transform = Transform3D(1, 0, 0, 0, -4.37114e-08, -1, 0, 1, -4.37114e-08, 0, 0, 2)
material_override = SubResource("StandardMaterial3D_2xpb7") material_override = SubResource("StandardMaterial3D_2xpb7")
cast_shadow = 0 cast_shadow = 0
gi_mode = 0 gi_mode = 0
@ -135,6 +135,7 @@ mesh = SubResource("CylinderMesh_b16dl")
[node name="CameraArm" type="SpringArm3D" parent="."] [node name="CameraArm" type="SpringArm3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 0.5, 0.866025, 0, -0.866025, 0.5, 0, 0, 0) transform = Transform3D(1, 0, 0, 0, 0.5, 0.866025, 0, -0.866025, 0.5, 0, 0, 0)
collision_mask = 8
spring_length = 8.0 spring_length = 8.0
[node name="Camera3D" type="Camera3D" parent="CameraArm"] [node name="Camera3D" type="Camera3D" parent="CameraArm"]
@ -213,8 +214,8 @@ delay_in_seconds = "0.0"
[connection signal="shot" from="." to="Sounds/Shoot" method="play"] [connection signal="shot" from="." to="Sounds/Shoot" method="play"]
[connection signal="state_physics_processing" from="StateChart/Root/Idle" to="." method="_apply_gravity"] [connection signal="state_physics_processing" from="StateChart/Root/Idle" to="." method="_apply_gravity"]
[connection signal="state_physics_processing" from="StateChart/Root/Moving" to="." method="_bounce_on_walls"] [connection signal="state_physics_processing" from="StateChart/Root/Moving" to="." method="_bounce_on_walls"]
[connection signal="state_physics_processing" from="StateChart/Root/Moving" to="." method="_apply_gravity"]
[connection signal="state_physics_processing" from="StateChart/Root/Moving" to="." method="_slow_to_stop"] [connection signal="state_physics_processing" from="StateChart/Root/Moving" to="." method="_slow_to_stop"]
[connection signal="state_physics_processing" from="StateChart/Root/Moving" to="." method="_apply_gravity"]
[connection signal="state_entered" from="StateChart/Root/Charging" to="." method="_start_charge"] [connection signal="state_entered" from="StateChart/Root/Charging" to="." method="_start_charge"]
[connection signal="state_entered" from="StateChart/Root/Charging" to="Sounds/ChargeStart" method="play"] [connection signal="state_entered" from="StateChart/Root/Charging" to="Sounds/ChargeStart" method="play"]
[connection signal="state_exited" from="StateChart/Root/Charging" to="." method="_end_charge"] [connection signal="state_exited" from="StateChart/Root/Charging" to="." method="_end_charge"]

View file

@ -11,9 +11,9 @@ metallic_specular = 0.0
[sub_resource type="CylinderMesh" id="CylinderMesh_i27ie"] [sub_resource type="CylinderMesh" id="CylinderMesh_i27ie"]
material = SubResource("StandardMaterial3D_e2vbu") material = SubResource("StandardMaterial3D_e2vbu")
top_radius = 0.2 top_radius = 0.1
bottom_radius = 0.2 bottom_radius = 0.1
height = 6.0 height = 4.0
radial_segments = 6 radial_segments = 6
rings = 8 rings = 8
@ -30,13 +30,12 @@ shader_parameter/wave_scale = 0.25
[sub_resource type="QuadMesh" id="QuadMesh_mfpmh"] [sub_resource type="QuadMesh" id="QuadMesh_mfpmh"]
material = SubResource("ShaderMaterial_3urv4") material = SubResource("ShaderMaterial_3urv4")
size = Vector2(3, 1.5) size = Vector2(2, 1)
subdivide_width = 6 subdivide_width = 6
center_offset = Vector3(1.5, -0.75, 0) center_offset = Vector3(1, 0, 0)
[sub_resource type="CylinderShape3D" id="CylinderShape3D_eshe3"] [sub_resource type="CylinderShape3D" id="CylinderShape3D_eshe3"]
height = 0.5 height = 0.5
radius = 1.0
[node name="GoalPost" type="Node3D"] [node name="GoalPost" type="Node3D"]
script = ExtResource("1_08x2x") script = ExtResource("1_08x2x")
@ -44,16 +43,16 @@ script = ExtResource("1_08x2x")
[node name="Graphics" type="Node3D" parent="."] [node name="Graphics" type="Node3D" parent="."]
[node name="Pole" type="MeshInstance3D" parent="Graphics"] [node name="Pole" type="MeshInstance3D" parent="Graphics"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 3, 0) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2, 0)
mesh = SubResource("CylinderMesh_i27ie") mesh = SubResource("CylinderMesh_i27ie")
[node name="Flag" type="MeshInstance3D" parent="Graphics"] [node name="Flag" type="MeshInstance3D" parent="Graphics"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 0) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 3.5, 0)
mesh = SubResource("QuadMesh_mfpmh") mesh = SubResource("QuadMesh_mfpmh")
[node name="Sprite3D" type="Sprite3D" parent="Graphics"] [node name="Sprite3D" type="Sprite3D" parent="Graphics"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.01, 0) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.01, 0)
pixel_size = 0.0625 pixel_size = 0.0313
axis = 1 axis = 1
alpha_cut = 2 alpha_cut = 2
texture_filter = 0 texture_filter = 0

View file

@ -6,7 +6,6 @@ extends Node3D
@export_range(-1,1,0.5,"or_less","or_greater","radians_as_degrees") @export_range(-1,1,0.5,"or_less","or_greater","radians_as_degrees")
var spin_speed: float var spin_speed: float
@export var offset: float @export var offset: float
@export var release_boost: float
@export_group("Node References") @export_group("Node References")
@export var top: Node3D @export var top: Node3D

View file

@ -1,12 +1,16 @@
[gd_scene load_steps=6 format=3 uid="uid://13qlrib2dk36"] [gd_scene load_steps=7 format=3 uid="uid://13qlrib2dk36"]
[ext_resource type="Script" path="res://objects/waterman_pole.gd" id="1_8whes"] [ext_resource type="Script" path="res://objects/waterman_pole.gd" id="1_8whes"]
[ext_resource type="Shader" path="res://assets/shaders/barber_shop.gdshader" id="2_dukp0"]
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_6xwjl"] [sub_resource type="ShaderMaterial" id="ShaderMaterial_2dh7w"]
shading_mode = 2 render_priority = 0
specular_mode = 2 shader = ExtResource("2_dukp0")
albedo_color = Color(3.27289e-06, 0.685269, 0.929658, 1) shader_parameter/color_a = Color(0.792663, 0.606026, 0.896219, 1)
metallic_specular = 0.0 shader_parameter/color_b = Color(0.106954, 0.441954, 1, 1)
shader_parameter/stripe_count = 2.0
shader_parameter/twist_factor = 0.75
shader_parameter/speed = 0.5
[sub_resource type="CylinderMesh" id="CylinderMesh_nbwjg"] [sub_resource type="CylinderMesh" id="CylinderMesh_nbwjg"]
top_radius = 0.25 top_radius = 0.25
@ -17,7 +21,7 @@ rings = 8
[sub_resource type="CylinderShape3D" id="CylinderShape3D_28fhu"] [sub_resource type="CylinderShape3D" id="CylinderShape3D_28fhu"]
height = 1.0 height = 1.0
radius = 0.25 radius = 0.125
[sub_resource type="CylinderShape3D" id="CylinderShape3D_o6xmv"] [sub_resource type="CylinderShape3D" id="CylinderShape3D_o6xmv"]
height = 1.0 height = 1.0
@ -25,11 +29,14 @@ radius = 0.4
[node name="WatermanPole" type="Node3D" node_paths=PackedStringArray("top")] [node name="WatermanPole" type="Node3D" node_paths=PackedStringArray("top")]
script = ExtResource("1_8whes") script = ExtResource("1_8whes")
rise_speed = 6.0
spin_speed = 9.42478
offset = 0.75
top = NodePath("Top") top = NodePath("Top")
[node name="MeshInstance3D" type="MeshInstance3D" parent="."] [node name="PoleMesh" type="MeshInstance3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
material_override = SubResource("StandardMaterial3D_6xwjl") material_override = SubResource("ShaderMaterial_2dh7w")
mesh = SubResource("CylinderMesh_nbwjg") mesh = SubResource("CylinderMesh_nbwjg")
[node name="StaticBody3D" type="StaticBody3D" parent="."] [node name="StaticBody3D" type="StaticBody3D" parent="."]

View file

@ -15,10 +15,14 @@ run/main_scene="res://test_scene.tscn"
config/features=PackedStringArray("4.3", "GL Compatibility") config/features=PackedStringArray("4.3", "GL Compatibility")
config/icon="res://icon.svg" config/icon="res://icon.svg"
[autoload]
SceneManager="*res://autoloads/scene_manager.tscn"
[display] [display]
window/size/viewport_width=320 window/size/viewport_width=384
window/size/viewport_height=240 window/size/viewport_height=216
window/stretch/mode="viewport" window/stretch/mode="viewport"
[editor_plugins] [editor_plugins]

View file

@ -76,7 +76,3 @@ transform = Transform3D(0.707107, 0, -0.707107, 0, 1, 0, 0.707107, 0, 0.707107,
[node name="WatermanPole" parent="." instance=ExtResource("7_m8si3")] [node name="WatermanPole" parent="." instance=ExtResource("7_m8si3")]
transform = Transform3D(1, 0, 0, 0, 16, 0, 0, 0, 1, 0, 0, 0) transform = Transform3D(1, 0, 0, 0, 16, 0, 0, 0, 1, 0, 0, 0)
rise_speed = 8.0
spin_speed = 12.5664
offset = 1.0
release_boost = 20.0