From 40ccd28fb967e016985a3b1be84e66f399e3c4d0 Mon Sep 17 00:00:00 2001 From: CactiChameleon9 Date: Fri, 29 Jul 2022 20:49:32 +0100 Subject: [PATCH] Implement basic CardContainer --- Characters/Character.gd | 12 +++++ UI/CardContainer.gd | 114 ++++++---------------------------------- 2 files changed, 28 insertions(+), 98 deletions(-) diff --git a/Characters/Character.gd b/Characters/Character.gd index 700aab3..89a32f9 100644 --- a/Characters/Character.gd +++ b/Characters/Character.gd @@ -11,10 +11,20 @@ var map_position : Vector2 = Vector2.ZERO onready var target_position : Vector2 = position var moving : bool = false +var cards = [] setget ,get_cards + +func get_cards(): + for child in get_children(): + if "Card" in child.name: + cards.append(child) + + return cards + func level_change(new_level): # when leveing up restore health health = base_max_health * pow(level, 1.5) + level = new_level func _physics_process(delta): @@ -27,11 +37,13 @@ func _physics_process(delta): #TODO: Replace with tween magic position += (target_position - position)/2.5 + func take_damage(damage): health -= damage if health <= 0: die() + func die(): #Animation here queue_free() diff --git a/UI/CardContainer.gd b/UI/CardContainer.gd index 31d9e5a..781bf53 100644 --- a/UI/CardContainer.gd +++ b/UI/CardContainer.gd @@ -1,106 +1,24 @@ extends Control -signal return_dice(dice_number) -signal do_movement(movement_range) -signal do_damage(damage, damage_range) -signal do_effect(effect, effect_range) +const card_view_scene = preload("res://UI/CardView.tscn") -const card = preload("res://UI/Card.tscn") -const card_db_string = "res://Assets/CardDB/%s.tres" +var character : Character = Character.new() setget update_cards_shown +var card_views = [] -var selected : bool = false -var hovering_card = null - -var current_cards = [] - -var currently_holding_dice = null - - -func emit_return_dice(dice_number): - emit_signal("return_dice", dice_number) -func emit_do_movement(movement_range): - emit_signal("do_movement", movement_range) -func emit_do_damage(damage, damage_range): - emit_signal("do_damage", damage, damage_range) -func emit_do_effect(effect, effect_range): - emit_signal("do_effect", effect, effect_range) - - -func set_currently_holding_dice(dice_number : int): - currently_holding_dice = dice_number - - -func remove_card(card): - var card_index = current_cards.find(card) - current_cards.remove(card_index) - - -func _physics_process(delta): +func update_cards_shown(new_character = null): - # no keyboard input if not selected - if not selected: - hovering_card = null - return + # allow the update card shown function to work with and without setget + if new_character != null: + character = new_character - # if selected card is null, add a value - if not hovering_card: - hovering_card = 0 + # remove the old cards + for card_view in card_views: + yield(card_view.card_view_remove(), "completed") - # move the selection forward or backward the list depending on input - if (Input.is_action_just_pressed("ui_down") or - Input.is_action_just_pressed("ui_right")): - - current_cards[hovering_card].hovering_dice = null - - hovering_card += 1 - if hovering_card >= len(current_cards): - hovering_card = 0 - - if (Input.is_action_just_pressed("ui_up") or - Input.is_action_just_pressed("ui_left")): - - current_cards[hovering_card].hovering_dice = null - - hovering_card -= 1 - if hovering_card < 0: - hovering_card = len(current_cards) -1 - - # show the dice over the card if hovering - current_cards[hovering_card].hovering_dice = currently_holding_dice - - #if the enter key is pressed, input the dice into the card - if Input.is_action_just_pressed("ui_accept"): - current_cards[hovering_card].hovering_dice = null - current_cards[hovering_card].dice_inputted(currently_holding_dice) - hovering_card = 0 - selected = false - - -func draw_card(specific_card : String = ""): - # make a new card instance and add it to the grid container - var new_card = card.instance() - - # check if a specific card data exists - var card_data_check = File.new() - var card_data_exists : bool = card_data_check.file_exists(card_db_string % specific_card) - - # if a specifc card choosen, make new card that type - if card_data_exists: - new_card.card_info = load(card_db_string % specific_card) - else: #no card choosen, pick default - new_card.card_info = load(card_db_string % "Default") - - $Margin/HBox.add_child(new_card) - - # connect new_card.x signal to self.x - new_card.connect("return_dice", self, "emit_return_dice") - new_card.connect("do_movement", self, "emit_do_movement") - new_card.connect("do_damage", self, "emit_do_damage") - new_card.connect("do_effect", self, "emit_do_effect") - - # connect the signal remove card signal - new_card.connect("card_removed", self, "remove_card") - - # add the current card to the list of card - current_cards.append(new_card) + # add cards the new cards from the character + for card in character.cards: + var new_card_view = card_view_scene.instance() + new_card_view.card = card + $Margin/HBox.add_child(new_card_view) + card_views.append(new_card_view)