forked from juddrgledhill/godot-dashed-line
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdashed_line.gd
More file actions
69 lines (53 loc) · 1.78 KB
/
Copy pathdashed_line.gd
File metadata and controls
69 lines (53 loc) · 1.78 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
tool
extends Node2D
export var point_a: = Vector2(-50.0, 0.0)
export var point_b: = Vector2(50.0, 0.0)
export var color: = Color(1, 1, 1, 1)
export var width: = 5.0
export var dash_length: = 5.0
export var cap_end: = false
export var antialiased: bool = false
func _process(_delta: float) -> void:
update()
func _draw() -> void:
draw_set_transform_matrix(transform.inverse())
var length = (point_b - point_a).length()
var normal = (point_b - point_a).normalized()
var dash_step = normal * dash_length
# If not long enough point_b dash, draw a line then return.
if length < dash_length:
draw_line(point_a, point_b, color, width, antialiased)
return
else:
var draw_flag = true
var segment_start = point_a
var steps = length/dash_length
for _start_length in range(0, steps + 1):
var segment_end = segment_start + dash_step
if draw_flag:
draw_line(segment_start, segment_end, color, width, antialiased)
segment_start = segment_end
draw_flag = !draw_flag
if cap_end:
draw_line(segment_start, point_b, color, width, antialiased)
# The following code is more efficient but does not yet work as the
# draw_multiline function is unfinished.
# draw_set_transform_matrix(transform.inverse())
# var length = (point_b - point_a).length()
# var normal = (point_b - point_a).normalized()
# var dash_step = normal * dash_length
# # If not long enough point_b dash, draw a line then return.
# if length < dash_length:
# draw_line(point_a, point_b, color, width, antialiased)
# return
# else:
# var point = point_a
# var steps = length/dash_length
# var points: = []
# for _start_length in range(0, steps + 1):
# points.append(point)
# point += dash_step
# if cap_end:
# points.append(point)
# points.append(point_b)
# draw_multiline(points, color, width, antialiased)