Added sounds and refactoring player handling (WIP)
This commit is contained in:
		
							parent
							
								
									d096da71a4
								
							
						
					
					
						commit
						c36edf7651
					
				
							
								
								
									
										9
									
								
								assets/sounds/pixabay/dash/sources.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								assets/sounds/pixabay/dash/sources.txt
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,9 @@ | |||||||
|  | punch-1-166694.mp3 | ||||||
|  | - license:  | ||||||
|  | - source: https://pixabay.com/sound-effects/punch-1-166694/ | ||||||
|  | - author: floraphonic (https://pixabay.com/users/floraphonic-38928062/) | ||||||
|  | 
 | ||||||
|  | whoosh-6316.mp3 | ||||||
|  | - license: | ||||||
|  | - source: https://pixabay.com/sound-effects/whoosh-6316/ | ||||||
|  | - author: Pixabay (https://pixabay.com/users/pixabay-1/) | ||||||
							
								
								
									
										
											BIN
										
									
								
								assets/sounds/pixabay/dash/whoosh-6316.mp3
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								assets/sounds/pixabay/dash/whoosh-6316.mp3
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										19
									
								
								assets/sounds/pixabay/dash/whoosh-6316.mp3.import
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								assets/sounds/pixabay/dash/whoosh-6316.mp3.import
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,19 @@ | |||||||
|  | [remap] | ||||||
|  | 
 | ||||||
|  | importer="mp3" | ||||||
|  | type="AudioStreamMP3" | ||||||
|  | uid="uid://bhbhh78j5rkfe" | ||||||
|  | path="res://.godot/imported/whoosh-6316.mp3-c09ddc29973a4f106e83f9f9f20b7c35.mp3str" | ||||||
|  | 
 | ||||||
|  | [deps] | ||||||
|  | 
 | ||||||
|  | source_file="res://assets/sounds/pixabay/dash/whoosh-6316.mp3" | ||||||
|  | dest_files=["res://.godot/imported/whoosh-6316.mp3-c09ddc29973a4f106e83f9f9f20b7c35.mp3str"] | ||||||
|  | 
 | ||||||
|  | [params] | ||||||
|  | 
 | ||||||
|  | loop=false | ||||||
|  | loop_offset=0 | ||||||
|  | bpm=0 | ||||||
|  | beat_count=0 | ||||||
|  | bar_beats=4 | ||||||
							
								
								
									
										
											BIN
										
									
								
								assets/sounds/pixabay/explosion/081895_impact_wav-43951.mp3
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								assets/sounds/pixabay/explosion/081895_impact_wav-43951.mp3
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| @ -0,0 +1,19 @@ | |||||||
|  | [remap] | ||||||
|  | 
 | ||||||
|  | importer="mp3" | ||||||
|  | type="AudioStreamMP3" | ||||||
|  | uid="uid://qeg12ynvjvy0" | ||||||
|  | path="res://.godot/imported/081895_impact_wav-43951.mp3-b97c4fdee4abc0cae63af4d92e0a6e8a.mp3str" | ||||||
|  | 
 | ||||||
|  | [deps] | ||||||
|  | 
 | ||||||
|  | source_file="res://assets/sounds/pixabay/explosion/081895_impact_wav-43951.mp3" | ||||||
|  | dest_files=["res://.godot/imported/081895_impact_wav-43951.mp3-b97c4fdee4abc0cae63af4d92e0a6e8a.mp3str"] | ||||||
|  | 
 | ||||||
|  | [params] | ||||||
|  | 
 | ||||||
|  | loop=false | ||||||
|  | loop_offset=0 | ||||||
|  | bpm=0 | ||||||
|  | beat_count=0 | ||||||
|  | bar_beats=4 | ||||||
							
								
								
									
										4
									
								
								assets/sounds/pixabay/explosion/sources.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								assets/sounds/pixabay/explosion/sources.txt
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,4 @@ | |||||||
|  | 081895_impact_wav-43951.mp3 | ||||||
|  | license:  | ||||||
|  | source: https://pixabay.com/sound-effects/081895-impact-wav-43951/ | ||||||
|  | author: Pixabay (https://pixabay.com/users/pixabay-1/) | ||||||
							
								
								
									
										
											BIN
										
									
								
								assets/sounds/pixabay/sfx/game-teleport-90735.mp3
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								assets/sounds/pixabay/sfx/game-teleport-90735.mp3
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										19
									
								
								assets/sounds/pixabay/sfx/game-teleport-90735.mp3.import
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								assets/sounds/pixabay/sfx/game-teleport-90735.mp3.import
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,19 @@ | |||||||
|  | [remap] | ||||||
|  | 
 | ||||||
|  | importer="mp3" | ||||||
|  | type="AudioStreamMP3" | ||||||
|  | uid="uid://b33xjins3dqpp" | ||||||
|  | path="res://.godot/imported/game-teleport-90735.mp3-112905f9f7cb1de6d452cc344a4b2de8.mp3str" | ||||||
|  | 
 | ||||||
|  | [deps] | ||||||
|  | 
 | ||||||
|  | source_file="res://assets/sounds/pixabay/sfx/game-teleport-90735.mp3" | ||||||
|  | dest_files=["res://.godot/imported/game-teleport-90735.mp3-112905f9f7cb1de6d452cc344a4b2de8.mp3str"] | ||||||
|  | 
 | ||||||
|  | [params] | ||||||
|  | 
 | ||||||
|  | loop=false | ||||||
|  | loop_offset=0 | ||||||
|  | bpm=0 | ||||||
|  | beat_count=0 | ||||||
|  | bar_beats=4 | ||||||
| @ -13,7 +13,7 @@ func _ready(): | |||||||
| 	collision_area.connect("body_entered", on_body_enter) | 	collision_area.connect("body_entered", on_body_enter) | ||||||
| 
 | 
 | ||||||
| # Called every frame. 'delta' is the elapsed time since the previous frame. | # Called every frame. 'delta' is the elapsed time since the previous frame. | ||||||
| func _physics_process(delta): | func _physics_process(_delta): | ||||||
| 	if processed: | 	if processed: | ||||||
| 		queue_free() | 		queue_free() | ||||||
| 	 | 	 | ||||||
|  | |||||||
| @ -1,17 +1,15 @@ | |||||||
| [gd_scene load_steps=3 format=3 uid="uid://dx6fxak21icvs"] | [gd_scene load_steps=3 format=3 uid="uid://ck1gd38drird6"] | ||||||
| 
 | 
 | ||||||
| [ext_resource type="Script" path="res://entities/BombEmitter.gd" id="1_110pt"] | [ext_resource type="Script" path="res://entities/BombEmitter.gd" id="1_nvjs2"] | ||||||
| 
 | 
 | ||||||
| [sub_resource type="CylinderShape3D" id="CylinderShape3D_7yhwp"] | [sub_resource type="CylinderShape3D" id="CylinderShape3D_yy20u"] | ||||||
| height = 0.5 | height = 0.5 | ||||||
| radius = 3.0 | radius = 5.0 | ||||||
| 
 | 
 | ||||||
| [node name="BombEmitter" type="Node3D"] | [node name="BombEmitter" type="Node3D"] | ||||||
| script = ExtResource("1_110pt") | script = ExtResource("1_nvjs2") | ||||||
| 
 | 
 | ||||||
| [node name="Area3D" type="Area3D" parent="."] | [node name="Area3D" type="Area3D" parent="."] | ||||||
| collision_layer = 0 |  | ||||||
| collision_mask = 4 |  | ||||||
| 
 | 
 | ||||||
| [node name="CollisionShape3D" type="CollisionShape3D" parent="Area3D"] | [node name="CollisionShape3D" type="CollisionShape3D" parent="Area3D"] | ||||||
| shape = SubResource("CylinderShape3D_7yhwp") | shape = SubResource("CylinderShape3D_yy20u") | ||||||
|  | |||||||
| @ -14,6 +14,9 @@ class_name Player extends CharacterBody3D | |||||||
| 
 | 
 | ||||||
| @onready var geometry: MeshInstance3D = $Geometry | @onready var geometry: MeshInstance3D = $Geometry | ||||||
| @onready var collision: CollisionShape3D = $CollisionShape3D | @onready var collision: CollisionShape3D = $CollisionShape3D | ||||||
|  | @onready var dash_stream_player: AudioStreamPlayer = $DashAudioStreamPlayer | ||||||
|  | @onready var explosion_stream_player: AudioStreamPlayer = $ExplosionAudioStreamPlayer | ||||||
|  | @onready var spawn_stream_player: AudioStreamPlayer = $SpawnAudioStreamPlayer | ||||||
| 
 | 
 | ||||||
| var bomb_emitter_scene = preload("res://entities/BombEmitter.tscn") | var bomb_emitter_scene = preload("res://entities/BombEmitter.tscn") | ||||||
| 
 | 
 | ||||||
| @ -143,6 +146,8 @@ func calc_coloring_position(): | |||||||
| 
 | 
 | ||||||
| func on_player_spawn(): | func on_player_spawn(): | ||||||
| 	print ("Player " + 	str(self) + ": spawning") | 	print ("Player " + 	str(self) + ": spawning") | ||||||
|  | 	spawn_stream_player.pitch_scale = 0.8 + randf () * 0.4 | ||||||
|  | 	spawn_stream_player.play() | ||||||
| 
 | 
 | ||||||
| func on_player_falling(): | func on_player_falling(): | ||||||
| 	print ("Player " + str(self) + ": falling") | 	print ("Player " + str(self) + ": falling") | ||||||
| @ -154,12 +159,17 @@ func on_dash(): | |||||||
| 	is_dashing = true; | 	is_dashing = true; | ||||||
| 	dash_time = DASH_DURATION | 	dash_time = DASH_DURATION | ||||||
| 	energy = max (0, energy - DASH_ENERGY) | 	energy = max (0, energy - DASH_ENERGY) | ||||||
|  | 	dash_stream_player.pitch_scale = 0.9 + randf () * 0.2 | ||||||
|  | 	dash_stream_player.play() | ||||||
| 	 | 	 | ||||||
| func on_drop_bomb(): | func on_drop_bomb(): | ||||||
| 	coloring_bomb_sprite.visible = true; | 	coloring_bomb_sprite.visible = true; | ||||||
| 	bomb_time = BOMB_DURATION | 	bomb_time = BOMB_DURATION | ||||||
| 	energy = max (0, energy - BOMB_ENERGY) | 	energy = max (0, energy - BOMB_ENERGY) | ||||||
| 
 | 
 | ||||||
|  | 	explosion_stream_player.pitch_scale = 0.6 + randf () * 0.2 | ||||||
|  | 	explosion_stream_player.play() | ||||||
|  | 
 | ||||||
| 	var bomb_emitter : BombEmitter = bomb_emitter_scene.instantiate() | 	var bomb_emitter : BombEmitter = bomb_emitter_scene.instantiate() | ||||||
| 	bomb_emitter.global_position = global_position | 	bomb_emitter.global_position = global_position | ||||||
| 	get_parent_node_3d().add_child(bomb_emitter) | 	get_parent_node_3d().add_child(bomb_emitter) | ||||||
|  | |||||||
| @ -1,6 +1,9 @@ | |||||||
| [gd_scene load_steps=4 format=3 uid="uid://bfyjtfdko3l7o"] | [gd_scene load_steps=7 format=3 uid="uid://bfyjtfdko3l7o"] | ||||||
| 
 | 
 | ||||||
| [ext_resource type="Script" path="res://entities/Player.gd" id="1_w5gy0"] | [ext_resource type="Script" path="res://entities/Player.gd" id="1_w5gy0"] | ||||||
|  | [ext_resource type="AudioStream" uid="uid://bhbhh78j5rkfe" path="res://assets/sounds/pixabay/dash/whoosh-6316.mp3" id="2_ykhbt"] | ||||||
|  | [ext_resource type="AudioStream" uid="uid://qeg12ynvjvy0" path="res://assets/sounds/pixabay/explosion/081895_impact_wav-43951.mp3" id="3_mjsr0"] | ||||||
|  | [ext_resource type="AudioStream" uid="uid://b33xjins3dqpp" path="res://assets/sounds/pixabay/sfx/game-teleport-90735.mp3" id="4_y7abk"] | ||||||
| 
 | 
 | ||||||
| [sub_resource type="BoxMesh" id="BoxMesh_yle83"] | [sub_resource type="BoxMesh" id="BoxMesh_yle83"] | ||||||
| size = Vector3(0.24, 0.75, 0.24) | size = Vector3(0.24, 0.75, 0.24) | ||||||
| @ -29,3 +32,14 @@ mesh = SubResource("BoxMesh_yle83") | |||||||
| [node name="CollisionShape3D" type="CollisionShape3D" parent="."] | [node name="CollisionShape3D" type="CollisionShape3D" parent="."] | ||||||
| transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.496337, 0) | transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.496337, 0) | ||||||
| shape = SubResource("CylinderShape3D_rwgp3") | shape = SubResource("CylinderShape3D_rwgp3") | ||||||
|  | 
 | ||||||
|  | [node name="DashAudioStreamPlayer" type="AudioStreamPlayer" parent="."] | ||||||
|  | stream = ExtResource("2_ykhbt") | ||||||
|  | 
 | ||||||
|  | [node name="ExplosionAudioStreamPlayer" type="AudioStreamPlayer" parent="."] | ||||||
|  | stream = ExtResource("3_mjsr0") | ||||||
|  | volume_db = -15.707 | ||||||
|  | pitch_scale = 0.84 | ||||||
|  | 
 | ||||||
|  | [node name="SpawnAudioStreamPlayer" type="AudioStreamPlayer" parent="."] | ||||||
|  | stream = ExtResource("4_y7abk") | ||||||
|  | |||||||
| @ -11,6 +11,11 @@ func _ready(): | |||||||
| 	area3d.connect("body_entered", on_player_enter) | 	area3d.connect("body_entered", on_player_enter) | ||||||
| 	area3d.connect("body_exited", on_player_exited) | 	area3d.connect("body_exited", on_player_exited) | ||||||
| 
 | 
 | ||||||
|  | func _process(_delta): | ||||||
|  | 	for player: Player in near_players: | ||||||
|  | 		if player.state == Player.PlayerState.Dead: | ||||||
|  | 			near_players.erase(player) | ||||||
|  | 
 | ||||||
| func on_player_enter(node: Node3D): | func on_player_enter(node: Node3D): | ||||||
| 	var player: Player = node as Player | 	var player: Player = node as Player | ||||||
| 	if node == null: | 	if node == null: | ||||||
|  | |||||||
| @ -126,7 +126,7 @@ move={ | |||||||
| 3d_physics/layer_1="World" | 3d_physics/layer_1="World" | ||||||
| 3d_physics/layer_2="Obstacles" | 3d_physics/layer_2="Obstacles" | ||||||
| 3d_physics/layer_3="Player" | 3d_physics/layer_3="Player" | ||||||
| 3d_physics/layer_4="Collectibles" | 3d_physics/layer_4="Clutter" | ||||||
| 
 | 
 | ||||||
| [rendering] | [rendering] | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -1,6 +1,6 @@ | |||||||
| class_name World extends Node3D | class_name World extends Node3D | ||||||
| 
 | 
 | ||||||
| @export var players: Array | var players: Array | ||||||
| 
 | 
 | ||||||
| @onready var score_update_timer: Timer = $ScoreUpdateTimer | @onready var score_update_timer: Timer = $ScoreUpdateTimer | ||||||
| @onready var pixel_count_compute_shader: PixelCountComputeShader = $PixelCountComputeShader | @onready var pixel_count_compute_shader: PixelCountComputeShader = $PixelCountComputeShader | ||||||
| @ -9,6 +9,8 @@ class_name World extends Node3D | |||||||
| @onready var level: Node3D = $Level | @onready var level: Node3D = $Level | ||||||
| @onready var world_coloring_viewport: SubViewport = $WorldColoringViewport | @onready var world_coloring_viewport: SubViewport = $WorldColoringViewport | ||||||
| 
 | 
 | ||||||
|  | var player_scene = preload("res://entities/Player.tscn") | ||||||
|  | 
 | ||||||
| const GAME_DURATION_SECONDS = 20 | const GAME_DURATION_SECONDS = 20 | ||||||
| 
 | 
 | ||||||
| var camera_position: Vector3; | var camera_position: Vector3; | ||||||
| @ -28,30 +30,16 @@ var game_state_last : GameState = GameState.Finished | |||||||
| 
 | 
 | ||||||
| # Called when the node enters the scene tree for the first time. | # Called when the node enters the scene tree for the first time. | ||||||
| func _ready(): | func _ready(): | ||||||
| 	var player1: CharacterBody3D = $Player1 |  | ||||||
| 	var player2: CharacterBody3D = $Player2 |  | ||||||
| 
 |  | ||||||
| 	players.append(player1) |  | ||||||
| 	players.append(player2) |  | ||||||
| 
 |  | ||||||
| 	if players.size() == 1: |  | ||||||
| 		world_coloring_material = load("res://materials/WorldColoringMaterialPass.tres") |  | ||||||
| 		world_coloring_material.set_shader_parameter("world_color_texture", world_coloring_viewport.get_texture()) |  | ||||||
| 	else: |  | ||||||
| 		world_coloring_material = load("res://materials/WorldColoringMaterialPassVersus.tres") |  | ||||||
| 		world_coloring_material.set_shader_parameter("world_color_texture", world_coloring_viewport.get_texture()) |  | ||||||
| 
 |  | ||||||
| 	camera_position = camera.global_position | 	camera_position = camera.global_position | ||||||
| 
 | 
 | ||||||
| 	score_update_timer.connect("timeout", update_score) | 	score_update_timer.connect("timeout", update_score) | ||||||
| 
 | 
 | ||||||
| 	find_spawn_points(level) | 	find_spawn_points(level) | ||||||
| 	 | 
 | ||||||
| 	for player: Player in players: | 	spawn_players() | ||||||
| 		player.state = player.PlayerState.Dead |  | ||||||
| 	 |  | ||||||
| 	apply_world_coloring_recursive(level) | 	apply_world_coloring_recursive(level) | ||||||
| 
 | 
 | ||||||
|  | 
 | ||||||
| # Called every frame. 'delta' is the elapsed time since the previous frame. | # Called every frame. 'delta' is the elapsed time since the previous frame. | ||||||
| func _process(_delta): | func _process(_delta): | ||||||
| 	if game_state_last != game_state: | 	if game_state_last != game_state: | ||||||
| @ -112,7 +100,7 @@ func _physics_process(_delta): | |||||||
| 				if not spawn_point.is_occupied(): | 				if not spawn_point.is_occupied(): | ||||||
| 					occupied = false | 					occupied = false | ||||||
| 			 | 			 | ||||||
| 			player.global_position = spawn_point.global_position | 			player.global_position = spawn_point.global_position + Vector3.UP * 2 | ||||||
| 			player.state = Player.PlayerState.Alive | 			player.state = Player.PlayerState.Alive | ||||||
| 			spawn_point.near_players.append(player) | 			spawn_point.near_players.append(player) | ||||||
| 
 | 
 | ||||||
| @ -150,6 +138,42 @@ func update_score(): | |||||||
| 	if players.size() > 1: | 	if players.size() > 1: | ||||||
| 		players[1].score = pixel_count_compute_shader.blue_score | 		players[1].score = pixel_count_compute_shader.blue_score | ||||||
| 
 | 
 | ||||||
|  | func spawn_players(): | ||||||
|  | 	var players_node = $Players | ||||||
|  | 		 | ||||||
|  | 	var player1: Player = player_scene.instantiate() | ||||||
|  | 	player1.color = Color(1, 0, 0, 1) | ||||||
|  | 	player1.coloring_sprite_path = world_coloring_viewport.get_node("Player1Sprite").get_path() | ||||||
|  | 	player1.coloring_bomb_sprite_path = world_coloring_viewport.get_node("Player1BombSprite").get_path()	 | ||||||
|  | 	var player2: Player = player_scene.instantiate() | ||||||
|  | 	player2.color = Color(0, 0, 1, 1) | ||||||
|  | 	player2.coloring_sprite_path = world_coloring_viewport.get_node("Player2Sprite").get_path() | ||||||
|  | 	player2.coloring_bomb_sprite_path = world_coloring_viewport.get_node("Player2BombSprite").get_path()	 | ||||||
|  | 	 | ||||||
|  | 	players_node.add_child(player1) | ||||||
|  | 	players_node.add_child(player2) | ||||||
|  | 	 | ||||||
|  | 	players.clear() | ||||||
|  | 	 | ||||||
|  | 	players.append(player1) | ||||||
|  | 	players.append(player2) | ||||||
|  | 
 | ||||||
|  | 	if players.size() == 1: | ||||||
|  | 		world_coloring_material = load("res://materials/WorldColoringMaterialPass.tres") | ||||||
|  | 		world_coloring_material.set_shader_parameter("world_color_texture", world_coloring_viewport.get_texture()) | ||||||
|  | 	else: | ||||||
|  | 		world_coloring_material = load("res://materials/WorldColoringMaterialPassVersus.tres") | ||||||
|  | 		world_coloring_material.set_shader_parameter("world_color_texture", world_coloring_viewport.get_texture()) | ||||||
|  | 		 | ||||||
|  | 	for player: Player in players: | ||||||
|  | 		player.state = player.PlayerState.Dead | ||||||
|  | 
 | ||||||
|  | func remove_players(): | ||||||
|  | 	var players_node = $Players | ||||||
|  | 	 | ||||||
|  | 	for player: Player in players_node.get_children(): | ||||||
|  | 		player.queue_free() | ||||||
|  | 
 | ||||||
| func on_game_startup(): | func on_game_startup(): | ||||||
| 	print("Switching to startup") | 	print("Switching to startup") | ||||||
| 	stop_gameplay() | 	stop_gameplay() | ||||||
|  | |||||||
| @ -136,3 +136,5 @@ player_index = 1 | |||||||
| 
 | 
 | ||||||
| [node name="SpawnPointPlayer3" parent="Level" instance=ExtResource("8_ykvyf")] | [node name="SpawnPointPlayer3" parent="Level" instance=ExtResource("8_ykvyf")] | ||||||
| transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 9.55561, 0, 3.26255) | transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 9.55561, 0, 3.26255) | ||||||
|  | 
 | ||||||
|  | [node name="Players" type="Node" parent="."] | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Martin Felis
						Martin Felis