From 6b3f2b643a3efdb8481aeec3b8436a1aec0d2c5d Mon Sep 17 00:00:00 2001 From: Josh Goldberg Date: Mon, 23 Sep 2019 13:36:31 +0900 Subject: [PATCH] Added arrow preservation and varying text column widths (#115) --- package-lock.json | 230 ++++++++++++++++++++++----------------------- package.json | 2 +- src/IMenuGraphr.ts | 27 +++++- src/MenuGraphr.ts | 57 ++++++++--- 4 files changed, 182 insertions(+), 134 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4a26dc8..862a861 100644 --- a/package-lock.json +++ b/package-lock.json @@ -474,14 +474,12 @@ "dev": true }, "areaspawnr": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/areaspawnr/-/areaspawnr-0.7.2.tgz", - "integrity": "sha512-RyktgexSwZ/dVQs3M+m7EadXaAPjrvoQxpiiI7Wow7Hj9EwmTBx7dYEXRaWze1pELvIRmy8HPJ2lgqcNodnr9g==", + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/areaspawnr/-/areaspawnr-0.7.4.tgz", + "integrity": "sha512-OB1l+Q7VeizyZKCpo0qGgiUQIWN8J+ijw9yUqct+LH1zOZ3oT9av7GIqllQkvR9ohADjJ3mpwLZ2P3sUqVL3Zg==", "requires": { - "itemsholdr": "^0.7.0", - "mapscreatr": "^0.7.1", - "mapscreenr": "^0.7.0", - "objectmakr": "^0.7.0" + "mapscreatr": "^0.7.6", + "mapscreenr": "^0.7.3" } }, "argparse": { @@ -617,9 +615,9 @@ "dev": true }, "audioplayr": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/audioplayr/-/audioplayr-0.7.3.tgz", - "integrity": "sha512-uKa707YKUFnyAJfiyQNjpg7T8NZIpmw1jrUjB9J98A1sY+LvCLX7sKCA/qIgAcK8K3fq25WVdzqJG1ZJ9+Yhaw==" + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/audioplayr/-/audioplayr-0.7.5.tgz", + "integrity": "sha512-yugmRfYAlYbxu6IUXk4JwkM322MvLzpl/g+XndAXZVGSfjTrbzfTkwtfzjEEr0SzPR81eRhC1xd2HfMTastNmg==" }, "babel-code-frame": { "version": "6.26.0", @@ -675,9 +673,9 @@ } }, "babyioc": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/babyioc/-/babyioc-0.7.4.tgz", - "integrity": "sha512-DNG7x0S0K8CbWEiFwyP1JGGYmfg5QTuFNKEEO7VwYnYpXe4W/v6uSD/PQM9xFfY6BBSCg6X5T2vVMsbKXPWWEA==" + "version": "0.7.7", + "resolved": "https://registry.npmjs.org/babyioc/-/babyioc-0.7.7.tgz", + "integrity": "sha512-Yrt19nysG5ed6mrYEc+WYTex3TrASlsXmU1ROj3UHVtlNiKz7qk8iuDyez3BK2GCKR5qabnPbccj/KBkxgizxg==" }, "balanced-match": { "version": "1.0.0", @@ -1070,9 +1068,9 @@ } }, "changelinr": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/changelinr/-/changelinr-0.7.2.tgz", - "integrity": "sha512-GVjB0/yy5v4gehiLQ+zhyq0cnbzYpNw1mFxGZBbcoY9L4Tw1O1bYbtW/0q5yKr0qnC1+02Lt0+kSPiN2UK67bQ==" + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/changelinr/-/changelinr-0.7.4.tgz", + "integrity": "sha512-hfKToYz/QHmlgD36EFH4gDu9zoaKPFm/IfU3eP9om7nMWtPQyhGzK++35RX72uFTg1LYIHspZPcAeIR9xQ3YxA==" }, "check-error": { "version": "1.0.2", @@ -1172,11 +1170,11 @@ } }, "classcyclr": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/classcyclr/-/classcyclr-0.7.3.tgz", - "integrity": "sha512-0jO+bJ64CyMPUB79wvQaYDczyNz/6LwPiLH1DmHDk2bPUHfHB18qTU3qmWNux1dA6IBW7J6QiaCsHH4gQsGWfA==", + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/classcyclr/-/classcyclr-0.7.5.tgz", + "integrity": "sha512-ELfbAbA5AhYbAhXM06zzZobU8mI1LESMxUFcXqMtqT1aJAvbtpm4boW+JZPycfQHEL7ESDB4dpIq9MxdjvRXrw==", "requires": { - "timehandlr": "^0.7.3" + "timehandlr": "^0.7.4" } }, "cli-boxes": { @@ -1595,9 +1593,9 @@ "dev": true }, "devicelayr": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/devicelayr/-/devicelayr-0.7.4.tgz", - "integrity": "sha512-bJCF0yW0gWVxjMDUhUL2mXTZpuz6EdX0ClNiX5bDmkIgj2IHmc7mpPL9Uu3uhStzrW8a9XRgkTPyxH7rKz9FJw==", + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/devicelayr/-/devicelayr-0.7.6.tgz", + "integrity": "sha512-y8sA8QCanGufXZiXEWXCrQnW1HCbyDWKOY/cJJat6DAZqWtgdyMInM453aL97oA4uAHyy7nGKSGU5s67yx6Niw==", "requires": { "inputwritr": "^0.7.2" } @@ -1653,33 +1651,40 @@ } }, "eightbittr": { - "version": "0.7.21", - "resolved": "https://registry.npmjs.org/eightbittr/-/eightbittr-0.7.21.tgz", - "integrity": "sha512-DtKiyM0I6tS0E6kCnBQVFX/EVijIm2YMn8j8viSYbjN+Qoc9AsavSQhY9Pb+eKFwtGVUt7maA5+rK3bjnsMuNQ==", + "version": "0.7.28", + "resolved": "https://registry.npmjs.org/eightbittr/-/eightbittr-0.7.28.tgz", + "integrity": "sha512-ZJB5ROY8U6IKZ9mbFqYL806lSzRshvO6uTOhFaeVJ2hqv5TXc/HW4jIXM7+TOSuvpdJ48+HiACFMWwOzeQthXg==", "requires": { - "areaspawnr": "^0.7.2", - "audioplayr": "^0.7.3", - "babyioc": "^0.7.4", - "changelinr": "^0.7.2", - "classcyclr": "^0.7.3", - "devicelayr": "^0.7.4", - "fpsanalyzr": "^0.7.6", - "frametickr": "^0.7.6", - "groupholdr": "^0.7.7", - "inputwritr": "^0.7.2", - "itemsholdr": "^0.7.8", - "mapscreatr": "^0.7.5", - "mapscreenr": "^0.7.2", - "modattachr": "^0.7.6", - "numbermakr": "^0.7.1", - "objectmakr": "^0.7.5", - "pixeldrawr": "^0.7.5", - "pixelrendr": "^0.7.2", - "quadskeepr": "^0.7.2", - "sceneplayr": "^0.7.1", - "thinghittr": "^0.7.1", - "timehandlr": "^0.7.4", - "touchpassr": "^0.7.2" + "areaspawnr": "^0.7.4", + "audioplayr": "^0.7.5", + "babyioc": "^0.7.7", + "changelinr": "^0.7.4", + "classcyclr": "^0.7.5", + "devicelayr": "^0.7.6", + "fpsanalyzr": "^0.7.8", + "frametickr": "^0.7.8", + "groupholdr": "^0.7.11", + "inputwritr": "^0.7.4", + "itemsholdr": "^0.7.10", + "mapscreatr": "^0.7.7", + "mapscreenr": "^0.7.4", + "modattachr": "^0.7.8", + "numbermakr": "^0.7.3", + "objectmakr": "^0.7.7", + "pixeldrawr": "^0.7.8", + "pixelrendr": "^0.7.4", + "quadskeepr": "^0.7.4", + "sceneplayr": "^0.7.2", + "thinghittr": "^0.7.2", + "timehandlr": "^0.7.5", + "touchpassr": "^0.7.3" + }, + "dependencies": { + "timehandlr": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/timehandlr/-/timehandlr-0.7.5.tgz", + "integrity": "sha512-25nfzMhPiJcZ6E0Yx5GD1bdic8yplzHmYb4hQG9jfVwJfmP9ATLwakkIkQHKlEviXSdP6JyLuShG4rb85EGkSQ==" + } } }, "elliptic": { @@ -2219,9 +2224,9 @@ "dev": true }, "fpsanalyzr": { - "version": "0.7.6", - "resolved": "https://registry.npmjs.org/fpsanalyzr/-/fpsanalyzr-0.7.6.tgz", - "integrity": "sha512-7p1md4lW7fthkKCxAPcur9D51RNicXb6ccefy4Sd2OrG0ljqpjRwpaRPgbYniJg9fylr8VXrucLpakaW1R+9Rg==" + "version": "0.7.8", + "resolved": "https://registry.npmjs.org/fpsanalyzr/-/fpsanalyzr-0.7.8.tgz", + "integrity": "sha512-EVKOjj7wZ8RQwhCxee9yZif9pVQJmzdQeqQCoKgGmbxbbOZFdI/Q3KDI7D08VbjS9SDo7xUN3rd8r9B1U/Bgjw==" }, "fragment-cache": { "version": "0.2.1", @@ -2233,9 +2238,9 @@ } }, "frametickr": { - "version": "0.7.6", - "resolved": "https://registry.npmjs.org/frametickr/-/frametickr-0.7.6.tgz", - "integrity": "sha512-cFrDocuOc+lDW1KKKuRabrAazR1jb9GUw/cj485Y7VEG18NMDJgcs+2Or6eDwBTg9PpUKyQJ6hCQGOrs96sTxg==" + "version": "0.7.8", + "resolved": "https://registry.npmjs.org/frametickr/-/frametickr-0.7.8.tgz", + "integrity": "sha512-zWq++XEqI6udjUR8z17Xm5TToYkAt2RAR9cn0LRkhMFf8l8UyU0Zl9GHA3PLuO1RIb069G6ffIe4MpecJleEZg==" }, "from2": { "version": "2.3.0", @@ -2955,9 +2960,9 @@ "dev": true }, "groupholdr": { - "version": "0.7.7", - "resolved": "https://registry.npmjs.org/groupholdr/-/groupholdr-0.7.7.tgz", - "integrity": "sha512-KABbMCtOBC6AnSJY74k3UvyMV6Gsvbcmkk5EgBdfSQ8wTS6r1sHeMV6VjP3xJKjZSvbKvMPv6831f2vd7gR4eA==" + "version": "0.7.11", + "resolved": "https://registry.npmjs.org/groupholdr/-/groupholdr-0.7.11.tgz", + "integrity": "sha512-BiTVoY0EvWaX8MIIYbf10Or8/FIJH6nLqMfxHKY/wxta7T2SlMGF9/NOLt9uwhR0I9g7lQNKSJX4hi1e8dqejQ==" }, "growl": { "version": "1.10.5", @@ -3207,9 +3212,9 @@ "dev": true }, "inputwritr": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/inputwritr/-/inputwritr-0.7.2.tgz", - "integrity": "sha512-iuV+hSwmpD/LQsHVbRoFo4qfBryKHFiRvhbdoMQVLH0LGKqzjVSUOPOnbhYk9j+lw6NWv/3niHAo2P77O2NllQ==" + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/inputwritr/-/inputwritr-0.7.4.tgz", + "integrity": "sha512-nOJ3kcm2+0H3UftvwYVXqBY6vabx6Bgh50I/TwOkTQbuCBcYzeFK9213uhhg/dGVaWxjnWT56eZNmWlqCgZyEw==" }, "interpret": { "version": "1.2.0", @@ -3530,9 +3535,9 @@ } }, "itemsholdr": { - "version": "0.7.8", - "resolved": "https://registry.npmjs.org/itemsholdr/-/itemsholdr-0.7.8.tgz", - "integrity": "sha512-/Pg7mbOBgDeAqqZWT49XUxzTVucptl7A6EALXGFpnRtchj6/6hjlkgdNbEMscDNVnvs3g8dMoqSsg/LADZO+8A==" + "version": "0.7.10", + "resolved": "https://registry.npmjs.org/itemsholdr/-/itemsholdr-0.7.10.tgz", + "integrity": "sha512-o+f6yPRfy2NxjKiGSoAjyuA/eiGWxdBuQmPgpvsjTFzA+j2xqvN3PJGnJpzwU80piuLf7SSxS04GLexoY/nk2A==" }, "jju": { "version": "1.4.0", @@ -3860,18 +3865,18 @@ } }, "mapscreatr": { - "version": "0.7.5", - "resolved": "https://registry.npmjs.org/mapscreatr/-/mapscreatr-0.7.5.tgz", - "integrity": "sha1-JDPb9DnKfcWfEiW07G/rnWI0wTQ=", + "version": "0.7.7", + "resolved": "https://registry.npmjs.org/mapscreatr/-/mapscreatr-0.7.7.tgz", + "integrity": "sha512-40cSYa5PDSrXzf4fIDdNG3QC6ru4M0qbElRcKjksll2wSUN99Wri1HdBV8jte+IH/qudIiXzb902o2qTWrhi6w==", "requires": { - "itemsholdr": "^0.7.4", - "objectmakr": "^0.7.4" + "itemsholdr": "^0.7.8", + "objectmakr": "^0.7.5" } }, "mapscreenr": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/mapscreenr/-/mapscreenr-0.7.2.tgz", - "integrity": "sha512-l2vNEns0G2QvnRzAdiBPDaBdbwCiOrFQrBlMntAq1tQwDsUJRi2FoBivfJy06QIJsJbEslqf5iOzvTxa1CWpgg==" + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/mapscreenr/-/mapscreenr-0.7.4.tgz", + "integrity": "sha512-tWEBiEYchT7QdgxmyebzcpWMqePd+dx2xt42+SoaZo9M74KWwsMTxwoX3AcDmL2SXuaMLWw3lx3D5BeDDCEj1Q==" }, "marked": { "version": "0.4.0", @@ -4186,9 +4191,9 @@ } }, "modattachr": { - "version": "0.7.6", - "resolved": "https://registry.npmjs.org/modattachr/-/modattachr-0.7.6.tgz", - "integrity": "sha512-U1Hx7qJi4F6glDrzKYRkJPHqiB1rzao3yyRSrvc5HHZacRrLcNV/dyelL/bte86Nj0iFQc30xqUYQGiKMbyujg==", + "version": "0.7.8", + "resolved": "https://registry.npmjs.org/modattachr/-/modattachr-0.7.8.tgz", + "integrity": "sha512-kwbBcr50gZyCHr6a+WZUvhFxTUot5LwArGrvjkizBRrPqStf+E1yn1rLfxhZRXPOrVxWeDZA/stoq21saFya9g==", "requires": { "itemsholdr": "^0.7.8" } @@ -4515,9 +4520,9 @@ "dev": true }, "numbermakr": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/numbermakr/-/numbermakr-0.7.1.tgz", - "integrity": "sha512-1sO377JDK3ZRDKutkixkt6to3FU71w3C0HZnIiXkReaQR5JfXqJmJmm9ONAUpf7jUCZeioKhJKkYdDY/pdPk5w==" + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/numbermakr/-/numbermakr-0.7.3.tgz", + "integrity": "sha512-NBX1OcbyQFdtp98Bb2iTm+r6xkub2qPMV5A6y2G3vjU4clkK1KugSEBpEeQpfmGXPjl4Yr1kQ33zO/2ai1YplQ==" }, "object-assign": { "version": "4.1.1", @@ -4603,9 +4608,9 @@ } }, "objectmakr": { - "version": "0.7.5", - "resolved": "https://registry.npmjs.org/objectmakr/-/objectmakr-0.7.5.tgz", - "integrity": "sha512-ugCb3/Gm7kG1u7/TLkQpqGSmP4Dab/JTtRUWMmFANA+xIFpnHzRZcH68lwN18rv7W7WCwrsoeAvYdpxTA28FoA==" + "version": "0.7.7", + "resolved": "https://registry.npmjs.org/objectmakr/-/objectmakr-0.7.7.tgz", + "integrity": "sha512-d3mi0cbpFcjA1Cb9KlmVIMxSu8/1lLI1aGKA1Q7Zq+oEu68N2FN6ftIXWsXQne5vWDMIftFg9Wg9mlTtLksitA==" }, "once": { "version": "1.4.0", @@ -4879,17 +4884,17 @@ "dev": true }, "pixeldrawr": { - "version": "0.7.6", - "resolved": "https://registry.npmjs.org/pixeldrawr/-/pixeldrawr-0.7.6.tgz", - "integrity": "sha512-XPomedoY9K9l1UZi/fDmYfMKBf74hsVGDVldbZf7GpmD+9N9+0WQYSTM6OCveyqnJL1s4LsRvGH3SbiqUKZshA==", + "version": "0.7.8", + "resolved": "https://registry.npmjs.org/pixeldrawr/-/pixeldrawr-0.7.8.tgz", + "integrity": "sha512-hSvH9wBDiKXxEAnTMtXsTbXwQe69YdBBLILvh/1BK0jtDBPF9YqGvgB34FoYMKtQXumifuwLR9x1B2llFghpUg==", "requires": { "pixelrendr": "^0.7.2" } }, "pixelrendr": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/pixelrendr/-/pixelrendr-0.7.2.tgz", - "integrity": "sha512-gtHLoQUk9y1NvZyCptko5usLh2pjpCpUuAPu69qJnR8K2U+otFexYG+YW5y2r19xVc9aPvG+IvIW2FQSbd/GGQ==", + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/pixelrendr/-/pixelrendr-0.7.4.tgz", + "integrity": "sha512-1qir6LxerxwsKEgZthKjcqzS87RzUKjFv/ElvFrsei+qkNNPUX5q5VygweqLB12QzHkgcdh61Kjs9Gns29zPZA==", "requires": { "changelinr": "^0.7.2", "stringfilr": "^0.7.5" @@ -5061,9 +5066,9 @@ } }, "quadskeepr": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/quadskeepr/-/quadskeepr-0.7.2.tgz", - "integrity": "sha512-JC19tVp4DTrMe3M2YiKi3K4BMshUOY7Hl0UvVAUR3DbnTThiVJw5kuuvHhGU6gAoVTHZG2L3ZeumbXB/Kz2fnQ==" + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/quadskeepr/-/quadskeepr-0.7.4.tgz", + "integrity": "sha512-/lRu5qfvahm1J0CzOWBv81dJPYKZmjGXxBl/2BjPx5+E2lsEiZ+Ur8STfTWpE3ZyATl0jBB/qeSzPNmlMmfilg==" }, "querystring": { "version": "0.2.0", @@ -5396,9 +5401,9 @@ } }, "sceneplayr": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/sceneplayr/-/sceneplayr-0.7.1.tgz", - "integrity": "sha512-mxbSHCdS80NKmegCbY2i3E5eEO66Rf9nd6Y7kNrijZBZGpctkM1gVDesIwTnePNwh91Zn+OviVLW9jKfTdWdqA==" + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/sceneplayr/-/sceneplayr-0.7.3.tgz", + "integrity": "sha512-PJZccJQiO1LAssg86obUdcFAbA4D0PjtmpGEnyYTFt/WqabxhxrGejOj2TqH6fvoibHTll9wQFkbEWjZ1zVTxQ==" }, "schema-utils": { "version": "1.0.0", @@ -5917,9 +5922,9 @@ } }, "stringfilr": { - "version": "0.7.5", - "resolved": "https://registry.npmjs.org/stringfilr/-/stringfilr-0.7.5.tgz", - "integrity": "sha512-ehSj/GoA+w2HvJvbgO+DFLO1gHm60a06YEspSTi4onFoujgQOVeMqXYiNhQiBEmoTYobTGh6xKO07jbX5E+/EA==" + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/stringfilr/-/stringfilr-0.7.6.tgz", + "integrity": "sha512-7EOhzKSdticTewxqVQhrjSmQ+euNU5AXv8hrhtSBz9IXbQZAWVujDnd/6oIH2sA5T82elAJJwlwovMxTuRx7zg==" }, "strip-ansi": { "version": "4.0.0", @@ -6076,26 +6081,11 @@ } }, "thinghittr": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/thinghittr/-/thinghittr-0.7.1.tgz", - "integrity": "sha512-VlG/frka6XmWHTAUg0Qc9dIg6qwrifsFJDHl2SDt50unW/02DGqKCM/AXD3RIuivLU3uE6KRcbc5m5wZm+jz8g==", + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/thinghittr/-/thinghittr-0.7.2.tgz", + "integrity": "sha512-oeOd0zReLr30UZGs3ibx+ugCtZlKkzFjSN68zR9VbLBuRimCSOp+ITX1T7ogGIMPEVFNmVN1GtAKw7AmotEPpQ==", "requires": { - "quadskeepr": "^0.5.2" - }, - "dependencies": { - "objectmakr": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/objectmakr/-/objectmakr-0.5.3.tgz", - "integrity": "sha1-Q/8kEAJBsdtIfl9ff7Njoymcfss=" - }, - "quadskeepr": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/quadskeepr/-/quadskeepr-0.5.3.tgz", - "integrity": "sha1-TzleYLBuWJiL7Yc8mVXMg/0vCPg=", - "requires": { - "objectmakr": "^0.5.3" - } - } + "quadskeepr": "^0.7.3" } }, "through2": { @@ -6183,12 +6173,12 @@ } }, "touchpassr": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/touchpassr/-/touchpassr-0.7.2.tgz", - "integrity": "sha512-IGnRVlfPSDdNNtqc2vNOfMes4PS2ho0QtHJ6Jmrs3AoGl8P2KY1NVWbPJiDGm2Z3IBp6oT2+xEQi0Twx0JwKcQ==", + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/touchpassr/-/touchpassr-0.7.3.tgz", + "integrity": "sha512-MDJ5UBVF5VlfqzCTmuLwJzcBf7k82HuuMo+fkkx0r2LFU+TY19s2hxDaeApfVQov4fGi5rniPYLHKzgB8y2+QQ==", "requires": { - "inputwritr": "^0.7.0", - "itemsholdr": "^0.7.0" + "inputwritr": "^0.7.2", + "itemsholdr": "^0.7.8" } }, "tree-kill": { diff --git a/package.json b/package.json index f956f50..3bac046 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "url": "https://github.com/FullScreenShenanigans/MenuGraphr/issues" }, "dependencies": { - "eightbittr": "^0.7.21", + "eightbittr": "^0.7.28", "timehandlr": "^0.7.4" }, "description": "In-game menu and dialog creation and management for EightBittr.", diff --git a/src/IMenuGraphr.ts b/src/IMenuGraphr.ts index 5c2f1ff..b242b73 100644 --- a/src/IMenuGraphr.ts +++ b/src/IMenuGraphr.ts @@ -205,6 +205,11 @@ export interface IListMenuSchema extends IMenuSchema { */ saveIndex?: boolean; + /** + * Whether to register the "A" key on every index shift. + */ + selectIndex?: boolean; + /** * Names of menus whose whose selected indices that should be cleared when this menu is deleted. */ @@ -571,6 +576,11 @@ export interface IListMenu extends IListMenuBase, IListMenuSchema, IMenu { */ optionChildren: any[]; + /** + * Class names for the menu's arrow when active or inactive, it it shouldn't be hidden when inactive. + */ + preserveArrow?: IListMenuPreserveArrow; + /** * A summary of the menu's progress through its list. */ @@ -584,7 +594,7 @@ export interface IListMenu extends IListMenuBase, IListMenuSchema, IMenu { /** * How wide each column of text should be in the grid, if not text width. */ - textColumnWidth?: number; + textColumnWidth?: number | number[]; /** * How wide this is. @@ -704,6 +714,21 @@ export interface IListMenuOptions { selectedIndex?: [number, number]; } +/** + * Class names for the menu's arrow when active or inactive, it it shouldn't be hidden when inactive. + */ +export interface IListMenuPreserveArrow { + /** + * Class name to add to the arrow when the menu is active. + */ + classActive: string; + + /** + * Class name to add to the arrow when the menu is inactive. + */ + classInactive: string; +} + /** * A summary of the menu's progress through its list. */ diff --git a/src/MenuGraphr.ts b/src/MenuGraphr.ts index 8a32fe5..0188b7e 100644 --- a/src/MenuGraphr.ts +++ b/src/MenuGraphr.ts @@ -517,7 +517,9 @@ export class MenuGraphr implements IMenuGraphr { if (!menu.singleColumnList && y > menu.bottom - textHeight + 1) { y = top; - left += menu.textColumnWidth || textWidth; + left += menu.textColumnWidth instanceof Array + ? menu.textColumnWidth[option.columnNumber] + : menu.textColumnWidth || textWidth; column = []; menu.grid.push(column); } @@ -606,7 +608,17 @@ export class MenuGraphr implements IMenuGraphr { menu.arrow = character = this.eightBitter.objectMaker.make("CharArrowRight"); menu.children.push(character); - character.hidden = (this.activeMenu !== menu); + + if (menu.preserveArrow) { + this.eightBitter.graphics.classes.addClass( + menu.arrow, + this.activeMenu === menu + ? menu.preserveArrow.classActive + : menu.preserveArrow.classInactive, + ); + } else { + character.hidden = this.activeMenu !== menu; + } option = menu.grid[menu.selectedIndex[0]][menu.selectedIndex[1]]; @@ -639,9 +651,9 @@ export class MenuGraphr implements IMenuGraphr { * @param dy How far along the menu's grid to shift vertically. */ public shiftSelectedIndex(name: string, dx: number, dy: number): void { - const menu: IListMenu = this.getExistingMenu(name) as IListMenu; - const textProperties: any = this.eightBitter.objectMaker.getPrototypeOf("Text"); - const textPaddingY: number = menu.textPaddingY || textProperties.paddingY || 0; + const menu = this.getExistingMenu(name) as IListMenu; + const textProperties = this.eightBitter.objectMaker.getPrototypeOf("Text"); + const textPaddingY = menu.textPaddingY || textProperties.paddingY || 0; let x: number; let y: number; @@ -670,7 +682,7 @@ export class MenuGraphr implements IMenuGraphr { menu.selectedIndex[0] = x; menu.selectedIndex[1] = y; - const option: IGridCell = this.getMenuSelectedOption(name); + const option = this.getMenuSelectedOption(name); if (menu.scrollingItems) { this.scrollListThings(name, dy, textPaddingY); @@ -682,6 +694,10 @@ export class MenuGraphr implements IMenuGraphr { if (menu.saveIndex) { this.eightBitter.itemsHolder.setItem(name, menu.selectedIndex); } + + if (menu.selectIndex) { + this.registerA(); + } } /** @@ -692,8 +708,8 @@ export class MenuGraphr implements IMenuGraphr { * @param y The new vertical value for the index. */ public setSelectedIndex(name: string, x: number, y: number): void { - const menu: IListMenu = this.getExistingMenu(name) as IListMenu; - const selectedIndex: [number, number] = menu.selectedIndex; + const menu = this.getExistingMenu(name) as IListMenu; + const selectedIndex = menu.selectedIndex; this.shiftSelectedIndex(name, x - selectedIndex[0], y - selectedIndex[1]); } @@ -1231,9 +1247,18 @@ export class MenuGraphr implements IMenuGraphr { * @param name The name of the menu. */ private activateMenuList(name: string): void { - const menu: IListMenu = this.menus[name] as IListMenu; + const menu = this.menus[name] as IListMenu; + if (!menu || !menu.arrow) { + return; + } - if (menu && menu.arrow) { + if (menu.preserveArrow) { + this.eightBitter.graphics.classes.switchClass( + menu.arrow, + menu.preserveArrow.classInactive, + menu.preserveArrow.classActive, + ); + } else { menu.arrow.hidden = false; } } @@ -1244,9 +1269,17 @@ export class MenuGraphr implements IMenuGraphr { * @param name The name of the menu. */ private deactivateMenuList(name: string): void { - const menu: IListMenu = this.menus[name] as IListMenu; + const menu = this.menus[name] as IListMenu; + if (!menu || !menu.arrow) { + return; + } - if (menu && menu.arrow) { + if (menu.preserveArrow) { + this.eightBitter.graphics.classes.switchClass( + menu.arrow, + menu.preserveArrow.classActive, + menu.preserveArrow.classInactive); + } else { menu.arrow.hidden = true; } }