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