![]() |
Attention | Topic was automatically imported from the old Question2Answer platform. |
![]() |
Asked By | DDoop |
I’m designing a modular map generator. Generators derive from object and have an array of Module objects (also derive from object). A single Node2D (Gen2Testing
) with a TileMap child owns the Generator object. RIght now I only have 1 module, DefaultTerrainModule
which only listens for the generate_map
signal from Gen2Testing
. This signal passes a Vector2, dimension
, and a reference to the TileMap.
On Gen2Testing
’s _ready()
, I .connect("generate_map", module, "_generate", [dimension, tile_map]))
for every Module object stored in the Generator (which at the moment initializes with a lone DefaultTerrainModule
) The error code is 0, and if I check the connection with is_connected('generate_map', module, '_generate')
, I get True
.
When I actually try sending the signal though, no code in the Module’s _generate()
function ever gets called. Any advice?
Here’s the code:
Gen2Testing.gd
(attached to Gen2Testing: Node2D, the scene root, parent of a TileMap):
extends Node2D
signal generate_map(dimension, tile_map);
export (Vector2) var dimension = Vector2(100, 100);
var generator: Gen2 = Gen2.new();
onready var tile_map = $TileMap;
func _ready() -> void:
connect_generate_map_signal();
func _process(_delta: float) -> void:
if (Input.is_action_just_pressed("f1")):
connect_generate_map_signal();
if (Input.is_action_just_pressed("f2")):
print("sending signal")
emit_signal("generate_map", dimension, tile_map);
if (Input.is_action_just_pressed("f3")):
print(generator.modules)
func connect_generate_map_signal() -> void:
print(generator.modules)
for module in generator.modules:
print(module.name)
var er: = connect("generate_map", module, "_generate", [dimension, tile_map]);
print("connecting {self} to {module}. Error code: {er} ".format(
{"self":self, "module": module, "er":er}))
print("is_connected('generate_map', module, '_generate'): " +
str(is_connected('generate_map', module, '_generate')))
Gen2.gd
:
extends Object
class_name Gen2
var modules:Array = [];
func _init():
modules.append(DefaultTerrainModule.new())
Gen2Module.gd
(not really relevant, just including in case!):
extends Object
func generate():
print("You were supposed to override this!")
DefaultTerrainModule.gd
:
extends "res://2D PoC/Gen2/Scripts/Gen2Module.gd"
class_name DefaultTerrainModule
var name = "named module1"
func _generate(dim: Vector2, tm: TileMap):
print("signal received from " + str(get_instance_id()));