Godot Version
4.4
Question
i did as instructed until minute 8:25 and im not even sure what i did wrong
extends Node2D
const card_path_scene = "res://Cards_scene/testcard.tscn"
var player_deck = ["tomo","tomo","tomo"]
func draw_card():
var card_drawn = player_deck[0]
var card_scene = preload(card_path_scene)
for i in range(player_deck.size()):
var new_card = card_scene.instantiate()
$"../cardmanager".add_child(new_card)
new_card.name = "card"
$"../playerhand".add_card_to_hand(new_card)
extends Node2D
signal left_mouse_button_clicked
signal left_mouse_button_relased
const collision_mask_card = 1
const collision_mask_deck = 2
var card_manager_reference
var deck_reference
func _ready() -> void:
card_manager_reference = $"../cardmanager"
deck_reference=$"../deck"
func _input(event):
if event is InputEventMouseButton and event.button_index == MOUSE_BUTTON_LEFT:
if event.pressed:
emit_signal("left_mouse_button_clicked")
raycast_at_cursor()
else:
emit_signal("left_mouse_button_relased")
func raycast_at_cursor():
var space_state = get_viewport().world_2d.direct_space_state
var parameters = PhysicsPointQueryParameters2D.new()
parameters.position = get_viewport().get_mouse_position()
parameters.collide_with_areas = true
var result = space_state.intersect_point(parameters)
if result.size() > 0:
var result_collision_mask = result[0].collider.collision_mask
if result_collision_mask == collision_mask_card:
var card_found = result[0].collider.get_parent()
if card_found:
card_manager_reference.s_drag(card_found)
elif result_collision_mask == collision_mask_deck:
deck_reference.draw_card()
extends Node2D
const collision_mask_card = 1
const collision_mask_card_slot = 2
var card_drag
var screen_size
var hover_on_card
var player_hand_reference
func _ready() -> void:
screen_size=get_viewport_rect().size
player_hand_reference = $"../playerhand"
$"../inputmanager".connect("left_mouse_button_relased", on_left_click_r)
func _process(delta: float) -> void:
if card_drag:
var mouse_pos= get_global_mouse_position()
card_drag.position=Vector2(clamp(mouse_pos.x, 0, screen_size.x), clamp(mouse_pos.y, 0, screen_size.y))
func S_drag(Card):
card_drag = Card
Card.scale = Vector2(1,1)
func N_drag():
card_drag.scale = Vector2(1.05, 1.05)
var card_slot_f = ray_check_for_card_slot()
if card_slot_f and not card_slot_f.card_in_slot:
card_drag.position = card_slot_f.position
card_drag.get_node("Area2D/CollisionShape2D").disabled = true
card_slot_f.card_in_slot=true
else:
player_hand_reference.add_card_to_hand(card_drag)
card_drag=null
func connect_card_signals(Card):
Card.connect("hover", on_hover_over_card)
Card.connect("hover_off", on_hover_off_card)
func on_left_click_r():
if card_drag:
N_drag()
func on_hover_over_card(Card):
if !hover_on_card:
hover_on_card = true
H_card(Card,true)
func on_hover_off_card(Card):
if !card_drag:
hover_on_card = false
H_card(Card,false)
var hover_new_card = ray_check_for_card()
if hover_new_card:
H_card(hover_new_card,true)
else:
hover_on_card=false
func H_card(Card,hover):
if hover:
Card.scale = Vector2(1.05, 1.05)
Card.z_index = 2
else :
Card.scale = Vector2(1,1)
Card.z_index = 1
func ray_check_for_card_slot():
var space_state = get_viewport().world_2d.direct_space_state
var parameters = PhysicsPointQueryParameters2D.new()
parameters.position = get_viewport().get_mouse_position()
parameters.collide_with_areas = true
parameters.collision_mask = collision_mask_card_slot
var result = space_state.intersect_point(parameters)
if result.size() > 0:
return result[0].collider.get_parent()
return null
func ray_check_for_card():
var space_state = get_viewport().world_2d.direct_space_state
var parameters = PhysicsPointQueryParameters2D.new()
parameters.position = get_viewport().get_mouse_position()
parameters.collide_with_areas = true
parameters.collision_mask = collision_mask_card
var result = space_state.intersect_point(parameters)
if result.size() > 0:
return get_Card_with_highest_z_index(result)
return null
func get_Card_with_highest_z_index(Card):
var highest_z_card = Card[0].collider.get_parent()
var highest_z_index = highest_z_card.z_index
for i in range(1, Card.size()):
var current_card = Card[i].collider.get_parent()
if current_card.z_index > highest_z_index:
highest_z_card=current_card
highest_z_index=current_card.z_index
return highest_z_card