Skip to content

Commit

Permalink
refactor(card_base)!: 重构 Card Base 代码。
Browse files Browse the repository at this point in the history
- 删除 card_put 信号。暂不提供替代方案。

- 删除在新逻辑中不使用的函数和变量。

- 将变量 var mouse_on: bool 重命名为 is_mouse_on。

- 重写卡牌回到 Card Base 的逻辑:监听子节点 Cards 的
  child_exiting_tree(node: Node) 信号,当 node 为 Card 时令计数加一。
  • Loading branch information
cutekibry committed Feb 13, 2024
1 parent 3f750e8 commit 6b9f1ee
Show file tree
Hide file tree
Showing 2 changed files with 62 additions and 59 deletions.
120 changes: 61 additions & 59 deletions objects/card_base/card_base.gd
Original file line number Diff line number Diff line change
Expand Up @@ -2,78 +2,64 @@ extends Area2D

class_name CardBase



const CardScn := preload("res://objects/card/card.tscn")
const FADE_MOVE_AMOUNT := 70

signal card_put


var fade_flag := false
var mouse_on := false
var fade_flag := false ## 是否进行淡出处理。
var is_mouse_on := false ## 鼠标是否在它的上面。


enum { DEFAULT, HIGHLIGHT, DISABLED}
var available_stat := DEFAULT
var available_stat := DEFAULT ## 当前状态。


var card_count = 0 ## 剩余卡牌数量。

var card_count = 0
var new_card_node: Card

## 更新显示剩余卡牌数量的 Label。
func update_card_count_label():
$Label.text = str(card_count)
$Label.text = str(self.card_count)

func _ready():
update_card_count_label()

## 设置剩余卡牌数量为 value。
func set_card_count(value):
card_count = value
if card_count > 0:
if mouse_on:
available_stat = HIGHLIGHT
assert(value >= 0, "void CardBase::set_card_count(value: int) should only be called with value >= 0.")

self.card_count = value
if self.card_count > 0:
if self.is_mouse_on:
self.available_stat = HIGHLIGHT
else:
available_stat = DEFAULT
self.available_stat = DEFAULT
else:
available_stat = DISABLED
self.available_stat = DISABLED
update_card_count_label()


## 生成一张 Card。
##
## 当剩余卡牌数量小于等于 0 时不会生成。
func draw_card():
if card_count <= 0:
if self.card_count <= 0:
return
set_card_count(card_count - 1)

set_card_count(self.card_count - 1)
$SFXPickUp.play()
Input.set_default_cursor_shape(Input.CURSOR_DRAG)
new_card_node = CardScn.instantiate()

var new_card_node: Card = CardScn.instantiate()
new_card_node.set_word($Word.get_word())
new_card_node.set_position(position)
new_card_node.set_position(self.position)

$Cards.add_child(new_card_node)
new_card_node.back_to_origin_global_position.connect(_on_card_back.bind(new_card_node))
new_card_node.put.connect(_on_card_put)

new_card_node._on_mouse_pressed()
# prints("new_card_node", new_card_node.name)
new_card_node.pick_up()

func _on_card_back(card: Card):
set_card_count(card_count + 1)
# prints("new_card_node", card.name, "has been removed")
$Cards.remove_child(card)
card.queue_free()
#print("card_count = ", card_count)

func _on_area_entered(area: Card):
#prints("Entered", name)
if area.get_word() == $Word.get_word():
area.on_card_base_entered(position)

func _on_area_exited(area: Card):
#prints("Exited", name)
if area.get_word() == $Word.get_word():
area.on_card_base_exited()

func _input_event(_viewport: Object, event: InputEvent, _shape_idx: int) -> void:
if event is InputEventMouseButton:
if event.is_pressed() and event.button_index == MOUSE_BUTTON_LEFT:
draw_card()

## 设置字符为 e,并更新卡背颜色。
func set_word(e: String) -> void:
$Word.set_word(e)

Expand All @@ -82,14 +68,15 @@ func set_word(e: String) -> void:
ImageLib.update_animation($CardBaseSprite, 1, 1, 1, "res://objects/card_base/card_base%d.png",
ImageLib.PALETTE["lightblue"], ImageLib.PALETTE[card_type])


## 获取字符。
func get_word() -> String:
return $Word.get_word()

func _on_card_put():
emit_signal("card_put")

## 进行通关后的处理。
func set_victory() -> void:
# start_fade
# 开始淡出
fade_flag = true
$FadeTimer.start()
$CollisionShape2D.set_deferred("disabled", true)
Expand All @@ -98,31 +85,46 @@ func set_victory() -> void:
for card: Card in $Cards.get_children():
card.set_victory(true)

func reset_all_card_position():
for card: Card in $Cards.get_children():
card.reset_position()


func _ready():
update_card_count_label()


func _process(_delta) -> void:
var offset := 0.0
if fade_flag:
var offset = $FadeTimer.time_left / $FadeTimer.wait_time
offset = (1 - pow(offset, 1.5)) * FADE_MOVE_AMOUNT
$CardBaseSprite.position.y = offset
$HighlightSprite.position.y = offset
$DisabledSprite.position.y = offset
$Word.position.y = offset
var progress: float = $FadeTimer.time_left / $FadeTimer.wait_time
offset = (1 - pow(progress, 1.5)) * FADE_MOVE_AMOUNT
$CardBaseSprite.position.y = offset
$HighlightSprite.position.y = offset
$DisabledSprite.position.y = offset
$Word.position.y = offset

$HighlightSprite.visible = (available_stat == HIGHLIGHT)
$DisabledSprite.visible = (available_stat == DISABLED)


func _input_event(_viewport: Object, event: InputEvent, _shape_idx: int) -> void:
if event is InputEventMouseButton:
if event.is_pressed() and event.button_index == MOUSE_BUTTON_LEFT:
draw_card()



func _on_mouse_entered():
mouse_on = true
is_mouse_on = true
if available_stat == DEFAULT:
available_stat = HIGHLIGHT
Input.set_default_cursor_shape(Input.CURSOR_POINTING_HAND)


func _on_mouse_exited():
mouse_on = false
is_mouse_on = false
if available_stat == HIGHLIGHT:
available_stat = DEFAULT
Input.set_default_cursor_shape(Input.CURSOR_ARROW)


func _on_cards_child_exiting_tree(node: Node) -> void:
set_card_count(self.card_count + 1)
1 change: 1 addition & 0 deletions objects/card_base/card_base.tscn
Original file line number Diff line number Diff line change
Expand Up @@ -75,3 +75,4 @@ volume_db = 9.58
[connection signal="area_exited" from="." to="." method="_on_area_exited"]
[connection signal="mouse_entered" from="." to="." method="_on_mouse_entered"]
[connection signal="mouse_exited" from="." to="." method="_on_mouse_exited"]
[connection signal="child_exiting_tree" from="Cards" to="." method="_on_cards_child_exiting_tree"]

0 comments on commit 6b9f1ee

Please sign in to comment.