diff options
Diffstat (limited to '')
-rw-r--r-- | Scripts/Road.gd | 82 | ||||
-rw-r--r-- | Scripts/drawing.gd | 6 |
2 files changed, 1 insertions, 87 deletions
diff --git a/Scripts/Road.gd b/Scripts/Road.gd deleted file mode 100644 index 4b19c70..0000000 --- a/Scripts/Road.gd +++ /dev/null @@ -1,82 +0,0 @@ -extends Line2D - -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, epsilon) - -func simplify_rec(pointArray: PackedVector2Array, epsilon: float): - var dmax = 0 - var index = -1 - if pointArray.size() < 3: - return pointArray - var end = pointArray.size() - 1 - for i in range(1, end-1): - var d = find_perpendicular_distance(pointArray[i], pointArray[0], pointArray[end]) - if d > dmax: - index = i - dmax = d - - if dmax > epsilon: - var recResults1 = simplify_rec(pointArray.slice(0, index), epsilon) - var recResults2 = simplify_rec(pointArray.slice(index, end), epsilon) - recResults1.append_array(recResults2) - return recResults1 - else: - return [pointArray[0], pointArray[end]] - -func find_perpendicular_distance(p: Vector2, p1: Vector2, p2: Vector2): - var result - var slope - var intercept - if p1.x == p2.x: - result = p.x - p1.x - else: - slope = (p2.y - p1.y) / (p2.x - p1.x) - intercept = p1.y - (slope * p1.x) - 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) diff --git a/Scripts/drawing.gd b/Scripts/drawing.gd index 6b94f6e..832c42d 100644 --- a/Scripts/drawing.gd +++ b/Scripts/drawing.gd @@ -2,7 +2,7 @@ extends Node var drawing = false -@onready var line = $Road +@onready var line: Line2D = $TrackLine @onready var path: Path2D = $TrackPath func _ready(): @@ -16,10 +16,6 @@ func start_drawing(): func _end_drawing(): drawing = false - line.simplify() - line.draw_borders() - for point in line.points: - path.curve.add_point(point) owner.set_driving(true) |