From af61b57b1ceea6ee4cca9c4357450b75184cf684 Mon Sep 17 00:00:00 2001 From: Ben Morrison Date: Fri, 13 Sep 2019 15:17:28 -0400 Subject: [PATCH] some entities on screen, playing with movement --- Cargo.lock | 176 ++++++++++++++++++++++++++++++++ Cargo.toml | 2 + src/main.rs | 288 ++++++++++++++++++++++++---------------------------- 3 files changed, 308 insertions(+), 158 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index bab75ae..2262636 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5,6 +5,14 @@ name = "adler32" version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "ahash" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "const-random 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "andrew" version = "0.2.1" @@ -39,6 +47,11 @@ dependencies = [ "nodrop 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "atom" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "autocfg" version = "0.1.6" @@ -139,6 +152,24 @@ name = "color_quant" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "const-random" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "const-random-macro 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro-hack 0.5.9 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "const-random-macro" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "proc-macro-hack 0.5.9 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "core-foundation" version = "0.6.4" @@ -422,6 +453,29 @@ dependencies = [ "gl_generator 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "hashbrown" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "hashbrown" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "ahash 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", + "autocfg 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "hibitset" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "atom 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "rayon 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "image" version = "0.22.2" @@ -625,12 +679,19 @@ dependencies = [ "ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "mopa" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "mw-rl" version = "0.1.0" dependencies = [ "rand 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "rltk 0.2.5 (git+https://github.com/thebracket/rltk_rs)", + "specs 0.15.0 (registry+https://github.com/rust-lang/crates.io-index)", + "specs-derive 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -660,6 +721,11 @@ name = "nodrop" version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "nonzero_signed" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "num-derive" version = "0.2.5" @@ -814,6 +880,16 @@ name = "ppv-lite86" version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "proc-macro-hack" +version = "0.5.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "proc-macro2 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "proc-macro2" version = "0.4.30" @@ -822,6 +898,14 @@ dependencies = [ "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "proc-macro2" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "quote" version = "0.6.13" @@ -830,6 +914,14 @@ dependencies = [ "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "quote" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "proc-macro2 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "rand" version = "0.6.5" @@ -1099,6 +1191,23 @@ dependencies = [ "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "shred" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "arrayvec 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", + "hashbrown 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", + "mopa 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "rayon 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "smallvec 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "shrev" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "slab" version = "0.4.2" @@ -1124,6 +1233,34 @@ dependencies = [ "wayland-protocols 0.23.6 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "specs" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "crossbeam-queue 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "derivative 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "hashbrown 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", + "hibitset 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "mopa 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "nonzero_signed 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "rayon 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "shred 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)", + "shrev 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "tuple_utils 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "specs-derive" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 0.15.44 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "stb_truetype" version = "0.3.0" @@ -1142,6 +1279,16 @@ dependencies = [ "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "syn" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "proc-macro2 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "tiff" version = "0.3.1" @@ -1153,11 +1300,21 @@ dependencies = [ "num-traits 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "tuple_utils" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "unicode-xid" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "unicode-xid" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "void" version = "1.0.2" @@ -1329,10 +1486,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [metadata] "checksum adler32 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "7e522997b529f05601e05166c07ed17789691f562762c7f3b987263d2dedee5c" +"checksum ahash 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)" = "e96e12a0287c75063711e04484e9b140d4a59ec074d3fe5f0b1cc90e0e992665" "checksum andrew 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "9b7f09f89872c2b6b29e319377b1fbe91c6f5947df19a25596e121cf19a7b35e" "checksum android_glue 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "000444226fcff248f2bc4c7625be32c63caccfecc2723a2b9f78a7487a49c407" "checksum approx 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f0e60b75072ecd4168020818c0107f2857bb6c4e64252d8d3983f6263b40a5c3" "checksum arrayvec 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)" = "b8d73f9beda665eaa98ab9e4f7442bd4e7de6652587de55b2525e52e29c1b0ba" +"checksum atom 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "3c86699c3f02778ec07158376991c8f783dd1f2f95c579ffaf0738dc984b2fe2" "checksum autocfg 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "b671c8fb71b457dd4ae18c4ba1e59aa81793daacc361d82fcd410cef0d491875" "checksum bitflags 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3d155346769a6855b86399e9bc3814ab343cd3d62c7e985113d46a0ec3c281fd" "checksum block 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" @@ -1347,6 +1506,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f" "checksum cocoa 0.18.4 (registry+https://github.com/rust-lang/crates.io-index)" = "cf79daa4e11e5def06e55306aa3601b87de6b5149671529318da048f67cdd77b" "checksum color_quant 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0dbbb57365263e881e805dc77d94697c9118fd94d8da011240555aa7b23445bd" +"checksum const-random 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "7b641a8c9867e341f3295564203b1c250eb8ce6cb6126e007941f78c4d2ed7fe" +"checksum const-random-macro 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c750ec12b83377637110d5a57f5ae08e895b06c4b16e2bdbf1a94ef717428c59" "checksum core-foundation 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)" = "25b9e03f145fd4f2bf705e07b900cd41fc636598fe5dc452fd0db1441c3f496d" "checksum core-foundation-sys 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e7ca8a5221364ef15ce201e8ed2f609fc312682a8f4e0e3d4aa5879764e0fa3b" "checksum core-graphics 0.17.3 (registry+https://github.com/rust-lang/crates.io-index)" = "56790968ab1c8a1202a102e6de05fc6e1ec87da99e4e93e9a7d13efbfc1e95a9" @@ -1379,6 +1540,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum glutin_gles2_sys 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "89996c30857ae1b4de4b5189abf1ea822a20a9fe9e1c93e5e7b862ff0bdd5cdf" "checksum glutin_glx_sys 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "1290a5ca5e46fcfa7f66f949cc9d9194b2cb6f2ed61892c8c2b82343631dba57" "checksum glutin_wgl_sys 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "f801bbc91efc22dd1c4818a47814fc72bf74d024510451b119381579bfa39021" +"checksum hashbrown 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e1de41fb8dba9714efd92241565cdff73f78508c95697dd56787d3cba27e2353" +"checksum hashbrown 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "2bcea5b597dd98e6d1f1ec171744cc5dee1a30d1c23c5b98e3cf9d4fbdf8a526" +"checksum hibitset 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "47e7292fd9f7fe89fa35c98048f2d0a69b79ed243604234d18f6f8a1aa6f408d" "checksum image 0.22.2 (registry+https://github.com/rust-lang/crates.io-index)" = "ee0665404aa0f2ad154021777b785878b0e5b1c1da030455abc3d9ed257c2c67" "checksum inflate 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)" = "1cdb29978cc5797bd8dcc8e5bf7de604891df2a8dc576973d71a281e916db2ff" "checksum iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "dbe6e417e7d0975db6512b90796e8ce223145ac4e33c377e4a42882a0e88bb08" @@ -1403,9 +1567,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)" = "83f51996a3ed004ef184e16818edc51fadffe8e7ca68be67f9dee67d84d0ff23" "checksum mio-extras 2.0.5 (registry+https://github.com/rust-lang/crates.io-index)" = "46e73a04c2fa6250b8d802134d56d554a9ec2922bf977777c805ea5def61ce40" "checksum miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8c1f2f3b1cf331de6896aabf6e9d55dca90356cc9960cca7eaaf408a355ae919" +"checksum mopa 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "a785740271256c230f57462d3b83e52f998433a7062fc18f96d5999474a9f915" "checksum net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)" = "42550d9fb7b6684a6d404d9fa7250c2eb2646df731d1c06afc06dcee9e1bcf88" "checksum nix 0.14.1 (registry+https://github.com/rust-lang/crates.io-index)" = "6c722bee1037d430d0f8e687bbdbf222f27cc6e4e68d5caf630857bb2b6dbdce" "checksum nodrop 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)" = "2f9667ddcc6cc8a43afc9b7917599d7216aa09c463919ea32c59ed6cac8bc945" +"checksum nonzero_signed 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "02783a0482333b0d3f5f5411b8fb60454a596696da041da0470ac9ef3e6e37d8" "checksum num-derive 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)" = "eafd0b45c5537c3ba526f79d3e75120036502bebacbb3f3220914067ce39dbf2" "checksum num-integer 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)" = "b85e541ef8255f6cf42bbfe4ef361305c6c135d10919ecc26126c4e5ae94bc09" "checksum num-iter 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)" = "76bd5272412d173d6bf9afdf98db8612bbabc9a7a830b7bfc9c188911716132e" @@ -1423,8 +1589,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum pkg-config 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)" = "72d5370d90f49f70bd033c3d75e87fc529fbfff9d6f7cccef07d6170079d91ea" "checksum png 0.15.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8422b27bb2c013dd97b9aef69e161ce262236f49aaf46a0489011c8ff0264602" "checksum ppv-lite86 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)" = "e3cbf9f658cdb5000fcf6f362b8ea2ba154b9f146a61c7a20d647034c6b6561b" +"checksum proc-macro-hack 0.5.9 (registry+https://github.com/rust-lang/crates.io-index)" = "e688f31d92ffd7c1ddc57a1b4e6d773c0f2a14ee437a4b0a4f5a69c80eb221c8" "checksum proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)" = "cf3d2011ab5c909338f7887f4fc896d35932e29146c12c8d01da6b22a80ba759" +"checksum proc-macro2 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "e98a83a9f9b331f54b924e68a66acb1bb35cb01fb0a23645139967abefb697e8" "checksum quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)" = "6ce23b6b870e8f94f81fb0a363d65d86675884b34a09043c81e5562f11c1f8e1" +"checksum quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "053a8c8bcc71fcce321828dc897a98ab9760bef03a4fc36693c231e5b3216cfe" "checksum rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)" = "6d71dacdc3c88c1fde3885a3be3fbab9f35724e6ce99467f7d9c5026132184ca" "checksum rand 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d47eab0e83d9693d40f825f86948aa16eff6750ead4bdffc4ab95b8b3a7f052c" "checksum rand_chacha 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "556d3a1ca6600bfcbab7c7c91ccb085ac7fbbcd70e008a98742e7847f4f7bcef" @@ -1455,13 +1624,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" "checksum semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" "checksum shared_library 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "5a9e7e0f2bfae24d8a5b5a66c5b257a83c7412304311512a0c054cd5e619da11" +"checksum shred 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)" = "d15d46c92f8c0aed110a132f3c68a8cdd390048f51fa547c89dc571ba1e01191" +"checksum shrev 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b5752e017e03af9d735b4b069f53b7a7fd90fefafa04d8bd0c25581b0bff437f" "checksum slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8" "checksum smallvec 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)" = "ab606a9c5e214920bb66c458cd7be8ef094f813f20fe77a54cc7dbfff220d4b7" "checksum smithay-client-toolkit 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)" = "93960e8975909fcb14cc755de93af2149d8b8f4eb368315537d40cfd0f324054" +"checksum specs 0.15.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b98b8b33ab3f3e3f352df6cf6830e6d8fc790cbd6a7ff349c14fc25cbd6b1d48" +"checksum specs-derive 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a63549fa0d4a6f76e99e6634c328f25d0c9fa8ad6f8498aef74f6c35c0b269e5" "checksum stb_truetype 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "824210d6fb52cbc3ad2545270ead6860c7311aa5450642b078da4515937b6f7a" "checksum syn 0.15.44 (registry+https://github.com/rust-lang/crates.io-index)" = "9ca4b3b69a77cbe1ffc9e198781b7acb0c7365a883670e8f1c1bc66fba79a5c5" +"checksum syn 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)" = "66850e97125af79138385e9b88339cbcd037e3f28ceab8c5ad98e64f0f1f80bf" "checksum tiff 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d7b7c2cfc4742bd8a32f2e614339dd8ce30dbcf676bb262bd63a2327bc5df57d" +"checksum tuple_utils 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "44834418e2c5b16f47bedf35c28e148db099187dd5feee6367fb2525863af4f1" "checksum unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc" +"checksum unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "826e7639553986605ec5979c7dd957c7895e93eabed50ab2ffa7f6128a75097c" "checksum void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" "checksum walkdir 2.2.9 (registry+https://github.com/rust-lang/crates.io-index)" = "9658c94fa8b940eab2250bd5a457f9c48b748420d71293b165c8cdbe2f55f71e" "checksum wasi 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b89c3ce4ce14bdc6fb6beaf9ec7928ca331de5df7e5ea278375642a2f478570d" diff --git a/Cargo.toml b/Cargo.toml index 50d0322..fabd679 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -12,6 +12,8 @@ license = "GPLv3" [dependencies] rand = "0.7" rltk = { git = "https://github.com/thebracket/rltk_rs" } +specs = "0.15" +specs-derive = "0.4" [profile.release] opt-level = 3 diff --git a/src/main.rs b/src/main.rs index 8528102..c2aef11 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,177 +1,149 @@ -use rand::Rng; -use rltk::{ - Algorithm2D, BaseMap, Console, GameState, Point, Rltk, - VirtualKeyCode, RGB, -}; +#[macro_use] +extern crate specs_derive; -#[derive(PartialEq, Copy, Clone)] -enum TileType { - Wall, - Floor, +use rltk::{Console, GameState, Rltk, VirtualKeyCode, RGB}; +use specs::prelude::*; + +#[derive(Debug, Component)] +struct Player {} + +#[derive(Debug, Component)] +struct Position { + x: i32, + y: i32, +} + +#[derive(Component)] +struct Renderable { + glyph: u8, + fg: RGB, + bg: RGB, +} + +#[derive(Component)] +struct LeftMover {} + +struct LeftWalker {} +impl<'a> System<'a> for LeftWalker { + type SystemData = + (ReadStorage<'a, LeftMover>, WriteStorage<'a, Position>); + + fn run(&mut self, (lefty, mut pos): Self::SystemData) { + for (_lefty, pos) in (&lefty, &mut pos).join() { + pos.x -= -1; + pos.y -= 1; + if pos.x < 0 { + pos.x = 79; + } + if pos.x > 79 { + pos.x = 0; + } + if pos.y < 0 { + pos.y = 49; + } + if pos.y > 49 { + pos.y = 0; + } + } + } } struct State { - map: Vec, - player_position: usize, - visible: Vec, -} - -fn xy_idx(x: i32, y: i32) -> usize { - (y as usize * 80) + x as usize -} - -fn idx_xy(idx: usize) -> (i32, i32) { - (idx as i32 % 80, idx as i32 / 80) -} - -impl State { - fn new() -> State { - let mut state = State { - map: vec![TileType::Floor; 80 * 50], - player_position: xy_idx(40, 25), - visible: vec![false; 80 * 50], - }; - - (0..80).into_iter().for_each(|x| { - state.map[xy_idx(x, 0)] = TileType::Wall; - state.map[xy_idx(x, 49)] = TileType::Wall; - }); - - (0..50).into_iter().for_each(|y| { - state.map[xy_idx(0, y)] = TileType::Wall; - state.map[xy_idx(79, y)] = TileType::Wall; - }); - - let mut rng = rand::thread_rng(); - - (0..400).into_iter().for_each(|_| { - let x = rng.gen_range(1, 79); - let y = rng.gen_range(1, 49); - let idx = xy_idx(x, y); - - if state.player_position != idx { - state.map[idx] = TileType::Wall; - } - }); - - state - } - - fn move_player(&mut self, dx: i32, dy: i32) { - let cur_pos = idx_xy(self.player_position); - let new_pos = (cur_pos.0 + dx, cur_pos.1 + dy); - let new_idx = xy_idx(new_pos.0, new_pos.1); - if self.map[new_idx] == TileType::Floor { - self.player_position = new_idx; - } - } + ecs: World, + systems: Dispatcher<'static, 'static>, } impl GameState for State { - #[allow(non_snake_case)] fn tick(&mut self, ctx: &mut Rltk) { - match ctx.key { - None => {} - Some(key) => { - match key { - //numpad - VirtualKeyCode::Numpad8 => self.move_player(0, -1), - VirtualKeyCode::Numpad4 => self.move_player(-1, 0), - VirtualKeyCode::Numpad6 => self.move_player(1, 0), - VirtualKeyCode::Numpad2 => self.move_player(0, 1), - - //diag - VirtualKeyCode::Numpad7 => self.move_player(-1, -1), - VirtualKeyCode::Numpad9 => self.move_player(1, -1), - VirtualKeyCode::Numpad1 => self.move_player(-1, 1), - VirtualKeyCode::Numpad3 => self.move_player(1, 1), - - //arrows - VirtualKeyCode::Up => self.move_player(0, -1), - VirtualKeyCode::Down => self.move_player(0, 1), - VirtualKeyCode::Left => self.move_player(-1, 0), - VirtualKeyCode::Right => self.move_player(1, 0), - _ => {} - } - } - } - - self.visible.iter_mut().for_each(|v| { - *v = false; - }); - - let player_position = - self.index_to_point2d(self.player_position as i32); - let fov = rltk::field_of_view(player_position, 8, self); - - fov.iter().for_each(|idx| { - self.visible[xy_idx(idx.x, idx.y)] = true; - }); - ctx.cls(); - let mut y = 0; - let mut x = 0; - &self.map.iter().enumerate().for_each(|(i, tile)| { - let mut fg; - let mut glyph = "."; + player_input(self, ctx); + self.systems.dispatch(&self.ecs); - match tile { - TileType::Floor => { - fg = RGB::from_f32(0.5, 0.5, 0.0); - } - TileType::Wall => { - fg = RGB::from_f32(0.0, 1.0, 0.0); - glyph = "#"; - } - } + let positions = self.ecs.read_storage::(); + let renderables = self.ecs.read_storage::(); - if !self.visible[i] { - fg = fg.to_greyscale(); - } - ctx.print_color(x, y, fg, RGB::from_f32(0., 0., 0.), glyph); - x += 1; - if x > 79 { - x = 0; - y += 1; - } - }); - - let ppos = idx_xy(self.player_position); - ctx.print_color( - ppos.0, - ppos.1, - RGB::from_f32(1.0, 1.0, 0.0), - RGB::from_f32(0., 0., 0.), - "@", - ); - } -} - -impl BaseMap for State { - fn is_opaque(&self, idx: i32) -> bool { - self.map[idx as usize] == TileType::Wall - } - fn get_available_exits(&self, _idx: i32) -> Vec<(i32, f32)> { - Vec::new() // no exits? it's a trap!!! - } - fn get_pathing_distance(&self, _idx1: i32, _idx2: i32) -> f32 { - 0.0 - } -} - -impl Algorithm2D for State { - fn point2d_to_index(&self, pt: Point) -> i32 { - xy_idx(pt.x, pt.y) as i32 - } - fn index_to_point2d(&self, idx: i32) -> Point { - Point::new(idx % 80, idx / 80) + for (pos, rend) in (&positions, &renderables).join() { + ctx.set(pos.x, pos.y, rend.fg, rend.bg, rend.glyph); + } } } fn main() { let context = - Rltk::init_simple8x8(80, 50, "Mortal Wombat", "resources"); - let gs = State::new(); + Rltk::init_simple8x8(80, 50, "MORTAL WOMBAT", "resources"); + let mut gs = State { + ecs: World::new(), + systems: DispatcherBuilder::new() + .with(LeftWalker {}, "left_walker", &[]) + .build(), + }; + gs.ecs.register::(); + gs.ecs.register::(); + gs.ecs.register::(); + gs.ecs.register::(); + + gs.ecs + .create_entity() + .with(Position { x: 40, y: 25 }) + .with(Renderable { + glyph: rltk::to_cp437('@'), + fg: RGB::named(rltk::YELLOW), + bg: RGB::named(rltk::BLACK), + }) + .with(Player {}) + .build(); + + (0..10).into_iter().for_each(|i| { + gs.ecs + .create_entity() + .with(Position { x: i * 7, y: 20 }) + .with(Renderable { + glyph: rltk::to_cp437('?'), + fg: RGB::named(rltk::RED), + bg: RGB::named(rltk::BLACK), + }) + .with(LeftMover {}) + .build(); + }); + rltk::main_loop(context, gs); } + +fn try_move_player(dx: i32, dy: i32, ecs: &mut World) { + let mut posns = ecs.write_storage::(); + let mut players = ecs.write_storage::(); + + (&mut players, &mut posns).join().into_iter().for_each( + |(_player, pos)| { + pos.x += dx; + pos.y += dy; + + if pos.x < 0 { + pos.x = 0; + } + if pos.x > 79 { + pos.x = 79; + } + if pos.y < 0 { + pos.y = 0; + } + if pos.y > 49 { + pos.y = 49; + } + }, + ); +} + +fn player_input(gs: &mut State, ctx: &mut Rltk) { + match ctx.key { + None => {} + Some(key) => match key { + VirtualKeyCode::Left => try_move_player(-1, 0, &mut gs.ecs), + VirtualKeyCode::Right => try_move_player(1, 0, &mut gs.ecs), + VirtualKeyCode::Up => try_move_player(0, -1, &mut gs.ecs), + VirtualKeyCode::Down => try_move_player(0, 1, &mut gs.ecs), + _ => {} + }, + } +}