Skip to content

Commit 30aa795

Browse files
Make event lines drawn by TimelineArea (#785)
This means they will also be drawn if the event moves out of view.
1 parent 6e4137a commit 30aa795

File tree

3 files changed

+128
-118
lines changed

3 files changed

+128
-118
lines changed

addons/dialogic/Editor/Events/Templates/EventBlock.gd

Lines changed: 0 additions & 118 deletions
Original file line numberDiff line numberDiff line change
@@ -299,121 +299,3 @@ func _ready():
299299
set_expanded(expand_on_default)
300300

301301
_on_Indent_visibility_changed()
302-
303-
func _draw():
304-
var timeline_children = get_parent().get_children()
305-
var timeline_lenght = timeline_children.size()
306-
var line_color = Color("#4D4D4D")
307-
var test_color = Color(1,0,0,0.5)
308-
var _scale = DialogicUtil.get_editor_scale(self)
309-
var line_width = 3 * _scale
310-
var pos_x = (27 * _scale)
311-
var pos_y = 46 * _scale
312-
313-
# Adjusting the pos_x. Not sure why it is not consistent between render scales
314-
if _scale == 1.5:
315-
pos_x -= 3
316-
if _scale == 1.75:
317-
pos_x -= 4
318-
if _scale == 2:
319-
pos_x -= 6
320-
321-
# If the event is the last one, don't draw anything aftwards
322-
if timeline_children[timeline_lenght-1] == self:
323-
return
324-
325-
# Drawing long lines on questions and conditions
326-
if event_name == 'Question' or event_name == 'Condition':
327-
var keep_going = true
328-
var end_reference
329-
for e in timeline_children:
330-
if keep_going:
331-
if e.get_index() > get_index():
332-
if e.current_indent_level == current_indent_level:
333-
if e.event_name == 'End Branch':
334-
end_reference = e
335-
keep_going = false
336-
if e.event_name == 'Question' or event_name == 'Condition':
337-
keep_going = false
338-
if keep_going == false:
339-
if end_reference:
340-
# This line_size thing should be fixed, not sure why it is different when
341-
# the indent level is 0 and when it is bigger.
342-
var line_size = 0
343-
if current_indent_level > 0:
344-
line_size = (indent_size * current_indent_level) + (4 * _scale)
345-
# end the line_size thingy
346-
347-
# Drawing the line from the Question/Condition node to the End Branch one.
348-
draw_rect(Rect2(
349-
Vector2(pos_x + line_size , pos_y),
350-
Vector2(line_width, (end_reference.rect_global_position.y - rect_global_position.y) - (43 * _scale))
351-
),
352-
line_color, true)
353-
354-
# Drawing other lines and archs
355-
var next_event = timeline_children[get_index() + 1]
356-
if current_indent_level > 0:
357-
# Line at current indent
358-
var line_size = (indent_size * current_indent_level) + (4 * _scale)
359-
if next_event.event_name != 'End Branch' and event_name != 'Choice':
360-
if event_name != 'Question' and next_event.event_name == 'Choice':
361-
# Skip drawing lines before going to the next choice
362-
pass
363-
else:
364-
draw_rect(Rect2(
365-
Vector2(pos_x + line_size , pos_y),
366-
Vector2(line_width, rect_size.y - (40 * _scale))
367-
),
368-
line_color,
369-
true)
370-
else:
371-
# Root (level 0) Vertical Line
372-
draw_rect(Rect2(Vector2(pos_x, pos_y),
373-
Vector2(line_width, rect_size.y - (40 * _scale))),
374-
line_color,
375-
true)
376-
377-
# Drawing arc
378-
if event_name == 'Choice':
379-
# Connecting with the question
380-
var arc_start_x = (indent_size * (current_indent_level)) + (11.2 * _scale)
381-
var arc_start_y = 0
382-
var arc_point_count = 12 * _scale
383-
var arc_radius = 24 * _scale
384-
var start_angle = 90
385-
var end_angle = 185
386-
387-
if current_indent_level == 1:
388-
arc_start_x = (indent_size * (current_indent_level)) + (7.5 * _scale)
389-
390-
draw_arc(
391-
Vector2(arc_start_x, arc_start_y),
392-
arc_radius,
393-
deg2rad(start_angle),
394-
deg2rad(end_angle),
395-
arc_point_count, #point count
396-
line_color,
397-
line_width - (1 * _scale),
398-
true
399-
)
400-
401-
# Don't draw arc if next event is another choice event
402-
if next_event.event_name == "Choice" or next_event.event_name == "End Branch":
403-
return
404-
405-
# Connecting with the next event
406-
407-
arc_start_x = (indent_size * (current_indent_level + 1)) + (10 * _scale)
408-
arc_start_y = (pos_y + (8 * _scale))
409-
410-
draw_arc(
411-
Vector2(arc_start_x, arc_start_y),
412-
arc_radius,
413-
deg2rad(start_angle),
414-
deg2rad(end_angle),
415-
arc_point_count,
416-
line_color,
417-
line_width - (1 * _scale),
418-
true
419-
)

addons/dialogic/Editor/TimelineEditor/TimelineArea.gd

Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,3 +69,127 @@ func _on_gui_input(event):
6969
if (_last_event_button_drop_attempt != ''):
7070
drop_data(Vector2.ZERO, { "source": "EventButton", "event_id": _last_event_button_drop_attempt} )
7171
_is_drag_receiving = false
72+
73+
func _draw():
74+
var timeline_children = $TimeLine.get_children()
75+
var timeline_lenght = timeline_children.size()
76+
var line_color = Color("#4D4D4D")
77+
var test_color = Color(1,0,0,0.5)
78+
var _scale = DialogicUtil.get_editor_scale(self)
79+
var line_width = 3 * _scale
80+
var pos_x = (32 * _scale)
81+
var pos_y = 51 * _scale
82+
83+
# Adjusting the pos_x. Not sure why it is not consistent between render scales
84+
if _scale == 1.5:
85+
pos_x -= 3
86+
if _scale == 1.75:
87+
pos_x -= 4
88+
if _scale == 2:
89+
pos_x -= 6
90+
91+
for event in $TimeLine.get_children():
92+
if not 'event_data' in event:
93+
continue
94+
95+
# If the event is the last one, don't draw anything aftwards
96+
if timeline_children[timeline_lenght-1] == event:
97+
return
98+
99+
# Drawing long lines on questions and conditions
100+
if event.event_name == 'Question' or event.event_name == 'Condition':
101+
var keep_going = true
102+
var end_reference
103+
for e in timeline_children:
104+
if keep_going:
105+
if e.get_index() > event.get_index():
106+
if e.current_indent_level == event.current_indent_level:
107+
if e.event_name == 'End Branch':
108+
end_reference = e
109+
keep_going = false
110+
if e.event_name == 'Question' or event.event_name == 'Condition':
111+
keep_going = false
112+
if keep_going == false:
113+
if end_reference:
114+
# This line_size thing should be fixed, not sure why it is different when
115+
# the indent level is 0 and when it is bigger.
116+
var line_size = 0
117+
if event.current_indent_level > 0:
118+
line_size = (event.indent_size * event.current_indent_level) + (4 * _scale)
119+
# end the line_size thingy
120+
121+
# Drawing the line from the Question/Condition node to the End Branch one.
122+
draw_rect(Rect2(
123+
Vector2(pos_x + line_size , pos_y-scroll_vertical)+event.rect_position,
124+
Vector2(line_width, (end_reference.rect_global_position.y - event.rect_global_position.y) - (43 * _scale))
125+
),
126+
line_color, true)
127+
128+
# Drawing other lines and archs
129+
var next_event = timeline_children[event.get_index() + 1]
130+
if event.current_indent_level > 0:
131+
# Line at current indent
132+
var line_size = (event.indent_size * event.current_indent_level) + (4 * _scale)
133+
if next_event.event_name != 'End Branch' and event.event_name != 'Choice':
134+
if event.event_name != 'Question' and next_event.event_name == 'Choice':
135+
# Skip drawing lines before going to the next choice
136+
pass
137+
else:
138+
draw_rect(Rect2(
139+
Vector2(pos_x + line_size , pos_y-scroll_vertical)+event.rect_position,
140+
Vector2(line_width, event.rect_size.y - (40 * _scale))
141+
),
142+
line_color,
143+
true)
144+
else:
145+
# Root (level 0) Vertical Line
146+
draw_rect(Rect2(
147+
Vector2(pos_x, pos_y-scroll_vertical)+event.rect_position,
148+
Vector2(line_width, event.rect_size.y - (40 * _scale))
149+
),
150+
line_color,
151+
true)
152+
153+
# Drawing arc
154+
if event.event_name == 'Choice':
155+
# Connecting with the question
156+
var arc_start_x = (event.indent_size * (event.current_indent_level)) + (16.2 * _scale)
157+
var arc_start_y = 5
158+
var arc_point_count = 12 * _scale
159+
var arc_radius = 24 * _scale
160+
var start_angle = 90
161+
var end_angle = 185
162+
163+
if event.current_indent_level == 1:
164+
arc_start_x = (event.indent_size * (event.current_indent_level)) + (7.5 * _scale)
165+
166+
draw_arc(
167+
Vector2(arc_start_x, arc_start_y-scroll_vertical)+event.rect_position,
168+
arc_radius,
169+
deg2rad(start_angle),
170+
deg2rad(end_angle),
171+
arc_point_count, #point count
172+
line_color,
173+
line_width - (1 * _scale),
174+
true
175+
)
176+
177+
# Don't draw arc if next event is another choice event
178+
if next_event.event_name == "Choice" or next_event.event_name == "End Branch":
179+
return
180+
181+
# Connecting with the next event
182+
183+
arc_start_x = (event.indent_size * (event.current_indent_level + 1)) + (16 * _scale)
184+
arc_start_y = (pos_y + (8 * _scale))
185+
186+
draw_arc(
187+
Vector2(arc_start_x, arc_start_y-scroll_vertical)+event.rect_position,
188+
arc_radius,
189+
deg2rad(start_angle),
190+
deg2rad(end_angle),
191+
arc_point_count,
192+
line_color,
193+
line_width - (1 * _scale),
194+
true
195+
)

addons/dialogic/Editor/TimelineEditor/TimelineEditor.gd

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -777,6 +777,7 @@ func drop_event():
777777
piece_was_dragged = false
778778
indent_events()
779779
add_extra_scroll_area_to_timeline()
780+
780781

781782

782783
func cancel_drop_event():
@@ -933,9 +934,11 @@ func move_block(block, direction):
933934
if direction == 'up':
934935
if block_index > 0:
935936
timeline.move_child(block, block_index - 1)
937+
$TimelineArea.update()
936938
return true
937939
if direction == 'down':
938940
timeline.move_child(block, block_index + 1)
941+
$TimelineArea.update()
939942
return true
940943
return false
941944

@@ -1055,6 +1058,7 @@ func indent_events() -> void:
10551058
else:
10561059
event.set_indent(indent)
10571060
starter = false
1061+
$TimelineArea.update()
10581062

10591063

10601064
# called from the toolbar

0 commit comments

Comments
 (0)