Compare commits

..

No commits in common. "af58e4438c8a13d8bc8658e70038b4e9565bb811" and "c1d63c214a14a83b55c6cf9e3bebc440b3189ffc" have entirely different histories.

6 changed files with 107 additions and 91 deletions

View file

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

116
Deck.gd
View file

@ -1,74 +1,83 @@
extends Node2D extends Node2D
const CardValue = preload("res://CardValue.gd") var HanafudaCard = preload("res://HanafudaCard.tscn")
onready var cards = [ onready var cards = [
CardValue.new(Enums.Month.JANUARY, Enums.Type.LIGHT), HanafudaCard.instance().init_card(Enums.Month.JANUARY, Enums.Type.LIGHT),
CardValue.new(Enums.Month.JANUARY, Enums.Type.RIBBON), HanafudaCard.instance().init_card(Enums.Month.JANUARY, Enums.Type.RIBBON),
CardValue.new(Enums.Month.JANUARY, Enums.Type.SCRAP_1), HanafudaCard.instance().init_card(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.SCRAP_2),
CardValue.new(Enums.Month.FEBRUARY, Enums.Type.ANIMAL), HanafudaCard.instance().init_card(Enums.Month.FEBRUARY, Enums.Type.ANIMAL),
CardValue.new(Enums.Month.FEBRUARY, Enums.Type.RIBBON), HanafudaCard.instance().init_card(Enums.Month.FEBRUARY, Enums.Type.RIBBON),
CardValue.new(Enums.Month.FEBRUARY, Enums.Type.SCRAP_1), HanafudaCard.instance().init_card(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.SCRAP_2),
CardValue.new(Enums.Month.MARCH, Enums.Type.LIGHT), HanafudaCard.instance().init_card(Enums.Month.MARCH, Enums.Type.LIGHT),
CardValue.new(Enums.Month.MARCH, Enums.Type.RIBBON), HanafudaCard.instance().init_card(Enums.Month.MARCH, Enums.Type.RIBBON),
CardValue.new(Enums.Month.MARCH, Enums.Type.SCRAP_1), HanafudaCard.instance().init_card(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.SCRAP_2),
CardValue.new(Enums.Month.APRIL, Enums.Type.ANIMAL), HanafudaCard.instance().init_card(Enums.Month.APRIL, Enums.Type.ANIMAL),
CardValue.new(Enums.Month.APRIL, Enums.Type.RIBBON), HanafudaCard.instance().init_card(Enums.Month.APRIL, Enums.Type.RIBBON),
CardValue.new(Enums.Month.APRIL, Enums.Type.SCRAP_1), HanafudaCard.instance().init_card(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.SCRAP_2),
CardValue.new(Enums.Month.MAY, Enums.Type.ANIMAL), HanafudaCard.instance().init_card(Enums.Month.MAY, Enums.Type.ANIMAL),
CardValue.new(Enums.Month.MAY, Enums.Type.RIBBON), HanafudaCard.instance().init_card(Enums.Month.MAY, Enums.Type.RIBBON),
CardValue.new(Enums.Month.MAY, Enums.Type.SCRAP_1), HanafudaCard.instance().init_card(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.SCRAP_2),
CardValue.new(Enums.Month.JUNE, Enums.Type.ANIMAL), HanafudaCard.instance().init_card(Enums.Month.JUNE, Enums.Type.ANIMAL),
CardValue.new(Enums.Month.JUNE, Enums.Type.RIBBON), HanafudaCard.instance().init_card(Enums.Month.JUNE, Enums.Type.RIBBON),
CardValue.new(Enums.Month.JUNE, Enums.Type.SCRAP_1), HanafudaCard.instance().init_card(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.SCRAP_2),
CardValue.new(Enums.Month.JULY, Enums.Type.ANIMAL), HanafudaCard.instance().init_card(Enums.Month.JULY, Enums.Type.ANIMAL),
CardValue.new(Enums.Month.JULY, Enums.Type.RIBBON), HanafudaCard.instance().init_card(Enums.Month.JULY, Enums.Type.RIBBON),
CardValue.new(Enums.Month.JULY, Enums.Type.SCRAP_1), HanafudaCard.instance().init_card(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.SCRAP_2),
CardValue.new(Enums.Month.AUGUST, Enums.Type.LIGHT), HanafudaCard.instance().init_card(Enums.Month.AUGUST, Enums.Type.LIGHT),
CardValue.new(Enums.Month.AUGUST, Enums.Type.ANIMAL), HanafudaCard.instance().init_card(Enums.Month.AUGUST, Enums.Type.ANIMAL),
CardValue.new(Enums.Month.AUGUST, Enums.Type.SCRAP_1), HanafudaCard.instance().init_card(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.SCRAP_2),
CardValue.new(Enums.Month.SEPTEMBER, Enums.Type.ANIMAL), HanafudaCard.instance().init_card(Enums.Month.SEPTEMBER, Enums.Type.ANIMAL),
CardValue.new(Enums.Month.SEPTEMBER, Enums.Type.RIBBON), HanafudaCard.instance().init_card(Enums.Month.SEPTEMBER, Enums.Type.RIBBON),
CardValue.new(Enums.Month.SEPTEMBER, Enums.Type.SCRAP_1), HanafudaCard.instance().init_card(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.SCRAP_2),
CardValue.new(Enums.Month.OCTOBER, Enums.Type.ANIMAL), HanafudaCard.instance().init_card(Enums.Month.OCTOBER, Enums.Type.ANIMAL),
CardValue.new(Enums.Month.OCTOBER, Enums.Type.RIBBON), HanafudaCard.instance().init_card(Enums.Month.OCTOBER, Enums.Type.RIBBON),
CardValue.new(Enums.Month.OCTOBER, Enums.Type.SCRAP_1), HanafudaCard.instance().init_card(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.SCRAP_2),
CardValue.new(Enums.Month.NOVEMBER, Enums.Type.LIGHT), HanafudaCard.instance().init_card(Enums.Month.NOVEMBER, Enums.Type.LIGHT),
CardValue.new(Enums.Month.NOVEMBER, Enums.Type.ANIMAL), HanafudaCard.instance().init_card(Enums.Month.NOVEMBER, Enums.Type.ANIMAL),
CardValue.new(Enums.Month.NOVEMBER, Enums.Type.RIBBON), HanafudaCard.instance().init_card(Enums.Month.NOVEMBER, Enums.Type.RIBBON),
CardValue.new(Enums.Month.NOVEMBER, Enums.Type.SCRAP_1), HanafudaCard.instance().init_card(Enums.Month.NOVEMBER, Enums.Type.SCRAP_1),
CardValue.new(Enums.Month.DECEMBER, Enums.Type.LIGHT), HanafudaCard.instance().init_card(Enums.Month.DECEMBER, Enums.Type.LIGHT),
CardValue.new(Enums.Month.DECEMBER, Enums.Type.SCRAP_1), HanafudaCard.instance().init_card(Enums.Month.DECEMBER, Enums.Type.SCRAP_1),
CardValue.new(Enums.Month.DECEMBER, Enums.Type.SCRAP_2), HanafudaCard.instance().init_card(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.SCRAP_3),
] ]
var card_order = [] var card_order = []
var next_to_draw = 0 var next_to_draw = 0
# Called when the node enters the scene tree for the first time.
func _ready() -> void: func _ready() -> void:
init_card_order() 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: func init_card_order() -> void:
card_order.resize(cards.size()) card_order.resize(cards.size())
@ -77,9 +86,14 @@ func init_card_order() -> void:
card_order.shuffle() card_order.shuffle()
next_to_draw = 0 next_to_draw = 0
func draw_card() -> CardValue: func draw_card() -> int:
if next_to_draw >= card_order.size(): if next_to_draw >= card_order.size():
return null return -1
var card_id = card_order[next_to_draw] var card_id = card_order[next_to_draw]
next_to_draw += 1 next_to_draw += 1
return card_id return card_id
func card(index: int) -> HanafudaCard:
if index == -1:
printerr("Invalid card index")
return cards[index]

