Finalize audio clip movement, fix being able to drag audio clips out of bounds.
This commit is contained in:
@@ -15,6 +15,9 @@ var timeline: Timeline
|
|||||||
var dragging: bool
|
var dragging: bool
|
||||||
var selected: bool
|
var selected: bool
|
||||||
|
|
||||||
|
var accumulated_movement := 0.0
|
||||||
|
var was_snapping := false
|
||||||
|
|
||||||
func _ready():
|
func _ready():
|
||||||
timeline = get_parent()
|
timeline = get_parent()
|
||||||
%ClipName.text = clip_name
|
%ClipName.text = clip_name
|
||||||
@@ -50,10 +53,7 @@ func _input(event):
|
|||||||
|
|
||||||
if selected and dragging:
|
if selected and dragging:
|
||||||
if event is InputEventMouseMotion:
|
if event is InputEventMouseMotion:
|
||||||
var movement = event.relative / timeline.get_pixels_per_unit() * timeline.time_interval
|
var movement_time = event.relative.x / timeline.get_pixels_per_unit() * timeline.time_interval
|
||||||
|
|
||||||
var mouse_position_timeline = (timeline.get_local_mouse_position().x / timeline.get_pixels_per_unit()) * timeline.time_interval
|
|
||||||
var mouse_position_snapped = snapped(mouse_position_timeline, timeline.time_interval)
|
|
||||||
|
|
||||||
var track = timeline.get_track_idx_by_y(event.position.y)
|
var track = timeline.get_track_idx_by_y(event.position.y)
|
||||||
|
|
||||||
@@ -61,12 +61,28 @@ func _input(event):
|
|||||||
track_idx = track
|
track_idx = track
|
||||||
|
|
||||||
if event.is_command_or_control_pressed():
|
if event.is_command_or_control_pressed():
|
||||||
var clip_length = end_time - start_time
|
if not was_snapping:
|
||||||
start_time = mouse_position_snapped
|
var clip_length = end_time - start_time
|
||||||
end_time = start_time + clip_length
|
start_time = snapped(start_time, timeline.time_interval)
|
||||||
|
end_time = start_time + clip_length
|
||||||
|
accumulated_movement = 0
|
||||||
|
was_snapping = true
|
||||||
|
|
||||||
|
accumulated_movement += movement_time
|
||||||
|
var snapped_movement = snapped(accumulated_movement, timeline.time_interval)
|
||||||
|
|
||||||
|
if snapped_movement != 0:
|
||||||
|
if start_time + snapped_movement < 0:
|
||||||
|
return
|
||||||
|
start_time += snapped_movement
|
||||||
|
end_time += snapped_movement
|
||||||
|
accumulated_movement -= snapped_movement
|
||||||
else:
|
else:
|
||||||
start_time += movement.x
|
if start_time + movement_time < 0:
|
||||||
end_time += movement.x
|
return
|
||||||
|
start_time += movement_time
|
||||||
|
end_time += movement_time
|
||||||
|
was_snapping = false
|
||||||
|
|
||||||
timeline.queue_sort()
|
timeline.queue_sort()
|
||||||
pass
|
pass
|
||||||
|
|||||||
@@ -35,6 +35,11 @@ func format_time_ms_minutes(ms: float) -> String:
|
|||||||
var milliseconds = fmod(ms, 1000.0)
|
var milliseconds = fmod(ms, 1000.0)
|
||||||
return "%02d:%02d.%03d" % [minutes, seconds, milliseconds]
|
return "%02d:%02d.%03d" % [minutes, seconds, milliseconds]
|
||||||
|
|
||||||
|
func _ready():
|
||||||
|
await get_tree().process_frame
|
||||||
|
queue_redraw()
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
func get_track_idx_by_y(y: float):
|
func get_track_idx_by_y(y: float):
|
||||||
var idx = 0
|
var idx = 0
|
||||||
@@ -133,14 +138,13 @@ func _gui_input(event):
|
|||||||
time_offset = max(0.0, time_offset)
|
time_offset = max(0.0, time_offset)
|
||||||
|
|
||||||
func local_x_to_timeline(x: float) -> float:
|
func local_x_to_timeline(x: float) -> float:
|
||||||
return (x / get_pixels_per_unit()) * time_interval + time_offset
|
return (x + time_offset) / get_pixels_per_unit() * time_interval
|
||||||
|
|
||||||
|
|
||||||
func clip_dropped(at_position: Vector2, clip_name: String, clip_start_time: float, clip_end_time: float):
|
func clip_dropped(at_position: Vector2, clip_name: String, clip_start_time: float, clip_end_time: float):
|
||||||
var local_position = at_position - global_position
|
var local_position = at_position - global_position
|
||||||
var timeline_position = local_x_to_timeline(local_position.x)
|
var timeline_position = local_x_to_timeline(local_position.x)
|
||||||
print(timeline_position)
|
|
||||||
print(time_offset)
|
|
||||||
var track_idx = get_track_idx_by_y(at_position.y)
|
var track_idx = get_track_idx_by_y(at_position.y)
|
||||||
add_audio_clip(clip_name, track_idx, timeline_position + clip_start_time, timeline_position + clip_end_time)
|
add_audio_clip(clip_name, track_idx, timeline_position + clip_start_time, timeline_position + clip_end_time)
|
||||||
pass
|
pass
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ layout_mode = 2
|
|||||||
script = null
|
script = null
|
||||||
|
|
||||||
[node name="Track2" parent="VBoxContainer/TrackList" instance=ExtResource("1_ueogm")]
|
[node name="Track2" parent="VBoxContainer/TrackList" instance=ExtResource("1_ueogm")]
|
||||||
|
custom_minimum_size = Vector2(128, 74)
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
script = null
|
script = null
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user