From b384856adeed758ce3fe395f6b973639f21fc4d8 Mon Sep 17 00:00:00 2001 From: cel 🌸 Date: Sun, 9 Jul 2023 16:21:38 +0100 Subject: add borders --- Scripts/Road.gd | 40 +++++++++++++++++++++++++++++++++++++--- 1 file changed, 37 insertions(+), 3 deletions(-) (limited to 'Scripts/Road.gd') diff --git a/Scripts/Road.gd b/Scripts/Road.gd index e0b69a1..4b19c70 100644 --- a/Scripts/Road.gd +++ b/Scripts/Road.gd @@ -1,18 +1,20 @@ extends Line2D -var epsilon = 20 +var epsilon = 2 + +@onready var leftBorder = $LeftBorder +@onready var rightBorder = $RightBorder # Called when the node enters the scene tree for the first time. func _ready(): pass # Replace with function body. - # Called every frame. 'delta' is the elapsed time since the previous frame. func _process(delta): pass func simplify(): - points = simplify_rec(points, 5) + points = simplify_rec(points, epsilon) func simplify_rec(pointArray: PackedVector2Array, epsilon: float): var dmax = 0 @@ -46,3 +48,35 @@ func find_perpendicular_distance(p: Vector2, p1: Vector2, p2: Vector2): result = abs(slope * p.x - p.y + intercept) / sqrt(pow(slope, 2) + 1) return result + +func get_bisector(left_side: bool, p2: Vector2, p1: Vector2 = p2, p3: Vector2 = p2): + var v1 = (p2 - p1).normalized() + var v2 = (p2 - p3).normalized() + var normal + if v1 == -v2: + normal = v2.rotated(-PI/2) + else: + normal = (v1 + v2).normalized() + if v2.rotated(-PI/2).dot(v1) < 0: + normal = -normal + + if left_side: + normal = -normal + return normal + + +func draw_borders(): + for pointIndex in range(0, points.size() - 1): + var normal + if pointIndex == 0: + continue + elif pointIndex == points.size() -1: + continue + #normal = Vector2.ZERO + else: + normal = get_bisector(true, points[pointIndex], points[pointIndex-1], points[pointIndex+1]) + + var point = points[pointIndex] + (normal*50) + leftBorder.add_point(point) + point = points[pointIndex] - (normal*50) + rightBorder.add_point(point) -- cgit