-
Notifications
You must be signed in to change notification settings - Fork 0
/
UMLDiagram.drawio
365 lines (365 loc) · 42.6 KB
/
UMLDiagram.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
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
<mxfile host="Electron" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/24.7.17 Chrome/128.0.6613.36 Electron/32.0.1 Safari/537.36" version="24.7.17">
<diagram id="0-7Qm0cGNNnwY8iMT89a" name="Data Layout">
<mxGraphModel dx="501" dy="349" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1100" pageHeight="850" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="KzBRDtOJgjtY7-ivDXEG-3" value="" style="endArrow=open;endFill=1;endSize=12;html=1;rounded=0;entryX=1;entryY=0.066;entryDx=0;entryDy=0;entryPerimeter=0;exitX=0.001;exitY=0.536;exitDx=0;exitDy=0;exitPerimeter=0;edgeStyle=orthogonalEdgeStyle;" parent="1" source="KzBRDtOJgjtY7-ivDXEG-2" target="KzBRDtOJgjtY7-ivDXEG-1" edge="1">
<mxGeometry width="160" relative="1" as="geometry">
<mxPoint x="604" y="464" as="sourcePoint" />
<mxPoint x="780" y="400" as="targetPoint" />
<Array as="points">
<mxPoint x="1110" y="754" />
<mxPoint x="1110" y="540" />
<mxPoint x="670" y="540" />
<mxPoint x="670" y="381" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="KzBRDtOJgjtY7-ivDXEG-14" value="" style="endArrow=open;endFill=1;endSize=12;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0.007;entryY=0.04;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" source="4qymHgG-RHxKKIISKwvI-11" target="KzBRDtOJgjtY7-ivDXEG-1" edge="1">
<mxGeometry width="160" relative="1" as="geometry">
<mxPoint x="250" y="680" as="sourcePoint" />
<mxPoint x="410" y="680" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="tJqg2NbDP2f-t8pP_g2x-20" value="Client Side" style="swimlane;whiteSpace=wrap;html=1;strokeColor=#006666;dashed=1;dashPattern=1 2;strokeWidth=3;" parent="1" vertex="1">
<mxGeometry x="10" y="10" width="380" height="830" as="geometry" />
</mxCell>
<mxCell id="KzBRDtOJgjtY7-ivDXEG-23" value="MultiplayerClientSettings" style="swimlane;fontStyle=0;childLayout=stackLayout;horizontal=1;startSize=26;fillColor=none;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" parent="tJqg2NbDP2f-t8pP_g2x-20" vertex="1">
<mxGeometry x="40" y="40" width="320" height="130" as="geometry" />
</mxCell>
<mxCell id="KzBRDtOJgjtY7-ivDXEG-24" value="+ myPlayerName: string" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="KzBRDtOJgjtY7-ivDXEG-23" vertex="1">
<mxGeometry y="26" width="320" height="26" as="geometry" />
</mxCell>
<mxCell id="tJqg2NbDP2f-t8pP_g2x-1" value="+ TargetServer: IPEndPoint" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="KzBRDtOJgjtY7-ivDXEG-23" vertex="1">
<mxGeometry y="52" width="320" height="26" as="geometry" />
</mxCell>
<mxCell id="KzBRDtOJgjtY7-ivDXEG-25" value="+ SyncWorldState: bool" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="KzBRDtOJgjtY7-ivDXEG-23" vertex="1">
<mxGeometry y="78" width="320" height="26" as="geometry" />
</mxCell>
<mxCell id="bTxD3vcJfoNQiw2K7kQ5-5" value="+ CustomCharacterAppearance: TBD" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="KzBRDtOJgjtY7-ivDXEG-23" vertex="1">
<mxGeometry y="104" width="320" height="26" as="geometry" />
</mxCell>
<mxCell id="KzBRDtOJgjtY7-ivDXEG-26" value="Use" style="endArrow=open;endSize=12;dashed=1;html=1;rounded=0;" parent="tJqg2NbDP2f-t8pP_g2x-20" source="4qymHgG-RHxKKIISKwvI-4" target="KzBRDtOJgjtY7-ivDXEG-23" edge="1">
<mxGeometry width="160" relative="1" as="geometry">
<mxPoint x="420" y="432" as="sourcePoint" />
<mxPoint x="580" y="432" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="4qymHgG-RHxKKIISKwvI-4" value="MultiplayerClient" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" parent="tJqg2NbDP2f-t8pP_g2x-20" vertex="1">
<mxGeometry x="40" y="250" width="320" height="260" as="geometry" />
</mxCell>
<mxCell id="KzBRDtOJgjtY7-ivDXEG-12" value="+ MyPlayerName: string" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="4qymHgG-RHxKKIISKwvI-4" vertex="1">
<mxGeometry y="26" width="320" height="26" as="geometry" />
</mxCell>
<mxCell id="4qymHgG-RHxKKIISKwvI-9" value="+ MyUuid: Guid = Guid.NewGuid()" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="4qymHgG-RHxKKIISKwvI-4" vertex="1">
<mxGeometry y="52" width="320" height="26" as="geometry" />
</mxCell>
<mxCell id="KzBRDtOJgjtY7-ivDXEG-10" value="+ Players: ConcurrentDictionary&lt;Guid, PlayerMetadata&gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="4qymHgG-RHxKKIISKwvI-4" vertex="1">
<mxGeometry y="78" width="320" height="26" as="geometry" />
</mxCell>
<mxCell id="4qymHgG-RHxKKIISKwvI-11" value="+ MyMetadata: PlayerMetadata" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="4qymHgG-RHxKKIISKwvI-4" vertex="1">
<mxGeometry y="104" width="320" height="26" as="geometry" />
</mxCell>
<mxCell id="4qymHgG-RHxKKIISKwvI-12" value="Use" style="endArrow=open;endSize=12;dashed=1;html=1;rounded=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;edgeStyle=elbowEdgeStyle;" parent="4qymHgG-RHxKKIISKwvI-4" source="4qymHgG-RHxKKIISKwvI-11" target="KzBRDtOJgjtY7-ivDXEG-10" edge="1">
<mxGeometry width="160" relative="1" as="geometry">
<mxPoint x="20" y="139.5" as="sourcePoint" />
<mxPoint x="-10" y="114.5" as="targetPoint" />
<Array as="points">
<mxPoint x="-20" y="108" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="KzBRDtOJgjtY7-ivDXEG-11" value="+ TargetServer: IPEndPoint" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="4qymHgG-RHxKKIISKwvI-4" vertex="1">
<mxGeometry y="130" width="320" height="26" as="geometry" />
</mxCell>
<mxCell id="THr8TfoCkKgoIExO813C-10" value="+ SharedSaveData: SharedSaveData (On new updates, immediately modify the current World and Level states)" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="4qymHgG-RHxKKIISKwvI-4" vertex="1">
<mxGeometry y="156" width="320" height="44" as="geometry" />
</mxCell>
<mxCell id="4qymHgG-RHxKKIISKwvI-6" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;strokeColor=inherit;" parent="4qymHgG-RHxKKIISKwvI-4" vertex="1">
<mxGeometry y="200" width="320" height="8" as="geometry" />
</mxCell>
<mxCell id="4qymHgG-RHxKKIISKwvI-7" value="+ UpdateMyPlayer(): void" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="4qymHgG-RHxKKIISKwvI-4" vertex="1">
<mxGeometry y="208" width="320" height="26" as="geometry" />
</mxCell>
<mxCell id="4qymHgG-RHxKKIISKwvI-8" value="+ Disconnect(): void" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="4qymHgG-RHxKKIISKwvI-4" vertex="1">
<mxGeometry y="234" width="320" height="26" as="geometry" />
</mxCell>
<mxCell id="tJqg2NbDP2f-t8pP_g2x-21" value="Server Side" style="swimlane;whiteSpace=wrap;html=1;dashed=1;strokeWidth=3;perimeterSpacing=0;strokeColor=#994C00;dashPattern=1 2;" parent="1" vertex="1">
<mxGeometry x="1150" y="10" width="380" height="830" as="geometry" />
</mxCell>
<mxCell id="KzBRDtOJgjtY7-ivDXEG-2" value="<div style="box-sizing:border-box;width:100%;background:#e4e4e4;padding:2px;">ServerPlayerMetadata</div><table style="width:100%;font-size:1em;" cellpadding="2" cellspacing="0"><tbody><tr><td>PK</td><td>uuid</td></tr><tr><td>FK</td><td>IPEndPoint<br></td></tr><tr><td><br></td><td>PlayerMetadata<br></td></tr><tr><td><br></td><td>LastUpdateLocalTimestamp<br></td></tr><tr><td><br></td><td>PlayerAppearance</td></tr></tbody></table>" style="verticalAlign=top;align=left;overflow=fill;html=1;whiteSpace=wrap;" parent="tJqg2NbDP2f-t8pP_g2x-21" vertex="1">
<mxGeometry x="140" y="680" width="200" height="120" as="geometry" />
</mxCell>
<mxCell id="KzBRDtOJgjtY7-ivDXEG-13" value="" style="endArrow=open;endFill=1;endSize=12;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=1.003;entryY=0.117;entryDx=0;entryDy=0;entryPerimeter=0;edgeStyle=elbowEdgeStyle;" parent="tJqg2NbDP2f-t8pP_g2x-21" source="KzBRDtOJgjtY7-ivDXEG-7" target="KzBRDtOJgjtY7-ivDXEG-2" edge="1">
<mxGeometry width="160" relative="1" as="geometry">
<mxPoint x="-290" y="660" as="sourcePoint" />
<mxPoint x="-130" y="660" as="targetPoint" />
<Array as="points">
<mxPoint x="360" y="460" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="KzBRDtOJgjtY7-ivDXEG-15" value="MultiplayerServerSettings" style="swimlane;fontStyle=0;childLayout=stackLayout;horizontal=1;startSize=26;fillColor=none;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" parent="tJqg2NbDP2f-t8pP_g2x-21" vertex="1">
<mxGeometry x="20" y="40" width="320" height="208" as="geometry" />
</mxCell>
<mxCell id="KzBRDtOJgjtY7-ivDXEG-16" value="+ listenPort: int" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="KzBRDtOJgjtY7-ivDXEG-15" vertex="1">
<mxGeometry y="26" width="320" height="26" as="geometry" />
</mxCell>
<mxCell id="KzBRDtOJgjtY7-ivDXEG-17" value="+ maxAdjustListenPortOnBindFail: int" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="KzBRDtOJgjtY7-ivDXEG-15" vertex="1">
<mxGeometry y="52" width="320" height="26" as="geometry" />
</mxCell>
<mxCell id="KzBRDtOJgjtY7-ivDXEG-18" value="+ overduetimeout: long" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="KzBRDtOJgjtY7-ivDXEG-15" vertex="1">
<mxGeometry y="78" width="320" height="26" as="geometry" />
</mxCell>
<mxCell id="KzBRDtOJgjtY7-ivDXEG-19" value="+ useAllowList: bool" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="KzBRDtOJgjtY7-ivDXEG-15" vertex="1">
<mxGeometry y="104" width="320" height="26" as="geometry" />
</mxCell>
<mxCell id="KzBRDtOJgjtY7-ivDXEG-20" value="+ AllowList: IPFilter" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="KzBRDtOJgjtY7-ivDXEG-15" vertex="1">
<mxGeometry y="130" width="320" height="26" as="geometry" />
</mxCell>
<mxCell id="KzBRDtOJgjtY7-ivDXEG-21" value="+ BlockList: IPFilter" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="KzBRDtOJgjtY7-ivDXEG-15" vertex="1">
<mxGeometry y="156" width="320" height="26" as="geometry" />
</mxCell>
<mxCell id="bTxD3vcJfoNQiw2K7kQ5-2" value="+ SyncWorldState: bool" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="KzBRDtOJgjtY7-ivDXEG-15" vertex="1">
<mxGeometry y="182" width="320" height="26" as="geometry" />
</mxCell>
<mxCell id="KzBRDtOJgjtY7-ivDXEG-22" value="" style="endArrow=open;endFill=1;endSize=12;html=1;rounded=0;entryX=1.002;entryY=0.079;entryDx=0;entryDy=0;entryPerimeter=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;edgeStyle=elbowEdgeStyle;" parent="tJqg2NbDP2f-t8pP_g2x-21" source="KzBRDtOJgjtY7-ivDXEG-6" target="KzBRDtOJgjtY7-ivDXEG-15" edge="1">
<mxGeometry width="160" relative="1" as="geometry">
<mxPoint x="-520" y="260" as="sourcePoint" />
<mxPoint x="-360" y="260" as="targetPoint" />
<Array as="points">
<mxPoint x="360" y="170" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="tJqg2NbDP2f-t8pP_g2x-13" value="MultiplayerServer" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" parent="tJqg2NbDP2f-t8pP_g2x-21" vertex="1">
<mxGeometry x="20" y="290" width="320" height="242" as="geometry" />
</mxCell>
<mxCell id="KzBRDtOJgjtY7-ivDXEG-6" value="+ Settings: MultiplayerServerSettings" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="tJqg2NbDP2f-t8pP_g2x-13" vertex="1">
<mxGeometry y="26" width="320" height="26" as="geometry" />
</mxCell>
<mxCell id="KzBRDtOJgjtY7-ivDXEG-7" value="+ Players: Dictionary&lt;Guid, ServerPlayerMetadata&gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="tJqg2NbDP2f-t8pP_g2x-13" vertex="1">
<mxGeometry y="52" width="320" height="26" as="geometry" />
</mxCell>
<mxCell id="tJqg2NbDP2f-t8pP_g2x-14" value="+ SharedSaveData: SharedSaveData" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="tJqg2NbDP2f-t8pP_g2x-13" vertex="1">
<mxGeometry y="78" width="320" height="26" as="geometry" />
</mxCell>
<mxCell id="THr8TfoCkKgoIExO813C-12" value="+ ActiveLevelState: ActiveLevelState" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="tJqg2NbDP2f-t8pP_g2x-13" vertex="1">
<mxGeometry y="104" width="320" height="26" as="geometry" />
</mxCell>
<mxCell id="tJqg2NbDP2f-t8pP_g2x-15" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;strokeColor=inherit;" parent="tJqg2NbDP2f-t8pP_g2x-13" vertex="1">
<mxGeometry y="130" width="320" height="8" as="geometry" />
</mxCell>
<mxCell id="tJqg2NbDP2f-t8pP_g2x-17" value="+ OnPlayerConnect(PlayerAppearance): void" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="tJqg2NbDP2f-t8pP_g2x-13" vertex="1">
<mxGeometry y="138" width="320" height="26" as="geometry" />
</mxCell>
<mxCell id="tJqg2NbDP2f-t8pP_g2x-18" value="+ OnPlayerDisconnect(uuid): void" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="tJqg2NbDP2f-t8pP_g2x-13" vertex="1">
<mxGeometry y="164" width="320" height="26" as="geometry" />
</mxCell>
<mxCell id="tJqg2NbDP2f-t8pP_g2x-22" value="+ OnUpdate(): void" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="tJqg2NbDP2f-t8pP_g2x-13" vertex="1">
<mxGeometry y="190" width="320" height="26" as="geometry" />
</mxCell>
<mxCell id="tJqg2NbDP2f-t8pP_g2x-16" value="+ method(type): type" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="tJqg2NbDP2f-t8pP_g2x-13" vertex="1">
<mxGeometry y="216" width="320" height="26" as="geometry" />
</mxCell>
<mxCell id="bTxD3vcJfoNQiw2K7kQ5-1" value="" style="endArrow=open;endFill=1;endSize=12;html=1;rounded=0;entryX=1.003;entryY=0.121;entryDx=0;entryDy=0;entryPerimeter=0;exitX=0.003;exitY=0.836;exitDx=0;exitDy=0;exitPerimeter=0;edgeStyle=orthogonalEdgeStyle;" parent="1" source="KzBRDtOJgjtY7-ivDXEG-2" target="tJqg2NbDP2f-t8pP_g2x-10" edge="1">
<mxGeometry width="160" relative="1" as="geometry">
<mxPoint x="820" y="680" as="sourcePoint" />
<mxPoint x="659" y="510" as="targetPoint" />
<Array as="points">
<mxPoint x="1090" y="790" />
<mxPoint x="1090" y="460" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="tJqg2NbDP2f-t8pP_g2x-19" value="Shared Structures" style="swimlane;whiteSpace=wrap;html=1;strokeColor=#006600;dashed=1;dashPattern=1 2;strokeWidth=3;glass=0;rounded=0;swimlaneLine=1;" parent="1" vertex="1">
<mxGeometry x="400" y="10" width="730" height="830" as="geometry">
<mxRectangle x="430" y="20" width="140" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="KzBRDtOJgjtY7-ivDXEG-1" value="<div style="box-sizing:border-box;width:100%;background:#e4e4e4;padding:2px;">PlayerMetadata</div><table style="width:100%;font-size:1em;" cellpadding="2" cellspacing="0"><tbody><tr><td>PK</td><td>uuid</td></tr><tr><td>FK</td><td>CurrentLevelName<br></td></tr><tr><td><br></td><td>Position<br></td></tr><tr><td><br></td><td>CameraViewpoint<br></td></tr><tr><td><br></td><td>Action<br></td></tr><tr><td><br></td><td>AnimFrame<br></td></tr><tr><td><br></td><td>LookingDirection<br></td></tr><tr><td><br></td><td>LastUpdateTimestamp<br></td></tr></tbody></table>" style="verticalAlign=top;align=left;overflow=fill;html=1;whiteSpace=wrap;" parent="tJqg2NbDP2f-t8pP_g2x-19" vertex="1">
<mxGeometry x="40" y="360" width="200" height="170" as="geometry" />
</mxCell>
<mxCell id="KzBRDtOJgjtY7-ivDXEG-4" value="Send this data to connected clients" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fillColor=#d5e8d4;strokeColor=#82b366;" parent="tJqg2NbDP2f-t8pP_g2x-19" vertex="1">
<mxGeometry x="40" y="340" width="200" height="20" as="geometry" />
</mxCell>
<mxCell id="4qymHgG-RHxKKIISKwvI-13" value="<div style="box-sizing:border-box;width:100%;background:#e4e4e4;padding:2px;">ActiveLevelState</div><table style="width:100%;font-size:1em;" cellpadding="2" cellspacing="0"><tbody><tr><td>PK</td><td>CurrentLevelName</td></tr><tr><td><br></td><td>PickupGroups<br></td></tr><tr><td><br></td><td>WaterHeight<br></td></tr><tr><td><br></td><td>TimeOfDay<br></td></tr><tr><td><br></td><td>(Use SharedSaveData to get LevelState)</td></tr></tbody></table>" style="verticalAlign=top;align=left;overflow=fill;html=1;whiteSpace=wrap;" parent="tJqg2NbDP2f-t8pP_g2x-19" vertex="1">
<mxGeometry x="330" y="270" width="260" height="120" as="geometry" />
</mxCell>
<mxCell id="4qymHgG-RHxKKIISKwvI-14" value="if&nbsp;<span style="text-align: left;">SyncWorldState&nbsp;</span>is true, Sync this data with clients that are in the same room" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fillColor=#d5e8d4;strokeColor=#82b366;" parent="tJqg2NbDP2f-t8pP_g2x-19" vertex="1">
<mxGeometry x="330" y="230" width="260" height="40" as="geometry" />
</mxCell>
<mxCell id="4qymHgG-RHxKKIISKwvI-15" value="<div style="box-sizing:border-box;width:100%;background:#e4e4e4;padding:2px;">SaveDataUpdate</div><table cellspacing="0" cellpadding="2" style="width:100%;font-size:1em;"><tbody><tr><td>PK</td><td>TBD</td></tr><tr><td><br></td><td>List&lt;NewUnlockedWarpDestinations&gt;</td></tr><tr><td><br></td><td>New Unique collectables</td></tr><tr><td><br></td><td>NewGlobalWaterLevelModifier<br></td></tr><tr><td><br></td><td>AchievementCheatCodeDone<br></td></tr><tr><td><br></td><td>MapCheatCodeDone<br></td></tr><tr><td><br></td><td>WorldUpdates (Dictionary&lt;string, LevelSaveDataUpdate&gt;) (TBD)<br></td></tr></tbody></table>" style="verticalAlign=top;align=left;overflow=fill;html=1;whiteSpace=wrap;" parent="tJqg2NbDP2f-t8pP_g2x-19" vertex="1">
<mxGeometry x="460" y="70" width="230" height="160" as="geometry" />
</mxCell>
<mxCell id="4qymHgG-RHxKKIISKwvI-16" value="The updates for WorldState. Send this data when save data is updated" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fillColor=#d5e8d4;strokeColor=#82b366;" parent="tJqg2NbDP2f-t8pP_g2x-19" vertex="1">
<mxGeometry x="460" y="40" width="230" height="30" as="geometry" />
</mxCell>
<mxCell id="7Khi5_YAd-gwPFn8Hj0F-7" value="" style="endArrow=open;endFill=1;endSize=12;html=1;rounded=0;exitX=0;exitY=0.74;exitDx=0;exitDy=0;edgeStyle=orthogonalEdgeStyle;entryX=0.001;entryY=0.134;entryDx=0;entryDy=0;entryPerimeter=0;exitPerimeter=0;" parent="tJqg2NbDP2f-t8pP_g2x-19" source="7Khi5_YAd-gwPFn8Hj0F-1" target="tJqg2NbDP2f-t8pP_g2x-10" edge="1">
<mxGeometry width="160" relative="1" as="geometry">
<mxPoint x="540" y="700" as="sourcePoint" />
<mxPoint x="700" y="700" as="targetPoint" />
<Array as="points">
<mxPoint x="320" y="755" />
<mxPoint x="320" y="451" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="7Khi5_YAd-gwPFn8Hj0F-9" value="" style="endArrow=open;endFill=1;endSize=12;html=1;rounded=0;exitX=0.001;exitY=0.565;exitDx=0;exitDy=0;exitPerimeter=0;entryX=-0.004;entryY=0.1;entryDx=0;entryDy=0;entryPerimeter=0;edgeStyle=orthogonalEdgeStyle;" parent="tJqg2NbDP2f-t8pP_g2x-19" source="7Khi5_YAd-gwPFn8Hj0F-1" target="4qymHgG-RHxKKIISKwvI-13" edge="1">
<mxGeometry width="160" relative="1" as="geometry">
<mxPoint x="260" y="740" as="sourcePoint" />
<mxPoint x="420" y="740" as="targetPoint" />
<Array as="points">
<mxPoint x="310" y="719" />
<mxPoint x="310" y="282" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="7Khi5_YAd-gwPFn8Hj0F-10" value="" style="endArrow=open;endFill=1;endSize=12;html=1;rounded=0;exitX=0;exitY=0.475;exitDx=0;exitDy=0;exitPerimeter=0;edgeStyle=orthogonalEdgeStyle;entryX=0;entryY=0.069;entryDx=0;entryDy=0;entryPerimeter=0;" parent="tJqg2NbDP2f-t8pP_g2x-19" source="7Khi5_YAd-gwPFn8Hj0F-1" target="4qymHgG-RHxKKIISKwvI-15" edge="1">
<mxGeometry width="160" relative="1" as="geometry">
<mxPoint x="270" y="750" as="sourcePoint" />
<mxPoint x="330" y="80" as="targetPoint" />
<Array as="points">
<mxPoint x="300" y="700" />
<mxPoint x="300" y="220" />
<mxPoint x="440" y="220" />
<mxPoint x="440" y="81" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="tJqg2NbDP2f-t8pP_g2x-3" value="Send this data to other clients when a client connects" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fillColor=#d5e8d4;strokeColor=#82b366;" parent="tJqg2NbDP2f-t8pP_g2x-19" vertex="1">
<mxGeometry x="340" y="410" width="200" height="30" as="geometry" />
</mxCell>
<mxCell id="tJqg2NbDP2f-t8pP_g2x-10" value="<div style="box-sizing:border-box;width:100%;background:#e4e4e4;padding:2px;">PlayerAppearance</div><table style="width:100%;font-size:1em;" cellpadding="2" cellspacing="0"><tbody><tr><td>PK</td><td>uuid</td></tr><tr><td><br></td><td>PlayerName</td></tr><tr><td>FK1</td><td>CustomCharacterAppearance<br></td></tr></tbody></table>" style="verticalAlign=top;align=left;overflow=fill;html=1;whiteSpace=wrap;" parent="tJqg2NbDP2f-t8pP_g2x-19" vertex="1">
<mxGeometry x="340" y="440" width="200" height="80" as="geometry" />
</mxCell>
<mxCell id="7Khi5_YAd-gwPFn8Hj0F-11" value="" style="endArrow=open;endFill=1;endSize=12;html=1;rounded=0;exitX=1.001;exitY=0.781;exitDx=0;exitDy=0;exitPerimeter=0;edgeStyle=orthogonalEdgeStyle;entryX=-0.001;entryY=0.122;entryDx=0;entryDy=0;entryPerimeter=0;" parent="tJqg2NbDP2f-t8pP_g2x-19" source="7Khi5_YAd-gwPFn8Hj0F-3" target="tJqg2NbDP2f-t8pP_g2x-10" edge="1">
<mxGeometry width="160" relative="1" as="geometry">
<mxPoint x="320" y="749.97" as="sourcePoint" />
<mxPoint x="320" y="410.97" as="targetPoint" />
<Array as="points">
<mxPoint x="320" y="751" />
<mxPoint x="320" y="450" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="7Khi5_YAd-gwPFn8Hj0F-12" value="" style="endArrow=open;endFill=1;endSize=12;html=1;rounded=0;exitX=1.001;exitY=0.664;exitDx=0;exitDy=0;exitPerimeter=0;entryX=-0.001;entryY=0.1;entryDx=0;entryDy=0;entryPerimeter=0;edgeStyle=orthogonalEdgeStyle;" parent="tJqg2NbDP2f-t8pP_g2x-19" source="7Khi5_YAd-gwPFn8Hj0F-3" target="4qymHgG-RHxKKIISKwvI-13" edge="1">
<mxGeometry width="160" relative="1" as="geometry">
<mxPoint x="350" y="711" as="sourcePoint" />
<mxPoint x="349" y="250" as="targetPoint" />
<Array as="points">
<mxPoint x="310" y="730" />
<mxPoint x="310" y="282" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="7Khi5_YAd-gwPFn8Hj0F-13" value="" style="endArrow=open;endFill=1;endSize=12;html=1;rounded=0;exitX=1.002;exitY=0.559;exitDx=0;exitDy=0;exitPerimeter=0;edgeStyle=orthogonalEdgeStyle;entryX=-0.001;entryY=0.066;entryDx=0;entryDy=0;entryPerimeter=0;" parent="tJqg2NbDP2f-t8pP_g2x-19" source="7Khi5_YAd-gwPFn8Hj0F-3" target="4qymHgG-RHxKKIISKwvI-15" edge="1">
<mxGeometry width="160" relative="1" as="geometry">
<mxPoint x="350" y="694" as="sourcePoint" />
<mxPoint x="330" y="80" as="targetPoint" />
<Array as="points">
<mxPoint x="300" y="711" />
<mxPoint x="300" y="220" />
<mxPoint x="440" y="220" />
<mxPoint x="440" y="81" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="7Khi5_YAd-gwPFn8Hj0F-14" value="" style="endArrow=open;endFill=1;endSize=12;html=1;rounded=0;exitX=1.001;exitY=0.465;exitDx=0;exitDy=0;exitPerimeter=0;entryX=1;entryY=0.07;entryDx=0;entryDy=0;entryPerimeter=0;edgeStyle=orthogonalEdgeStyle;" parent="tJqg2NbDP2f-t8pP_g2x-19" source="7Khi5_YAd-gwPFn8Hj0F-3" target="KzBRDtOJgjtY7-ivDXEG-1" edge="1">
<mxGeometry width="160" relative="1" as="geometry">
<mxPoint x="270" y="660" as="sourcePoint" />
<mxPoint x="430" y="660" as="targetPoint" />
<Array as="points">
<mxPoint x="270" y="694" />
<mxPoint x="270" y="372" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="7Khi5_YAd-gwPFn8Hj0F-15" value="" style="endArrow=open;endFill=1;endSize=12;html=1;rounded=0;entryX=1;entryY=0.068;entryDx=0;entryDy=0;entryPerimeter=0;edgeStyle=orthogonalEdgeStyle;exitX=0;exitY=0.392;exitDx=0;exitDy=0;exitPerimeter=0;" parent="tJqg2NbDP2f-t8pP_g2x-19" target="KzBRDtOJgjtY7-ivDXEG-1" edge="1" source="7Khi5_YAd-gwPFn8Hj0F-1">
<mxGeometry width="160" relative="1" as="geometry">
<mxPoint x="340" y="658" as="sourcePoint" />
<mxPoint x="260" y="342" as="targetPoint" />
<Array as="points">
<mxPoint x="270" y="682" />
<mxPoint x="270" y="372" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="7Khi5_YAd-gwPFn8Hj0F-16" value="<div style="box-sizing:border-box;width:100%;background:#e4e4e4;padding:2px;">SharedSaveData</div><table style="width:100%;font-size:1em;" cellpadding="2" cellspacing="0"><tbody><tr><td>PK</td><td>TBD</td></tr><tr><td><br></td><td>TimeOfDay<br></td></tr><tr><td><br></td><td>UnlockedWarpDestinations</td></tr><tr><td><br></td><td>Unique collectables (Keys, CubeShards, SecretCubes, CollectedParts, CollectedOwls, PiecesOfHeart, Maps, Artifacts)<br></td></tr><tr><td><br></td><td>GlobalWaterLevelModifier<br></td></tr><tr><td><br></td><td>AchievementCheatCodeDone<br></td></tr><tr><td><br></td><td>MapCheatCodeDone<br></td></tr><tr><td><br></td><td>World (Dictionary&lt;string, LevelSaveData&gt;)<br></td></tr></tbody></table>" style="verticalAlign=top;align=left;overflow=fill;html=1;whiteSpace=wrap;scroll;collapsible=0;resizeHeight=0;treeFolding=0;portConstraintRotation=0;container=0;noLabel=0;" parent="tJqg2NbDP2f-t8pP_g2x-19" vertex="1">
<mxGeometry x="40" y="100" width="200" height="230" as="geometry">
<mxRectangle x="40" y="110" width="200" height="230" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="7Khi5_YAd-gwPFn8Hj0F-17" value="Should represent shared aspects of&nbsp; FezGame.Structure.SaveData" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fillColor=#d5e8d4;strokeColor=#82b366;" parent="tJqg2NbDP2f-t8pP_g2x-19" vertex="1">
<mxGeometry x="40" y="70" width="200" height="30" as="geometry" />
</mxCell>
<mxCell id="7Khi5_YAd-gwPFn8Hj0F-18" value="To Do: Add some way of setting this initially" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fillColor=#f8cecc;strokeColor=#b85450;" parent="tJqg2NbDP2f-t8pP_g2x-19" vertex="1">
<mxGeometry x="40" y="40" width="200" height="30" as="geometry" />
</mxCell>
<mxCell id="7Khi5_YAd-gwPFn8Hj0F-19" value="" style="endArrow=open;endFill=1;endSize=12;html=1;rounded=0;exitX=0;exitY=0.905;exitDx=0;exitDy=0;exitPerimeter=0;edgeStyle=orthogonalEdgeStyle;" parent="tJqg2NbDP2f-t8pP_g2x-19" source="7Khi5_YAd-gwPFn8Hj0F-1" target="7Khi5_YAd-gwPFn8Hj0F-16" edge="1">
<mxGeometry width="160" relative="1" as="geometry">
<mxPoint x="350" y="731" as="sourcePoint" />
<mxPoint x="350" y="431" as="targetPoint" />
<Array as="points">
<mxPoint x="290" y="790" />
<mxPoint x="290" y="215" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="7Khi5_YAd-gwPFn8Hj0F-5" value="Main Network Structures" style="swimlane;whiteSpace=wrap;html=1;dashed=1;dashPattern=1 1;strokeWidth=3;strokeColor=#666600;" parent="tJqg2NbDP2f-t8pP_g2x-19" vertex="1">
<mxGeometry x="20" y="540" width="650" height="290" as="geometry" />
</mxCell>
<mxCell id="7Khi5_YAd-gwPFn8Hj0F-3" value="<div style="box-sizing:border-box;width:100%;background:#e4e4e4;padding:2px;">ClientGameTickPacket</div><table style="width:100%;font-size:1em;" cellpadding="2" cellspacing="0"><tbody><tr><td>PK</td><td>TBD</td></tr><tr><td><br></td><td>ProtocolSignature<br></td></tr><tr><td><br></td><td>ProtocolVersion<br></td></tr><tr><td><br></td><td>PlayerMetadata<br></td></tr><tr><td><br></td><td>Nullable&lt;SaveDataUpdate&gt;<br></td></tr><tr><td><br></td><td>Nullable&lt;ActiveLevelState&gt;<br></td></tr><tr><td><br></td><td>Nullable&lt;PlayerAppearance&gt; (only include in first packet)</td></tr><tr><td><br></td><td>bool Disconnecting</td></tr></tbody></table>" style="verticalAlign=top;align=left;overflow=fill;html=1;whiteSpace=wrap;" parent="7Khi5_YAd-gwPFn8Hj0F-5" vertex="1">
<mxGeometry x="30" y="70" width="200" height="180" as="geometry" />
</mxCell>
<mxCell id="7Khi5_YAd-gwPFn8Hj0F-4" value="Clients send this data to the server on game tick" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fillColor=#d5e8d4;strokeColor=#82b366;" parent="7Khi5_YAd-gwPFn8Hj0F-5" vertex="1">
<mxGeometry x="30" y="40" width="200" height="30" as="geometry" />
</mxCell>
<mxCell id="7Khi5_YAd-gwPFn8Hj0F-1" value="<div style="box-sizing:border-box;width:100%;background:#e4e4e4;padding:2px;">ServerGameTickPacket</div><table style="width:100%;font-size:1em;" cellpadding="2" cellspacing="0"><tbody><tr><td>PK</td><td>TBD</td></tr><tr><td><br></td><td>ProtocolSignature<br></td></tr><tr><td><br></td><td>ProtocolVersion<br></td></tr><tr><td><br></td><td>List&lt;PlayerMetadata&gt;<br></td></tr><tr><td><br></td><td>Nullable&lt;SaveDataUpdate&gt;<br></td></tr><tr><td><br></td><td>List&lt;ActiveLevelState&gt;<br></td></tr><tr><td><br></td><td>DisconnectedPlayers=List&lt;Guid&gt;<br></td></tr><tr><td><br></td><td>Dictionary&lt;Guid,PlayerAppearance&gt;</td></tr><tr><td><br></td><td>Nullable&lt;Guid&gt; ClientNewGuid<br></td></tr><tr><td><br></td><td>Nullable&lt;SharedSaveData&gt; (only include in first packet)</td></tr></tbody></table>" style="verticalAlign=top;align=left;overflow=fill;html=1;whiteSpace=wrap;" parent="7Khi5_YAd-gwPFn8Hj0F-5" vertex="1">
<mxGeometry x="320" y="60" width="330" height="210" as="geometry" />
</mxCell>
<mxCell id="7Khi5_YAd-gwPFn8Hj0F-2" value="Server sends this data to all clients on game tick" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fillColor=#d5e8d4;strokeColor=#82b366;" parent="7Khi5_YAd-gwPFn8Hj0F-5" vertex="1">
<mxGeometry x="320" y="30" width="200" height="30" as="geometry" />
</mxCell>
<mxCell id="THr8TfoCkKgoIExO813C-2" value="See GameLevelManager" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fillColor=#fff2cc;strokeColor=#d6b656;rotation=0;" parent="tJqg2NbDP2f-t8pP_g2x-19" vertex="1">
<mxGeometry x="450" y="310" width="130" height="40" as="geometry" />
</mxCell>
<mxCell id="THr8TfoCkKgoIExO813C-5" value="<div style="box-sizing:border-box;width:100%;background:#e4e4e4;padding:2px;">Unique collectables</div><table cellspacing="0" cellpadding="2" style="width:100%;font-size:1em;"><tbody><tr><td>PK</td><td>Id</td></tr><tr><td>PK</td><td>ActorType</td></tr><tr><td>FK1</td><td>LevelName</td></tr><tr><td>FK2</td><td>Location</td></tr><tr><td>FK3</td><td>TBD</td></tr></tbody></table>" style="verticalAlign=top;align=left;overflow=fill;html=1;whiteSpace=wrap;" parent="tJqg2NbDP2f-t8pP_g2x-19" vertex="1">
<mxGeometry x="300" y="90" width="110" height="110" as="geometry" />
</mxCell>
<mxCell id="THr8TfoCkKgoIExO813C-7" value="Use" style="endArrow=open;endSize=12;dashed=1;html=1;rounded=0;exitX=0.997;exitY=0.47;exitDx=0;exitDy=0;exitPerimeter=0;entryX=-0.006;entryY=0.103;entryDx=0;entryDy=0;entryPerimeter=0;edgeStyle=elbowEdgeStyle;" parent="tJqg2NbDP2f-t8pP_g2x-19" source="7Khi5_YAd-gwPFn8Hj0F-16" target="THr8TfoCkKgoIExO813C-5" edge="1">
<mxGeometry width="160" relative="1" as="geometry">
<mxPoint x="600" y="270" as="sourcePoint" />
<mxPoint x="760" y="270" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="THr8TfoCkKgoIExO813C-8" value="" style="endArrow=open;endFill=1;endSize=12;html=1;rounded=0;exitX=-0.001;exitY=0.399;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.998;entryY=0.099;entryDx=0;entryDy=0;entryPerimeter=0;edgeStyle=elbowEdgeStyle;" parent="tJqg2NbDP2f-t8pP_g2x-19" source="4qymHgG-RHxKKIISKwvI-15" target="THr8TfoCkKgoIExO813C-5" edge="1">
<mxGeometry width="160" relative="1" as="geometry">
<mxPoint x="580" y="270" as="sourcePoint" />
<mxPoint x="740" y="270" as="targetPoint" />
<Array as="points">
<mxPoint x="430" y="120" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="THr8TfoCkKgoIExO813C-9" value="Might not be needed if we can get this info from the LevelSaveData" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fillColor=#d5e8d4;strokeColor=#82b366;" parent="tJqg2NbDP2f-t8pP_g2x-19" vertex="1">
<mxGeometry x="270" y="40" width="160" height="50" as="geometry" />
</mxCell>
<mxCell id="7Khi5_YAd-gwPFn8Hj0F-21" value="" style="endArrow=open;endFill=1;endSize=12;html=1;rounded=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;edgeStyle=orthogonalEdgeStyle;" parent="1" source="tJqg2NbDP2f-t8pP_g2x-14" target="7Khi5_YAd-gwPFn8Hj0F-16" edge="1">
<mxGeometry width="160" relative="1" as="geometry">
<mxPoint x="750" y="775" as="sourcePoint" />
<mxPoint x="660" y="230" as="targetPoint" />
<Array as="points">
<mxPoint x="1170" y="361" />
<mxPoint x="1060" y="361" />
<mxPoint x="1060" y="410" />
<mxPoint x="690" y="410" />
<mxPoint x="690" y="120" />
</Array>
</mxGeometry>
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>