├── .gitattributes ├── .gitignore ├── Cargo.lock ├── Cargo.toml ├── README.md ├── deploy ├── BMissile.ogg ├── BMissile.png ├── Blobbo.png ├── Car.png ├── Desert.png ├── GameOver.ogg ├── GameOver.png ├── JMissile.ogg ├── JMissile.png ├── Jelly.png ├── LgExplode.ogg ├── LgExplosion.png ├── Missile.ogg ├── Missile.png ├── Music.mp3 ├── SmCar.png ├── SmExplode.ogg ├── SmExplosion.png ├── Splash.png ├── TMissile.ogg ├── TMissile.png ├── Timmy.png ├── index.html ├── spaceout-wasm.js └── spaceout.wasm ├── spaceout.png ├── src ├── ai.rs ├── alien_sprite.rs ├── background.rs └── main.rs └── static ├── BMissile.ogg ├── BMissile.png ├── Blobbo.png ├── Car.png ├── Desert.png ├── GameOver.ogg ├── GameOver.png ├── JMissile.ogg ├── JMissile.png ├── Jelly.png ├── LgExplode.ogg ├── LgExplosion.png ├── Missile.ogg ├── Missile.png ├── Music.mp3 ├── SmCar.png ├── SmExplode.ogg ├── SmExplosion.png ├── Splash.png ├── TMissile.ogg ├── TMissile.png └── Timmy.png /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /.history/ 2 | /target 3 | **/*.rs.bk 4 | -------------------------------------------------------------------------------- /Cargo.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Cargo. 2 | # It is not intended for manual editing. 3 | [[package]] 4 | name = "adler32" 5 | version = "1.0.3" 6 | source = "registry+https://github.com/rust-lang/crates.io-index" 7 | 8 | [[package]] 9 | name = "aho-corasick" 10 | version = "0.6.10" 11 | source = "registry+https://github.com/rust-lang/crates.io-index" 12 | dependencies = [ 13 | "memchr 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 14 | ] 15 | 16 | [[package]] 17 | name = "alsa-sys" 18 | version = "0.1.2" 19 | source = "registry+https://github.com/rust-lang/crates.io-index" 20 | dependencies = [ 21 | "libc 0.2.55 (registry+https://github.com/rust-lang/crates.io-index)", 22 | "pkg-config 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)", 23 | ] 24 | 25 | [[package]] 26 | name = "andrew" 27 | version = "0.2.1" 28 | source = "registry+https://github.com/rust-lang/crates.io-index" 29 | dependencies = [ 30 | "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", 31 | "line_drawing 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", 32 | "rusttype 0.7.6 (registry+https://github.com/rust-lang/crates.io-index)", 33 | "walkdir 2.2.7 (registry+https://github.com/rust-lang/crates.io-index)", 34 | "xdg 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 35 | "xml-rs 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", 36 | ] 37 | 38 | [[package]] 39 | name = "android_glue" 40 | version = "0.2.3" 41 | source = "registry+https://github.com/rust-lang/crates.io-index" 42 | 43 | [[package]] 44 | name = "ansi_term" 45 | version = "0.11.0" 46 | source = "registry+https://github.com/rust-lang/crates.io-index" 47 | dependencies = [ 48 | "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", 49 | ] 50 | 51 | [[package]] 52 | name = "approx" 53 | version = "0.1.1" 54 | source = "registry+https://github.com/rust-lang/crates.io-index" 55 | 56 | [[package]] 57 | name = "approx" 58 | version = "0.3.2" 59 | source = "registry+https://github.com/rust-lang/crates.io-index" 60 | dependencies = [ 61 | "num-traits 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 62 | ] 63 | 64 | [[package]] 65 | name = "arrayvec" 66 | version = "0.4.10" 67 | source = "registry+https://github.com/rust-lang/crates.io-index" 68 | dependencies = [ 69 | "nodrop 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)", 70 | ] 71 | 72 | [[package]] 73 | name = "askama" 74 | version = "0.8.0" 75 | source = "registry+https://github.com/rust-lang/crates.io-index" 76 | dependencies = [ 77 | "askama_derive 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", 78 | "askama_escape 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 79 | "askama_shared 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", 80 | ] 81 | 82 | [[package]] 83 | name = "askama_derive" 84 | version = "0.8.0" 85 | source = "registry+https://github.com/rust-lang/crates.io-index" 86 | dependencies = [ 87 | "askama_shared 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", 88 | "nom 4.2.3 (registry+https://github.com/rust-lang/crates.io-index)", 89 | "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", 90 | "quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)", 91 | "syn 0.15.34 (registry+https://github.com/rust-lang/crates.io-index)", 92 | ] 93 | 94 | [[package]] 95 | name = "askama_escape" 96 | version = "0.2.0" 97 | source = "registry+https://github.com/rust-lang/crates.io-index" 98 | 99 | [[package]] 100 | name = "askama_shared" 101 | version = "0.8.0" 102 | source = "registry+https://github.com/rust-lang/crates.io-index" 103 | dependencies = [ 104 | "askama_escape 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 105 | "humansize 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 106 | "num-traits 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 107 | "serde 1.0.91 (registry+https://github.com/rust-lang/crates.io-index)", 108 | "serde_derive 1.0.91 (registry+https://github.com/rust-lang/crates.io-index)", 109 | "toml 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)", 110 | ] 111 | 112 | [[package]] 113 | name = "atty" 114 | version = "0.2.11" 115 | source = "registry+https://github.com/rust-lang/crates.io-index" 116 | dependencies = [ 117 | "libc 0.2.55 (registry+https://github.com/rust-lang/crates.io-index)", 118 | "termion 1.5.2 (registry+https://github.com/rust-lang/crates.io-index)", 119 | "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", 120 | ] 121 | 122 | [[package]] 123 | name = "auto-enum" 124 | version = "0.2.0-alpha1" 125 | source = "registry+https://github.com/rust-lang/crates.io-index" 126 | dependencies = [ 127 | "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", 128 | "quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)", 129 | "syn 0.15.34 (registry+https://github.com/rust-lang/crates.io-index)", 130 | ] 131 | 132 | [[package]] 133 | name = "autocfg" 134 | version = "0.1.4" 135 | source = "registry+https://github.com/rust-lang/crates.io-index" 136 | 137 | [[package]] 138 | name = "backtrace" 139 | version = "0.3.26" 140 | source = "registry+https://github.com/rust-lang/crates.io-index" 141 | dependencies = [ 142 | "autocfg 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", 143 | "backtrace-sys 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)", 144 | "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", 145 | "libc 0.2.55 (registry+https://github.com/rust-lang/crates.io-index)", 146 | "rustc-demangle 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", 147 | ] 148 | 149 | [[package]] 150 | name = "backtrace-sys" 151 | version = "0.1.28" 152 | source = "registry+https://github.com/rust-lang/crates.io-index" 153 | dependencies = [ 154 | "cc 1.0.37 (registry+https://github.com/rust-lang/crates.io-index)", 155 | "libc 0.2.55 (registry+https://github.com/rust-lang/crates.io-index)", 156 | ] 157 | 158 | [[package]] 159 | name = "base-x" 160 | version = "0.2.4" 161 | source = "registry+https://github.com/rust-lang/crates.io-index" 162 | 163 | [[package]] 164 | name = "base64" 165 | version = "0.9.3" 166 | source = "registry+https://github.com/rust-lang/crates.io-index" 167 | dependencies = [ 168 | "byteorder 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 169 | "safemem 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", 170 | ] 171 | 172 | [[package]] 173 | name = "bindgen" 174 | version = "0.32.3" 175 | source = "registry+https://github.com/rust-lang/crates.io-index" 176 | dependencies = [ 177 | "cexpr 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", 178 | "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", 179 | "clang-sys 0.21.2 (registry+https://github.com/rust-lang/crates.io-index)", 180 | "clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)", 181 | "env_logger 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", 182 | "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", 183 | "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", 184 | "peeking_take_while 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 185 | "proc-macro2 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", 186 | "quote 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", 187 | "regex 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", 188 | "which 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)", 189 | ] 190 | 191 | [[package]] 192 | name = "bitflags" 193 | version = "1.0.4" 194 | source = "registry+https://github.com/rust-lang/crates.io-index" 195 | 196 | [[package]] 197 | name = "block" 198 | version = "0.1.6" 199 | source = "registry+https://github.com/rust-lang/crates.io-index" 200 | 201 | [[package]] 202 | name = "bumpalo" 203 | version = "2.4.3" 204 | source = "registry+https://github.com/rust-lang/crates.io-index" 205 | 206 | [[package]] 207 | name = "byteorder" 208 | version = "1.3.1" 209 | source = "registry+https://github.com/rust-lang/crates.io-index" 210 | 211 | [[package]] 212 | name = "cc" 213 | version = "1.0.37" 214 | source = "registry+https://github.com/rust-lang/crates.io-index" 215 | 216 | [[package]] 217 | name = "cexpr" 218 | version = "0.2.3" 219 | source = "registry+https://github.com/rust-lang/crates.io-index" 220 | dependencies = [ 221 | "nom 3.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 222 | ] 223 | 224 | [[package]] 225 | name = "cfg-if" 226 | version = "0.1.9" 227 | source = "registry+https://github.com/rust-lang/crates.io-index" 228 | 229 | [[package]] 230 | name = "cgmath" 231 | version = "0.14.1" 232 | source = "registry+https://github.com/rust-lang/crates.io-index" 233 | dependencies = [ 234 | "approx 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 235 | "num-traits 0.1.43 (registry+https://github.com/rust-lang/crates.io-index)", 236 | "rand 0.3.23 (registry+https://github.com/rust-lang/crates.io-index)", 237 | ] 238 | 239 | [[package]] 240 | name = "checked-enum" 241 | version = "0.1.1-alpha1" 242 | source = "registry+https://github.com/rust-lang/crates.io-index" 243 | 244 | [[package]] 245 | name = "clang-sys" 246 | version = "0.21.2" 247 | source = "registry+https://github.com/rust-lang/crates.io-index" 248 | dependencies = [ 249 | "glob 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", 250 | "libc 0.2.55 (registry+https://github.com/rust-lang/crates.io-index)", 251 | "libloading 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", 252 | ] 253 | 254 | [[package]] 255 | name = "clap" 256 | version = "2.33.0" 257 | source = "registry+https://github.com/rust-lang/crates.io-index" 258 | dependencies = [ 259 | "ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", 260 | "atty 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", 261 | "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", 262 | "strsim 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", 263 | "textwrap 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", 264 | "unicode-width 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 265 | "vec_map 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)", 266 | ] 267 | 268 | [[package]] 269 | name = "claxon" 270 | version = "0.3.3" 271 | source = "registry+https://github.com/rust-lang/crates.io-index" 272 | 273 | [[package]] 274 | name = "cloudabi" 275 | version = "0.0.3" 276 | source = "registry+https://github.com/rust-lang/crates.io-index" 277 | dependencies = [ 278 | "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", 279 | ] 280 | 281 | [[package]] 282 | name = "cocoa" 283 | version = "0.18.4" 284 | source = "registry+https://github.com/rust-lang/crates.io-index" 285 | dependencies = [ 286 | "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", 287 | "block 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 288 | "core-foundation 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", 289 | "core-graphics 0.17.3 (registry+https://github.com/rust-lang/crates.io-index)", 290 | "foreign-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", 291 | "libc 0.2.55 (registry+https://github.com/rust-lang/crates.io-index)", 292 | "objc 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", 293 | ] 294 | 295 | [[package]] 296 | name = "color_quant" 297 | version = "1.0.1" 298 | source = "registry+https://github.com/rust-lang/crates.io-index" 299 | 300 | [[package]] 301 | name = "com-impl" 302 | version = "0.1.1" 303 | source = "registry+https://github.com/rust-lang/crates.io-index" 304 | dependencies = [ 305 | "derive-com-impl 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 306 | "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", 307 | "wio 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 308 | ] 309 | 310 | [[package]] 311 | name = "com-wrapper" 312 | version = "0.1.0" 313 | source = "registry+https://github.com/rust-lang/crates.io-index" 314 | dependencies = [ 315 | "derive-com-wrapper 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 316 | "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", 317 | "wio 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 318 | ] 319 | 320 | [[package]] 321 | name = "core-foundation" 322 | version = "0.6.4" 323 | source = "registry+https://github.com/rust-lang/crates.io-index" 324 | dependencies = [ 325 | "core-foundation-sys 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", 326 | "libc 0.2.55 (registry+https://github.com/rust-lang/crates.io-index)", 327 | ] 328 | 329 | [[package]] 330 | name = "core-foundation-sys" 331 | version = "0.5.1" 332 | source = "registry+https://github.com/rust-lang/crates.io-index" 333 | dependencies = [ 334 | "libc 0.2.55 (registry+https://github.com/rust-lang/crates.io-index)", 335 | ] 336 | 337 | [[package]] 338 | name = "core-foundation-sys" 339 | version = "0.6.2" 340 | source = "registry+https://github.com/rust-lang/crates.io-index" 341 | 342 | [[package]] 343 | name = "core-graphics" 344 | version = "0.17.3" 345 | source = "registry+https://github.com/rust-lang/crates.io-index" 346 | dependencies = [ 347 | "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", 348 | "core-foundation 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", 349 | "foreign-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", 350 | "libc 0.2.55 (registry+https://github.com/rust-lang/crates.io-index)", 351 | ] 352 | 353 | [[package]] 354 | name = "coreaudio-rs" 355 | version = "0.9.1" 356 | source = "registry+https://github.com/rust-lang/crates.io-index" 357 | dependencies = [ 358 | "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", 359 | "coreaudio-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 360 | ] 361 | 362 | [[package]] 363 | name = "coreaudio-sys" 364 | version = "0.2.2" 365 | source = "registry+https://github.com/rust-lang/crates.io-index" 366 | dependencies = [ 367 | "bindgen 0.32.3 (registry+https://github.com/rust-lang/crates.io-index)", 368 | ] 369 | 370 | [[package]] 371 | name = "cpal" 372 | version = "0.8.2" 373 | source = "registry+https://github.com/rust-lang/crates.io-index" 374 | dependencies = [ 375 | "alsa-sys 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 376 | "core-foundation-sys 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", 377 | "coreaudio-rs 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", 378 | "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", 379 | "libc 0.2.55 (registry+https://github.com/rust-lang/crates.io-index)", 380 | "stdweb 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", 381 | "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", 382 | ] 383 | 384 | [[package]] 385 | name = "crossbeam-deque" 386 | version = "0.2.0" 387 | source = "registry+https://github.com/rust-lang/crates.io-index" 388 | dependencies = [ 389 | "crossbeam-epoch 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 390 | "crossbeam-utils 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 391 | ] 392 | 393 | [[package]] 394 | name = "crossbeam-epoch" 395 | version = "0.3.1" 396 | source = "registry+https://github.com/rust-lang/crates.io-index" 397 | dependencies = [ 398 | "arrayvec 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)", 399 | "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", 400 | "crossbeam-utils 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 401 | "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", 402 | "memoffset 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 403 | "nodrop 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)", 404 | "scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", 405 | ] 406 | 407 | [[package]] 408 | name = "crossbeam-utils" 409 | version = "0.2.2" 410 | source = "registry+https://github.com/rust-lang/crates.io-index" 411 | dependencies = [ 412 | "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", 413 | ] 414 | 415 | [[package]] 416 | name = "dcommon" 417 | version = "0.3.0-alpha1" 418 | source = "registry+https://github.com/rust-lang/crates.io-index" 419 | dependencies = [ 420 | "auto-enum 0.2.0-alpha1 (registry+https://github.com/rust-lang/crates.io-index)", 421 | "checked-enum 0.1.1-alpha1 (registry+https://github.com/rust-lang/crates.io-index)", 422 | "com-impl 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 423 | "com-wrapper 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 424 | "derive-com-impl 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 425 | "derive-com-wrapper 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 426 | "math2d 0.2.0-alpha8 (registry+https://github.com/rust-lang/crates.io-index)", 427 | "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", 428 | "wio 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 429 | ] 430 | 431 | [[package]] 432 | name = "deflate" 433 | version = "0.7.19" 434 | source = "registry+https://github.com/rust-lang/crates.io-index" 435 | dependencies = [ 436 | "adler32 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", 437 | "byteorder 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 438 | ] 439 | 440 | [[package]] 441 | name = "derive-com-impl" 442 | version = "0.1.1" 443 | source = "registry+https://github.com/rust-lang/crates.io-index" 444 | dependencies = [ 445 | "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", 446 | "quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)", 447 | "syn 0.15.34 (registry+https://github.com/rust-lang/crates.io-index)", 448 | ] 449 | 450 | [[package]] 451 | name = "derive-com-wrapper" 452 | version = "0.1.0" 453 | source = "registry+https://github.com/rust-lang/crates.io-index" 454 | dependencies = [ 455 | "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", 456 | "quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)", 457 | "syn 0.15.34 (registry+https://github.com/rust-lang/crates.io-index)", 458 | ] 459 | 460 | [[package]] 461 | name = "direct2d" 462 | version = "0.3.0-alpha1" 463 | source = "registry+https://github.com/rust-lang/crates.io-index" 464 | dependencies = [ 465 | "auto-enum 0.2.0-alpha1 (registry+https://github.com/rust-lang/crates.io-index)", 466 | "checked-enum 0.1.1-alpha1 (registry+https://github.com/rust-lang/crates.io-index)", 467 | "com-wrapper 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 468 | "dcommon 0.3.0-alpha1 (registry+https://github.com/rust-lang/crates.io-index)", 469 | "derive-com-wrapper 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 470 | "direct3d11 0.3.0-alpha2 (registry+https://github.com/rust-lang/crates.io-index)", 471 | "directwrite 0.3.0-alpha4 (registry+https://github.com/rust-lang/crates.io-index)", 472 | "dxgi 0.3.0-alpha4 (registry+https://github.com/rust-lang/crates.io-index)", 473 | "math2d 0.2.0-alpha8 (registry+https://github.com/rust-lang/crates.io-index)", 474 | "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", 475 | "wio 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 476 | ] 477 | 478 | [[package]] 479 | name = "direct3d11" 480 | version = "0.3.0-alpha2" 481 | source = "registry+https://github.com/rust-lang/crates.io-index" 482 | dependencies = [ 483 | "auto-enum 0.2.0-alpha1 (registry+https://github.com/rust-lang/crates.io-index)", 484 | "checked-enum 0.1.1-alpha1 (registry+https://github.com/rust-lang/crates.io-index)", 485 | "com-wrapper 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 486 | "dcommon 0.3.0-alpha1 (registry+https://github.com/rust-lang/crates.io-index)", 487 | "derive-com-wrapper 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 488 | "dxgi 0.3.0-alpha4 (registry+https://github.com/rust-lang/crates.io-index)", 489 | "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", 490 | "wio 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 491 | ] 492 | 493 | [[package]] 494 | name = "directwrite" 495 | version = "0.3.0-alpha4" 496 | source = "registry+https://github.com/rust-lang/crates.io-index" 497 | dependencies = [ 498 | "auto-enum 0.2.0-alpha1 (registry+https://github.com/rust-lang/crates.io-index)", 499 | "checked-enum 0.1.1-alpha1 (registry+https://github.com/rust-lang/crates.io-index)", 500 | "com-impl 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 501 | "com-wrapper 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 502 | "dcommon 0.3.0-alpha1 (registry+https://github.com/rust-lang/crates.io-index)", 503 | "derive-com-impl 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 504 | "derive-com-wrapper 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 505 | "math2d 0.2.0-alpha8 (registry+https://github.com/rust-lang/crates.io-index)", 506 | "memmap 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", 507 | "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", 508 | "wio 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 509 | ] 510 | 511 | [[package]] 512 | name = "discard" 513 | version = "1.0.4" 514 | source = "registry+https://github.com/rust-lang/crates.io-index" 515 | 516 | [[package]] 517 | name = "dlib" 518 | version = "0.4.1" 519 | source = "registry+https://github.com/rust-lang/crates.io-index" 520 | dependencies = [ 521 | "libloading 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", 522 | ] 523 | 524 | [[package]] 525 | name = "downcast-rs" 526 | version = "1.0.4" 527 | source = "registry+https://github.com/rust-lang/crates.io-index" 528 | 529 | [[package]] 530 | name = "dxgi" 531 | version = "0.3.0-alpha4" 532 | source = "registry+https://github.com/rust-lang/crates.io-index" 533 | dependencies = [ 534 | "auto-enum 0.2.0-alpha1 (registry+https://github.com/rust-lang/crates.io-index)", 535 | "checked-enum 0.1.1-alpha1 (registry+https://github.com/rust-lang/crates.io-index)", 536 | "com-wrapper 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 537 | "dcommon 0.3.0-alpha1 (registry+https://github.com/rust-lang/crates.io-index)", 538 | "derive-com-wrapper 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 539 | "math2d 0.2.0-alpha8 (registry+https://github.com/rust-lang/crates.io-index)", 540 | "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", 541 | "wio 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 542 | ] 543 | 544 | [[package]] 545 | name = "either" 546 | version = "1.5.2" 547 | source = "registry+https://github.com/rust-lang/crates.io-index" 548 | 549 | [[package]] 550 | name = "env_logger" 551 | version = "0.4.3" 552 | source = "registry+https://github.com/rust-lang/crates.io-index" 553 | dependencies = [ 554 | "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", 555 | "regex 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", 556 | ] 557 | 558 | [[package]] 559 | name = "foreign-types" 560 | version = "0.3.2" 561 | source = "registry+https://github.com/rust-lang/crates.io-index" 562 | dependencies = [ 563 | "foreign-types-shared 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 564 | ] 565 | 566 | [[package]] 567 | name = "foreign-types-shared" 568 | version = "0.1.1" 569 | source = "registry+https://github.com/rust-lang/crates.io-index" 570 | 571 | [[package]] 572 | name = "fuchsia-cprng" 573 | version = "0.1.1" 574 | source = "registry+https://github.com/rust-lang/crates.io-index" 575 | 576 | [[package]] 577 | name = "gif" 578 | version = "0.10.1" 579 | source = "registry+https://github.com/rust-lang/crates.io-index" 580 | dependencies = [ 581 | "color_quant 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", 582 | "lzw 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", 583 | ] 584 | 585 | [[package]] 586 | name = "glob" 587 | version = "0.2.11" 588 | source = "registry+https://github.com/rust-lang/crates.io-index" 589 | 590 | [[package]] 591 | name = "hound" 592 | version = "3.4.0" 593 | source = "registry+https://github.com/rust-lang/crates.io-index" 594 | 595 | [[package]] 596 | name = "humansize" 597 | version = "1.1.0" 598 | source = "registry+https://github.com/rust-lang/crates.io-index" 599 | 600 | [[package]] 601 | name = "image" 602 | version = "0.19.0" 603 | source = "registry+https://github.com/rust-lang/crates.io-index" 604 | dependencies = [ 605 | "byteorder 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 606 | "gif 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)", 607 | "jpeg-decoder 0.1.15 (registry+https://github.com/rust-lang/crates.io-index)", 608 | "lzw 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", 609 | "num-derive 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)", 610 | "num-iter 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)", 611 | "num-rational 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", 612 | "num-traits 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 613 | "png 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", 614 | "scoped_threadpool 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", 615 | ] 616 | 617 | [[package]] 618 | name = "image" 619 | version = "0.21.1" 620 | source = "registry+https://github.com/rust-lang/crates.io-index" 621 | dependencies = [ 622 | "byteorder 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 623 | "gif 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)", 624 | "jpeg-decoder 0.1.15 (registry+https://github.com/rust-lang/crates.io-index)", 625 | "lzw 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", 626 | "num-iter 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)", 627 | "num-rational 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 628 | "num-traits 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 629 | "png 0.14.1 (registry+https://github.com/rust-lang/crates.io-index)", 630 | "scoped_threadpool 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", 631 | "tiff 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 632 | ] 633 | 634 | [[package]] 635 | name = "inflate" 636 | version = "0.4.5" 637 | source = "registry+https://github.com/rust-lang/crates.io-index" 638 | dependencies = [ 639 | "adler32 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", 640 | ] 641 | 642 | [[package]] 643 | name = "itoa" 644 | version = "0.4.4" 645 | source = "registry+https://github.com/rust-lang/crates.io-index" 646 | 647 | [[package]] 648 | name = "jpeg-decoder" 649 | version = "0.1.15" 650 | source = "registry+https://github.com/rust-lang/crates.io-index" 651 | dependencies = [ 652 | "byteorder 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 653 | "rayon 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", 654 | ] 655 | 656 | [[package]] 657 | name = "kernel32-sys" 658 | version = "0.2.2" 659 | source = "registry+https://github.com/rust-lang/crates.io-index" 660 | dependencies = [ 661 | "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 662 | "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 663 | ] 664 | 665 | [[package]] 666 | name = "lazy_static" 667 | version = "1.3.0" 668 | source = "registry+https://github.com/rust-lang/crates.io-index" 669 | 670 | [[package]] 671 | name = "lewton" 672 | version = "0.9.4" 673 | source = "registry+https://github.com/rust-lang/crates.io-index" 674 | dependencies = [ 675 | "byteorder 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 676 | "ogg 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", 677 | "smallvec 0.6.9 (registry+https://github.com/rust-lang/crates.io-index)", 678 | ] 679 | 680 | [[package]] 681 | name = "libc" 682 | version = "0.2.55" 683 | source = "registry+https://github.com/rust-lang/crates.io-index" 684 | 685 | [[package]] 686 | name = "libloading" 687 | version = "0.4.3" 688 | source = "registry+https://github.com/rust-lang/crates.io-index" 689 | dependencies = [ 690 | "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 691 | "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", 692 | "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 693 | ] 694 | 695 | [[package]] 696 | name = "libloading" 697 | version = "0.5.0" 698 | source = "registry+https://github.com/rust-lang/crates.io-index" 699 | dependencies = [ 700 | "cc 1.0.37 (registry+https://github.com/rust-lang/crates.io-index)", 701 | "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", 702 | ] 703 | 704 | [[package]] 705 | name = "line_drawing" 706 | version = "0.7.0" 707 | source = "registry+https://github.com/rust-lang/crates.io-index" 708 | dependencies = [ 709 | "num-traits 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 710 | ] 711 | 712 | [[package]] 713 | name = "lock_api" 714 | version = "0.1.5" 715 | source = "registry+https://github.com/rust-lang/crates.io-index" 716 | dependencies = [ 717 | "owning_ref 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 718 | "scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", 719 | ] 720 | 721 | [[package]] 722 | name = "log" 723 | version = "0.3.9" 724 | source = "registry+https://github.com/rust-lang/crates.io-index" 725 | dependencies = [ 726 | "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", 727 | ] 728 | 729 | [[package]] 730 | name = "log" 731 | version = "0.4.6" 732 | source = "registry+https://github.com/rust-lang/crates.io-index" 733 | dependencies = [ 734 | "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", 735 | ] 736 | 737 | [[package]] 738 | name = "lzw" 739 | version = "0.10.0" 740 | source = "registry+https://github.com/rust-lang/crates.io-index" 741 | 742 | [[package]] 743 | name = "mach" 744 | version = "0.2.3" 745 | source = "registry+https://github.com/rust-lang/crates.io-index" 746 | dependencies = [ 747 | "libc 0.2.55 (registry+https://github.com/rust-lang/crates.io-index)", 748 | ] 749 | 750 | [[package]] 751 | name = "malloc_buf" 752 | version = "0.0.6" 753 | source = "registry+https://github.com/rust-lang/crates.io-index" 754 | dependencies = [ 755 | "libc 0.2.55 (registry+https://github.com/rust-lang/crates.io-index)", 756 | ] 757 | 758 | [[package]] 759 | name = "math2d" 760 | version = "0.2.0-alpha8" 761 | source = "registry+https://github.com/rust-lang/crates.io-index" 762 | dependencies = [ 763 | "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", 764 | ] 765 | 766 | [[package]] 767 | name = "memchr" 768 | version = "1.0.2" 769 | source = "registry+https://github.com/rust-lang/crates.io-index" 770 | dependencies = [ 771 | "libc 0.2.55 (registry+https://github.com/rust-lang/crates.io-index)", 772 | ] 773 | 774 | [[package]] 775 | name = "memchr" 776 | version = "2.2.0" 777 | source = "registry+https://github.com/rust-lang/crates.io-index" 778 | 779 | [[package]] 780 | name = "memmap" 781 | version = "0.7.0" 782 | source = "registry+https://github.com/rust-lang/crates.io-index" 783 | dependencies = [ 784 | "libc 0.2.55 (registry+https://github.com/rust-lang/crates.io-index)", 785 | "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", 786 | ] 787 | 788 | [[package]] 789 | name = "memoffset" 790 | version = "0.2.1" 791 | source = "registry+https://github.com/rust-lang/crates.io-index" 792 | 793 | [[package]] 794 | name = "mengine" 795 | version = "0.6.6" 796 | source = "git+https://github.com/planet0104/mengine?tag=0.6.6#0dfdf5a2118d5286f7183372d7df46e4e45e5eeb" 797 | dependencies = [ 798 | "askama 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", 799 | "base64 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)", 800 | "direct2d 0.3.0-alpha1 (registry+https://github.com/rust-lang/crates.io-index)", 801 | "directwrite 0.3.0-alpha4 (registry+https://github.com/rust-lang/crates.io-index)", 802 | "dxgi 0.3.0-alpha4 (registry+https://github.com/rust-lang/crates.io-index)", 803 | "image 0.21.1 (registry+https://github.com/rust-lang/crates.io-index)", 804 | "math2d 0.2.0-alpha8 (registry+https://github.com/rust-lang/crates.io-index)", 805 | "nsvg 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", 806 | "png 0.14.1 (registry+https://github.com/rust-lang/crates.io-index)", 807 | "rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", 808 | "rodio 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)", 809 | "stdweb 0.4.17 (registry+https://github.com/rust-lang/crates.io-index)", 810 | "wasm-bindgen 0.2.45 (registry+https://github.com/rust-lang/crates.io-index)", 811 | "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", 812 | "winit 0.19.1 (registry+https://github.com/rust-lang/crates.io-index)", 813 | ] 814 | 815 | [[package]] 816 | name = "minimp3" 817 | version = "0.3.3" 818 | source = "registry+https://github.com/rust-lang/crates.io-index" 819 | dependencies = [ 820 | "minimp3-sys 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 821 | "slice-deque 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", 822 | ] 823 | 824 | [[package]] 825 | name = "minimp3-sys" 826 | version = "0.3.1" 827 | source = "registry+https://github.com/rust-lang/crates.io-index" 828 | dependencies = [ 829 | "cc 1.0.37 (registry+https://github.com/rust-lang/crates.io-index)", 830 | ] 831 | 832 | [[package]] 833 | name = "neat" 834 | version = "1.0.2" 835 | source = "git+https://github.com/planet0104/neat?tag=1.0.2#0ad21aca91ea0acb74af7994b1aef3710e2f3c41" 836 | dependencies = [ 837 | "rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", 838 | "stdweb 0.4.17 (registry+https://github.com/rust-lang/crates.io-index)", 839 | "svg 0.5.12 (registry+https://github.com/rust-lang/crates.io-index)", 840 | "wasm-bindgen 0.2.45 (registry+https://github.com/rust-lang/crates.io-index)", 841 | ] 842 | 843 | [[package]] 844 | name = "nix" 845 | version = "0.13.0" 846 | source = "registry+https://github.com/rust-lang/crates.io-index" 847 | dependencies = [ 848 | "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", 849 | "cc 1.0.37 (registry+https://github.com/rust-lang/crates.io-index)", 850 | "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", 851 | "libc 0.2.55 (registry+https://github.com/rust-lang/crates.io-index)", 852 | "void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", 853 | ] 854 | 855 | [[package]] 856 | name = "nodrop" 857 | version = "0.1.13" 858 | source = "registry+https://github.com/rust-lang/crates.io-index" 859 | 860 | [[package]] 861 | name = "nom" 862 | version = "3.2.1" 863 | source = "registry+https://github.com/rust-lang/crates.io-index" 864 | dependencies = [ 865 | "memchr 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", 866 | ] 867 | 868 | [[package]] 869 | name = "nom" 870 | version = "4.2.3" 871 | source = "registry+https://github.com/rust-lang/crates.io-index" 872 | dependencies = [ 873 | "memchr 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 874 | "version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 875 | ] 876 | 877 | [[package]] 878 | name = "nsvg" 879 | version = "0.5.0" 880 | source = "registry+https://github.com/rust-lang/crates.io-index" 881 | dependencies = [ 882 | "cc 1.0.37 (registry+https://github.com/rust-lang/crates.io-index)", 883 | "image 0.19.0 (registry+https://github.com/rust-lang/crates.io-index)", 884 | ] 885 | 886 | [[package]] 887 | name = "num-derive" 888 | version = "0.2.5" 889 | source = "registry+https://github.com/rust-lang/crates.io-index" 890 | dependencies = [ 891 | "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", 892 | "quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)", 893 | "syn 0.15.34 (registry+https://github.com/rust-lang/crates.io-index)", 894 | ] 895 | 896 | [[package]] 897 | name = "num-integer" 898 | version = "0.1.41" 899 | source = "registry+https://github.com/rust-lang/crates.io-index" 900 | dependencies = [ 901 | "autocfg 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", 902 | "num-traits 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 903 | ] 904 | 905 | [[package]] 906 | name = "num-iter" 907 | version = "0.1.39" 908 | source = "registry+https://github.com/rust-lang/crates.io-index" 909 | dependencies = [ 910 | "autocfg 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", 911 | "num-integer 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)", 912 | "num-traits 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 913 | ] 914 | 915 | [[package]] 916 | name = "num-rational" 917 | version = "0.1.42" 918 | source = "registry+https://github.com/rust-lang/crates.io-index" 919 | dependencies = [ 920 | "num-integer 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)", 921 | "num-traits 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 922 | ] 923 | 924 | [[package]] 925 | name = "num-rational" 926 | version = "0.2.1" 927 | source = "registry+https://github.com/rust-lang/crates.io-index" 928 | dependencies = [ 929 | "num-integer 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)", 930 | "num-traits 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 931 | ] 932 | 933 | [[package]] 934 | name = "num-traits" 935 | version = "0.1.43" 936 | source = "registry+https://github.com/rust-lang/crates.io-index" 937 | dependencies = [ 938 | "num-traits 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 939 | ] 940 | 941 | [[package]] 942 | name = "num-traits" 943 | version = "0.2.8" 944 | source = "registry+https://github.com/rust-lang/crates.io-index" 945 | dependencies = [ 946 | "autocfg 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", 947 | ] 948 | 949 | [[package]] 950 | name = "num_cpus" 951 | version = "1.10.0" 952 | source = "registry+https://github.com/rust-lang/crates.io-index" 953 | dependencies = [ 954 | "libc 0.2.55 (registry+https://github.com/rust-lang/crates.io-index)", 955 | ] 956 | 957 | [[package]] 958 | name = "numtoa" 959 | version = "0.1.0" 960 | source = "registry+https://github.com/rust-lang/crates.io-index" 961 | 962 | [[package]] 963 | name = "objc" 964 | version = "0.2.6" 965 | source = "registry+https://github.com/rust-lang/crates.io-index" 966 | dependencies = [ 967 | "malloc_buf 0.0.6 (registry+https://github.com/rust-lang/crates.io-index)", 968 | ] 969 | 970 | [[package]] 971 | name = "ogg" 972 | version = "0.7.0" 973 | source = "registry+https://github.com/rust-lang/crates.io-index" 974 | dependencies = [ 975 | "byteorder 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 976 | ] 977 | 978 | [[package]] 979 | name = "ordered-float" 980 | version = "1.0.2" 981 | source = "registry+https://github.com/rust-lang/crates.io-index" 982 | dependencies = [ 983 | "num-traits 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 984 | ] 985 | 986 | [[package]] 987 | name = "owning_ref" 988 | version = "0.4.0" 989 | source = "registry+https://github.com/rust-lang/crates.io-index" 990 | dependencies = [ 991 | "stable_deref_trait 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 992 | ] 993 | 994 | [[package]] 995 | name = "parking_lot" 996 | version = "0.7.1" 997 | source = "registry+https://github.com/rust-lang/crates.io-index" 998 | dependencies = [ 999 | "lock_api 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 1000 | "parking_lot_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 1001 | ] 1002 | 1003 | [[package]] 1004 | name = "parking_lot_core" 1005 | version = "0.4.0" 1006 | source = "registry+https://github.com/rust-lang/crates.io-index" 1007 | dependencies = [ 1008 | "libc 0.2.55 (registry+https://github.com/rust-lang/crates.io-index)", 1009 | "rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", 1010 | "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", 1011 | "smallvec 0.6.9 (registry+https://github.com/rust-lang/crates.io-index)", 1012 | "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", 1013 | ] 1014 | 1015 | [[package]] 1016 | name = "peeking_take_while" 1017 | version = "0.1.2" 1018 | source = "registry+https://github.com/rust-lang/crates.io-index" 1019 | 1020 | [[package]] 1021 | name = "percent-encoding" 1022 | version = "1.0.1" 1023 | source = "registry+https://github.com/rust-lang/crates.io-index" 1024 | 1025 | [[package]] 1026 | name = "pkg-config" 1027 | version = "0.3.14" 1028 | source = "registry+https://github.com/rust-lang/crates.io-index" 1029 | 1030 | [[package]] 1031 | name = "png" 1032 | version = "0.12.0" 1033 | source = "registry+https://github.com/rust-lang/crates.io-index" 1034 | dependencies = [ 1035 | "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", 1036 | "deflate 0.7.19 (registry+https://github.com/rust-lang/crates.io-index)", 1037 | "inflate 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", 1038 | "num-iter 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)", 1039 | ] 1040 | 1041 | [[package]] 1042 | name = "png" 1043 | version = "0.14.1" 1044 | source = "registry+https://github.com/rust-lang/crates.io-index" 1045 | dependencies = [ 1046 | "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", 1047 | "deflate 0.7.19 (registry+https://github.com/rust-lang/crates.io-index)", 1048 | "inflate 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", 1049 | "num-iter 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)", 1050 | ] 1051 | 1052 | [[package]] 1053 | name = "proc-macro2" 1054 | version = "0.2.3" 1055 | source = "registry+https://github.com/rust-lang/crates.io-index" 1056 | dependencies = [ 1057 | "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 1058 | ] 1059 | 1060 | [[package]] 1061 | name = "proc-macro2" 1062 | version = "0.4.30" 1063 | source = "registry+https://github.com/rust-lang/crates.io-index" 1064 | dependencies = [ 1065 | "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 1066 | ] 1067 | 1068 | [[package]] 1069 | name = "quote" 1070 | version = "0.4.2" 1071 | source = "registry+https://github.com/rust-lang/crates.io-index" 1072 | dependencies = [ 1073 | "proc-macro2 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", 1074 | ] 1075 | 1076 | [[package]] 1077 | name = "quote" 1078 | version = "0.6.12" 1079 | source = "registry+https://github.com/rust-lang/crates.io-index" 1080 | dependencies = [ 1081 | "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", 1082 | ] 1083 | 1084 | [[package]] 1085 | name = "rand" 1086 | version = "0.3.23" 1087 | source = "registry+https://github.com/rust-lang/crates.io-index" 1088 | dependencies = [ 1089 | "libc 0.2.55 (registry+https://github.com/rust-lang/crates.io-index)", 1090 | "rand 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", 1091 | ] 1092 | 1093 | [[package]] 1094 | name = "rand" 1095 | version = "0.4.6" 1096 | source = "registry+https://github.com/rust-lang/crates.io-index" 1097 | dependencies = [ 1098 | "fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 1099 | "libc 0.2.55 (registry+https://github.com/rust-lang/crates.io-index)", 1100 | "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 1101 | "rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 1102 | "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", 1103 | ] 1104 | 1105 | [[package]] 1106 | name = "rand" 1107 | version = "0.6.5" 1108 | source = "registry+https://github.com/rust-lang/crates.io-index" 1109 | dependencies = [ 1110 | "autocfg 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", 1111 | "libc 0.2.55 (registry+https://github.com/rust-lang/crates.io-index)", 1112 | "rand_chacha 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 1113 | "rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 1114 | "rand_hc 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 1115 | "rand_isaac 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 1116 | "rand_jitter 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", 1117 | "rand_os 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", 1118 | "rand_pcg 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 1119 | "rand_xorshift 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 1120 | "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", 1121 | ] 1122 | 1123 | [[package]] 1124 | name = "rand_chacha" 1125 | version = "0.1.1" 1126 | source = "registry+https://github.com/rust-lang/crates.io-index" 1127 | dependencies = [ 1128 | "autocfg 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", 1129 | "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 1130 | ] 1131 | 1132 | [[package]] 1133 | name = "rand_core" 1134 | version = "0.3.1" 1135 | source = "registry+https://github.com/rust-lang/crates.io-index" 1136 | dependencies = [ 1137 | "rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 1138 | ] 1139 | 1140 | [[package]] 1141 | name = "rand_core" 1142 | version = "0.4.0" 1143 | source = "registry+https://github.com/rust-lang/crates.io-index" 1144 | 1145 | [[package]] 1146 | name = "rand_hc" 1147 | version = "0.1.0" 1148 | source = "registry+https://github.com/rust-lang/crates.io-index" 1149 | dependencies = [ 1150 | "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 1151 | ] 1152 | 1153 | [[package]] 1154 | name = "rand_isaac" 1155 | version = "0.1.1" 1156 | source = "registry+https://github.com/rust-lang/crates.io-index" 1157 | dependencies = [ 1158 | "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 1159 | ] 1160 | 1161 | [[package]] 1162 | name = "rand_jitter" 1163 | version = "0.1.4" 1164 | source = "registry+https://github.com/rust-lang/crates.io-index" 1165 | dependencies = [ 1166 | "libc 0.2.55 (registry+https://github.com/rust-lang/crates.io-index)", 1167 | "rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 1168 | "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", 1169 | ] 1170 | 1171 | [[package]] 1172 | name = "rand_os" 1173 | version = "0.1.3" 1174 | source = "registry+https://github.com/rust-lang/crates.io-index" 1175 | dependencies = [ 1176 | "cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)", 1177 | "fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 1178 | "libc 0.2.55 (registry+https://github.com/rust-lang/crates.io-index)", 1179 | "rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 1180 | "rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 1181 | "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", 1182 | ] 1183 | 1184 | [[package]] 1185 | name = "rand_pcg" 1186 | version = "0.1.2" 1187 | source = "registry+https://github.com/rust-lang/crates.io-index" 1188 | dependencies = [ 1189 | "autocfg 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", 1190 | "rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 1191 | ] 1192 | 1193 | [[package]] 1194 | name = "rand_xorshift" 1195 | version = "0.1.1" 1196 | source = "registry+https://github.com/rust-lang/crates.io-index" 1197 | dependencies = [ 1198 | "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 1199 | ] 1200 | 1201 | [[package]] 1202 | name = "rayon" 1203 | version = "1.0.3" 1204 | source = "registry+https://github.com/rust-lang/crates.io-index" 1205 | dependencies = [ 1206 | "crossbeam-deque 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 1207 | "either 1.5.2 (registry+https://github.com/rust-lang/crates.io-index)", 1208 | "rayon-core 1.4.1 (registry+https://github.com/rust-lang/crates.io-index)", 1209 | ] 1210 | 1211 | [[package]] 1212 | name = "rayon-core" 1213 | version = "1.4.1" 1214 | source = "registry+https://github.com/rust-lang/crates.io-index" 1215 | dependencies = [ 1216 | "crossbeam-deque 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 1217 | "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", 1218 | "libc 0.2.55 (registry+https://github.com/rust-lang/crates.io-index)", 1219 | "num_cpus 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)", 1220 | ] 1221 | 1222 | [[package]] 1223 | name = "rdrand" 1224 | version = "0.4.0" 1225 | source = "registry+https://github.com/rust-lang/crates.io-index" 1226 | dependencies = [ 1227 | "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 1228 | ] 1229 | 1230 | [[package]] 1231 | name = "redox_syscall" 1232 | version = "0.1.54" 1233 | source = "registry+https://github.com/rust-lang/crates.io-index" 1234 | 1235 | [[package]] 1236 | name = "redox_termios" 1237 | version = "0.1.1" 1238 | source = "registry+https://github.com/rust-lang/crates.io-index" 1239 | dependencies = [ 1240 | "redox_syscall 0.1.54 (registry+https://github.com/rust-lang/crates.io-index)", 1241 | ] 1242 | 1243 | [[package]] 1244 | name = "regex" 1245 | version = "0.2.11" 1246 | source = "registry+https://github.com/rust-lang/crates.io-index" 1247 | dependencies = [ 1248 | "aho-corasick 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)", 1249 | "memchr 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 1250 | "regex-syntax 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)", 1251 | "thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", 1252 | "utf8-ranges 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", 1253 | ] 1254 | 1255 | [[package]] 1256 | name = "regex-syntax" 1257 | version = "0.5.6" 1258 | source = "registry+https://github.com/rust-lang/crates.io-index" 1259 | dependencies = [ 1260 | "ucd-util 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", 1261 | ] 1262 | 1263 | [[package]] 1264 | name = "rodio" 1265 | version = "0.8.1" 1266 | source = "registry+https://github.com/rust-lang/crates.io-index" 1267 | dependencies = [ 1268 | "cgmath 0.14.1 (registry+https://github.com/rust-lang/crates.io-index)", 1269 | "claxon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", 1270 | "cpal 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)", 1271 | "hound 3.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 1272 | "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", 1273 | "lewton 0.9.4 (registry+https://github.com/rust-lang/crates.io-index)", 1274 | "minimp3 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", 1275 | ] 1276 | 1277 | [[package]] 1278 | name = "rustc-demangle" 1279 | version = "0.1.14" 1280 | source = "registry+https://github.com/rust-lang/crates.io-index" 1281 | 1282 | [[package]] 1283 | name = "rustc_version" 1284 | version = "0.2.3" 1285 | source = "registry+https://github.com/rust-lang/crates.io-index" 1286 | dependencies = [ 1287 | "semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", 1288 | ] 1289 | 1290 | [[package]] 1291 | name = "rusttype" 1292 | version = "0.7.6" 1293 | source = "registry+https://github.com/rust-lang/crates.io-index" 1294 | dependencies = [ 1295 | "approx 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", 1296 | "arrayvec 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)", 1297 | "ordered-float 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", 1298 | "stb_truetype 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", 1299 | ] 1300 | 1301 | [[package]] 1302 | name = "ryu" 1303 | version = "0.2.8" 1304 | source = "registry+https://github.com/rust-lang/crates.io-index" 1305 | 1306 | [[package]] 1307 | name = "safemem" 1308 | version = "0.3.0" 1309 | source = "registry+https://github.com/rust-lang/crates.io-index" 1310 | 1311 | [[package]] 1312 | name = "same-file" 1313 | version = "1.0.4" 1314 | source = "registry+https://github.com/rust-lang/crates.io-index" 1315 | dependencies = [ 1316 | "winapi-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 1317 | ] 1318 | 1319 | [[package]] 1320 | name = "scoped_threadpool" 1321 | version = "0.1.9" 1322 | source = "registry+https://github.com/rust-lang/crates.io-index" 1323 | 1324 | [[package]] 1325 | name = "scopeguard" 1326 | version = "0.3.3" 1327 | source = "registry+https://github.com/rust-lang/crates.io-index" 1328 | 1329 | [[package]] 1330 | name = "semver" 1331 | version = "0.9.0" 1332 | source = "registry+https://github.com/rust-lang/crates.io-index" 1333 | dependencies = [ 1334 | "semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", 1335 | ] 1336 | 1337 | [[package]] 1338 | name = "semver-parser" 1339 | version = "0.7.0" 1340 | source = "registry+https://github.com/rust-lang/crates.io-index" 1341 | 1342 | [[package]] 1343 | name = "serde" 1344 | version = "1.0.91" 1345 | source = "registry+https://github.com/rust-lang/crates.io-index" 1346 | 1347 | [[package]] 1348 | name = "serde_derive" 1349 | version = "1.0.91" 1350 | source = "registry+https://github.com/rust-lang/crates.io-index" 1351 | dependencies = [ 1352 | "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", 1353 | "quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)", 1354 | "syn 0.15.34 (registry+https://github.com/rust-lang/crates.io-index)", 1355 | ] 1356 | 1357 | [[package]] 1358 | name = "serde_json" 1359 | version = "1.0.39" 1360 | source = "registry+https://github.com/rust-lang/crates.io-index" 1361 | dependencies = [ 1362 | "itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", 1363 | "ryu 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 1364 | "serde 1.0.91 (registry+https://github.com/rust-lang/crates.io-index)", 1365 | ] 1366 | 1367 | [[package]] 1368 | name = "sha1" 1369 | version = "0.6.0" 1370 | source = "registry+https://github.com/rust-lang/crates.io-index" 1371 | 1372 | [[package]] 1373 | name = "slice-deque" 1374 | version = "0.2.4" 1375 | source = "registry+https://github.com/rust-lang/crates.io-index" 1376 | dependencies = [ 1377 | "libc 0.2.55 (registry+https://github.com/rust-lang/crates.io-index)", 1378 | "mach 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", 1379 | "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", 1380 | ] 1381 | 1382 | [[package]] 1383 | name = "smallvec" 1384 | version = "0.6.9" 1385 | source = "registry+https://github.com/rust-lang/crates.io-index" 1386 | 1387 | [[package]] 1388 | name = "smithay-client-toolkit" 1389 | version = "0.4.5" 1390 | source = "registry+https://github.com/rust-lang/crates.io-index" 1391 | dependencies = [ 1392 | "andrew 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 1393 | "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", 1394 | "dlib 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", 1395 | "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", 1396 | "memmap 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", 1397 | "nix 0.13.0 (registry+https://github.com/rust-lang/crates.io-index)", 1398 | "wayland-client 0.21.12 (registry+https://github.com/rust-lang/crates.io-index)", 1399 | "wayland-commons 0.21.12 (registry+https://github.com/rust-lang/crates.io-index)", 1400 | "wayland-protocols 0.21.12 (registry+https://github.com/rust-lang/crates.io-index)", 1401 | ] 1402 | 1403 | [[package]] 1404 | name = "spaceout" 1405 | version = "1.0.1" 1406 | dependencies = [ 1407 | "math2d 0.2.0-alpha8 (registry+https://github.com/rust-lang/crates.io-index)", 1408 | "mengine 0.6.6 (git+https://github.com/planet0104/mengine?tag=0.6.6)", 1409 | "neat 1.0.2 (git+https://github.com/planet0104/neat?tag=1.0.2)", 1410 | ] 1411 | 1412 | [[package]] 1413 | name = "stable_deref_trait" 1414 | version = "1.1.1" 1415 | source = "registry+https://github.com/rust-lang/crates.io-index" 1416 | 1417 | [[package]] 1418 | name = "stb_truetype" 1419 | version = "0.2.6" 1420 | source = "registry+https://github.com/rust-lang/crates.io-index" 1421 | dependencies = [ 1422 | "byteorder 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 1423 | ] 1424 | 1425 | [[package]] 1426 | name = "stdweb" 1427 | version = "0.1.3" 1428 | source = "registry+https://github.com/rust-lang/crates.io-index" 1429 | 1430 | [[package]] 1431 | name = "stdweb" 1432 | version = "0.4.17" 1433 | source = "registry+https://github.com/rust-lang/crates.io-index" 1434 | dependencies = [ 1435 | "discard 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", 1436 | "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", 1437 | "serde 1.0.91 (registry+https://github.com/rust-lang/crates.io-index)", 1438 | "serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)", 1439 | "stdweb-derive 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", 1440 | "stdweb-internal-macros 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", 1441 | "stdweb-internal-runtime 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", 1442 | "wasm-bindgen 0.2.45 (registry+https://github.com/rust-lang/crates.io-index)", 1443 | ] 1444 | 1445 | [[package]] 1446 | name = "stdweb-derive" 1447 | version = "0.5.1" 1448 | source = "registry+https://github.com/rust-lang/crates.io-index" 1449 | dependencies = [ 1450 | "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", 1451 | "quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)", 1452 | "serde 1.0.91 (registry+https://github.com/rust-lang/crates.io-index)", 1453 | "serde_derive 1.0.91 (registry+https://github.com/rust-lang/crates.io-index)", 1454 | "syn 0.15.34 (registry+https://github.com/rust-lang/crates.io-index)", 1455 | ] 1456 | 1457 | [[package]] 1458 | name = "stdweb-internal-macros" 1459 | version = "0.2.7" 1460 | source = "registry+https://github.com/rust-lang/crates.io-index" 1461 | dependencies = [ 1462 | "base-x 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", 1463 | "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", 1464 | "quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)", 1465 | "serde 1.0.91 (registry+https://github.com/rust-lang/crates.io-index)", 1466 | "serde_derive 1.0.91 (registry+https://github.com/rust-lang/crates.io-index)", 1467 | "serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)", 1468 | "sha1 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", 1469 | "syn 0.15.34 (registry+https://github.com/rust-lang/crates.io-index)", 1470 | ] 1471 | 1472 | [[package]] 1473 | name = "stdweb-internal-runtime" 1474 | version = "0.1.4" 1475 | source = "registry+https://github.com/rust-lang/crates.io-index" 1476 | 1477 | [[package]] 1478 | name = "strsim" 1479 | version = "0.8.0" 1480 | source = "registry+https://github.com/rust-lang/crates.io-index" 1481 | 1482 | [[package]] 1483 | name = "svg" 1484 | version = "0.5.12" 1485 | source = "registry+https://github.com/rust-lang/crates.io-index" 1486 | 1487 | [[package]] 1488 | name = "syn" 1489 | version = "0.15.34" 1490 | source = "registry+https://github.com/rust-lang/crates.io-index" 1491 | dependencies = [ 1492 | "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", 1493 | "quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)", 1494 | "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 1495 | ] 1496 | 1497 | [[package]] 1498 | name = "termion" 1499 | version = "1.5.2" 1500 | source = "registry+https://github.com/rust-lang/crates.io-index" 1501 | dependencies = [ 1502 | "libc 0.2.55 (registry+https://github.com/rust-lang/crates.io-index)", 1503 | "numtoa 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 1504 | "redox_syscall 0.1.54 (registry+https://github.com/rust-lang/crates.io-index)", 1505 | "redox_termios 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 1506 | ] 1507 | 1508 | [[package]] 1509 | name = "textwrap" 1510 | version = "0.11.0" 1511 | source = "registry+https://github.com/rust-lang/crates.io-index" 1512 | dependencies = [ 1513 | "unicode-width 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 1514 | ] 1515 | 1516 | [[package]] 1517 | name = "thread_local" 1518 | version = "0.3.6" 1519 | source = "registry+https://github.com/rust-lang/crates.io-index" 1520 | dependencies = [ 1521 | "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", 1522 | ] 1523 | 1524 | [[package]] 1525 | name = "tiff" 1526 | version = "0.2.2" 1527 | source = "registry+https://github.com/rust-lang/crates.io-index" 1528 | dependencies = [ 1529 | "byteorder 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 1530 | "lzw 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", 1531 | "num-derive 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)", 1532 | "num-traits 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 1533 | ] 1534 | 1535 | [[package]] 1536 | name = "toml" 1537 | version = "0.4.10" 1538 | source = "registry+https://github.com/rust-lang/crates.io-index" 1539 | dependencies = [ 1540 | "serde 1.0.91 (registry+https://github.com/rust-lang/crates.io-index)", 1541 | ] 1542 | 1543 | [[package]] 1544 | name = "ucd-util" 1545 | version = "0.1.3" 1546 | source = "registry+https://github.com/rust-lang/crates.io-index" 1547 | 1548 | [[package]] 1549 | name = "unicode-width" 1550 | version = "0.1.5" 1551 | source = "registry+https://github.com/rust-lang/crates.io-index" 1552 | 1553 | [[package]] 1554 | name = "unicode-xid" 1555 | version = "0.1.0" 1556 | source = "registry+https://github.com/rust-lang/crates.io-index" 1557 | 1558 | [[package]] 1559 | name = "utf8-ranges" 1560 | version = "1.0.2" 1561 | source = "registry+https://github.com/rust-lang/crates.io-index" 1562 | 1563 | [[package]] 1564 | name = "vec_map" 1565 | version = "0.8.1" 1566 | source = "registry+https://github.com/rust-lang/crates.io-index" 1567 | 1568 | [[package]] 1569 | name = "version_check" 1570 | version = "0.1.5" 1571 | source = "registry+https://github.com/rust-lang/crates.io-index" 1572 | 1573 | [[package]] 1574 | name = "void" 1575 | version = "1.0.2" 1576 | source = "registry+https://github.com/rust-lang/crates.io-index" 1577 | 1578 | [[package]] 1579 | name = "walkdir" 1580 | version = "2.2.7" 1581 | source = "registry+https://github.com/rust-lang/crates.io-index" 1582 | dependencies = [ 1583 | "same-file 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", 1584 | "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", 1585 | "winapi-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 1586 | ] 1587 | 1588 | [[package]] 1589 | name = "wasm-bindgen" 1590 | version = "0.2.45" 1591 | source = "registry+https://github.com/rust-lang/crates.io-index" 1592 | dependencies = [ 1593 | "wasm-bindgen-macro 0.2.45 (registry+https://github.com/rust-lang/crates.io-index)", 1594 | ] 1595 | 1596 | [[package]] 1597 | name = "wasm-bindgen-backend" 1598 | version = "0.2.45" 1599 | source = "registry+https://github.com/rust-lang/crates.io-index" 1600 | dependencies = [ 1601 | "bumpalo 2.4.3 (registry+https://github.com/rust-lang/crates.io-index)", 1602 | "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", 1603 | "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", 1604 | "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", 1605 | "quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)", 1606 | "syn 0.15.34 (registry+https://github.com/rust-lang/crates.io-index)", 1607 | "wasm-bindgen-shared 0.2.45 (registry+https://github.com/rust-lang/crates.io-index)", 1608 | ] 1609 | 1610 | [[package]] 1611 | name = "wasm-bindgen-macro" 1612 | version = "0.2.45" 1613 | source = "registry+https://github.com/rust-lang/crates.io-index" 1614 | dependencies = [ 1615 | "quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)", 1616 | "wasm-bindgen-macro-support 0.2.45 (registry+https://github.com/rust-lang/crates.io-index)", 1617 | ] 1618 | 1619 | [[package]] 1620 | name = "wasm-bindgen-macro-support" 1621 | version = "0.2.45" 1622 | source = "registry+https://github.com/rust-lang/crates.io-index" 1623 | dependencies = [ 1624 | "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", 1625 | "quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)", 1626 | "syn 0.15.34 (registry+https://github.com/rust-lang/crates.io-index)", 1627 | "wasm-bindgen-backend 0.2.45 (registry+https://github.com/rust-lang/crates.io-index)", 1628 | "wasm-bindgen-shared 0.2.45 (registry+https://github.com/rust-lang/crates.io-index)", 1629 | ] 1630 | 1631 | [[package]] 1632 | name = "wasm-bindgen-shared" 1633 | version = "0.2.45" 1634 | source = "registry+https://github.com/rust-lang/crates.io-index" 1635 | 1636 | [[package]] 1637 | name = "wayland-client" 1638 | version = "0.21.12" 1639 | source = "registry+https://github.com/rust-lang/crates.io-index" 1640 | dependencies = [ 1641 | "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", 1642 | "downcast-rs 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", 1643 | "libc 0.2.55 (registry+https://github.com/rust-lang/crates.io-index)", 1644 | "nix 0.13.0 (registry+https://github.com/rust-lang/crates.io-index)", 1645 | "wayland-commons 0.21.12 (registry+https://github.com/rust-lang/crates.io-index)", 1646 | "wayland-scanner 0.21.12 (registry+https://github.com/rust-lang/crates.io-index)", 1647 | "wayland-sys 0.21.12 (registry+https://github.com/rust-lang/crates.io-index)", 1648 | ] 1649 | 1650 | [[package]] 1651 | name = "wayland-commons" 1652 | version = "0.21.12" 1653 | source = "registry+https://github.com/rust-lang/crates.io-index" 1654 | dependencies = [ 1655 | "nix 0.13.0 (registry+https://github.com/rust-lang/crates.io-index)", 1656 | "wayland-sys 0.21.12 (registry+https://github.com/rust-lang/crates.io-index)", 1657 | ] 1658 | 1659 | [[package]] 1660 | name = "wayland-protocols" 1661 | version = "0.21.12" 1662 | source = "registry+https://github.com/rust-lang/crates.io-index" 1663 | dependencies = [ 1664 | "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", 1665 | "wayland-client 0.21.12 (registry+https://github.com/rust-lang/crates.io-index)", 1666 | "wayland-commons 0.21.12 (registry+https://github.com/rust-lang/crates.io-index)", 1667 | "wayland-scanner 0.21.12 (registry+https://github.com/rust-lang/crates.io-index)", 1668 | "wayland-sys 0.21.12 (registry+https://github.com/rust-lang/crates.io-index)", 1669 | ] 1670 | 1671 | [[package]] 1672 | name = "wayland-scanner" 1673 | version = "0.21.12" 1674 | source = "registry+https://github.com/rust-lang/crates.io-index" 1675 | dependencies = [ 1676 | "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", 1677 | "quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)", 1678 | "xml-rs 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", 1679 | ] 1680 | 1681 | [[package]] 1682 | name = "wayland-sys" 1683 | version = "0.21.12" 1684 | source = "registry+https://github.com/rust-lang/crates.io-index" 1685 | dependencies = [ 1686 | "dlib 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", 1687 | "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", 1688 | ] 1689 | 1690 | [[package]] 1691 | name = "which" 1692 | version = "1.0.5" 1693 | source = "registry+https://github.com/rust-lang/crates.io-index" 1694 | dependencies = [ 1695 | "libc 0.2.55 (registry+https://github.com/rust-lang/crates.io-index)", 1696 | ] 1697 | 1698 | [[package]] 1699 | name = "winapi" 1700 | version = "0.2.8" 1701 | source = "registry+https://github.com/rust-lang/crates.io-index" 1702 | 1703 | [[package]] 1704 | name = "winapi" 1705 | version = "0.3.7" 1706 | source = "registry+https://github.com/rust-lang/crates.io-index" 1707 | dependencies = [ 1708 | "winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 1709 | "winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 1710 | ] 1711 | 1712 | [[package]] 1713 | name = "winapi-build" 1714 | version = "0.1.1" 1715 | source = "registry+https://github.com/rust-lang/crates.io-index" 1716 | 1717 | [[package]] 1718 | name = "winapi-i686-pc-windows-gnu" 1719 | version = "0.4.0" 1720 | source = "registry+https://github.com/rust-lang/crates.io-index" 1721 | 1722 | [[package]] 1723 | name = "winapi-util" 1724 | version = "0.1.2" 1725 | source = "registry+https://github.com/rust-lang/crates.io-index" 1726 | dependencies = [ 1727 | "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", 1728 | ] 1729 | 1730 | [[package]] 1731 | name = "winapi-x86_64-pc-windows-gnu" 1732 | version = "0.4.0" 1733 | source = "registry+https://github.com/rust-lang/crates.io-index" 1734 | 1735 | [[package]] 1736 | name = "winit" 1737 | version = "0.19.1" 1738 | source = "registry+https://github.com/rust-lang/crates.io-index" 1739 | dependencies = [ 1740 | "android_glue 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", 1741 | "backtrace 0.3.26 (registry+https://github.com/rust-lang/crates.io-index)", 1742 | "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", 1743 | "cocoa 0.18.4 (registry+https://github.com/rust-lang/crates.io-index)", 1744 | "core-foundation 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", 1745 | "core-graphics 0.17.3 (registry+https://github.com/rust-lang/crates.io-index)", 1746 | "image 0.21.1 (registry+https://github.com/rust-lang/crates.io-index)", 1747 | "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", 1748 | "libc 0.2.55 (registry+https://github.com/rust-lang/crates.io-index)", 1749 | "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", 1750 | "objc 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", 1751 | "parking_lot 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", 1752 | "percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", 1753 | "smithay-client-toolkit 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", 1754 | "wayland-client 0.21.12 (registry+https://github.com/rust-lang/crates.io-index)", 1755 | "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", 1756 | "x11-dl 2.18.3 (registry+https://github.com/rust-lang/crates.io-index)", 1757 | ] 1758 | 1759 | [[package]] 1760 | name = "wio" 1761 | version = "0.2.2" 1762 | source = "registry+https://github.com/rust-lang/crates.io-index" 1763 | dependencies = [ 1764 | "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", 1765 | ] 1766 | 1767 | [[package]] 1768 | name = "x11-dl" 1769 | version = "2.18.3" 1770 | source = "registry+https://github.com/rust-lang/crates.io-index" 1771 | dependencies = [ 1772 | "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", 1773 | "libc 0.2.55 (registry+https://github.com/rust-lang/crates.io-index)", 1774 | "pkg-config 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)", 1775 | ] 1776 | 1777 | [[package]] 1778 | name = "xdg" 1779 | version = "2.2.0" 1780 | source = "registry+https://github.com/rust-lang/crates.io-index" 1781 | 1782 | [[package]] 1783 | name = "xml-rs" 1784 | version = "0.8.0" 1785 | source = "registry+https://github.com/rust-lang/crates.io-index" 1786 | 1787 | [metadata] 1788 | "checksum adler32 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "7e522997b529f05601e05166c07ed17789691f562762c7f3b987263d2dedee5c" 1789 | "checksum aho-corasick 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)" = "81ce3d38065e618af2d7b77e10c5ad9a069859b4be3c2250f674af3840d9c8a5" 1790 | "checksum alsa-sys 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "b0edcbbf9ef68f15ae1b620f722180b82a98b6f0628d30baa6b8d2a5abc87d58" 1791 | "checksum andrew 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "9b7f09f89872c2b6b29e319377b1fbe91c6f5947df19a25596e121cf19a7b35e" 1792 | "checksum android_glue 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "000444226fcff248f2bc4c7625be32c63caccfecc2723a2b9f78a7487a49c407" 1793 | "checksum ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b" 1794 | "checksum approx 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "08abcc3b4e9339e33a3d0a5ed15d84a687350c05689d825e0f6655eef9e76a94" 1795 | "checksum approx 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f0e60b75072ecd4168020818c0107f2857bb6c4e64252d8d3983f6263b40a5c3" 1796 | "checksum arrayvec 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)" = "92c7fb76bc8826a8b33b4ee5bb07a247a81e76764ab4d55e8f73e3a4d8808c71" 1797 | "checksum askama 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3dc2a4b6d7f812d2b13d251ae792caecebd635d6401761162d4b71d5ebe1a010" 1798 | "checksum askama_derive 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "23ee2fff0f22ad5d215cace1227cd036c28e81e26206763bb837b6d0e766c87d" 1799 | "checksum askama_escape 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b0de942230b5beedaa9e1d64df5b76fa1c97002e4c7982897be899cccf40621d" 1800 | "checksum askama_shared 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a6dfa6b6d254fd066a8bbed9a8f913123e3f701db89216ad4f0aff04ad87718c" 1801 | "checksum atty 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "9a7d5b8723950951411ee34d271d99dddcc2035a16ab25310ea2c8cfd4369652" 1802 | "checksum auto-enum 0.2.0-alpha1 (registry+https://github.com/rust-lang/crates.io-index)" = "8d81b8fdae158e0c0a38424e6ff6e36924a42e5de8d86f563b25d7576f599498" 1803 | "checksum autocfg 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "0e49efa51329a5fd37e7c79db4621af617cd4e3e5bc224939808d076077077bf" 1804 | "checksum backtrace 0.3.26 (registry+https://github.com/rust-lang/crates.io-index)" = "1a13fc43f04daf08ab4f71e3d27e1fc27fc437d3e95ac0063a796d92fb40f39b" 1805 | "checksum backtrace-sys 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)" = "797c830ac25ccc92a7f8a7b9862bde440715531514594a6154e3d4a54dd769b6" 1806 | "checksum base-x 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "d55aa264e822dbafa12db4d54767aff17c6ba55ea2d8559b3e17392c7d000e5d" 1807 | "checksum base64 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)" = "489d6c0ed21b11d038c31b6ceccca973e65d73ba3bd8ecb9a2babf5546164643" 1808 | "checksum bindgen 0.32.3 (registry+https://github.com/rust-lang/crates.io-index)" = "8b242e11a8f446f5fc7b76b37e81d737cabca562a927bd33766dac55b5f1177f" 1809 | "checksum bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "228047a76f468627ca71776ecdebd732a3423081fcf5125585bcd7c49886ce12" 1810 | "checksum block 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" 1811 | "checksum bumpalo 2.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "84dca3afd8e01b9526818b7963e5b4916063b3cdf9f10cf6b73ef0bd0ec37aa5" 1812 | "checksum byteorder 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a019b10a2a7cdeb292db131fc8113e57ea2a908f6e7894b0c3c671893b65dbeb" 1813 | "checksum cc 1.0.37 (registry+https://github.com/rust-lang/crates.io-index)" = "39f75544d7bbaf57560d2168f28fd649ff9c76153874db88bdbdfd839b1a7e7d" 1814 | "checksum cexpr 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "42aac45e9567d97474a834efdee3081b3c942b2205be932092f53354ce503d6c" 1815 | "checksum cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "b486ce3ccf7ffd79fdeb678eac06a9e6c09fc88d33836340becb8fffe87c5e33" 1816 | "checksum cgmath 0.14.1 (registry+https://github.com/rust-lang/crates.io-index)" = "87f025a17ad3f30d49015c787903976d5f9cd6115ece1eb7f4d6ffe06b8c4080" 1817 | "checksum checked-enum 0.1.1-alpha1 (registry+https://github.com/rust-lang/crates.io-index)" = "8b78c70ae61ca2134341c436c8a4d78dff0d3383850d9508e1954b92f0ea8d0c" 1818 | "checksum clang-sys 0.21.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e414af9726e1d11660801e73ccc7fb81803fb5f49e5903a25b348b2b3b480d2e" 1819 | "checksum clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5067f5bb2d80ef5d68b4c87db81601f0b75bca627bc2ef76b141d7b846a3c6d9" 1820 | "checksum claxon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "35193597ff846c905e135b66b7a88876a8b684d269a24fa0f6086988fc2197c8" 1821 | "checksum cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f" 1822 | "checksum cocoa 0.18.4 (registry+https://github.com/rust-lang/crates.io-index)" = "cf79daa4e11e5def06e55306aa3601b87de6b5149671529318da048f67cdd77b" 1823 | "checksum color_quant 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0dbbb57365263e881e805dc77d94697c9118fd94d8da011240555aa7b23445bd" 1824 | "checksum com-impl 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "38eac2c76980ed0411ee41be7dfa0a3eece06bde9d4813e3cfaea07aedc63dbe" 1825 | "checksum com-wrapper 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "793b09125320f19de1f0138fa620788ba7ea75166860defb702b4e2a75bbbb70" 1826 | "checksum core-foundation 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)" = "25b9e03f145fd4f2bf705e07b900cd41fc636598fe5dc452fd0db1441c3f496d" 1827 | "checksum core-foundation-sys 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "716c271e8613ace48344f723b60b900a93150271e5be206212d052bbc0883efa" 1828 | "checksum core-foundation-sys 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e7ca8a5221364ef15ce201e8ed2f609fc312682a8f4e0e3d4aa5879764e0fa3b" 1829 | "checksum core-graphics 0.17.3 (registry+https://github.com/rust-lang/crates.io-index)" = "56790968ab1c8a1202a102e6de05fc6e1ec87da99e4e93e9a7d13efbfc1e95a9" 1830 | "checksum coreaudio-rs 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f229761965dad3e9b11081668a6ea00f1def7aa46062321b5ec245b834f6e491" 1831 | "checksum coreaudio-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "78fdbabf58d5b1f461e31b94a571c109284f384cec619a3d96e66ec55b4de82b" 1832 | "checksum cpal 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)" = "d58ae1ed6536b1b233f5e3aeb6997a046ddb4d05e3f61701b58a92eb254a829e" 1833 | "checksum crossbeam-deque 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f739f8c5363aca78cfb059edf753d8f0d36908c348f3d8d1503f03d8b75d9cf3" 1834 | "checksum crossbeam-epoch 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "927121f5407de9956180ff5e936fe3cf4324279280001cd56b669d28ee7e9150" 1835 | "checksum crossbeam-utils 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "2760899e32a1d58d5abb31129f8fae5de75220bc2176e77ff7c627ae45c918d9" 1836 | "checksum dcommon 0.3.0-alpha1 (registry+https://github.com/rust-lang/crates.io-index)" = "75db7ffa648a751330a163fd7d2829f59dca2eebbb54b8f7548580501ff1eb25" 1837 | "checksum deflate 0.7.19 (registry+https://github.com/rust-lang/crates.io-index)" = "8a6abb26e16e8d419b5c78662aa9f82857c2386a073da266840e474d5055ec86" 1838 | "checksum derive-com-impl 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "719bae05418f08f9088b78a9799554ea510e5513240078e079cd02e011078381" 1839 | "checksum derive-com-wrapper 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7a92b98762b3a3a10381db5aefcda7f3416b3dfe30b4cbb6fa742c51b4d53f7d" 1840 | "checksum direct2d 0.3.0-alpha1 (registry+https://github.com/rust-lang/crates.io-index)" = "aa0a45188530b40a5d0f88719fd4bf7f7cd470d909cd58e28a448239d0f0f8ce" 1841 | "checksum direct3d11 0.3.0-alpha2 (registry+https://github.com/rust-lang/crates.io-index)" = "f2a0457cc7628958051b9c8b40e5fb77245d6455a26e3c6cc233e8fcc100f60f" 1842 | "checksum directwrite 0.3.0-alpha4 (registry+https://github.com/rust-lang/crates.io-index)" = "277d3e7dafdeee693b73af98b3d0735fc0dbfac58880549a37f4087ab717aaac" 1843 | "checksum discard 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "212d0f5754cb6769937f4501cc0e67f4f4483c8d2c3e1e922ee9edbe4ab4c7c0" 1844 | "checksum dlib 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "77e51249a9d823a4cb79e3eca6dcd756153e8ed0157b6c04775d04bf1b13b76a" 1845 | "checksum downcast-rs 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "f2b92dfd5c2f75260cbf750572f95d387e7ca0ba5e3fbe9e1a33f23025be020f" 1846 | "checksum dxgi 0.3.0-alpha4 (registry+https://github.com/rust-lang/crates.io-index)" = "d9298b37442f78d9b78fdb81a6c4457863912671c03cee15fc304efdfff56ce0" 1847 | "checksum either 1.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "5527cfe0d098f36e3f8839852688e63c8fff1c90b2b405aef730615f9a7bcf7b" 1848 | "checksum env_logger 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3ddf21e73e016298f5cb37d6ef8e8da8e39f91f9ec8b0df44b7deb16a9f8cd5b" 1849 | "checksum foreign-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" 1850 | "checksum foreign-types-shared 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" 1851 | "checksum fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba" 1852 | "checksum gif 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)" = "dd4bca55ac1f213920ce3527ccd62386f1f15fa3f1714aeee1cf93f2c416903f" 1853 | "checksum glob 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "8be18de09a56b60ed0edf84bc9df007e30040691af7acd1c41874faac5895bfb" 1854 | "checksum hound 3.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8a164bb2ceaeff4f42542bdb847c41517c78a60f5649671b2a07312b6e117549" 1855 | "checksum humansize 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b6cab2627acfc432780848602f3f558f7e9dd427352224b0d9324025796d2a5e" 1856 | "checksum image 0.19.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ebdff791af04e30089bde8ad2a632b86af433b40c04db8d70ad4b21487db7a6a" 1857 | "checksum image 0.21.1 (registry+https://github.com/rust-lang/crates.io-index)" = "293e54ce142a936a39da748ba8178ae6aa1914b82d846a4278f11590c89bf116" 1858 | "checksum inflate 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)" = "1cdb29978cc5797bd8dcc8e5bf7de604891df2a8dc576973d71a281e916db2ff" 1859 | "checksum itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "501266b7edd0174f8530248f87f99c88fbe60ca4ef3dd486835b8d8d53136f7f" 1860 | "checksum jpeg-decoder 0.1.15 (registry+https://github.com/rust-lang/crates.io-index)" = "c8b7d43206b34b3f94ea9445174bda196e772049b9bddbc620c9d29b2d20110d" 1861 | "checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" 1862 | "checksum lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "bc5729f27f159ddd61f4df6228e827e86643d4d3e7c32183cb30a1c08f604a14" 1863 | "checksum lewton 0.9.4 (registry+https://github.com/rust-lang/crates.io-index)" = "8d542c1a317036c45c2aa1cf10cc9d403ca91eb2d333ef1a4917e5cb10628bd0" 1864 | "checksum libc 0.2.55 (registry+https://github.com/rust-lang/crates.io-index)" = "42914d39aad277d9e176efbdad68acb1d5443ab65afe0e0e4f0d49352a950880" 1865 | "checksum libloading 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "fd38073de8f7965d0c17d30546d4bb6da311ab428d1c7a3fc71dff7f9d4979b9" 1866 | "checksum libloading 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "9c3ad660d7cb8c5822cd83d10897b0f1f1526792737a179e73896152f85b88c2" 1867 | "checksum line_drawing 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5cc7ad3d82c845bdb5dde34ffdcc7a5fb4d2996e1e1ee0f19c33bc80e15196b9" 1868 | "checksum lock_api 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "62ebf1391f6acad60e5c8b43706dde4582df75c06698ab44511d15016bc2442c" 1869 | "checksum log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "e19e8d5c34a3e0e2223db8e060f9e8264aeeb5c5fc64a4ee9965c062211c024b" 1870 | "checksum log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c84ec4b527950aa83a329754b01dbe3f58361d1c5efacd1f6d68c494d08a17c6" 1871 | "checksum lzw 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7d947cbb889ed21c2a84be6ffbaebf5b4e0f4340638cba0444907e38b56be084" 1872 | "checksum mach 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "86dd2487cdfea56def77b88438a2c915fb45113c5319bfe7e14306ca4cd0b0e1" 1873 | "checksum malloc_buf 0.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" 1874 | "checksum math2d 0.2.0-alpha8 (registry+https://github.com/rust-lang/crates.io-index)" = "45c2ccad3be816c820d4e586beeab876653595460486301d70968860d5913f54" 1875 | "checksum memchr 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "148fab2e51b4f1cfc66da2a7c32981d1d3c083a803978268bb11fe4b86925e7a" 1876 | "checksum memchr 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "2efc7bc57c883d4a4d6e3246905283d8dae951bb3bd32f49d6ef297f546e1c39" 1877 | "checksum memmap 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "6585fd95e7bb50d6cc31e20d4cf9afb4e2ba16c5846fc76793f11218da9c475b" 1878 | "checksum memoffset 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0f9dc261e2b62d7a622bf416ea3c5245cdd5d9a7fcc428c0d06804dfce1775b3" 1879 | "checksum mengine 0.6.6 (git+https://github.com/planet0104/mengine?tag=0.6.6)" = "" 1880 | "checksum minimp3 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "542e9bed56860c5070a09939eee0e2df6f8f73f60304ddf56d620947e7017239" 1881 | "checksum minimp3-sys 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c109ae05c00ad6e3a53fab101e2f234545bdd010f0fffd399355efaf70817817" 1882 | "checksum neat 1.0.2 (git+https://github.com/planet0104/neat?tag=1.0.2)" = "" 1883 | "checksum nix 0.13.0 (registry+https://github.com/rust-lang/crates.io-index)" = "46f0f3210768d796e8fa79ec70ee6af172dacbe7147f5e69be5240a47778302b" 1884 | "checksum nodrop 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)" = "2f9667ddcc6cc8a43afc9b7917599d7216aa09c463919ea32c59ed6cac8bc945" 1885 | "checksum nom 3.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "05aec50c70fd288702bcd93284a8444607f3292dbdf2a30de5ea5dcdbe72287b" 1886 | "checksum nom 4.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2ad2a91a8e869eeb30b9cb3119ae87773a8f4ae617f41b1eb9c154b2905f7bd6" 1887 | "checksum nsvg 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "535e7ccd46cb95f86635dd503a6e2c415124229ead00e2073c38b25119c3ee25" 1888 | "checksum num-derive 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)" = "eafd0b45c5537c3ba526f79d3e75120036502bebacbb3f3220914067ce39dbf2" 1889 | "checksum num-integer 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)" = "b85e541ef8255f6cf42bbfe4ef361305c6c135d10919ecc26126c4e5ae94bc09" 1890 | "checksum num-iter 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)" = "76bd5272412d173d6bf9afdf98db8612bbabc9a7a830b7bfc9c188911716132e" 1891 | "checksum num-rational 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)" = "ee314c74bd753fc86b4780aa9475da469155f3848473a261d2d18e35245a784e" 1892 | "checksum num-rational 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4e96f040177bb3da242b5b1ecf3f54b5d5af3efbbfb18608977a5d2767b22f10" 1893 | "checksum num-traits 0.1.43 (registry+https://github.com/rust-lang/crates.io-index)" = "92e5113e9fd4cc14ded8e499429f396a20f98c772a47cc8622a736e1ec843c31" 1894 | "checksum num-traits 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "6ba9a427cfca2be13aa6f6403b0b7e7368fe982bfa16fccc450ce74c46cd9b32" 1895 | "checksum num_cpus 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1a23f0ed30a54abaa0c7e83b1d2d87ada7c3c23078d1d87815af3e3b6385fbba" 1896 | "checksum numtoa 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b8f8bdf33df195859076e54ab11ee78a1b208382d3a26ec40d142ffc1ecc49ef" 1897 | "checksum objc 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "31d20fd2b37e07cf5125be68357b588672e8cefe9a96f8c17a9d46053b3e590d" 1898 | "checksum ogg 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d79f1db9148be9d0e174bb3ac890f6030fcb1ed947267c5a91ee4c91b5a91e15" 1899 | "checksum ordered-float 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "18869315e81473c951eb56ad5558bbc56978562d3ecfb87abb7a1e944cea4518" 1900 | "checksum owning_ref 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "49a4b8ea2179e6a2e27411d3bca09ca6dd630821cf6894c6c7c8467a8ee7ef13" 1901 | "checksum parking_lot 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ab41b4aed082705d1056416ae4468b6ea99d52599ecf3169b00088d43113e337" 1902 | "checksum parking_lot_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "94c8c7923936b28d546dfd14d4472eaf34c99b14e1c973a32b3e6d4eb04298c9" 1903 | "checksum peeking_take_while 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" 1904 | "checksum percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "31010dd2e1ac33d5b46a5b413495239882813e0369f8ed8a5e266f173602f831" 1905 | "checksum pkg-config 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)" = "676e8eb2b1b4c9043511a9b7bea0915320d7e502b0a079fb03f9635a5252b18c" 1906 | "checksum png 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f54b9600d584d3b8a739e1662a595fab051329eff43f20e7d8cc22872962145b" 1907 | "checksum png 0.14.1 (registry+https://github.com/rust-lang/crates.io-index)" = "63daf481fdd0defa2d1d2be15c674fbfa1b0fd71882c303a91f9a79b3252c359" 1908 | "checksum proc-macro2 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "cd07deb3c6d1d9ff827999c7f9b04cdfd66b1b17ae508e14fe47b620f2282ae0" 1909 | "checksum proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)" = "cf3d2011ab5c909338f7887f4fc896d35932e29146c12c8d01da6b22a80ba759" 1910 | "checksum quote 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "1eca14c727ad12702eb4b6bfb5a232287dcf8385cb8ca83a3eeaf6519c44c408" 1911 | "checksum quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)" = "faf4799c5d274f3868a4aae320a0a182cbd2baee377b378f080e16a23e9d80db" 1912 | "checksum rand 0.3.23 (registry+https://github.com/rust-lang/crates.io-index)" = "64ac302d8f83c0c1974bf758f6b041c6c8ada916fbb44a609158ca8b064cc76c" 1913 | "checksum rand 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "552840b97013b1a26992c11eac34bdd778e464601a4c2054b5f0bff7c6761293" 1914 | "checksum rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)" = "6d71dacdc3c88c1fde3885a3be3fbab9f35724e6ce99467f7d9c5026132184ca" 1915 | "checksum rand_chacha 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "556d3a1ca6600bfcbab7c7c91ccb085ac7fbbcd70e008a98742e7847f4f7bcef" 1916 | "checksum rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b" 1917 | "checksum rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d0e7a549d590831370895ab7ba4ea0c1b6b011d106b5ff2da6eee112615e6dc0" 1918 | "checksum rand_hc 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7b40677c7be09ae76218dc623efbf7b18e34bced3f38883af07bb75630a21bc4" 1919 | "checksum rand_isaac 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ded997c9d5f13925be2a6fd7e66bf1872597f759fd9dd93513dd7e92e5a5ee08" 1920 | "checksum rand_jitter 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "1166d5c91dc97b88d1decc3285bb0a99ed84b05cfd0bc2341bdf2d43fc41e39b" 1921 | "checksum rand_os 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "7b75f676a1e053fc562eafbb47838d67c84801e38fc1ba459e8f180deabd5071" 1922 | "checksum rand_pcg 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "abf9b09b01790cfe0364f52bf32995ea3c39f4d2dd011eac241d2914146d0b44" 1923 | "checksum rand_xorshift 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cbf7e9e623549b0e21f6e97cf8ecf247c1a8fd2e8a992ae265314300b2455d5c" 1924 | "checksum rayon 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "373814f27745b2686b350dd261bfd24576a6fb0e2c5919b3a2b6005f820b0473" 1925 | "checksum rayon-core 1.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b055d1e92aba6877574d8fe604a63c8b5df60f60e5982bf7ccbb1338ea527356" 1926 | "checksum rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2" 1927 | "checksum redox_syscall 0.1.54 (registry+https://github.com/rust-lang/crates.io-index)" = "12229c14a0f65c4f1cb046a3b52047cdd9da1f4b30f8a39c5063c8bae515e252" 1928 | "checksum redox_termios 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7e891cfe48e9100a70a3b6eb652fef28920c117d366339687bd5576160db0f76" 1929 | "checksum regex 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "9329abc99e39129fcceabd24cf5d85b4671ef7c29c50e972bc5afe32438ec384" 1930 | "checksum regex-syntax 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)" = "7d707a4fa2637f2dca2ef9fd02225ec7661fe01a53623c1e6515b6916511f7a7" 1931 | "checksum rodio 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "10cb47941163cb747978d13a5c1b5c8fcd17f501817c4b77b9d69aed9ea240bc" 1932 | "checksum rustc-demangle 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)" = "ccc78bfd5acd7bf3e89cffcf899e5cb1a52d6fafa8dec2739ad70c9577a57288" 1933 | "checksum rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" 1934 | "checksum rusttype 0.7.6 (registry+https://github.com/rust-lang/crates.io-index)" = "25951e85bb2647960969f72c559392245a5bd07446a589390bf427dda31cdc4a" 1935 | "checksum ryu 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "b96a9549dc8d48f2c283938303c4b5a77aa29bfbc5b54b084fb1630408899a8f" 1936 | "checksum safemem 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8dca453248a96cb0749e36ccdfe2b0b4e54a61bfef89fb97ec621eb8e0a93dd9" 1937 | "checksum same-file 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "8f20c4be53a8a1ff4c1f1b2bd14570d2f634628709752f0702ecdd2b3f9a5267" 1938 | "checksum scoped_threadpool 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "1d51f5df5af43ab3f1360b429fa5e0152ac5ce8c0bd6485cae490332e96846a8" 1939 | "checksum scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "94258f53601af11e6a49f722422f6e3425c52b06245a5cf9bc09908b174f5e27" 1940 | "checksum semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" 1941 | "checksum semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" 1942 | "checksum serde 1.0.91 (registry+https://github.com/rust-lang/crates.io-index)" = "a72e9b96fa45ce22a4bc23da3858dfccfd60acd28a25bcd328a98fdd6bea43fd" 1943 | "checksum serde_derive 1.0.91 (registry+https://github.com/rust-lang/crates.io-index)" = "101b495b109a3e3ca8c4cbe44cf62391527cdfb6ba15821c5ce80bcd5ea23f9f" 1944 | "checksum serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)" = "5a23aa71d4a4d43fdbfaac00eff68ba8a06a51759a89ac3304323e800c4dd40d" 1945 | "checksum sha1 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "2579985fda508104f7587689507983eadd6a6e84dd35d6d115361f530916fa0d" 1946 | "checksum slice-deque 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "ffddf594f5f597f63533d897427a570dbaa9feabaaa06595b74b71b7014507d7" 1947 | "checksum smallvec 0.6.9 (registry+https://github.com/rust-lang/crates.io-index)" = "c4488ae950c49d403731982257768f48fada354a5203fe81f9bb6f43ca9002be" 1948 | "checksum smithay-client-toolkit 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)" = "aa4899558362a65589b53313935099835acf999740915e134dff20cca7c6a28b" 1949 | "checksum stable_deref_trait 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "dba1a27d3efae4351c8051072d619e3ade2820635c3958d826bfea39d59b54c8" 1950 | "checksum stb_truetype 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "69b7df505db8e81d54ff8be4693421e5b543e08214bd8d99eb761fcb4d5668ba" 1951 | "checksum stdweb 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ef5430c8e36b713e13b48a9f709cc21e046723fe44ce34587b73a830203b533e" 1952 | "checksum stdweb 0.4.17 (registry+https://github.com/rust-lang/crates.io-index)" = "c34362bb10ac1a9439674795cc0e1bdcb0c46444c8fd4874ef39a01d9a8a8f24" 1953 | "checksum stdweb-derive 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0e21ebd9179de08f2300a65454268a17ea3de204627458588c84319c4def3930" 1954 | "checksum stdweb-internal-macros 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "e68f7d08b76979a43e93fe043b66d2626e35d41d68b0b85519202c6dd8ac59fa" 1955 | "checksum stdweb-internal-runtime 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "d52317523542cc0af5b7e31017ad0f7d1e78da50455e38d5657cd17754f617da" 1956 | "checksum strsim 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" 1957 | "checksum svg 0.5.12 (registry+https://github.com/rust-lang/crates.io-index)" = "a863ec1f8e7cfd4ea449f77445cca06aac240b9a677ccf12b0f65ef020db52c7" 1958 | "checksum syn 0.15.34 (registry+https://github.com/rust-lang/crates.io-index)" = "a1393e4a97a19c01e900df2aec855a29f71cf02c402e2f443b8d2747c25c5dbe" 1959 | "checksum termion 1.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "dde0593aeb8d47accea5392b39350015b5eccb12c0d98044d856983d89548dea" 1960 | "checksum textwrap 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" 1961 | "checksum thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c6b53e329000edc2b34dbe8545fd20e55a333362d0a321909685a19bd28c3f1b" 1962 | "checksum tiff 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "1e4834f28a0330cb9f3f2c87d2649dca723cb33802e2bdcf18da32759fbec7ce" 1963 | "checksum toml 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)" = "758664fc71a3a69038656bee8b6be6477d2a6c315a6b81f7081f591bffa4111f" 1964 | "checksum ucd-util 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "535c204ee4d8434478593480b8f86ab45ec9aae0e83c568ca81abf0fd0e88f86" 1965 | "checksum unicode-width 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "882386231c45df4700b275c7ff55b6f3698780a650026380e72dabe76fa46526" 1966 | "checksum unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc" 1967 | "checksum utf8-ranges 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "796f7e48bef87609f7ade7e06495a87d5cd06c7866e6a5cbfceffc558a243737" 1968 | "checksum vec_map 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "05c78687fb1a80548ae3250346c3db86a80a7cdd77bda190189f2d0a0987c81a" 1969 | "checksum version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "914b1a6776c4c929a602fafd8bc742e06365d4bcbe48c30f9cca5824f70dc9dd" 1970 | "checksum void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" 1971 | "checksum walkdir 2.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "9d9d7ed3431229a144296213105a390676cc49c9b6a72bd19f3176c98e129fa1" 1972 | "checksum wasm-bindgen 0.2.45 (registry+https://github.com/rust-lang/crates.io-index)" = "b7ccc7b93cfd13e26700a9e2e41e6305f1951b87e166599069f77d10358100e6" 1973 | "checksum wasm-bindgen-backend 0.2.45 (registry+https://github.com/rust-lang/crates.io-index)" = "1953f91b1608eb1522513623c7739f047bb0fed4128ce51a93f08e12cc314645" 1974 | "checksum wasm-bindgen-macro 0.2.45 (registry+https://github.com/rust-lang/crates.io-index)" = "0f69da5696545d7ca6607a2e4b1a0edf5a6b36b2c49dbb0f1df6ad1d92884047" 1975 | "checksum wasm-bindgen-macro-support 0.2.45 (registry+https://github.com/rust-lang/crates.io-index)" = "2d4246f3bc73223bbb846f4f2430a60725826a96c9389adf715ed1d5af46dec6" 1976 | "checksum wasm-bindgen-shared 0.2.45 (registry+https://github.com/rust-lang/crates.io-index)" = "c08381e07e7a79e5e229ad7c60d15833d19033542cc5dd91d085df59d235f4a6" 1977 | "checksum wayland-client 0.21.12 (registry+https://github.com/rust-lang/crates.io-index)" = "e77d1e6887f07ea2e5d79a3d7d03a875e62d3746334a909b5035d779d849a523" 1978 | "checksum wayland-commons 0.21.12 (registry+https://github.com/rust-lang/crates.io-index)" = "dff69a5399ca212efa4966f3ee2a3773f19960d0fa329b9aca046a8508a0e09f" 1979 | "checksum wayland-protocols 0.21.12 (registry+https://github.com/rust-lang/crates.io-index)" = "c9ccddf6a4407d982898e0f0a1172217843f3d40fe4272f828060b56a2d40d81" 1980 | "checksum wayland-scanner 0.21.12 (registry+https://github.com/rust-lang/crates.io-index)" = "63bc5efa7dcdb8f04d2e5d1571c0d0577fc47076d133d68e056bdb299f1b60e2" 1981 | "checksum wayland-sys 0.21.12 (registry+https://github.com/rust-lang/crates.io-index)" = "e76af81a601b84d400744f85f083381daa77ac01f6c8711e57e662dc3a35d69d" 1982 | "checksum which 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)" = "e84a603e7e0b1ce1aa1ee2b109c7be00155ce52df5081590d1ffb93f4f515cb2" 1983 | "checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" 1984 | "checksum winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)" = "f10e386af2b13e47c89e7236a7a14a086791a2b88ebad6df9bf42040195cf770" 1985 | "checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" 1986 | "checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" 1987 | "checksum winapi-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7168bab6e1daee33b4557efd0e95d5ca70a03706d39fa5f3fe7a236f584b03c9" 1988 | "checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" 1989 | "checksum winit 0.19.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d233301129ddd33260b47f76900b50e154b7254546e2edba0e5468a1a5fe4de3" 1990 | "checksum wio 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "5d129932f4644ac2396cb456385cbf9e63b5b30c6e8dc4820bdca4eb082037a5" 1991 | "checksum x11-dl 2.18.3 (registry+https://github.com/rust-lang/crates.io-index)" = "940586acb859ea05c53971ac231685799a7ec1dee66ac0bccc0e6ad96e06b4e3" 1992 | "checksum xdg 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d089681aa106a86fade1b0128fb5daf07d5867a509ab036d99988dec80429a57" 1993 | "checksum xml-rs 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "541b12c998c5b56aa2b4e6f18f03664eef9a4fd0a246a55594efae6cc2d964b5" 1994 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "spaceout" 3 | version = "1.0.1" 4 | authors = ["Jia Ye "] 5 | edition = "2018" 6 | 7 | [dependencies] 8 | mengine = { git = "https://github.com/planet0104/mengine", tag="0.6.6" } 9 | neat = { git = "https://github.com/planet0104/neat", tag="1.0.2" } 10 | math2d = "0.2.0-alpha8" 11 | 12 | [profile.release] 13 | # lto = true 14 | # opt-level = 's' 15 | # panic = 'abort' -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # SpaceOut游戏 2 | 3 | >基于 nphysics2d, direct2d 和 stdweb 4 | 5 | >在线试玩:https://planet0104.github.io/spaceout/deploy/index.html 6 | 7 | 8 | 9 | 10 | 游戏源码参考《游戏编程入门》: 11 | 12 | 13 | -------------------------------------------------------------------------------- /deploy/BMissile.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/planet0104/spaceout/92813ef1d6cfc54a21b91f36a90dbf6869114988/deploy/BMissile.ogg -------------------------------------------------------------------------------- /deploy/BMissile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/planet0104/spaceout/92813ef1d6cfc54a21b91f36a90dbf6869114988/deploy/BMissile.png -------------------------------------------------------------------------------- /deploy/Blobbo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/planet0104/spaceout/92813ef1d6cfc54a21b91f36a90dbf6869114988/deploy/Blobbo.png -------------------------------------------------------------------------------- /deploy/Car.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/planet0104/spaceout/92813ef1d6cfc54a21b91f36a90dbf6869114988/deploy/Car.png -------------------------------------------------------------------------------- /deploy/Desert.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/planet0104/spaceout/92813ef1d6cfc54a21b91f36a90dbf6869114988/deploy/Desert.png -------------------------------------------------------------------------------- /deploy/GameOver.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/planet0104/spaceout/92813ef1d6cfc54a21b91f36a90dbf6869114988/deploy/GameOver.ogg -------------------------------------------------------------------------------- /deploy/GameOver.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/planet0104/spaceout/92813ef1d6cfc54a21b91f36a90dbf6869114988/deploy/GameOver.png -------------------------------------------------------------------------------- /deploy/JMissile.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/planet0104/spaceout/92813ef1d6cfc54a21b91f36a90dbf6869114988/deploy/JMissile.ogg -------------------------------------------------------------------------------- /deploy/JMissile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/planet0104/spaceout/92813ef1d6cfc54a21b91f36a90dbf6869114988/deploy/JMissile.png -------------------------------------------------------------------------------- /deploy/Jelly.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/planet0104/spaceout/92813ef1d6cfc54a21b91f36a90dbf6869114988/deploy/Jelly.png -------------------------------------------------------------------------------- /deploy/LgExplode.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/planet0104/spaceout/92813ef1d6cfc54a21b91f36a90dbf6869114988/deploy/LgExplode.ogg -------------------------------------------------------------------------------- /deploy/LgExplosion.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/planet0104/spaceout/92813ef1d6cfc54a21b91f36a90dbf6869114988/deploy/LgExplosion.png -------------------------------------------------------------------------------- /deploy/Missile.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/planet0104/spaceout/92813ef1d6cfc54a21b91f36a90dbf6869114988/deploy/Missile.ogg -------------------------------------------------------------------------------- /deploy/Missile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/planet0104/spaceout/92813ef1d6cfc54a21b91f36a90dbf6869114988/deploy/Missile.png -------------------------------------------------------------------------------- /deploy/Music.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/planet0104/spaceout/92813ef1d6cfc54a21b91f36a90dbf6869114988/deploy/Music.mp3 -------------------------------------------------------------------------------- /deploy/SmCar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/planet0104/spaceout/92813ef1d6cfc54a21b91f36a90dbf6869114988/deploy/SmCar.png -------------------------------------------------------------------------------- /deploy/SmExplode.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/planet0104/spaceout/92813ef1d6cfc54a21b91f36a90dbf6869114988/deploy/SmExplode.ogg -------------------------------------------------------------------------------- /deploy/SmExplosion.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/planet0104/spaceout/92813ef1d6cfc54a21b91f36a90dbf6869114988/deploy/SmExplosion.png -------------------------------------------------------------------------------- /deploy/Splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/planet0104/spaceout/92813ef1d6cfc54a21b91f36a90dbf6869114988/deploy/Splash.png -------------------------------------------------------------------------------- /deploy/TMissile.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/planet0104/spaceout/92813ef1d6cfc54a21b91f36a90dbf6869114988/deploy/TMissile.ogg -------------------------------------------------------------------------------- /deploy/TMissile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/planet0104/spaceout/92813ef1d6cfc54a21b91f36a90dbf6869114988/deploy/TMissile.png -------------------------------------------------------------------------------- /deploy/Timmy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/planet0104/spaceout/92813ef1d6cfc54a21b91f36a90dbf6869114988/deploy/Timmy.png -------------------------------------------------------------------------------- /deploy/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 24 | 25 | 26 | 49 | 50 | -------------------------------------------------------------------------------- /deploy/spaceout-wasm.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | if( typeof Rust === "undefined" ) { 4 | var Rust = {}; 5 | } 6 | 7 | (function( root, factory ) { 8 | if( typeof define === "function" && define.amd ) { 9 | define( [], factory ); 10 | } else if( typeof module === "object" && module.exports ) { 11 | module.exports = factory(); 12 | } else { 13 | Rust.spaceout = factory(); 14 | } 15 | }( this, function() { 16 | return (function( module_factory ) { 17 | var instance = module_factory(); 18 | 19 | if( typeof process === "object" && typeof process.versions === "object" && typeof process.versions.node === "string" ) { 20 | var fs = require( "fs" ); 21 | var path = require( "path" ); 22 | var wasm_path = path.join( __dirname, "spaceout.wasm" ); 23 | var buffer = fs.readFileSync( wasm_path ); 24 | var mod = new WebAssembly.Module( buffer ); 25 | var wasm_instance = new WebAssembly.Instance( mod, instance.imports ); 26 | return instance.initialize( wasm_instance ); 27 | } else { 28 | var file = fetch( "spaceout.wasm", {credentials: "same-origin"} ); 29 | 30 | var wasm_instance = ( typeof WebAssembly.instantiateStreaming === "function" 31 | ? WebAssembly.instantiateStreaming( file, instance.imports ) 32 | .then( function( result ) { return result.instance; } ) 33 | 34 | : file 35 | .then( function( response ) { return response.arrayBuffer(); } ) 36 | .then( function( bytes ) { return WebAssembly.compile( bytes ); } ) 37 | .then( function( mod ) { return WebAssembly.instantiate( mod, instance.imports ) } ) ); 38 | 39 | return wasm_instance 40 | .then( function( wasm_instance ) { 41 | var exports = instance.initialize( wasm_instance ); 42 | console.log( "Finished loading Rust wasm module 'spaceout'" ); 43 | return exports; 44 | }) 45 | .catch( function( error ) { 46 | console.log( "Error loading Rust wasm module 'spaceout':", error ); 47 | throw error; 48 | }); 49 | } 50 | }( function() { 51 | var Module = {}; 52 | 53 | Module.STDWEB_PRIVATE = {}; 54 | 55 | // This is based on code from Emscripten's preamble.js. 56 | Module.STDWEB_PRIVATE.to_utf8 = function to_utf8( str, addr ) { 57 | var HEAPU8 = Module.HEAPU8; 58 | for( var i = 0; i < str.length; ++i ) { 59 | // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! So decode UTF16->UTF32->UTF8. 60 | // See http://unicode.org/faq/utf_bom.html#utf16-3 61 | // For UTF8 byte structure, see http://en.wikipedia.org/wiki/UTF-8#Description and https://www.ietf.org/rfc/rfc2279.txt and https://tools.ietf.org/html/rfc3629 62 | var u = str.charCodeAt( i ); // possibly a lead surrogate 63 | if( u >= 0xD800 && u <= 0xDFFF ) { 64 | u = 0x10000 + ((u & 0x3FF) << 10) | (str.charCodeAt( ++i ) & 0x3FF); 65 | } 66 | 67 | if( u <= 0x7F ) { 68 | HEAPU8[ addr++ ] = u; 69 | } else if( u <= 0x7FF ) { 70 | HEAPU8[ addr++ ] = 0xC0 | (u >> 6); 71 | HEAPU8[ addr++ ] = 0x80 | (u & 63); 72 | } else if( u <= 0xFFFF ) { 73 | HEAPU8[ addr++ ] = 0xE0 | (u >> 12); 74 | HEAPU8[ addr++ ] = 0x80 | ((u >> 6) & 63); 75 | HEAPU8[ addr++ ] = 0x80 | (u & 63); 76 | } else if( u <= 0x1FFFFF ) { 77 | HEAPU8[ addr++ ] = 0xF0 | (u >> 18); 78 | HEAPU8[ addr++ ] = 0x80 | ((u >> 12) & 63); 79 | HEAPU8[ addr++ ] = 0x80 | ((u >> 6) & 63); 80 | HEAPU8[ addr++ ] = 0x80 | (u & 63); 81 | } else if( u <= 0x3FFFFFF ) { 82 | HEAPU8[ addr++ ] = 0xF8 | (u >> 24); 83 | HEAPU8[ addr++ ] = 0x80 | ((u >> 18) & 63); 84 | HEAPU8[ addr++ ] = 0x80 | ((u >> 12) & 63); 85 | HEAPU8[ addr++ ] = 0x80 | ((u >> 6) & 63); 86 | HEAPU8[ addr++ ] = 0x80 | (u & 63); 87 | } else { 88 | HEAPU8[ addr++ ] = 0xFC | (u >> 30); 89 | HEAPU8[ addr++ ] = 0x80 | ((u >> 24) & 63); 90 | HEAPU8[ addr++ ] = 0x80 | ((u >> 18) & 63); 91 | HEAPU8[ addr++ ] = 0x80 | ((u >> 12) & 63); 92 | HEAPU8[ addr++ ] = 0x80 | ((u >> 6) & 63); 93 | HEAPU8[ addr++ ] = 0x80 | (u & 63); 94 | } 95 | } 96 | }; 97 | 98 | Module.STDWEB_PRIVATE.noop = function() {}; 99 | Module.STDWEB_PRIVATE.to_js = function to_js( address ) { 100 | var kind = Module.HEAPU8[ address + 12 ]; 101 | if( kind === 0 ) { 102 | return undefined; 103 | } else if( kind === 1 ) { 104 | return null; 105 | } else if( kind === 2 ) { 106 | return Module.HEAP32[ address / 4 ]; 107 | } else if( kind === 3 ) { 108 | return Module.HEAPF64[ address / 8 ]; 109 | } else if( kind === 4 ) { 110 | var pointer = Module.HEAPU32[ address / 4 ]; 111 | var length = Module.HEAPU32[ (address + 4) / 4 ]; 112 | return Module.STDWEB_PRIVATE.to_js_string( pointer, length ); 113 | } else if( kind === 5 ) { 114 | return false; 115 | } else if( kind === 6 ) { 116 | return true; 117 | } else if( kind === 7 ) { 118 | var pointer = Module.STDWEB_PRIVATE.arena + Module.HEAPU32[ address / 4 ]; 119 | var length = Module.HEAPU32[ (address + 4) / 4 ]; 120 | var output = []; 121 | for( var i = 0; i < length; ++i ) { 122 | output.push( Module.STDWEB_PRIVATE.to_js( pointer + i * 16 ) ); 123 | } 124 | return output; 125 | } else if( kind === 8 ) { 126 | var arena = Module.STDWEB_PRIVATE.arena; 127 | var value_array_pointer = arena + Module.HEAPU32[ address / 4 ]; 128 | var length = Module.HEAPU32[ (address + 4) / 4 ]; 129 | var key_array_pointer = arena + Module.HEAPU32[ (address + 8) / 4 ]; 130 | var output = {}; 131 | for( var i = 0; i < length; ++i ) { 132 | var key_pointer = Module.HEAPU32[ (key_array_pointer + i * 8) / 4 ]; 133 | var key_length = Module.HEAPU32[ (key_array_pointer + 4 + i * 8) / 4 ]; 134 | var key = Module.STDWEB_PRIVATE.to_js_string( key_pointer, key_length ); 135 | var value = Module.STDWEB_PRIVATE.to_js( value_array_pointer + i * 16 ); 136 | output[ key ] = value; 137 | } 138 | return output; 139 | } else if( kind === 9 ) { 140 | return Module.STDWEB_PRIVATE.acquire_js_reference( Module.HEAP32[ address / 4 ] ); 141 | } else if( kind === 10 || kind === 12 || kind === 13 ) { 142 | var adapter_pointer = Module.HEAPU32[ address / 4 ]; 143 | var pointer = Module.HEAPU32[ (address + 4) / 4 ]; 144 | var deallocator_pointer = Module.HEAPU32[ (address + 8) / 4 ]; 145 | var num_ongoing_calls = 0; 146 | var drop_queued = false; 147 | var output = function() { 148 | if( pointer === 0 || drop_queued === true ) { 149 | if (kind === 10) { 150 | throw new ReferenceError( "Already dropped Rust function called!" ); 151 | } else if (kind === 12) { 152 | throw new ReferenceError( "Already dropped FnMut function called!" ); 153 | } else { 154 | throw new ReferenceError( "Already called or dropped FnOnce function called!" ); 155 | } 156 | } 157 | 158 | var function_pointer = pointer; 159 | if (kind === 13) { 160 | output.drop = Module.STDWEB_PRIVATE.noop; 161 | pointer = 0; 162 | } 163 | 164 | if (num_ongoing_calls !== 0) { 165 | if (kind === 12 || kind === 13) { 166 | throw new ReferenceError( "FnMut function called multiple times concurrently!" ); 167 | } 168 | } 169 | 170 | var args = Module.STDWEB_PRIVATE.alloc( 16 ); 171 | Module.STDWEB_PRIVATE.serialize_array( args, arguments ); 172 | 173 | try { 174 | num_ongoing_calls += 1; 175 | Module.STDWEB_PRIVATE.dyncall( "vii", adapter_pointer, [function_pointer, args] ); 176 | var result = Module.STDWEB_PRIVATE.tmp; 177 | Module.STDWEB_PRIVATE.tmp = null; 178 | } finally { 179 | num_ongoing_calls -= 1; 180 | } 181 | 182 | if( drop_queued === true && num_ongoing_calls === 0 ) { 183 | output.drop(); 184 | } 185 | 186 | return result; 187 | }; 188 | 189 | output.drop = function() { 190 | if (num_ongoing_calls !== 0) { 191 | drop_queued = true; 192 | return; 193 | } 194 | 195 | output.drop = Module.STDWEB_PRIVATE.noop; 196 | var function_pointer = pointer; 197 | pointer = 0; 198 | 199 | if (function_pointer != 0) { 200 | Module.STDWEB_PRIVATE.dyncall( "vi", deallocator_pointer, [function_pointer] ); 201 | } 202 | }; 203 | 204 | return output; 205 | } else if( kind === 14 ) { 206 | var pointer = Module.HEAPU32[ address / 4 ]; 207 | var length = Module.HEAPU32[ (address + 4) / 4 ]; 208 | var array_kind = Module.HEAPU32[ (address + 8) / 4 ]; 209 | var pointer_end = pointer + length; 210 | 211 | switch( array_kind ) { 212 | case 0: 213 | return Module.HEAPU8.subarray( pointer, pointer_end ); 214 | case 1: 215 | return Module.HEAP8.subarray( pointer, pointer_end ); 216 | case 2: 217 | return Module.HEAPU16.subarray( pointer, pointer_end ); 218 | case 3: 219 | return Module.HEAP16.subarray( pointer, pointer_end ); 220 | case 4: 221 | return Module.HEAPU32.subarray( pointer, pointer_end ); 222 | case 5: 223 | return Module.HEAP32.subarray( pointer, pointer_end ); 224 | case 6: 225 | return Module.HEAPF32.subarray( pointer, pointer_end ); 226 | case 7: 227 | return Module.HEAPF64.subarray( pointer, pointer_end ); 228 | } 229 | } else if( kind === 15 ) { 230 | return Module.STDWEB_PRIVATE.get_raw_value( Module.HEAPU32[ address / 4 ] ); 231 | } 232 | }; 233 | 234 | Module.STDWEB_PRIVATE.serialize_object = function serialize_object( address, value ) { 235 | var keys = Object.keys( value ); 236 | var length = keys.length; 237 | var key_array_pointer = Module.STDWEB_PRIVATE.alloc( length * 8 ); 238 | var value_array_pointer = Module.STDWEB_PRIVATE.alloc( length * 16 ); 239 | Module.HEAPU8[ address + 12 ] = 8; 240 | Module.HEAPU32[ address / 4 ] = value_array_pointer; 241 | Module.HEAPU32[ (address + 4) / 4 ] = length; 242 | Module.HEAPU32[ (address + 8) / 4 ] = key_array_pointer; 243 | for( var i = 0; i < length; ++i ) { 244 | var key = keys[ i ]; 245 | var key_address = key_array_pointer + i * 8; 246 | Module.STDWEB_PRIVATE.to_utf8_string( key_address, key ); 247 | 248 | Module.STDWEB_PRIVATE.from_js( value_array_pointer + i * 16, value[ key ] ); 249 | } 250 | }; 251 | 252 | Module.STDWEB_PRIVATE.serialize_array = function serialize_array( address, value ) { 253 | var length = value.length; 254 | var pointer = Module.STDWEB_PRIVATE.alloc( length * 16 ); 255 | Module.HEAPU8[ address + 12 ] = 7; 256 | Module.HEAPU32[ address / 4 ] = pointer; 257 | Module.HEAPU32[ (address + 4) / 4 ] = length; 258 | for( var i = 0; i < length; ++i ) { 259 | Module.STDWEB_PRIVATE.from_js( pointer + i * 16, value[ i ] ); 260 | } 261 | }; 262 | 263 | // New browsers and recent Node 264 | var cachedEncoder = ( typeof TextEncoder === "function" 265 | ? new TextEncoder( "utf-8" ) 266 | // Old Node (before v11) 267 | : ( typeof util === "object" && util && typeof util.TextEncoder === "function" 268 | ? new util.TextEncoder( "utf-8" ) 269 | // Old browsers 270 | : null ) ); 271 | 272 | if ( cachedEncoder != null ) { 273 | Module.STDWEB_PRIVATE.to_utf8_string = function to_utf8_string( address, value ) { 274 | var buffer = cachedEncoder.encode( value ); 275 | var length = buffer.length; 276 | var pointer = 0; 277 | 278 | if ( length > 0 ) { 279 | pointer = Module.STDWEB_PRIVATE.alloc( length ); 280 | Module.HEAPU8.set( buffer, pointer ); 281 | } 282 | 283 | Module.HEAPU32[ address / 4 ] = pointer; 284 | Module.HEAPU32[ (address + 4) / 4 ] = length; 285 | }; 286 | 287 | } else { 288 | Module.STDWEB_PRIVATE.to_utf8_string = function to_utf8_string( address, value ) { 289 | var length = Module.STDWEB_PRIVATE.utf8_len( value ); 290 | var pointer = 0; 291 | 292 | if ( length > 0 ) { 293 | pointer = Module.STDWEB_PRIVATE.alloc( length ); 294 | Module.STDWEB_PRIVATE.to_utf8( value, pointer ); 295 | } 296 | 297 | Module.HEAPU32[ address / 4 ] = pointer; 298 | Module.HEAPU32[ (address + 4) / 4 ] = length; 299 | }; 300 | } 301 | 302 | Module.STDWEB_PRIVATE.from_js = function from_js( address, value ) { 303 | var kind = Object.prototype.toString.call( value ); 304 | if( kind === "[object String]" ) { 305 | Module.HEAPU8[ address + 12 ] = 4; 306 | Module.STDWEB_PRIVATE.to_utf8_string( address, value ); 307 | } else if( kind === "[object Number]" ) { 308 | if( value === (value|0) ) { 309 | Module.HEAPU8[ address + 12 ] = 2; 310 | Module.HEAP32[ address / 4 ] = value; 311 | } else { 312 | Module.HEAPU8[ address + 12 ] = 3; 313 | Module.HEAPF64[ address / 8 ] = value; 314 | } 315 | } else if( value === null ) { 316 | Module.HEAPU8[ address + 12 ] = 1; 317 | } else if( value === undefined ) { 318 | Module.HEAPU8[ address + 12 ] = 0; 319 | } else if( value === false ) { 320 | Module.HEAPU8[ address + 12 ] = 5; 321 | } else if( value === true ) { 322 | Module.HEAPU8[ address + 12 ] = 6; 323 | } else if( kind === "[object Symbol]" ) { 324 | var id = Module.STDWEB_PRIVATE.register_raw_value( value ); 325 | Module.HEAPU8[ address + 12 ] = 15; 326 | Module.HEAP32[ address / 4 ] = id; 327 | } else { 328 | var refid = Module.STDWEB_PRIVATE.acquire_rust_reference( value ); 329 | Module.HEAPU8[ address + 12 ] = 9; 330 | Module.HEAP32[ address / 4 ] = refid; 331 | } 332 | }; 333 | 334 | // New browsers and recent Node 335 | var cachedDecoder = ( typeof TextDecoder === "function" 336 | ? new TextDecoder( "utf-8" ) 337 | // Old Node (before v11) 338 | : ( typeof util === "object" && util && typeof util.TextDecoder === "function" 339 | ? new util.TextDecoder( "utf-8" ) 340 | // Old browsers 341 | : null ) ); 342 | 343 | if ( cachedDecoder != null ) { 344 | Module.STDWEB_PRIVATE.to_js_string = function to_js_string( index, length ) { 345 | return cachedDecoder.decode( Module.HEAPU8.subarray( index, index + length ) ); 346 | }; 347 | 348 | } else { 349 | // This is ported from Rust's stdlib; it's faster than 350 | // the string conversion from Emscripten. 351 | Module.STDWEB_PRIVATE.to_js_string = function to_js_string( index, length ) { 352 | var HEAPU8 = Module.HEAPU8; 353 | index = index|0; 354 | length = length|0; 355 | var end = (index|0) + (length|0); 356 | var output = ""; 357 | while( index < end ) { 358 | var x = HEAPU8[ index++ ]; 359 | if( x < 128 ) { 360 | output += String.fromCharCode( x ); 361 | continue; 362 | } 363 | var init = (x & (0x7F >> 2)); 364 | var y = 0; 365 | if( index < end ) { 366 | y = HEAPU8[ index++ ]; 367 | } 368 | var ch = (init << 6) | (y & 63); 369 | if( x >= 0xE0 ) { 370 | var z = 0; 371 | if( index < end ) { 372 | z = HEAPU8[ index++ ]; 373 | } 374 | var y_z = ((y & 63) << 6) | (z & 63); 375 | ch = init << 12 | y_z; 376 | if( x >= 0xF0 ) { 377 | var w = 0; 378 | if( index < end ) { 379 | w = HEAPU8[ index++ ]; 380 | } 381 | ch = (init & 7) << 18 | ((y_z << 6) | (w & 63)); 382 | 383 | output += String.fromCharCode( 0xD7C0 + (ch >> 10) ); 384 | ch = 0xDC00 + (ch & 0x3FF); 385 | } 386 | } 387 | output += String.fromCharCode( ch ); 388 | continue; 389 | } 390 | return output; 391 | }; 392 | } 393 | 394 | Module.STDWEB_PRIVATE.id_to_ref_map = {}; 395 | Module.STDWEB_PRIVATE.id_to_refcount_map = {}; 396 | Module.STDWEB_PRIVATE.ref_to_id_map = new WeakMap(); 397 | // Not all types can be stored in a WeakMap 398 | Module.STDWEB_PRIVATE.ref_to_id_map_fallback = new Map(); 399 | Module.STDWEB_PRIVATE.last_refid = 1; 400 | 401 | Module.STDWEB_PRIVATE.id_to_raw_value_map = {}; 402 | Module.STDWEB_PRIVATE.last_raw_value_id = 1; 403 | 404 | Module.STDWEB_PRIVATE.acquire_rust_reference = function( reference ) { 405 | if( reference === undefined || reference === null ) { 406 | return 0; 407 | } 408 | 409 | var id_to_refcount_map = Module.STDWEB_PRIVATE.id_to_refcount_map; 410 | var id_to_ref_map = Module.STDWEB_PRIVATE.id_to_ref_map; 411 | var ref_to_id_map = Module.STDWEB_PRIVATE.ref_to_id_map; 412 | var ref_to_id_map_fallback = Module.STDWEB_PRIVATE.ref_to_id_map_fallback; 413 | 414 | var refid = ref_to_id_map.get( reference ); 415 | if( refid === undefined ) { 416 | refid = ref_to_id_map_fallback.get( reference ); 417 | } 418 | if( refid === undefined ) { 419 | refid = Module.STDWEB_PRIVATE.last_refid++; 420 | try { 421 | ref_to_id_map.set( reference, refid ); 422 | } catch (e) { 423 | ref_to_id_map_fallback.set( reference, refid ); 424 | } 425 | } 426 | 427 | if( refid in id_to_ref_map ) { 428 | id_to_refcount_map[ refid ]++; 429 | } else { 430 | id_to_ref_map[ refid ] = reference; 431 | id_to_refcount_map[ refid ] = 1; 432 | } 433 | 434 | return refid; 435 | }; 436 | 437 | Module.STDWEB_PRIVATE.acquire_js_reference = function( refid ) { 438 | return Module.STDWEB_PRIVATE.id_to_ref_map[ refid ]; 439 | }; 440 | 441 | Module.STDWEB_PRIVATE.increment_refcount = function( refid ) { 442 | Module.STDWEB_PRIVATE.id_to_refcount_map[ refid ]++; 443 | }; 444 | 445 | Module.STDWEB_PRIVATE.decrement_refcount = function( refid ) { 446 | var id_to_refcount_map = Module.STDWEB_PRIVATE.id_to_refcount_map; 447 | if( 0 == --id_to_refcount_map[ refid ] ) { 448 | var id_to_ref_map = Module.STDWEB_PRIVATE.id_to_ref_map; 449 | var ref_to_id_map_fallback = Module.STDWEB_PRIVATE.ref_to_id_map_fallback; 450 | var reference = id_to_ref_map[ refid ]; 451 | delete id_to_ref_map[ refid ]; 452 | delete id_to_refcount_map[ refid ]; 453 | ref_to_id_map_fallback.delete(reference); 454 | } 455 | }; 456 | 457 | Module.STDWEB_PRIVATE.register_raw_value = function( value ) { 458 | var id = Module.STDWEB_PRIVATE.last_raw_value_id++; 459 | Module.STDWEB_PRIVATE.id_to_raw_value_map[ id ] = value; 460 | return id; 461 | }; 462 | 463 | Module.STDWEB_PRIVATE.unregister_raw_value = function( id ) { 464 | delete Module.STDWEB_PRIVATE.id_to_raw_value_map[ id ]; 465 | }; 466 | 467 | Module.STDWEB_PRIVATE.get_raw_value = function( id ) { 468 | return Module.STDWEB_PRIVATE.id_to_raw_value_map[ id ]; 469 | }; 470 | 471 | Module.STDWEB_PRIVATE.alloc = function alloc( size ) { 472 | return Module.web_malloc( size ); 473 | }; 474 | 475 | Module.STDWEB_PRIVATE.dyncall = function( signature, ptr, args ) { 476 | return Module.web_table.get( ptr ).apply( null, args ); 477 | }; 478 | 479 | // This is based on code from Emscripten's preamble.js. 480 | Module.STDWEB_PRIVATE.utf8_len = function utf8_len( str ) { 481 | var len = 0; 482 | for( var i = 0; i < str.length; ++i ) { 483 | // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! So decode UTF16->UTF32->UTF8. 484 | // See http://unicode.org/faq/utf_bom.html#utf16-3 485 | var u = str.charCodeAt( i ); // possibly a lead surrogate 486 | if( u >= 0xD800 && u <= 0xDFFF ) { 487 | u = 0x10000 + ((u & 0x3FF) << 10) | (str.charCodeAt( ++i ) & 0x3FF); 488 | } 489 | 490 | if( u <= 0x7F ) { 491 | ++len; 492 | } else if( u <= 0x7FF ) { 493 | len += 2; 494 | } else if( u <= 0xFFFF ) { 495 | len += 3; 496 | } else if( u <= 0x1FFFFF ) { 497 | len += 4; 498 | } else if( u <= 0x3FFFFFF ) { 499 | len += 5; 500 | } else { 501 | len += 6; 502 | } 503 | } 504 | return len; 505 | }; 506 | 507 | Module.STDWEB_PRIVATE.prepare_any_arg = function( value ) { 508 | var arg = Module.STDWEB_PRIVATE.alloc( 16 ); 509 | Module.STDWEB_PRIVATE.from_js( arg, value ); 510 | return arg; 511 | }; 512 | 513 | Module.STDWEB_PRIVATE.acquire_tmp = function( dummy ) { 514 | var value = Module.STDWEB_PRIVATE.tmp; 515 | Module.STDWEB_PRIVATE.tmp = null; 516 | return value; 517 | }; 518 | 519 | 520 | 521 | var HEAP8 = null; 522 | var HEAP16 = null; 523 | var HEAP32 = null; 524 | var HEAPU8 = null; 525 | var HEAPU16 = null; 526 | var HEAPU32 = null; 527 | var HEAPF32 = null; 528 | var HEAPF64 = null; 529 | 530 | Object.defineProperty( Module, 'exports', { value: {} } ); 531 | 532 | function __web_on_grow() { 533 | var buffer = Module.instance.exports.memory.buffer; 534 | HEAP8 = new Int8Array( buffer ); 535 | HEAP16 = new Int16Array( buffer ); 536 | HEAP32 = new Int32Array( buffer ); 537 | HEAPU8 = new Uint8Array( buffer ); 538 | HEAPU16 = new Uint16Array( buffer ); 539 | HEAPU32 = new Uint32Array( buffer ); 540 | HEAPF32 = new Float32Array( buffer ); 541 | HEAPF64 = new Float64Array( buffer ); 542 | Module.HEAP8 = HEAP8; 543 | Module.HEAP16 = HEAP16; 544 | Module.HEAP32 = HEAP32; 545 | Module.HEAPU8 = HEAPU8; 546 | Module.HEAPU16 = HEAPU16; 547 | Module.HEAPU32 = HEAPU32; 548 | Module.HEAPF32 = HEAPF32; 549 | Module.HEAPF64 = HEAPF64; 550 | } 551 | 552 | return { 553 | imports: { 554 | env: { 555 | "__cargo_web_snippet_09675c7ed2827e045dc760aeac3d286437cfbe5e": function($0, $1, $2, $3) { 556 | $1 = Module.STDWEB_PRIVATE.to_js($1);$2 = Module.STDWEB_PRIVATE.to_js($2);$3 = Module.STDWEB_PRIVATE.to_js($3);Module.STDWEB_PRIVATE.from_js($0, (function(){try{return{value:function(){return($1).setAttribute(($2),($3));}(),success:true};}catch(error){return{error:error,success:false};}})()); 557 | }, 558 | "__cargo_web_snippet_0a02c7764aacc2ed939a149ae98000223d3eebe8": function($0) { 559 | var r = Module.STDWEB_PRIVATE.acquire_js_reference( $0 );return (r instanceof DOMException) && (r.name === "InvalidStateError"); 560 | }, 561 | "__cargo_web_snippet_0aced9e2351ced72f1ff99645a129132b16c0d3c": function($0) { 562 | var value = Module.STDWEB_PRIVATE.get_raw_value( $0 );return Module.STDWEB_PRIVATE.register_raw_value( value ); 563 | }, 564 | "__cargo_web_snippet_0dea113a333fb5e5b4a095e126af48297c78582c": function($0) { 565 | Module.STDWEB_PRIVATE.from_js($0, (function(){return performance.now();})()); 566 | }, 567 | "__cargo_web_snippet_0e54fd9c163fcf648ce0a395fde4500fd167a40b": function($0) { 568 | var r = Module.STDWEB_PRIVATE.acquire_js_reference( $0 );return (r instanceof DOMException) && (r.name === "InvalidCharacterError"); 569 | }, 570 | "__cargo_web_snippet_0f503de1d61309643e0e13a7871406891e3691c9": function($0) { 571 | Module.STDWEB_PRIVATE.from_js($0, (function(){return window;})()); 572 | }, 573 | "__cargo_web_snippet_10f5aa3985855124ab83b21d4e9f7297eb496508": function($0) { 574 | var o = Module.STDWEB_PRIVATE.acquire_js_reference( $0 );return (o instanceof Array) | 0; 575 | }, 576 | "__cargo_web_snippet_118f0890c89dea663a9de1e37da3209056824ede": function($0, $1, $2, $3) { 577 | $1 = Module.STDWEB_PRIVATE.to_js($1);$2 = Module.STDWEB_PRIVATE.to_js($2);$3 = Module.STDWEB_PRIVATE.to_js($3);Module.STDWEB_PRIVATE.from_js($0, (function(){try{($1).insertAdjacentHTML(($2),($3));return{success:true};}catch(error){return{error:error,success:false};}})()); 578 | }, 579 | "__cargo_web_snippet_133dc76bb1b71c4c01bb36ad66f6e9e9e56d7c29": function($0, $1) { 580 | $1 = Module.STDWEB_PRIVATE.to_js($1);Module.STDWEB_PRIVATE.from_js($0, (function(){return($1).head;})()); 581 | }, 582 | "__cargo_web_snippet_14097f70c739ef4a180a6ad82cadc458d11e85dc": function($0) { 583 | $0 = Module.STDWEB_PRIVATE.to_js($0);alert(($0)); 584 | }, 585 | "__cargo_web_snippet_199d5eb25dfe761687bcd487578eb7e636bd9650": function($0) { 586 | $0 = Module.STDWEB_PRIVATE.to_js($0);console.log(($0)); 587 | }, 588 | "__cargo_web_snippet_1a2744bc6a61c63f8b4f067e2ec57bdf090228a7": function($0) { 589 | $0 = Module.STDWEB_PRIVATE.to_js($0);var u=function(){($0)();setTimeout(u,1);};setTimeout(u,1); 590 | }, 591 | "__cargo_web_snippet_1e65287b40ff2503a5bd21bba8369d5759ddb2d4": function($0, $1) { 592 | $0 = Module.STDWEB_PRIVATE.to_js($0);$1 = Module.STDWEB_PRIVATE.to_js($1);($0).height=($1); 593 | }, 594 | "__cargo_web_snippet_21b3f8a03ebd43638729195a0f8d81a35d6db610": function($0) { 595 | Module.STDWEB_PRIVATE.from_js($0, (function(){var ua=navigator.userAgent.toLowerCase();if(ua.match(/MicroMessenger/i)=="micromessenger"){return true;}else{return false;}})()); 596 | }, 597 | "__cargo_web_snippet_22ebc1c8b700e17d3297b8b69a6d7c01d51645ca": function($0, $1, $2, $3) { 598 | $0 = Module.STDWEB_PRIVATE.to_js($0);$1 = Module.STDWEB_PRIVATE.to_js($1);$2 = Module.STDWEB_PRIVATE.to_js($2);$3 = Module.STDWEB_PRIVATE.to_js($3);($0).fillText(($1),($2),($3)); 599 | }, 600 | "__cargo_web_snippet_23639371cb88eaf0e4e3ff14ba63d1e5b5cea0b2": function($0, $1) { 601 | $1 = Module.STDWEB_PRIVATE.to_js($1);Module.STDWEB_PRIVATE.from_js($0, (function(){return($1).key;})()); 602 | }, 603 | "__cargo_web_snippet_275c52510376b526efc3b77789bb01b8a440efd4": function($0, $1) { 604 | $1 = Module.STDWEB_PRIVATE.to_js($1);Module.STDWEB_PRIVATE.from_js($0, (function(){return($1).width;})()); 605 | }, 606 | "__cargo_web_snippet_285aac3fba72d67cb459d37d4d21aa4fb62598ba": function($0) { 607 | Module.STDWEB_PRIVATE.arena = $0; 608 | }, 609 | "__cargo_web_snippet_2aa86295ceaf75cec3455bf6b35b97ed2221c3fb": function($0, $1) { 610 | $1 = Module.STDWEB_PRIVATE.to_js($1);Module.STDWEB_PRIVATE.from_js($0, (function(){return($1).offsetX;})()); 611 | }, 612 | "__cargo_web_snippet_2d56166e9cc992d33468672119b43c7f7a35cb8b": function($0, $1, $2, $3, $4) { 613 | $1 = Module.STDWEB_PRIVATE.to_js($1);$2 = Module.STDWEB_PRIVATE.to_js($2);$3 = Module.STDWEB_PRIVATE.to_js($3);$4 = Module.STDWEB_PRIVATE.to_js($4);Module.STDWEB_PRIVATE.from_js($0, (function(){try{($1).drawImage(($2),($3),($4));return{success:true};}catch(error){return{error:error,success:false};}})()); 614 | }, 615 | "__cargo_web_snippet_2e459d528f68fa537c1ad00f3215296e61f10ba0": function($0) { 616 | $0 = Module.STDWEB_PRIVATE.to_js($0);var update_callback=($0);window.update_worker.onmessage=function(msg){update_callback();}; 617 | }, 618 | "__cargo_web_snippet_2e787da4cf65f1a75e61b4ffa128a1209c25378f": function($0) { 619 | $0 = Module.STDWEB_PRIVATE.to_js($0);($0).send(); 620 | }, 621 | "__cargo_web_snippet_2ff9a14a5b30713ea1b414f85e76cc1aa9967a9f": function() { 622 | if(window.audioContext.state !=="running"&&! window.audioContextResume){window.audioContext.resume();window.audioContextResume=true;} 623 | }, 624 | "__cargo_web_snippet_31f6071b77215fa0db4e2754d20833403f06a364": function($0) { 625 | var r = Module.STDWEB_PRIVATE.acquire_js_reference( $0 );return (r instanceof DOMException) && (r.name === "InvalidAccessError"); 626 | }, 627 | "__cargo_web_snippet_352943ae98b2eeb817e36305c3531d61c7e1a52b": function($0) { 628 | var o = Module.STDWEB_PRIVATE.acquire_js_reference( $0 );return (o instanceof Element) | 0; 629 | }, 630 | "__cargo_web_snippet_3acb61e26a58d72c09ba72199a1768f2ed19718d": function($0, $1) { 631 | $0 = Module.STDWEB_PRIVATE.to_js($0);$1 = Module.STDWEB_PRIVATE.to_js($1);($0).title=($1); 632 | }, 633 | "__cargo_web_snippet_429abd7dd89c3d9b139c9e1fc9952e82647136a6": function($0, $1) { 634 | $0 = Module.STDWEB_PRIVATE.to_js($0);$1 = Module.STDWEB_PRIVATE.to_js($1);var url=($0);var repeat=($1);var audio=document.getElementById("backgroundAudio");if(audio.src==url){if(audio.networkState==1){audio.play();}}else{audio.src=url;audio.play();audio.loop=repeat;audio.preload=true;} 635 | }, 636 | "__cargo_web_snippet_483332aba5049cf91b33ff0a00ee3f352e5052ff": function($0) { 637 | $0 = Module.STDWEB_PRIVATE.to_js($0);var animation_fn=($0);window.request_animation_frame_fn=function(timestamp){animation_fn(timestamp);requestAnimationFrame(window.request_animation_frame_fn);};requestAnimationFrame(window.request_animation_frame_fn); 638 | }, 639 | "__cargo_web_snippet_49ae24e0f2d690c290030200ef793256363af281": function($0, $1) { 640 | $1 = Module.STDWEB_PRIVATE.to_js($1);Module.STDWEB_PRIVATE.from_js($0, (function(){return($1).getContext("2d");})()); 641 | }, 642 | "__cargo_web_snippet_4bf79208e808ede1e50a3b71015a9c25fd23dc2c": function($0, $1, $2) { 643 | $0 = Module.STDWEB_PRIVATE.to_js($0);$1 = Module.STDWEB_PRIVATE.to_js($1);$2 = Module.STDWEB_PRIVATE.to_js($2);var path=($0);var bytes=new Uint8Array(($1)).buffer;var audioCtx=window.audioContext;audioCtx.decodeAudioData(bytes,function(buffer){($2)(path,buffer);}); 644 | }, 645 | "__cargo_web_snippet_4f3506c033a17d47bbac5ea9941a5308a86e7933": function($0) { 646 | $0 = Module.STDWEB_PRIVATE.to_js($0);try{var audioCtx=window.audioContext;var source=audioCtx.createBufferSource();source.buffer=($0);source.connect(audioCtx.destination);source.start(0);}catch(e){console.log(e);} 647 | }, 648 | "__cargo_web_snippet_54c301f42021c68eb1c25310e36baf3b3b910e96": function($0, $1) { 649 | $0 = Module.STDWEB_PRIVATE.to_js($0);$1 = Module.STDWEB_PRIVATE.to_js($1);var array=($0);var pointer=($1);Module.HEAPU8.set(array,pointer); 650 | }, 651 | "__cargo_web_snippet_5984245de8b6ef88f693ba2383ebf3c2f9718c6c": function($0) { 652 | var o = Module.STDWEB_PRIVATE.acquire_js_reference( $0 );return (o instanceof HTMLCanvasElement) | 0; 653 | }, 654 | "__cargo_web_snippet_5ce29e47f24c834eb9791bb11465a892f0846cd6": function($0) { 655 | $0 = Module.STDWEB_PRIVATE.to_js($0);var oldRequestAnimationFrame=window.requestAnimationFrame;window.requestAnimationFrame=function(a,b){($0)();oldRequestAnimationFrame(a,b);}; 656 | }, 657 | "__cargo_web_snippet_5ff24e9704111df2c482ac39341902174ab3c66c": function($0, $1) { 658 | $1 = Module.STDWEB_PRIVATE.to_js($1);Module.STDWEB_PRIVATE.from_js($0, (function(){return($1).offsetY;})()); 659 | }, 660 | "__cargo_web_snippet_614a3dd2adb7e9eac4a0ec6e59d37f87e0521c3b": function($0, $1) { 661 | $1 = Module.STDWEB_PRIVATE.to_js($1);Module.STDWEB_PRIVATE.from_js($0, (function(){return($1).error;})()); 662 | }, 663 | "__cargo_web_snippet_6a0bf07b6e92fa20cf6af04918b9707e6ebc23bf": function($0) { 664 | var o = Module.STDWEB_PRIVATE.acquire_js_reference( $0 );return (o instanceof ArrayBuffer) | 0; 665 | }, 666 | "__cargo_web_snippet_6c1f25bf7c9104accb489618515bd1869f4ca315": function($0, $1) { 667 | $1 = Module.STDWEB_PRIVATE.to_js($1);Module.STDWEB_PRIVATE.from_js($0, (function(){return($1).clientX;})()); 668 | }, 669 | "__cargo_web_snippet_6fcce0aae651e2d748e085ff1f800f87625ff8c8": function($0) { 670 | Module.STDWEB_PRIVATE.from_js($0, (function(){return document;})()); 671 | }, 672 | "__cargo_web_snippet_72fc447820458c720c68d0d8e078ede631edd723": function($0, $1, $2) { 673 | console.error( 'Panic location:', Module.STDWEB_PRIVATE.to_js_string( $0, $1 ) + ':' + $2 ); 674 | }, 675 | "__cargo_web_snippet_76c1ee6b34a4c89a8e2052fb46de66eee5144608": function($0) { 676 | var o = Module.STDWEB_PRIVATE.acquire_js_reference( $0 );return (o instanceof KeyboardEvent && o.type === "keyup") | 0; 677 | }, 678 | "__cargo_web_snippet_772e974d0e0ee2fc7002b867480d52e1413e343c": function($0, $1) { 679 | $0 = Module.STDWEB_PRIVATE.to_js($0);$1 = Module.STDWEB_PRIVATE.to_js($1);var image=new Image();var path=($0);image.src=path;image.setAttribute("key",path);image.onload=function(){($1)(this);}; 680 | }, 681 | "__cargo_web_snippet_77c7f20d9ad1903cb1faad4b79591e5576426760": function($0) { 682 | Module.STDWEB_PRIVATE.from_js($0, (function(){return Math.random();})()); 683 | }, 684 | "__cargo_web_snippet_7acc5a611b1dfdb40f09c005d173515f6f286581": function($0) { 685 | var r = Module.STDWEB_PRIVATE.acquire_js_reference( $0 );return (r instanceof DOMException) && (r.name === "NotSupportedError"); 686 | }, 687 | "__cargo_web_snippet_7b0825ae89bed906bbdd29f8ee2ceb22c4fef516": function($0, $1) { 688 | $0 = Module.STDWEB_PRIVATE.to_js($0);$1 = Module.STDWEB_PRIVATE.to_js($1);($0).width=($1); 689 | }, 690 | "__cargo_web_snippet_7ba9f102925446c90affc984f921f414615e07dd": function($0, $1) { 691 | $1 = Module.STDWEB_PRIVATE.to_js($1);Module.STDWEB_PRIVATE.from_js($0, (function(){return($1).body;})()); 692 | }, 693 | "__cargo_web_snippet_7bead6b563d52eee65504adb6b76c5cacb5428d3": function($0) { 694 | $0 = Module.STDWEB_PRIVATE.to_js($0);($0).preventDefault(); 695 | }, 696 | "__cargo_web_snippet_7c8dfab835dc8a552cd9d67f27d26624590e052c": function($0) { 697 | var r = Module.STDWEB_PRIVATE.acquire_js_reference( $0 );return (r instanceof DOMException) && (r.name === "SyntaxError"); 698 | }, 699 | "__cargo_web_snippet_7e69871d2f0243bddcb8cffc809fd6fb5fb78697": function($0, $1) { 700 | $0 = Module.STDWEB_PRIVATE.to_js($0);$1 = Module.STDWEB_PRIVATE.to_js($1);($0).fillStyle=($1); 701 | }, 702 | "__cargo_web_snippet_805f380b2417781e236074d0a5242acae242e096": function() { 703 | const AudioContext=window.AudioContext||window.webkitAudioContext;window.audioContext=new AudioContext();window.audioContextResume=false; 704 | }, 705 | "__cargo_web_snippet_80d6d56760c65e49b7be8b6b01c1ea861b046bf0": function($0) { 706 | Module.STDWEB_PRIVATE.decrement_refcount( $0 ); 707 | }, 708 | "__cargo_web_snippet_8819d2d939e0c355f6f0fcfc570471fbfb9ed185": function($0, $1) { 709 | $1 = Module.STDWEB_PRIVATE.to_js($1);Module.STDWEB_PRIVATE.from_js($0, (function(){try{var blob;try{blob=new Blob([($1)],{type:"application/javascript"});}catch(e){window.BlobBuilder=window.BlobBuilder||window.WebKitBlobBuilder||window.MozBlobBuilder;blob=new BlobBuilder();blob.append(response);blob=blob.getBlob();}var worker=new Worker(URL.createObjectURL(blob));window.update_worker=worker;return true;}catch(e){return false;}})()); 710 | }, 711 | "__cargo_web_snippet_8878b5fa0fa47aa5a1b525a2e37fef51440640ff": function($0) { 712 | var o = Module.STDWEB_PRIVATE.acquire_js_reference( $0 );return (o instanceof TypeError) | 0; 713 | }, 714 | "__cargo_web_snippet_888b745991f21839297ff985ddd25fb66d630e67": function($0) { 715 | var o = Module.STDWEB_PRIVATE.acquire_js_reference( $0 );return (o instanceof MouseEvent && o.type === "mousedown") | 0; 716 | }, 717 | "__cargo_web_snippet_89611721005b3de331324f19bedec5df179862e4": function($0) { 718 | var o = Module.STDWEB_PRIVATE.acquire_js_reference( $0 );return (o instanceof CanvasRenderingContext2D) | 0; 719 | }, 720 | "__cargo_web_snippet_89c60e7bdeea1696ae29a3df3c53083c9b79ed43": function($0, $1, $2) { 721 | $0 = Module.STDWEB_PRIVATE.to_js($0);$1 = Module.STDWEB_PRIVATE.to_js($1);$2 = Module.STDWEB_PRIVATE.to_js($2);($0).translate(($1),($2)); 722 | }, 723 | "__cargo_web_snippet_8b5715d025f1c953edc0a987be15322fff001440": function($0, $1) { 724 | $1 = Module.STDWEB_PRIVATE.to_js($1);Module.STDWEB_PRIVATE.from_js($0, (function(){return($1)})()); 725 | }, 726 | "__cargo_web_snippet_8bda7828a5cd8d59960149c7575849e2b9b2599f": function($0, $1) { 727 | $1 = Module.STDWEB_PRIVATE.to_js($1);Module.STDWEB_PRIVATE.from_js($0, (function(){return($1).font})()); 728 | }, 729 | "__cargo_web_snippet_8c32019649bb581b1b742eeedfc410e2bedd56a6": function($0, $1) { 730 | var array = Module.STDWEB_PRIVATE.acquire_js_reference( $0 );Module.STDWEB_PRIVATE.serialize_array( $1, array ); 731 | }, 732 | "__cargo_web_snippet_8c8a0fd988218bf31fae8adc33f715997855bce8": function($0, $1) { 733 | $0 = Module.STDWEB_PRIVATE.to_js($0);$1 = Module.STDWEB_PRIVATE.to_js($1);($0).font=($1); 734 | }, 735 | "__cargo_web_snippet_8d04f039d0d206de7c81c52bc75c9318b6bac46e": function($0, $1, $2, $3, $4, $5, $6, $7, $8, $9, $10) { 736 | $1 = Module.STDWEB_PRIVATE.to_js($1);$2 = Module.STDWEB_PRIVATE.to_js($2);$3 = Module.STDWEB_PRIVATE.to_js($3);$4 = Module.STDWEB_PRIVATE.to_js($4);$5 = Module.STDWEB_PRIVATE.to_js($5);$6 = Module.STDWEB_PRIVATE.to_js($6);$7 = Module.STDWEB_PRIVATE.to_js($7);$8 = Module.STDWEB_PRIVATE.to_js($8);$9 = Module.STDWEB_PRIVATE.to_js($9);$10 = Module.STDWEB_PRIVATE.to_js($10);Module.STDWEB_PRIVATE.from_js($0, (function(){try{($1).drawImage(($2),($3),($4),($5),($6),($7),($8),($9),($10));return{success:true};}catch(error){return{error:error,success:false};}})()); 737 | }, 738 | "__cargo_web_snippet_8ee4a42a927000c0dbb3df58615e7310277fd76d": function($0) { 739 | var o = Module.STDWEB_PRIVATE.acquire_js_reference( $0 );return (o instanceof Event && o.type === "readystatechange") | 0; 740 | }, 741 | "__cargo_web_snippet_8f3d27dc63d5d97a77a58ac099119b35169cccb4": function($0, $1) { 742 | $1 = Module.STDWEB_PRIVATE.to_js($1);Module.STDWEB_PRIVATE.from_js($0, (function(){return($1).status;})()); 743 | }, 744 | "__cargo_web_snippet_906f13b1e97c3e6e6996c62d7584c4917315426d": function($0) { 745 | var o = Module.STDWEB_PRIVATE.acquire_js_reference( $0 );return (o instanceof MouseEvent && o.type === "click") | 0; 746 | }, 747 | "__cargo_web_snippet_947e3c71a436d2534560c3daba2b3a52e02ec6d0": function($0, $1) { 748 | $1 = Module.STDWEB_PRIVATE.to_js($1);Module.STDWEB_PRIVATE.from_js($0, (function(){return($1).clientY;})()); 749 | }, 750 | "__cargo_web_snippet_97495987af1720d8a9a923fa4683a7b683e3acd6": function($0, $1) { 751 | console.error( 'Panic error message:', Module.STDWEB_PRIVATE.to_js_string( $0, $1 ) ); 752 | }, 753 | "__cargo_web_snippet_99c4eefdc8d4cc724135163b8c8665a1f3de99e4": function($0, $1, $2, $3) { 754 | $1 = Module.STDWEB_PRIVATE.to_js($1);$2 = Module.STDWEB_PRIVATE.to_js($2);$3 = Module.STDWEB_PRIVATE.to_js($3);Module.STDWEB_PRIVATE.from_js($0, (function(){var listener=($1);($2).addEventListener(($3),listener);return listener;})()); 755 | }, 756 | "__cargo_web_snippet_9cbe3f041910b7b8710cf6692e325e3c397db838": function($0) { 757 | var o = Module.STDWEB_PRIVATE.acquire_js_reference( $0 );return (o instanceof PointerEvent && o.type === "pointermove") | 0; 758 | }, 759 | "__cargo_web_snippet_9d64a695070c583ca1db88f92170810d90b0bb4c": function($0) { 760 | var o = Module.STDWEB_PRIVATE.acquire_js_reference( $0 );return (o instanceof KeyboardEvent && o.type === "keydown") | 0; 761 | }, 762 | "__cargo_web_snippet_9f22d4ca7bc938409787341b7db181f8dd41e6df": function($0) { 763 | Module.STDWEB_PRIVATE.increment_refcount( $0 ); 764 | }, 765 | "__cargo_web_snippet_a0a18da333faeefd8f24d721eecff792e15fe45f": function($0, $1) { 766 | $1 = Module.STDWEB_PRIVATE.to_js($1);Module.STDWEB_PRIVATE.from_js($0, (function(){return Array.from(($1).targetTouches);})()); 767 | }, 768 | "__cargo_web_snippet_a152e8d0e8fac5476f30c1d19e4ab217dbcba73d": function($0, $1, $2) { 769 | $1 = Module.STDWEB_PRIVATE.to_js($1);$2 = Module.STDWEB_PRIVATE.to_js($2);Module.STDWEB_PRIVATE.from_js($0, (function(){try{return{value:function(){return($1).querySelector(($2));}(),success:true};}catch(error){return{error:error,success:false};}})()); 770 | }, 771 | "__cargo_web_snippet_a22b013cdfad43b048086eb38b7d14366fb7d483": function($0, $1) { 772 | $1 = Module.STDWEB_PRIVATE.to_js($1);Module.STDWEB_PRIVATE.from_js($0, (function(){return($1).readyState;})()); 773 | }, 774 | "__cargo_web_snippet_a25852c51af085f4ed732c8841ca8ff3a4c18fc1": function($0, $1, $2) { 775 | $0 = Module.STDWEB_PRIVATE.to_js($0);$1 = Module.STDWEB_PRIVATE.to_js($1);$2 = Module.STDWEB_PRIVATE.to_js($2);($0).open(($1),($2),true); 776 | }, 777 | "__cargo_web_snippet_a35b77319c5b64b2274ada5001b2f2b75a3d610a": function($0, $1) { 778 | $1 = Module.STDWEB_PRIVATE.to_js($1);Module.STDWEB_PRIVATE.from_js($0, (function(){return($1).response;})()); 779 | }, 780 | "__cargo_web_snippet_a5372d594649dd9a509ca43d5e2a2f35992a8095": function($0) { 781 | return Module.STDWEB_PRIVATE.acquire_rust_reference( new Uint8Array( Module.STDWEB_PRIVATE.acquire_js_reference( $0 ) ) ); 782 | }, 783 | "__cargo_web_snippet_ab05f53189dacccf2d365ad26daa407d4f7abea9": function($0, $1) { 784 | $1 = Module.STDWEB_PRIVATE.to_js($1);Module.STDWEB_PRIVATE.from_js($0, (function(){return($1).value;})()); 785 | }, 786 | "__cargo_web_snippet_ae9eea10548a4bf4faaae47d98c04fcc6358dc7a": function($0) { 787 | var o = Module.STDWEB_PRIVATE.acquire_js_reference( $0 );return (o instanceof Touch) | 0; 788 | }, 789 | "__cargo_web_snippet_b06dde4acf09433b5190a4b001259fe5d4abcbc2": function($0, $1) { 790 | $1 = Module.STDWEB_PRIVATE.to_js($1);Module.STDWEB_PRIVATE.from_js($0, (function(){return($1).success;})()); 791 | }, 792 | "__cargo_web_snippet_b2f12f45d22efd090ad11c42910de6a690b26ff5": function($0, $1) { 793 | $0 = Module.STDWEB_PRIVATE.to_js($0);$1 = Module.STDWEB_PRIVATE.to_js($1);($0).textBaseline=($1); 794 | }, 795 | "__cargo_web_snippet_b33a39de4ca954888e26fe9caa277138e808eeba": function($0, $1) { 796 | $1 = Module.STDWEB_PRIVATE.to_js($1);Module.STDWEB_PRIVATE.from_js($0, (function(){return($1).length;})()); 797 | }, 798 | "__cargo_web_snippet_b6fbe111e441333398599f63dc09b26f8d172654": function($0, $1) { 799 | $1 = Module.STDWEB_PRIVATE.to_js($1);Module.STDWEB_PRIVATE.from_js($0, (function(){return($1).innerHeight;})()); 800 | }, 801 | "__cargo_web_snippet_c580ae485906e2c96cc6404b6b740d1cd93971ea": function($0, $1, $2) { 802 | $1 = Module.STDWEB_PRIVATE.to_js($1);$2 = Module.STDWEB_PRIVATE.to_js($2);Module.STDWEB_PRIVATE.from_js($0, (function(){return($1).getAttribute(($2));})()); 803 | }, 804 | "__cargo_web_snippet_cbd9ab50e213a9a554b2ca9ed651f4cec9549baa": function($0) { 805 | var r = Module.STDWEB_PRIVATE.acquire_js_reference( $0 );return (r instanceof DOMException) && (r.name === "NoModificationAllowedError"); 806 | }, 807 | "__cargo_web_snippet_cf0debbfec441e126df5ec4b805a71e969f49a75": function($0, $1, $2, $3, $4) { 808 | $0 = Module.STDWEB_PRIVATE.to_js($0);$1 = Module.STDWEB_PRIVATE.to_js($1);$2 = Module.STDWEB_PRIVATE.to_js($2);$3 = Module.STDWEB_PRIVATE.to_js($3);$4 = Module.STDWEB_PRIVATE.to_js($4);($0).fillRect(($1),($2),($3),($4)); 809 | }, 810 | "__cargo_web_snippet_d2e4181d99d09b8dcdaf227704c44b7be437abd4": function($0) { 811 | var o = Module.STDWEB_PRIVATE.acquire_js_reference( $0 );return (o instanceof Event && o.type === "resize") | 0; 812 | }, 813 | "__cargo_web_snippet_d3336fefc8646aa17b501ca0d1fc23db2bfd8df2": function($0, $1) { 814 | $1 = Module.STDWEB_PRIVATE.to_js($1);Module.STDWEB_PRIVATE.from_js($0, (function(){return($1).height;})()); 815 | }, 816 | "__cargo_web_snippet_d3950c8b8eadde86db1f789d48b3d88f5388f38c": function($0, $1) { 817 | $0 = Module.STDWEB_PRIVATE.to_js($0);$1 = Module.STDWEB_PRIVATE.to_js($1);($0).rotate(($1)); 818 | }, 819 | "__cargo_web_snippet_d78525a7e29b71c98de16dd1bb6d36e69c426e5b": function() { 820 | var audio=document.getElementById("backgroundAudio");audio.pause(); 821 | }, 822 | "__cargo_web_snippet_db43542d50a0d818c3dcbfcd5765df726b0cecba": function($0) { 823 | var o = Module.STDWEB_PRIVATE.acquire_js_reference( $0 );return (o instanceof TouchEvent && o.type === "touchmove") | 0; 824 | }, 825 | "__cargo_web_snippet_dbb53dba3c545489c571daef6df33c004d76cd31": function($0) { 826 | $0 = Module.STDWEB_PRIVATE.to_js($0);($0).save(); 827 | }, 828 | "__cargo_web_snippet_dc2fd915bd92f9e9c6a3bd15174f1414eee3dbaf": function() { 829 | console.error( 'Encountered a panic!' ); 830 | }, 831 | "__cargo_web_snippet_dc4dfa79de7ab0957282c3e9df7305d8278fee36": function($0, $1) { 832 | $1 = Module.STDWEB_PRIVATE.to_js($1);Module.STDWEB_PRIVATE.from_js($0, (function(){return($1).target})()); 833 | }, 834 | "__cargo_web_snippet_dcbfa3eb1cc89d9842b0ad8d9030a57a7cae7124": function($0) { 835 | return (Module.STDWEB_PRIVATE.acquire_js_reference( $0 ) instanceof Uint8Array) | 0; 836 | }, 837 | "__cargo_web_snippet_e4773373c7bd7977c8724df676307048e93c2570": function($0) { 838 | Module.STDWEB_PRIVATE.from_js($0, (function(){return new XMLHttpRequest();})()); 839 | }, 840 | "__cargo_web_snippet_e661a6e83d17ee59647051c129ca260aeaedbaa2": function($0) { 841 | var o = Module.STDWEB_PRIVATE.acquire_js_reference( $0 );return (o instanceof XMLHttpRequest) | 0; 842 | }, 843 | "__cargo_web_snippet_e9638d6405ab65f78daf4a5af9c9de14ecf1e2ec": function($0) { 844 | $0 = Module.STDWEB_PRIVATE.to_js($0);Module.STDWEB_PRIVATE.unregister_raw_value(($0)); 845 | }, 846 | "__cargo_web_snippet_ea616dc5ba4767572f03b776a1fb421c8b84a57e": function($0) { 847 | var r = Module.STDWEB_PRIVATE.acquire_js_reference( $0 );return (r instanceof DOMException) && (r.name === "IndexSizeError"); 848 | }, 849 | "__cargo_web_snippet_ea6ad9d8415e84119621f5aa2c86a39abc588b75": function($0, $1) { 850 | $1 = Module.STDWEB_PRIVATE.to_js($1);Module.STDWEB_PRIVATE.from_js($0, (function(){return($1).innerWidth;})()); 851 | }, 852 | "__cargo_web_snippet_efcd7ed267bb6a2949a17758809e5bcf4bbde5ab": function($0, $1, $2) { 853 | $0 = Module.STDWEB_PRIVATE.to_js($0);$1 = Module.STDWEB_PRIVATE.to_js($1);$2 = Module.STDWEB_PRIVATE.to_js($2);($0).scale(($1),($2)); 854 | }, 855 | "__cargo_web_snippet_f758d1d19e6af207b72d52670e6cee92b5d7d378": function($0) { 856 | $0 = Module.STDWEB_PRIVATE.to_js($0);($0).restore(); 857 | }, 858 | "__cargo_web_snippet_f7d63c8fa328e3d60684adbe6033c62f25e64a25": function($0, $1, $2, $3, $4, $5, $6) { 859 | $1 = Module.STDWEB_PRIVATE.to_js($1);$2 = Module.STDWEB_PRIVATE.to_js($2);$3 = Module.STDWEB_PRIVATE.to_js($3);$4 = Module.STDWEB_PRIVATE.to_js($4);$5 = Module.STDWEB_PRIVATE.to_js($5);$6 = Module.STDWEB_PRIVATE.to_js($6);Module.STDWEB_PRIVATE.from_js($0, (function(){try{($1).drawImage(($2),($3),($4),($5),($6));return{success:true};}catch(error){return{error:error,success:false};}})()); 860 | }, 861 | "__cargo_web_snippet_fa54d8a49420847890278c906f291a2ce1dd03ca": function($0) { 862 | var o = Module.STDWEB_PRIVATE.acquire_js_reference( $0 );return (o instanceof HTMLImageElement) | 0; 863 | }, 864 | "__cargo_web_snippet_fc788667416ad6e036cdb7fca6aa20f52014d95d": function($0, $1, $2) { 865 | $1 = Module.STDWEB_PRIVATE.to_js($1);$2 = Module.STDWEB_PRIVATE.to_js($2);Module.STDWEB_PRIVATE.from_js($0, (function(){try{return{value:function(){($1).responseType=($2);}(),success:true};}catch(error){return{error:error,success:false};}})()); 866 | }, 867 | "__cargo_web_snippet_ff5103e6cc179d13b4c7a785bdce2708fd559fc0": function($0) { 868 | Module.STDWEB_PRIVATE.tmp = Module.STDWEB_PRIVATE.to_js( $0 ); 869 | }, 870 | "__web_on_grow": __web_on_grow 871 | } 872 | }, 873 | initialize: function( instance ) { 874 | Object.defineProperty( Module, 'instance', { value: instance } ); 875 | Object.defineProperty( Module, 'web_malloc', { value: Module.instance.exports.__web_malloc } ); 876 | Object.defineProperty( Module, 'web_free', { value: Module.instance.exports.__web_free } ); 877 | Object.defineProperty( Module, 'web_table', { value: Module.instance.exports.__indirect_function_table } ); 878 | 879 | 880 | __web_on_grow(); 881 | Module.instance.exports.main(); 882 | 883 | return Module.exports; 884 | } 885 | }; 886 | } 887 | )); 888 | })); 889 | -------------------------------------------------------------------------------- /deploy/spaceout.wasm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/planet0104/spaceout/92813ef1d6cfc54a21b91f36a90dbf6869114988/deploy/spaceout.wasm -------------------------------------------------------------------------------- /spaceout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/planet0104/spaceout/92813ef1d6cfc54a21b91f36a90dbf6869114988/spaceout.png -------------------------------------------------------------------------------- /src/ai.rs: -------------------------------------------------------------------------------- 1 | use neat::ga::GA; 2 | use neat::phenotype::RunType; 3 | use neat::phenotype::NeuralNet; 4 | 5 | const POP_SIZE:i32 = 150; 6 | 7 | #[derive(Debug)] 8 | pub enum Turn{ 9 | Left, 10 | Right 11 | } 12 | 13 | pub struct CarBrain{ 14 | ga: GA, 15 | generation: i32, 16 | current_brain: usize, 17 | frame_count: f64, 18 | max_score: f64, 19 | use_best: bool, 20 | best_brain: Option, 21 | } 22 | 23 | impl CarBrain{ 24 | pub fn new() -> CarBrain{ 25 | let mut ga = GA::new(POP_SIZE, 3, 2); 26 | ga.create_phenotypes(); 27 | CarBrain{ 28 | ga, 29 | generation: 0, 30 | current_brain: 0, 31 | frame_count: 0.0, 32 | max_score: 0.0, 33 | use_best: false, 34 | best_brain: None, 35 | } 36 | } 37 | 38 | //下一代 39 | fn epoch(&mut self) -> Option{ 40 | self.ga.epoch(); 41 | self.generation += 1; 42 | self.current_brain = 0; 43 | //绘制最好的网络 44 | let brains: Vec = self.ga.get_best_phenotypes_from_last_generation(); 45 | if brains.len() > 0 { 46 | self.best_brain = Some(self.ga.get_phenotype(brains[0]).clone()); 47 | let net_img = self.ga.get_phenotype(brains[0]).draw_net(120, 100, 10); 48 | Some(net_img) 49 | }else{ 50 | None 51 | } 52 | } 53 | 54 | pub fn current_brain(&self) -> usize{ 55 | self.current_brain 56 | } 57 | 58 | pub fn current_generation(&self) -> i32{ 59 | self.generation 60 | } 61 | 62 | pub fn use_best(&mut self, use_best:bool){ 63 | self.use_best = use_best; 64 | } 65 | 66 | pub fn max_score(&self) -> i32{ 67 | self.max_score as i32 68 | } 69 | 70 | //汽车被子弹击中以后,进入下一个大脑进行控制 71 | pub fn car_dying(&mut self, score: i32) -> Option{ 72 | //设置网络得分 73 | self.ga.fitness_scores()[self.current_brain] = self.frame_count+score as f64*10.; 74 | if self.frame_count>self.max_score{ 75 | self.max_score = self.frame_count; 76 | } 77 | self.current_brain += 1; 78 | self.frame_count = 0.0;//重置网络得分 79 | //所有网络都已死亡,进入下一代 80 | if self.current_brain == self.ga.pop_size() as usize{ 81 | self.epoch() 82 | }else{ 83 | None 84 | } 85 | } 86 | 87 | //更新网络得到输出 88 | //输入:车子位置(x/width), 最近的外星人位置(x/width, y/height),最近的子弹位置(x/width, y/height) 89 | pub fn update(&mut self, car_pos: f64, alien_x: f64, alien_y: f64, missile_x: f64, missile_y: f64) -> (Turn, bool){ 90 | self.frame_count += 1.0; 91 | //网络处理 92 | let output = if self.use_best && self.best_brain.is_some(){ 93 | self.best_brain.as_mut().unwrap().update(&[car_pos, missile_x, missile_y], RunType::Active) 94 | }else{ 95 | let phenotype = self.ga.get_phenotype(self.current_brain); 96 | phenotype.update(&[car_pos, missile_x, missile_y], RunType::Active) 97 | }; 98 | let fire = output[1] > 0.5; 99 | if output[0] > 0.5 { 100 | (Turn::Left, fire) 101 | }else{ 102 | (Turn::Right, fire) 103 | } 104 | } 105 | } -------------------------------------------------------------------------------- /src/alien_sprite.rs: -------------------------------------------------------------------------------- 1 | use mengine::engine::{Resource, Sprite, SpriteExt, BA_DIE, SA_ADDSPRITE, SPRITEACTION}; 2 | use mengine::*; 3 | use std::cell::RefCell; 4 | use std::rc::Rc; 5 | 6 | //外星人精灵扩展 7 | 8 | pub struct AlienSprite { 9 | pub img_bmissile: Image, 10 | pub img_jmissile: Image, 11 | pub img_tmissile: Image, 12 | pub difficulty: Rc>, 13 | } 14 | 15 | impl SpriteExt for AlienSprite { 16 | fn update(&self, sprite_action: SPRITEACTION) -> SPRITEACTION { 17 | //检查精灵是否要发射子弹 18 | match rand_int(0, *self.difficulty.borrow() / 2) { 19 | 0 => sprite_action | SA_ADDSPRITE, 20 | _ => sprite_action, 21 | } 22 | // sprite_action 23 | } 24 | 25 | fn add_sprite(&self, sprite: &Sprite) -> Sprite { 26 | //创建一个新的子弹精灵 27 | let bounds = Rect::new(0.0, 0.0, 640.0, 410.0); 28 | let pos = sprite.position(); 29 | let mut velocity = Point { x: 0.0, y: 0.0 }; 30 | 31 | let missile_bitmap = match sprite.name() { 32 | "blobbo" => { 33 | velocity.y = 7.0; 34 | self.img_bmissile.clone() 35 | } 36 | "jelly" => { 37 | velocity.y = 5.0; 38 | self.img_jmissile.clone() 39 | } 40 | _ => { 41 | velocity.y = 3.0; 42 | self.img_tmissile.clone() 43 | } 44 | }; 45 | let mut sub_sprite = Sprite::with_bounds_action( 46 | String::from("amissile"), 47 | Resource::Static(missile_bitmap), 48 | bounds, 49 | BA_DIE, 50 | ); 51 | sub_sprite.set_velocity(velocity.x, velocity.y); 52 | sub_sprite.set_position(pos.left + sprite.width() / 2.0, pos.bottom); 53 | sub_sprite 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /src/background.rs: -------------------------------------------------------------------------------- 1 | use super::rand_int; 2 | use mengine::*; 3 | use std::cmp; 4 | 5 | //星星背景 6 | 7 | pub struct StarryBackground { 8 | width: f64, 9 | height: f64, 10 | num_stars: usize, 11 | twink_delay: i32, 12 | stars: [Point; 100], 13 | star_colors: [(u8, u8, u8); 100], 14 | } 15 | 16 | impl StarryBackground { 17 | pub fn new(width: f64, height: f64, num_stars: usize, twink_delay: i32) -> StarryBackground { 18 | let num_stars = cmp::min(num_stars, 100); 19 | //创建星星 20 | let mut stars = [Point { x: 0., y: 0. }; 100]; 21 | let mut star_colors = [(255, 255, 255); 100]; 22 | for i in 0..num_stars { 23 | stars[i].x = rand_int(0, width as i32) as f64; 24 | stars[i].y = rand_int(0, height as i32) as f64; 25 | star_colors[i] = (128, 128, 128); 26 | } 27 | StarryBackground { 28 | width, 29 | height, 30 | num_stars, 31 | twink_delay, 32 | stars, 33 | star_colors, 34 | } 35 | } 36 | 37 | pub fn default(width: f64, height: f64) -> StarryBackground { 38 | StarryBackground::new(width, height, 100, 50) 39 | } 40 | 41 | pub fn update(&mut self) { 42 | //随机改变星星的颜色以使其闪烁 43 | for i in 0..self.num_stars { 44 | if rand_int(0, self.twink_delay) == 0 { 45 | let color = rand_int(0, 256) as u8; 46 | self.star_colors[i] = (color, color, color); 47 | } 48 | } 49 | } 50 | 51 | pub fn draw(&self, g: &mut Graphics) { 52 | //绘制纯黑色背景 53 | g.fill_rect(&[0, 0, 0, 255], 0., 0., self.width, self.height); 54 | //绘制星星 55 | for i in 0..self.num_stars { 56 | g.fill_rect( 57 | &[ 58 | self.star_colors[i].0, 59 | self.star_colors[i].1, 60 | self.star_colors[i].2, 61 | 255, 62 | ], 63 | self.stars[i].x, 64 | self.stars[i].y, 65 | 1., 66 | 1., 67 | ); 68 | } 69 | } 70 | } 71 | -------------------------------------------------------------------------------- /src/main.rs: -------------------------------------------------------------------------------- 1 | use mengine::*; 2 | mod ai; 3 | mod alien_sprite; 4 | mod background; 5 | use background::StarryBackground; 6 | use engine::GameEngine; 7 | use engine::{Resource, Sprite, BA_BOUNCE, BA_DIE, BA_WRAP}; 8 | use std::cell::RefCell; 9 | use std::cmp; 10 | use std::collections::HashMap; 11 | use std::rc::Rc; 12 | use ai::{Turn, CarBrain}; 13 | use math2d::Vector2f; 14 | 15 | pub const ASSETS_SPLASH_BITMAP: &str = "Splash.png"; 16 | pub const ASSETS_DESERT_BITMAP: &str = "Desert.png"; 17 | pub const ASSETS_CAR_BITMAP: &str = "Car.png"; 18 | pub const ASSETS_SM_CAR_BITMAP: &str = "SmCar.png"; 19 | pub const ASSETS_MISSILE_BITMAP: &str = "Missile.png"; 20 | pub const ASSETS_BLOBBO_BITMAP: &str = "Blobbo.png"; 21 | pub const ASSETS_BMISSILE_BITMAP: &str = "BMissile.png"; 22 | pub const ASSETS_JELLY_BITMAP: &str = "Jelly.png"; 23 | pub const ASSETS_JMISSILE_BITMAP: &str = "JMissile.png"; 24 | pub const ASSETS_TIMMY_BITMAP: &str = "Timmy.png"; 25 | pub const ASSETS_TMISSILE_BITMAP: &str = "TMissile.png"; 26 | pub const ASSETS_SM_EXPLOSION_BITMAP: &str = "SmExplosion.png"; 27 | pub const ASSETS_LG_EXPLOSION_BITMAP: &str = "LgExplosion.png"; 28 | pub const ASSETS_GAME_OVER_BITMAP: &str = "GameOver.png"; 29 | 30 | pub const ASSETS_BMISSILE_SOUND: &str = "BMissile.ogg"; 31 | pub const ASSETS_GAMEOVER_SOUND: &str = "GameOver.ogg"; 32 | pub const ASSETS_JMISSILE_SOUND: &str = "JMissile.ogg"; 33 | pub const ASSETS_LG_EXPLODE_SOUND: &str = "LgExplode.ogg"; 34 | pub const ASSETS_SM_EXPLODE_SOUND: &str = "SmExplode.ogg"; 35 | pub const ASSETS_MISSILE_SOUND: &str = "Missile.ogg"; 36 | pub const PATH_BACKGROUND_MUSIC: &str = "Music.mp3"; 37 | 38 | const RESOURCES: &'static [(&'static str, AssetsType); 20] = &[ 39 | (ASSETS_SPLASH_BITMAP, AssetsType::Image), 40 | (ASSETS_DESERT_BITMAP, AssetsType::Image), 41 | (ASSETS_CAR_BITMAP, AssetsType::Image), 42 | (ASSETS_SM_CAR_BITMAP, AssetsType::Image), 43 | (ASSETS_MISSILE_BITMAP, AssetsType::Image), 44 | (ASSETS_BLOBBO_BITMAP, AssetsType::Image), 45 | (ASSETS_BMISSILE_BITMAP, AssetsType::Image), 46 | (ASSETS_JELLY_BITMAP, AssetsType::Image), 47 | (ASSETS_JMISSILE_BITMAP, AssetsType::Image), 48 | (ASSETS_TIMMY_BITMAP, AssetsType::Image), 49 | (ASSETS_TMISSILE_BITMAP, AssetsType::Image), 50 | (ASSETS_SM_EXPLOSION_BITMAP, AssetsType::Image), 51 | (ASSETS_LG_EXPLOSION_BITMAP, AssetsType::Image), 52 | (ASSETS_GAME_OVER_BITMAP, AssetsType::Image), 53 | (ASSETS_BMISSILE_SOUND, AssetsType::Sound), 54 | (ASSETS_GAMEOVER_SOUND, AssetsType::Sound), 55 | (ASSETS_JMISSILE_SOUND, AssetsType::Sound), 56 | (ASSETS_LG_EXPLODE_SOUND, AssetsType::Sound), 57 | (ASSETS_SM_EXPLODE_SOUND, AssetsType::Sound), 58 | (ASSETS_MISSILE_SOUND, AssetsType::Sound), 59 | ]; 60 | 61 | ///游戏资源 62 | pub struct Stage { 63 | img_splash: Image, 64 | img_desert: Image, 65 | img_car: Image, 66 | img_sm_car: Image, 67 | img_missile: Image, 68 | img_blobbo: Image, 69 | img_bmissile: Image, 70 | img_jelly: Image, 71 | img_jmissile: Image, 72 | img_timmy: Image, 73 | img_tmissile: Image, 74 | img_sm_explosion: Image, 75 | img_lg_explosion: Image, 76 | img_game_over: Image, 77 | 78 | _sound_bmissile: Sound, 79 | sound_gameover: Sound, 80 | _sound_jmissile: Sound, 81 | sound_lg_explode: Sound, 82 | sound_sm_explode: Sound, 83 | sound_missile: Sound, 84 | } 85 | 86 | //触摸延迟 87 | pub const DRIVE_THRESHOLD: i32 = 3; 88 | pub const CLIENT_WIDTH: f64 = 600.0; 89 | pub const CLIENT_HEIGHT: f64 = 450.0; 90 | 91 | //SpaceOut游戏主结构体 92 | pub struct SpaceOut { 93 | background: StarryBackground, 94 | fire_input_delay: i32, 95 | _last_touch: Option, 96 | _drive_left: i32, 97 | _drive_right: i32, 98 | sprites: Vec, 99 | car_sprite_id: f64, 100 | num_lives: i32, 101 | score: i32, 102 | demo: bool, 103 | difficulty: Rc>, 104 | resources: HashMap, 105 | stage: Option, 106 | game_over: bool, 107 | game_over_delay: i32, 108 | brain: CarBrain, 109 | fast_mode: bool, 110 | next_print_time: f64, 111 | car_missile_count: i32,//最多10发导弹 112 | } 113 | 114 | impl SpaceOut { 115 | //新游戏 116 | fn new_game(&mut self) { 117 | //清除所有精灵 118 | self.clean_up_sprites(); 119 | //初始化游戏变量 120 | self.fire_input_delay = 0; 121 | self.score = 0; 122 | self.num_lives = 3; 123 | self.difficulty = Rc::new(RefCell::new(80)); 124 | self.game_over = false; 125 | let stage = self.stage.as_mut().unwrap(); 126 | 127 | //创建汽车 128 | let mut car_sprite = Sprite::with_bounds_action( 129 | String::from("car"), 130 | Resource::Static(stage.img_car.clone()), 131 | Rect::new(40.0, 0.0, CLIENT_WIDTH-40.0, CLIENT_HEIGHT), 132 | BA_WRAP, 133 | ); 134 | self.car_sprite_id = car_sprite.id(); 135 | car_sprite.set_position(300.0, 405.0); 136 | 137 | self.add_sprite(car_sprite); 138 | 139 | if self.demo { 140 | //添加一些外星人 141 | for _ in 0..6 { 142 | self.add_alien(); 143 | } 144 | } else { 145 | play_music(PATH_BACKGROUND_MUSIC, true); 146 | } 147 | } 148 | 149 | //添加外星人 150 | fn add_alien(&mut self) { 151 | //创建一个随机的外星人精灵 152 | let bounds = Rect::new(0.0, 0.0, CLIENT_WIDTH, 410.0); 153 | let ext = { 154 | let stage = self.stage.as_ref().unwrap(); 155 | alien_sprite::AlienSprite { 156 | difficulty: self.difficulty.clone(), 157 | img_jmissile: stage.img_jmissile.clone(), 158 | img_tmissile: stage.img_tmissile.clone(), 159 | img_bmissile: stage.img_bmissile.clone(), 160 | } 161 | }; 162 | self.add_sprite(match 2 { 163 | 1 => { 164 | // Blobbo 165 | let mut frames = vec![]; 166 | for y in (0..272).step_by(34) { 167 | frames.push([0., y as f64, 32., 34.]); 168 | } 169 | let mut anim = Animation::active( 170 | self.stage.as_ref().unwrap().img_blobbo.clone(), 171 | frames, 172 | 25.0, 173 | ); 174 | anim.set_repeat(true); 175 | 176 | let mut sprite = Sprite::with_bounds_action( 177 | String::from("blobbo"), 178 | Resource::Animation(anim), 179 | bounds, 180 | BA_BOUNCE, 181 | ); 182 | sprite.set_position( 183 | match rand_int(0, 2) { 184 | 0 => 0.0, 185 | _ => 600.0, 186 | }, 187 | rand_int(0, 370) as f64, 188 | ); 189 | sprite.ext(ext); 190 | sprite.set_velocity(rand_int(0, 7) as f64 - 2.0, rand_int(0, 7) as f64 - 2.0); 191 | sprite 192 | } 193 | 2 => { 194 | // Jelly 195 | let mut frames = vec![]; 196 | for y in (0..264).step_by(33) { 197 | frames.push([0., y as f64, 33., 33.]); 198 | } 199 | let mut anim = 200 | Animation::active(self.stage.as_ref().unwrap().img_jelly.clone(), frames, 25.0); 201 | anim.set_repeat(true); 202 | 203 | let mut sprite = Sprite::with_bounds_action( 204 | String::from("jelly"), 205 | Resource::Animation(anim), 206 | bounds, 207 | BA_BOUNCE, 208 | ); 209 | sprite.set_position( 210 | rand_int(0, CLIENT_WIDTH as i32) as f64, 211 | rand_int(0, 370) as f64, 212 | ); 213 | sprite.set_velocity(rand_int(0, 5) as f64 - 2., rand_int(0, 5) as f64 + 3.); 214 | sprite.ext(ext); 215 | sprite 216 | } 217 | _ => { 218 | // Timmy 219 | let mut frames = vec![]; 220 | for y in (0..136).step_by(17) { 221 | frames.push([0., y as f64, 33., 17.]); 222 | } 223 | 224 | let mut anim = 225 | Animation::active(self.stage.as_ref().unwrap().img_timmy.clone(), frames, 25.0); 226 | anim.set_repeat(true); 227 | 228 | let mut sprite = Sprite::with_bounds_action( 229 | String::from("timmy"), 230 | Resource::Animation(anim), 231 | bounds, 232 | BA_WRAP, 233 | ); 234 | sprite.set_position( 235 | rand_int(0, CLIENT_WIDTH as i32) as f64, 236 | rand_int(0, 370) as f64, 237 | ); 238 | sprite.set_velocity(rand_int(0, 7) as f64 + 3., 0.); 239 | sprite.ext(ext); 240 | sprite 241 | } 242 | }); 243 | } 244 | } 245 | 246 | impl State for SpaceOut { 247 | fn new(window: &mut Window) -> Self { 248 | window.load_assets(RESOURCES.to_vec()); 249 | SpaceOut { 250 | background: StarryBackground::default(CLIENT_WIDTH, CLIENT_HEIGHT), 251 | fire_input_delay: 0, 252 | _last_touch: None, 253 | _drive_left: 0, 254 | _drive_right: 0, 255 | sprites: vec![], 256 | car_sprite_id: 0.0, 257 | num_lives: 3, 258 | score: 0, 259 | demo: true, 260 | resources: HashMap::new(), 261 | stage: None, 262 | difficulty: Rc::new(RefCell::new(80)), 263 | game_over: false, 264 | game_over_delay: 0, 265 | brain: CarBrain::new(), 266 | fast_mode: false, 267 | next_print_time: current_timestamp()+2000.0, 268 | car_missile_count: 0, 269 | } 270 | } 271 | 272 | fn on_assets_load( 273 | &mut self, 274 | path: &str, 275 | _: AssetsType, 276 | assets: std::io::Result, 277 | _window: &mut Window, 278 | ) { 279 | match assets { 280 | Ok(assets) => { 281 | self.resources.insert(path.to_string(), assets); 282 | 283 | if self.resources.len() == RESOURCES.len() { 284 | self.stage = Some(Stage { 285 | img_splash: self 286 | .resources 287 | .get(ASSETS_SPLASH_BITMAP) 288 | .unwrap() 289 | .as_image() 290 | .unwrap(), 291 | img_desert: self 292 | .resources 293 | .get(ASSETS_DESERT_BITMAP) 294 | .unwrap() 295 | .as_image() 296 | .unwrap(), 297 | img_car: self 298 | .resources 299 | .get(ASSETS_CAR_BITMAP) 300 | .unwrap() 301 | .as_image() 302 | .unwrap(), 303 | img_sm_car: self 304 | .resources 305 | .get(ASSETS_SM_CAR_BITMAP) 306 | .unwrap() 307 | .as_image() 308 | .unwrap(), 309 | img_missile: self 310 | .resources 311 | .get(ASSETS_MISSILE_BITMAP) 312 | .unwrap() 313 | .as_image() 314 | .unwrap(), 315 | img_blobbo: self 316 | .resources 317 | .get(ASSETS_BLOBBO_BITMAP) 318 | .unwrap() 319 | .as_image() 320 | .unwrap(), 321 | img_bmissile: self 322 | .resources 323 | .get(ASSETS_BMISSILE_BITMAP) 324 | .unwrap() 325 | .as_image() 326 | .unwrap(), 327 | img_jelly: self 328 | .resources 329 | .get(ASSETS_JELLY_BITMAP) 330 | .unwrap() 331 | .as_image() 332 | .unwrap(), 333 | img_jmissile: self 334 | .resources 335 | .get(ASSETS_JMISSILE_BITMAP) 336 | .unwrap() 337 | .as_image() 338 | .unwrap(), 339 | img_timmy: self 340 | .resources 341 | .get(ASSETS_TIMMY_BITMAP) 342 | .unwrap() 343 | .as_image() 344 | .unwrap(), 345 | img_tmissile: self 346 | .resources 347 | .get(ASSETS_TMISSILE_BITMAP) 348 | .unwrap() 349 | .as_image() 350 | .unwrap(), 351 | img_sm_explosion: self 352 | .resources 353 | .get(ASSETS_SM_EXPLOSION_BITMAP) 354 | .unwrap() 355 | .as_image() 356 | .unwrap(), 357 | img_lg_explosion: self 358 | .resources 359 | .get(ASSETS_LG_EXPLOSION_BITMAP) 360 | .unwrap() 361 | .as_image() 362 | .unwrap(), 363 | img_game_over: self 364 | .resources 365 | .get(ASSETS_GAME_OVER_BITMAP) 366 | .unwrap() 367 | .as_image() 368 | .unwrap(), 369 | 370 | _sound_bmissile: self 371 | .resources 372 | .get(ASSETS_BMISSILE_SOUND) 373 | .unwrap() 374 | .as_sound() 375 | .unwrap(), 376 | sound_gameover: self 377 | .resources 378 | .get(ASSETS_GAMEOVER_SOUND) 379 | .unwrap() 380 | .as_sound() 381 | .unwrap(), 382 | _sound_jmissile: self 383 | .resources 384 | .get(ASSETS_JMISSILE_SOUND) 385 | .unwrap() 386 | .as_sound() 387 | .unwrap(), 388 | sound_lg_explode: self 389 | .resources 390 | .get(ASSETS_LG_EXPLODE_SOUND) 391 | .unwrap() 392 | .as_sound() 393 | .unwrap(), 394 | sound_sm_explode: self 395 | .resources 396 | .get(ASSETS_SM_EXPLODE_SOUND) 397 | .unwrap() 398 | .as_sound() 399 | .unwrap(), 400 | sound_missile: self 401 | .resources 402 | .get(ASSETS_MISSILE_SOUND) 403 | .unwrap() 404 | .as_sound() 405 | .unwrap(), 406 | }); 407 | 408 | self.new_game(); 409 | } 410 | } 411 | Err(err) => alert( 412 | "温馨提示", 413 | &format!("资源文件加载失败:{:?} {:?}", path, err).as_str(), 414 | ), 415 | } 416 | } 417 | 418 | fn event(&mut self, event: Event, window: &mut Window) { 419 | if self.stage.is_none() { 420 | return; 421 | } 422 | match event { 423 | Event::KeyUp(key) => { 424 | if key.to_lowercase() == "enter" { 425 | //如果游戏没有开始,启动游戏 426 | // if self.demo || self.game_over { 427 | // self.demo = false; 428 | // self.new_game(); 429 | // return; 430 | // } 431 | } 432 | if key.to_lowercase() == "space"{ 433 | if self.demo{ 434 | self.fast_mode = !self.fast_mode; 435 | if self.fast_mode{ 436 | self.brain.use_best(false); 437 | window.set_update_rate(90000); 438 | }else{ 439 | //选择最好的网络进行控制 440 | self.brain.use_best(true); 441 | window.set_update_rate(30); 442 | } 443 | } 444 | } 445 | } 446 | Event::Click(_x, _y) => { 447 | return; 448 | //如果游戏没有开始,启动游戏 449 | if self.demo || self.game_over { 450 | if self.game_over_delay == 0 { 451 | self.demo = false; 452 | self.new_game(); 453 | } 454 | return; 455 | } 456 | 457 | let car_left_pos = self.get_sprite(self.car_sprite_id).unwrap().position().left; 458 | //创建一个新的导弹精灵 459 | let mut sprite = Sprite::with_bounds_action( 460 | String::from("missile"), 461 | Resource::Static(self.stage.as_ref().unwrap().img_missile.clone()), 462 | Rect::new(0.0, 0.0, CLIENT_WIDTH, CLIENT_HEIGHT), 463 | BA_DIE, 464 | ); 465 | sprite.set_position(car_left_pos + 15.0, 400.0); 466 | sprite.set_velocity(0.0, -7.0); 467 | self.add_sprite(sprite); 468 | 469 | //播放导弹发射声音 470 | mengine::play_sound(&self.stage.as_ref().unwrap().sound_missile); 471 | } 472 | Event::MouseMove(x, _y) => { 473 | if self.demo { 474 | return; 475 | } 476 | //直接拖动控制 477 | let car_sprite = self.get_sprite(self.car_sprite_id).unwrap(); 478 | if x >= 0.0 && x + car_sprite.width() <= CLIENT_WIDTH { 479 | car_sprite.set_position(x, car_sprite.position().top); 480 | } 481 | 482 | //移动汽车 483 | // match self.last_touch{ 484 | // Some(touch_point) => { 485 | // //判断滑动方向 486 | // if touch_point.x > x{ self.drive_left = cmp::min(self.drive_left+1, DRIVE_THRESHOLD+1); }//向左 487 | // if touch_point.x < x{ self.drive_right = cmp::min(self.drive_right+1, DRIVE_THRESHOLD+1); }//向右 488 | 489 | // //判断是否执行 490 | // let satisfied = self.drive_left>DRIVE_THRESHOLD || self.drive_right>DRIVE_THRESHOLD; 491 | 492 | // let mut car_sprite = self.engine.get_sprite(self.car_sprite_id).unwrap(); 493 | // let (vx, vy) = (car_sprite.velocity().x, car_sprite.velocity().y); 494 | // if self.drive_left > DRIVE_THRESHOLD { 495 | // // Move Left 496 | // car_sprite.set_velocity(cmp::max(vx-3, -6), vy); 497 | // }else if self.drive_right > DRIVE_THRESHOLD { 498 | // // Move Right 499 | // car_sprite.set_velocity(cmp::min(vx+3, 6), vy); 500 | // } 501 | // if satisfied { 502 | // self.drive_left = 0; 503 | // self.drive_right = 0; 504 | // } 505 | // } 506 | // _ => self.last_touch = Some(Point{x:x, y:y}) 507 | // } 508 | } 509 | _ => (), 510 | } 511 | } 512 | 513 | fn draw(&mut self, g: &mut Graphics, _window: &mut Window) { 514 | if self.stage.is_none() { 515 | let progress_bar_height = 30.0; 516 | let progress_bar_width = CLIENT_WIDTH * 0.8; 517 | let progress_bar_x = (CLIENT_WIDTH - progress_bar_width) / 2.0; 518 | let progress_bar_y = CLIENT_HEIGHT / 2.0; 519 | //进度条背景 520 | g.fill_rect( 521 | &[127, 127, 127, 255], 522 | progress_bar_x, 523 | progress_bar_y, 524 | progress_bar_width, 525 | progress_bar_height, 526 | ); 527 | //进度条前景 528 | let progress = self.resources.len() as f64 / RESOURCES.len() as f64; 529 | g.fill_rect( 530 | &[10, 10, 128, 255], 531 | progress_bar_x, 532 | progress_bar_y, 533 | progress * progress_bar_width, 534 | progress_bar_height, 535 | ); 536 | g.draw_text( 537 | &format!("Loading {}%", (progress * 100.0) as i32), 538 | progress_bar_x + 20.0, 539 | progress_bar_y + 2.0, 540 | &[255, 255, 255, 255], 541 | 16, 542 | ); 543 | return; 544 | } 545 | 546 | //绘制背景 547 | self.background.draw(g); 548 | //绘制沙漠 549 | { 550 | let stage = self.stage.as_ref().unwrap(); 551 | g.draw_image( 552 | None, 553 | &stage.img_desert, 554 | None, 555 | Some([ 556 | 0.0, 557 | 371.0, 558 | stage.img_desert.width(), 559 | stage.img_desert.height(), 560 | ]), 561 | ); 562 | } 563 | 564 | //绘制精灵 565 | self.draw_sprites(g); 566 | 567 | let stage = self.stage.as_ref().unwrap(); 568 | 569 | if self.demo { 570 | //绘制闪屏图片 571 | g.draw_image( 572 | None, 573 | &stage.img_splash, 574 | None, 575 | Some([ 576 | 142.0, 577 | 30.0, 578 | stage.img_splash.width(), 579 | stage.img_splash.height(), 580 | ]), 581 | ); 582 | 583 | //绘制控制说明 584 | g.draw_text( 585 | "点击屏幕->发射导弹", 586 | 220.0, 587 | 300.0, 588 | &[255, 255, 255, 255], 589 | 13, 590 | ); 591 | g.draw_text("左滑->倒车", 260.0, 330.0, &[255, 255, 255, 255], 13); 592 | g.draw_text("右滑->前进", 260.0, 360.0, &[255, 255, 255, 255], 13); 593 | 594 | //显示AI信息 595 | g.draw_text(&format!("Generation:{}, Brain:{} 最高分:{}", self.brain.current_generation(), self.brain.current_brain(), self.brain.max_score()), 5.0, 5.0, &[255, 255, 255, 255], 13); 596 | } else { 597 | //绘制得分 598 | g.draw_text( 599 | &format!("得分:{}", self.score), 600 | 260.0, 601 | 90.0, 602 | &[255, 255, 255, 255], 603 | 13, 604 | ); 605 | 606 | //绘制剩余生命 607 | for i in 0..self.num_lives { 608 | g.draw_image( 609 | None, 610 | &stage.img_sm_car, 611 | None, 612 | Some([ 613 | 520. + 25. * i as f64, 614 | 10.0, 615 | stage.img_sm_car.width(), 616 | stage.img_sm_car.height(), 617 | ]), 618 | ); 619 | } 620 | if self.game_over { 621 | g.draw_image( 622 | None, 623 | &stage.img_game_over, 624 | None, 625 | Some([ 626 | 170., 627 | 100.0, 628 | stage.img_game_over.width(), 629 | stage.img_game_over.height(), 630 | ]), 631 | ); 632 | } 633 | } 634 | } 635 | 636 | fn update(&mut self, _window: &mut Window) { 637 | if self.stage.is_none() { 638 | return; 639 | } 640 | if !self.game_over { 641 | if !self.demo { 642 | // 随机添加外星人 643 | if rand_int(0, *self.difficulty.borrow()) == 0 { 644 | self.add_alien(); 645 | } 646 | } 647 | //更新背景图 648 | self.background.update(); 649 | 650 | //更新精灵 651 | self.update_sprites(); 652 | 653 | //更新AI 654 | 655 | //计算距离最近的外星人子弹 656 | let mut closest_alien_so_far = 99999.0; 657 | let mut closest_missile_so_far = 99999.0; 658 | let mut colosest_alien_pos = (0.0, 0.0); 659 | let mut colosest_missile_pos = (0.0, 0.0); 660 | let rect = *self.get_sprite(self.car_sprite_id).unwrap().position(); 661 | if current_timestamp()>self.next_print_time{ 662 | self.next_print_time = current_timestamp()+2000.0; 663 | println!("汽车位置={:?}", rect.left); 664 | } 665 | let car_pos = Vector2f::new((rect.left+(rect.right-rect.left)/2.0) as f32, (rect.top+(rect.bottom-rect.top)/2.0) as f32); 666 | for sprite in &self.sprites{ 667 | if sprite.name() == "blobbo" 668 | || sprite.name() == "jelly" 669 | || sprite.name() == "timmy"{ 670 | let rect = sprite.position(); 671 | let (center_x, center_y) = ((rect.left+(rect.right-rect.left)/2.0) as f32, (rect.top+(rect.bottom-rect.top)/2.0) as f32); 672 | let mpos = Vector2f::new(center_x, center_y); 673 | let len_to_object = (mpos-car_pos).len(); 674 | if len_to_object < closest_alien_so_far { 675 | closest_alien_so_far = len_to_object; 676 | colosest_alien_pos = (mpos.x, mpos.y); 677 | } 678 | } 679 | if sprite.name() == "amissile"{ 680 | let rect = sprite.position(); 681 | let (center_x, center_y) = ((rect.left+(rect.right-rect.left)/2.0) as f32, (rect.top+(rect.bottom-rect.top)/2.0) as f32); 682 | let mpos = Vector2f::new(center_x, center_y); 683 | let len_to_object = (mpos-car_pos).len(); 684 | if len_to_object < closest_missile_so_far { 685 | closest_missile_so_far = len_to_object; 686 | colosest_missile_pos = (mpos.x, mpos.y); 687 | } 688 | } 689 | } 690 | let turn = self.brain.update( 691 | car_pos.x as f64/CLIENT_WIDTH, 692 | colosest_alien_pos.0 as f64/CLIENT_WIDTH, colosest_alien_pos.1 as f64/CLIENT_HEIGHT, 693 | colosest_missile_pos.0 as f64/CLIENT_WIDTH, colosest_missile_pos.1 as f64/CLIENT_HEIGHT, 694 | ); 695 | // println!("最近位置{:?} 最近距离:{:?} 汽车位置:{:?} 转向:{:?}", closest_missile_pos, closest_so_far, (car_pos.x, car_pos.y), turn); 696 | let (turn, fire) = turn; 697 | if fire && self.car_missile_count<10{ 698 | let car_left_pos = self.get_sprite(self.car_sprite_id).unwrap().position().left; 699 | //创建一个新的导弹精灵 700 | let mut sprite = Sprite::with_bounds_action( 701 | String::from("missile"), 702 | Resource::Static(self.stage.as_ref().unwrap().img_missile.clone()), 703 | Rect::new(0.0, 0.0, CLIENT_WIDTH, CLIENT_HEIGHT), 704 | BA_DIE, 705 | ); 706 | sprite.set_position(car_left_pos + 15.0, 400.0); 707 | sprite.set_velocity(0.0, -7.0); 708 | self.add_sprite(sprite); 709 | self.car_missile_count += 1; 710 | } 711 | let car = self.get_sprite(self.car_sprite_id).unwrap(); 712 | let (vx, vy) = (car.velocity().x as i32, car.velocity().y); 713 | match turn{ 714 | Turn::Left => { 715 | car.set_velocity(cmp::max(vx-2, -6) as f64, vy); 716 | // self.get_sprite(self.car_sprite_id).unwrap().set_velocity(-6.0, 0.0); 717 | }, 718 | Turn::Right => { 719 | car.set_velocity(cmp::min(vx+2, 6) as f64, vy); 720 | // self.get_sprite(self.car_sprite_id).unwrap().set_velocity(6.0, 0.0); 721 | } 722 | } 723 | 724 | //如果距离小于50,汽车死亡,重新开始demo 725 | // if closest_alien_so_far<50.0 || closest_missile_so_far<50.0{ 726 | // // println!("汽车死亡!"); 727 | // //通知AI汽车死亡 728 | // self.brain.car_dying(); 729 | // // for s in &mut self.sprites{ 730 | // // if s.name() != "car"{ 731 | // // s.kill(); 732 | // // } 733 | // // } 734 | // self.sprites.retain(|s|{ 735 | // s.name() == "car" 736 | // }); 737 | // for _ in 0..6 { 738 | // self.add_alien(); 739 | // } 740 | // } 741 | 742 | } else { 743 | self.game_over_delay -= 1; 744 | if self.game_over_delay == 0 { 745 | //停止播放背景音乐,转换到演示模式 746 | stop_music(); 747 | self.demo = true; 748 | self.new_game(); 749 | } 750 | } 751 | } 752 | } 753 | 754 | //游戏引擎回调函数 755 | impl GameEngine for SpaceOut { 756 | fn sprites_mut(&mut self) -> &mut Vec { 757 | &mut self.sprites 758 | } 759 | fn sprites(&mut self) -> &Vec { 760 | &self.sprites 761 | } 762 | //精灵死亡处理 763 | fn sprite_dying(&mut self, sprite_dying_id: usize) { 764 | //外星人死亡 添加一个新的外星人 765 | 766 | if self.sprites[sprite_dying_id].name() == "blobbo" 767 | || self.sprites[sprite_dying_id].name() == "jelly" 768 | || self.sprites[sprite_dying_id].name() == "timmy"{ 769 | self.add_alien(); 770 | } 771 | let stage = self.stage.as_ref().unwrap(); 772 | 773 | //检查是否子弹精灵死亡 774 | if self.sprites[sprite_dying_id].name() == "missile" 775 | || self.sprites[sprite_dying_id].name() == "amissile" 776 | { 777 | 778 | if self.demo && self.sprites[sprite_dying_id].name() == "missile"{ 779 | self.car_missile_count -= 1; 780 | } 781 | 782 | //播放小的爆炸声音 783 | if !self.demo { 784 | mengine::play_sound(&stage.sound_sm_explode); 785 | } 786 | //在子弹位置创建一个小的爆炸精灵 787 | let mut frames = vec![]; 788 | for y in (0..136).step_by(17) { 789 | frames.push([0., y as f64, 17., 17.]); 790 | } 791 | let anim = Animation::active(stage.img_sm_explosion.clone(), frames, 25.0); 792 | 793 | let mut sprite = Sprite::from_bitmap( 794 | String::from("sm_explosion"), 795 | Resource::Animation(anim), 796 | Rect::new(0.0, 0.0, CLIENT_WIDTH, CLIENT_HEIGHT), 797 | ); 798 | { 799 | let dpos = self.sprites[sprite_dying_id].position(); 800 | sprite.set_position(dpos.left, dpos.top); 801 | } 802 | self.add_sprite(sprite); 803 | } 804 | } 805 | 806 | //碰撞检测 807 | fn sprite_collision(&mut self, sprite_hitter_id: usize, sprite_hittee_id: usize) -> bool { 808 | //检查是否玩家的子弹和外星人相撞 809 | let hitter = self.sprites[sprite_hitter_id].name().to_string(); 810 | let hittee = self.sprites[sprite_hittee_id].name().to_string(); 811 | if hitter == "missile" && (hittee == "blobbo" || hittee == "jelly" || hittee == "timmy") 812 | || hittee == "missile" && (hitter == "blobbo" || hitter == "jelly" || hitter == "timmy") 813 | { 814 | //播放小的爆炸声音 815 | mengine::play_sound(&self.stage.as_ref().unwrap().sound_sm_explode); 816 | //杀死子弹和外星人 817 | self.sprites[sprite_hitter_id].kill(); 818 | self.sprites[sprite_hittee_id].kill(); 819 | 820 | //在外星人位置创建一个大的爆炸精灵 821 | let pos: &Rect = if hitter == "missile" { 822 | self.sprites[sprite_hittee_id].position() 823 | } else { 824 | self.sprites[sprite_hitter_id].position() 825 | }; 826 | 827 | let mut frames = vec![]; 828 | for y in (0..272).step_by(34) { 829 | frames.push([0., y as f64, 33., 34.]); 830 | } 831 | let anim = Animation::active( 832 | self.stage.as_ref().unwrap().img_lg_explosion.clone(), 833 | frames, 834 | 25.0, 835 | ); 836 | 837 | let mut sprite = Sprite::from_bitmap( 838 | String::from("lg_explosion"), 839 | Resource::Animation(anim), 840 | Rect::new(0.0, 0.0, CLIENT_WIDTH, CLIENT_HEIGHT), 841 | ); 842 | sprite.set_position(pos.left, pos.top); 843 | self.add_sprite(sprite); 844 | 845 | //更新得分 846 | self.score += 25; 847 | // *self.difficulty.borrow_mut() = cmp::max(80 - (self.score / 20), 20); 848 | } 849 | //检查是否有外星人子弹撞到汽车 850 | if hitter == "car" && hittee == "amissile" || hittee == "car" && hitter == "amissile" { 851 | //播放大的爆炸声音 852 | mengine::play_sound(&self.stage.as_ref().unwrap().sound_lg_explode); 853 | //杀死子弹精灵 854 | if hitter == "car" { 855 | self.sprites[sprite_hittee_id].kill(); 856 | } else { 857 | self.sprites[sprite_hitter_id].kill(); 858 | } 859 | 860 | //在汽车位置创建一个大的爆炸精灵 861 | let pos: &Rect = if hitter == "car" { 862 | self.sprites[sprite_hitter_id].position() 863 | } else { 864 | self.sprites[sprite_hittee_id].position() 865 | }; 866 | 867 | let mut frames = vec![]; 868 | for y in (0..272).step_by(34) { 869 | frames.push([0., y as f64, 33., 34.]); 870 | } 871 | let anim = Animation::active( 872 | self.stage.as_ref().unwrap().img_lg_explosion.clone(), 873 | frames, 874 | 25.0, 875 | ); 876 | 877 | let mut sprite = Sprite::from_bitmap( 878 | String::from("lg_explosion"), 879 | Resource::Animation(anim), 880 | Rect::new(0.0, 0.0, CLIENT_WIDTH, CLIENT_HEIGHT), 881 | ); 882 | sprite.set_position(pos.left, pos.top); 883 | self.add_sprite(sprite); 884 | 885 | //移动汽车到起点 886 | self.get_sprite(self.car_sprite_id) 887 | .unwrap() 888 | .set_position(30.0, 405.0); 889 | 890 | if self.demo{ 891 | //通知AI汽车死亡 892 | self.brain.car_dying(self.score); 893 | return false; 894 | }else{ 895 | self.num_lives -= 1; 896 | 897 | //检查游戏是否结束 898 | if self.num_lives == 0 { 899 | //播放游戏结束声音 900 | mengine::play_sound(&self.stage.as_ref().unwrap().sound_gameover); 901 | self.game_over = true; 902 | self.game_over_delay = 150; 903 | } 904 | } 905 | } 906 | false 907 | } 908 | } 909 | 910 | fn main() { 911 | mengine::run::( 912 | "SpaceOut", 913 | CLIENT_WIDTH, 914 | CLIENT_HEIGHT, 915 | Settings { 916 | ups: 30, 917 | window_size: Some((300., 300.)), 918 | auto_scale: true, 919 | ..Default::default() 920 | }, 921 | ); 922 | } 923 | -------------------------------------------------------------------------------- /static/BMissile.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/planet0104/spaceout/92813ef1d6cfc54a21b91f36a90dbf6869114988/static/BMissile.ogg -------------------------------------------------------------------------------- /static/BMissile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/planet0104/spaceout/92813ef1d6cfc54a21b91f36a90dbf6869114988/static/BMissile.png -------------------------------------------------------------------------------- /static/Blobbo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/planet0104/spaceout/92813ef1d6cfc54a21b91f36a90dbf6869114988/static/Blobbo.png -------------------------------------------------------------------------------- /static/Car.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/planet0104/spaceout/92813ef1d6cfc54a21b91f36a90dbf6869114988/static/Car.png -------------------------------------------------------------------------------- /static/Desert.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/planet0104/spaceout/92813ef1d6cfc54a21b91f36a90dbf6869114988/static/Desert.png -------------------------------------------------------------------------------- /static/GameOver.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/planet0104/spaceout/92813ef1d6cfc54a21b91f36a90dbf6869114988/static/GameOver.ogg -------------------------------------------------------------------------------- /static/GameOver.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/planet0104/spaceout/92813ef1d6cfc54a21b91f36a90dbf6869114988/static/GameOver.png -------------------------------------------------------------------------------- /static/JMissile.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/planet0104/spaceout/92813ef1d6cfc54a21b91f36a90dbf6869114988/static/JMissile.ogg -------------------------------------------------------------------------------- /static/JMissile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/planet0104/spaceout/92813ef1d6cfc54a21b91f36a90dbf6869114988/static/JMissile.png -------------------------------------------------------------------------------- /static/Jelly.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/planet0104/spaceout/92813ef1d6cfc54a21b91f36a90dbf6869114988/static/Jelly.png -------------------------------------------------------------------------------- /static/LgExplode.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/planet0104/spaceout/92813ef1d6cfc54a21b91f36a90dbf6869114988/static/LgExplode.ogg -------------------------------------------------------------------------------- /static/LgExplosion.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/planet0104/spaceout/92813ef1d6cfc54a21b91f36a90dbf6869114988/static/LgExplosion.png -------------------------------------------------------------------------------- /static/Missile.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/planet0104/spaceout/92813ef1d6cfc54a21b91f36a90dbf6869114988/static/Missile.ogg -------------------------------------------------------------------------------- /static/Missile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/planet0104/spaceout/92813ef1d6cfc54a21b91f36a90dbf6869114988/static/Missile.png -------------------------------------------------------------------------------- /static/Music.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/planet0104/spaceout/92813ef1d6cfc54a21b91f36a90dbf6869114988/static/Music.mp3 -------------------------------------------------------------------------------- /static/SmCar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/planet0104/spaceout/92813ef1d6cfc54a21b91f36a90dbf6869114988/static/SmCar.png -------------------------------------------------------------------------------- /static/SmExplode.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/planet0104/spaceout/92813ef1d6cfc54a21b91f36a90dbf6869114988/static/SmExplode.ogg -------------------------------------------------------------------------------- /static/SmExplosion.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/planet0104/spaceout/92813ef1d6cfc54a21b91f36a90dbf6869114988/static/SmExplosion.png -------------------------------------------------------------------------------- /static/Splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/planet0104/spaceout/92813ef1d6cfc54a21b91f36a90dbf6869114988/static/Splash.png -------------------------------------------------------------------------------- /static/TMissile.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/planet0104/spaceout/92813ef1d6cfc54a21b91f36a90dbf6869114988/static/TMissile.ogg -------------------------------------------------------------------------------- /static/TMissile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/planet0104/spaceout/92813ef1d6cfc54a21b91f36a90dbf6869114988/static/TMissile.png -------------------------------------------------------------------------------- /static/Timmy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/planet0104/spaceout/92813ef1d6cfc54a21b91f36a90dbf6869114988/static/Timmy.png --------------------------------------------------------------------------------