From 3c02ae63f9399d77676a1acf70dde6be32438e30 Mon Sep 17 00:00:00 2001 From: ShyProton Date: Sun, 27 Apr 2025 22:49:45 -0400 Subject: [PATCH] organizes card scene, exports tween functionality to its own node and script --- field.gd | 4 +- hand.gd | 2 +- player.gd | 2 +- card.gd => scenes/card/card.gd | 71 ++++---------------------- card.gd.uid => scenes/card/card.gd.uid | 0 card.tscn => scenes/card/card.tscn | 8 ++- scenes/card/input.gd | 0 scenes/card/input.gd.uid | 1 + scenes/card/tween.gd | 22 ++++++++ scenes/card/tween.gd.uid | 1 + 10 files changed, 45 insertions(+), 66 deletions(-) rename card.gd => scenes/card/card.gd (66%) rename card.gd.uid => scenes/card/card.gd.uid (100%) rename card.tscn => scenes/card/card.tscn (70%) create mode 100644 scenes/card/input.gd create mode 100644 scenes/card/input.gd.uid create mode 100644 scenes/card/tween.gd create mode 100644 scenes/card/tween.gd.uid diff --git a/field.gd b/field.gd index 5ad1a16..546071d 100644 --- a/field.gd +++ b/field.gd @@ -3,7 +3,7 @@ extends TextureRect var _screen_size: Vector2 var _colors: Array[Color] -var _card_scene = preload("res://card.tscn") +var _card_class = preload("res://scenes/card/card.tscn") # Called when the node enters the scene tree for the first time. @@ -11,7 +11,7 @@ func _ready() -> void: # TODO: Calculate this field's scale and position based on which no# field this is. _screen_size = get_viewport_rect().size - var card = _card_scene.instantiate() + var card = _card_class.instantiate() # TODO: Currently working with an already-cached card with a known ID to load this. # Later on, the cards should be pulling the IDs directly from the library's list of IDs. diff --git a/hand.gd b/hand.gd index 9b9cfc0..62621b8 100644 --- a/hand.gd +++ b/hand.gd @@ -2,7 +2,7 @@ extends StaticBody2D var cards: Array[Node] = [] -var _card_class = preload("res://card.tscn") +var _card_class = preload("res://scenes/card/card.tscn") # Called when the node enters the scene tree for the first time. diff --git a/player.gd b/player.gd index 5993f42..6d3e5fa 100644 --- a/player.gd +++ b/player.gd @@ -1,6 +1,6 @@ extends Node2D -var _card_class = preload("res://card.tscn") +var _card_class = preload("res://scenes/card/card.tscn") var field_scene = preload("res://field.tscn") var fields: Array[Node] = [] diff --git a/card.gd b/scenes/card/card.gd similarity index 66% rename from card.gd rename to scenes/card/card.gd index 09a0251..f80c694 100644 --- a/card.gd +++ b/scenes/card/card.gd @@ -4,10 +4,6 @@ extends Node2D ## Represents an instance of a card to be displayed on the tabletop. ## Contains helper text for the text, the cards ID, and the image path. -enum pivot { ROTATE_0 = 0, ROTATE_90 = 90, ROTATE_180 = 180, ROTATE_270 = 270 } - -var current_pivot = pivot.ROTATE_0 - # Card information. var card_id: String var card_name: String @@ -15,50 +11,24 @@ var card_type: String var oracle_text: String # Card properties. -var tapped = false +var tapped: bool # Card input state. -var is_focused = false # Is the card a focus? -var is_dragging = false # Is the card currently being dragged? +var is_focused: bool # Is the card a focus? +var is_dragging: bool # Is the card currently being dragged? -var delay = 5.0 var mouse_offset: Vector2 -func _pivot() -> int: - var deg: int - match current_pivot: - pivot.ROTATE_0: - deg = 0 - pivot.ROTATE_90: - deg = 90 - pivot.ROTATE_180: - deg = 180 - pivot.ROTATE_270: - deg = 270 - return deg - - func _physics_process(delta: float) -> void: - # TODO: Export handling keypresses to its own area. - if is_focused and Input.is_action_just_pressed("MAIN"): - tapped = not tapped - current_pivot = pivot.ROTATE_90 if tapped else pivot.ROTATE_0 - var tween = create_tween() - tween.tween_property(self, "rotation_degrees", current_pivot, delta * delay) - - _tweening(delta) - - -func _tweening(delta: float) -> void: - # NOTE: Constant tweens include: - # - When dragging, new tween is created each physics_process frame to move the card to the new mouse location. + if is_focused: + # TODO: Export handling keypresses to its own area. + if Input.is_action_just_pressed("MAIN"): + tapped = not tapped + $TweenController.tap(tapped, delta) if is_dragging: - var tween = create_tween() - tween.tween_property( - self, "position", get_global_mouse_position() - mouse_offset, delay * delta - ) + $TweenController.move_to(get_global_mouse_position() - mouse_offset, delta) func _on_input_event(viewport: Node, event: InputEvent, shape_idx: int) -> void: @@ -86,11 +56,7 @@ func _on_mouse_entered() -> void: return Input.set_default_cursor_shape(Input.CURSOR_POINTING_HAND) - - var tween = create_tween() - var focus_scale = Vector2(1.05, 1.05) - tween.tween_property(self, "scale", focus_scale, 0.1) - + $TweenController.scale(1.05) is_focused = true @@ -100,24 +66,11 @@ func _on_mouse_exited() -> void: return Input.set_default_cursor_shape(Input.CURSOR_ARROW) - var tween = create_tween() - tween.tween_property(self, "scale", Vector2.ONE, 0.1) + $TweenController.scale(1.0) is_focused = false -func travel_to(position: Vector2) -> Error: - # TODO: Check whether position to travel to is within the confines of where this card can go. - return OK - - -# func _unhandled_key_input(event: InputEvent) -> void: -# if not event.is_action_pressed("default_action"): -# return - -# set_pivot_offset(size / 2) - - func _card_error(error_type: String) -> String: return "ERROR::CARD::%s::%s::%s::\n" % [card_id, card_name, error_type] @@ -134,8 +87,6 @@ func _ready() -> void: # Setting that up can be put here later... push_error("Failed to load card.") - # set_pivot_offset(size / 2) - func _load_card() -> Error: if _load_data() != OK: diff --git a/card.gd.uid b/scenes/card/card.gd.uid similarity index 100% rename from card.gd.uid rename to scenes/card/card.gd.uid diff --git a/card.tscn b/scenes/card/card.tscn similarity index 70% rename from card.tscn rename to scenes/card/card.tscn index 7e0d2c6..1d69f81 100644 --- a/card.tscn +++ b/scenes/card/card.tscn @@ -1,6 +1,7 @@ -[gd_scene load_steps=3 format=3 uid="uid://cah3mvdnom1xg"] +[gd_scene load_steps=4 format=3 uid="uid://cah3mvdnom1xg"] -[ext_resource type="Script" uid="uid://b3yqd1qu7dyq" path="res://card.gd" id="1_kikvd"] +[ext_resource type="Script" uid="uid://b3yqd1qu7dyq" path="res://scenes/card/card.gd" id="1_kikvd"] +[ext_resource type="Script" uid="uid://bkk0pyypi1id7" path="res://scenes/card/tween.gd" id="2_imta7"] [sub_resource type="RectangleShape2D" id="RectangleShape2D_kikvd"] size = Vector2(125, 175) @@ -15,6 +16,9 @@ script = ExtResource("1_kikvd") [node name="CollisionShape2D" type="CollisionShape2D" parent="Area2D"] shape = SubResource("RectangleShape2D_kikvd") +[node name="TweenController" type="Node2D" parent="."] +script = ExtResource("2_imta7") + [connection signal="input_event" from="Area2D" to="." method="_on_input_event"] [connection signal="mouse_entered" from="Area2D" to="." method="_on_mouse_entered"] [connection signal="mouse_exited" from="Area2D" to="." method="_on_mouse_exited"] diff --git a/scenes/card/input.gd b/scenes/card/input.gd new file mode 100644 index 0000000..e69de29 diff --git a/scenes/card/input.gd.uid b/scenes/card/input.gd.uid new file mode 100644 index 0000000..0b4fbf9 --- /dev/null +++ b/scenes/card/input.gd.uid @@ -0,0 +1 @@ +uid://dhgk6fhw8oua0 diff --git a/scenes/card/tween.gd b/scenes/card/tween.gd new file mode 100644 index 0000000..f52ea6e --- /dev/null +++ b/scenes/card/tween.gd @@ -0,0 +1,22 @@ +extends Node + +@export var move_speed = 1.0 +@export var tap_speed = 5.0 +@export var scale_speed = 0.1 + + +func move_to(location: Vector2, delta: float) -> void: + var tween = create_tween() + tween.tween_property(get_parent(), "position", location, delta * move_speed) + + +func tap(tapped: bool, delta: float) -> void: + var tween = create_tween() + var rotation = 90 if tapped else 0 + tween.tween_property(get_parent(), "rotation_degrees", rotation, delta * tap_speed) + + +func scale(scalar: float) -> void: + var tween = create_tween() + var new_scale = Vector2.ONE * scalar + tween.tween_property(get_parent(), "scale", new_scale, scale_speed) diff --git a/scenes/card/tween.gd.uid b/scenes/card/tween.gd.uid new file mode 100644 index 0000000..3719bc7 --- /dev/null +++ b/scenes/card/tween.gd.uid @@ -0,0 +1 @@ +uid://bkk0pyypi1id7