diff --git a/Cargo.lock b/Cargo.lock index 479e00b..f8985f4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,6 +2,12 @@ # It is not intended for manual editing. version = 3 +[[package]] +name = "ahash" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8fd72866655d1904d6b0997d0b07ba561047d070fbe29de039031c641b61217" + [[package]] name = "aho-corasick" version = "1.1.3" @@ -12,15 +18,29 @@ dependencies = [ ] [[package]] -name = "bindgen" -version = "0.70.1" +name = "arrayvec" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f49d8fed880d473ea71efb9bf597651e77201bdd4893efe54c9e5d65ae04ce6f" +checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b" + +[[package]] +name = "autocfg" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" + +[[package]] +name = "bindgen" +version = "0.69.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a00dc851838a2120612785d195287475a3ac45514741da670b735818822129a0" dependencies = [ "bitflags", "cexpr", "clang-sys", "itertools", + "lazy_static", + "lazycell", "log", "prettyplease", "proc-macro2", @@ -28,20 +48,21 @@ dependencies = [ "regex", "rustc-hash", "shlex", - "syn", + "syn 2.0.79", + "which", ] [[package]] name = "bitflags" -version = "2.9.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c8214115b7bf84099f1309324e63141d4c5d7cc26862f97a0a857dbefe165bd" +checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" [[package]] name = "cc" -version = "1.2.17" +version = "1.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fcb57c740ae1daf453ae85f16e37396f672b039e00d9d866e07ddb24e328e3a" +checksum = "812acba72f0a070b003d3697490d2b55b837230ae7c6c6497f05cc2ddbb8d938" dependencies = [ "shlex", ] @@ -55,6 +76,12 @@ dependencies = [ "nom", ] +[[package]] +name = "cfg-if" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" + [[package]] name = "cfg-if" version = "1.0.0" @@ -74,76 +101,168 @@ dependencies = [ [[package]] name = "cmake" -version = "0.1.54" +version = "0.1.51" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7caa3f9de89ddbe2c607f4101924c5abec803763ae9534e4f4d7d8f84aa81f0" +checksum = "fb1e43aa7fd152b1f968787f7dbcdeb306d1867ff373c69955211876c053f91a" dependencies = [ "cc", ] [[package]] -name = "either" -version = "1.15.0" +name = "crossbeam-queue" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" +checksum = "774ba60a54c213d409d5353bda12d49cd68d14e45036a285234c8d6f91f92570" +dependencies = [ + "cfg-if 0.1.10", + "crossbeam-utils", + "maybe-uninit", +] + +[[package]] +name = "crossbeam-utils" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3c7c73a2d1e9fc0886a08b93e98eb643461230d5f1925e4036204d5f2e261a8" +dependencies = [ + "autocfg", + "cfg-if 0.1.10", + "lazy_static", +] + +[[package]] +name = "either" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" + +[[package]] +name = "errno" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" +dependencies = [ + "libc", + "windows-sys", +] + +[[package]] +name = "fs_extra" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" [[package]] name = "glob" -version = "0.3.2" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2" +checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" + +[[package]] +name = "hashbrown" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96282e96bfcd3da0d3aa9938bedf1e50df3269b6db08b4876d2da0bb1a0841cf" +dependencies = [ + "ahash", + "autocfg", +] + +[[package]] +name = "hibitset" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3ede5cfa60c958e60330d65163adbc4211e15a2653ad80eb0cce878de120121" + +[[package]] +name = "home" +version = "0.5.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" +dependencies = [ + "windows-sys", +] [[package]] name = "itertools" -version = "0.13.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" +checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" dependencies = [ "either", ] [[package]] name = "itoa" -version = "1.0.15" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" +checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" + +[[package]] +name = "lazy_static" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" + +[[package]] +name = "lazycell" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" [[package]] name = "libc" -version = "0.2.171" +version = "0.2.159" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c19937216e9d3aa9956d9bb8dfc0b0c8beb6058fc4f7a4dc4d850edf86a237d6" +checksum = "561d97a539a36e26a9a5fad1ea11a3039a67714694aaa379433e580854bc3dc5" [[package]] name = "libloading" -version = "0.8.6" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc2f4eb4bc735547cfed7c0a4922cbd04a4655978c09b54f1f7b228750664c34" +checksum = "4979f22fdb869068da03c9f7528f8297c6fd2606bc3a4affe42e6a823fdb8da4" dependencies = [ - "cfg-if", + "cfg-if 1.0.0", "windows-targets", ] [[package]] -name = "log" -version = "0.4.27" +name = "linux-raw-sys" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" +checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" [[package]] -name = "marble_engine" -version = "0.2.1" +name = "lock_api" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" +dependencies = [ + "autocfg", + "scopeguard", +] [[package]] -name = "marble_machinations" +name = "log" +version = "0.4.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" + +[[package]] +name = "marble-machinations" version = "0.2.1" dependencies = [ - "marble_engine", "raylib", "serde", "serde_json", ] +[[package]] +name = "maybe-uninit" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00" + [[package]] name = "memchr" version = "2.7.4" @@ -156,6 +275,12 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" +[[package]] +name = "mopa" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a785740271256c230f57462d3b83e52f998433a7062fc18f96d5999474a9f915" + [[package]] name = "nom" version = "7.1.3" @@ -167,68 +292,112 @@ dependencies = [ ] [[package]] -name = "paste" -version = "1.0.15" +name = "once_cell" +version = "1.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" +checksum = "82881c4be219ab5faaf2ad5e5e5ecdff8c66bd7402ca3160975c93b24961afd1" +dependencies = [ + "portable-atomic", +] + +[[package]] +name = "parking_lot" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" +dependencies = [ + "cfg-if 1.0.0", + "libc", + "redox_syscall", + "smallvec", + "windows-targets", +] + +[[package]] +name = "portable-atomic" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc9c68a3f6da06753e9335d63e27f6b9754dd1920d941135b7ea8224f141adb2" [[package]] name = "prettyplease" -version = "0.2.31" +version = "0.2.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5316f57387668042f561aae71480de936257848f9c43ce528e311d89a07cadeb" +checksum = "479cf940fbbb3426c32c5d5176f62ad57549a0bb84773423ba8be9d089f5faba" dependencies = [ "proc-macro2", - "syn", + "syn 2.0.79", ] [[package]] name = "proc-macro2" -version = "1.0.94" +version = "1.0.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a31971752e70b8b2686d7e46ec17fb38dad4051d94024c88df49b667caea9c84" +checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.40" +version = "1.0.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" +checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" dependencies = [ "proc-macro2", ] [[package]] name = "raylib" -version = "5.5.0" +version = "5.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "592b25e626f1b9e3ae92d5343592a2836efa84c7f1710b6b3a16440df20215f3" +checksum = "e2a7a6734329d7b872a418fe4cb08ca282eb66a6f4a3430bd4ee4e6a8cac6632" dependencies = [ - "cfg-if", - "paste", + "cfg-if 1.0.0", + "lazy_static", + "libc", + "parking_lot", "raylib-sys", - "seq-macro", - "thiserror", + "specs", + "specs-derive", ] [[package]] name = "raylib-sys" -version = "5.5.0" +version = "5.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85111fe8e90405af58eb8063bd05d8fd77d512315f3d551d0abc92deb0419f20" +checksum = "db5c6001cfaeec17210713227d11f3b1ba4b723bb12cff47d1b93c4060e10ad0" dependencies = [ "bindgen", "cc", "cmake", + "fs_extra", +] + +[[package]] +name = "redox_syscall" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b6dfecf2c74bce2466cabf93f6664d6998a69eb21e39f4207930065b27b771f" +dependencies = [ + "bitflags", ] [[package]] name = "regex" -version = "1.11.1" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" +checksum = "38200e5ee88914975b69f657f0801b6f6dccafd44fd9326302a4aaeecfacb1d8" dependencies = [ "aho-corasick", "memchr", @@ -238,9 +407,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.9" +version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" +checksum = "368758f23274712b504848e9d5a6f010445cc8b87a7cdb4d7cbee666c1288da3" dependencies = [ "aho-corasick", "memchr", @@ -260,42 +429,55 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" [[package]] -name = "ryu" -version = "1.0.20" +name = "rustix" +version = "0.38.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" +checksum = "8acb788b847c24f28525660c4d7758620a7210875711f79e7f663cc152726811" +dependencies = [ + "bitflags", + "errno", + "libc", + "linux-raw-sys", + "windows-sys", +] [[package]] -name = "seq-macro" -version = "0.3.6" +name = "ryu" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bc711410fbe7399f390ca1c3b60ad0f53f80e95c5eb935e52268a0e2cd49acc" +checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "serde" -version = "1.0.219" +version = "1.0.210" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" +checksum = "c8e3592472072e6e22e0a54d5904d9febf8508f65fb8552499a1abc7d1078c3a" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.219" +version = "1.0.210" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" +checksum = "243902eda00fad750862fc144cea25caca5e20d615af0a81bee94ca738f1df1f" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.79", ] [[package]] name = "serde_json" -version = "1.0.140" +version = "1.0.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373" +checksum = "6ff5456707a1de34e7e37f2a6fd3d3f808c318259cbd01ab6377795054b483d8" dependencies = [ "itoa", "memchr", @@ -310,10 +492,61 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" [[package]] -name = "syn" -version = "2.0.100" +name = "shred" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b09a44accad81e1ba1cd74a32461ba89dee89095ba17b32f5d03683b1b1fc2a0" +checksum = "c5f08237e667ac94ad20f8878b5943d91a93ccb231428446c57c21c57779016d" +dependencies = [ + "arrayvec", + "hashbrown", + "mopa", + "smallvec", + "tynm", +] + +[[package]] +name = "shrev" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5ea33232fdcf1bf691ca33450e5a94dde13e1a8cbb8caabc5e4f9d761e10b1a" + +[[package]] +name = "smallvec" +version = "1.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" + +[[package]] +name = "specs" +version = "0.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fff28a29366aff703d5da8a7e2c8875dc8453ac1118f842cbc0fa70c7db51240" +dependencies = [ + "crossbeam-queue", + "hashbrown", + "hibitset", + "log", + "shred", + "shrev", + "tuple_utils", +] + +[[package]] +name = "specs-derive" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e23e09360f3d2190fec4222cd9e19d3158d5da948c0d1ea362df617dd103511" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" dependencies = [ "proc-macro2", "quote", @@ -321,30 +554,57 @@ dependencies = [ ] [[package]] -name = "thiserror" -version = "1.0.69" +name = "syn" +version = "2.0.79" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" -dependencies = [ - "thiserror-impl", -] - -[[package]] -name = "thiserror-impl" -version = "1.0.69" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" +checksum = "89132cd0bf050864e1d38dc3bbc07a0eb8e7530af26344d3d2bbbef83499f590" dependencies = [ "proc-macro2", "quote", - "syn", + "unicode-ident", +] + +[[package]] +name = "tuple_utils" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44834418e2c5b16f47bedf35c28e148db099187dd5feee6367fb2525863af4f1" + +[[package]] +name = "tynm" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd30d05e69d1478e13fe3e7a853409cfec82cebc2cf9b8d613b3c6b0081781ed" +dependencies = [ + "nom", ] [[package]] name = "unicode-ident" -version = "1.0.18" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" +checksum = "e91b56cd4cadaeb79bbf1a5645f6b4f8dc5bde8834ad5894a8db35fda9efa1fe" + +[[package]] +name = "which" +version = "4.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7" +dependencies = [ + "either", + "home", + "once_cell", + "rustix", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets", +] [[package]] name = "windows-targets" diff --git a/Cargo.toml b/Cargo.toml index 1576c5b..a4578e8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,7 +1,9 @@ -[workspace] - -members = [ - "marble_machinations", - "marble_engine", -] +[package] +name = "marble-machinations" +version = "0.2.1" +edition = "2021" +[dependencies] +raylib = "5.0.2" +serde = { version = "1.0.210", features = ["derive"] } +serde_json = "1.0.128" diff --git a/marble_machinations/build.rs b/build.rs similarity index 83% rename from marble_machinations/build.rs rename to build.rs index 318cf70..75a2430 100644 --- a/marble_machinations/build.rs +++ b/build.rs @@ -2,7 +2,7 @@ use std::{fs::File, io::Write}; fn main() { let version = concat!("v", env!("CARGO_PKG_VERSION")); - File::create("../version.txt") + File::create("version.txt") .unwrap() .write_all(version.as_bytes()) .unwrap(); diff --git a/marble_engine/Cargo.toml b/marble_engine/Cargo.toml deleted file mode 100644 index e4434db..0000000 --- a/marble_engine/Cargo.toml +++ /dev/null @@ -1,7 +0,0 @@ -[package] -name = "marble_engine" -version = "0.2.1" -edition = "2021" - -[dependencies] - diff --git a/marble_machinations/Cargo.toml b/marble_machinations/Cargo.toml deleted file mode 100644 index 0cc6e6f..0000000 --- a/marble_machinations/Cargo.toml +++ /dev/null @@ -1,10 +0,0 @@ -[package] -name = "marble_machinations" -version = "0.2.1" -edition = "2021" - -[dependencies] -marble_engine = { path = "../marble_engine" } -raylib = "5.0.2" -serde = { version = "1.0.210", features = ["derive"] } -serde_json = "1.0.128" diff --git a/marble_machinations/src/marble_engine.rs b/marble_machinations/src/marble_engine.rs deleted file mode 100644 index b5e1377..0000000 --- a/marble_machinations/src/marble_engine.rs +++ /dev/null @@ -1,104 +0,0 @@ -use marble_engine::{ - board::Board, - pos::{Pos, PosInt}, - tile::{Direction, Tile}, - Machine, -}; -use raylib::{ - color::Color, - drawing::{RaylibDraw, RaylibDrawHandle}, - math::Vector2, -}; - -use crate::{ - theme::TILE_TEXTURE_SIZE, - ui::draw_usize_small, - util::{draw_scaled_texture, Textures}, -}; - -pub trait PosRaylib { - fn to_vec(self) -> Vector2; - fn from_vec(vec: Vector2) -> Self; -} - -impl PosRaylib for Pos { - fn from_vec(vec: Vector2) -> Self { - Self { - x: vec.x as PosInt, - y: vec.y as PosInt, - } - } - fn to_vec(self) -> Vector2 { - Vector2 { - x: self.x as f32, - y: self.y as f32, - } - } -} - -pub fn draw_board( - board: &Board, - d: &mut RaylibDrawHandle, - textures: &Textures, - offset: Vector2, - scale: f32, -) { - let tile_size = (TILE_TEXTURE_SIZE * scale) as i32; - - let start_x = (-offset.x as i32) / tile_size - 1; - let tile_width = d.get_screen_width() / tile_size + 2; - let start_y = (-offset.y as i32) / tile_size - 1; - let tile_height = d.get_screen_height() / tile_size + 2; - - for x in start_x..(start_x + tile_width) { - for y in start_y..(start_y + tile_height) { - let px = x * tile_size + offset.x as i32; - let py = y * tile_size + offset.y as i32; - if let Some(tile) = board.get((x, y).into()) { - let texname = tile.texture(); - if texname.is_empty() { - continue; - } - let texture = textures.get(texname); - draw_scaled_texture(d, texture, px, py, scale); - #[cfg(debug_assertions)] - // TODO: some in-game option to show power direction - if let Tile::Powerable(_, state) = &tile { - for dir in Direction::ALL { - if state.get_dir(dir) { - let texture = textures.get(dir.debug_arrow_texture_name()); - draw_scaled_texture(d, texture, px, py, scale); - } - } - } - } else { - d.draw_rectangle(px, py, tile_size, tile_size, Color::new(0, 0, 0, 80)); - } - } - } -} - -pub fn draw_marble_values( - machine: &Machine, - d: &mut RaylibDrawHandle, - textures: &Textures, - offset: Vector2, - scale: f32, -) { - let tile_size = (TILE_TEXTURE_SIZE * scale) as i32; - for marble in machine.marbles() { - let x = marble.x; - let y = marble.y; - if let Some(tile) = machine.board().get(*marble) { - let px = x as i32 * tile_size + offset.x as i32; - let py = y as i32 * tile_size + offset.y as i32; - if let Tile::Marble { value, dir } = tile { - let texture = textures.get(dir.arrow_texture_name()); - let pos = Vector2::new(px as f32, py as f32); - let faded_white = Color::new(255, 255, 255, 100); - d.draw_texture_ex(texture, pos, 0., scale, faded_white); - draw_usize_small(d, textures, value as usize, px, py, scale); - } - } - } -} diff --git a/marble_machinations/src/blueprint.rs b/src/blueprint.rs similarity index 95% rename from marble_machinations/src/blueprint.rs rename to src/blueprint.rs index 13ec0a0..2419eeb 100644 --- a/marble_machinations/src/blueprint.rs +++ b/src/blueprint.rs @@ -6,8 +6,7 @@ use std::{ use serde::{Deserialize, Serialize}; -use crate::util::userdata_dir; -use marble_engine::board::Board; +use crate::{marble_engine::board::Board, util::userdata_dir}; #[derive(Debug, Clone, Serialize, Deserialize)] pub struct Blueprint { diff --git a/marble_machinations/src/config.rs b/src/config.rs similarity index 100% rename from marble_machinations/src/config.rs rename to src/config.rs diff --git a/marble_machinations/src/editor.rs b/src/editor.rs similarity index 97% rename from marble_machinations/src/editor.rs rename to src/editor.rs index bbd921e..644ffb4 100644 --- a/marble_machinations/src/editor.rs +++ b/src/editor.rs @@ -10,13 +10,12 @@ use raylib::prelude::*; use crate::{ blueprint::Blueprint, level::Level, - marble_engine::{draw_board, draw_marble_values, PosRaylib}, + marble_engine::{board::*, pos::*, tile::*, Machine}, solution::*, theme::*, ui::*, util::*, }; -use marble_engine::{board::*, pos::*, tile::*, Machine}; const HEADER_HEIGHT: i32 = 40; const FOOTER_HEIGHT: i32 = 95; @@ -563,26 +562,26 @@ impl Editor { fn draw_board(&self, d: &mut RaylibDrawHandle, textures: &Textures) { if self.sim_state == SimState::Editing { - draw_board(&self.source_board, d, textures, self.view_offset, self.zoom); + self.source_board + .draw(d, textures, self.view_offset, self.zoom); } else { if self.machine.debug_subticks.is_empty() { - draw_board( - self.machine.board(), - d, - textures, - self.view_offset, - self.zoom, - ); + self.machine + .board() + .draw(d, textures, self.view_offset, self.zoom); } else { let subframe = &self.machine.debug_subticks[self.machine.subtick_index]; - draw_board(&subframe.board, d, textures, self.view_offset, self.zoom); + subframe + .board + .draw(d, textures, self.view_offset, self.zoom); if let Some(pos) = subframe.pos { let p = self.pos_to_screen(pos.to_vec()); d.draw_texture_ex(textures.get("selection"), p, 0., self.zoom, Color::ORANGE); } } if self.draw_overlay { - draw_marble_values(&self.machine, d, textures, self.view_offset, self.zoom); + self.machine + .draw_marble_values(d, textures, self.view_offset, self.zoom); } } } @@ -1263,12 +1262,12 @@ impl Editor { offset.x -= offset.x.rem(tile_size); offset.y -= offset.y.rem(tile_size); offset += view_offset; - draw_board(&board, d, textures, offset, self.zoom); + board.draw(d, textures, offset, self.zoom); if self.mouse.left_click() { let tile_pos = (self.mouse.pos() - self.view_offset) / tile_size; let tile_pos = Vector2::new(tile_pos.x.floor(), tile_pos.y.floor()); let board = self.pasting_board.take().unwrap(); - self.set_area(Pos::from_vec(tile_pos), board); + self.set_area(tile_pos.into(), board); } } return; @@ -1337,7 +1336,7 @@ impl Editor { ); } if self.mouse.left_click() { - let pos = Pos::from_vec(tile_pos); + let pos = tile_pos.into(); match self.active_tool { Tool::None | Tool::Erase | Tool::SelectArea(_) => (), Tool::SetTile(tile) => self.set_tile(pos, tile), @@ -1372,20 +1371,18 @@ impl Editor { } } if self.mouse.left_hold() && self.active_tool == Tool::Erase { - self.set_tile(Pos::from_vec(tile_pos), Tile::BLANK); + self.set_tile(tile_pos.into(), Tile::BLANK); } if let Tool::SelectArea(selection) = &mut self.active_tool { if self.mouse.left_hold() { if selection.is_selecting { if let Some((_start, end)) = &mut selection.area { - *end = Pos::from_vec(tile_pos); + *end = tile_pos.into(); } else { - selection.area = - Some((Pos::from_vec(tile_pos), Pos::from_vec(tile_pos))); + selection.area = Some((tile_pos.into(), tile_pos.into())); } } else { - selection.area = - Some((Pos::from_vec(tile_pos), Pos::from_vec(tile_pos))); + selection.area = Some((tile_pos.into(), tile_pos.into())); selection.is_selecting = true; } } else if self.mouse.left_release() { @@ -1402,7 +1399,7 @@ impl Editor { offset.x -= offset.x.rem(tile_size); offset.y -= offset.y.rem(tile_size); offset += view_offset; - draw_board(bp.convert_board(), d, textures, offset, self.zoom); + bp.convert_board().draw(d, textures, offset, self.zoom); } if self.mouse.pos().x < SIDEBAR_WIDTH as f32 { if self.mouse.scroll() == Some(Scroll::Down) diff --git a/marble_machinations/src/level.rs b/src/level.rs similarity index 100% rename from marble_machinations/src/level.rs rename to src/level.rs diff --git a/marble_machinations/src/lib.rs b/src/lib.rs similarity index 89% rename from marble_machinations/src/lib.rs rename to src/lib.rs index 06d1167..294ea50 100644 --- a/marble_machinations/src/lib.rs +++ b/src/lib.rs @@ -1,5 +1,4 @@ pub mod blueprint; -pub mod config; pub mod editor; pub mod level; pub mod marble_engine; diff --git a/marble_machinations/src/main.rs b/src/main.rs similarity index 100% rename from marble_machinations/src/main.rs rename to src/main.rs diff --git a/marble_engine/src/lib.rs b/src/marble_engine.rs similarity index 93% rename from marble_engine/src/lib.rs rename to src/marble_engine.rs index 369caa4..36ebf83 100644 --- a/marble_engine/src/lib.rs +++ b/src/marble_engine.rs @@ -1,7 +1,9 @@ +use raylib::prelude::*; + pub mod board; pub mod pos; pub mod tile; - +use crate::{theme::TILE_TEXTURE_SIZE, ui::draw_usize_small, util::Textures}; use board::Board; use pos::*; use tile::*; @@ -55,10 +57,6 @@ impl Machine { self.board = board; } - pub fn marbles(&self) -> &[Pos] { - &self.marbles - } - pub fn board(&self) -> &Board { &self.board } @@ -84,6 +82,31 @@ impl Machine { self.input = bytes; } + pub fn draw_marble_values( + &self, + d: &mut RaylibDrawHandle, + textures: &Textures, + offset: Vector2, + scale: f32, + ) { + let tile_size = (TILE_TEXTURE_SIZE * scale) as i32; + for marble in &self.marbles { + let x = marble.x; + let y = marble.y; + if let Some(tile) = self.board.get(*marble) { + let px = x as i32 * tile_size + offset.x as i32; + let py = y as i32 * tile_size + offset.y as i32; + if let Tile::Marble { value, dir } = tile { + let texture = textures.get(dir.arrow_texture_name()); + let pos = Vector2::new(px as f32, py as f32); + let faded_white = Color::new(255, 255, 255, 100); + d.draw_texture_ex(texture, pos, 0., scale, faded_white); + draw_usize_small(d, textures, value as usize, px, py, scale); + } + } + } + } + pub fn step(&mut self) { self.steps += 1; #[cfg(debug_assertions)] @@ -506,10 +529,6 @@ impl Machine { } #[cfg(debug_assertions)] { - self.debug_subticks.push(DebugSubTick { - board: self.board.clone(), - pos: None, - }); self.subtick_index = self.debug_subticks.len() - 1; } } diff --git a/marble_engine/src/board.rs b/src/marble_engine/board.rs similarity index 75% rename from marble_engine/src/board.rs rename to src/marble_engine/board.rs index 836692e..86f153e 100644 --- a/marble_engine/src/board.rs +++ b/src/marble_engine/board.rs @@ -1,4 +1,10 @@ +use raylib::prelude::*; + use super::{tile::*, Pos, PosInt}; +use crate::{ + theme::TILE_TEXTURE_SIZE, + util::{draw_scaled_texture, Textures}, +}; #[derive(Debug, Clone, PartialEq)] pub struct Board { @@ -188,4 +194,40 @@ impl Board { } out } + + pub fn draw(&self, d: &mut RaylibDrawHandle, textures: &Textures, offset: Vector2, scale: f32) { + let tile_size = (TILE_TEXTURE_SIZE * scale) as i32; + + let start_x = (-offset.x as i32) / tile_size - 1; + let tile_width = d.get_screen_width() / tile_size + 2; + let start_y = (-offset.y as i32) / tile_size - 1; + let tile_height = d.get_screen_height() / tile_size + 2; + + for x in start_x..(start_x + tile_width) { + for y in start_y..(start_y + tile_height) { + let px = x * tile_size + offset.x as i32; + let py = y * tile_size + offset.y as i32; + if let Some(tile) = self.get((x, y).into()) { + let texname = tile.texture(); + if texname.is_empty() { + continue; + } + let texture = textures.get(texname); + draw_scaled_texture(d, texture, px, py, scale); + #[cfg(debug_assertions)] + // TODO: some in-game option to show power direction + if let Tile::Powerable(_, state) = &tile { + for dir in Direction::ALL { + if state.get_dir(dir) { + let texture = textures.get(dir.debug_arrow_texture_name()); + draw_scaled_texture(d, texture, px, py, scale); + } + } + } + } else { + d.draw_rectangle(px, py, tile_size, tile_size, Color::new(0, 0, 0, 80)); + } + } + } + } } diff --git a/marble_engine/src/pos.rs b/src/marble_engine/pos.rs similarity index 76% rename from marble_engine/src/pos.rs rename to src/marble_engine/pos.rs index 03f4b99..9eea35c 100644 --- a/marble_engine/src/pos.rs +++ b/src/marble_engine/pos.rs @@ -1,5 +1,7 @@ use std::ops::Add; +use raylib::prelude::*; + pub type PosInt = i16; #[derive(Debug, Default, Clone, Copy, PartialEq)] @@ -9,6 +11,13 @@ pub struct Pos { } impl Pos { + pub const fn to_vec(self) -> Vector2 { + Vector2 { + x: self.x as f32, + y: self.y as f32, + } + } + pub fn min(self, other: Self) -> Self { Self { x: self.x.min(other.x), @@ -42,6 +51,15 @@ impl From<(i32, i32)> for Pos { } } +impl From for Pos { + fn from(vec: Vector2) -> Self { + Self { + x: vec.x as PosInt, + y: vec.y as PosInt, + } + } +} + impl Add for Pos { type Output = Self; fn add(self, rhs: Self) -> Self::Output { diff --git a/marble_engine/src/tile.rs b/src/marble_engine/tile.rs similarity index 99% rename from marble_engine/src/tile.rs rename to src/marble_engine/tile.rs index bc80f59..798c51c 100644 --- a/marble_engine/src/tile.rs +++ b/src/marble_engine/tile.rs @@ -1,4 +1,4 @@ -use crate::Pos; +use crate::marble_engine::Pos; pub type MarbleValue = u32; diff --git a/marble_machinations/src/solution.rs b/src/solution.rs similarity index 100% rename from marble_machinations/src/solution.rs rename to src/solution.rs diff --git a/marble_machinations/src/theme.rs b/src/theme.rs similarity index 100% rename from marble_machinations/src/theme.rs rename to src/theme.rs diff --git a/marble_machinations/src/ui.rs b/src/ui.rs similarity index 100% rename from marble_machinations/src/ui.rs rename to src/ui.rs diff --git a/marble_machinations/src/util.rs b/src/util.rs similarity index 100% rename from marble_machinations/src/util.rs rename to src/util.rs