generated from krampus/template-godot4
	Handling for player death
This commit is contained in:
		
							parent
							
								
									0b48ec4082
								
							
						
					
					
						commit
						e9abc96002
					
				
							
								
								
									
										
											BIN
										
									
								
								asset_dev/audio/464839__breviceps__anime-sound-effect-piercing-impact-stabbing.wav
									 (Stored with Git LFS)
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								asset_dev/audio/464839__breviceps__anime-sound-effect-piercing-impact-stabbing.wav
									 (Stored with Git LFS)
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								assets/sound/sfx/player/hit1.wav
									 (Stored with Git LFS)
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								assets/sound/sfx/player/hit1.wav
									 (Stored with Git LFS)
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										24
									
								
								assets/sound/sfx/player/hit1.wav.import
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								assets/sound/sfx/player/hit1.wav.import
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,24 @@ | |||||||
|  | [remap] | ||||||
|  | 
 | ||||||
|  | importer="wav" | ||||||
|  | type="AudioStreamWAV" | ||||||
|  | uid="uid://gocwud8dxgrj" | ||||||
|  | path="res://.godot/imported/hit1.wav-53061910ec313d77eab7d39e11bb6d2e.sample" | ||||||
|  | 
 | ||||||
|  | [deps] | ||||||
|  | 
 | ||||||
|  | source_file="res://assets/sound/sfx/player/hit1.wav" | ||||||
|  | dest_files=["res://.godot/imported/hit1.wav-53061910ec313d77eab7d39e11bb6d2e.sample"] | ||||||
|  | 
 | ||||||
|  | [params] | ||||||
|  | 
 | ||||||
|  | force/8_bit=false | ||||||
|  | force/mono=false | ||||||
|  | force/max_rate=false | ||||||
|  | force/max_rate_hz=44100 | ||||||
|  | edit/trim=false | ||||||
|  | edit/normalize=false | ||||||
|  | edit/loop_mode=0 | ||||||
|  | edit/loop_begin=0 | ||||||
|  | edit/loop_end=-1 | ||||||
|  | compress/mode=0 | ||||||
							
								
								
									
										
											BIN
										
									
								
								assets/sound/sfx/player/hit2.wav
									 (Stored with Git LFS)
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								assets/sound/sfx/player/hit2.wav
									 (Stored with Git LFS)
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										24
									
								
								assets/sound/sfx/player/hit2.wav.import
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								assets/sound/sfx/player/hit2.wav.import
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,24 @@ | |||||||
|  | [remap] | ||||||
|  | 
 | ||||||
|  | importer="wav" | ||||||
|  | type="AudioStreamWAV" | ||||||
|  | uid="uid://ixxphtt1fp88" | ||||||
|  | path="res://.godot/imported/hit2.wav-4dd8ae86a458841903e431693113cba2.sample" | ||||||
|  | 
 | ||||||
|  | [deps] | ||||||
|  | 
 | ||||||
|  | source_file="res://assets/sound/sfx/player/hit2.wav" | ||||||
|  | dest_files=["res://.godot/imported/hit2.wav-4dd8ae86a458841903e431693113cba2.sample"] | ||||||
|  | 
 | ||||||
|  | [params] | ||||||
|  | 
 | ||||||
|  | force/8_bit=false | ||||||
|  | force/mono=false | ||||||
|  | force/max_rate=false | ||||||
|  | force/max_rate_hz=44100 | ||||||
|  | edit/trim=false | ||||||
|  | edit/normalize=false | ||||||
|  | edit/loop_mode=0 | ||||||
|  | edit/loop_begin=0 | ||||||
|  | edit/loop_end=-1 | ||||||
|  | compress/mode=0 | ||||||
							
								
								
									
										
											BIN
										
									
								
								assets/sound/sfx/player/hit3.wav
									 (Stored with Git LFS)
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								assets/sound/sfx/player/hit3.wav
									 (Stored with Git LFS)
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										24
									
								
								assets/sound/sfx/player/hit3.wav.import
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								assets/sound/sfx/player/hit3.wav.import
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,24 @@ | |||||||
|  | [remap] | ||||||
|  | 
 | ||||||
|  | importer="wav" | ||||||
|  | type="AudioStreamWAV" | ||||||
|  | uid="uid://wa0uejal81b" | ||||||
|  | path="res://.godot/imported/hit3.wav-c5ea520c5ed0d4243944981f59bae603.sample" | ||||||
|  | 
 | ||||||
|  | [deps] | ||||||
|  | 
 | ||||||
|  | source_file="res://assets/sound/sfx/player/hit3.wav" | ||||||
|  | dest_files=["res://.godot/imported/hit3.wav-c5ea520c5ed0d4243944981f59bae603.sample"] | ||||||
|  | 
 | ||||||
|  | [params] | ||||||
|  | 
 | ||||||
|  | force/8_bit=false | ||||||
|  | force/mono=false | ||||||
|  | force/max_rate=false | ||||||
|  | force/max_rate_hz=44100 | ||||||
|  | edit/trim=false | ||||||
|  | edit/normalize=false | ||||||
|  | edit/loop_mode=0 | ||||||
|  | edit/loop_begin=0 | ||||||
|  | edit/loop_end=-1 | ||||||
|  | compress/mode=0 | ||||||
| @ -21,38 +21,38 @@ | |||||||
| [resource] | [resource] | ||||||
| resource_local_to_scene = true | resource_local_to_scene = true | ||||||
| frames = 17 | frames = 17 | ||||||
| pause = true | one_shot = true | ||||||
| frame_0/texture = ExtResource("1_d0hbp") | frame_0/texture = ExtResource("16_kbc1f") | ||||||
| frame_0/duration = 0.1 | frame_0/duration = 0.1 | ||||||
| frame_1/texture = ExtResource("2_bjmaj") | frame_1/texture = ExtResource("17_ip4qp") | ||||||
| frame_1/duration = 0.1 | frame_1/duration = 0.1 | ||||||
| frame_2/texture = ExtResource("10_e4v3n") | frame_2/texture = ExtResource("3_21mo1") | ||||||
| frame_2/duration = 0.1 | frame_2/duration = 0.1 | ||||||
| frame_3/texture = ExtResource("11_7y6m6") | frame_3/texture = ExtResource("4_qthhk") | ||||||
| frame_3/duration = 0.1 | frame_3/duration = 0.1 | ||||||
| frame_4/texture = ExtResource("12_702rw") | frame_4/texture = ExtResource("5_0684l") | ||||||
| frame_4/duration = 0.1 | frame_4/duration = 0.1 | ||||||
| frame_5/texture = ExtResource("13_orlo6") | frame_5/texture = ExtResource("6_y6mm3") | ||||||
| frame_5/duration = 0.1 | frame_5/duration = 0.1 | ||||||
| frame_6/texture = ExtResource("14_doi0c") | frame_6/texture = ExtResource("7_4d5db") | ||||||
| frame_6/duration = 0.1 | frame_6/duration = 0.1 | ||||||
| frame_7/texture = ExtResource("15_8snwx") | frame_7/texture = ExtResource("8_icpm3") | ||||||
| frame_7/duration = 0.1 | frame_7/duration = 0.1 | ||||||
| frame_8/texture = ExtResource("16_kbc1f") | frame_8/texture = ExtResource("9_mv3mc") | ||||||
| frame_8/duration = 0.1 | frame_8/duration = 0.1 | ||||||
| frame_9/texture = ExtResource("17_ip4qp") | frame_9/texture = ExtResource("1_d0hbp") | ||||||
| frame_9/duration = 0.1 | frame_9/duration = 0.1 | ||||||
| frame_10/texture = ExtResource("3_21mo1") | frame_10/texture = ExtResource("2_bjmaj") | ||||||
| frame_10/duration = 0.1 | frame_10/duration = 0.1 | ||||||
| frame_11/texture = ExtResource("4_qthhk") | frame_11/texture = ExtResource("10_e4v3n") | ||||||
| frame_11/duration = 0.1 | frame_11/duration = 0.1 | ||||||
| frame_12/texture = ExtResource("5_0684l") | frame_12/texture = ExtResource("11_7y6m6") | ||||||
| frame_12/duration = 0.1 | frame_12/duration = 0.1 | ||||||
| frame_13/texture = ExtResource("6_y6mm3") | frame_13/texture = ExtResource("12_702rw") | ||||||
| frame_13/duration = 0.1 | frame_13/duration = 0.1 | ||||||
| frame_14/texture = ExtResource("7_4d5db") | frame_14/texture = ExtResource("13_orlo6") | ||||||
| frame_14/duration = 0.1 | frame_14/duration = 0.1 | ||||||
| frame_15/texture = ExtResource("8_icpm3") | frame_15/texture = ExtResource("14_doi0c") | ||||||
| frame_15/duration = 0.1 | frame_15/duration = 0.1 | ||||||
| frame_16/texture = ExtResource("9_mv3mc") | frame_16/texture = ExtResource("15_8snwx") | ||||||
| frame_16/duration = 0.1 | frame_16/duration = 0.1 | ||||||
|  | |||||||
| @ -620,7 +620,7 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 16, 0) | |||||||
| shape = SubResource("CylinderShape3D_f1rqf") | shape = SubResource("CylinderShape3D_f1rqf") | ||||||
| 
 | 
 | ||||||
