Added sounds and refactoring player handling (WIP)
This commit is contained in:
+43
-19
@@ -1,6 +1,6 @@
|
||||
class_name World extends Node3D
|
||||
|
||||
@export var players: Array
|
||||
var players: Array
|
||||
|
||||
@onready var score_update_timer: Timer = $ScoreUpdateTimer
|
||||
@onready var pixel_count_compute_shader: PixelCountComputeShader = $PixelCountComputeShader
|
||||
@@ -9,6 +9,8 @@ class_name World extends Node3D
|
||||
@onready var level: Node3D = $Level
|
||||
@onready var world_coloring_viewport: SubViewport = $WorldColoringViewport
|
||||
|
||||
var player_scene = preload("res://entities/Player.tscn")
|
||||
|
||||
const GAME_DURATION_SECONDS = 20
|
||||
|
||||
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.
|
||||
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
|
||||
|
||||
score_update_timer.connect("timeout", update_score)
|
||||
|
||||
find_spawn_points(level)
|
||||
|
||||
for player: Player in players:
|
||||
player.state = player.PlayerState.Dead
|
||||
|
||||
|
||||
spawn_players()
|
||||
apply_world_coloring_recursive(level)
|
||||
|
||||
|
||||
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||
func _process(_delta):
|
||||
if game_state_last != game_state:
|
||||
@@ -112,7 +100,7 @@ func _physics_process(_delta):
|
||||
if not spawn_point.is_occupied():
|
||||
occupied = false
|
||||
|
||||
player.global_position = spawn_point.global_position
|
||||
player.global_position = spawn_point.global_position + Vector3.UP * 2
|
||||
player.state = Player.PlayerState.Alive
|
||||
spawn_point.near_players.append(player)
|
||||
|
||||
@@ -150,6 +138,42 @@ func update_score():
|
||||
if players.size() > 1:
|
||||
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():
|
||||
print("Switching to startup")
|
||||
stop_gameplay()
|
||||
|
||||
@@ -136,3 +136,5 @@ player_index = 1
|
||||
|
||||
[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)
|
||||
|
||||
[node name="Players" type="Node" parent="."]
|
||||
|
||||
Reference in New Issue
Block a user