164 lines
3.4 KiB
GDScript
164 lines
3.4 KiB
GDScript
class_name PlayingCard
|
|
extends Card
|
|
|
|
|
|
enum Suit {SPADE = 1, HEART = 2, DIAMOND = 3, CLUB = 4, NONE = 0}
|
|
enum Number {_2 = 2, _3 = 3, _4 = 4, _5 = 5, _6 = 6, _7 = 7, _8 = 8, _9 = 9, _10 = 10, _J = 11, _Q = 12, _K = 13, _A = 1, _OTHER = 0}
|
|
enum CardColor {BLACK = 1, RED = 2, NONE = 0}
|
|
|
|
|
|
var suit: Suit :
|
|
get():
|
|
return _get_suit_from_string(card_info["suit"])
|
|
var number: Number :
|
|
get():
|
|
return _get_number_from_string(card_info["value"])
|
|
var card_color: CardColor :
|
|
get():
|
|
match suit:
|
|
Suit.SPADE:
|
|
return CardColor.BLACK
|
|
Suit.HEART:
|
|
return CardColor.RED
|
|
Suit.DIAMOND:
|
|
return CardColor.RED
|
|
Suit.CLUB:
|
|
return CardColor.BLACK
|
|
_:
|
|
return CardColor.NONE
|
|
var is_stop_control := false
|
|
|
|
|
|
static func get_suit_as_string(_suit: Suit) -> String:
|
|
var suit_str: String
|
|
match _suit:
|
|
Suit.SPADE:
|
|
suit_str = "spade"
|
|
Suit.HEART:
|
|
suit_str = "heart"
|
|
Suit.DIAMOND:
|
|
suit_str = "diamond"
|
|
Suit.CLUB:
|
|
suit_str = "club"
|
|
_:
|
|
suit_str = "none"
|
|
return suit_str
|
|
|
|
|
|
static func get_number_as_string(_number: Number) -> String:
|
|
var number_str: String
|
|
match _number:
|
|
PlayingCard.Number._A:
|
|
number_str = "A"
|
|
PlayingCard.Number._2:
|
|
number_str = "2"
|
|
PlayingCard.Number._3:
|
|
number_str = "3"
|
|
PlayingCard.Number._4:
|
|
number_str = "4"
|
|
PlayingCard.Number._5:
|
|
number_str = "5"
|
|
PlayingCard.Number._6:
|
|
number_str = "6"
|
|
PlayingCard.Number._7:
|
|
number_str = "7"
|
|
PlayingCard.Number._8:
|
|
number_str = "8"
|
|
PlayingCard.Number._9:
|
|
number_str = "9"
|
|
PlayingCard.Number._10:
|
|
number_str = "10"
|
|
PlayingCard.Number._J:
|
|
number_str = "J"
|
|
PlayingCard.Number._Q:
|
|
number_str = "Q"
|
|
PlayingCard.Number._K:
|
|
number_str = "K"
|
|
PlayingCard.Number._OTHER:
|
|
number_str = "other"
|
|
return number_str
|
|
|
|
|
|
static func get_card_name(_suit: Suit, _number: Number) -> String:
|
|
var suit_str = get_suit_as_string(_suit)
|
|
var number_str = get_number_as_string(_number)
|
|
return suit_str + "_" + number_str
|
|
|
|
|
|
func _init() -> void:
|
|
hover_scale = 1.0
|
|
hover_rotation = 0.0
|
|
|
|
|
|
func is_next_number(target_card: PlayingCard) -> bool:
|
|
var current_number = int(number)
|
|
var target_number = int(target_card.number)
|
|
var next_number = (current_number % 13) + 1
|
|
return next_number == target_number
|
|
|
|
|
|
func is_different_color(other: PlayingCard) -> bool:
|
|
return card_color != other.card_color
|
|
|
|
|
|
func _get_suit_from_string(_str: String) -> Suit:
|
|
if _str == "spade":
|
|
return Suit.SPADE
|
|
elif _str == "heart":
|
|
return Suit.HEART
|
|
elif _str == "diamond":
|
|
return Suit.DIAMOND
|
|
elif _str == "club":
|
|
return Suit.CLUB
|
|
else:
|
|
return Suit.NONE
|
|
|
|
|
|
func _get_number_from_string(_str: String) -> Number:
|
|
if _str == "2":
|
|
return Number._2
|
|
elif _str == "3":
|
|
return Number._3
|
|
elif _str == "4":
|
|
return Number._4
|
|
elif _str == "5":
|
|
return Number._5
|
|
elif _str == "6":
|
|
return Number._6
|
|
elif _str == "7":
|
|
return Number._7
|
|
elif _str == "8":
|
|
return Number._8
|
|
elif _str == "9":
|
|
return Number._9
|
|
elif _str == "10":
|
|
return Number._10
|
|
elif _str == "J":
|
|
return Number._J
|
|
elif _str == "Q":
|
|
return Number._Q
|
|
elif _str == "K":
|
|
return Number._K
|
|
elif _str == "A":
|
|
return Number._A
|
|
else:
|
|
return Number._OTHER
|
|
|
|
|
|
func _on_mouse_enter() -> void:
|
|
if is_stop_control:
|
|
return
|
|
super._on_mouse_enter()
|
|
|
|
|
|
func _on_mouse_exit() -> void:
|
|
if is_stop_control:
|
|
return
|
|
super._on_mouse_exit()
|
|
|
|
|
|
func _on_gui_input(event: InputEvent) -> void:
|
|
if is_stop_control:
|
|
return
|
|
super._on_gui_input(event)
|