diff --git a/CardValue.gd b/CardValue.gd deleted file mode 100644 index 0bc64cb..0000000 --- a/CardValue.gd +++ /dev/null @@ -1,9 +0,0 @@ -class_name CardValue -extends Node - -var month: int -var type: int - -func _init(month: int, type: int): - self.month = month - self.type = type diff --git a/Deck.gd b/Deck.gd index a4a9a88..e41bd55 100644 --- a/Deck.gd +++ b/Deck.gd @@ -1,74 +1,83 @@ extends Node2D -const CardValue = preload("res://CardValue.gd") +var HanafudaCard = preload("res://HanafudaCard.tscn") onready var cards = [ - CardValue.new(Enums.Month.JANUARY, Enums.Type.LIGHT), - CardValue.new(Enums.Month.JANUARY, Enums.Type.RIBBON), - CardValue.new(Enums.Month.JANUARY, Enums.Type.SCRAP_1), - CardValue.new(Enums.Month.JANUARY, Enums.Type.SCRAP_2), + HanafudaCard.instance().init_card(Enums.Month.JANUARY, Enums.Type.LIGHT), + HanafudaCard.instance().init_card(Enums.Month.JANUARY, Enums.Type.RIBBON), + HanafudaCard.instance().init_card(Enums.Month.JANUARY, Enums.Type.SCRAP_1), + HanafudaCard.instance().init_card(Enums.Month.JANUARY, Enums.Type.SCRAP_2), - CardValue.new(Enums.Month.FEBRUARY, Enums.Type.ANIMAL), - CardValue.new(Enums.Month.FEBRUARY, Enums.Type.RIBBON), - CardValue.new(Enums.Month.FEBRUARY, Enums.Type.SCRAP_1), - CardValue.new(Enums.Month.FEBRUARY, Enums.Type.SCRAP_2), + HanafudaCard.instance().init_card(Enums.Month.FEBRUARY, Enums.Type.ANIMAL), + HanafudaCard.instance().init_card(Enums.Month.FEBRUARY, Enums.Type.RIBBON), + HanafudaCard.instance().init_card(Enums.Month.FEBRUARY, Enums.Type.SCRAP_1), + HanafudaCard.instance().init_card(Enums.Month.FEBRUARY, Enums.Type.SCRAP_2), - CardValue.new(Enums.Month.MARCH, Enums.Type.LIGHT), - CardValue.new(Enums.Month.MARCH, Enums.Type.RIBBON), - CardValue.new(Enums.Month.MARCH, Enums.Type.SCRAP_1), - CardValue.new(Enums.Month.MARCH, Enums.Type.SCRAP_2), + HanafudaCard.instance().init_card(Enums.Month.MARCH, Enums.Type.LIGHT), + HanafudaCard.instance().init_card(Enums.Month.MARCH, Enums.Type.RIBBON), + HanafudaCard.instance().init_card(Enums.Month.MARCH, Enums.Type.SCRAP_1), + HanafudaCard.instance().init_card(Enums.Month.MARCH, Enums.Type.SCRAP_2), - CardValue.new(Enums.Month.APRIL, Enums.Type.ANIMAL), - CardValue.new(Enums.Month.APRIL, Enums.Type.RIBBON), - CardValue.new(Enums.Month.APRIL, Enums.Type.SCRAP_1), - CardValue.new(Enums.Month.APRIL, Enums.Type.SCRAP_2), + HanafudaCard.instance().init_card(Enums.Month.APRIL, Enums.Type.ANIMAL), + HanafudaCard.instance().init_card(Enums.Month.APRIL, Enums.Type.RIBBON), + HanafudaCard.instance().init_card(Enums.Month.APRIL, Enums.Type.SCRAP_1), + HanafudaCard.instance().init_card(Enums.Month.APRIL, Enums.Type.SCRAP_2), - CardValue.new(Enums.Month.MAY, Enums.Type.ANIMAL), - CardValue.new(Enums.Month.MAY, Enums.Type.RIBBON), - CardValue.new(Enums.Month.MAY, Enums.Type.SCRAP_1), - CardValue.new(Enums.Month.MAY, Enums.Type.SCRAP_2), + HanafudaCard.instance().init_card(Enums.Month.MAY, Enums.Type.ANIMAL), + HanafudaCard.instance().init_card(Enums.Month.MAY, Enums.Type.RIBBON), + HanafudaCard.instance().init_card(Enums.Month.MAY, Enums.Type.SCRAP_1), + HanafudaCard.instance().init_card(Enums.Month.MAY, Enums.Type.SCRAP_2), - CardValue.new(Enums.Month.JUNE, Enums.Type.ANIMAL), - CardValue.new(Enums.Month.JUNE, Enums.Type.RIBBON), - CardValue.new(Enums.Month.JUNE, Enums.Type.SCRAP_1), - CardValue.new(Enums.Month.JUNE, Enums.Type.SCRAP_2), + HanafudaCard.instance().init_card(Enums.Month.JUNE, Enums.Type.ANIMAL), + HanafudaCard.instance().init_card(Enums.Month.JUNE, Enums.Type.RIBBON), + HanafudaCard.instance().init_card(Enums.Month.JUNE, Enums.Type.SCRAP_1), + HanafudaCard.instance().init_card(Enums.Month.JUNE, Enums.Type.SCRAP_2), - CardValue.new(Enums.Month.JULY, Enums.Type.ANIMAL), - CardValue.new(Enums.Month.JULY, Enums.Type.RIBBON), - CardValue.new(Enums.Month.JULY, Enums.Type.SCRAP_1), - CardValue.new(Enums.Month.JULY, Enums.Type.SCRAP_2), + HanafudaCard.instance().init_card(Enums.Month.JULY, Enums.Type.ANIMAL), + HanafudaCard.instance().init_card(Enums.Month.JULY, Enums.Type.RIBBON), + HanafudaCard.instance().init_card(Enums.Month.JULY, Enums.Type.SCRAP_1), + HanafudaCard.instance().init_card(Enums.Month.JULY, Enums.Type.SCRAP_2), - CardValue.new(Enums.Month.AUGUST, Enums.Type.LIGHT), - CardValue.new(Enums.Month.AUGUST, Enums.Type.ANIMAL), - CardValue.new(Enums.Month.AUGUST, Enums.Type.SCRAP_1), - CardValue.new(Enums.Month.AUGUST, Enums.Type.SCRAP_2), + HanafudaCard.instance().init_card(Enums.Month.AUGUST, Enums.Type.LIGHT), + HanafudaCard.instance().init_card(Enums.Month.AUGUST, Enums.Type.ANIMAL), + HanafudaCard.instance().init_card(Enums.Month.AUGUST, Enums.Type.SCRAP_1), + HanafudaCard.instance().init_card(Enums.Month.AUGUST, Enums.Type.SCRAP_2), - CardValue.new(Enums.Month.SEPTEMBER, Enums.Type.ANIMAL), - CardValue.new(Enums.Month.SEPTEMBER, Enums.Type.RIBBON), - CardValue.new(Enums.Month.SEPTEMBER, Enums.Type.SCRAP_1), - CardValue.new(Enums.Month.SEPTEMBER, Enums.Type.SCRAP_2), + HanafudaCard.instance().init_card(Enums.Month.SEPTEMBER, Enums.Type.ANIMAL), + HanafudaCard.instance().init_card(Enums.Month.SEPTEMBER, Enums.Type.RIBBON), + HanafudaCard.instance().init_card(Enums.Month.SEPTEMBER, Enums.Type.SCRAP_1), + HanafudaCard.instance().init_card(Enums.Month.SEPTEMBER, Enums.Type.SCRAP_2), - CardValue.new(Enums.Month.OCTOBER, Enums.Type.ANIMAL), - CardValue.new(Enums.Month.OCTOBER, Enums.Type.RIBBON), - CardValue.new(Enums.Month.OCTOBER, Enums.Type.SCRAP_1), - CardValue.new(Enums.Month.OCTOBER, Enums.Type.SCRAP_2), + HanafudaCard.instance().init_card(Enums.Month.OCTOBER, Enums.Type.ANIMAL), + HanafudaCard.instance().init_card(Enums.Month.OCTOBER, Enums.Type.RIBBON), + HanafudaCard.instance().init_card(Enums.Month.OCTOBER, Enums.Type.SCRAP_1), + HanafudaCard.instance().init_card(Enums.Month.OCTOBER, Enums.Type.SCRAP_2), - CardValue.new(Enums.Month.NOVEMBER, Enums.Type.LIGHT), - CardValue.new(Enums.Month.NOVEMBER, Enums.Type.ANIMAL), - CardValue.new(Enums.Month.NOVEMBER, Enums.Type.RIBBON), - CardValue.new(Enums.Month.NOVEMBER, Enums.Type.SCRAP_1), + HanafudaCard.instance().init_card(Enums.Month.NOVEMBER, Enums.Type.LIGHT), + HanafudaCard.instance().init_card(Enums.Month.NOVEMBER, Enums.Type.ANIMAL), + HanafudaCard.instance().init_card(Enums.Month.NOVEMBER, Enums.Type.RIBBON), + HanafudaCard.instance().init_card(Enums.Month.NOVEMBER, Enums.Type.SCRAP_1), - CardValue.new(Enums.Month.DECEMBER, Enums.Type.LIGHT), - CardValue.new(Enums.Month.DECEMBER, Enums.Type.SCRAP_1), - CardValue.new(Enums.Month.DECEMBER, Enums.Type.SCRAP_2), - CardValue.new(Enums.Month.DECEMBER, Enums.Type.SCRAP_3), + HanafudaCard.instance().init_card(Enums.Month.DECEMBER, Enums.Type.LIGHT), + HanafudaCard.instance().init_card(Enums.Month.DECEMBER, Enums.Type.SCRAP_1), + HanafudaCard.instance().init_card(Enums.Month.DECEMBER, Enums.Type.SCRAP_2), + HanafudaCard.instance().init_card(Enums.Month.DECEMBER, Enums.Type.SCRAP_3), ] var card_order = [] var next_to_draw = 0 +# Called when the node enters the scene tree for the first time. func _ready() -> void: init_card_order() + for c in cards: + add_child(c) + c.hide() + + + var card: HanafudaCard = cards[0] + card.show() + card.reveal(false) func init_card_order() -> void: card_order.resize(cards.size()) @@ -77,9 +86,14 @@ func init_card_order() -> void: card_order.shuffle() next_to_draw = 0 -func draw_card() -> CardValue: +func draw_card() -> int: if next_to_draw >= card_order.size(): - return null + return -1 var card_id = card_order[next_to_draw] next_to_draw += 1 return card_id + +func card(index: int) -> HanafudaCard: + if index == -1: + printerr("Invalid card index") + return cards[index] diff --git a/HanafudaCard.gd b/HanafudaCard.gd index 770031e..aab743a 100644 --- a/HanafudaCard.gd +++ b/HanafudaCard.gd @@ -1,30 +1,27 @@ tool -class_name HanafudaCard extends Node2D - -const CardValue = preload("res://CardValue.gd") +class_name HanafudaCard export var revealed: bool = true setget reveal -export(Enums.Month) var month: int setget _set_card_month -export(Enums.Type) var type: int setget _set_card_type +export(Enums.Month) var month: int +export(Enums.Type) var type: int -onready var value = CardValue.new(Enums.Month.JANUARY, Enums.Type.LIGHT) onready var _is_ready := true # Called when the node enters the scene tree for the first time. func _ready() -> void: - var texture_path := card_texture() $Frontside.texture = load(texture_path) reveal(revealed) -func init_card(value_: CardValue) -> HanafudaCard: - value = value_ +func init_card(month_: int, type_: int) -> HanafudaCard: + month = month_ + type = type_ return self func card_texture() -> String: var m := "" - match value.month: + match month: Enums.Month.JANUARY: m = "January" Enums.Month.FEBRUARY: m = "February" Enums.Month.MARCH: m = "March" @@ -39,7 +36,7 @@ func card_texture() -> String: Enums.Month.DECEMBER: m = "December" var t := "" - match value.type: + match type: Enums.Type.LIGHT: t = "Hikari" Enums.Type.ANIMAL: t = "Tane" Enums.Type.RIBBON: t = "Tanzaku" @@ -62,9 +59,3 @@ func reveal(new_reveal: bool) -> void: else: $Frontside.hide() $Backside.show() - -func _set_card_month(new_month: int) -> void: - value.month = new_month - -func _set_card_type(new_type: int) -> void: - value.type = new_type diff --git a/Main.gd b/Main.gd index 9f8deec..0a2154e 100644 --- a/Main.gd +++ b/Main.gd @@ -1,29 +1,54 @@ extends Node -onready var HanafudaCard = preload("res://HanafudaCard.tscn") +signal state_completed + +var state_stack = [] onready var deck = $Deck onready var tween = $Tween func _ready(): - var dealer = oya() + state_stack.push_back(funcref(self, "update_game")) + state_stack.push_back(funcref(self, "update_oya")) + +func _process(delta): +# print("Main::_process()") + if state_stack.empty(): + return + + var state = state_stack.pop_back() +# print(state) + if state == null: + return + + state.call_func() + yield(self, "state_completed") +# state_stack.pop_back() + +func update_oya(): + var card_1 = $Deck.card($Deck.draw_card()) + card_1.show() -func oya(): tween.start() - var card_1 = HanafudaCard.instance().init_card($Deck.draw_card()) - add_child(card_1) -# card_1.show() tween.interpolate_property(card_1, "position", Vector2(0, 0), Vector2(100, 100), 3, Tween.TRANS_LINEAR, Tween.EASE_IN_OUT) + yield(tween, "tween_all_completed") + yield(tween, "tween_completed") + # var card_2 = $Deck.card($Deck.draw_card()) # card_2.show() # tween.interpolate_property(card_2, "position", # Vector2(0, 0), Vector2(-100, 100), 0.4, # Tween.TRANS_LINEAR, Tween.EASE_IN_OUT) - - yield(tween, "tween_all_completed") +# +# yield(tween, "tween_all_completed") print("update oya") + emit_signal("state_completed") + +func update_game(): + print("update game") + emit_signal("state_completed") diff --git a/Main.tscn b/Main.tscn index 47f8457..10393bf 100644 --- a/Main.tscn +++ b/Main.tscn @@ -18,6 +18,7 @@ __meta__ = { [node name="HanafudaCard" parent="." instance=ExtResource( 1 )] visible = false position = Vector2( 205, 447 ) +month = 2 [node name="Deck" type="Node2D" parent="."] position = Vector2( 293, 412 ) diff --git a/project.godot b/project.godot index 69b62d7..259cc44 100644 --- a/project.godot +++ b/project.godot @@ -9,18 +9,12 @@ config_version=4 _global_script_classes=[ { -"base": "Node", -"class": "CardValue", -"language": "GDScript", -"path": "res://CardValue.gd" -}, { "base": "Node2D", "class": "HanafudaCard", "language": "GDScript", "path": "res://HanafudaCard.gd" } ] _global_script_class_icons={ -"CardValue": "", "HanafudaCard": "" }