Refactor functions to board
This commit is contained in:
parent
c2ace7f531
commit
d307f49194
4 changed files with 58 additions and 43 deletions
|
@ -8,6 +8,8 @@ signal card_picked()
|
||||||
signal card_dropped()
|
signal card_dropped()
|
||||||
signal card_dropped_anim()
|
signal card_dropped_anim()
|
||||||
signal card_menu()
|
signal card_menu()
|
||||||
|
signal card_moved(origin, direction, t)
|
||||||
|
signal card_clicked()
|
||||||
|
|
||||||
var clicked := false
|
var clicked := false
|
||||||
var exhausted := false
|
var exhausted := false
|
||||||
|
@ -21,6 +23,7 @@ var zoneName = ""
|
||||||
var cardMat = preload("res://MLPAssets/Placeholders/CardMat.tres")
|
var cardMat = preload("res://MLPAssets/Placeholders/CardMat.tres")
|
||||||
var ready = false
|
var ready = false
|
||||||
|
|
||||||
|
onready var border := $CardModel/Border
|
||||||
onready var animation := $CardModel/Border/AnimationPlayer
|
onready var animation := $CardModel/Border/AnimationPlayer
|
||||||
onready var handanim := $CardModel/Border/HandAnimPlayer # Hack to get hand animations off the main queue
|
onready var handanim := $CardModel/Border/HandAnimPlayer # Hack to get hand animations off the main queue
|
||||||
onready var cardImage := $CardModel/Border/CardImage
|
onready var cardImage := $CardModel/Border/CardImage
|
||||||
|
@ -52,35 +55,15 @@ func _input_event(camera, event, click_position, click_normal, shape_idx):
|
||||||
lifted = true
|
lifted = true
|
||||||
var origin: Vector3 = camera.project_ray_origin(event.position)
|
var origin: Vector3 = camera.project_ray_origin(event.position)
|
||||||
var direction: Vector3 = camera.project_ray_normal(event.position)
|
var direction: Vector3 = camera.project_ray_normal(event.position)
|
||||||
if flipped:
|
|
||||||
$CardModel/Border.translation = Vector3(0, 0.01, 0)
|
|
||||||
$CardModel/Border.rotation = Vector3(0, 0, PI)
|
|
||||||
else:
|
|
||||||
$CardModel/Border.translation = Vector3.ZERO
|
|
||||||
$CardModel/Border.rotation = Vector3.ZERO
|
|
||||||
if inHand:
|
|
||||||
translation = Vector3(direction.x * 3.0, 0.25, -0.25)
|
|
||||||
# Fix rotation if coming from hand
|
|
||||||
rotation = Vector3.ZERO
|
|
||||||
elif inZone:
|
|
||||||
translation = Vector3.ZERO
|
|
||||||
rotation = Vector3.ZERO
|
|
||||||
else:
|
|
||||||
var denom := Vector3.UP.dot(direction)
|
var denom := Vector3.UP.dot(direction)
|
||||||
var t: float = (-camera.transform.origin).dot(Vector3.UP) / denom;
|
var t: float = (-camera.transform.origin).dot(Vector3.UP) / denom;
|
||||||
translation = origin + direction * t
|
emit_signal("card_moved", origin, direction, t)
|
||||||
# Rotate depending on what side of the board it is
|
|
||||||
if translation.z < 0:
|
|
||||||
rotation.y = PI
|
|
||||||
else:
|
|
||||||
rotation.y = 0
|
|
||||||
# Right click
|
# Right click
|
||||||
if event is InputEventMouseButton and event.pressed and event.button_index == BUTTON_RIGHT:
|
if event is InputEventMouseButton and event.pressed and event.button_index == BUTTON_RIGHT:
|
||||||
# Show menu
|
# Show menu
|
||||||
emit_signal("card_menu")
|
emit_signal("card_menu")
|
||||||
# Left click
|
# Left click
|
||||||
if event is InputEventMouseButton and event.button_index == BUTTON_LEFT and clickable():
|
if event is InputEventMouseButton and event.button_index == BUTTON_LEFT and clickable():
|
||||||
|
|
||||||
# Update click status
|
# Update click status
|
||||||
clicked = event.pressed
|
clicked = event.pressed
|
||||||
|
|
||||||
|
@ -92,22 +75,7 @@ func _input_event(camera, event, click_position, click_normal, shape_idx):
|
||||||
|
|
||||||
# Check double click
|
# Check double click
|
||||||
if event.doubleclick and not inHand and not lifted and not animation.is_playing():
|
if event.doubleclick and not inHand and not lifted and not animation.is_playing():
|
||||||
if exhausted:
|
emit_signal("card_clicked")
|
||||||
animation.queue("tap-back")
|
|
||||||
exhausted = false
|
|
||||||
else:
|
|
||||||
animation.queue("tap")
|
|
||||||
exhausted = true
|
|
||||||
|
|
||||||
func _menu_action(id: int):
|
|
||||||
match id:
|
|
||||||
0: # Flip
|
|
||||||
if flipped:
|
|
||||||
animation.queue("flip-back")
|
|
||||||
flipped = false
|
|
||||||
else:
|
|
||||||
animation.queue("flip")
|
|
||||||
flipped = true
|
|
||||||
|
|
||||||
func _check_drop_anim(anim_name):
|
func _check_drop_anim(anim_name):
|
||||||
if anim_name == "drop":
|
if anim_name == "drop":
|
||||||
|
|
|
@ -49,6 +49,9 @@ func pop_card() -> Card:
|
||||||
card.flipped = false
|
card.flipped = false
|
||||||
return card
|
return card
|
||||||
|
|
||||||
|
func stack_size():
|
||||||
|
return cards.size()
|
||||||
|
|
||||||
const CARD_DISTANCE = 0.005
|
const CARD_DISTANCE = 0.005
|
||||||
|
|
||||||
func reorder_cards():
|
func reorder_cards():
|
||||||
|
|
|
@ -142,8 +142,50 @@ func _card_selected(card: Card):
|
||||||
func _card_unselected(card: Card):
|
func _card_unselected(card: Card):
|
||||||
if focusedCard == card:
|
if focusedCard == card:
|
||||||
focusedCard = null
|
focusedCard = null
|
||||||
|
if card.inHand:
|
||||||
card.handanim.play("blur")
|
card.handanim.play("blur")
|
||||||
|
|
||||||
|
func _card_moved(origin: Vector3, direction: Vector3, t: float, card: Card):
|
||||||
|
if card.flipped:
|
||||||
|
card.border.translation = Vector3(0, 0.01, 0)
|
||||||
|
card.border.rotation = Vector3(0, 0, PI)
|
||||||
|
else:
|
||||||
|
card.border.translation = Vector3.ZERO
|
||||||
|
card.border.rotation = Vector3.ZERO
|
||||||
|
if card.inHand:
|
||||||
|
card.translation = Vector3(direction.x * 3.0, 0.25, -0.25)
|
||||||
|
# Fix rotation if coming from hand
|
||||||
|
card.rotation = Vector3.ZERO
|
||||||
|
elif card.inZone:
|
||||||
|
card.translation = Vector3.ZERO
|
||||||
|
card.rotation = Vector3.ZERO
|
||||||
|
else:
|
||||||
|
card.translation = origin + direction * t
|
||||||
|
# Rotate depending on what side of the board it is
|
||||||
|
if card.translation.z < 0:
|
||||||
|
card.rotation.y = PI
|
||||||
|
else:
|
||||||
|
card.rotation.y = 0
|
||||||
|
|
||||||
|
func _card_clicked(card: Card):
|
||||||
|
if card.exhausted:
|
||||||
|
card.animation.queue("tap-back")
|
||||||
|
card.exhausted = false
|
||||||
|
else:
|
||||||
|
card.animation.queue("tap")
|
||||||
|
card.exhausted = true
|
||||||
|
|
||||||
|
|
||||||
|
func _card_menu_action(id: int, card: Card):
|
||||||
|
match id:
|
||||||
|
0: # Flip
|
||||||
|
if card.flipped:
|
||||||
|
card.animation.queue("flip-back")
|
||||||
|
card.flipped = false
|
||||||
|
else:
|
||||||
|
card.animation.queue("flip")
|
||||||
|
card.flipped = true
|
||||||
|
|
||||||
func reparent(object: Node, from: Node, to: Node):
|
func reparent(object: Node, from: Node, to: Node):
|
||||||
from.remove_child(object)
|
from.remove_child(object)
|
||||||
to.add_child(object)
|
to.add_child(object)
|
||||||
|
@ -162,7 +204,9 @@ func add_card(cardID: String, playerID: int, zone: String):
|
||||||
card.connect("card_selected", self, "_card_selected", [card])
|
card.connect("card_selected", self, "_card_selected", [card])
|
||||||
card.connect("card_unselected", self, "_card_unselected", [card])
|
card.connect("card_unselected", self, "_card_unselected", [card])
|
||||||
card.connect("card_dropped_anim", self, "check_hand_drop", [card])
|
card.connect("card_dropped_anim", self, "check_hand_drop", [card])
|
||||||
card.connect("card_menu", ui, "show_card_menu", [card])
|
card.connect("card_moved", self, "_card_moved", [card])
|
||||||
|
card.connect("card_menu", ui, "show_card_menu", [card, self, "_card_menu_action"])
|
||||||
|
card.connect("card_clicked", self, "_card_clicked", [card])
|
||||||
if card.inHand:
|
if card.inHand:
|
||||||
# TODO support for >2 players
|
# TODO support for >2 players
|
||||||
if playerID == 0:
|
if playerID == 0:
|
||||||
|
|
|
@ -13,7 +13,7 @@ func _card_selected(card: Card):
|
||||||
func _card_unselected(card: Card):
|
func _card_unselected(card: Card):
|
||||||
animation.play_backwards("fade ui card")
|
animation.play_backwards("fade ui card")
|
||||||
|
|
||||||
func show_card_menu(card):
|
func show_card_menu(card: Card, cbobj: Object, cbfn):
|
||||||
# Close any open menus
|
# Close any open menus
|
||||||
if menu != null:
|
if menu != null:
|
||||||
menu.queue_free()
|
menu.queue_free()
|
||||||
|
@ -32,6 +32,6 @@ func show_card_menu(card):
|
||||||
menu.add_item("Set Cutie-Marked", 2)
|
menu.add_item("Set Cutie-Marked", 2)
|
||||||
menu.add_item("Add color", 3)
|
menu.add_item("Add color", 3)
|
||||||
menu.add_item("Add marker", 4)
|
menu.add_item("Add marker", 4)
|
||||||
menu.connect("id_pressed", card, "_menu_action")
|
menu.connect("id_pressed", cbobj, cbfn, [card])
|
||||||
add_child(menu)
|
add_child(menu)
|
||||||
menu.popup(Rect2(get_viewport().get_mouse_position(), Vector2(150,10)))
|
menu.popup(Rect2(get_viewport().get_mouse_position(), Vector2(150,10)))
|
Loading…
Reference in a new issue