mage-engine 3.24.3 → 3.24.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. package/.github/workflows/test.yml +29 -0
  2. package/__mocks__/three.js +178 -0
  3. package/coverage/clover.xml +3094 -0
  4. package/coverage/coverage-final.json +60 -0
  5. package/coverage/lcov-report/base.css +224 -0
  6. package/coverage/lcov-report/block-navigation.js +87 -0
  7. package/coverage/lcov-report/entities/Element.js.html +3463 -0
  8. package/coverage/lcov-report/entities/Entity.js.html +2740 -0
  9. package/coverage/lcov-report/entities/animations/AnimationHandler.js.html +1006 -0
  10. package/coverage/lcov-report/entities/animations/SpriteAnimationHandler.js.html +91 -0
  11. package/coverage/lcov-report/entities/animations/index.html +131 -0
  12. package/coverage/lcov-report/entities/animations/lib/NodeFrame.js.html +214 -0
  13. package/coverage/lcov-report/entities/animations/lib/index.html +116 -0
  14. package/coverage/lcov-report/entities/base/AnimatedSprite.js.html +220 -0
  15. package/coverage/lcov-report/entities/base/Axes.js.html +316 -0
  16. package/coverage/lcov-report/entities/base/Box.js.html +253 -0
  17. package/coverage/lcov-report/entities/base/Cone.js.html +304 -0
  18. package/coverage/lcov-report/entities/base/Cube.js.html +217 -0
  19. package/coverage/lcov-report/entities/base/CurveLine.js.html +166 -0
  20. package/coverage/lcov-report/entities/base/Cylinder.js.html +259 -0
  21. package/coverage/lcov-report/entities/base/Grid.js.html +190 -0
  22. package/coverage/lcov-report/entities/base/HelperSprite.js.html +163 -0
  23. package/coverage/lcov-report/entities/base/Label.js.html +373 -0
  24. package/coverage/lcov-report/entities/base/Line.js.html +334 -0
  25. package/coverage/lcov-report/entities/base/Plane.js.html +265 -0
  26. package/coverage/lcov-report/entities/base/Sphere.js.html +217 -0
  27. package/coverage/lcov-report/entities/base/Sprite.js.html +445 -0
  28. package/coverage/lcov-report/entities/base/index.html +326 -0
  29. package/coverage/lcov-report/entities/base/index.js.html +172 -0
  30. package/coverage/lcov-report/entities/camera.js.html +751 -0
  31. package/coverage/lcov-report/entities/constants.js.html +655 -0
  32. package/coverage/lcov-report/entities/index.html +176 -0
  33. package/coverage/lcov-report/entities/index.js.html +187 -0
  34. package/coverage/lcov-report/favicon.png +0 -0
  35. package/coverage/lcov-report/images/Images.js.html +724 -0
  36. package/coverage/lcov-report/images/index.html +116 -0
  37. package/coverage/lcov-report/index.html +266 -0
  38. package/coverage/lcov-report/lib/Color.js.html +187 -0
  39. package/coverage/lcov-report/lib/array.js.html +97 -0
  40. package/coverage/lcov-report/lib/colliders.js.html +217 -0
  41. package/coverage/lcov-report/lib/constants.js.html +1171 -0
  42. package/coverage/lcov-report/lib/dom.js.html +202 -0
  43. package/coverage/lcov-report/lib/easing.js.html +229 -0
  44. package/coverage/lcov-report/lib/features.js.html +826 -0
  45. package/coverage/lcov-report/lib/functions.js.html +130 -0
  46. package/coverage/lcov-report/lib/index.html +401 -0
  47. package/coverage/lcov-report/lib/location.js.html +127 -0
  48. package/coverage/lcov-report/lib/map.js.html +172 -0
  49. package/coverage/lcov-report/lib/math.js.html +511 -0
  50. package/coverage/lcov-report/lib/meshUtils.js.html +685 -0
  51. package/coverage/lcov-report/lib/messages.js.html +415 -0
  52. package/coverage/lcov-report/lib/network.js.html +136 -0
  53. package/coverage/lcov-report/lib/object.js.html +187 -0
  54. package/coverage/lcov-report/lib/palettes.js.html +259 -0
  55. package/coverage/lcov-report/lib/query.js.html +172 -0
  56. package/coverage/lcov-report/lib/strings.js.html +139 -0
  57. package/coverage/lcov-report/lib/url.js.html +85 -0
  58. package/coverage/lcov-report/lib/utils/assets.js.html +94 -0
  59. package/coverage/lcov-report/lib/utils/index.html +116 -0
  60. package/coverage/lcov-report/lib/uuid.js.html +112 -0
  61. package/coverage/lcov-report/models/Models.js.html +1489 -0
  62. package/coverage/lcov-report/models/SkeletonUtils.js.html +1879 -0
  63. package/coverage/lcov-report/models/index.html +131 -0
  64. package/coverage/lcov-report/physics/constants.js.html +307 -0
  65. package/coverage/lcov-report/physics/hitbox.js.html +235 -0
  66. package/coverage/lcov-report/physics/index.html +176 -0
  67. package/coverage/lcov-report/physics/index.js.html +1324 -0
  68. package/coverage/lcov-report/physics/messages.js.html +238 -0
  69. package/coverage/lcov-report/physics/utils.js.html +679 -0
  70. package/coverage/lcov-report/physics/worker/effects.js.html +325 -0
  71. package/coverage/lcov-report/physics/worker/elements.js.html +694 -0
  72. package/coverage/lcov-report/physics/worker/index.html +176 -0
  73. package/coverage/lcov-report/physics/worker/lib/dispatcher.js.html +160 -0
  74. package/coverage/lcov-report/physics/worker/lib/index.html +131 -0
  75. package/coverage/lcov-report/physics/worker/lib/math.js.html +109 -0
  76. package/coverage/lcov-report/physics/worker/player.js.html +301 -0
  77. package/coverage/lcov-report/physics/worker/vehicles.js.html +832 -0
  78. package/coverage/lcov-report/physics/worker/world.js.html +796 -0
  79. package/coverage/lcov-report/prettify.css +1 -0
  80. package/coverage/lcov-report/prettify.js +2 -0
  81. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  82. package/coverage/lcov-report/sorter.js +210 -0
  83. package/coverage/lcov.info +6368 -0
  84. package/dist/mage.js +8389 -8925
  85. package/eslint.config.js +73 -0
  86. package/jest.config.js +31 -0
  87. package/package.json +17 -5
