Hello i need help to undersand something

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

You mistyped S_drag function call. It’s defined with capital letter ‘S’ in your code.

1 Like

this fixed the drag but it still draws cards when i press on the card slot and no on the deck

Does it gives new error? What is expected behavior?

1 Like

the error when i drag the card is fixed but when i press on the dark square the cards should be added into the hand and then i would put it into the other square the slot

I’m not sure which script attached to “deck” node?

1 Like

this one

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)

draw_card function kinda don’t make sense to me.
I think var card_drawn = player_deck[0] and var card_scene = preload(card_path_scene) should be before function.
It’s hard to figure out whole logic without following tutorial :slight_smile:

he does that a lot, i think the prblem may be on the collison

Try changing const collision_mask_deck = 2 in second script to const collision_mask_deck = 4 as in video and continue code on deck.
He does so much code refactoring without explaining, that i would say, just follow video and rewatch it again to compare code (if there is gonna be errors)

1 Like

At 7:43 he changes const collision_mask_card_slot

1 Like

i was checking that thing but i thought it was 3 lol

1 Like