root/ui/schedule.gd

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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
extends HBoxContainer

const Entry = preload("res://ui/schedule_entry.tscn")
signal request_save

class TimeFrame:
	var start_hour = 0
	var end_hour = 2
	var activity = "house"
	func serialize():
		return {"start_hour": start_hour, "end_hour": end_hour, "activity":activity}

var time_frames = []

func _ready():
	self.visible = false
	var _e = $right_buttons/close_button.connect("pressed", self, "close")
	pass
	
func open_with(_schedule):
	if self.visible:
		close()
		return
	var set_activity_ui = $"../set_activity"
	if set_activity_ui.visible:
		set_activity_ui.disconnect("activity_set", self, "activity_changed")
		set_activity_ui.disconnect("closed", self, "activity_set_ui_closed")
		set_activity_ui.close()
		close()
		return
	if time_frames.empty():
		generate()
	make_entries()
	self.visible = true

func generate():
	for h in range(12):
		var tf = TimeFrame.new()
		tf.start_hour = h*2
		tf.end_hour = (h*2)+2
		if tf.start_hour >= 20 or tf.start_hour < 8:
			tf.activity = "sleep"
		if tf.start_hour == 8 or tf.start_hour == 12 or tf.start_hour == 18:
			tf.activity = "food"
		time_frames.push_back(tf)
		
func make_entries():
	time_frames.sort_custom(self, "sort_schedule")
	var entries = $entries_scroll/entries
	for tf in time_frames:
		var entry = Entry.instance()
		entry.set_time_frame(tf)
		entry.connect("pressed", self, "entry_pressed", [tf])
		entries.add_child(entry)
	
func sort_schedule(a, b):
	if a.start_hour < 8 and b.start_hour < 8: return a.start_hour < b.start_hour
	if a.start_hour < 8: return false
	if b.start_hour < 8: return true
	return a.start_hour < b.start_hour

func entry_pressed(time_frame):
	var set_activity_ui = $"../set_activity"
	set_activity_ui.open_with(time_frame)
	set_activity_ui.connect("activity_set", self, "activity_changed", [time_frame])
	set_activity_ui.connect("closed", self, "activity_set_ui_closed")
	self.visible = false
	
func activity_changed(a, time_frame):
	var entries = $entries_scroll/entries
	for e in entries.get_children():
		if e.time_frame and e.time_frame.start_hour == time_frame.start_hour:
			e.set_activity(a)
			time_frame.activity = a
	emit_signal("request_save")

func activity_set_ui_closed():
	var set_activity_ui = $"../set_activity"
	set_activity_ui.disconnect("activity_set", self, "activity_changed")
	self.visible = true

func close():
	self.visible = false
	var entries = $entries_scroll/entries
	for c in entries.get_children():
		entries.remove_child(c)

func serialize():
	var serialized = []
	for tf in time_frames:
		serialized.push_back(tf.serialize())
	return serialized