Getting error "Invalid call. Nonexistent function" although the function does exist

Godot Version

4.3.dev3

Question

I have a wrapper class to control how a certain TileMap node is accessed. This wrapper class has the following content.

class_name OutputTileMapWrapper 
extends Node2D

enum Terrain { BORDER, WALL, FLOOR, MIDDLE_TONE_FLOOR, DARK_FLOOR, BRIGHT_FLOOR, BRICK_FLOOR, WATER}
enum Layer { FLOOR, BORDER }


@export var scale_factor := 3

@onready var _output_tile_map: TileMap = $OutputTileMap

func set_floor_cells(cells: Dictionary) -> void:
	var output_cells := _convert_to_output_map(cells)
	
	BetterTerrain.set_cells(_output_tile_map, Layer.FLOOR, output_cells.keys(), Terrain.MIDDLE_TONE_FLOOR) 
	BetterTerrain.update_terrain_cells(_output_tile_map, Layer.FLOOR, output_cells.keys())


func set_border_cells(cells: Dictionary) -> void:
	var output_cells := _convert_to_output_map(cells)
	
	BetterTerrain.set_cells(_output_tile_map, Layer.BORDER, output_cells.keys(), Terrain.BORDER) 
	BetterTerrain.set_cells(_output_tile_map, Layer.BORDER, output_cells.keys(), Terrain.BORDER) 




func _convert_to_output_map(cells: Dictionary) -> Dictionary:
	var out := {}
	
	for cell: Vector2i in cells:
		var output_cell := cell * scale_factor
		for x: int in scale_factor:
			for y: int in scale_factor:
				var coords := output_cell + Vector2i(x, y)
				out[coords] = null
	
	return out

I get a reference to this wrapper class using @export var output_tile_map_wrapper: OutputTileMapWrapper and I have assigned it in the inspector.

image

When I try to call the set_floor_cells from anothe class it says
Invalid call. Nonexistent function 'set_floor_cells' in base 'Node2D (OutputTileMapWrapper).

Why does this happen? I can even click the function call and it brings me to the wrapper class.

Ah, now I know what the error is. Because I am calling a function of a non tool script from a tool script.

3 Likes

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.