begin work on level starting state

This commit is contained in:
yuki 2025-11-19 15:27:00 -03:00
parent 61a0c34822
commit c48bd8b1f6
3 changed files with 52 additions and 0 deletions

View file

@ -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

View file

@ -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

View file

@ -0,0 +1 @@
uid://dikxx4j1auywf