diff options
| -rw-r--r-- | client/game.gd | 8 | ||||
| -rw-r--r-- | client/global.gd | 6 | ||||
| -rw-r--r-- | client/map/tiles/cutting_board.gd | 30 | ||||
| -rw-r--r-- | client/map/tiles/rolling_board.gd | 30 | ||||
| -rw-r--r-- | client/map/tiles/tile.gd | 2 | ||||
| -rw-r--r-- | client/multiplayer.gd | 2 |
6 files changed, 44 insertions, 34 deletions
diff --git a/client/game.gd b/client/game.gd index 8edd4f8c..18b23e08 100644 --- a/client/game.gd +++ b/client/game.gd @@ -61,7 +61,7 @@ var tutorial_running := false var tutorial_queue := [] var last_position = null # : Vector2? -var players := {} +var players: Dictionary[float, Player] = {} var spectating_mode: SpectatingMode = SpectatingMode.CENTER @@ -178,7 +178,11 @@ func handle_packet(p): "set_progress": if "tile" in p.item: var t: Tile = map.get_tile_instance(p.item.tile) - t.progress(p.position, p.speed, p.warn, players.get(p.player)) + var acting_players: Array[Player] = [] + for id: float in p.players: + if !players.has(id): continue + acting_players.append(players[id]) + t.progress(p.position, p.speed, p.warn, acting_players) else: players[p.item.player[0]].progress(p.position, p.speed, p.warn, int(p.item.player[1])) "clear_progress": diff --git a/client/global.gd b/client/global.gd index 4f68f99f..7d44754f 100644 --- a/client/global.gd +++ b/client/global.gd @@ -133,6 +133,12 @@ static func unordered_array_eq(a: Array, b: Array) -> bool: static func unordered_array_subset(a: Array, b: Array) -> bool: return a.all(func(e): return b.has(e)) +static func unordered_array_difference(a: Array, b: Array) -> Array: + var c := [] + for i in a: + if not b.has(i): c.append(i) + return c + static func add_missing_keys(dict: Dictionary, reference: Dictionary): for k in reference.keys(): if !dict.has(k) or typeof(dict[k]) != typeof(reference[k]): diff --git a/client/map/tiles/cutting_board.gd b/client/map/tiles/cutting_board.gd index 300b5700..9ee93522 100644 --- a/client/map/tiles/cutting_board.gd +++ b/client/map/tiles/cutting_board.gd @@ -18,7 +18,7 @@ extends CounterBase var board = load("res://map/tiles/cutting_board.tscn").instantiate() var chopping: AudioStreamPlayer3D = AudioStreamPlayer3D.new() -var acting_player +var acting_players: Array[Player] = [] func _init(ctx: TileFactory.TileCC): super(ctx) @@ -26,29 +26,29 @@ func _init(ctx: TileFactory.TileCC): add_child(chopping) base.add_child(board) -func progress(position_: float, speed: float, warn: bool, acting_player_): - super(position_, speed, warn, acting_player) +func progress(position_: float, speed: float, warn: bool, acting_players_: Array[Player]): + super(position_, speed, warn, acting_players) var knife: Node3D = board.get_node("Knife") - acting_player = acting_player_ - if not chopping.playing and speed != 0.: - chopping.play() - if acting_player != null: + if speed != 0.: + if not chopping.playing: chopping.play() + var players_who_stopped := G.unordered_array_difference(acting_players, acting_players_) + for p: Player in players_who_stopped: + if p != null: p.character.cutting = false + for p: Player in acting_players_: knife.visible = false - var acting_character: Character = acting_player.character - acting_character.cutting = true + p.character.cutting = true elif speed == 0: chopping.stop() knife.visible = true - if acting_player != null: - var acting_character: Character = acting_player.character - acting_character.cutting = false + for p: Player in acting_players: + p.character.cutting = false + acting_players = acting_players_ func finish(): super() - if is_instance_valid(acting_player): - var acting_character: Character = acting_player.character - acting_character.cutting = false + for p: Player in acting_players: + p.character.cutting = false board.get_node("Knife").visible = true chopping.stop() diff --git a/client/map/tiles/rolling_board.gd b/client/map/tiles/rolling_board.gd index 078897b1..fd118b72 100644 --- a/client/map/tiles/rolling_board.gd +++ b/client/map/tiles/rolling_board.gd @@ -18,7 +18,7 @@ extends CounterBase var board = load("res://map/tiles/rolling_board.tscn").instantiate() var rolling: AudioStreamPlayer3D = AudioStreamPlayer3D.new() -var acting_player +var acting_players: Array[Player] func _init(ctx: TileFactory.TileCC): super(ctx) @@ -27,29 +27,29 @@ func _init(ctx: TileFactory.TileCC): add_child(rolling) base.add_child(board) -func progress(position_: float, speed: float, warn: bool, acting_player_): - super(position_, speed, warn, acting_player) +func progress(position_: float, speed: float, warn: bool, acting_players_: Array[Player]): + super(position_, speed, warn, acting_players_) var pin: Node3D = board.get_node("RollingPin") - acting_player = acting_player_ - if not rolling.playing and speed != 0.: - rolling.play() - if acting_player != null: + if speed != 0.: + if not rolling.playing: rolling.play() + var players_who_stopped := G.unordered_array_difference(acting_players, acting_players_) + for p: Player in players_who_stopped: + if p != null: p.character.rolling = false + for p: Player in acting_players_: pin.visible = false - var acting_character: Character = acting_player.character - acting_character.rolling = true + p.character.rolling = true elif speed == 0: rolling.stop() pin.visible = true - if acting_player != null: - var acting_character: Character = acting_player.character - acting_character.rolling = false + for p: Player in acting_players: + p.character.rolling = false + acting_players = acting_players_ func finish(): super() - if is_instance_valid(acting_player): - var acting_character: Character = acting_player.character - acting_character.rolling = false + for p: Player in acting_players: + p.character.rolling = false board.get_node("RollingPin").visible = true rolling.stop() diff --git a/client/map/tiles/tile.gd b/client/map/tiles/tile.gd index 9d4d732e..27d791c3 100644 --- a/client/map/tiles/tile.gd +++ b/client/map/tiles/tile.gd @@ -57,7 +57,7 @@ static func interact_target() -> Vector3: func interact(): pass -func progress(position_: float, speed: float, warn: bool, _acting_player): +func progress(position_: float, speed: float, warn: bool, _acting_players: Array[Player]): if item != null: item.progress(position_, speed, warn) diff --git a/client/multiplayer.gd b/client/multiplayer.gd index e8747995..d635db41 100644 --- a/client/multiplayer.gd +++ b/client/multiplayer.gd @@ -19,7 +19,7 @@ extends Node signal packet(packet: Dictionary) signal connection_closed() -static var VERSION_MAJOR: int = 11 +static var VERSION_MAJOR: int = 12 static var VERSION_MINOR: int = 0 var connected := false |