diff --git a/classes/level/level.gd b/classes/level/level.gd index 4d6d57b..faa26db 100644 --- a/classes/level/level.gd +++ b/classes/level/level.gd @@ -11,6 +11,8 @@ class_name Level extends Node2D @export var block_layer: BlockTileLayer #@export var goal_layer: GoalTileLayer +@onready var player_scene: PackedScene = preload("res://scenes/player/player.tscn") + var player_1: Player var player_2: Player var ball: Ball diff --git a/scenes/levels/states/level_starting.gd b/scenes/levels/states/level_starting.gd new file mode 100644 index 0000000..65fed9b --- /dev/null +++ b/scenes/levels/states/level_starting.gd @@ -0,0 +1,49 @@ +extends LevelState + + +func _enter(_previous_state_path: String, _data: Dictionary = {"round": 0, "restart": false}) -> void: + assert((_data["round"] as int) in range(3), "round number is invalid") + assert( + (_data["restart"] as bool) == true or + (_data["restart"] as bool) == false, + "round restart data is invalid" + ) + level.current_round = _data["round"] + level.restarted = _data["restart"] + if level.restarted: + level.current_round = 0 + level.scoreboard = Vector2i(0,0) + level.restarted = false + + if level.current_round + 1 == 4: + finished.emit(FINISHING) + + assert( + (level.player_1 != null and level.player_2 != null) or + (level.player_1 == null and level.player_2 == null), + "desynced player instantiation?" + ) + + if level.player_1 != null and level.player_2 != null: + level.player_1.queue_free() + level.player_2.queue_free() + + level.current_round += 1 + + level.player_1 = _instantiate_player(1) + level.player_2 = _instantiate_player(2) + +func _instantiate_player(id: int) -> Player: + var p: Player = level.player_1 if id == 1 else level.player_2 + var s: PlayerSpawnPoint = level.player_1_spawn if id == 1 else level.player_2_spawn + + p = level.player_scene.instantiate() + p.id = id + p.name = "Player"+str(id) + + level.add_child(p) + + p.global_position = s.global_position + p.global_position = s.global_position + + return p diff --git a/scenes/levels/states/level_starting.gd.uid b/scenes/levels/states/level_starting.gd.uid new file mode 100644 index 0000000..5d0598a --- /dev/null +++ b/scenes/levels/states/level_starting.gd.uid @@ -0,0 +1 @@ +uid://dikxx4j1auywf