extends RayCast3D var current_target: Node = null var curTarget: Node = null @export var mode = 0; var rot : int = 0 func _process(delta: float) -> void: if Input.is_key_pressed(KEY_E): rot += 2 if Input.is_key_pressed(KEY_Q): rot -= 2 if Input.is_key_pressed(KEY_1): mode = 0 elif Input.is_key_pressed(KEY_2): mode = 1 elif Input.is_key_pressed(KEY_3): mode = 2 func spawnObjectByID(ObjectID:String, position:Vector3, rotation:int): var segments = ObjectID.split(":") var objectScene = load("res://WorldObjects/{namespace}/{id}.tscn".format({"namespace": segments[0], "id": segments[1]})) var object = objectScene.instantiate() object.global_position = position object.rotation_degrees = Vector3(0, rotation, 0) get_tree().current_scene.get_node("objects").add_child(object) func _input(event: InputEvent) -> void: if event is InputEventMouseButton: if not MainGame.canPlaceBlock: var is_left = event.button_index == MOUSE_BUTTON_LEFT var is_right = event.button_index == MOUSE_BUTTON_RIGHT if is_left or is_right: if event.pressed: if is_colliding(): var collider = get_collider() var target = _find_interactable_node(collider) if target: current_target = target if current_target.has_method("_interact_press"): # If it's a right click, pass true for the alt interaction current_target._interact_press(is_right) else: # Handle releasing the click if current_target and current_target.has_method("_interact_release"): current_target._interact_release() current_target = null elif MainGame.canPlaceBlock: var is_left = event.button_index == MOUSE_BUTTON_LEFT if is_left: if event.pressed: spawnObjectByID(MainGame.selectedBlockID, get_collision_point() + Vector3(0, 0.5, 0), rot) if MainGame.currentHeldItemID == "base:hammer": var is_left = event.button_index == MOUSE_BUTTON_LEFT if is_left: if event.pressed: var collider = get_collider() var target = _findBreakableNode(collider) if target: curTarget = target if curTarget.has_method("_destroy"): curTarget._destroy() func _find_interactable_node(node: Node) -> Node: while node != null: if node.has_method("_interact_press"): return node node = node.get_parent() return null func _findBreakableNode(node: Node) -> Node: while node != null: if node.has_method("_destroy"): return node node = node.get_parent() return null