0 votes

Hello,

I am pretty new to Godot and to programming (and I'm in love with this engine !)
After learning how to make a plateformes and the basics, I tried making a game
where an object follows the mouse and create a trail. The thing is that I want to detect when the trail crosses itself (here is an exemple), and if an object is inside the area it created. (Here is an image explaining all of this : https://ibb.co/MhYYpg0)

Thank you :)

Script of my line2D :

   extends Line2D

onready var point
onready var trail_length = 50

func _process(delta):

    set_as_toplevel(true)

    point = get_parent().get_parent().global_position
    add_point(point)
    while (get_point_count() > trail_length):
        remove_point(0)
        pass

Script of my player

extends KinematicBody2D

var velocity = Vector2()
var speed = 5

func _process(delta):

    var mouse_pos = get_viewport().get_mouse_position()
    var player_pos = get_position()

    velocity = (mouse_pos - player_pos) * speed

    move_and_slide(velocity, Vector2(0, -1))
asked Mar 11 in Projects by NoxL (12 points)

1 Answer

+3 votes

You're image is broken, but I think I understand what you're trying to do. I don't think there's a magic-bullet for what you want, but I'd guess you could build it fairly easily using some of Godot's basic Geometry functions. For instance, these will likely be handy:

segment_intersects_segment_2d - find intersection between 2 line segments
is_point_in_polygon - determine if a point is inside a polygon

Basically, you'll need to see if your "line segments" have any intersections (by iterating through the segments and comparing them via segment_intersects_segment_2d). If they don't, you're done. If you find an intersection, you'll need to create a collection of points consisting of that intersection point and all of the points "between" the 2 segments found to have the intersection (including the last point of the first intersecting segment and the first point of the second intersecting segment) - in that order.

That list of points could be used to construct a "containing" polygon - which could be used to find objects "inside" using any number of methods (potentially including is_point_in_polygon).

answered Mar 12 by jgodfrey (6,576 points)
edited Mar 12 by jgodfrey
Welcome to Godot Engine Q&A, where you can ask questions and receive answers from other members of the community.

Please make sure to read How to use this Q&A? before posting your first questions.