From 0692f76d0bae57c40ef88e5b6d9794acefa14fc6 Mon Sep 17 00:00:00 2001 From: betalars Date: Thu, 3 Oct 2024 01:12:24 +0200 Subject: [PATCH] add support to initialise and save board state to savegame --- src/logic-scenes/board/card-board.gd | 40 ++++++++++++++++++++++++++++ src/logic-scenes/board/card.gd | 3 +++ 2 files changed, 43 insertions(+) diff --git a/src/logic-scenes/board/card-board.gd b/src/logic-scenes/board/card-board.gd index 718cd6e..bd300ce 100644 --- a/src/logic-scenes/board/card-board.gd +++ b/src/logic-scenes/board/card-board.gd @@ -349,3 +349,43 @@ func find_first_free_card() -> int: func on_sticky_panel_cleared(): if current_sticky_note_id == sticky_note_container.get_child_count() - 1: current_sticky_note_id -= 1 + + +func get_save_dict() -> Dictionary: + var cards: Dictionary = {} + var stickies: Dictionary = {} + + for child in dropzone.get_children(): + if child is Card: + if child.has_sticky_note_attached(): + stickies[child.get_attached_sticky_note().name] = child.name + cards[child.name] = child.transform.origin + elif child is StickyNote: + cards[child.name] = child.transform.origin + + for child in sticky_note_container.get_children(): + if child is PostItPanel: + stickies[child.attached_sticky_note.name] = -1 + return { + "cards": cards, + "stickies": stickies + } + +func initialise_from_save(savegame: SaveGame): + var cards: Dictionary = savegame.board_state["cards"] + var stickies: Dictionary = savegame.board_state["stickies"] + + var card_pile = board_of_devs.get_cards_by_name_array(cards.keys() + (stickies.keys())) + + for card:Card in card_pile["cards"]: + add_card(card) + card.transform.origin = cards[card.name] + cards[card.name] = card + for sticky:StickyNote in card_pile["sticky_notes"]: + if stickies[sticky.name] == -1: + add_sticky_note(sticky) + if stickies[sticky.name] is String: + cards[stickies[sticky.name]].attach_sticky_note(sticky) + else: + insert_area(dropzone, sticky) + sticky.transform.origin = stickies[sticky.name] diff --git a/src/logic-scenes/board/card.gd b/src/logic-scenes/board/card.gd index bcf7720..8c61d37 100644 --- a/src/logic-scenes/board/card.gd +++ b/src/logic-scenes/board/card.gd @@ -171,6 +171,9 @@ func _move_card(): func has_sticky_note_attached() -> bool: return get_child(-1) is StickyNote +func get_attached_sticky_note() -> StickyNote: + return null if not has_sticky_note_attached() else get_child(-1) + func preview_sticky_note(sticky_note: StickyNote): sticky_note.reparent(self.get_parent()) sticky_note.owner = owner