forked from MRC-CSO-SPHSU/LoneParentsModel.jl
-
Notifications
You must be signed in to change notification settings - Fork 0
/
mainGui.jl
104 lines (79 loc) · 2.84 KB
/
mainGui.jl
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
93
94
95
96
97
98
99
100
101
102
103
104
using Raylib
using Raylib: rayvector
# make this less annoying
const RL = Raylib
include("lpm.jl")
include("src/RayGUI/render.jl")
include("src/RayGUI/SimpleGraph.jl")
using .SimpleGraph
function main(parOverrides...)
args = copy(ARGS)
for pov in parOverrides
push!(args, string(pov))
end
# need to do that first, otherwise it blocks the GUI
simPars, pars, args = loadParameters(args,
["--gui-scale"],
Dict(:help => "set gui scale", :default => 1.0, :arg_type => Float64))
model = setupModel(pars)
logfile = setupLogging(simPars)
scale = args[:gui_scale]
screenWidth = floor(Int, 1600 * scale)
screenHeight = floor(Int, 900 * scale)
RL.InitWindow(screenWidth, screenHeight, "this is a test")
RL.SetTargetFPS(30)
camera = RL.RayCamera2D(
rayvector(screenWidth/2, screenHeight/2),
rayvector(screenWidth/2, screenHeight/2),
#rayvector(500, 500),
0,
1
)
# create graph objects with colour
graph_pop = Graph{Float64}(RL.BLUE)
graph_hhs = Graph{Float64}(RL.WHITE)
graph_marr = Graph{Float64}(RL.BLACK)
graph_age = Graph{Float64}(RL.RED)
pause = false
time = Rational(simPars.startTime)
while !RL.WindowShouldClose()
if !pause && time <= simPars.finishTime
stepModel!(model, time, simPars, pars)
time += simPars.dt
data = observe(Data, model)
log_results(logfile, data)
# add values to graph objects
add_value!(graph_pop, data.alive.n)
add_value!(graph_hhs, data.hh_size.mean)
add_value!(graph_marr, data.married.n)
set_data!(graph_age, data.hist_age.bins, minm=0)
println(data.hh_size.max, " ", data.alive.n, " ", data.eligible.n, " ", data.eligible2.n)
end
if RL.IsKeyPressed(Raylib.KEY_SPACE)
pause = !pause
sleep(0.2)
end
RL.BeginDrawing()
RL.ClearBackground(RL.LIGHTGRAY)
RL.BeginMode2D(camera)
drawModel(model, (0, 0),
(floor(Int, 50 * scale), floor(Int, 50 * scale)),
(floor(Int, 2 * scale), floor(Int, 2 * scale)))
RL.EndMode2D()
# draw graphs
draw_graph(floor(Int, screenWidth/3), 0, floor(Int, screenWidth*2/3), screenHeight,
[graph_pop, graph_hhs, graph_marr, graph_age],
single_scale = false,
labels = ["#alive", "hh size", "#married", "age"],
fontsize = floor(Int, 15 * scale))
RL.DrawText("$(Float64(time))", 0,
screenHeight - floor(Int, 20 * scale),
floor(Int, 20 * scale), RL.BLACK)
RL.EndDrawing()
end
RL.CloseWindow()
close(logfile)
end
if ! isinteractive()
main()
end