| [node name="GravityHalo" type="Node3D" parent="."] | [node name="GravityHalo" type="Node3D" parent="."] | ||||||
| transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 73.1897, 78.0923, 345.794) | transform = Transform3D(0.688355, -0.285755, 0.666717, 0, 0.919135, 0.393942, -0.725374, -0.271172, 0.632691, 73.19, 90.937, 345.794) | ||||||
| 
 | 
 | ||||||
| [node name="CSGCombiner3D" type="CSGCombiner3D" parent="GravityHalo"] | [node name="CSGCombiner3D" type="CSGCombiner3D" parent="GravityHalo"] | ||||||
| use_collision = true | use_collision = true | ||||||
|  | |||||||
| @ -163,7 +163,6 @@ libraries = { | |||||||
| 
 | 
 | ||||||
| [node name="Rumbler" type="Control" parent="RootControl"] | [node name="Rumbler" type="Control" parent="RootControl"] | ||||||
| unique_name_in_owner = true | unique_name_in_owner = true | ||||||
| process_mode = 1 |  | ||||||
| layout_mode = 1 | layout_mode = 1 | ||||||
| anchors_preset = 15 | anchors_preset = 15 | ||||||
| anchor_right = 1.0 | anchor_right = 1.0 | ||||||
| @ -174,7 +173,6 @@ script = ExtResource("3_3vfdb") | |||||||
| 
 | 
 | ||||||
| [node name="ViewportContainer" type="SubViewportContainer" parent="RootControl/Rumbler"] | [node name="ViewportContainer" type="SubViewportContainer" parent="RootControl/Rumbler"] | ||||||
| unique_name_in_owner = true | unique_name_in_owner = true | ||||||
| process_mode = 3 |  | ||||||
| layout_mode = 1 | layout_mode = 1 | ||||||
| anchors_preset = 15 | anchors_preset = 15 | ||||||
| anchor_right = 1.0 | anchor_right = 1.0 | ||||||
|  | |||||||
							
								
								
									
										10
									
								
								src/player/shot_setup/death_sequence.gd
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								src/player/shot_setup/death_sequence.gd
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,10 @@ | |||||||
|  | extends Node3D | ||||||
|  | 
 | ||||||
|  | @export var screen_shake_intensity := 10.0 | ||||||
|  | @export var screen_shake_length := 0.5 | ||||||
|  | 
 | ||||||
|  | @onready var game: Game = get_tree().get_first_node_in_group(Game.group) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | func screen_shake() -> void: | ||||||
|  | 	game.viewport.screen_shake(screen_shake_intensity, screen_shake_length) | ||||||
							
								
								
									
										14
									
								
								src/player/shot_setup/explosion.gd
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								src/player/shot_setup/explosion.gd
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,14 @@ | |||||||
|  | extends MeshInstance3D | ||||||
|  | 
 | ||||||
|  | var texture: AnimatedTexture | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | func _ready() -> void: | ||||||
|  | 	var quad: QuadMesh = mesh | ||||||
|  | 	var mat: StandardMaterial3D = quad.material | ||||||
|  | 	texture = mat.albedo_texture | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | func play() -> void: | ||||||
|  | 	texture.current_frame = 0 | ||||||
|  | 	texture.pause = false | ||||||
| @ -10,6 +10,7 @@ enum Phase { | |||||||
| 	SHOT, | 	SHOT, | ||||||
| 	SHOT_RESET, | 	SHOT_RESET, | ||||||
| 	FINISHED, | 	FINISHED, | ||||||
|  | 	DEAD, | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| const PITCH_MIN := deg_to_rad(-60.0) | const PITCH_MIN := deg_to_rad(-60.0) | ||||||
| @ -140,6 +141,8 @@ var _tracking_camera: OrbitalCamera | |||||||
| @onready var shot_animation: AnimationPlayer = %ShotAnimation | @onready var shot_animation: AnimationPlayer = %ShotAnimation | ||||||
| @onready var shot_sfx: ShotSFX = %ShotSFX | @onready var shot_sfx: ShotSFX = %ShotSFX | ||||||
| 
 | 
 | ||||||
|  | @onready var death_animation: AnimationPlayer = %DeathAnimation | ||||||
|  | 
 | ||||||
| @onready var arrow: Node3D = %Arrow | @onready var arrow: Node3D = %Arrow | ||||||
| @onready var arrow_pivot: Node3D = %ArrowPivot | @onready var arrow_pivot: Node3D = %ArrowPivot | ||||||
| @onready var arrow_animation: AnimationPlayer = %ArrowAnimation | @onready var arrow_animation: AnimationPlayer = %ArrowAnimation | ||||||
| @ -171,6 +174,9 @@ static var scene := preload("res://src/player/shot_setup/shot_setup.tscn") | |||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| func _ready() -> void: | func _ready() -> void: | ||||||
|  | 	if player: | ||||||
|  | 		player.on_life_changed.connect(_on_life_changed) | ||||||
|  | 
 | ||||||
| 		# Create & set up HUD | 		# Create & set up HUD | ||||||
| 		hud = ShotHUD.create(player) | 		hud = ShotHUD.create(player) | ||||||
| 		world.ui.add_player_hud(hud) | 		world.ui.add_player_hud(hud) | ||||||
| @ -186,6 +192,14 @@ func _ready() -> void: | |||||||
| 	_on_phase_change(phase) | 	_on_phase_change(phase) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | func _on_tree_exiting() -> void: | ||||||
|  | 	if is_instance_valid(_tracking_camera): | ||||||
|  | 		_tracking_camera.queue_free() | ||||||
|  | 	if is_instance_valid(_free_camera): | ||||||
|  | 		_free_camera.queue_free() | ||||||
|  | 	hud.queue_free() | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| func _set_camera_distance(value: float) -> void: | func _set_camera_distance(value: float) -> void: | ||||||
| 	var tween := get_tree().create_tween() | 	var tween := get_tree().create_tween() | ||||||
| 	tween.tween_property(zoom, "position:z", value, ZOOM_LENGTH).set_trans(Tween.TRANS_SINE) | 	tween.tween_property(zoom, "position:z", value, ZOOM_LENGTH).set_trans(Tween.TRANS_SINE) | ||||||
| @ -390,6 +404,20 @@ func end_shot_track() -> void: | |||||||
| 		phase = Phase.FINISHED | 		phase = Phase.FINISHED | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | func start_death() -> void: | ||||||
|  | 	print_debug("starting death sequence") | ||||||
|  | 	world.ui.play_death_sequence() | ||||||
|  | 	death_animation.play("death") | ||||||
|  | 	get_tree().paused = true | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | func finish_death() -> void: | ||||||
|  | 	print_debug("finishing death sequence") | ||||||
|  | 	get_tree().paused = false | ||||||
|  | 	player.die() | ||||||
|  | 	queue_free() | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| func _set_club_type(new_club_type: Club.Type) -> void: | func _set_club_type(new_club_type: Club.Type) -> void: | ||||||
| 	if new_club_type == club_type: | 	if new_club_type == club_type: | ||||||
| 		return | 		return | ||||||
| @ -597,6 +625,8 @@ func _process(delta: float) -> void: | |||||||
| 			if _restart_queued: | 			if _restart_queued: | ||||||
| 				_restart_queued = false | 				_restart_queued = false | ||||||
| 				phase = Phase.AIM | 				phase = Phase.AIM | ||||||
|  | 		Phase.DEAD: | ||||||
|  | 			start_death() | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| func _on_ball_sleeping_state_changed() -> void: | func _on_ball_sleeping_state_changed() -> void: | ||||||
| @ -639,6 +669,13 @@ func _on_hitbox_ball_collision(ball: GameBall) -> void: | |||||||
| 	ball.apply_central_impulse(explosion_impulse) | 	ball.apply_central_impulse(explosion_impulse) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | func _on_life_changed(new_value: float) -> void: | ||||||
|  | 	if new_value <= 0: | ||||||
|  | 		# No action is taken till the next process phase | ||||||
|  | 		# This is because we need to be in the main thread to run the death sequence! | ||||||
|  | 		phase = Phase.DEAD | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| func _on_reset_prompt_timer_timeout() -> void: | func _on_reset_prompt_timer_timeout() -> void: | ||||||
| 	reset_enabled = true | 	reset_enabled = true | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -1,4 +1,4 @@ | |||||||
| [gd_scene load_steps=34 format=3 uid="uid://cy7t2tc4y3b4"] | [gd_scene load_steps=42 format=3 uid="uid://cy7t2tc4y3b4"] | ||||||
| 
 | 
 | ||||||
| [ext_resource type="Script" path="res://src/player/shot_setup/shot_setup.gd" id="1_r6ei4"] | [ext_resource type="Script" path="res://src/player/shot_setup/shot_setup.gd" id="1_r6ei4"] | ||||||
| [ext_resource type="Script" path="res://src/player/shot_setup/ball_point.gd" id="2_e6i3g"] | [ext_resource type="Script" path="res://src/player/shot_setup/ball_point.gd" id="2_e6i3g"] | ||||||
| @ -15,7 +15,11 @@ | |||||||
| [ext_resource type="Script" path="res://src/player/shot_setup/hitbox.gd" id="7_uh8kn"] | [ext_resource type="Script" path="res://src/player/shot_setup/hitbox.gd" id="7_uh8kn"] | ||||||
| [ext_resource type="Texture2D" uid="uid://2yoipvd107t1" path="res://assets/sprites/dope_explosion/dope_explosion.tres" id="8_5ghmo"] | [ext_resource type="Texture2D" uid="uid://2yoipvd107t1" path="res://assets/sprites/dope_explosion/dope_explosion.tres" id="8_5ghmo"] | ||||||
| [ext_resource type="FontFile" uid="uid://dsa0oh7c0h4pu" path="res://assets/fonts/Racing_Sans_One/RacingSansOne-Regular.ttf" id="9_y5iv1"] | [ext_resource type="FontFile" uid="uid://dsa0oh7c0h4pu" path="res://assets/fonts/Racing_Sans_One/RacingSansOne-Regular.ttf" id="9_y5iv1"] | ||||||
|  | [ext_resource type="Script" path="res://src/player/shot_setup/death_sequence.gd" id="10_vakjm"] | ||||||
|  | [ext_resource type="AudioStream" uid="uid://ixxphtt1fp88" path="res://assets/sound/sfx/player/hit2.wav" id="11_i5g55"] | ||||||
|  | [ext_resource type="AudioStream" uid="uid://wa0uejal81b" path="res://assets/sound/sfx/player/hit3.wav" id="12_0losp"] | ||||||
| [ext_resource type="AudioStream" uid="uid://cvsv02inxvsyw" path="res://assets/sound/sfx/player/explosion.mp3" id="15_fn6g1"] | [ext_resource type="AudioStream" uid="uid://cvsv02inxvsyw" path="res://assets/sound/sfx/player/explosion.mp3" id="15_fn6g1"] | ||||||
|  | [ext_resource type="Script" path="res://src/player/shot_setup/explosion.gd" id="15_ytrxd"] | ||||||
| 
 | 
 | ||||||
| [sub_resource type="AudioStreamRandomizer" id="AudioStreamRandomizer_gh0gi"] | [sub_resource type="AudioStreamRandomizer" id="AudioStreamRandomizer_gh0gi"] | ||||||
| random_pitch = 1.1 | random_pitch = 1.1 | ||||||
| @ -34,6 +38,129 @@ random_pitch = 1.1 | |||||||
| streams_count = 1 | streams_count = 1 | ||||||
| stream_0/stream = ExtResource("7_niyj5") | stream_0/stream = ExtResource("7_niyj5") | ||||||
| 
 | 
 | ||||||
|  | [sub_resource type="AudioStreamRandomizer" id="AudioStreamRandomizer_7seum"] | ||||||
|  | playback_mode = 1 | ||||||
|  | random_pitch = 1.1 | ||||||
|  | streams_count = 2 | ||||||
|  | stream_0/stream = ExtResource("11_i5g55") | ||||||
|  | stream_1/stream = ExtResource("12_0losp") | ||||||
|  | 
 | ||||||
|  | [sub_resource type="Animation" id="Animation_dlkgq"] | ||||||
|  | resource_name = "death" | ||||||
|  | length = 8.0 | ||||||
|  | tracks/0/type = "method" | ||||||
|  | tracks/0/imported = false | ||||||
|  | tracks/0/enabled = true | ||||||
|  | tracks/0/path = NodePath("Camera3D1") | ||||||
|  | tracks/0/interp = 1 | ||||||
|  | tracks/0/loop_wrap = true | ||||||
|  | tracks/0/keys = { | ||||||
|  | "times": PackedFloat32Array(1.1), | ||||||
|  | "transitions": PackedFloat32Array(1), | ||||||
|  | "values": [{ | ||||||
|  | "args": [], | ||||||
|  | "method": &"make_current" | ||||||
|  | }] | ||||||
|  | } | ||||||
|  | tracks/1/type = "method" | ||||||
|  | tracks/1/imported = false | ||||||
|  | tracks/1/enabled = true | ||||||
|  | tracks/1/path = NodePath("Camera3D2") | ||||||
|  | tracks/1/interp = 1 | ||||||
|  | tracks/1/loop_wrap = true | ||||||
|  | tracks/1/keys = { | ||||||
|  | "times": PackedFloat32Array(2.2), | ||||||
|  | "transitions": PackedFloat32Array(1), | ||||||
|  | "values": [{ | ||||||
|  | "args": [], | ||||||
|  | "method": &"make_current" | ||||||
|  | }] | ||||||
|  | } | ||||||
|  | tracks/2/type = "method" | ||||||
|  | tracks/2/imported = false | ||||||
|  | tracks/2/enabled = true | ||||||
|  | tracks/2/path = NodePath("Camera3D3") | ||||||
|  | tracks/2/interp = 1 | ||||||
|  | tracks/2/loop_wrap = true | ||||||
|  | tracks/2/keys = { | ||||||
|  | "times": PackedFloat32Array(3.3), | ||||||
|  | "transitions": PackedFloat32Array(1), | ||||||
|  | "values": [{ | ||||||
|  | "args": [], | ||||||
|  | "method": &"make_current" | ||||||
|  | }] | ||||||
|  | } | ||||||
|  | tracks/3/type = "method" | ||||||
|  | tracks/3/imported = false | ||||||
|  | tracks/3/enabled = true | ||||||
|  | tracks/3/path = NodePath("%PlayerPivot/..") | ||||||
|  | tracks/3/interp = 1 | ||||||
|  | tracks/3/loop_wrap = true | ||||||
|  | tracks/3/keys = { | ||||||
|  | "times": PackedFloat32Array(8), | ||||||
|  | "transitions": PackedFloat32Array(1), | ||||||
|  | "values": [{ | ||||||
|  | "args": [], | ||||||
|  | "method": &"finish_death" | ||||||
|  | }] | ||||||
|  | } | ||||||
|  | tracks/4/type = "method" | ||||||
|  | tracks/4/imported = false | ||||||
|  | tracks/4/enabled = true | ||||||
|  | tracks/4/path = NodePath(".") | ||||||
|  | tracks/4/interp = 1 | ||||||
|  | tracks/4/loop_wrap = true | ||||||
|  | tracks/4/keys = { | ||||||
|  | "times": PackedFloat32Array(0, 1.1, 2.2, 3.3), | ||||||
|  | "transitions": PackedFloat32Array(1, 1, 1, 1), | ||||||
|  | "values": [{ | ||||||
|  | "args": [], | ||||||
|  | "method": &"screen_shake" | ||||||
|  | }, { | ||||||
|  | "args": [], | ||||||
|  | "method": &"screen_shake" | ||||||
|  | }, { | ||||||
|  | "args": [], | ||||||
|  | "method": &"screen_shake" | ||||||
|  | }, { | ||||||
|  | "args": [], | ||||||
|  | "method": &"screen_shake" | ||||||
|  | }] | ||||||
|  | } | ||||||
|  | tracks/5/type = "value" | ||||||
|  | tracks/5/imported = false | ||||||
|  | tracks/5/enabled = true | ||||||
|  | tracks/5/path = NodePath("AudioStreamPlayer3D:playing") | ||||||
|  | tracks/5/interp = 1 | ||||||
|  | tracks/5/loop_wrap = true | ||||||
|  | tracks/5/keys = { | ||||||
|  | "times": PackedFloat32Array(0), | ||||||
|  | "transitions": PackedFloat32Array(1), | ||||||
|  | "update": 1, | ||||||
|  | "values": [true] | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | [sub_resource type="Animation" id="Animation_ll5da"] | ||||||
|  | length = 0.001 | ||||||
|  | tracks/0/type = "value" | ||||||
|  | tracks/0/imported = false | ||||||
|  | tracks/0/enabled = true | ||||||
|  | tracks/0/path = NodePath("AudioStreamPlayer3D:playing") | ||||||
|  | tracks/0/interp = 1 | ||||||
|  | tracks/0/loop_wrap = true | ||||||
|  | tracks/0/keys = { | ||||||
|  | "times": PackedFloat32Array(0), | ||||||
|  | "transitions": PackedFloat32Array(1), | ||||||
|  | "update": 1, | ||||||
|  | "values": [false] | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | [sub_resource type="AnimationLibrary" id="AnimationLibrary_kc803"] | ||||||
|  | _data = { | ||||||
|  | "RESET": SubResource("Animation_ll5da"), | ||||||
|  | "death": SubResource("Animation_dlkgq") | ||||||
|  | } | ||||||
|  | 
 | ||||||
| [sub_resource type="Animation" id="Animation_ug2a7"] | [sub_resource type="Animation" id="Animation_ug2a7"] | ||||||
| length = 0.001 | length = 0.001 | ||||||
| tracks/0/type = "value" | tracks/0/type = "value" | ||||||
| @ -222,37 +349,25 @@ length = 0.001 | |||||||
| tracks/0/type = "value" | tracks/0/type = "value" | ||||||
| tracks/0/imported = false | tracks/0/imported = false | ||||||
| tracks/0/enabled = true | tracks/0/enabled = true | ||||||
| tracks/0/path = NodePath("ExplosionMesh:mesh:material:albedo_texture:pause") | tracks/0/path = NodePath("ExplosionMesh:visible") | ||||||
| tracks/0/interp = 1 | tracks/0/interp = 1 | ||||||
| tracks/0/loop_wrap = true | tracks/0/loop_wrap = true | ||||||
| tracks/0/keys = { | tracks/0/keys = { | ||||||
| "times": PackedFloat32Array(0), | "times": PackedFloat32Array(0), | ||||||
| "transitions": PackedFloat32Array(1), | "transitions": PackedFloat32Array(1), | ||||||
| "update": 1, | "update": 1, | ||||||
| "values": [true] | "values": [false] | ||||||
| } | } | ||||||
| tracks/1/type = "value" | tracks/1/type = "value" | ||||||
| tracks/1/imported = false | tracks/1/imported = false | ||||||
| tracks/1/enabled = true | tracks/1/enabled = false | ||||||
| tracks/1/path = NodePath("ExplosionMesh:visible") | tracks/1/path = NodePath("ExplosionMesh/ExplosionSFXPlayer:playing") | ||||||
| tracks/1/interp = 1 | tracks/1/interp = 1 | ||||||
| tracks/1/loop_wrap = true | tracks/1/loop_wrap = true | ||||||
| tracks/1/keys = { | tracks/1/keys = { | ||||||
| "times": PackedFloat32Array(0), | "times": PackedFloat32Array(0), | ||||||
| "transitions": PackedFloat32Array(1), | "transitions": PackedFloat32Array(1), | ||||||
| "update": 1, | "update": 1, | ||||||
| "values": [false] |  | ||||||
| } |  | ||||||
| tracks/2/type = "value" |  | ||||||
| tracks/2/imported = false |  | ||||||
| tracks/2/enabled = false |  | ||||||
| tracks/2/path = NodePath("ExplosionMesh/ExplosionSFXPlayer:playing") |  | ||||||
| tracks/2/interp = 1 |  | ||||||
| tracks/2/loop_wrap = true |  | ||||||
| tracks/2/keys = { |  | ||||||
| "times": PackedFloat32Array(0), |  | ||||||
| "transitions": PackedFloat32Array(1), |  | ||||||
| "update": 1, |  | ||||||
| "values": [true] | "values": [true] | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -262,38 +377,40 @@ length = 1.618 | |||||||
| tracks/0/type = "value" | tracks/0/type = "value" | ||||||
| tracks/0/imported = false | tracks/0/imported = false | ||||||
| tracks/0/enabled = true | tracks/0/enabled = true | ||||||
| tracks/0/path = NodePath("ExplosionMesh:mesh:material:albedo_texture:pause") | tracks/0/path = NodePath("ExplosionMesh:visible") | ||||||
| tracks/0/interp = 1 | tracks/0/interp = 1 | ||||||
| tracks/0/loop_wrap = true | tracks/0/loop_wrap = true | ||||||
| tracks/0/keys = { | tracks/0/keys = { | ||||||
| "times": PackedFloat32Array(0, 1.618), | "times": PackedFloat32Array(0, 1.618), | ||||||
| "transitions": PackedFloat32Array(1, 1), | "transitions": PackedFloat32Array(1, 1), | ||||||
| "update": 1, | "update": 1, | ||||||
| "values": [false, true] | "values": [true, false] | ||||||
| } | } | ||||||
| tracks/1/type = "value" | tracks/1/type = "value" | ||||||
| tracks/1/imported = false | tracks/1/imported = false | ||||||
| tracks/1/enabled = true | tracks/1/enabled = true | ||||||
| tracks/1/path = NodePath("ExplosionMesh:visible") | tracks/1/path = NodePath("ExplosionMesh/ExplosionSFXPlayer:playing") | ||||||
| tracks/1/interp = 1 | tracks/1/interp = 1 | ||||||
| tracks/1/loop_wrap = true | tracks/1/loop_wrap = true | ||||||
| tracks/1/keys = { | tracks/1/keys = { | ||||||
| "times": PackedFloat32Array(0, 1.618), | "times": PackedFloat32Array(0), | ||||||
| "transitions": PackedFloat32Array(1, 1), | "transitions": PackedFloat32Array(1), | ||||||
| "update": 1, | "update": 1, | ||||||
| "values": [true, false] | "values": [true] | ||||||
| } | } | ||||||
| tracks/2/type = "value" | tracks/2/type = "method" | ||||||
| tracks/2/imported = false | tracks/2/imported = false | ||||||
| tracks/2/enabled = true | tracks/2/enabled = true | ||||||
| tracks/2/path = NodePath("ExplosionMesh/ExplosionSFXPlayer:playing") | tracks/2/path = NodePath("ExplosionMesh") | ||||||
| tracks/2/interp = 1 | tracks/2/interp = 1 | ||||||
| tracks/2/loop_wrap = true | tracks/2/loop_wrap = true | ||||||
| tracks/2/keys = { | tracks/2/keys = { | ||||||
| "times": PackedFloat32Array(0), | "times": PackedFloat32Array(0), | ||||||
| "transitions": PackedFloat32Array(1), | "transitions": PackedFloat32Array(1), | ||||||
| "update": 1, | "values": [{ | ||||||
| "values": [true] | "args": [], | ||||||
|  | "method": &"play" | ||||||
|  | }] | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| [sub_resource type="AnimationLibrary" id="AnimationLibrary_dg262"] | [sub_resource type="AnimationLibrary" id="AnimationLibrary_dg262"] | ||||||
| @ -345,6 +462,33 @@ transform = Transform3D(-4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, -0.555 | |||||||
| [node name="DemoCamera" type="Camera3D" parent="PlayerPivot" groups=["DemoCamera"]] | [node name="DemoCamera" type="Camera3D" parent="PlayerPivot" groups=["DemoCamera"]] | ||||||
| transform = Transform3D(-0.311543, -0.0687373, 0.947743, 0, 0.99738, 0.0723374, -0.950232, 0.0225362, -0.310727, 0.845792, 0.706621, -0.383459) | transform = Transform3D(-0.311543, -0.0687373, 0.947743, 0, 0.99738, 0.0723374, -0.950232, 0.0225362, -0.310727, 0.845792, 0.706621, -0.383459) | ||||||
| 
 | 
 | ||||||
|  | [node name="DeathSequence" type="Node3D" parent="PlayerPivot"] | ||||||
|  | process_mode = 3 | ||||||
|  | script = ExtResource("10_vakjm") | ||||||
|  | 
 | ||||||
|  | [node name="AudioStreamPlayer3D" type="AudioStreamPlayer" parent="PlayerPivot/DeathSequence"] | ||||||
|  | stream = SubResource("AudioStreamRandomizer_7seum") | ||||||
|  | volume_db = -4.0 | ||||||
|  | bus = &"SFX" | ||||||
|  | 
 | ||||||
|  | [node name="DeathAnimation" type="AnimationPlayer" parent="PlayerPivot/DeathSequence"] | ||||||
|  | unique_name_in_owner = true | ||||||
|  | libraries = { | ||||||
|  | "": SubResource("AnimationLibrary_kc803") | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | [node name="Camera3D1" type="Camera3D" parent="PlayerPivot/DeathSequence"] | ||||||
|  | transform = Transform3D(-0.00257592, 0.0226116, 0.999741, 0, 0.999744, -0.0226116, -0.999997, -5.82457e-05, -0.00257526, 1.6905, 0.831287, 0.0668699) | ||||||
|  | far = 8192.0 | ||||||
|  | 
 | ||||||
|  | [node name="Camera3D2" type="Camera3D" parent="PlayerPivot/DeathSequence"] | ||||||
|  | transform = Transform3D(0.864734, -0.175509, 0.470564, 0, 0.936951, 0.349461, -0.502229, -0.302191, 0.810214, 0.386249, 1.16999, 0.906541) | ||||||
|  | far = 8192.0 | ||||||
|  | 
 | ||||||
|  | [node name="Camera3D3" type="Camera3D" parent="PlayerPivot/DeathSequence"] | ||||||
|  | transform = Transform3D(0.00178714, 0.559853, 0.82859, 0, 0.828592, -0.559853, -0.999998, 0.00100054, 0.00148081, 0.334412, 0.629604, 0.136928) | ||||||
|  | far = 8192.0 | ||||||
|  | 
 | ||||||
| [node name="Direction" type="Node3D" parent="."] | [node name="Direction" type="Node3D" parent="."] | ||||||
| unique_name_in_owner = true | unique_name_in_owner = true | ||||||
| 
 | 
 | ||||||
| @ -466,6 +610,7 @@ shape = SubResource("SphereShape3D_xvvdi") | |||||||
| transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0) | transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0) | ||||||
| visible = false | visible = false | ||||||
| mesh = SubResource("QuadMesh_t34ji") | mesh = SubResource("QuadMesh_t34ji") | ||||||
|  | script = ExtResource("15_ytrxd") | ||||||
| 
 | 
 | ||||||
| [node name="ExplosionAnimation" type="AnimationPlayer" parent="ExplosionMesh"] | [node name="ExplosionAnimation" type="AnimationPlayer" parent="ExplosionMesh"] | ||||||
| unique_name_in_owner = true | unique_name_in_owner = true | ||||||
| @ -500,6 +645,7 @@ line_spacing = -16.0 | |||||||
| autowrap_mode = 2 | autowrap_mode = 2 | ||||||
| width = 120.0 | width = 120.0 | ||||||
| 
 | 
 | ||||||
|  | [connection signal="tree_exiting" from="." to="." method="_on_tree_exiting"] | ||||||
| [connection signal="ball_changed" from="BallPoint" to="." method="_on_game_ball_changed"] | [connection signal="ball_changed" from="BallPoint" to="." method="_on_game_ball_changed"] | ||||||
| [connection signal="timeout" from="DownswingTimer" to="." method="finish_downswing"] | [connection signal="timeout" from="DownswingTimer" to="." method="finish_downswing"] | ||||||
| [connection signal="timeout" from="BallReturnTimer" to="." method="_on_ball_return_timer_timeout"] | [connection signal="timeout" from="BallReturnTimer" to="." method="_on_ball_return_timer_timeout"] | ||||||
|  | |||||||
| @ -3,6 +3,7 @@ class_name WorldPlayer extends Resource | |||||||
| 
 | 
 | ||||||
| signal on_life_changed(new_value: float) | signal on_life_changed(new_value: float) | ||||||
| signal on_balls_changed(type: GameBall.Type, new_value: int) | signal on_balls_changed(type: GameBall.Type, new_value: int) | ||||||
|  | signal on_death(player: WorldPlayer) | ||||||
| 
 | 
 | ||||||
| @export_range(0, 100) var life: float = 100.0: | @export_range(0, 100) var life: float = 100.0: | ||||||
| 	set(value): | 	set(value): | ||||||
| @ -89,6 +90,10 @@ func prev_ball(type: GameBall.Type) -> GameBall.Type: | |||||||
| 	return keys[j] | 	return keys[j] | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | func die() -> void: | ||||||
|  | 	on_death.emit(self) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| ## Create a debug player instance | ## Create a debug player instance | ||||||
| static func create_debug() -> WorldPlayer: | static func create_debug() -> WorldPlayer: | ||||||
| 	var instance := WorldPlayer.new() | 	var instance := WorldPlayer.new() | ||||||
|  | |||||||
							
								
								
									
										14
									
								
								src/shaders/desaturate.gdshader
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								src/shaders/desaturate.gdshader
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,14 @@ | |||||||
|  | shader_type canvas_item; | ||||||
|  | 
 | ||||||
|  | // Regular saturation is between 0 and 1 | ||||||
|  | // But I'm gonna leave this unbounded for fun because you can also supersaturate & anti-saturate o_O | ||||||
|  | uniform float saturation; | ||||||
|  | 
 | ||||||
|  | uniform sampler2D screen_texture : hint_screen_texture, repeat_disable, filter_nearest; | ||||||
|  | 
 | ||||||
|  | void fragment() { | ||||||
|  | 	vec4 source = texture(screen_texture, SCREEN_UV); | ||||||
|  | 	 | ||||||
|  | 	COLOR.rgb = mix(vec3(dot(source.rgb, vec3(0.299, 0.587, 0.114))), source.rgb, saturation); | ||||||
|  | 	COLOR.a = source.a; | ||||||
|  | } | ||||||
| @ -21,7 +21,7 @@ static var scene := preload("res://src/ui/camera/orbital_camera/orbital_camera.t | |||||||
| func _physics_process(delta: float) -> void: | func _physics_process(delta: float) -> void: | ||||||
| 	var up := Vector3.UP | 	var up := Vector3.UP | ||||||
| 	# If target is a game ball, realign to gravity | 	# If target is a game ball, realign to gravity | ||||||
| 	if target is GameBall: | 	if is_instance_valid(target) and target is GameBall: | ||||||
| 		up = -(target as GameBall).current_gravity.normalized() | 		up = -(target as GameBall).current_gravity.normalized() | ||||||
| 		var right := up.cross(global_basis.z).normalized() | 		var right := up.cross(global_basis.z).normalized() | ||||||
| 		var forward := right.cross(up).normalized() | 		var forward := right.cross(up).normalized() | ||||||
|  | |||||||
| @ -16,7 +16,7 @@ func screen_shake(intensity: float, duration: float = 0.2) -> void: | |||||||
| 	if not Game.settings.enable_screen_shake: | 	if not Game.settings.enable_screen_shake: | ||||||
| 		return | 		return | ||||||
| 
 | 
 | ||||||
| 	var tween := get_tree().create_tween() | 	var tween := create_tween() | ||||||
| 	rumbler.intensity = intensity | 	rumbler.intensity = intensity | ||||||
| 	tween.tween_property(rumbler, "intensity", 0.0, duration).set_trans(Tween.TRANS_CUBIC) | 	tween.tween_property(rumbler, "intensity", 0.0, duration).set_trans(Tween.TRANS_CUBIC) | ||||||
| 	tween.tween_callback(_reset_position) | 	tween.tween_callback(_reset_position) | ||||||
|  | |||||||
| @ -81,6 +81,10 @@ ClubSelectLabelDisabled/colors/font_outline_color = Color(0.2, 0.2, 0.2, 1) | |||||||
| ClubSelectLabelDisabled/colors/font_shadow_color = Color(0.2, 0.2, 0.2, 1) | ClubSelectLabelDisabled/colors/font_shadow_color = Color(0.2, 0.2, 0.2, 1) | ||||||
| ClubSelectLabelDisabled/font_sizes/font_size = 84 | ClubSelectLabelDisabled/font_sizes/font_size = 84 | ||||||
| ClubSelectLabelDisabled/fonts/font = ExtResource("1_3rv2b") | ClubSelectLabelDisabled/fonts/font = ExtResource("1_3rv2b") | ||||||
|  | DeathScreenLabel/base_type = &"RichTextLabel" | ||||||
|  | DeathScreenLabel/colors/default_color = Color(0.611765, 0.133333, 0.133333, 1) | ||||||
|  | DeathScreenLabel/colors/font_outline_color = Color(0, 0, 0, 1) | ||||||
|  | DeathScreenLabel/fonts/normal_font = ExtResource("1_eha6a") | ||||||
| HeaderLarge/constants/outline_size = 8 | HeaderLarge/constants/outline_size = 8 | ||||||
| HeaderLarge/font_sizes/font_size = 28 | HeaderLarge/font_sizes/font_size = 28 | ||||||
| HeaderMedium/constants/outline_size = 6 | HeaderMedium/constants/outline_size = 6 | ||||||
|  | |||||||
							
								
								
									
										266
									
								
								src/ui/shot_hud/death_alert.tscn
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										266
									
								
								src/ui/shot_hud/death_alert.tscn
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,266 @@ | |||||||
|  | [gd_scene load_steps=12 format=3 uid="uid://biokiug3e0ipk"] | ||||||
|  | 
 | ||||||
|  | [ext_resource type="Shader" path="res://src/shaders/desaturate.gdshader" id="1_0nlhb"] | ||||||
|  | [ext_resource type="Script" path="res://src/ui/decorations/text_effects/typewriter/typewriter_label.gd" id="2_w3oh2"] | ||||||
|  | 
 | ||||||
|  | [sub_resource type="ShaderMaterial" id="ShaderMaterial_m6b5h"] | ||||||
|  | shader = ExtResource("1_0nlhb") | ||||||
|  | shader_parameter/saturation = 1.0 | ||||||
|  | 
 | ||||||
|  | [sub_resource type="Gradient" id="Gradient_d8y1q"] | ||||||
|  | offsets = PackedFloat32Array(0.248473, 1) | ||||||
|  | colors = PackedColorArray(0, 0, 0, 0.8, 0, 0, 0, 0) | ||||||
|  | 
 | ||||||
|  | [sub_resource type="GradientTexture2D" id="GradientTexture2D_7xfnx"] | ||||||
|  | gradient = SubResource("Gradient_d8y1q") | ||||||
|  | width = 256 | ||||||
|  | fill = 1 | ||||||
|  | fill_from = Vector2(0.5, 0.5) | ||||||
|  | fill_to = Vector2(1, 0.5) | ||||||
|  | metadata/_snap_enabled = true | ||||||
|  | 
 | ||||||
|  | [sub_resource type="Curve" id="Curve_ndj60"] | ||||||
|  | min_value = -16.0 | ||||||
|  | max_value = 16.0 | ||||||
|  | _data = [Vector2(0, 0), 0.0, 44.2396, 0, 0, Vector2(1, 0), 0.0, 0.0, 0, 0] | ||||||
|  | point_count = 2 | ||||||
|  | 
 | ||||||
|  | [sub_resource type="Curve" id="Curve_nld14"] | ||||||
|  | min_value = -100.0 | ||||||
|  | max_value = 0.0 | ||||||
|  | _data = [Vector2(0, -100), 0.0, 451.099, 0, 0, Vector2(1, 0), 0.0, 0.0, 0, 0] | ||||||
|  | point_count = 2 | ||||||
|  | 
 | ||||||
|  | [sub_resource type="CurveXYZTexture" id="CurveXYZTexture_bixq7"] | ||||||
|  | curve_x = SubResource("Curve_ndj60") | ||||||
|  | curve_y = SubResource("Curve_nld14") | ||||||
|  | 
 | ||||||
|  | [sub_resource type="Animation" id="Animation_l6yhv"] | ||||||
|  | resource_name = "display" | ||||||
|  | length = 8.0 | ||||||
|  | loop_mode = 1 | ||||||
|  | tracks/0/type = "value" | ||||||
|  | tracks/0/imported = false | ||||||
|  | tracks/0/enabled = true | ||||||
|  | tracks/0/path = NodePath("AlertContainer/GradientBG:modulate") | ||||||
|  | tracks/0/interp = 2 | ||||||
|  | tracks/0/loop_wrap = false | ||||||
|  | tracks/0/keys = { | ||||||
|  | "times": PackedFloat32Array(0, 3), | ||||||
|  | "transitions": PackedFloat32Array(1.618, 1), | ||||||
|  | "update": 0, | ||||||
|  | "values": [Color(1, 1, 1, 0), Color(1, 1, 1, 1)] | ||||||
|  | } | ||||||
|  | tracks/1/type = "value" | ||||||
|  | tracks/1/imported = false | ||||||
|  | tracks/1/enabled = true | ||||||
|  | tracks/1/path = NodePath("AlertContainer/Text/Subheading:modulate") | ||||||
|  | tracks/1/interp = 2 | ||||||
|  | tracks/1/loop_wrap = false | ||||||
|  | tracks/1/keys = { | ||||||
|  | "times": PackedFloat32Array(3, 8), | ||||||
|  | "transitions": PackedFloat32Array(1.618, 1), | ||||||
|  | "update": 0, | ||||||
|  | "values": [Color(1, 1, 1, 0), Color(1, 1, 1, 1)] | ||||||
|  | } | ||||||
|  | tracks/2/type = "value" | ||||||
|  | tracks/2/imported = false | ||||||
|  | tracks/2/enabled = true | ||||||
|  | tracks/2/path = NodePath(".:modulate") | ||||||
|  | tracks/2/interp = 2 | ||||||
|  | tracks/2/loop_wrap = false | ||||||
|  | tracks/2/keys = { | ||||||
|  | "times": PackedFloat32Array(7.5, 8), | ||||||
|  | "transitions": PackedFloat32Array(1.618, 1), | ||||||
|  | "update": 0, | ||||||
|  | "values": [Color(1, 1, 1, 1), Color(1, 1, 1, 0)] | ||||||
|  | } | ||||||
|  | tracks/3/type = "method" | ||||||
|  | tracks/3/imported = false | ||||||
|  | tracks/3/enabled = true | ||||||
|  | tracks/3/path = NodePath("AlertContainer/Text/TypewriterLabel") | ||||||
|  | tracks/3/interp = 1 | ||||||
|  | tracks/3/loop_wrap = true | ||||||
|  | tracks/3/keys = { | ||||||
|  | "times": PackedFloat32Array(0), | ||||||
|  | "transitions": PackedFloat32Array(1), | ||||||
|  | "values": [{ | ||||||
|  | "args": [], | ||||||
|  | "method": &"restart" | ||||||
|  | }] | ||||||
|  | } | ||||||
|  | tracks/4/type = "method" | ||||||
|  | tracks/4/imported = false | ||||||
|  | tracks/4/enabled = true | ||||||
|  | tracks/4/path = NodePath(".") | ||||||
|  | tracks/4/interp = 1 | ||||||
|  | tracks/4/loop_wrap = true | ||||||
|  | tracks/4/keys = { | ||||||
|  | "times": PackedFloat32Array(8), | ||||||
|  | "transitions": PackedFloat32Array(1), | ||||||
|  | "values": [{ | ||||||
|  | "args": [], | ||||||
|  | "method": &"queue_free" | ||||||
|  | }] | ||||||
|  | } | ||||||
|  | tracks/5/type = "value" | ||||||
|  | tracks/5/imported = false | ||||||
|  | tracks/5/enabled = true | ||||||
|  | tracks/5/path = NodePath("Desaturator:material:shader_parameter/saturation") | ||||||
|  | tracks/5/interp = 1 | ||||||
|  | tracks/5/loop_wrap = false | ||||||
|  | tracks/5/keys = { | ||||||
|  | "times": PackedFloat32Array(0, 6, 7.5, 8), | ||||||
|  | "transitions": PackedFloat32Array(1.618, 1, 1, 1), | ||||||
|  | "update": 0, | ||||||
|  | "values": [1.0, 0.0, 0.0, 1.0] | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | [sub_resource type="Animation" id="Animation_4aged"] | ||||||
|  | length = 0.001 | ||||||
|  | tracks/0/type = "value" | ||||||
|  | tracks/0/imported = false | ||||||
|  | tracks/0/enabled = true | ||||||
|  | tracks/0/path = NodePath("AlertContainer/GradientBG:modulate") | ||||||
|  | tracks/0/interp = 1 | ||||||
|  | tracks/0/loop_wrap = true | ||||||
|  | tracks/0/keys = { | ||||||
|  | "times": PackedFloat32Array(0), | ||||||
|  | "transitions": PackedFloat32Array(1), | ||||||
|  | "update": 0, | ||||||
|  | "values": [Color(1, 1, 1, 1)] | ||||||
|  | } | ||||||
|  | tracks/1/type = "value" | ||||||
|  | tracks/1/imported = false | ||||||
|  | tracks/1/enabled = true | ||||||
|  | tracks/1/path = NodePath("AlertContainer/Text/Subheading: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(".:modulate") | ||||||
|  | tracks/2/interp = 1 | ||||||
|  | tracks/2/loop_wrap = true | ||||||
|  | tracks/2/keys = { | ||||||
|  | "times": PackedFloat32Array(0), | ||||||
|  | "transitions": PackedFloat32Array(1), | ||||||
|  | "update": 0, | ||||||
|  | "values": [Color(1, 1, 1, 1)] | ||||||
|  | } | ||||||
|  | tracks/3/type = "value" | ||||||
|  | tracks/3/imported = false | ||||||
|  | tracks/3/enabled = true | ||||||
|  | tracks/3/path = NodePath("Desaturator:material:shader_parameter/saturation") | ||||||
|  | tracks/3/interp = 1 | ||||||
|  | tracks/3/loop_wrap = true | ||||||
|  | tracks/3/keys = { | ||||||
|  | "times": PackedFloat32Array(0), | ||||||
|  | "transitions": PackedFloat32Array(1), | ||||||
|  | "update": 0, | ||||||
|  | "values": [1.0] | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | [sub_resource type="AnimationLibrary" id="AnimationLibrary_em7mg"] | ||||||
|  | _data = { | ||||||
|  | "RESET": SubResource("Animation_4aged"), | ||||||
|  | "display": SubResource("Animation_l6yhv") | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | [node name="DeathAlert" type="Control"] | ||||||
|  | custom_minimum_size = Vector2(0, 300) | ||||||
|  | layout_mode = 3 | ||||||
|  | anchors_preset = 15 | ||||||
|  | anchor_right = 1.0 | ||||||
|  | anchor_bottom = 1.0 | ||||||
|  | grow_horizontal = 2 | ||||||
|  | grow_vertical = 2 | ||||||
|  | 
 | ||||||
|  | [node name="Desaturator" type="ColorRect" parent="."] | ||||||
|  | material = SubResource("ShaderMaterial_m6b5h") | ||||||
|  | layout_mode = 1 | ||||||
|  | anchors_preset = 15 | ||||||
|  | anchor_right = 1.0 | ||||||
|  | anchor_bottom = 1.0 | ||||||
|  | grow_horizontal = 2 | ||||||
|  | grow_vertical = 2 | ||||||
|  | 
 | ||||||
|  | [node name="AlertContainer" type="Control" parent="."] | ||||||
|  | custom_minimum_size = Vector2(0, 300) | ||||||
|  | layout_mode = 1 | ||||||
|  | anchors_preset = 14 | ||||||
|  | anchor_top = 0.5 | ||||||
|  | anchor_right = 1.0 | ||||||
|  | anchor_bottom = 0.5 | ||||||
|  | grow_horizontal = 2 | ||||||
|  | grow_vertical = 2 | ||||||
|  | 
 | ||||||
|  | [node name="GradientBG" type="TextureRect" parent="AlertContainer"] | ||||||
|  | texture_filter = 6 | ||||||
|  | layout_mode = 1 | ||||||
|  | anchors_preset = -1 | ||||||
|  | anchor_right = 1.0 | ||||||
|  | anchor_bottom = 1.0 | ||||||
|  | offset_left = -128.0 | ||||||
|  | offset_right = 128.0 | ||||||
|  | grow_horizontal = 2 | ||||||
|  | grow_vertical = 2 | ||||||
|  | texture = SubResource("GradientTexture2D_7xfnx") | ||||||
|  | 
 | ||||||
|  | [node name="Text" type="Control" parent="AlertContainer"] | ||||||
|  | texture_filter = 6 | ||||||
|  | layout_mode = 1 | ||||||
|  | anchors_preset = 15 | ||||||
|  | anchor_right = 1.0 | ||||||
|  | anchor_bottom = 1.0 | ||||||
|  | grow_horizontal = 2 | ||||||
|  | grow_vertical = 2 | ||||||
|  | 
 | ||||||
|  | [node name="TypewriterLabel" type="RichTextLabel" parent="AlertContainer/Text"] | ||||||
|  | layout_mode = 1 | ||||||
|  | anchors_preset = 15 | ||||||
|  | anchor_right = 1.0 | ||||||
|  | anchor_bottom = 1.0 | ||||||
|  | grow_horizontal = 2 | ||||||
|  | grow_vertical = 2 | ||||||
|  | theme_type_variation = &"DeathScreenLabel" | ||||||
|  | theme_override_constants/outline_size = 16 | ||||||
|  | theme_override_font_sizes/normal_font_size = 256 | ||||||
|  | bbcode_enabled = true | ||||||
|  | text = "[center][wave][type speed=10 delay=2.7 factor=4.0]got em[/type][/wave][/center]" | ||||||
|  | scroll_active = false | ||||||
|  | autowrap_mode = 0 | ||||||
|  | script = ExtResource("2_w3oh2") | ||||||
|  | translation_curve = SubResource("CurveXYZTexture_bixq7") | ||||||
|  | 
 | ||||||
|  | [node name="Subheading" type="RichTextLabel" parent="AlertContainer/Text"] | ||||||
|  | custom_minimum_size = Vector2(220, 40) | ||||||
|  | layout_mode = 1 | ||||||
|  | anchors_preset = -1 | ||||||
|  | anchor_left = 0.5 | ||||||
|  | anchor_top = 1.0 | ||||||
|  | anchor_right = 0.5 | ||||||
|  | anchor_bottom = 1.0 | ||||||
|  | offset_left = -110.0 | ||||||
|  | offset_top = -40.0 | ||||||
|  | offset_right = 110.0 | ||||||
|  | offset_bottom = -50.0 | ||||||
|  | grow_horizontal = 2 | ||||||
|  | grow_vertical = 0 | ||||||
|  | theme_type_variation = &"DeathScreenLabel" | ||||||
|  | theme_override_constants/outline_size = 4 | ||||||
|  | theme_override_font_sizes/normal_font_size = 36 | ||||||
|  | bbcode_enabled = true | ||||||
|  | text = "[center][wave]lmao[/wave][/center]" | ||||||
|  | 
 | ||||||
|  | [node name="AnimationPlayer" type="AnimationPlayer" parent="."] | ||||||
|  | libraries = { | ||||||
|  | "": SubResource("AnimationLibrary_em7mg") | ||||||
|  | } | ||||||
|  | autoplay = "display" | ||||||
| @ -445,8 +445,10 @@ _data = { | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| [node name="NiceAlert" type="Control"] | [node name="NiceAlert" type="Control"] | ||||||
|  | texture_filter = 5 | ||||||
| custom_minimum_size = Vector2(0, 300) | custom_minimum_size = Vector2(0, 300) | ||||||
| layout_mode = 3 | layout_mode = 3 | ||||||
|  | anchors_preset = 14 | ||||||
| anchor_top = 0.5 | anchor_top = 0.5 | ||||||
| anchor_right = 1.0 | anchor_right = 1.0 | ||||||
| anchor_bottom = 0.5 | anchor_bottom = 0.5 | ||||||
|  | |||||||
| @ -20,7 +20,7 @@ var player: WorldPlayer | |||||||
| @onready var _curve_animation: AnimationPlayer = %CurveAnimation | @onready var _curve_animation: AnimationPlayer = %CurveAnimation | ||||||
| @onready var _power_animation: AnimationPlayer = %PowerAnimation | @onready var _power_animation: AnimationPlayer = %PowerAnimation | ||||||
| 
 | 
 | ||||||
| @onready var _nice_container: Control = %NiceContainer | @onready var _alert_container: Control = %AlertContainer | ||||||
| @onready var _wasted_animation: AnimationPlayer = %WastedAnimation | @onready var _wasted_animation: AnimationPlayer = %WastedAnimation | ||||||
| 
 | 
 | ||||||
| @onready var _club_selector_animation: AnimationPlayer = %ClubSelectorAnimation | @onready var _club_selector_animation: AnimationPlayer = %ClubSelectorAnimation | ||||||
| @ -90,7 +90,7 @@ func gauge_flourish() -> void: | |||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| func play_nice_animation() -> void: | func play_nice_animation() -> void: | ||||||
| 	_nice_container.add_child(NICE_ALERT_SCENE.instantiate()) | 	_alert_container.add_child(NICE_ALERT_SCENE.instantiate()) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| func play_wasted_animation() -> void: | func play_wasted_animation() -> void: | ||||||
|  | |||||||
| @ -547,15 +547,6 @@ grow_vertical = 2 | |||||||
| mouse_filter = 2 | mouse_filter = 2 | ||||||
| script = ExtResource("1_x5b4c") | script = ExtResource("1_x5b4c") | ||||||
| 
 | 
 | ||||||
| [node name="NiceContainer" type="Control" parent="."] |  | ||||||
| unique_name_in_owner = true |  | ||||||
| layout_mode = 1 |  | ||||||
| anchors_preset = 15 |  | ||||||
| anchor_right = 1.0 |  | ||||||
| anchor_bottom = 1.0 |  | ||||||
| grow_horizontal = 2 |  | ||||||
| grow_vertical = 2 |  | ||||||
| 
 |  | ||||||
| [node name="WastedFeedback" type="RichTextLabel" parent="."] | [node name="WastedFeedback" type="RichTextLabel" parent="."] | ||||||
| visible = false | visible = false | ||||||
| custom_minimum_size = Vector2(1400, 0) | custom_minimum_size = Vector2(1400, 0) | ||||||
| @ -565,10 +556,10 @@ anchor_left = 0.5 | |||||||
| anchor_top = 0.5 | anchor_top = 0.5 | ||||||
| anchor_right = 0.5 | anchor_right = 0.5 | ||||||
| anchor_bottom = 0.5 | anchor_bottom = 0.5 | ||||||
| offset_left = -350.0 | offset_left = -700.0 | ||||||
| offset_top = -66.0 | offset_top = -136.5 | ||||||
| offset_right = 350.0 | offset_right = 700.0 | ||||||
| offset_bottom = 66.0 | offset_bottom = 136.5 | ||||||
| grow_horizontal = 2 | grow_horizontal = 2 | ||||||
| grow_vertical = 2 | grow_vertical = 2 | ||||||
| pivot_offset = Vector2(100, 115) | pivot_offset = Vector2(100, 115) | ||||||
| @ -818,3 +809,12 @@ unique_name_in_owner = true | |||||||
| libraries = { | libraries = { | ||||||
| "": SubResource("AnimationLibrary_o70c6") | "": SubResource("AnimationLibrary_o70c6") | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | [node name="AlertContainer" type="Control" parent="."] | ||||||
|  | unique_name_in_owner = true | ||||||
|  | layout_mode = 1 | ||||||
|  | anchors_preset = 15 | ||||||
|  | anchor_right = 1.0 | ||||||
|  | anchor_bottom = 1.0 | ||||||
|  | grow_horizontal = 2 | ||||||
|  | grow_vertical = 2 | ||||||
|  | |||||||
| @ -1,13 +1,17 @@ | |||||||
| class_name WorldUI extends Control | class_name WorldUI extends Control | ||||||
| ## Container & accessor for the world UI. | ## Container & accessor for the world UI. | ||||||
| 
 | 
 | ||||||
|  | const DEATH_ALERT_SCENE := preload("res://src/ui/shot_hud/death_alert.tscn") | ||||||
|  | 
 | ||||||
| const DEMO_CAMERA_GROUP := "DemoCamera" | const DEMO_CAMERA_GROUP := "DemoCamera" | ||||||
| 
 | 
 | ||||||
| @export var pause_scene := preload("res://src/ui/menus/pause_menu/pause_menu.tscn") | @export var pause_scene := preload("res://src/ui/menus/pause_menu/pause_menu.tscn") | ||||||
| 
 | 
 | ||||||
| var _prev_camera: Camera3D | var _prev_camera: Camera3D | ||||||
|  | var _pre_death_camera: Camera3D | ||||||
| 
 | 
 | ||||||
| @onready var hud_container: Control = %HUDContainer | @onready var hud_container: Control = %HUDContainer | ||||||
|  | @onready var effect_container: Control = %EffectContainer | ||||||
| @onready var pause_container: Control = %PauseContainer | @onready var pause_container: Control = %PauseContainer | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| @ -21,6 +25,19 @@ func add_player_hud(hud: ShotHUD) -> void: | |||||||
| 	hud_container.add_child(hud) | 	hud_container.add_child(hud) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | func play_death_sequence() -> void: | ||||||
|  | 	_pre_death_camera = get_viewport().get_camera_3d() | ||||||
|  | 	hud_container.hide() | ||||||
|  | 	var alert := DEATH_ALERT_SCENE.instantiate() | ||||||
|  | 	alert.tree_exiting.connect(_finish_death_sequence) | ||||||
|  | 	effect_container.add_child(alert) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | func _finish_death_sequence() -> void: | ||||||
|  | 	hud_container.show() | ||||||
|  | 	_pre_death_camera.make_current() | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| func pause() -> void: | func pause() -> void: | ||||||
| 	# Switch to demo cam, if there is one. | 	# Switch to demo cam, if there is one. | ||||||
| 	var democams: Array[Node] = get_tree().get_nodes_in_group(DEMO_CAMERA_GROUP) | 	var democams: Array[Node] = get_tree().get_nodes_in_group(DEMO_CAMERA_GROUP) | ||||||
|  | |||||||
| @ -8,6 +8,7 @@ class_name PlayManager extends Resource | |||||||
| func initialize() -> void: | func initialize() -> void: | ||||||
| 	for player: WorldPlayer in players: | 	for player: WorldPlayer in players: | ||||||
| 		player.shot_setup.finished.connect(_on_turn_finished) | 		player.shot_setup.finished.connect(_on_turn_finished) | ||||||
|  | 		player.on_death.connect(_on_player_death) | ||||||
| 	on_initialization() | 	on_initialization() | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| @ -21,3 +22,11 @@ func on_turn_finished(_shot_setup: ShotSetup) -> void: | |||||||
| 
 | 
 | ||||||
| func _on_turn_finished(shot_setup: ShotSetup) -> void: | func _on_turn_finished(shot_setup: ShotSetup) -> void: | ||||||
| 	on_turn_finished(shot_setup) | 	on_turn_finished(shot_setup) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | func on_player_death(_player: WorldPlayer) -> void: | ||||||
|  | 	pass  # Implemented in derived type | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | func _on_player_death(player: WorldPlayer) -> void: | ||||||
|  | 	on_player_death(player) | ||||||
|  | |||||||
| @ -11,3 +11,18 @@ func on_turn_finished(source: ShotSetup) -> void: | |||||||
| 	print_debug("Shot finished for ", source.player.name) | 	print_debug("Shot finished for ", source.player.name) | ||||||
| 	players.push_back(players.pop_front()) | 	players.push_back(players.pop_front()) | ||||||
| 	players[0].shot_setup.queue_restart() | 	players[0].shot_setup.queue_restart() | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | func on_player_death(player: WorldPlayer) -> void: | ||||||
|  | 	# If the dying player was active, we need to finish it and activate the next player's turn | ||||||
|  | 	if player.shot_setup.is_active(): | ||||||
|  | 		on_turn_finished(player.shot_setup) | ||||||
|  | 
 | ||||||
|  | 	players.erase(player) | ||||||
|  | 	print("Player 0 phase: ", ShotSetup.Phase.keys()[players[0].shot_setup.phase]) | ||||||
|  | 	if len(players) == 1: | ||||||
|  | 		on_win_condition() | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | func on_win_condition() -> void: | ||||||
|  | 	pass  # TODO | ||||||
|  | |||||||
| @ -1,4 +1,4 @@ | |||||||
| [gd_scene load_steps=8 format=3 uid="uid://cwnwcd8kushl3"] | [gd_scene load_steps=10 format=3 uid="uid://cwnwcd8kushl3"] | ||||||
| 
 | 
 | ||||||
| [ext_resource type="Script" path="res://src/world/world.gd" id="1_ybjyx"] | [ext_resource type="Script" path="res://src/world/world.gd" id="1_ybjyx"] | ||||||
| [ext_resource type="PackedScene" uid="uid://bm2o3mex10v11" path="res://levels/debug_level/debug_level.tscn" id="2_0xu5a"] | [ext_resource type="PackedScene" uid="uid://bm2o3mex10v11" path="res://levels/debug_level/debug_level.tscn" id="2_0xu5a"] | ||||||
| @ -6,10 +6,22 @@ | |||||||
| [ext_resource type="Script" path="res://src/ui/world_ui.gd" id="2_imewa"] | [ext_resource type="Script" path="res://src/ui/world_ui.gd" id="2_imewa"] | ||||||
| [ext_resource type="Resource" uid="uid://crock3revdn73" path="res://src/player/debug_player.tres" id="3_pyw81"] | [ext_resource type="Resource" uid="uid://crock3revdn73" path="res://src/player/debug_player.tres" id="3_pyw81"] | ||||||
| [ext_resource type="Script" path="res://src/world/play_manager/round_robin_manager.gd" id="5_h6mje"] | [ext_resource type="Script" path="res://src/world/play_manager/round_robin_manager.gd" id="5_h6mje"] | ||||||
|  | [ext_resource type="Resource" uid="uid://c1pnqsddvey3m" path="res://src/equipment/clubs/drivers/debug_driver.tres" id="5_u5ok3"] | ||||||
|  | 
 | ||||||
|  | [sub_resource type="Resource" id="Resource_njyo4"] | ||||||
|  | script = ExtResource("2_e743i") | ||||||
|  | life = 4.0 | ||||||
|  | name = "Gfolfer2" | ||||||
|  | color = Color(1, 0.439216, 0.439216, 1) | ||||||
|  | driver = ExtResource("5_u5ok3") | ||||||
|  | _balls = { | ||||||
|  | 1: -1, | ||||||
|  | 2: -1 | ||||||
|  | } | ||||||
| 
 | 
 | ||||||
| [sub_resource type="Resource" id="Resource_rdjhi"] | [sub_resource type="Resource" id="Resource_rdjhi"] | ||||||
| script = ExtResource("5_h6mje") | script = ExtResource("5_h6mje") | ||||||
| players = Array[ExtResource("2_e743i")]([ExtResource("3_pyw81")]) | players = Array[ExtResource("2_e743i")]([ExtResource("3_pyw81"), SubResource("Resource_njyo4")]) | ||||||
| 
 | 
 | ||||||
| [node name="World" type="Node" groups=["WorldGroup"]] | [node name="World" type="Node" groups=["WorldGroup"]] | ||||||
| script = ExtResource("1_ybjyx") | script = ExtResource("1_ybjyx") | ||||||
| @ -39,6 +51,17 @@ anchor_bottom = 1.0 | |||||||
| grow_horizontal = 2 | grow_horizontal = 2 | ||||||
| grow_vertical = 2 | grow_vertical = 2 | ||||||
| 
 | 
 | ||||||
|  | [node name="EffectContainer" type="Control" parent="UI"] | ||||||
|  | unique_name_in_owner = true | ||||||
|  | process_mode = 3 | ||||||
|  | layout_mode = 1 | ||||||
|  | anchors_preset = 15 | ||||||
|  | anchor_right = 1.0 | ||||||
|  | anchor_bottom = 1.0 | ||||||
|  | grow_horizontal = 2 | ||||||
|  | grow_vertical = 2 | ||||||
|  | mouse_filter = 2 | ||||||
|  | 
 | ||||||
| [node name="PauseContainer" type="Control" parent="UI"] | [node name="PauseContainer" type="Control" parent="UI"] | ||||||
| unique_name_in_owner = true | unique_name_in_owner = true | ||||||
| layout_mode = 1 | layout_mode = 1 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user