feat: card hover
This commit is contained in:
parent
bd9b9a35d8
commit
41a72709df
1 changed files with 51 additions and 2 deletions
|
|
@ -23,6 +23,13 @@ var show_buttons: bool
|
||||||
var signal_connected: bool
|
var signal_connected: bool
|
||||||
var selected_card: Control
|
var selected_card: Control
|
||||||
|
|
||||||
|
var hovering_cards_this_frame: Array[Control] = []
|
||||||
|
var hovering_cards_duration: Dictionary = {}
|
||||||
|
const original_hover_position = 50 # hard coded idk what's a good way to find this value
|
||||||
|
const hover_animation_time = 0.1
|
||||||
|
const hover_height_offset = -50
|
||||||
|
const selected_height_offset = -100
|
||||||
|
|
||||||
func attach(match_manager: MatchManager, show_buttons: bool = true):
|
func attach(match_manager: MatchManager, show_buttons: bool = true):
|
||||||
self.show_buttons = show_buttons
|
self.show_buttons = show_buttons
|
||||||
self.match_manager = match_manager
|
self.match_manager = match_manager
|
||||||
|
|
@ -39,6 +46,7 @@ func _ready():
|
||||||
child.queue_free()
|
child.queue_free()
|
||||||
|
|
||||||
func _on_update(transition):
|
func _on_update(transition):
|
||||||
|
hovering_cards_duration.clear()
|
||||||
selected_card = null
|
selected_card = null
|
||||||
|
|
||||||
for child in deck.get_children():
|
for child in deck.get_children():
|
||||||
|
|
@ -87,6 +95,7 @@ func _on_update(transition):
|
||||||
skip_btn.left_clicked.connect(func ():
|
skip_btn.left_clicked.connect(func ():
|
||||||
_pop_this_card(skip_btn)
|
_pop_this_card(skip_btn)
|
||||||
play_card.emit(null))
|
play_card.emit(null))
|
||||||
|
skip_btn.hovering.connect(func (delta): _do_hover(skip_btn, delta))
|
||||||
deck.add_child(skip_btn)
|
deck.add_child(skip_btn)
|
||||||
|
|
||||||
for card: Card in player.hand:
|
for card: Card in player.hand:
|
||||||
|
|
@ -118,6 +127,7 @@ func _on_update(transition):
|
||||||
monster_card.left_clicked.connect(func ():
|
monster_card.left_clicked.connect(func ():
|
||||||
_pop_this_card(monster_card)
|
_pop_this_card(monster_card)
|
||||||
play_card.emit(card))
|
play_card.emit(card))
|
||||||
|
monster_card.hovering.connect(func (delta): _do_hover(monster_card, delta))
|
||||||
deck.add_child(monster_card)
|
deck.add_child(monster_card)
|
||||||
|
|
||||||
elif card is SupportCard and card.type == "red":
|
elif card is SupportCard and card.type == "red":
|
||||||
|
|
@ -133,6 +143,7 @@ func _on_update(transition):
|
||||||
btn.left_clicked.connect(func ():
|
btn.left_clicked.connect(func ():
|
||||||
_pop_this_card(btn)
|
_pop_this_card(btn)
|
||||||
play_card.emit(card))
|
play_card.emit(card))
|
||||||
|
btn.hovering.connect(func (delta): _do_hover(btn, delta))
|
||||||
|
|
||||||
if rps_button_container:
|
if rps_button_container:
|
||||||
rps_button_container.visible = match_manager.phase == Match.Phase.RPS
|
rps_button_container.visible = match_manager.phase == Match.Phase.RPS
|
||||||
|
|
@ -142,10 +153,48 @@ func _on_update(transition):
|
||||||
|
|
||||||
func _pop_this_card(control: Control):
|
func _pop_this_card(control: Control):
|
||||||
if selected_card:
|
if selected_card:
|
||||||
selected_card.size_flags_vertical = Control.SIZE_SHRINK_END
|
selected_card.position = Vector2(selected_card.position.x, original_hover_position)
|
||||||
|
|
||||||
control.size_flags_vertical = Control.SIZE_SHRINK_BEGIN
|
|
||||||
selected_card = control
|
selected_card = control
|
||||||
|
selected_card.position = Vector2(selected_card.position.x, original_hover_position + selected_height_offset)
|
||||||
|
|
||||||
|
func _do_hover(control: Control, delta: float):
|
||||||
|
if control == selected_card:
|
||||||
|
if control in hovering_cards_duration:
|
||||||
|
hovering_cards_duration.erase(control)
|
||||||
|
return
|
||||||
|
|
||||||
|
var duration: float
|
||||||
|
if control in hovering_cards_duration:
|
||||||
|
duration = hovering_cards_duration[control]
|
||||||
|
duration = clampf(duration + delta, 0, hover_animation_time)
|
||||||
|
hovering_cards_duration[control] = duration
|
||||||
|
else:
|
||||||
|
hovering_cards_duration[control] = delta
|
||||||
|
duration = delta
|
||||||
|
|
||||||
|
var height = lerpf(0, hover_height_offset, duration / hover_animation_time) + original_hover_position
|
||||||
|
control.position = Vector2(control.position.x, height)
|
||||||
|
|
||||||
|
hovering_cards_this_frame.append(control)
|
||||||
|
|
||||||
|
func _process(delta):
|
||||||
|
for card in hovering_cards_duration.keys():
|
||||||
|
if !card or card in hovering_cards_this_frame:
|
||||||
|
continue
|
||||||
|
|
||||||
|
var duration = hovering_cards_duration[card]
|
||||||
|
duration = maxf(0, duration - delta)
|
||||||
|
|
||||||
|
var height = lerpf(0, hover_height_offset, duration / hover_animation_time) + original_hover_position
|
||||||
|
card.position = Vector2(card.position.x, height)
|
||||||
|
|
||||||
|
if duration == 0:
|
||||||
|
hovering_cards_duration.erase(card)
|
||||||
|
else:
|
||||||
|
hovering_cards_duration[card] = duration
|
||||||
|
|
||||||
|
hovering_cards_this_frame.clear()
|
||||||
|
|
||||||
|
|
||||||
func _on_kertas_button_button_down() -> void:
|
func _on_kertas_button_button_down() -> void:
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue