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
extends Node
var last_update = 0
class Need:
var value = 100
var ok_value = 10
var decline_every = 1
var decline_sleep = 5
var counter = 0
func _init(decline_every_arg, ok_value_arg):
decline_every = decline_every_arg
decline_sleep = decline_every_arg * 4
ok_value = ok_value_arg
func update(seconds_passed, sleeping):
counter += seconds_passed
if sleeping and counter > decline_sleep:
counter -= decline_sleep
value = max(0, value - 1)
elif counter > decline_every:
counter -= decline_every
value = max(0, value - 1)
func modify(delta):
value = clamp(value + delta,0, 100)
func is_ok():
return value > ok_value
func serialize():
return {"value":value, "ok_value": ok_value, "decline_every":decline_every, "decline_sleep":decline_sleep, "counter":counter}
var food = Need.new(567, 50) # (4*HOUR) / 25 (loses)
var sleep = Need.new(180, 10) # (12*HOUR) / 80 (loses)
var social = Need.new(800, 35)
var fun = Need.new(700, 40)
var hygiene = Need.new(700, 20)
var joy = Need.new(900, 10)
func _ready():
pass # Replace with function body.
func needs_dict():
return {"food":food,"sleep":sleep,"social":social,"fun":fun,"hygiene":hygiene,"joy":joy}
func needs():
return [food,sleep,social,fun,hygiene,joy]
func joy_needs():
return [food,sleep,social,fun,hygiene]
func _process(_delta):
var now = OS.get_unix_time()
simulate(now)
func simulate(now):
if last_update == 0:
last_update = now
else:
var diff = now - last_update
if diff > 0:
for n in needs():
n.update(diff, false)
last_update = now
# modify joy
var all_ok = true
for n in joy_needs():
all_ok = all_ok && n.is_ok()
if all_ok:
joy.update(-(diff*2), false)
elif diff < 0:
printerr("negative time travel? diff:" + diff)
last_update = now
func simulate_away_time(now):
while last_update < now:
var step = last_update + Global.HOUR
if step > now:
step = now
simulate(step)
func serialize():
var dict = needs_dict()
var serialized_dict = {}
for k in dict.keys():
serialized_dict[k] = dict.get(k).serialize()
return {"needs": serialized_dict, "last_update": last_update}