forked from DylanWRh/Billiard-OpenGL
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathclass_graph.drawio
315 lines (315 loc) · 35.4 KB
/
class_graph.drawio
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
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
<mxfile host="app.diagrams.net" modified="2024-06-06T18:53:59.371Z" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36 Edg/125.0.0.0" etag="zxVp3rB-xRyF1qrVFV84" version="24.5.0" type="device">
<diagram id="C5RBs43oDa-KdzZeNtuy" name="Page-1">
<mxGraphModel dx="2201" dy="1014" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
<root>
<mxCell id="WIyWlLk6GJQsqaUBKTNV-0" />
<mxCell id="WIyWlLk6GJQsqaUBKTNV-1" parent="WIyWlLk6GJQsqaUBKTNV-0" />
<mxCell id="zkfFHV4jXpPFQw0GAbJ--0" value="Game
" style="swimlane;fontStyle=0;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeLast=0;collapsible=1;marginBottom=0;rounded=0;shadow=0;strokeWidth=1;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
<mxGeometry x="270" y="120" width="240" height="476" as="geometry">
<mxRectangle x="230" y="140" width="160" height="26" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="zkfFHV4jXpPFQw0GAbJ--1" value="+ gameState : GameLevel" style="text;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" parent="zkfFHV4jXpPFQw0GAbJ--0" vertex="1">
<mxGeometry y="26" width="240" height="26" as="geometry" />
</mxCell>
<mxCell id="zkfFHV4jXpPFQw0GAbJ--2" value="+ cur_player : int" style="text;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rounded=0;shadow=0;html=0;" parent="zkfFHV4jXpPFQw0GAbJ--0" vertex="1">
<mxGeometry y="52" width="240" height="26" as="geometry" />
</mxCell>
<mxCell id="zkfFHV4jXpPFQw0GAbJ--3" value="+ winner : int" style="text;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rounded=0;shadow=0;html=0;" parent="zkfFHV4jXpPFQw0GAbJ--0" vertex="1">
<mxGeometry y="78" width="240" height="26" as="geometry" />
</mxCell>
<mxCell id="y6SRsqsE3hqU43LzUjNm-7" value="+ table : Table" style="text;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rounded=0;shadow=0;html=0;" vertex="1" parent="zkfFHV4jXpPFQw0GAbJ--0">
<mxGeometry y="104" width="240" height="26" as="geometry" />
</mxCell>
<mxCell id="y6SRsqsE3hqU43LzUjNm-8" value="+ balls : Balls" style="text;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rounded=0;shadow=0;html=0;" vertex="1" parent="zkfFHV4jXpPFQw0GAbJ--0">
<mxGeometry y="130" width="240" height="26" as="geometry" />
</mxCell>
<mxCell id="y6SRsqsE3hqU43LzUjNm-9" value="+ worldTime : GameWorldTime" style="text;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rounded=0;shadow=0;html=0;" vertex="1" parent="zkfFHV4jXpPFQw0GAbJ--0">
<mxGeometry y="156" width="240" height="26" as="geometry" />
</mxCell>
<mxCell id="y6SRsqsE3hqU43LzUjNm-10" value="+ program_start_time : TimePoint" style="text;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rounded=0;shadow=0;html=0;" vertex="1" parent="zkfFHV4jXpPFQw0GAbJ--0">
<mxGeometry y="182" width="240" height="26" as="geometry" />
</mxCell>
<mxCell id="y6SRsqsE3hqU43LzUjNm-11" value="+ last_time : GameWorldTime" style="text;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rounded=0;shadow=0;html=0;" vertex="1" parent="zkfFHV4jXpPFQw0GAbJ--0">
<mxGeometry y="208" width="240" height="26" as="geometry" />
</mxCell>
<mxCell id="y6SRsqsE3hqU43LzUjNm-17" value="+ mouse_clicker : bool" style="text;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rounded=0;shadow=0;html=0;" vertex="1" parent="zkfFHV4jXpPFQw0GAbJ--0">
<mxGeometry y="234" width="240" height="26" as="geometry" />
</mxCell>
<mxCell id="y6SRsqsE3hqU43LzUjNm-18" value="+ mouse_pos : Vector2" style="text;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rounded=0;shadow=0;html=0;" vertex="1" parent="zkfFHV4jXpPFQw0GAbJ--0">
<mxGeometry y="260" width="240" height="26" as="geometry" />
</mxCell>
<mxCell id="zkfFHV4jXpPFQw0GAbJ--4" value="" style="line;html=1;strokeWidth=1;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;" parent="zkfFHV4jXpPFQw0GAbJ--0" vertex="1">
<mxGeometry y="286" width="240" height="8" as="geometry" />
</mxCell>
<mxCell id="zkfFHV4jXpPFQw0GAbJ--5" value="+ Game(table : Table, balls : Balls)" style="text;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" parent="zkfFHV4jXpPFQw0GAbJ--0" vertex="1">
<mxGeometry y="294" width="240" height="26" as="geometry" />
</mxCell>
<mxCell id="y6SRsqsE3hqU43LzUjNm-25" value="+ initGame() : bool" style="text;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" vertex="1" parent="zkfFHV4jXpPFQw0GAbJ--0">
<mxGeometry y="320" width="240" height="26" as="geometry" />
</mxCell>
<mxCell id="y6SRsqsE3hqU43LzUjNm-23" value="+ updateState()" style="text;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" vertex="1" parent="zkfFHV4jXpPFQw0GAbJ--0">
<mxGeometry y="346" width="240" height="26" as="geometry" />
</mxCell>
<mxCell id="y6SRsqsE3hqU43LzUjNm-24" value="+ mouse_click()" style="text;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" vertex="1" parent="zkfFHV4jXpPFQw0GAbJ--0">
<mxGeometry y="372" width="240" height="26" as="geometry" />
</mxCell>
<mxCell id="y6SRsqsE3hqU43LzUjNm-28" value="+ judge() : int" style="text;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" vertex="1" parent="zkfFHV4jXpPFQw0GAbJ--0">
<mxGeometry y="398" width="240" height="26" as="geometry" />
</mxCell>
<mxCell id="y6SRsqsE3hqU43LzUjNm-27" value="+ render()" style="text;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" vertex="1" parent="zkfFHV4jXpPFQw0GAbJ--0">
<mxGeometry y="424" width="240" height="26" as="geometry" />
</mxCell>
<mxCell id="y6SRsqsE3hqU43LzUjNm-26" value="+ renderMouse()" style="text;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" vertex="1" parent="zkfFHV4jXpPFQw0GAbJ--0">
<mxGeometry y="450" width="240" height="26" as="geometry" />
</mxCell>
<mxCell id="zkfFHV4jXpPFQw0GAbJ--17" value="Table" style="swimlane;fontStyle=0;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeLast=0;collapsible=1;marginBottom=0;rounded=0;shadow=0;strokeWidth=1;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
<mxGeometry x="610" y="120" width="470" height="216" as="geometry">
<mxRectangle x="550" y="140" width="160" height="26" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="zkfFHV4jXpPFQw0GAbJ--18" value="+ n_corners : GLint" style="text;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" parent="zkfFHV4jXpPFQw0GAbJ--17" vertex="1">
<mxGeometry y="26" width="470" height="26" as="geometry" />
</mxCell>
<mxCell id="zkfFHV4jXpPFQw0GAbJ--19" value="+ n_holes : GLint" style="text;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rounded=0;shadow=0;html=0;" parent="zkfFHV4jXpPFQw0GAbJ--17" vertex="1">
<mxGeometry y="52" width="470" height="26" as="geometry" />
</mxCell>
<mxCell id="zkfFHV4jXpPFQw0GAbJ--20" value="+ corners : std::vector<Vector2>" style="text;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rounded=0;shadow=0;html=0;" parent="zkfFHV4jXpPFQw0GAbJ--17" vertex="1">
<mxGeometry y="78" width="470" height="26" as="geometry" />
</mxCell>
<mxCell id="zkfFHV4jXpPFQw0GAbJ--21" value="+ holes: std::vector<Vector2>" style="text;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rounded=0;shadow=0;html=0;" parent="zkfFHV4jXpPFQw0GAbJ--17" vertex="1">
<mxGeometry y="104" width="470" height="26" as="geometry" />
</mxCell>
<mxCell id="zkfFHV4jXpPFQw0GAbJ--23" value="" style="line;html=1;strokeWidth=1;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;" parent="zkfFHV4jXpPFQw0GAbJ--17" vertex="1">
<mxGeometry y="130" width="470" height="8" as="geometry" />
</mxCell>
<mxCell id="zkfFHV4jXpPFQw0GAbJ--24" value="+ Table(n_corners : GLint, n_holes : GLint, radius : GLdouble, max_r : GLdouble )" style="text;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" parent="zkfFHV4jXpPFQw0GAbJ--17" vertex="1">
<mxGeometry y="138" width="470" height="26" as="geometry" />
</mxCell>
<mxCell id="zkfFHV4jXpPFQw0GAbJ--25" value="+ checkInit() : int" style="text;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" parent="zkfFHV4jXpPFQw0GAbJ--17" vertex="1">
<mxGeometry y="164" width="470" height="26" as="geometry" />
</mxCell>
<mxCell id="y6SRsqsE3hqU43LzUjNm-38" value="+ render()" style="text;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" vertex="1" parent="zkfFHV4jXpPFQw0GAbJ--17">
<mxGeometry y="190" width="470" height="26" as="geometry" />
</mxCell>
<mxCell id="y6SRsqsE3hqU43LzUjNm-30" value="" style="endArrow=diamondThin;endFill=1;endSize=24;html=1;rounded=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="WIyWlLk6GJQsqaUBKTNV-1" source="zkfFHV4jXpPFQw0GAbJ--19" target="y6SRsqsE3hqU43LzUjNm-7">
<mxGeometry width="160" relative="1" as="geometry">
<mxPoint x="440" y="390" as="sourcePoint" />
<mxPoint x="600" y="390" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="y6SRsqsE3hqU43LzUjNm-31" value="1" style="text;strokeColor=none;align=center;fillColor=none;html=1;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="WIyWlLk6GJQsqaUBKTNV-1">
<mxGeometry x="510" y="200" width="20" height="20" as="geometry" />
</mxCell>
<mxCell id="y6SRsqsE3hqU43LzUjNm-34" value="1" style="text;strokeColor=none;align=center;fillColor=none;html=1;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="WIyWlLk6GJQsqaUBKTNV-1">
<mxGeometry x="590" y="350" width="20" height="20" as="geometry" />
</mxCell>
<mxCell id="y6SRsqsE3hqU43LzUjNm-39" value="Balls" style="swimlane;fontStyle=0;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeLast=0;collapsible=1;marginBottom=0;rounded=0;shadow=0;strokeWidth=1;" vertex="1" parent="WIyWlLk6GJQsqaUBKTNV-1">
<mxGeometry x="610" y="350" width="470" height="268" as="geometry">
<mxRectangle x="550" y="140" width="160" height="26" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="y6SRsqsE3hqU43LzUjNm-40" value="+ balls : std::vector<Ball>" style="text;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" vertex="1" parent="y6SRsqsE3hqU43LzUjNm-39">
<mxGeometry y="26" width="470" height="26" as="geometry" />
</mxCell>
<mxCell id="y6SRsqsE3hqU43LzUjNm-41" value="+ cue_pos : int" style="text;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rounded=0;shadow=0;html=0;" vertex="1" parent="y6SRsqsE3hqU43LzUjNm-39">
<mxGeometry y="52" width="470" height="26" as="geometry" />
</mxCell>
<mxCell id="y6SRsqsE3hqU43LzUjNm-42" value="+ black_pos : int" style="text;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rounded=0;shadow=0;html=0;" vertex="1" parent="y6SRsqsE3hqU43LzUjNm-39">
<mxGeometry y="78" width="470" height="26" as="geometry" />
</mxCell>
<mxCell id="y6SRsqsE3hqU43LzUjNm-43" value="+ first_hit_pos : int" style="text;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rounded=0;shadow=0;html=0;" vertex="1" parent="y6SRsqsE3hqU43LzUjNm-39">
<mxGeometry y="104" width="470" height="26" as="geometry" />
</mxCell>
<mxCell id="y6SRsqsE3hqU43LzUjNm-48" value="+ goals : std::vector<int>" style="text;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rounded=0;shadow=0;html=0;" vertex="1" parent="y6SRsqsE3hqU43LzUjNm-39">
<mxGeometry y="130" width="470" height="26" as="geometry" />
</mxCell>
<mxCell id="y6SRsqsE3hqU43LzUjNm-44" value="" style="line;html=1;strokeWidth=1;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;" vertex="1" parent="y6SRsqsE3hqU43LzUjNm-39">
<mxGeometry y="156" width="470" height="8" as="geometry" />
</mxCell>
<mxCell id="y6SRsqsE3hqU43LzUjNm-45" value="+ Balls(white_position : Vector2, center_of_triangle : Vector2)" style="text;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" vertex="1" parent="y6SRsqsE3hqU43LzUjNm-39">
<mxGeometry y="164" width="470" height="26" as="geometry" />
</mxCell>
<mxCell id="y6SRsqsE3hqU43LzUjNm-46" value="+ checkInit(table : Table) : int" style="text;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" vertex="1" parent="y6SRsqsE3hqU43LzUjNm-39">
<mxGeometry y="190" width="470" height="26" as="geometry" />
</mxCell>
<mxCell id="y6SRsqsE3hqU43LzUjNm-49" value="+ render()" style="text;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" vertex="1" parent="y6SRsqsE3hqU43LzUjNm-39">
<mxGeometry y="216" width="470" height="26" as="geometry" />
</mxCell>
<mxCell id="y6SRsqsE3hqU43LzUjNm-47" value="+ update() : bool" style="text;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" vertex="1" parent="y6SRsqsE3hqU43LzUjNm-39">
<mxGeometry y="242" width="470" height="26" as="geometry" />
</mxCell>
<mxCell id="y6SRsqsE3hqU43LzUjNm-50" value="" style="endArrow=diamondThin;endFill=1;endSize=24;html=1;rounded=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;exitX=0;exitY=0;exitDx=0;exitDy=0;" edge="1" parent="WIyWlLk6GJQsqaUBKTNV-1" source="y6SRsqsE3hqU43LzUjNm-39" target="y6SRsqsE3hqU43LzUjNm-8">
<mxGeometry width="160" relative="1" as="geometry">
<mxPoint x="600" y="556" as="sourcePoint" />
<mxPoint x="460" y="540" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="y6SRsqsE3hqU43LzUjNm-51" value="1" style="text;strokeColor=none;align=center;fillColor=none;html=1;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="WIyWlLk6GJQsqaUBKTNV-1">
<mxGeometry x="510" y="290" width="20" height="20" as="geometry" />
</mxCell>
<mxCell id="y6SRsqsE3hqU43LzUjNm-53" value="1" style="text;strokeColor=none;align=center;fillColor=none;html=1;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="WIyWlLk6GJQsqaUBKTNV-1">
<mxGeometry x="590" y="170" width="20" height="20" as="geometry" />
</mxCell>
<mxCell id="y6SRsqsE3hqU43LzUjNm-54" value="Ball" style="swimlane;fontStyle=0;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeLast=0;collapsible=1;marginBottom=0;rounded=0;shadow=0;strokeWidth=1;" vertex="1" parent="WIyWlLk6GJQsqaUBKTNV-1">
<mxGeometry x="500" y="640" width="430" height="346" as="geometry">
<mxRectangle x="550" y="140" width="160" height="26" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="y6SRsqsE3hqU43LzUjNm-55" value="+ m_inHole : bool" style="text;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" vertex="1" parent="y6SRsqsE3hqU43LzUjNm-54">
<mxGeometry y="26" width="430" height="26" as="geometry" />
</mxCell>
<mxCell id="y6SRsqsE3hqU43LzUjNm-56" value="+ m_position : Vector2" style="text;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rounded=0;shadow=0;html=0;" vertex="1" parent="y6SRsqsE3hqU43LzUjNm-54">
<mxGeometry y="52" width="430" height="26" as="geometry" />
</mxCell>
<mxCell id="y6SRsqsE3hqU43LzUjNm-57" value="+ m_velocity : Vector2" style="text;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rounded=0;shadow=0;html=0;" vertex="1" parent="y6SRsqsE3hqU43LzUjNm-54">
<mxGeometry y="78" width="430" height="26" as="geometry" />
</mxCell>
<mxCell id="y6SRsqsE3hqU43LzUjNm-58" value="+ m_angular_velocity : Vector3" style="text;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rounded=0;shadow=0;html=0;" vertex="1" parent="y6SRsqsE3hqU43LzUjNm-54">
<mxGeometry y="104" width="430" height="26" as="geometry" />
</mxCell>
<mxCell id="y6SRsqsE3hqU43LzUjNm-59" value="+ m_type : BallType" style="text;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rounded=0;shadow=0;html=0;" vertex="1" parent="y6SRsqsE3hqU43LzUjNm-54">
<mxGeometry y="130" width="430" height="26" as="geometry" />
</mxCell>
<mxCell id="y6SRsqsE3hqU43LzUjNm-74" value="+ m_color: Vector3" style="text;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rounded=0;shadow=0;html=0;" vertex="1" parent="y6SRsqsE3hqU43LzUjNm-54">
<mxGeometry y="156" width="430" height="26" as="geometry" />
</mxCell>
<mxCell id="y6SRsqsE3hqU43LzUjNm-75" value="+ main_axis : Vector3" style="text;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rounded=0;shadow=0;html=0;" vertex="1" parent="y6SRsqsE3hqU43LzUjNm-54">
<mxGeometry y="182" width="430" height="26" as="geometry" />
</mxCell>
<mxCell id="y6SRsqsE3hqU43LzUjNm-76" value="+ sphere : Sphere" style="text;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rounded=0;shadow=0;html=0;" vertex="1" parent="y6SRsqsE3hqU43LzUjNm-54">
<mxGeometry y="208" width="430" height="26" as="geometry" />
</mxCell>
<mxCell id="y6SRsqsE3hqU43LzUjNm-60" value="" style="line;html=1;strokeWidth=1;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;" vertex="1" parent="y6SRsqsE3hqU43LzUjNm-54">
<mxGeometry y="234" width="430" height="8" as="geometry" />
</mxCell>
<mxCell id="y6SRsqsE3hqU43LzUjNm-61" value="+ Ball(position : Vector2, velocity : Vector2, color : Vector3, type : BallType)" style="text;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" vertex="1" parent="y6SRsqsE3hqU43LzUjNm-54">
<mxGeometry y="242" width="430" height="26" as="geometry" />
</mxCell>
<mxCell id="y6SRsqsE3hqU43LzUjNm-62" value="+ PerimeterSpeed(normal : Vector3) : Vector3" style="text;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" vertex="1" parent="y6SRsqsE3hqU43LzUjNm-54">
<mxGeometry y="268" width="430" height="26" as="geometry" />
</mxCell>
<mxCell id="y6SRsqsE3hqU43LzUjNm-63" value="+ ApplyRotation(dt : double)" style="text;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" vertex="1" parent="y6SRsqsE3hqU43LzUjNm-54">
<mxGeometry y="294" width="430" height="26" as="geometry" />
</mxCell>
<mxCell id="y6SRsqsE3hqU43LzUjNm-64" value="+ render()" style="text;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" vertex="1" parent="y6SRsqsE3hqU43LzUjNm-54">
<mxGeometry y="320" width="430" height="26" as="geometry" />
</mxCell>
<mxCell id="y6SRsqsE3hqU43LzUjNm-65" value="<<Enumeration>>
BallType" style="swimlane;fontStyle=0;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=40;horizontalStack=0;resizeParent=1;resizeLast=0;collapsible=1;marginBottom=0;rounded=0;shadow=0;strokeWidth=1;" vertex="1" parent="WIyWlLk6GJQsqaUBKTNV-1">
<mxGeometry x="20" y="490" width="160" height="156" as="geometry">
<mxRectangle x="130" y="380" width="160" height="26" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="y6SRsqsE3hqU43LzUjNm-66" value="CUE" style="text;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" vertex="1" parent="y6SRsqsE3hqU43LzUjNm-65">
<mxGeometry y="40" width="160" height="26" as="geometry" />
</mxCell>
<mxCell id="y6SRsqsE3hqU43LzUjNm-67" value="SINGLE_C" style="text;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rounded=0;shadow=0;html=0;" vertex="1" parent="y6SRsqsE3hqU43LzUjNm-65">
<mxGeometry y="66" width="160" height="26" as="geometry" />
</mxCell>
<mxCell id="y6SRsqsE3hqU43LzUjNm-72" value="DOUBLE_C" style="text;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rounded=0;shadow=0;html=0;" vertex="1" parent="y6SRsqsE3hqU43LzUjNm-65">
<mxGeometry y="92" width="160" height="26" as="geometry" />
</mxCell>
<mxCell id="y6SRsqsE3hqU43LzUjNm-73" value="BLACK" style="text;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rounded=0;shadow=0;html=0;" vertex="1" parent="y6SRsqsE3hqU43LzUjNm-65">
<mxGeometry y="118" width="160" height="26" as="geometry" />
</mxCell>
<mxCell id="y6SRsqsE3hqU43LzUjNm-71" value="Use" style="endArrow=open;endSize=12;dashed=1;html=1;rounded=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="WIyWlLk6GJQsqaUBKTNV-1" source="y6SRsqsE3hqU43LzUjNm-59" target="y6SRsqsE3hqU43LzUjNm-67">
<mxGeometry width="160" relative="1" as="geometry">
<mxPoint x="1020" y="550" as="sourcePoint" />
<mxPoint x="1180" y="550" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="y6SRsqsE3hqU43LzUjNm-82" value="Sphere" style="swimlane;fontStyle=0;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeLast=0;collapsible=1;marginBottom=0;rounded=0;shadow=0;strokeWidth=1;" vertex="1" parent="WIyWlLk6GJQsqaUBKTNV-1">
<mxGeometry x="-20" y="716" width="410" height="270" as="geometry">
<mxRectangle x="130" y="380" width="160" height="26" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="y6SRsqsE3hqU43LzUjNm-83" value="+ vertices : std::vector<Vector3>" style="text;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" vertex="1" parent="y6SRsqsE3hqU43LzUjNm-82">
<mxGeometry y="26" width="410" height="26" as="geometry" />
</mxCell>
<mxCell id="y6SRsqsE3hqU43LzUjNm-84" value="+ faces : std::vector<std::array<int, 3>>" style="text;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rounded=0;shadow=0;html=0;" vertex="1" parent="y6SRsqsE3hqU43LzUjNm-82">
<mxGeometry y="52" width="410" height="26" as="geometry" />
</mxCell>
<mxCell id="y6SRsqsE3hqU43LzUjNm-88" value="+ vertexNormals : std::vector<Vector3>" style="text;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rounded=0;shadow=0;html=0;" vertex="1" parent="y6SRsqsE3hqU43LzUjNm-82">
<mxGeometry y="78" width="410" height="26" as="geometry" />
</mxCell>
<mxCell id="y6SRsqsE3hqU43LzUjNm-85" value="" style="line;html=1;strokeWidth=1;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;" vertex="1" parent="y6SRsqsE3hqU43LzUjNm-82">
<mxGeometry y="104" width="410" height="8" as="geometry" />
</mxCell>
<mxCell id="y6SRsqsE3hqU43LzUjNm-87" value="+ Sphere(n : int)" style="text;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" vertex="1" parent="y6SRsqsE3hqU43LzUjNm-82">
<mxGeometry y="112" width="410" height="26" as="geometry" />
</mxCell>
<mxCell id="y6SRsqsE3hqU43LzUjNm-90" value="+ subdivide(level : int)" style="text;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" vertex="1" parent="y6SRsqsE3hqU43LzUjNm-82">
<mxGeometry y="138" width="410" height="26" as="geometry" />
</mxCell>
<mxCell id="y6SRsqsE3hqU43LzUjNm-91" value="+ calculateVertexNormals()" style="text;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" vertex="1" parent="y6SRsqsE3hqU43LzUjNm-82">
<mxGeometry y="164" width="410" height="26" as="geometry" />
</mxCell>
<mxCell id="y6SRsqsE3hqU43LzUjNm-92" value="+ midpoint(p1 : Vector3, p2 : Vector3) : Vector3" style="text;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" vertex="1" parent="y6SRsqsE3hqU43LzUjNm-82">
<mxGeometry y="190" width="410" height="26" as="geometry" />
</mxCell>
<mxCell id="y6SRsqsE3hqU43LzUjNm-93" value="+ normalize(p : Vector3)" style="text;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" vertex="1" parent="y6SRsqsE3hqU43LzUjNm-82">
<mxGeometry y="216" width="410" height="26" as="geometry" />
</mxCell>
<mxCell id="y6SRsqsE3hqU43LzUjNm-94" value="+ computeFaceNormal(p1 : Vector3, p2 : Vector3, p3 : Vector 3) : Vector3" style="text;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" vertex="1" parent="y6SRsqsE3hqU43LzUjNm-82">
<mxGeometry y="242" width="410" height="26" as="geometry" />
</mxCell>
<mxCell id="y6SRsqsE3hqU43LzUjNm-97" value="1" style="text;strokeColor=none;align=center;fillColor=none;html=1;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="WIyWlLk6GJQsqaUBKTNV-1">
<mxGeometry x="480" y="830" width="20" height="20" as="geometry" />
</mxCell>
<mxCell id="y6SRsqsE3hqU43LzUjNm-98" value="" style="endArrow=diamondThin;endFill=1;endSize=24;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="WIyWlLk6GJQsqaUBKTNV-1" source="y6SRsqsE3hqU43LzUjNm-88" target="y6SRsqsE3hqU43LzUjNm-76">
<mxGeometry width="160" relative="1" as="geometry">
<mxPoint x="1290" y="892" as="sourcePoint" />
<mxPoint x="610" y="861" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="y6SRsqsE3hqU43LzUjNm-99" value="1" style="text;strokeColor=none;align=center;fillColor=none;html=1;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="WIyWlLk6GJQsqaUBKTNV-1">
<mxGeometry x="390" y="780" width="20" height="20" as="geometry" />
</mxCell>
<mxCell id="y6SRsqsE3hqU43LzUjNm-100" value="<<Enumeration>>
GameLevel" style="swimlane;fontStyle=0;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=40;horizontalStack=0;resizeParent=1;resizeLast=0;collapsible=1;marginBottom=0;rounded=0;shadow=0;strokeWidth=1;" vertex="1" parent="WIyWlLk6GJQsqaUBKTNV-1">
<mxGeometry x="20" y="120" width="160" height="222" as="geometry">
<mxRectangle x="130" y="380" width="160" height="26" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="y6SRsqsE3hqU43LzUjNm-101" value="UNINIT" style="text;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" vertex="1" parent="y6SRsqsE3hqU43LzUjNm-100">
<mxGeometry y="40" width="160" height="26" as="geometry" />
</mxCell>
<mxCell id="y6SRsqsE3hqU43LzUjNm-102" value="TABLE_INITED" style="text;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rounded=0;shadow=0;html=0;" vertex="1" parent="y6SRsqsE3hqU43LzUjNm-100">
<mxGeometry y="66" width="160" height="26" as="geometry" />
</mxCell>
<mxCell id="y6SRsqsE3hqU43LzUjNm-103" value="GAME_RUN_STATIC" style="text;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rounded=0;shadow=0;html=0;" vertex="1" parent="y6SRsqsE3hqU43LzUjNm-100">
<mxGeometry y="92" width="160" height="26" as="geometry" />
</mxCell>
<mxCell id="y6SRsqsE3hqU43LzUjNm-104" value="GAME_RUN_MOVING" style="text;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rounded=0;shadow=0;html=0;" vertex="1" parent="y6SRsqsE3hqU43LzUjNm-100">
<mxGeometry y="118" width="160" height="26" as="geometry" />
</mxCell>
<mxCell id="y6SRsqsE3hqU43LzUjNm-106" value="GAME_RUN_SETTING" style="text;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rounded=0;shadow=0;html=0;" vertex="1" parent="y6SRsqsE3hqU43LzUjNm-100">
<mxGeometry y="144" width="160" height="26" as="geometry" />
</mxCell>
<mxCell id="y6SRsqsE3hqU43LzUjNm-107" value="GAME_OVER" style="text;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rounded=0;shadow=0;html=0;" vertex="1" parent="y6SRsqsE3hqU43LzUjNm-100">
<mxGeometry y="170" width="160" height="26" as="geometry" />
</mxCell>
<mxCell id="y6SRsqsE3hqU43LzUjNm-108" value="GAME_JUDGING" style="text;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rounded=0;shadow=0;html=0;" vertex="1" parent="y6SRsqsE3hqU43LzUjNm-100">
<mxGeometry y="196" width="160" height="26" as="geometry" />
</mxCell>
<mxCell id="y6SRsqsE3hqU43LzUjNm-105" value="Use" style="endArrow=open;endSize=12;dashed=1;html=1;rounded=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="WIyWlLk6GJQsqaUBKTNV-1" source="zkfFHV4jXpPFQw0GAbJ--1" target="y6SRsqsE3hqU43LzUjNm-101">
<mxGeometry width="160" relative="1" as="geometry">
<mxPoint x="210" y="180" as="sourcePoint" />
<mxPoint x="230" y="120" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="y6SRsqsE3hqU43LzUjNm-109" value="" style="endArrow=diamondThin;endFill=0;endSize=24;html=1;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;exitX=0;exitY=0;exitDx=0;exitDy=0;" edge="1" parent="WIyWlLk6GJQsqaUBKTNV-1" source="y6SRsqsE3hqU43LzUjNm-54" target="y6SRsqsE3hqU43LzUjNm-40">
<mxGeometry width="160" relative="1" as="geometry">
<mxPoint x="550" y="690" as="sourcePoint" />
<mxPoint x="710" y="690" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="y6SRsqsE3hqU43LzUjNm-112" value="1" style="text;strokeColor=none;align=center;fillColor=none;html=1;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="WIyWlLk6GJQsqaUBKTNV-1">
<mxGeometry x="580" y="390" width="20" height="20" as="geometry" />
</mxCell>
<mxCell id="y6SRsqsE3hqU43LzUjNm-113" value="*" style="text;strokeColor=none;align=center;fillColor=none;html=1;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="WIyWlLk6GJQsqaUBKTNV-1">
<mxGeometry x="510" y="620" width="20" height="20" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>