View file

@ -1,30 +1,27 @@
tool tool
class_name HanafudaCard
extends Node2D extends Node2D
class_name HanafudaCard
const CardValue = preload("res://CardValue.gd")
export var revealed: bool = true setget reveal export var revealed: bool = true setget reveal
export(Enums.Month) var month: int setget _set_card_month export(Enums.Month) var month: int
export(Enums.Type) var type: int setget _set_card_type export(Enums.Type) var type: int
onready var value = CardValue.new(Enums.Month.JANUARY, Enums.Type.LIGHT)
onready var _is_ready := true onready var _is_ready := true
# Called when the node enters the scene tree for the first time. # Called when the node enters the scene tree for the first time.
func _ready() -> void: func _ready() -> void:
var texture_path := card_texture() var texture_path := card_texture()
$Frontside.texture = load(texture_path) $Frontside.texture = load(texture_path)
reveal(revealed) reveal(revealed)
func init_card(value_: CardValue) -> HanafudaCard: func init_card(month_: int, type_: int) -> HanafudaCard:
value = value_ month = month_
type = type_
return self return self
func card_texture() -> String: func card_texture() -> String:
var m := "" var m := ""
match value.month: match month:
Enums.Month.JANUARY: m = "January" Enums.Month.JANUARY: m = "January"
Enums.Month.FEBRUARY: m = "February" Enums.Month.FEBRUARY: m = "February"
Enums.Month.MARCH: m = "March" Enums.Month.MARCH: m = "March"
@ -39,7 +36,7 @@ func card_texture() -> String:
Enums.Month.DECEMBER: m = "December" Enums.Month.DECEMBER: m = "December"
var t := "" var t := ""
match value.type: match type:
Enums.Type.LIGHT: t = "Hikari" Enums.Type.LIGHT: t = "Hikari"
Enums.Type.ANIMAL: t = "Tane" Enums.Type.ANIMAL: t = "Tane"
Enums.Type.RIBBON: t = "Tanzaku" Enums.Type.RIBBON: t = "Tanzaku"
@ -62,9 +59,3 @@ func reveal(new_reveal: bool) -> void:
else: else:
$Frontside.hide() $Frontside.hide()
$Backside.show() $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