@@ -0,0 +1,1324 @@
1
+
2
+ <!doctype html>
3
+ <html lang="en">
4
+
5
+ <head>
6
+ <title>Code coverage report for physics/index.js</title>
7
+ <meta charset="utf-8" />
8
+ <link rel="stylesheet" href="../prettify.css" />
9
+ <link rel="stylesheet" href="../base.css" />
10
+ <link rel="shortcut icon" type="image/x-icon" href="../favicon.png" />
11
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
12
+ <style type='text/css'>
13
+ .coverage-summary .sorter {
14
+ background-image: url(../sort-arrow-sprite.png);
15
+ }
16
+ </style>
17
+ </head>
18
+
19
+ <body>
20
+ <div class='wrapper'>
21
+ <div class='pad1'>
22
+ <h1><a href="../index.html">All files</a> / <a href="index.html">physics</a> index.js</h1>
23
+ <div class='clearfix'>
24
+
25
+ <div class='fl pad1y space-right2'>
26
+ <span class="strong">0% </span>
27
+ <span class="quiet">Statements</span>
28
+ <span class='fraction'>0/144</span>
29
+ </div>
30
+
31
+
32
+ <div class='fl pad1y space-right2'>
33
+ <span class="strong">0% </span>
34
+ <span class="quiet">Branches</span>
35
+ <span class='fraction'>0/54</span>
36
+ </div>
37
+
38
+
39
+ <div class='fl pad1y space-right2'>
40
+ <span class="strong">0% </span>
41
+ <span class="quiet">Functions</span>
42
+ <span class='fraction'>0/40</span>
43
+ </div>
44
+
45
+
46
+ <div class='fl pad1y space-right2'>
47
+ <span class="strong">0% </span>
48
+ <span class="quiet">Lines</span>
49
+ <span class='fraction'>0/142</span>
50
+ </div>
51
+
52
+
53
+ </div>
54
+ <p class="quiet">
55
+ Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
56
+ </p>
57
+ <template id="filterTemplate">
58
+ <div class="quiet">
59
+ Filter:
60
+ <input type="search" id="fileSearch">
61
+ </div>
62
+ </template>
63
+ </div>
64
+ <div class='status-line low'></div>
65
+ <pre><table class="coverage">
66
+ <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
67
+ <a name='L2'></a><a href='#L2'>2</a>
68
+ <a name='L3'></a><a href='#L3'>3</a>
69
+ <a name='L4'></a><a href='#L4'>4</a>
70
+ <a name='L5'></a><a href='#L5'>5</a>
71
+ <a name='L6'></a><a href='#L6'>6</a>
72
+ <a name='L7'></a><a href='#L7'>7</a>
73
+ <a name='L8'></a><a href='#L8'>8</a>
74
+ <a name='L9'></a><a href='#L9'>9</a>
75
+ <a name='L10'></a><a href='#L10'>10</a>
76
+ <a name='L11'></a><a href='#L11'>11</a>
77
+ <a name='L12'></a><a href='#L12'>12</a>
78
+ <a name='L13'></a><a href='#L13'>13</a>
79
+ <a name='L14'></a><a href='#L14'>14</a>
80
+ <a name='L15'></a><a href='#L15'>15</a>
81
+ <a name='L16'></a><a href='#L16'>16</a>
82
+ <a name='L17'></a><a href='#L17'>17</a>
83
+ <a name='L18'></a><a href='#L18'>18</a>
84
+ <a name='L19'></a><a href='#L19'>19</a>
85
+ <a name='L20'></a><a href='#L20'>20</a>
86
+ <a name='L21'></a><a href='#L21'>21</a>
87
+ <a name='L22'></a><a href='#L22'>22</a>
88
+ <a name='L23'></a><a href='#L23'>23</a>
89
+ <a name='L24'></a><a href='#L24'>24</a>
90
+ <a name='L25'></a><a href='#L25'>25</a>
91
+ <a name='L26'></a><a href='#L26'>26</a>
92
+ <a name='L27'></a><a href='#L27'>27</a>
93
+ <a name='L28'></a><a href='#L28'>28</a>
94
+ <a name='L29'></a><a href='#L29'>29</a>
95
+ <a name='L30'></a><a href='#L30'>30</a>
96
+ <a name='L31'></a><a href='#L31'>31</a>
97
+ <a name='L32'></a><a href='#L32'>32</a>
98
+ <a name='L33'></a><a href='#L33'>33</a>
99
+ <a name='L34'></a><a href='#L34'>34</a>
100
+ <a name='L35'></a><a href='#L35'>35</a>
101
+ <a name='L36'></a><a href='#L36'>36</a>
102
+ <a name='L37'></a><a href='#L37'>37</a>
103
+ <a name='L38'></a><a href='#L38'>38</a>
104
+ <a name='L39'></a><a href='#L39'>39</a>
105
+ <a name='L40'></a><a href='#L40'>40</a>
106
+ <a name='L41'></a><a href='#L41'>41</a>
107
+ <a name='L42'></a><a href='#L42'>42</a>
108
+ <a name='L43'></a><a href='#L43'>43</a>
109
+ <a name='L44'></a><a href='#L44'>44</a>
110
+ <a name='L45'></a><a href='#L45'>45</a>
111
+ <a name='L46'></a><a href='#L46'>46</a>
112
+ <a name='L47'></a><a href='#L47'>47</a>
113
+ <a name='L48'></a><a href='#L48'>48</a>
114
+ <a name='L49'></a><a href='#L49'>49</a>
115
+ <a name='L50'></a><a href='#L50'>50</a>
116
+ <a name='L51'></a><a href='#L51'>51</a>
117
+ <a name='L52'></a><a href='#L52'>52</a>
118
+ <a name='L53'></a><a href='#L53'>53</a>
119
+ <a name='L54'></a><a href='#L54'>54</a>
120
+ <a name='L55'></a><a href='#L55'>55</a>
121
+ <a name='L56'></a><a href='#L56'>56</a>
122
+ <a name='L57'></a><a href='#L57'>57</a>
123
+ <a name='L58'></a><a href='#L58'>58</a>
124
+ <a name='L59'></a><a href='#L59'>59</a>
125
+ <a name='L60'></a><a href='#L60'>60</a>
126
+ <a name='L61'></a><a href='#L61'>61</a>
127
+ <a name='L62'></a><a href='#L62'>62</a>
128
+ <a name='L63'></a><a href='#L63'>63</a>
129
+ <a name='L64'></a><a href='#L64'>64</a>
130
+ <a name='L65'></a><a href='#L65'>65</a>
131
+ <a name='L66'></a><a href='#L66'>66</a>
132
+ <a name='L67'></a><a href='#L67'>67</a>
133
+ <a name='L68'></a><a href='#L68'>68</a>
134
+ <a name='L69'></a><a href='#L69'>69</a>
135
+ <a name='L70'></a><a href='#L70'>70</a>
136
+ <a name='L71'></a><a href='#L71'>71</a>
137
+ <a name='L72'></a><a href='#L72'>72</a>
138
+ <a name='L73'></a><a href='#L73'>73</a>
139
+ <a name='L74'></a><a href='#L74'>74</a>
140
+ <a name='L75'></a><a href='#L75'>75</a>
141
+ <a name='L76'></a><a href='#L76'>76</a>
142
+ <a name='L77'></a><a href='#L77'>77</a>
143
+ <a name='L78'></a><a href='#L78'>78</a>
144
+ <a name='L79'></a><a href='#L79'>79</a>
145
+ <a name='L80'></a><a href='#L80'>80</a>
146
+ <a name='L81'></a><a href='#L81'>81</a>
147
+ <a name='L82'></a><a href='#L82'>82</a>
148
+ <a name='L83'></a><a href='#L83'>83</a>
149
+ <a name='L84'></a><a href='#L84'>84</a>
150
+ <a name='L85'></a><a href='#L85'>85</a>
151
+ <a name='L86'></a><a href='#L86'>86</a>
152
+ <a name='L87'></a><a href='#L87'>87</a>
153
+ <a name='L88'></a><a href='#L88'>88</a>
154
+ <a name='L89'></a><a href='#L89'>89</a>
155
+ <a name='L90'></a><a href='#L90'>90</a>
156
+ <a name='L91'></a><a href='#L91'>91</a>
157
+ <a name='L92'></a><a href='#L92'>92</a>
158
+ <a name='L93'></a><a href='#L93'>93</a>
159
+ <a name='L94'></a><a href='#L94'>94</a>
160
+ <a name='L95'></a><a href='#L95'>95</a>
161
+ <a name='L96'></a><a href='#L96'>96</a>
162
+ <a name='L97'></a><a href='#L97'>97</a>
163
+ <a name='L98'></a><a href='#L98'>98</a>
164
+ <a name='L99'></a><a href='#L99'>99</a>
165
+ <a name='L100'></a><a href='#L100'>100</a>
166
+ <a name='L101'></a><a href='#L101'>101</a>
167
+ <a name='L102'></a><a href='#L102'>102</a>
168
+ <a name='L103'></a><a href='#L103'>103</a>
169
+ <a name='L104'></a><a href='#L104'>104</a>
170
+ <a name='L105'></a><a href='#L105'>105</a>
171
+ <a name='L106'></a><a href='#L106'>106</a>
172
+ <a name='L107'></a><a href='#L107'>107</a>
173
+ <a name='L108'></a><a href='#L108'>108</a>
174
+ <a name='L109'></a><a href='#L109'>109</a>
175
+ <a name='L110'></a><a href='#L110'>110</a>
176
+ <a name='L111'></a><a href='#L111'>111</a>
177
+ <a name='L112'></a><a href='#L112'>112</a>
178
+ <a name='L113'></a><a href='#L113'>113</a>
179
+ <a name='L114'></a><a href='#L114'>114</a>
180
+ <a name='L115'></a><a href='#L115'>115</a>
181
+ <a name='L116'></a><a href='#L116'>116</a>
182
+ <a name='L117'></a><a href='#L117'>117</a>
183
+ <a name='L118'></a><a href='#L118'>118</a>
184
+ <a name='L119'></a><a href='#L119'>119</a>
185
+ <a name='L120'></a><a href='#L120'>120</a>
186
+ <a name='L121'></a><a href='#L121'>121</a>
187
+ <a name='L122'></a><a href='#L122'>122</a>
188
+ <a name='L123'></a><a href='#L123'>123</a>
189
+ <a name='L124'></a><a href='#L124'>124</a>
190
+ <a name='L125'></a><a href='#L125'>125</a>
191
+ <a name='L126'></a><a href='#L126'>126</a>
192
+ <a name='L127'></a><a href='#L127'>127</a>
193
+ <a name='L128'></a><a href='#L128'>128</a>
194
+ <a name='L129'></a><a href='#L129'>129</a>
195
+ <a name='L130'></a><a href='#L130'>130</a>
196
+ <a name='L131'></a><a href='#L131'>131</a>
197
+ <a name='L132'></a><a href='#L132'>132</a>
198
+ <a name='L133'></a><a href='#L133'>133</a>
199
+ <a name='L134'></a><a href='#L134'>134</a>
200
+ <a name='L135'></a><a href='#L135'>135</a>
201
+ <a name='L136'></a><a href='#L136'>136</a>
202
+ <a name='L137'></a><a href='#L137'>137</a>
203
+ <a name='L138'></a><a href='#L138'>138</a>
204
+ <a name='L139'></a><a href='#L139'>139</a>
205
+ <a name='L140'></a><a href='#L140'>140</a>
206
+ <a name='L141'></a><a href='#L141'>141</a>
207
+ <a name='L142'></a><a href='#L142'>142</a>
208
+ <a name='L143'></a><a href='#L143'>143</a>
209
+ <a name='L144'></a><a href='#L144'>144</a>
210
+ <a name='L145'></a><a href='#L145'>145</a>
211
+ <a name='L146'></a><a href='#L146'>146</a>
212
+ <a name='L147'></a><a href='#L147'>147</a>
213
+ <a name='L148'></a><a href='#L148'>148</a>
214
+ <a name='L149'></a><a href='#L149'>149</a>
215
+ <a name='L150'></a><a href='#L150'>150</a>
216
+ <a name='L151'></a><a href='#L151'>151</a>
217
+ <a name='L152'></a><a href='#L152'>152</a>
218
+ <a name='L153'></a><a href='#L153'>153</a>
219
+ <a name='L154'></a><a href='#L154'>154</a>
220
+ <a name='L155'></a><a href='#L155'>155</a>
221
+ <a name='L156'></a><a href='#L156'>156</a>
222
+ <a name='L157'></a><a href='#L157'>157</a>
223
+ <a name='L158'></a><a href='#L158'>158</a>
224
+ <a name='L159'></a><a href='#L159'>159</a>
225
+ <a name='L160'></a><a href='#L160'>160</a>
226
+ <a name='L161'></a><a href='#L161'>161</a>
227
+ <a name='L162'></a><a href='#L162'>162</a>
228
+ <a name='L163'></a><a href='#L163'>163</a>
229
+ <a name='L164'></a><a href='#L164'>164</a>
230
+ <a name='L165'></a><a href='#L165'>165</a>
231
+ <a name='L166'></a><a href='#L166'>166</a>
232
+ <a name='L167'></a><a href='#L167'>167</a>
233
+ <a name='L168'></a><a href='#L168'>168</a>
234
+ <a name='L169'></a><a href='#L169'>169</a>
235
+ <a name='L170'></a><a href='#L170'>170</a>
236
+ <a name='L171'></a><a href='#L171'>171</a>
237
+ <a name='L172'></a><a href='#L172'>172</a>
238
+ <a name='L173'></a><a href='#L173'>173</a>
239
+ <a name='L174'></a><a href='#L174'>174</a>
240
+ <a name='L175'></a><a href='#L175'>175</a>
241
+ <a name='L176'></a><a href='#L176'>176</a>
242
+ <a name='L177'></a><a href='#L177'>177</a>
243
+ <a name='L178'></a><a href='#L178'>178</a>
244
+ <a name='L179'></a><a href='#L179'>179</a>
245
+ <a name='L180'></a><a href='#L180'>180</a>
246
+ <a name='L181'></a><a href='#L181'>181</a>
247
+ <a name='L182'></a><a href='#L182'>182</a>
248
+ <a name='L183'></a><a href='#L183'>183</a>
249
+ <a name='L184'></a><a href='#L184'>184</a>
250
+ <a name='L185'></a><a href='#L185'>185</a>
251
+ <a name='L186'></a><a href='#L186'>186</a>
252
+ <a name='L187'></a><a href='#L187'>187</a>
253
+ <a name='L188'></a><a href='#L188'>188</a>
254
+ <a name='L189'></a><a href='#L189'>189</a>
255
+ <a name='L190'></a><a href='#L190'>190</a>
256
+ <a name='L191'></a><a href='#L191'>191</a>
257
+ <a name='L192'></a><a href='#L192'>192</a>
258
+ <a name='L193'></a><a href='#L193'>193</a>
259
+ <a name='L194'></a><a href='#L194'>194</a>
260
+ <a name='L195'></a><a href='#L195'>195</a>
261
+ <a name='L196'></a><a href='#L196'>196</a>
262
+ <a name='L197'></a><a href='#L197'>197</a>
263
+ <a name='L198'></a><a href='#L198'>198</a>
264
+ <a name='L199'></a><a href='#L199'>199</a>
265
+ <a name='L200'></a><a href='#L200'>200</a>
266
+ <a name='L201'></a><a href='#L201'>201</a>
267
+ <a name='L202'></a><a href='#L202'>202</a>
268
+ <a name='L203'></a><a href='#L203'>203</a>
269
+ <a name='L204'></a><a href='#L204'>204</a>
270
+ <a name='L205'></a><a href='#L205'>205</a>
271
+ <a name='L206'></a><a href='#L206'>206</a>
272
+ <a name='L207'></a><a href='#L207'>207</a>
273
+ <a name='L208'></a><a href='#L208'>208</a>
274
+ <a name='L209'></a><a href='#L209'>209</a>
275
+ <a name='L210'></a><a href='#L210'>210</a>
276
+ <a name='L211'></a><a href='#L211'>211</a>
277
+ <a name='L212'></a><a href='#L212'>212</a>
278
+ <a name='L213'></a><a href='#L213'>213</a>
279
+ <a name='L214'></a><a href='#L214'>214</a>
280
+ <a name='L215'></a><a href='#L215'>215</a>
281
+ <a name='L216'></a><a href='#L216'>216</a>
282
+ <a name='L217'></a><a href='#L217'>217</a>
283
+ <a name='L218'></a><a href='#L218'>218</a>
284
+ <a name='L219'></a><a href='#L219'>219</a>
285
+ <a name='L220'></a><a href='#L220'>220</a>
286
+ <a name='L221'></a><a href='#L221'>221</a>
287
+ <a name='L222'></a><a href='#L222'>222</a>
288
+ <a name='L223'></a><a href='#L223'>223</a>
289
+ <a name='L224'></a><a href='#L224'>224</a>
290
+ <a name='L225'></a><a href='#L225'>225</a>
291
+ <a name='L226'></a><a href='#L226'>226</a>
292
+ <a name='L227'></a><a href='#L227'>227</a>
293
+ <a name='L228'></a><a href='#L228'>228</a>
294
+ <a name='L229'></a><a href='#L229'>229</a>
295
+ <a name='L230'></a><a href='#L230'>230</a>
296
+ <a name='L231'></a><a href='#L231'>231</a>
297
+ <a name='L232'></a><a href='#L232'>232</a>
298
+ <a name='L233'></a><a href='#L233'>233</a>
299
+ <a name='L234'></a><a href='#L234'>234</a>
300
+ <a name='L235'></a><a href='#L235'>235</a>
301
+ <a name='L236'></a><a href='#L236'>236</a>
302
+ <a name='L237'></a><a href='#L237'>237</a>
303
+ <a name='L238'></a><a href='#L238'>238</a>
304
+ <a name='L239'></a><a href='#L239'>239</a>
305
+ <a name='L240'></a><a href='#L240'>240</a>
306
+ <a name='L241'></a><a href='#L241'>241</a>
307
+ <a name='L242'></a><a href='#L242'>242</a>
308
+ <a name='L243'></a><a href='#L243'>243</a>
309
+ <a name='L244'></a><a href='#L244'>244</a>
310
+ <a name='L245'></a><a href='#L245'>245</a>
311
+ <a name='L246'></a><a href='#L246'>246</a>
312
+ <a name='L247'></a><a href='#L247'>247</a>
313
+ <a name='L248'></a><a href='#L248'>248</a>
314
+ <a name='L249'></a><a href='#L249'>249</a>
315
+ <a name='L250'></a><a href='#L250'>250</a>
316
+ <a name='L251'></a><a href='#L251'>251</a>
317
+ <a name='L252'></a><a href='#L252'>252</a>
318
+ <a name='L253'></a><a href='#L253'>253</a>
319
+ <a name='L254'></a><a href='#L254'>254</a>
320
+ <a name='L255'></a><a href='#L255'>255</a>
321
+ <a name='L256'></a><a href='#L256'>256</a>
322
+ <a name='L257'></a><a href='#L257'>257</a>
323
+ <a name='L258'></a><a href='#L258'>258</a>
324
+ <a name='L259'></a><a href='#L259'>259</a>
325
+ <a name='L260'></a><a href='#L260'>260</a>
326
+ <a name='L261'></a><a href='#L261'>261</a>
327
+ <a name='L262'></a><a href='#L262'>262</a>
328
+ <a name='L263'></a><a href='#L263'>263</a>
329
+ <a name='L264'></a><a href='#L264'>264</a>
330
+ <a name='L265'></a><a href='#L265'>265</a>
331
+ <a name='L266'></a><a href='#L266'>266</a>
332
+ <a name='L267'></a><a href='#L267'>267</a>
333
+ <a name='L268'></a><a href='#L268'>268</a>
334
+ <a name='L269'></a><a href='#L269'>269</a>
335
+ <a name='L270'></a><a href='#L270'>270</a>
336
+ <a name='L271'></a><a href='#L271'>271</a>
337
+ <a name='L272'></a><a href='#L272'>272</a>
338
+ <a name='L273'></a><a href='#L273'>273</a>
339
+ <a name='L274'></a><a href='#L274'>274</a>
340
+ <a name='L275'></a><a href='#L275'>275</a>
341
+ <a name='L276'></a><a href='#L276'>276</a>
342
+ <a name='L277'></a><a href='#L277'>277</a>
343
+ <a name='L278'></a><a href='#L278'>278</a>
344
+ <a name='L279'></a><a href='#L279'>279</a>
345
+ <a name='L280'></a><a href='#L280'>280</a>
346
+ <a name='L281'></a><a href='#L281'>281</a>
347
+ <a name='L282'></a><a href='#L282'>282</a>
348
+ <a name='L283'></a><a href='#L283'>283</a>
349
+ <a name='L284'></a><a href='#L284'>284</a>
350
+ <a name='L285'></a><a href='#L285'>285</a>
351
+ <a name='L286'></a><a href='#L286'>286</a>
352
+ <a name='L287'></a><a href='#L287'>287</a>
353
+ <a name='L288'></a><a href='#L288'>288</a>
354
+ <a name='L289'></a><a href='#L289'>289</a>
355
+ <a name='L290'></a><a href='#L290'>290</a>
356
+ <a name='L291'></a><a href='#L291'>291</a>
357
+ <a name='L292'></a><a href='#L292'>292</a>
358
+ <a name='L293'></a><a href='#L293'>293</a>
359
+ <a name='L294'></a><a href='#L294'>294</a>
360
+ <a name='L295'></a><a href='#L295'>295</a>
361
+ <a name='L296'></a><a href='#L296'>296</a>
362
+ <a name='L297'></a><a href='#L297'>297</a>
363
+ <a name='L298'></a><a href='#L298'>298</a>
364
+ <a name='L299'></a><a href='#L299'>299</a>
365
+ <a name='L300'></a><a href='#L300'>300</a>
366
+ <a name='L301'></a><a href='#L301'>301</a>
367
+ <a name='L302'></a><a href='#L302'>302</a>
368
+ <a name='L303'></a><a href='#L303'>303</a>
369
+ <a name='L304'></a><a href='#L304'>304</a>
370
+ <a name='L305'></a><a href='#L305'>305</a>
371
+ <a name='L306'></a><a href='#L306'>306</a>
372
+ <a name='L307'></a><a href='#L307'>307</a>
373
+ <a name='L308'></a><a href='#L308'>308</a>
374
+ <a name='L309'></a><a href='#L309'>309</a>
375
+ <a name='L310'></a><a href='#L310'>310</a>
376
+ <a name='L311'></a><a href='#L311'>311</a>
377
+ <a name='L312'></a><a href='#L312'>312</a>
378
+ <a name='L313'></a><a href='#L313'>313</a>
379
+ <a name='L314'></a><a href='#L314'>314</a>
380
+ <a name='L315'></a><a href='#L315'>315</a>
381
+ <a name='L316'></a><a href='#L316'>316</a>
382
+ <a name='L317'></a><a href='#L317'>317</a>
383
+ <a name='L318'></a><a href='#L318'>318</a>
384
+ <a name='L319'></a><a href='#L319'>319</a>
385
+ <a name='L320'></a><a href='#L320'>320</a>
386
+ <a name='L321'></a><a href='#L321'>321</a>
387
+ <a name='L322'></a><a href='#L322'>322</a>
388
+ <a name='L323'></a><a href='#L323'>323</a>
389
+ <a name='L324'></a><a href='#L324'>324</a>
390
+ <a name='L325'></a><a href='#L325'>325</a>
391
+ <a name='L326'></a><a href='#L326'>326</a>
392
+ <a name='L327'></a><a href='#L327'>327</a>
393
+ <a name='L328'></a><a href='#L328'>328</a>
394
+ <a name='L329'></a><a href='#L329'>329</a>
395
+ <a name='L330'></a><a href='#L330'>330</a>
396
+ <a name='L331'></a><a href='#L331'>331</a>
397
+ <a name='L332'></a><a href='#L332'>332</a>
398
+ <a name='L333'></a><a href='#L333'>333</a>
399
+ <a name='L334'></a><a href='#L334'>334</a>
400
+ <a name='L335'></a><a href='#L335'>335</a>
401
+ <a name='L336'></a><a href='#L336'>336</a>
402
+ <a name='L337'></a><a href='#L337'>337</a>
403
+ <a name='L338'></a><a href='#L338'>338</a>
404
+ <a name='L339'></a><a href='#L339'>339</a>
405
+ <a name='L340'></a><a href='#L340'>340</a>
406
+ <a name='L341'></a><a href='#L341'>341</a>
407
+ <a name='L342'></a><a href='#L342'>342</a>
408
+ <a name='L343'></a><a href='#L343'>343</a>
409
+ <a name='L344'></a><a href='#L344'>344</a>
410
+ <a name='L345'></a><a href='#L345'>345</a>
411
+ <a name='L346'></a><a href='#L346'>346</a>
412
+ <a name='L347'></a><a href='#L347'>347</a>
413
+ <a name='L348'></a><a href='#L348'>348</a>
414
+ <a name='L349'></a><a href='#L349'>349</a>
415
+ <a name='L350'></a><a href='#L350'>350</a>
416
+ <a name='L351'></a><a href='#L351'>351</a>
417
+ <a name='L352'></a><a href='#L352'>352</a>
418
+ <a name='L353'></a><a href='#L353'>353</a>
419
+ <a name='L354'></a><a href='#L354'>354</a>
420
+ <a name='L355'></a><a href='#L355'>355</a>
421
+ <a name='L356'></a><a href='#L356'>356</a>
422
+ <a name='L357'></a><a href='#L357'>357</a>
423
+ <a name='L358'></a><a href='#L358'>358</a>
424
+ <a name='L359'></a><a href='#L359'>359</a>
425
+ <a name='L360'></a><a href='#L360'>360</a>
426
+ <a name='L361'></a><a href='#L361'>361</a>
427
+ <a name='L362'></a><a href='#L362'>362</a>
428
+ <a name='L363'></a><a href='#L363'>363</a>
429
+ <a name='L364'></a><a href='#L364'>364</a>
430
+ <a name='L365'></a><a href='#L365'>365</a>
431
+ <a name='L366'></a><a href='#L366'>366</a>
432
+ <a name='L367'></a><a href='#L367'>367</a>
433
+ <a name='L368'></a><a href='#L368'>368</a>
434
+ <a name='L369'></a><a href='#L369'>369</a>
435
+ <a name='L370'></a><a href='#L370'>370</a>
436
+ <a name='L371'></a><a href='#L371'>371</a>
437
+ <a name='L372'></a><a href='#L372'>372</a>
438
+ <a name='L373'></a><a href='#L373'>373</a>
439
+ <a name='L374'></a><a href='#L374'>374</a>
440
+ <a name='L375'></a><a href='#L375'>375</a>
441
+ <a name='L376'></a><a href='#L376'>376</a>
442
+ <a name='L377'></a><a href='#L377'>377</a>
443
+ <a name='L378'></a><a href='#L378'>378</a>
444
+ <a name='L379'></a><a href='#L379'>379</a>
445
+ <a name='L380'></a><a href='#L380'>380</a>
446
+ <a name='L381'></a><a href='#L381'>381</a>
447
+ <a name='L382'></a><a href='#L382'>382</a>
448
+ <a name='L383'></a><a href='#L383'>383</a>
449
+ <a name='L384'></a><a href='#L384'>384</a>
450
+ <a name='L385'></a><a href='#L385'>385</a>
451
+ <a name='L386'></a><a href='#L386'>386</a>
452
+ <a name='L387'></a><a href='#L387'>387</a>
453
+ <a name='L388'></a><a href='#L388'>388</a>
454
+ <a name='L389'></a><a href='#L389'>389</a>
455
+ <a name='L390'></a><a href='#L390'>390</a>
456
+ <a name='L391'></a><a href='#L391'>391</a>
457
+ <a name='L392'></a><a href='#L392'>392</a>
458
+ <a name='L393'></a><a href='#L393'>393</a>
459
+ <a name='L394'></a><a href='#L394'>394</a>
460
+ <a name='L395'></a><a href='#L395'>395</a>
461
+ <a name='L396'></a><a href='#L396'>396</a>
462
+ <a name='L397'></a><a href='#L397'>397</a>
463
+ <a name='L398'></a><a href='#L398'>398</a>
464
+ <a name='L399'></a><a href='#L399'>399</a>
465
+ <a name='L400'></a><a href='#L400'>400</a>
466
+ <a name='L401'></a><a href='#L401'>401</a>
467
+ <a name='L402'></a><a href='#L402'>402</a>
468
+ <a name='L403'></a><a href='#L403'>403</a>
469
+ <a name='L404'></a><a href='#L404'>404</a>
470
+ <a name='L405'></a><a href='#L405'>405</a>
471
+ <a name='L406'></a><a href='#L406'>406</a>
472
+ <a name='L407'></a><a href='#L407'>407</a>
473
+ <a name='L408'></a><a href='#L408'>408</a>
474
+ <a name='L409'></a><a href='#L409'>409</a>
475
+ <a name='L410'></a><a href='#L410'>410</a>
476
+ <a name='L411'></a><a href='#L411'>411</a>
477
+ <a name='L412'></a><a href='#L412'>412</a>
478
+ <a name='L413'></a><a href='#L413'>413</a>
479
+ <a name='L414'></a><a href='#L414'>414</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
480
+ <span class="cline-any cline-neutral">&nbsp;</span>
481
+ <span class="cline-any cline-neutral">&nbsp;</span>
482
+ <span class="cline-any cline-neutral">&nbsp;</span>
483
+ <span class="cline-any cline-neutral">&nbsp;</span>
484
+ <span class="cline-any cline-neutral">&nbsp;</span>
485
+ <span class="cline-any cline-neutral">&nbsp;</span>
486
+ <span class="cline-any cline-neutral">&nbsp;</span>
487
+ <span class="cline-any cline-neutral">&nbsp;</span>
488
+ <span class="cline-any cline-neutral">&nbsp;</span>
489
+ <span class="cline-any cline-neutral">&nbsp;</span>
490
+ <span class="cline-any cline-neutral">&nbsp;</span>
491
+ <span class="cline-any cline-neutral">&nbsp;</span>
492
+ <span class="cline-any cline-neutral">&nbsp;</span>
493
+ <span class="cline-any cline-neutral">&nbsp;</span>
494
+ <span class="cline-any cline-neutral">&nbsp;</span>
495
+ <span class="cline-any cline-neutral">&nbsp;</span>
496
+ <span class="cline-any cline-neutral">&nbsp;</span>
497
+ <span class="cline-any cline-neutral">&nbsp;</span>
498
+ <span class="cline-any cline-no">&nbsp;</span>
499
+ <span class="cline-any cline-neutral">&nbsp;</span>
500
+ <span class="cline-any cline-neutral">&nbsp;</span>
501
+ <span class="cline-any cline-neutral">&nbsp;</span>
502
+ <span class="cline-any cline-neutral">&nbsp;</span>
503
+ <span class="cline-any cline-neutral">&nbsp;</span>
504
+ <span class="cline-any cline-neutral">&nbsp;</span>
505
+ <span class="cline-any cline-neutral">&nbsp;</span>
506
+ <span class="cline-any cline-neutral">&nbsp;</span>
507
+ <span class="cline-any cline-no">&nbsp;</span>
508
+ <span class="cline-any cline-neutral">&nbsp;</span>
509
+ <span class="cline-any cline-no">&nbsp;</span>
510
+ <span class="cline-any cline-no">&nbsp;</span>
511
+ <span class="cline-any cline-no">&nbsp;</span>
512
+ <span class="cline-any cline-neutral">&nbsp;</span>
513
+ <span class="cline-any cline-neutral">&nbsp;</span>
514
+ <span class="cline-any cline-neutral">&nbsp;</span>
515
+ <span class="cline-any cline-neutral">&nbsp;</span>
516
+ <span class="cline-any cline-neutral">&nbsp;</span>
517
+ <span class="cline-any cline-neutral">&nbsp;</span>
518
+ <span class="cline-any cline-neutral">&nbsp;</span>
519
+ <span class="cline-any cline-neutral">&nbsp;</span>
520
+ <span class="cline-any cline-no">&nbsp;</span>
521
+ <span class="cline-any cline-no">&nbsp;</span>
522
+ <span class="cline-any cline-no">&nbsp;</span>
523
+ <span class="cline-any cline-no">&nbsp;</span>
524
+ <span class="cline-any cline-neutral">&nbsp;</span>
525
+ <span class="cline-any cline-neutral">&nbsp;</span>
526
+ <span class="cline-any cline-neutral">&nbsp;</span>
527
+ <span class="cline-any cline-no">&nbsp;</span>
528
+ <span class="cline-any cline-no">&nbsp;</span>
529
+ <span class="cline-any cline-no">&nbsp;</span>
530
+ <span class="cline-any cline-no">&nbsp;</span>
531
+ <span class="cline-any cline-neutral">&nbsp;</span>
532
+ <span class="cline-any cline-neutral">&nbsp;</span>
533
+ <span class="cline-any cline-no">&nbsp;</span>
534
+ <span class="cline-any cline-no">&nbsp;</span>
535
+ <span class="cline-any cline-no">&nbsp;</span>
536
+ <span class="cline-any cline-neutral">&nbsp;</span>
537
+ <span class="cline-any cline-neutral">&nbsp;</span>
538
+ <span class="cline-any cline-no">&nbsp;</span>
539
+ <span class="cline-any cline-no">&nbsp;</span>
540
+ <span class="cline-any cline-no">&nbsp;</span>
541
+ <span class="cline-any cline-no">&nbsp;</span>
542
+ <span class="cline-any cline-no">&nbsp;</span>
543
+ <span class="cline-any cline-no">&nbsp;</span>
544
+ <span class="cline-any cline-neutral">&nbsp;</span>
545
+ <span class="cline-any cline-no">&nbsp;</span>
546
+ <span class="cline-any cline-neutral">&nbsp;</span>
547
+ <span class="cline-any cline-neutral">&nbsp;</span>
548
+ <span class="cline-any cline-neutral">&nbsp;</span>
549
+ <span class="cline-any cline-neutral">&nbsp;</span>
550
+ <span class="cline-any cline-no">&nbsp;</span>
551
+ <span class="cline-any cline-neutral">&nbsp;</span>
552
+ <span class="cline-any cline-neutral">&nbsp;</span>
553
+ <span class="cline-any cline-neutral">&nbsp;</span>
554
+ <span class="cline-any cline-neutral">&nbsp;</span>
555
+ <span class="cline-any cline-no">&nbsp;</span>
556
+ <span class="cline-any cline-no">&nbsp;</span>
557
+ <span class="cline-any cline-no">&nbsp;</span>
558
+ <span class="cline-any cline-neutral">&nbsp;</span>
559
+ <span class="cline-any cline-neutral">&nbsp;</span>
560
+ <span class="cline-any cline-neutral">&nbsp;</span>
561
+ <span class="cline-any cline-no">&nbsp;</span>
562
+ <span class="cline-any cline-neutral">&nbsp;</span>
563
+ <span class="cline-any cline-neutral">&nbsp;</span>
564
+ <span class="cline-any cline-neutral">&nbsp;</span>
565
+ <span class="cline-any cline-neutral">&nbsp;</span>
566
+ <span class="cline-any cline-no">&nbsp;</span>
567
+ <span class="cline-any cline-neutral">&nbsp;</span>
568
+ <span class="cline-any cline-no">&nbsp;</span>
569
+ <span class="cline-any cline-neutral">&nbsp;</span>
570
+ <span class="cline-any cline-neutral">&nbsp;</span>
571
+ <span class="cline-any cline-neutral">&nbsp;</span>
572
+ <span class="cline-any cline-no">&nbsp;</span>
573
+ <span class="cline-any cline-no">&nbsp;</span>
574
+ <span class="cline-any cline-no">&nbsp;</span>
575
+ <span class="cline-any cline-neutral">&nbsp;</span>
576
+ <span class="cline-any cline-no">&nbsp;</span>
577
+ <span class="cline-any cline-neutral">&nbsp;</span>
578
+ <span class="cline-any cline-neutral">&nbsp;</span>
579
+ <span class="cline-any cline-neutral">&nbsp;</span>
580
+ <span class="cline-any cline-neutral">&nbsp;</span>
581
+ <span class="cline-any cline-no">&nbsp;</span>
582
+ <span class="cline-any cline-no">&nbsp;</span>
583
+ <span class="cline-any cline-no">&nbsp;</span>
584
+ <span class="cline-any cline-neutral">&nbsp;</span>
585
+ <span class="cline-any cline-no">&nbsp;</span>
586
+ <span class="cline-any cline-neutral">&nbsp;</span>
587
+ <span class="cline-any cline-neutral">&nbsp;</span>
588
+ <span class="cline-any cline-neutral">&nbsp;</span>
589
+ <span class="cline-any cline-neutral">&nbsp;</span>
590
+ <span class="cline-any cline-no">&nbsp;</span>
591
+ <span class="cline-any cline-no">&nbsp;</span>
592
+ <span class="cline-any cline-neutral">&nbsp;</span>
593
+ <span class="cline-any cline-no">&nbsp;</span>
594
+ <span class="cline-any cline-neutral">&nbsp;</span>
595
+ <span class="cline-any cline-neutral">&nbsp;</span>
596
+ <span class="cline-any cline-neutral">&nbsp;</span>
597
+ <span class="cline-any cline-neutral">&nbsp;</span>
598
+ <span class="cline-any cline-neutral">&nbsp;</span>
599
+ <span class="cline-any cline-no">&nbsp;</span>
600
+ <span class="cline-any cline-no">&nbsp;</span>
601
+ <span class="cline-any cline-no">&nbsp;</span>
602
+ <span class="cline-any cline-no">&nbsp;</span>
603
+ <span class="cline-any cline-no">&nbsp;</span>
604
+ <span class="cline-any cline-no">&nbsp;</span>
605
+ <span class="cline-any cline-neutral">&nbsp;</span>
606
+ <span class="cline-any cline-no">&nbsp;</span>
607
+ <span class="cline-any cline-neutral">&nbsp;</span>
608
+ <span class="cline-any cline-neutral">&nbsp;</span>
609
+ <span class="cline-any cline-neutral">&nbsp;</span>
610
+ <span class="cline-any cline-neutral">&nbsp;</span>
611
+ <span class="cline-any cline-no">&nbsp;</span>
612
+ <span class="cline-any cline-neutral">&nbsp;</span>
613
+ <span class="cline-any cline-neutral">&nbsp;</span>
614
+ <span class="cline-any cline-neutral">&nbsp;</span>
615
+ <span class="cline-any cline-no">&nbsp;</span>
616
+ <span class="cline-any cline-neutral">&nbsp;</span>
617
+ <span class="cline-any cline-neutral">&nbsp;</span>
618
+ <span class="cline-any cline-no">&nbsp;</span>
619
+ <span class="cline-any cline-no">&nbsp;</span>
620
+ <span class="cline-any cline-neutral">&nbsp;</span>
621
+ <span class="cline-any cline-no">&nbsp;</span>
622
+ <span class="cline-any cline-no">&nbsp;</span>
623
+ <span class="cline-any cline-neutral">&nbsp;</span>
624
+ <span class="cline-any cline-no">&nbsp;</span>
625
+ <span class="cline-any cline-no">&nbsp;</span>
626
+ <span class="cline-any cline-neutral">&nbsp;</span>
627
+ <span class="cline-any cline-no">&nbsp;</span>
628
+ <span class="cline-any cline-no">&nbsp;</span>
629
+ <span class="cline-any cline-neutral">&nbsp;</span>
630
+ <span class="cline-any cline-no">&nbsp;</span>
631
+ <span class="cline-any cline-no">&nbsp;</span>
632
+ <span class="cline-any cline-neutral">&nbsp;</span>
633
+ <span class="cline-any cline-no">&nbsp;</span>
634
+ <span class="cline-any cline-no">&nbsp;</span>
635
+ <span class="cline-any cline-neutral">&nbsp;</span>
636
+ <span class="cline-any cline-no">&nbsp;</span>
637
+ <span class="cline-any cline-neutral">&nbsp;</span>
638
+ <span class="cline-any cline-neutral">&nbsp;</span>
639
+ <span class="cline-any cline-neutral">&nbsp;</span>
640
+ <span class="cline-any cline-no">&nbsp;</span>
641
+ <span class="cline-any cline-no">&nbsp;</span>
642
+ <span class="cline-any cline-neutral">&nbsp;</span>
643
+ <span class="cline-any cline-neutral">&nbsp;</span>
644
+ <span class="cline-any cline-neutral">&nbsp;</span>
645
+ <span class="cline-any cline-neutral">&nbsp;</span>
646
+ <span class="cline-any cline-neutral">&nbsp;</span>
647
+ <span class="cline-any cline-no">&nbsp;</span>
648
+ <span class="cline-any cline-no">&nbsp;</span>
649
+ <span class="cline-any cline-no">&nbsp;</span>
650
+ <span class="cline-any cline-neutral">&nbsp;</span>
651
+ <span class="cline-any cline-neutral">&nbsp;</span>
652
+ <span class="cline-any cline-no">&nbsp;</span>
653
+ <span class="cline-any cline-no">&nbsp;</span>
654
+ <span class="cline-any cline-neutral">&nbsp;</span>
655
+ <span class="cline-any cline-no">&nbsp;</span>
656
+ <span class="cline-any cline-no">&nbsp;</span>
657
+ <span class="cline-any cline-no">&nbsp;</span>
658
+ <span class="cline-any cline-neutral">&nbsp;</span>
659
+ <span class="cline-any cline-no">&nbsp;</span>
660
+ <span class="cline-any cline-neutral">&nbsp;</span>
661
+ <span class="cline-any cline-neutral">&nbsp;</span>
662
+ <span class="cline-any cline-neutral">&nbsp;</span>
663
+ <span class="cline-any cline-neutral">&nbsp;</span>
664
+ <span class="cline-any cline-neutral">&nbsp;</span>
665
+ <span class="cline-any cline-neutral">&nbsp;</span>
666
+ <span class="cline-any cline-neutral">&nbsp;</span>
667
+ <span class="cline-any cline-no">&nbsp;</span>
668
+ <span class="cline-any cline-no">&nbsp;</span>
669
+ <span class="cline-any cline-no">&nbsp;</span>
670
+ <span class="cline-any cline-no">&nbsp;</span>
671
+ <span class="cline-any cline-neutral">&nbsp;</span>
672
+ <span class="cline-any cline-neutral">&nbsp;</span>
673
+ <span class="cline-any cline-neutral">&nbsp;</span>
674
+ <span class="cline-any cline-neutral">&nbsp;</span>
675
+ <span class="cline-any cline-neutral">&nbsp;</span>
676
+ <span class="cline-any cline-neutral">&nbsp;</span>
677
+ <span class="cline-any cline-neutral">&nbsp;</span>
678
+ <span class="cline-any cline-no">&nbsp;</span>
679
+ <span class="cline-any cline-no">&nbsp;</span>
680
+ <span class="cline-any cline-neutral">&nbsp;</span>
681
+ <span class="cline-any cline-no">&nbsp;</span>
682
+ <span class="cline-any cline-no">&nbsp;</span>
683
+ <span class="cline-any cline-neutral">&nbsp;</span>
684
+ <span class="cline-any cline-neutral">&nbsp;</span>
685
+ <span class="cline-any cline-neutral">&nbsp;</span>
686
+ <span class="cline-any cline-neutral">&nbsp;</span>
687
+ <span class="cline-any cline-neutral">&nbsp;</span>
688
+ <span class="cline-any cline-neutral">&nbsp;</span>
689
+ <span class="cline-any cline-neutral">&nbsp;</span>
690
+ <span class="cline-any cline-no">&nbsp;</span>
691
+ <span class="cline-any cline-neutral">&nbsp;</span>
692
+ <span class="cline-any cline-neutral">&nbsp;</span>
693
+ <span class="cline-any cline-no">&nbsp;</span>
694
+ <span class="cline-any cline-neutral">&nbsp;</span>
695
+ <span class="cline-any cline-no">&nbsp;</span>
696
+ <span class="cline-any cline-no">&nbsp;</span>
697
+ <span class="cline-any cline-neutral">&nbsp;</span>
698
+ <span class="cline-any cline-neutral">&nbsp;</span>
699
+ <span class="cline-any cline-neutral">&nbsp;</span>
700
+ <span class="cline-any cline-neutral">&nbsp;</span>
701
+ <span class="cline-any cline-no">&nbsp;</span>
702
+ <span class="cline-any cline-neutral">&nbsp;</span>
703
+ <span class="cline-any cline-no">&nbsp;</span>
704
+ <span class="cline-any cline-neutral">&nbsp;</span>
705
+ <span class="cline-any cline-neutral">&nbsp;</span>
706
+ <span class="cline-any cline-neutral">&nbsp;</span>
707
+ <span class="cline-any cline-neutral">&nbsp;</span>
708
+ <span class="cline-any cline-neutral">&nbsp;</span>
709
+ <span class="cline-any cline-neutral">&nbsp;</span>
710
+ <span class="cline-any cline-neutral">&nbsp;</span>
711
+ <span class="cline-any cline-neutral">&nbsp;</span>
712
+ <span class="cline-any cline-no">&nbsp;</span>
713
+ <span class="cline-any cline-no">&nbsp;</span>
714
+ <span class="cline-any cline-no">&nbsp;</span>
715
+ <span class="cline-any cline-neutral">&nbsp;</span>
716
+ <span class="cline-any cline-no">&nbsp;</span>
717
+ <span class="cline-any cline-neutral">&nbsp;</span>
718
+ <span class="cline-any cline-no">&nbsp;</span>
719
+ <span class="cline-any cline-neutral">&nbsp;</span>
720
+ <span class="cline-any cline-neutral">&nbsp;</span>
721
+ <span class="cline-any cline-neutral">&nbsp;</span>
722
+ <span class="cline-any cline-neutral">&nbsp;</span>
723
+ <span class="cline-any cline-neutral">&nbsp;</span>
724
+ <span class="cline-any cline-neutral">&nbsp;</span>
725
+ <span class="cline-any cline-neutral">&nbsp;</span>
726
+ <span class="cline-any cline-neutral">&nbsp;</span>
727
+ <span class="cline-any cline-neutral">&nbsp;</span>
728
+ <span class="cline-any cline-no">&nbsp;</span>
729
+ <span class="cline-any cline-no">&nbsp;</span>
730
+ <span class="cline-any cline-no">&nbsp;</span>
731
+ <span class="cline-any cline-no">&nbsp;</span>
732
+ <span class="cline-any cline-no">&nbsp;</span>
733
+ <span class="cline-any cline-neutral">&nbsp;</span>
734
+ <span class="cline-any cline-no">&nbsp;</span>
735
+ <span class="cline-any cline-no">&nbsp;</span>
736
+ <span class="cline-any cline-no">&nbsp;</span>
737
+ <span class="cline-any cline-no">&nbsp;</span>
738
+ <span class="cline-any cline-neutral">&nbsp;</span>
739
+ <span class="cline-any cline-neutral">&nbsp;</span>
740
+ <span class="cline-any cline-no">&nbsp;</span>
741
+ <span class="cline-any cline-neutral">&nbsp;</span>
742
+ <span class="cline-any cline-no">&nbsp;</span>
743
+ <span class="cline-any cline-neutral">&nbsp;</span>
744
+ <span class="cline-any cline-neutral">&nbsp;</span>
745
+ <span class="cline-any cline-neutral">&nbsp;</span>
746
+ <span class="cline-any cline-neutral">&nbsp;</span>
747
+ <span class="cline-any cline-neutral">&nbsp;</span>
748
+ <span class="cline-any cline-neutral">&nbsp;</span>
749
+ <span class="cline-any cline-neutral">&nbsp;</span>
750
+ <span class="cline-any cline-neutral">&nbsp;</span>
751
+ <span class="cline-any cline-neutral">&nbsp;</span>
752
+ <span class="cline-any cline-neutral">&nbsp;</span>
753
+ <span class="cline-any cline-neutral">&nbsp;</span>
754
+ <span class="cline-any cline-neutral">&nbsp;</span>
755
+ <span class="cline-any cline-neutral">&nbsp;</span>
756
+ <span class="cline-any cline-no">&nbsp;</span>
757
+ <span class="cline-any cline-no">&nbsp;</span>
758
+ <span class="cline-any cline-no">&nbsp;</span>
759
+ <span class="cline-any cline-neutral">&nbsp;</span>
760
+ <span class="cline-any cline-no">&nbsp;</span>
761
+ <span class="cline-any cline-neutral">&nbsp;</span>
762
+ <span class="cline-any cline-neutral">&nbsp;</span>
763
+ <span class="cline-any cline-neutral">&nbsp;</span>
764
+ <span class="cline-any cline-neutral">&nbsp;</span>
765
+ <span class="cline-any cline-neutral">&nbsp;</span>
766
+ <span class="cline-any cline-neutral">&nbsp;</span>
767
+ <span class="cline-any cline-neutral">&nbsp;</span>
768
+ <span class="cline-any cline-no">&nbsp;</span>
769
+ <span class="cline-any cline-no">&nbsp;</span>
770
+ <span class="cline-any cline-neutral">&nbsp;</span>
771
+ <span class="cline-any cline-neutral">&nbsp;</span>
772
+ <span class="cline-any cline-no">&nbsp;</span>
773
+ <span class="cline-any cline-no">&nbsp;</span>
774
+ <span class="cline-any cline-no">&nbsp;</span>
775
+ <span class="cline-any cline-neutral">&nbsp;</span>
776
+ <span class="cline-any cline-no">&nbsp;</span>
777
+ <span class="cline-any cline-neutral">&nbsp;</span>
778
+ <span class="cline-any cline-neutral">&nbsp;</span>
779
+ <span class="cline-any cline-neutral">&nbsp;</span>
780
+ <span class="cline-any cline-neutral">&nbsp;</span>
781
+ <span class="cline-any cline-neutral">&nbsp;</span>
782
+ <span class="cline-any cline-neutral">&nbsp;</span>
783
+ <span class="cline-any cline-neutral">&nbsp;</span>
784
+ <span class="cline-any cline-no">&nbsp;</span>
785
+ <span class="cline-any cline-neutral">&nbsp;</span>
786
+ <span class="cline-any cline-neutral">&nbsp;</span>
787
+ <span class="cline-any cline-neutral">&nbsp;</span>
788
+ <span class="cline-any cline-no">&nbsp;</span>
789
+ <span class="cline-any cline-no">&nbsp;</span>
790
+ <span class="cline-any cline-no">&nbsp;</span>
791
+ <span class="cline-any cline-neutral">&nbsp;</span>
792
+ <span class="cline-any cline-no">&nbsp;</span>
793
+ <span class="cline-any cline-neutral">&nbsp;</span>
794
+ <span class="cline-any cline-neutral">&nbsp;</span>
795
+ <span class="cline-any cline-neutral">&nbsp;</span>
796
+ <span class="cline-any cline-neutral">&nbsp;</span>
797
+ <span class="cline-any cline-neutral">&nbsp;</span>
798
+ <span class="cline-any cline-neutral">&nbsp;</span>
799
+ <span class="cline-any cline-neutral">&nbsp;</span>
800
+ <span class="cline-any cline-neutral">&nbsp;</span>
801
+ <span class="cline-any cline-no">&nbsp;</span>
802
+ <span class="cline-any cline-no">&nbsp;</span>
803
+ <span class="cline-any cline-no">&nbsp;</span>
804
+ <span class="cline-any cline-neutral">&nbsp;</span>
805
+ <span class="cline-any cline-no">&nbsp;</span>
806
+ <span class="cline-any cline-neutral">&nbsp;</span>
807
+ <span class="cline-any cline-neutral">&nbsp;</span>
808
+ <span class="cline-any cline-neutral">&nbsp;</span>
809
+ <span class="cline-any cline-neutral">&nbsp;</span>
810
+ <span class="cline-any cline-neutral">&nbsp;</span>
811
+ <span class="cline-any cline-neutral">&nbsp;</span>
812
+ <span class="cline-any cline-neutral">&nbsp;</span>
813
+ <span class="cline-any cline-no">&nbsp;</span>
814
+ <span class="cline-any cline-no">&nbsp;</span>
815
+ <span class="cline-any cline-no">&nbsp;</span>
816
+ <span class="cline-any cline-neutral">&nbsp;</span>
817
+ <span class="cline-any cline-no">&nbsp;</span>
818
+ <span class="cline-any cline-neutral">&nbsp;</span>
819
+ <span class="cline-any cline-neutral">&nbsp;</span>
820
+ <span class="cline-any cline-neutral">&nbsp;</span>
821
+ <span class="cline-any cline-neutral">&nbsp;</span>
822
+ <span class="cline-any cline-neutral">&nbsp;</span>
823
+ <span class="cline-any cline-neutral">&nbsp;</span>
824
+ <span class="cline-any cline-neutral">&nbsp;</span>
825
+ <span class="cline-any cline-no">&nbsp;</span>
826
+ <span class="cline-any cline-no">&nbsp;</span>
827
+ <span class="cline-any cline-no">&nbsp;</span>
828
+ <span class="cline-any cline-neutral">&nbsp;</span>
829
+ <span class="cline-any cline-no">&nbsp;</span>
830
+ <span class="cline-any cline-neutral">&nbsp;</span>
831
+ <span class="cline-any cline-neutral">&nbsp;</span>
832
+ <span class="cline-any cline-neutral">&nbsp;</span>
833
+ <span class="cline-any cline-neutral">&nbsp;</span>
834
+ <span class="cline-any cline-neutral">&nbsp;</span>
835
+ <span class="cline-any cline-neutral">&nbsp;</span>
836
+ <span class="cline-any cline-neutral">&nbsp;</span>
837
+ <span class="cline-any cline-neutral">&nbsp;</span>
838
+ <span class="cline-any cline-neutral">&nbsp;</span>
839
+ <span class="cline-any cline-neutral">&nbsp;</span>
840
+ <span class="cline-any cline-neutral">&nbsp;</span>
841
+ <span class="cline-any cline-neutral">&nbsp;</span>
842
+ <span class="cline-any cline-neutral">&nbsp;</span>
843
+ <span class="cline-any cline-neutral">&nbsp;</span>
844
+ <span class="cline-any cline-neutral">&nbsp;</span>
845
+ <span class="cline-any cline-neutral">&nbsp;</span>
846
+ <span class="cline-any cline-neutral">&nbsp;</span>
847
+ <span class="cline-any cline-no">&nbsp;</span>
848
+ <span class="cline-any cline-no">&nbsp;</span>
849
+ <span class="cline-any cline-no">&nbsp;</span>
850
+ <span class="cline-any cline-neutral">&nbsp;</span>
851
+ <span class="cline-any cline-no">&nbsp;</span>
852
+ <span class="cline-any cline-neutral">&nbsp;</span>
853
+ <span class="cline-any cline-neutral">&nbsp;</span>
854
+ <span class="cline-any cline-neutral">&nbsp;</span>
855
+ <span class="cline-any cline-neutral">&nbsp;</span>
856
+ <span class="cline-any cline-neutral">&nbsp;</span>
857
+ <span class="cline-any cline-neutral">&nbsp;</span>
858
+ <span class="cline-any cline-neutral">&nbsp;</span>
859
+ <span class="cline-any cline-neutral">&nbsp;</span>
860
+ <span class="cline-any cline-no">&nbsp;</span>
861
+ <span class="cline-any cline-no">&nbsp;</span>
862
+ <span class="cline-any cline-neutral">&nbsp;</span>
863
+ <span class="cline-any cline-no">&nbsp;</span>
864
+ <span class="cline-any cline-neutral">&nbsp;</span>
865
+ <span class="cline-any cline-neutral">&nbsp;</span>
866
+ <span class="cline-any cline-neutral">&nbsp;</span>
867
+ <span class="cline-any cline-neutral">&nbsp;</span>
868
+ <span class="cline-any cline-neutral">&nbsp;</span>
869
+ <span class="cline-any cline-neutral">&nbsp;</span>
870
+ <span class="cline-any cline-neutral">&nbsp;</span>
871
+ <span class="cline-any cline-no">&nbsp;</span>
872
+ <span class="cline-any cline-no">&nbsp;</span>
873
+ <span class="cline-any cline-no">&nbsp;</span>
874
+ <span class="cline-any cline-neutral">&nbsp;</span>
875
+ <span class="cline-any cline-no">&nbsp;</span>
876
+ <span class="cline-any cline-neutral">&nbsp;</span>
877
+ <span class="cline-any cline-neutral">&nbsp;</span>
878
+ <span class="cline-any cline-neutral">&nbsp;</span>
879
+ <span class="cline-any cline-neutral">&nbsp;</span>
880
+ <span class="cline-any cline-neutral">&nbsp;</span>
881
+ <span class="cline-any cline-neutral">&nbsp;</span>
882
+ <span class="cline-any cline-neutral">&nbsp;</span>
883
+ <span class="cline-any cline-neutral">&nbsp;</span>
884
+ <span class="cline-any cline-neutral">&nbsp;</span>
885
+ <span class="cline-any cline-neutral">&nbsp;</span>
886
+ <span class="cline-any cline-neutral">&nbsp;</span>
887
+ <span class="cline-any cline-neutral">&nbsp;</span>
888
+ <span class="cline-any cline-neutral">&nbsp;</span>
889
+ <span class="cline-any cline-neutral">&nbsp;</span>
890
+ <span class="cline-any cline-neutral">&nbsp;</span>
891
+ <span class="cline-any cline-neutral">&nbsp;</span>
892
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import {
893
+ EventDispatcher
894
+ } from 'three';
895
+ import Universe from '../core/Universe';
896
+ import Config from '../core/config';
897
+ import PhysicsWorker from 'worker:./worker';
898
+ &nbsp;
899
+ import {
900
+ PHYSICS_EVENTS
901
+ } from './messages';
902
+ import * as physicsUtils from './utils';
903
+ import { getHostURL } from '../lib/url';
904
+ import {
905
+ PHYSICS_ELEMENT_ALREADY_STORED,
906
+ PHYSICS_ELEMENT_CANT_BE_REMOVED
907
+ } from '../lib/messages';
908
+ &nbsp;
909
+ import * as PHYSICS_CONSTANTS from './constants';
910
+ &nbsp;
911
+ const { COLLIDER_TYPES } = <span class="cstat-no" title="statement not covered" >PHYSICS_CONSTANTS;</span>
912
+ &nbsp;
913
+ const {
914
+ getBoxDescriptionForElement,
915
+ extractPositionAndQuaternion,
916
+ mapColliderTypeToDescription,
917
+ iterateGeometries,
918
+ mapColliderTypeToAddEvent,
919
+ DEFAULT_DESCRIPTION
920
+ } = <span class="cstat-no" title="statement not covered" >physicsUtils;</span>
921
+ &nbsp;
922
+ const WORKER_READY_TIMEOUT = <span class="cstat-no" title="statement not covered" >200;</span>
923
+ const PHYSICS_STATE_TIMEOUT = <span class="cstat-no" title="statement not covered" >50;</span>
924
+ export const PHYSICS_STATES = <span class="cstat-no" title="statement not covered" >{</span>
925
+ READY: 'READY',
926
+ TERMINATING: 'TERMINATING',
927
+ TERMINATED: 'TERMINATED'
928
+ };
929
+ &nbsp;
930
+ export class Physics extends EventDispatcher {
931
+ &nbsp;
932
+ <span class="fstat-no" title="function not covered" > co</span>nstructor() {
933
+ <span class="cstat-no" title="statement not covered" > super();</span>
934
+ <span class="cstat-no" title="statement not covered" > this.elements = [];</span>
935
+ <span class="cstat-no" title="statement not covered" > this.isWorkerReady = false;</span>
936
+ <span class="cstat-no" title="statement not covered" > this.state = PHYSICS_STATES.READY;</span>
937
+ };
938
+ &nbsp;
939
+ <span class="fstat-no" title="function not covered" > cr</span>eateWorker() {
940
+ <span class="cstat-no" title="statement not covered" > this.worker = new PhysicsWorker();</span>
941
+ <span class="cstat-no" title="statement not covered" > this.workerReady = false;</span>
942
+ <span class="cstat-no" title="statement not covered" > this.state = PHYSICS_STATES.READY;</span>
943
+ <span class="cstat-no" title="statement not covered" > this.worker.onmessage = this.handleWorkerMessages;</span>
944
+ }
945
+ &nbsp;
946
+ <span class="fstat-no" title="function not covered" > is</span>Terminating() { <span class="cstat-no" title="statement not covered" >return this.state === PHYSICS_STATES.TERMINATING; </span>}
947
+ <span class="fstat-no" title="function not covered" > is</span>Terminated() { <span class="cstat-no" title="statement not covered" >return this.state === PHYSICS_STATES.TERMINATED; </span>}
948
+ <span class="fstat-no" title="function not covered" > is</span>Ready() { <span class="cstat-no" title="statement not covered" >return this.state === PHYSICS_STATES.READY; </span>}
949
+ &nbsp;
950
+ <span class="fstat-no" title="function not covered" > wa</span>itForState(state) {
951
+ <span class="cstat-no" title="statement not covered" > return new Promise(<span class="fstat-no" title="function not covered" >re</span>solve =&gt; {</span>
952
+ const isStateReached = <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >()</span> =&gt; <span class="cstat-no" title="statement not covered" >this.state === state;</span></span>
953
+ const check = <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >()</span> =&gt; {</span>
954
+ <span class="cstat-no" title="statement not covered" > setTimeout(<span class="fstat-no" title="function not covered" >()</span> =&gt; {</span>
955
+ <span class="cstat-no" title="statement not covered" > if (isStateReached()) {</span>
956
+ <span class="cstat-no" title="statement not covered" > resolve();</span>
957
+ } else {
958
+ <span class="cstat-no" title="statement not covered" > check();</span>
959
+ }
960
+ }, PHYSICS_STATE_TIMEOUT)
961
+ };
962
+ &nbsp;
963
+ <span class="cstat-no" title="statement not covered" > check();</span>
964
+ });
965
+ }
966
+ &nbsp;
967
+ <span class="fstat-no" title="function not covered" > di</span>spose() {
968
+ <span class="cstat-no" title="statement not covered" > if (Config.physics().enabled) {</span>
969
+ <span class="cstat-no" title="statement not covered" > this.state = PHYSICS_STATES.TERMINATING;</span>
970
+ <span class="cstat-no" title="statement not covered" > this.worker.postMessage({</span>
971
+ event: PHYSICS_EVENTS.TERMINATE
972
+ });
973
+ &nbsp;
974
+ <span class="cstat-no" title="statement not covered" > this.elements = [];</span>
975
+ }
976
+ }
977
+ &nbsp;
978
+ <span class="fstat-no" title="function not covered" > ha</span>sElement(element) {
979
+ const uuid = <span class="cstat-no" title="statement not covered" >element.uuid();</span>
980
+ &nbsp;
981
+ <span class="cstat-no" title="statement not covered" > return this.elements.includes(uuid);</span>
982
+ }
983
+ &nbsp;
984
+ <span class="fstat-no" title="function not covered" > st</span>oreElement(element, options) {
985
+ <span class="cstat-no" title="statement not covered" > if (!this.hasElement(element)) {</span>
986
+ const uuid = <span class="cstat-no" title="statement not covered" >element.uuid();</span>
987
+ <span class="cstat-no" title="statement not covered" > this.elements.push(uuid);</span>
988
+ } else {
989
+ <span class="cstat-no" title="statement not covered" > console.log(PHYSICS_ELEMENT_ALREADY_STORED, element);</span>
990
+ }
991
+ }
992
+ &nbsp;
993
+ <span class="fstat-no" title="function not covered" > re</span>moveElement(element) {
994
+ <span class="cstat-no" title="statement not covered" > if (this.hasElement(element)) {</span>
995
+ const uuid = <span class="cstat-no" title="statement not covered" >element.uuid();</span>
996
+ <span class="cstat-no" title="statement not covered" > this.elements.splice(this.elements.indexOf(uuid), 1);</span>
997
+ } else {
998
+ <span class="cstat-no" title="statement not covered" > console.log(PHYSICS_ELEMENT_CANT_BE_REMOVED);</span>
999
+ }
1000
+ }
1001
+ &nbsp;
1002
+ <span class="fstat-no" title="function not covered" > in</span>it() {
1003
+ <span class="cstat-no" title="statement not covered" > if (Config.physics().enabled) {</span>
1004
+ <span class="cstat-no" title="statement not covered" > this.createWorker();</span>
1005
+ &nbsp;
1006
+ <span class="cstat-no" title="statement not covered" > this.worker.postMessage({</span>
1007
+ event: PHYSICS_EVENTS.LOAD.AMMO,
1008
+ ...Config.physics(),
1009
+ host: getHostURL()
1010
+ });
1011
+ &nbsp;
1012
+ <span class="cstat-no" title="statement not covered" > return new Promise(<span class="fstat-no" title="function not covered" >re</span>solve =&gt; {</span>
1013
+ const isWorkerReady = <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >()</span> =&gt; <span class="cstat-no" title="statement not covered" >this.workerReady;</span></span>
1014
+ const check = <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >()</span> =&gt; {</span>
1015
+ <span class="cstat-no" title="statement not covered" > setTimeout(<span class="fstat-no" title="function not covered" >()</span> =&gt; {</span>
1016
+ <span class="cstat-no" title="statement not covered" > if (isWorkerReady()) {</span>
1017
+ <span class="cstat-no" title="statement not covered" > resolve();</span>
1018
+ } else {
1019
+ <span class="cstat-no" title="statement not covered" > check();</span>
1020
+ }
1021
+ }, WORKER_READY_TIMEOUT)
1022
+ };
1023
+ &nbsp;
1024
+ <span class="cstat-no" title="statement not covered" > check();</span>
1025
+ });
1026
+ }
1027
+
1028
+ <span class="cstat-no" title="statement not covered" > return Promise.resolve();</span>
1029
+ }
1030
+ &nbsp;
1031
+ handleWorkerMessages = <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >({</span> data }) =&gt; {</span>
1032
+ <span class="cstat-no" title="statement not covered" > switch (data.event) {</span>
1033
+ case PHYSICS_EVENTS.READY:
1034
+ <span class="cstat-no" title="statement not covered" > this.workerReady = true;</span>
1035
+ <span class="cstat-no" title="statement not covered" > break;</span>
1036
+ case PHYSICS_EVENTS.ELEMENT.UPDATE:
1037
+ <span class="cstat-no" title="statement not covered" > this.handleBodyUpdate(data);</span>
1038
+ <span class="cstat-no" title="statement not covered" > break;</span>
1039
+ case PHYSICS_EVENTS.TERMINATE:
1040
+ <span class="cstat-no" title="statement not covered" > this.handleTerminateEvent();</span>
1041
+ <span class="cstat-no" title="statement not covered" > break;</span>
1042
+ case PHYSICS_EVENTS.DISPATCH:
1043
+ <span class="cstat-no" title="statement not covered" > this.handleDispatchEvent(data);</span>
1044
+ <span class="cstat-no" title="statement not covered" > break;</span>
1045
+ case PHYSICS_EVENTS.UPDATE:
1046
+ <span class="cstat-no" title="statement not covered" > this.handlePhysicsUpdate(data);</span>
1047
+ <span class="cstat-no" title="statement not covered" > break;</span>
1048
+ default:
1049
+ <span class="cstat-no" title="statement not covered" > break;</span>
1050
+ }
1051
+ };
1052
+ &nbsp;
1053
+ handlePhysicsUpdate = <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >({</span> dt }) =&gt; {</span>
1054
+ <span class="cstat-no" title="statement not covered" > this.dispatchEvent({</span>
1055
+ type: PHYSICS_EVENTS.UPDATE,
1056
+ dt
1057
+ })
1058
+ };
1059
+ &nbsp;
1060
+ handleTerminateEvent = <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >()</span> =&gt; {</span>
1061
+ <span class="cstat-no" title="statement not covered" > this.worker.terminate();</span>
1062
+ <span class="cstat-no" title="statement not covered" > this.state = PHYSICS_STATES.READY;</span>
1063
+ };
1064
+ &nbsp;
1065
+ handleBodyUpdate = <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >({</span> uuid, ...data }) =&gt; {</span>
1066
+ const element = <span class="cstat-no" title="statement not covered" >Universe.getByUUID(uuid);</span>
1067
+
1068
+ <span class="cstat-no" title="statement not covered" > if (element) {</span>
1069
+ <span class="cstat-no" title="statement not covered" > if (element.getPhysicsOptions('applyPhysicsUpdate')) {</span>
1070
+ <span class="cstat-no" title="statement not covered" > element.handlePhysicsUpdate(data);</span>
1071
+ } else {
1072
+ <span class="cstat-no" title="statement not covered" > element.dispatchEvent({</span>
1073
+ type: PHYSICS_EVENTS.ELEMENT.UPDATE,
1074
+ ...data
1075
+ });
1076
+ }
1077
+ }
1078
+ };
1079
+ &nbsp;
1080
+ handleDispatchEvent = <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >({</span> uuid, eventData, eventName }) =&gt; {</span>
1081
+ const element = <span class="cstat-no" title="statement not covered" >Universe.getByUUID(uuid);</span>
1082
+ <span class="cstat-no" title="statement not covered" > if(element) {</span>
1083
+ <span class="cstat-no" title="statement not covered" > element.dispatchEvent({</span>
1084
+ type: eventName,
1085
+ data: eventData
1086
+ });
1087
+ }
1088
+ };
1089
+ &nbsp;
1090
+ <span class="fstat-no" title="function not covered" > di</span>sposeElement(element) {
1091
+ <span class="cstat-no" title="statement not covered" > if (Config.physics().enabled &amp;&amp; this.hasElement(element)) {</span>
1092
+ const uuid = <span class="cstat-no" title="statement not covered" >element.uuid();</span>
1093
+ &nbsp;
1094
+ <span class="cstat-no" title="statement not covered" > this.removeElement(element);</span>
1095
+ <span class="cstat-no" title="statement not covered" > this.worker.postMessage({</span>
1096
+ event: PHYSICS_EVENTS.ELEMENT.DISPOSE,
1097
+ uuid
1098
+ })
1099
+ }
1100
+ }
1101
+ &nbsp;
1102
+ <span class="fstat-no" title="function not covered" > ad</span>d(element, options = <span class="branch-0 cbranch-no" title="branch not covered" >{})</span> {
1103
+ <span class="cstat-no" title="statement not covered" > if (Config.physics().enabled) {</span>
1104
+ const {
1105
+ colliderType = <span class="branch-0 cbranch-no" title="branch not covered" >COLLIDER_TYPES.BOX</span>
1106
+ } = <span class="cstat-no" title="statement not covered" >options;</span>
1107
+ &nbsp;
1108
+ const uuid = <span class="cstat-no" title="statement not covered" >element.uuid();</span>
1109
+ const description = <span class="cstat-no" title="statement not covered" >{</span>
1110
+ ...mapColliderTypeToDescription(colliderType)(element),
1111
+ ...options
1112
+ };
1113
+ &nbsp;
1114
+ <span class="cstat-no" title="statement not covered" > this.storeElement(element, options);</span>
1115
+ &nbsp;
1116
+ <span class="cstat-no" title="statement not covered" > this.worker.postMessage({</span>
1117
+ event: mapColliderTypeToAddEvent(description.collider),
1118
+ ...description,
1119
+ uuid
1120
+ })
1121
+ }
1122
+ }
1123
+ &nbsp;
1124
+ <span class="fstat-no" title="function not covered" > ad</span>dVehicle(element, options) {
1125
+ <span class="cstat-no" title="statement not covered" > if (Config.physics().enabled) {</span>
1126
+ const uuid = <span class="cstat-no" title="statement not covered" >element.uuid();</span>
1127
+ const description = <span class="cstat-no" title="statement not covered" >getBoxDescriptionForElement(element);</span>
1128
+ &nbsp;
1129
+ <span class="cstat-no" title="statement not covered" > this.storeElement(element, options);</span>
1130
+ &nbsp;
1131
+ <span class="cstat-no" title="statement not covered" > this.worker.postMessage({</span>
1132
+ event: PHYSICS_EVENTS.ADD.VEHICLE,
1133
+ uuid,
1134
+ ...description,
1135
+ ...options
1136
+ })
1137
+ }
1138
+ }
1139
+ &nbsp;
1140
+ <span class="fstat-no" title="function not covered" > ad</span>dModel(model, options) {
1141
+ <span class="cstat-no" title="statement not covered" > if (Config.physics().enabled) {</span>
1142
+ const uuid = <span class="cstat-no" title="statement not covered" >model.uuid();</span>
1143
+ const vertices = <span class="cstat-no" title="statement not covered" >[];</span>
1144
+ const matrices = <span class="cstat-no" title="statement not covered" >[];</span>
1145
+ const indexes = <span class="cstat-no" title="statement not covered" >[];</span>
1146
+ &nbsp;
1147
+ <span class="cstat-no" title="statement not covered" > iterateGeometries(model.getBody(), {}, <span class="fstat-no" title="function not covered" >(v</span>ertexArray, matrixArray, indexArray) =&gt; {</span>
1148
+ <span class="cstat-no" title="statement not covered" > vertices.push(vertexArray);</span>
1149
+ <span class="cstat-no" title="statement not covered" > matrices.push(matrixArray);</span>
1150
+ <span class="cstat-no" title="statement not covered" > indexes.push(indexArray);</span>
1151
+ });
1152
+ &nbsp;
1153
+ <span class="cstat-no" title="statement not covered" > this.storeElement(model, options);</span>
1154
+ &nbsp;
1155
+ <span class="cstat-no" title="statement not covered" > this.worker.postMessage({</span>
1156
+ event: PHYSICS_EVENTS.ADD.MODEL,
1157
+ uuid,
1158
+ vertices,
1159
+ matrices,
1160
+ indexes,
1161
+ ...DEFAULT_DESCRIPTION,
1162
+ ...extractPositionAndQuaternion(model),
1163
+ ...options
1164
+ })
1165
+ &nbsp;
1166
+ }
1167
+ }
1168
+ &nbsp;
1169
+ setLinearVelocity = <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >(e</span>lement, velocity) =&gt; {</span>
1170
+ <span class="cstat-no" title="statement not covered" > if (Config.physics().enabled) {</span>
1171
+ const uuid = <span class="cstat-no" title="statement not covered" >element.uuid();</span>
1172
+ &nbsp;
1173
+ <span class="cstat-no" title="statement not covered" > this.worker.postMessage({</span>
1174
+ event: PHYSICS_EVENTS.ELEMENT.SET.LINEAR_VELOCITY,
1175
+ uuid,
1176
+ velocity
1177
+ });
1178
+ }
1179
+ }
1180
+ &nbsp;
1181
+ setPosition = <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >(e</span>lement, position) =&gt; {</span>
1182
+ <span class="cstat-no" title="statement not covered" > this.setElementPosition(element, position);</span>
1183
+ }
1184
+ &nbsp;
1185
+ setElementPosition = <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >(e</span>lement, position) =&gt; {</span>
1186
+ <span class="cstat-no" title="statement not covered" > if (Config.physics().enabled) {</span>
1187
+ const uuid = <span class="cstat-no" title="statement not covered" >element.uuid();</span>
1188
+ &nbsp;
1189
+ <span class="cstat-no" title="statement not covered" > this.worker.postMessage({</span>
1190
+ event: PHYSICS_EVENTS.ELEMENT.SET.POSITION,
1191
+ uuid,
1192
+ position
1193
+ });
1194
+ }
1195
+ };
1196
+ &nbsp;
1197
+ setElementQuaternion = <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >(e</span>lement, quaternion) =&gt; {</span>
1198
+ &nbsp;
1199
+ };
1200
+ &nbsp;
1201
+ resetElement = <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >(e</span>lement, position, quaternion) =&gt; {</span>
1202
+ <span class="cstat-no" title="statement not covered" > if (Config.physics().enabled) {</span>
1203
+ const uuid = <span class="cstat-no" title="statement not covered" >element.uuid();</span>
1204
+ &nbsp;
1205
+ <span class="cstat-no" title="statement not covered" > this.worker.postMessage({</span>
1206
+ event: PHYSICS_EVENTS.ELEMENT.RESET,
1207
+ uuid,
1208
+ position,
1209
+ quaternion
1210
+ });
1211
+ }
1212
+ }
1213
+ &nbsp;
1214
+ setVehiclePosition = <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >(v</span>ehicle, { x, y, z }) =&gt; {</span>
1215
+ <span class="cstat-no" title="statement not covered" > if (Config.physics().enabled) {</span>
1216
+ const uuid = <span class="cstat-no" title="statement not covered" >vehicle.uuid();</span>
1217
+ &nbsp;
1218
+ <span class="cstat-no" title="statement not covered" > this.worker.postMessage({</span>
1219
+ event: PHYSICS_EVENTS.VEHICLE.SET.POSITION,
1220
+ uuid,
1221
+ position: { x, y, z }
1222
+ })
1223
+ }
1224
+ }
1225
+ &nbsp;
1226
+ setVehicleQuaternion = <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >(v</span>ehicle, { x, y, z, w }) =&gt; {</span>
1227
+ <span class="cstat-no" title="statement not covered" > if (Config.physics().enabled) {</span>
1228
+ const uuid = <span class="cstat-no" title="statement not covered" >vehicle.uuid();</span>
1229
+ &nbsp;
1230
+ <span class="cstat-no" title="statement not covered" > this.worker.postMessage({</span>
1231
+ event: PHYSICS_EVENTS.VEHICLE.SET.QUATERNION,
1232
+ uuid,
1233
+ quaternion: { x, y, z, w }
1234
+ });
1235
+ }
1236
+ }
1237
+ &nbsp;
1238
+ resetVehicle = <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >(v</span>ehicle, position, quaternion) =&gt; {</span>
1239
+ <span class="cstat-no" title="statement not covered" > if (Config.physics().enabled) {</span>
1240
+ const uuid = <span class="cstat-no" title="statement not covered" >vehicle.uuid();</span>
1241
+ &nbsp;
1242
+ <span class="cstat-no" title="statement not covered" > this.worker.postMessage({</span>
1243
+ event: PHYSICS_EVENTS.VEHICLE.RESET,
1244
+ uuid,
1245
+ quaternion: {
1246
+ x: quaternion.x,
1247
+ y: quaternion.y,
1248
+ z: quaternion.z,
1249
+ w: quaternion.w
1250
+ },
1251
+ position: {
1252
+ x: position.x,
1253
+ y: position.y,
1254
+ z: position.z
1255
+ }
1256
+ });
1257
+ }
1258
+ }
1259
+ &nbsp;
1260
+ applyImpulse = <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >(e</span>lement, impulse) =&gt; {</span>
1261
+ <span class="cstat-no" title="statement not covered" > if (Config.physics().enabled) {</span>
1262
+ const uuid = <span class="cstat-no" title="statement not covered" >element.uuid();</span>
1263
+ &nbsp;
1264
+ <span class="cstat-no" title="statement not covered" > this.worker.postMessage({</span>
1265
+ event: PHYSICS_EVENTS.ELEMENT.APPLY.IMPULSE,
1266
+ uuid,
1267
+ impulse
1268
+ });
1269
+ }
1270
+ }
1271
+ &nbsp;
1272
+ <span class="fstat-no" title="function not covered" > up</span>dateBodyState(element, state) {
1273
+ <span class="cstat-no" title="statement not covered" > if (Config.physics().enabled) {</span>
1274
+ const uuid = <span class="cstat-no" title="statement not covered" >element.uuid();</span>
1275
+ &nbsp;
1276
+ <span class="cstat-no" title="statement not covered" > this.worker.postMessage({</span>
1277
+ event: PHYSICS_EVENTS.ELEMENT.UPDATE,
1278
+ uuid,
1279
+ state
1280
+ });
1281
+ }
1282
+ }
1283
+ &nbsp;
1284
+ explosion = <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >(e</span>lement, strength, radius) =&gt; {</span>
1285
+ <span class="cstat-no" title="statement not covered" > if (Config.physics().enabled) {</span>
1286
+ const uuid = <span class="cstat-no" title="statement not covered" >element.uuid();</span>
1287
+ &nbsp;
1288
+ <span class="cstat-no" title="statement not covered" > this.worker.postMessage({</span>
1289
+ event: PHYSICS_EVENTS.EFFECTS.EXPLOSION,
1290
+ uuid,
1291
+ strength,
1292
+ radius
1293
+ });
1294
+ }
1295
+ };
1296
+ }
1297
+ &nbsp;
1298
+ export {
1299
+ PHYSICS_EVENTS,
1300
+ PHYSICS_CONSTANTS,
1301
+ physicsUtils
1302
+ };
1303
+ &nbsp;
1304
+ export default new Physics();
1305
+ &nbsp;</pre></td></tr></table></pre>
1306
+
1307
+ <div class='push'></div><!-- for sticky footer -->
1308
+ </div><!-- /wrapper -->
1309
+ <div class='footer quiet pad2 space-top1 center small'>
1310
+ Code coverage generated by
1311
+ <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
1312
+ at 2026-03-02T17:28:15.675Z
1313
+ </div>
1314
+ <script src="../prettify.js"></script>
1315
+ <script>
1316
+ window.onload = function () {
1317
+ prettyPrint();
1318
+ };
1319
+ </script>
1320
+ <script src="../sorter.js"></script>
1321
+ <script src="../block-navigation.js"></script>
1322
+ </body>
1323
+ </html>
1324
+