extends Node2D var spawn_position=Vector2(100,100); # Called when the node enters the scene tree for the first time. func _ready(): pass func _input(event): if event.is_action_pressed("escape"): get_tree().change_scene_to_file("res://map_select/map_select.tscn") get_node("/root/Sim").queue_free() if event is InputEventMouseButton and event.pressed and event.button_index == MOUSE_BUTTON_LEFT: spawn_position=get_global_mouse_position() spawn() $Timer.stop() if event is InputEventMouseButton and event.pressed and event.button_index == MOUSE_BUTTON_RIGHT: spawn_position=get_global_mouse_position() $Timer.start() func _on_timer_timeout(): spawn() func spawn(): var new_player = load("res://player.tscn").instantiate() new_player.get_node("Body2D").position = spawn_position new_player.get_node("Body2D").apply_impulse(Vector2.from_angle(randf_range(0, 2 * PI)) * 100) # Prepare the shape query parameters var query_parameters = PhysicsShapeQueryParameters2D.new() var collision_shape = new_player.get_node("Body2D/CollisionShape2D").shape query_parameters.set_shape(collision_shape) query_parameters.set_transform(Transform2D(0, spawn_position)) query_parameters.set_collision_mask(1) # Get the Physics2DDirectSpaceState for collision checking var space_state = get_world_2d().direct_space_state # Check for collision var collision_results = space_state.intersect_shape(query_parameters) if collision_results.size() == 0: # No collision, safe to add child add_child(new_player) else: for collision in collision_results: #print if collision.collider.get_parent() is Pool: collision.collider.get_parent()._on_decay_timer_timeout() return var marker = load("res://crosshair.tscn").instantiate() marker.position = new_player.get_node("Body2D").position add_child(marker)