41
Main.gd
View file

@ -1,29 +1,54 @@
extends Node extends Node
onready var HanafudaCard = preload("res://HanafudaCard.tscn") signal state_completed
var state_stack = []
onready var deck = $Deck onready var deck = $Deck
onready var tween = $Tween onready var tween = $Tween
func _ready(): 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() 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", tween.interpolate_property(card_1, "position",
Vector2(0, 0), Vector2(100, 100), 3, Vector2(0, 0), Vector2(100, 100), 3,
Tween.TRANS_LINEAR, Tween.EASE_IN_OUT) Tween.TRANS_LINEAR, Tween.EASE_IN_OUT)
yield(tween, "tween_all_completed")
yield(tween, "tween_completed")
# var card_2 = $Deck.card($Deck.draw_card()) # var card_2 = $Deck.card($Deck.draw_card())
# card_2.show() # card_2.show()
# tween.interpolate_property(card_2, "position", # tween.interpolate_property(card_2, "position",
# Vector2(0, 0), Vector2(-100, 100), 0.4, # Vector2(0, 0), Vector2(-100, 100), 0.4,
# Tween.TRANS_LINEAR, Tween.EASE_IN_OUT) # Tween.TRANS_LINEAR, Tween.EASE_IN_OUT)
#
yield(tween, "tween_all_completed") # yield(tween, "tween_all_completed")
print("update oya") print("update oya")
emit_signal("state_completed")
func update_game():
print("update game")
emit_signal("state_completed")

View file

@ -18,6 +18,7 @@ __meta__ = {
[node name="HanafudaCard" parent="." instance=ExtResource( 1 )] [node name="HanafudaCard" parent="." instance=ExtResource( 1 )]
visible = false visible = false
position = Vector2( 205, 447 ) position = Vector2( 205, 447 )
month = 2
[node name="Deck" type="Node2D" parent="."] [node name="Deck" type="Node2D" parent="."]
position = Vector2( 293, 412 ) position = Vector2( 293, 412 )

View file

@ -9,18 +9,12 @@
config_version=4 config_version=4
_global_script_classes=[ { _global_script_classes=[ {
"base": "Node",
"class": "CardValue",
"language": "GDScript",
"path": "res://CardValue.gd"
}, {
"base": "Node2D", "base": "Node2D",
"class": "HanafudaCard", "class": "HanafudaCard",
"language": "GDScript", "language": "GDScript",
"path": "res://HanafudaCard.gd" "path": "res://HanafudaCard.gd"
} ] } ]
_global_script_class_icons={ _global_script_class_icons={
"CardValue": "",
"HanafudaCard": "" "HanafudaCard": ""
} }