From 214463f6b4a8f5644e6b6920a603cb057786a8be Mon Sep 17 00:00:00 2001 From: Savanni D'Gerinel Date: Mon, 6 Feb 2023 09:36:02 -0500 Subject: [PATCH] Import my hex-grid project --- flake.nix | 4 +- hex-grid/Cargo.lock | 1382 +++++++++++++++++++ hex-grid/Cargo.toml | 17 + hex-grid/build.rs | 7 + hex-grid/resources/main.glade | 99 ++ hex-grid/resources/map.txt | 37 + hex-grid/resources/resources.gresources.xml | 8 + hex-grid/resources/terrain.ppm | Bin 0 -> 314826 bytes hex-grid/src/main.rs | 333 +++++ 9 files changed, 1886 insertions(+), 1 deletion(-) create mode 100644 hex-grid/Cargo.lock create mode 100644 hex-grid/Cargo.toml create mode 100644 hex-grid/build.rs create mode 100644 hex-grid/resources/main.glade create mode 100644 hex-grid/resources/map.txt create mode 100644 hex-grid/resources/resources.gresources.xml create mode 100644 hex-grid/resources/terrain.ppm create mode 100644 hex-grid/src/main.rs diff --git a/flake.nix b/flake.nix index 9c15d8d..5dcb414 100644 --- a/flake.nix +++ b/flake.nix @@ -23,8 +23,10 @@ pkgs.mkShell { name = "ld-tools-devshell"; buildInputs = [ - pkgs.pkg-config + pkgs.glade + pkgs.gtk4 pkgs.openssl + pkgs.pkg-config rust ]; }; diff --git a/hex-grid/Cargo.lock b/hex-grid/Cargo.lock new file mode 100644 index 0000000..a8315b9 --- /dev/null +++ b/hex-grid/Cargo.lock @@ -0,0 +1,1382 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + +[[package]] +name = "anyhow" +version = "1.0.68" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2cb2f989d18dd141ab8ae82f64d1a8cdd37e0840f73a406896cf5e99502fab61" + +[[package]] +name = "autocfg" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" + +[[package]] +name = "bit-set" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1" +dependencies = [ + "bit-vec", +] + +[[package]] +name = "bit-vec" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" + +[[package]] +name = "bit_field" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcb6dd1c2376d2e096796e234a70e17e94cc2d5d54ff8ce42b28cef1d0d359a4" + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bumpalo" +version = "3.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d261e256854913907f67ed06efbc3338dfe6179796deefc1ff763fc1aee5535" + +[[package]] +name = "bytemuck" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c041d3eab048880cb0b86b256447da3f18859a163c3b8d8893f4e6368abe6393" + +[[package]] +name = "byteorder" +version = "1.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" + +[[package]] +name = "cairo-rs" +version = "0.16.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3125b15ec28b84c238f6f476c6034016a5f6cc0221cb514ca46c532139fc97d" +dependencies = [ + "bitflags", + "cairo-sys-rs", + "glib", + "libc", + "once_cell", + "thiserror", +] + +[[package]] +name = "cairo-sys-rs" +version = "0.16.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c48f4af05fabdcfa9658178e1326efa061853f040ce7d72e33af6885196f421" +dependencies = [ + "glib-sys", + "libc", + "system-deps", +] + +[[package]] +name = "cfg-expr" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0357a6402b295ca3a86bc148e84df46c02e41f41fef186bda662557ef6328aa" +dependencies = [ + "smallvec", +] + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "color_quant" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" + +[[package]] +name = "coordinates" +version = "0.1.0" +dependencies = [ + "nom", + "proptest", + "thiserror", +] + +[[package]] +name = "crc32fast" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "crossbeam-channel" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2dd04ddaf88237dc3b8d8f9a3c1004b506b54b3313403944054d23c0870c521" +dependencies = [ + "cfg-if", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-deque" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "715e8152b692bba2d374b53d4875445368fdf21a94751410af607a5ac677d1fc" +dependencies = [ + "cfg-if", + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01a9af1f4c2ef74bb8aa1f7e19706bc72d03598c8a570bb5de72243c7a9d9d5a" +dependencies = [ + "autocfg", + "cfg-if", + "crossbeam-utils", + "memoffset 0.7.1", + "scopeguard", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fb766fa798726286dbbb842f174001dab8abc7b627a1dd86e0b7222a95d929f" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "crunchy" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" + +[[package]] +name = "either" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90e5c1c8368803113bf0c9584fc495a58b86dc8a29edbf8fe877d21d9507e797" + +[[package]] +name = "exr" +version = "1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eb5f255b5980bb0c8cf676b675d1a99be40f316881444f44e0462eaf5df5ded" +dependencies = [ + "bit_field", + "flume", + "half", + "lebe", + "miniz_oxide", + "smallvec", + "threadpool", +] + +[[package]] +name = "fastrand" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7a407cfaa3385c4ae6b23e84623d48c2798d06e3e6a1878f7f59f17b3f86499" +dependencies = [ + "instant", +] + +[[package]] +name = "field-offset" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e1c54951450cbd39f3dbcf1005ac413b49487dabf18a720ad2383eccfeffb92" +dependencies = [ + "memoffset 0.6.5", + "rustc_version", +] + +[[package]] +name = "flate2" +version = "1.0.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8a2db397cb1c8772f31494cb8917e48cd1e64f0fa7efac59fbd741a0a8ce841" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + +[[package]] +name = "flume" +version = "0.10.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1657b4441c3403d9f7b3409e47575237dac27b1b5726df654a6ecbf92f0f7577" +dependencies = [ + "futures-core", + "futures-sink", + "nanorand", + "pin-project", + "spin", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "futures-channel" +version = "0.3.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52ba265a92256105f45b719605a571ffe2d1f0fea3807304b522c1d778f79eed" +dependencies = [ + "futures-core", +] + +[[package]] +name = "futures-core" +version = "0.3.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04909a7a7e4633ae6c4a9ab280aeb86da1236243a77b694a49eacd659a4bd3ac" + +[[package]] +name = "futures-executor" +version = "0.3.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7acc85df6714c176ab5edf386123fafe217be88c0840ec11f199441134a074e2" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-io" +version = "0.3.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00f5fb52a06bdcadeb54e8d3671f8888a39697dcb0b81b23b55174030427f4eb" + +[[package]] +name = "futures-macro" +version = "0.3.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bdfb8ce053d86b91919aad980c220b1fb8401a9394410e1c289ed7e66b61835d" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "futures-sink" +version = "0.3.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39c15cf1a4aa79df40f1bb462fb39676d0ad9e366c2a33b590d7c66f4f81fcf9" + +[[package]] +name = "futures-task" +version = "0.3.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ffb393ac5d9a6eaa9d3fdf37ae2776656b706e200c8e16b1bdb227f5198e6ea" + +[[package]] +name = "futures-util" +version = "0.3.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "197676987abd2f9cadff84926f410af1c183608d36641465df73ae8211dc65d6" +dependencies = [ + "futures-core", + "futures-macro", + "futures-task", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "gdk-pixbuf" +version = "0.16.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3578c60dee9d029ad86593ed88cb40f35c1b83360e12498d055022385dd9a05" +dependencies = [ + "bitflags", + "gdk-pixbuf-sys", + "gio", + "glib", + "libc", +] + +[[package]] +name = "gdk-pixbuf-sys" +version = "0.16.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3092cf797a5f1210479ea38070d9ae8a5b8e9f8f1be9f32f4643c529c7d70016" +dependencies = [ + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "gdk4" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb2181330ebf9d091f8ea7fed6877f7adc92114128592e1fdaeb1da28e0d01e9" +dependencies = [ + "bitflags", + "cairo-rs", + "gdk-pixbuf", + "gdk4-sys", + "gio", + "glib", + "libc", + "pango", +] + +[[package]] +name = "gdk4-sys" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de55cb49432901fe2b3534177fa06844665b9b0911d85d8601a8d8b88b7791db" +dependencies = [ + "cairo-sys-rs", + "gdk-pixbuf-sys", + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "pango-sys", + "pkg-config", + "system-deps", +] + +[[package]] +name = "getrandom" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31" +dependencies = [ + "cfg-if", + "js-sys", + "libc", + "wasi", + "wasm-bindgen", +] + +[[package]] +name = "gif" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3edd93c6756b4dfaf2709eafcc345ba2636565295c198a9cfbf75fa5e3e00b06" +dependencies = [ + "color_quant", + "weezl", +] + +[[package]] +name = "gio" +version = "0.16.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a1c84b4534a290a29160ef5c6eff2a9c95833111472e824fc5cb78b513dd092" +dependencies = [ + "bitflags", + "futures-channel", + "futures-core", + "futures-io", + "futures-util", + "gio-sys", + "glib", + "libc", + "once_cell", + "pin-project-lite", + "smallvec", + "thiserror", +] + +[[package]] +name = "gio-sys" +version = "0.16.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9b693b8e39d042a95547fc258a7b07349b1f0b48f4b2fa3108ba3c51c0b5229" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps", + "winapi", +] + +[[package]] +name = "glib" +version = "0.16.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddd4df61a866ed7259d6189b8bcb1464989a77f1d85d25d002279bbe9dd38b2f" +dependencies = [ + "bitflags", + "futures-channel", + "futures-core", + "futures-executor", + "futures-task", + "futures-util", + "gio-sys", + "glib-macros", + "glib-sys", + "gobject-sys", + "libc", + "once_cell", + "smallvec", + "thiserror", +] + +[[package]] +name = "glib-build-tools" +version = "0.16.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "251935cb159350458a627642b0852a7fb8e027e3c5916dc2cebcd70f025de3fc" + +[[package]] +name = "glib-macros" +version = "0.16.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e084807350b01348b6d9dbabb724d1a0bb987f47a2c85de200e98e12e30733bf" +dependencies = [ + "anyhow", + "heck", + "proc-macro-crate", + "proc-macro-error", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "glib-sys" +version = "0.16.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c61a4f46316d06bfa33a7ac22df6f0524c8be58e3db2d9ca99ccb1f357b62a65" +dependencies = [ + "libc", + "system-deps", +] + +[[package]] +name = "gobject-sys" +version = "0.16.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3520bb9c07ae2a12c7f2fbb24d4efc11231c8146a86956413fb1a79bb760a0f1" +dependencies = [ + "glib-sys", + "libc", + "system-deps", +] + +[[package]] +name = "graphene-rs" +version = "0.16.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95ecb4d347e6d09820df3bdfd89a74a8eec07753a06bb92a3aac3ad31d04447b" +dependencies = [ + "glib", + "graphene-sys", + "libc", +] + +[[package]] +name = "graphene-sys" +version = "0.16.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9aa82337d3972b4eafdea71e607c23f47be6f27f749aab613f1ad8ddbe6dcd6" +dependencies = [ + "glib-sys", + "libc", + "pkg-config", + "system-deps", +] + +[[package]] +name = "gsk4" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "591239f5c52ca803b222124ac9c47f230cd180cee9b114c4d672e4a94b74f491" +dependencies = [ + "bitflags", + "cairo-rs", + "gdk4", + "glib", + "graphene-rs", + "gsk4-sys", + "libc", + "pango", +] + +[[package]] +name = "gsk4-sys" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "195a63f0be42529f98c3eb3bae0decfd0428ba2cc683b3e20ced88f340904ec5" +dependencies = [ + "cairo-sys-rs", + "gdk4-sys", + "glib-sys", + "gobject-sys", + "graphene-sys", + "libc", + "pango-sys", + "system-deps", +] + +[[package]] +name = "gtk4" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd89dba65def483a233dc4fdd3f3dab01576e3d83f80f6c9303ebe421661855e" +dependencies = [ + "bitflags", + "cairo-rs", + "field-offset", + "futures-channel", + "gdk-pixbuf", + "gdk4", + "gio", + "glib", + "graphene-rs", + "gsk4", + "gtk4-macros", + "gtk4-sys", + "libc", + "once_cell", + "pango", +] + +[[package]] +name = "gtk4-macros" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "832687a415d9d8bc11fe9c17dda1bf13ee262c41b995dd4df1d1cce33cead405" +dependencies = [ + "anyhow", + "proc-macro-crate", + "proc-macro-error", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "gtk4-sys" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e370564e3fdacff7cffc99f7366b6a4689feb44e819d3ccee598a9a215b71605" +dependencies = [ + "cairo-sys-rs", + "gdk-pixbuf-sys", + "gdk4-sys", + "gio-sys", + "glib-sys", + "gobject-sys", + "graphene-sys", + "gsk4-sys", + "libc", + "pango-sys", + "system-deps", +] + +[[package]] +name = "half" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02b4af3693f1b705df946e9fe5631932443781d0aabb423b62fcd4d73f6d2fd0" +dependencies = [ + "crunchy", +] + +[[package]] +name = "heck" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9" + +[[package]] +name = "hermit-abi" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7" +dependencies = [ + "libc", +] + +[[package]] +name = "hex-grid" +version = "0.1.0" +dependencies = [ + "cairo-rs", + "coordinates", + "gio", + "glib", + "glib-build-tools", + "gtk4", + "image", +] + +[[package]] +name = "image" +version = "0.24.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69b7ea949b537b0fd0af141fff8c77690f2ce96f4f41f042ccb6c69c6c965945" +dependencies = [ + "bytemuck", + "byteorder", + "color_quant", + "exr", + "gif", + "jpeg-decoder", + "num-rational", + "num-traits", + "png", + "scoped_threadpool", + "tiff", +] + +[[package]] +name = "instant" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "jpeg-decoder" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc0000e42512c92e31c2252315bda326620a4e034105e900c98ec492fa077b3e" +dependencies = [ + "rayon", +] + +[[package]] +name = "js-sys" +version = "0.3.60" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49409df3e3bf0856b916e2ceaca09ee28e6871cf7d9ce97a692cacfdb2a25a47" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" + +[[package]] +name = "lebe" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03087c2bad5e1034e8cace5926dec053fb3790248370865f5117a7d0213354c8" + +[[package]] +name = "libc" +version = "0.2.139" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "201de327520df007757c1f0adce6e827fe8562fbc28bfd9c15571c66ca1f5f79" + +[[package]] +name = "lock_api" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df" +dependencies = [ + "autocfg", + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "memchr" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" + +[[package]] +name = "memoffset" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" +dependencies = [ + "autocfg", +] + +[[package]] +name = "memoffset" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4" +dependencies = [ + "autocfg", +] + +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + +[[package]] +name = "miniz_oxide" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa" +dependencies = [ + "adler", +] + +[[package]] +name = "nanorand" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a51313c5820b0b02bd422f4b44776fbf47961755c74ce64afc73bfad10226c3" +dependencies = [ + "getrandom", +] + +[[package]] +name = "nom" +version = "7.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +dependencies = [ + "memchr", + "minimal-lexical", +] + +[[package]] +name = "num-integer" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" +dependencies = [ + "autocfg", + "num-traits", +] + +[[package]] +name = "num-rational" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" +dependencies = [ + "autocfg", +] + +[[package]] +name = "num_cpus" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b" +dependencies = [ + "hermit-abi", + "libc", +] + +[[package]] +name = "once_cell" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f61fba1741ea2b3d6a1e3178721804bb716a68a6aeba1149b5d52e3d464ea66" + +[[package]] +name = "pango" +version = "0.16.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdff66b271861037b89d028656184059e03b0b6ccb36003820be19f7200b1e94" +dependencies = [ + "bitflags", + "gio", + "glib", + "libc", + "once_cell", + "pango-sys", +] + +[[package]] +name = "pango-sys" +version = "0.16.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e134909a9a293e04d2cc31928aa95679c5e4df954d0b85483159bd20d8f047f" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "pest" +version = "2.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4257b4a04d91f7e9e6290be5d3da4804dd5784fafde3a497d73eb2b4a158c30a" +dependencies = [ + "thiserror", + "ucd-trie", +] + +[[package]] +name = "pin-project" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad29a609b6bcd67fee905812e544992d216af9d755757c05ed2d0e15a74c6ecc" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "069bdb1e05adc7a8990dce9cc75370895fbe4e3d58b9b73bf1aee56359344a55" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "pkg-config" +version = "0.3.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160" + +[[package]] +name = "png" +version = "0.17.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d708eaf860a19b19ce538740d2b4bdeeb8337fa53f7738455e706623ad5c638" +dependencies = [ + "bitflags", + "crc32fast", + "flate2", + "miniz_oxide", +] + +[[package]] +name = "ppv-lite86" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" + +[[package]] +name = "proc-macro-crate" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eda0fc3b0fb7c975631757e14d9049da17374063edb6ebbcbc54d880d4fe94e9" +dependencies = [ + "once_cell", + "thiserror", + "toml", +] + +[[package]] +name = "proc-macro-error" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" +dependencies = [ + "proc-macro-error-attr", + "proc-macro2", + "quote", + "syn", + "version_check", +] + +[[package]] +name = "proc-macro-error-attr" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +dependencies = [ + "proc-macro2", + "quote", + "version_check", +] + +[[package]] +name = "proc-macro2" +version = "1.0.49" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57a8eca9f9c4ffde41714334dee777596264c7825420f521abc92b5b5deb63a5" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "proptest" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e0d9cc07f18492d879586c92b485def06bc850da3118075cd45d50e9c95b0e5" +dependencies = [ + "bit-set", + "bitflags", + "byteorder", + "lazy_static", + "num-traits", + "quick-error 2.0.1", + "rand", + "rand_chacha", + "rand_xorshift", + "regex-syntax", + "rusty-fork", + "tempfile", +] + +[[package]] +name = "quick-error" +version = "1.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" + +[[package]] +name = "quick-error" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3" + +[[package]] +name = "quote" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8856d8364d252a14d474036ea1358d63c9e6965c8e5c1885c18f73d70bff9c7b" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha", + "rand_core", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom", +] + +[[package]] +name = "rand_xorshift" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d25bf25ec5ae4a3f1b92f929810509a2f53d7dca2f50b794ff57e3face536c8f" +dependencies = [ + "rand_core", +] + +[[package]] +name = "rayon" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6db3a213adf02b3bcfd2d3846bb41cb22857d131789e01df434fb7e7bc0759b7" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cac410af5d00ab6884528b4ab69d1e8e146e8d471201800fa1b4524126de6ad3" +dependencies = [ + "crossbeam-channel", + "crossbeam-deque", + "crossbeam-utils", + "num_cpus", +] + +[[package]] +name = "redox_syscall" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" +dependencies = [ + "bitflags", +] + +[[package]] +name = "regex-syntax" +version = "0.6.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848" + +[[package]] +name = "remove_dir_all" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7" +dependencies = [ + "winapi", +] + +[[package]] +name = "rustc_version" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0dfe2087c51c460008730de8b57e6a320782fbfb312e1f4d520e6c6fae155ee" +dependencies = [ + "semver", +] + +[[package]] +name = "rusty-fork" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb3dcc6e454c328bb824492db107ab7c0ae8fcffe4ad210136ef014458c1bc4f" +dependencies = [ + "fnv", + "quick-error 1.2.3", + "tempfile", + "wait-timeout", +] + +[[package]] +name = "scoped_threadpool" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d51f5df5af43ab3f1360b429fa5e0152ac5ce8c0bd6485cae490332e96846a8" + +[[package]] +name = "scopeguard" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" + +[[package]] +name = "semver" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f301af10236f6df4160f7c3f04eec6dbc70ace82d23326abad5edee88801c6b6" +dependencies = [ + "semver-parser", +] + +[[package]] +name = "semver-parser" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0bef5b7f9e0df16536d3961cfb6e84331c065b4066afb39768d0e319411f7" +dependencies = [ + "pest", +] + +[[package]] +name = "serde" +version = "1.0.152" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb7d1f0d3021d347a83e556fc4683dea2ea09d87bccdf88ff5c12545d89d5efb" + +[[package]] +name = "slab" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4614a76b2a8be0058caa9dbbaf66d988527d86d003c11a94fbd335d7661edcef" +dependencies = [ + "autocfg", +] + +[[package]] +name = "smallvec" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" + +[[package]] +name = "spin" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f6002a767bff9e83f8eeecf883ecb8011875a21ae8da43bffb817a57e78cc09" +dependencies = [ + "lock_api", +] + +[[package]] +name = "syn" +version = "1.0.107" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f4064b5b16e03ae50984a5a8ed5d4f8803e6bc1fd170a3cda91a1be4b18e3f5" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "system-deps" +version = "6.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2955b1fe31e1fa2fbd1976b71cc69a606d7d4da16f6de3333d0c92d51419aeff" +dependencies = [ + "cfg-expr", + "heck", + "pkg-config", + "toml", + "version-compare", +] + +[[package]] +name = "tempfile" +version = "3.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cdb1ef4eaeeaddc8fbd371e5017057064af0911902ef36b39801f67cc6d79e4" +dependencies = [ + "cfg-if", + "fastrand", + "libc", + "redox_syscall", + "remove_dir_all", + "winapi", +] + +[[package]] +name = "thiserror" +version = "1.0.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a9cd18aa97d5c45c6603caea1da6628790b37f7a34b6ca89522331c5180fed0" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fb327af4685e4d03fa8cbcf1716380da910eeb2bb8be417e7f9fd3fb164f36f" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "threadpool" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d050e60b33d41c19108b32cea32164033a9013fe3b46cbd4457559bfbf77afaa" +dependencies = [ + "num_cpus", +] + +[[package]] +name = "tiff" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7449334f9ff2baf290d55d73983a7d6fa15e01198faef72af07e2a8db851e471" +dependencies = [ + "flate2", + "jpeg-decoder", + "weezl", +] + +[[package]] +name = "toml" +version = "0.5.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1333c76748e868a4d9d1017b5ab53171dfd095f70c712fdb4653a406547f598f" +dependencies = [ + "serde", +] + +[[package]] +name = "ucd-trie" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e79c4d996edb816c91e4308506774452e55e95c3c9de07b6729e17e15a5ef81" + +[[package]] +name = "unicode-ident" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84a22b9f218b40614adcb3f4ff08b703773ad44fa9423e4e0d346d5db86e4ebc" + +[[package]] +name = "version-compare" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "579a42fc0b8e0c63b76519a339be31bed574929511fa53c1a3acae26eb258f29" + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[package]] +name = "wait-timeout" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f200f5b12eb75f8c1ed65abd4b2db8a6e1b138a20de009dacee265a2498f3f6" +dependencies = [ + "libc", +] + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasm-bindgen" +version = "0.2.83" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eaf9f5aceeec8be17c128b2e93e031fb8a4d469bb9c4ae2d7dc1888b26887268" +dependencies = [ + "cfg-if", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.83" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c8ffb332579b0557b52d268b91feab8df3615f265d5270fec2a8c95b17c1142" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.83" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "052be0f94026e6cbc75cdefc9bae13fd6052cdcaf532fa6c45e7ae33a1e6c810" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.83" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07bc0c051dc5f23e307b13285f9d75df86bfdf816c5721e573dec1f9b8aa193c" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.83" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c38c045535d93ec4f0b4defec448e4291638ee608530863b1e2ba115d4fff7f" + +[[package]] +name = "weezl" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9193164d4de03a926d909d3bc7c30543cecb35400c02114792c2cae20d5e2dbb" + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" diff --git a/hex-grid/Cargo.toml b/hex-grid/Cargo.toml new file mode 100644 index 0000000..dae2b5f --- /dev/null +++ b/hex-grid/Cargo.toml @@ -0,0 +1,17 @@ +[package] +name = "hex-grid" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +cairo-rs = "0.16" +gio = "0.16" +glib = "0.16" +gtk = { version = "0.5", package = "gtk4" } +coordinates = { path = "../coordinates" } +image = { version = "0.24" } + +[build-dependencies] +glib-build-tools = "0.16" diff --git a/hex-grid/build.rs b/hex-grid/build.rs new file mode 100644 index 0000000..4c6ea61 --- /dev/null +++ b/hex-grid/build.rs @@ -0,0 +1,7 @@ +fn main() { + glib_build_tools::compile_resources( + "resources", + "resources/resources.gresources.xml", + "com.luminescent-dreams.hex-grid.gresource", + ); +} diff --git a/hex-grid/resources/main.glade b/hex-grid/resources/main.glade new file mode 100644 index 0000000..1b7442b --- /dev/null +++ b/hex-grid/resources/main.glade @@ -0,0 +1,99 @@ + + + + diff --git a/hex-grid/resources/map.txt b/hex-grid/resources/map.txt new file mode 100644 index 0000000..25a3e5c --- /dev/null +++ b/hex-grid/resources/map.txt @@ -0,0 +1,37 @@ +[0, 0] m +[-3, 2] sw +[1, -2] g +[0, 3] g +[2, 1] g +[0, -2] g +[-1, 0] g +[-2, 2] g +[3, -3] sw +[1, 2] g +[1, 1] d +[2, -2] b +[-3, 0] sw +[-2, 0] g +[2, -3] sw +[-1, -1] g +[-2, 3] sw +[1, -3] sw +[-3, 3] sw +[-1, 1] g +[1, 0] g +[0, 1] g +[-1, 2] s +[1, -1] g +[2, -1] g +[0, -3] sw +[0, 2] g +[3, 0] sw +[-1, 3] sw +[0, -1] g +[3, -1] sw +[-3, 1] sw +[2, 0] g +[-2, 1] g +[3, -2] sw +[-1, -2] sw +[-2, -1] dw diff --git a/hex-grid/resources/resources.gresources.xml b/hex-grid/resources/resources.gresources.xml new file mode 100644 index 0000000..30f14bd --- /dev/null +++ b/hex-grid/resources/resources.gresources.xml @@ -0,0 +1,8 @@ + + + + main.glade + terrain.ppm + map.txt + + diff --git a/hex-grid/resources/terrain.ppm b/hex-grid/resources/terrain.ppm new file mode 100644 index 0000000000000000000000000000000000000000..d9f739b9672bc869d6480a770a3b22c049654499 GIT binary patch literal 314826 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 literal 0 HcmV?d00001 diff --git a/hex-grid/src/main.rs b/hex-grid/src/main.rs new file mode 100644 index 0000000..1a1d860 --- /dev/null +++ b/hex-grid/src/main.rs @@ -0,0 +1,333 @@ +use cairo::{Context, Path}; +use coordinates::{hex_map::parse_data, AxialAddr}; +use gio::resources_lookup_data; +use glib::{subclass::InitializingObject, Object}; +use gtk::{ + gdk_pixbuf::Pixbuf, gio, prelude::*, subclass::prelude::*, Application, CompositeTemplate, + DrawingArea, Label, +}; +use image::io::Reader as ImageReader; +use std::{cell::RefCell, io::Cursor, rc::Rc}; + +const APP_ID: &'static str = "com.luminescent-dreams.hex-grid"; +const HEX_RADIUS: f64 = 50.; +const MAP_RADIUS: usize = 3; +const DRAWING_ORIGIN: (f64, f64) = (1024. / 2., 768. / 2.); + +#[derive(Clone, Debug)] +enum Tile { + Empty, + Mountain, + Grasslands, + ShallowWater, + DeepWater, + Badlands, + Desert, + Swamp, +} + +impl Tile { + fn color(&self) -> (f64, f64, f64) { + match self { + Self::Empty => (0., 0., 0.), + Self::Mountain => (0.5, 0.5, 0.5), + Self::Grasslands => (0., 1., 0.), + Self::ShallowWater => (0.5, 0.5, 1.), + Self::DeepWater => (0., 0., 1.), + Self::Badlands => (0.5, 0.25, 0.), + Self::Desert => (1., 1., 0.), + Self::Swamp => (0., 0.25, 0.), + } + } +} + +impl Default for Tile { + fn default() -> Self { + Self::Empty + } +} + +impl From<&str> for Tile { + fn from(s: &str) -> Self { + match s { + "m" => Self::Mountain, + "g" => Self::Grasslands, + "sw" => Self::ShallowWater, + "dw" => Self::DeepWater, + "b" => Self::Badlands, + "d" => Self::Desert, + "s" => Self::Swamp, + _ => Self::Empty, + } + } +} + +impl From for Tile { + fn from(s: String) -> Self { + Self::from(s.as_ref()) + } +} + +fn main() { + gio::resources_register_include!("com.luminescent-dreams.hex-grid.gresource") + .expect("Failed to register resources"); + + let app = Application::builder().application_id(APP_ID).build(); + + app.connect_activate(|app| { + let window = HexGridWindow::new(app); + window.present(); + }); + + app.run(); +} + +#[derive(CompositeTemplate, Default)] +#[template(resource = "/com/luminescent-dreams/hex-grid/main.glade")] +pub struct HexGridWindowPrivate { + #[template_child] + pub drawing_area: TemplateChild, + #[template_child] + pub hex_address: TemplateChild