extends VBoxContainer const TimeSlot = preload("res://scenes/board/time_slot.tscn") const ReservationScene = preload("res://scenes/board/reservation.tscn") const ReservationIndent = preload("res://scenes/board/reservation_indent.tscn") const WorkingDayStart = 8 const WorkingDayEnd = 21 const MinimalMinutesToShowTitle = 30 const MockedSchedule = [ { "title": "Психолог", "start_time": 120, "end_time": 180, "color": 1 }, { "title": "Дипал", "start_time": 180, "end_time": 210, "color": 2 }, { "title": "Маркетинг", "start_time": 280, "end_time": 325, "color": 3 } ] @onready var _main: Main = get_tree().get_current_scene() @onready var _timeline = $Panel/Timeline @onready var _reservations = $Panel/Reservations func _ready(): _remove_time_slots() _remove_reservations() _fill_with_slots() _update_schedule() func _remove_time_slots(): for time_slot in _timeline.get_children(): time_slot.queue_free() func _fill_with_slots(): for hour in range(WorkingDayStart, WorkingDayEnd): var slot = TimeSlot.instantiate() _timeline.add_child(slot) slot.set_time(hour) func _remove_reservations(): for reservation in _reservations.get_children(): reservation.queue_free() func _update_schedule(): if not _main.is_node_ready(): await _main.ready var repo = _main.get_reservation_repo() var previous_finish_time = 0 for reservation in repo.list_reservations(): var start_time_hours = reservation.start_time['hours'] var start_time_minutes = reservation.start_time['minutes'] var start_time = (start_time_hours - WorkingDayStart)*60 + start_time_minutes var finish_time_hours = reservation.finish_time['hours'] var finish_time_minutes = reservation.finish_time['minutes'] var finish_time = (finish_time_hours - WorkingDayStart)*60 + finish_time_minutes var reservation_time = finish_time - start_time _compose_indent(start_time - previous_finish_time) _compose_reservation(reservation_time, reservation.title, reservation.color) previous_finish_time = finish_time func _compose_indent(minutes): var indent = ReservationIndent.instantiate() _reservations.add_child(indent) indent.set_minutes(minutes) func _compose_reservation(minutes, title, color): if minutes <= MinimalMinutesToShowTitle: title = "" var reservation = ReservationScene.instantiate() _reservations.add_child(reservation) reservation.set_minutes(minutes) reservation.set_title(title) reservation.set_color(color) func _input(event): if event is InputEventScreenTouch or (event is InputEventMouseButton and event.pressed): if _clicked_on_timeline(event.position): await get_tree().create_timer(0.01, false).timeout if _main.get_current_page() == Main.Pages.Board: _main.load_page(Main.Pages.ReservationCreation) func _clicked_on_timeline(pos: Vector2): var timeline_position = _timeline.global_position return ( pos.x > timeline_position.x and pos.x < _timeline.size.x + timeline_position.x ) and ( pos.y > timeline_position.y and pos.y < _timeline.size.y + timeline_position.y ) func _on_room_button_pressed(): print("emit change room signal") func _on_date_button_pressed(): print("emit change date signal") func update(): _ready()