Here is a code sample I made for you.
extends Node2D
onready var face = get_node("Face")
onready var block = get_node("Block")
onready var shape = block.get_node("Shape")
var block_min
var block_max
func _ready():
var extents = (shape.shape as RectangleShape2D).extents
block_min = Vector2(-extents.x, -extents.y) + block.position
block_max = Vector2(extents.x, extents.y) + block.position
func _input(event):
if event.is_action_released("spawn"):
move_face(event.position)
if event.is_action_released("snap"):
snap_face(block_min, block_max)
func move_face(pos):
face.position = pos
func snap_face(min_point, max_point):
face.position.x = clamp(face.position.x, min_point.x, max_point.x)
face.position.y = clamp(face.position.y, min_point.y, max_point.y)
And here is the project to mess around with. Use left and right clicks to control the sprite.