Here's a GDScript implementation for a magnet node in Godot, with a complexity level of 5:
extends Area2D class_name MagnetNode export var attraction_force: float = 500.0 export var attraction_radius: float = 200.0 export var attract_groups: Array = ["Attractable"] var attracted_bodies: Array = [] func _ready(): collision_shape = CollisionShape2D.new() var circle_shape = CircleShape2D.new() circle_shape.radius = attraction_radius collision_shape.shape = circle_shape add_child(collision_shape) connect("body_entered", self, "_on_body_entered") connect("body_exited", self, "_on_body_exited") func _physics_process(delta): for body in attracted_bodies: if is_instance_valid(body) and body is RigidBody2D: var direction = global_position - body.global_position var distance = direction.length() var force = direction.normalized() * (attraction_force / (distance * distance)) body.apply_central_impulse(force * delta) func _on_body_entered(body): for group in attract_groups: if body.is_in_group(group): attracted_bodies.append(body) break func _on_body_exited(body): attracted_bodies.erase(body) func set_attraction_radius(new_radius: float): attraction_radius = new_radius if collision_shape and collision_shape.shape: collision_shape.shape.radius = new_radius func toggle_magnet(enabled: bool): set_physics_process(enabled) collision_shape.disabled = not enabled
This GDScript creates a MagnetNode class that extends Area2D. Here's a breakdown of its functionality:
To use this node in your Godot project: