From 79702f4c8f0801fced32961ddec77e42c868eddb Mon Sep 17 00:00:00 2001 From: assada Date: Wed, 12 Jun 2024 18:41:38 +0300 Subject: [PATCH] remove noble --- .../libraries/noble/.docs/.ldoc/config.ldoc | 26 - source/libraries/noble/.docs/.ldoc/ldoc.css | 524 ------- .../libraries/noble/.docs/.ldoc/ldoc.css.map | 9 - source/libraries/noble/.docs/.ldoc/ldoc.ltp | 299 ---- source/libraries/noble/.docs/.ldoc/ldoc.scss | 443 ------ .../noble/.docs/classes/NobleScene.html | 485 ------ .../noble/.docs/classes/NobleSprite.html | 290 ---- .../libraries/noble/.docs/classes/favicon.ico | Bin 294734 -> 0 bytes .../.docs/examples/SceneTemplate.lua.html | 264 ---- source/libraries/noble/.docs/favicon.ico | Bin 294734 -> 0 bytes source/libraries/noble/.docs/index.html | 142 -- source/libraries/noble/.docs/ldoc.css | 524 ------- source/libraries/noble/.docs/logo.png | Bin 1224 -> 0 bytes .../libraries/noble/.docs/modules/Ease.html | 176 --- .../noble/.docs/modules/Noble.Animation.html | 507 ------ .../noble/.docs/modules/Noble.Bonk.html | 188 --- .../noble/.docs/modules/Noble.GameData.html | 550 ------- .../noble/.docs/modules/Noble.Input.html | 617 -------- .../noble/.docs/modules/Noble.Menu.html | 928 ----------- .../noble/.docs/modules/Noble.Settings.html | 331 ---- .../noble/.docs/modules/Noble.Text.html | 313 ---- .../noble/.docs/modules/Noble.Transition.html | 1377 ----------------- .../.docs/modules/Noble.TransitionType.html | 240 --- .../libraries/noble/.docs/modules/Noble.html | 476 ------ .../libraries/noble/.docs/modules/favicon.ico | Bin 294734 -> 0 bytes .../modules.Noble.Transition.Imagetable.html | 92 -- ...dules.Noble.Transition.ImagetableMask.html | 92 -- source/libraries/noble/.gitattributes | 1 - source/libraries/noble/.github/FUNDING.yml | 13 - .../.github/ISSUE_TEMPLATE/bug_report.md | 23 - .../.github/ISSUE_TEMPLATE/feature_request.md | 23 - .../noble/.github/workflows/Documentation.yml | 60 - source/libraries/noble/.gitignore | 46 - source/libraries/noble/CODE_OF_CONDUCT.md | 43 - source/libraries/noble/LICENSE | 51 - source/libraries/noble/Noble.lua | 375 ----- source/libraries/noble/README.gif | Bin 224823 -> 0 bytes source/libraries/noble/README.md | 66 - .../assets/fonts/NobleSans-table-8-9.png | Bin 7324 -> 0 bytes .../noble/assets/fonts/NobleSans.fnt | 296 ---- .../fonts/SatchelRoughed-table-17-14.png | Bin 4767 -> 0 bytes .../noble/assets/fonts/SatchelRoughed.fnt | 97 -- .../BoltTransitionEnter-table-400-240.png | Bin 55860 -> 0 bytes .../BoltTransitionExit-table-400-240.png | Bin 64053 -> 0 bytes .../ImagetableTransition-table-400-240.png | Bin 138828 -> 0 bytes .../noble/assets/images/NobleRobotLogo.png | Bin 366 -> 0 bytes source/libraries/noble/libraries/Sequence.lua | 489 ------ source/libraries/noble/libraries/Signal.lua | 47 - .../noble/modules/Noble.Animation.lua | 293 ---- source/libraries/noble/modules/Noble.Bonk.lua | 108 -- .../noble/modules/Noble.GameData.lua | 327 ---- .../libraries/noble/modules/Noble.Input.lua | 333 ---- source/libraries/noble/modules/Noble.Menu.lua | 570 ------- .../noble/modules/Noble.Settings.lua | 158 -- source/libraries/noble/modules/Noble.Text.lua | 74 - .../noble/modules/Noble.Transition.lua | 208 --- .../Noble.Transition/CrossDissolve.lua | 26 - .../noble/modules/Noble.Transition/Cut.lua | 13 - .../noble/modules/Noble.Transition/Dip.lua | 37 - .../modules/Noble.Transition/DipToBlack.lua | 19 - .../modules/Noble.Transition/DipToWhite.lua | 19 - .../modules/Noble.Transition/Imagetable.lua | 131 -- .../Noble.Transition/ImagetableMask.lua | 83 - .../modules/Noble.Transition/MetroNexus.lua | 58 - .../modules/Noble.Transition/SlideOff.lua | 38 - .../modules/Noble.Transition/SlideOffDown.lua | 18 - .../modules/Noble.Transition/SlideOffLeft.lua | 18 - .../Noble.Transition/SlideOffRight.lua | 18 - .../modules/Noble.Transition/SlideOffUp.lua | 18 - .../modules/Noble.Transition/SlideOn.lua | 44 - .../modules/Noble.Transition/SlideOnDown.lua | 18 - .../modules/Noble.Transition/SlideOnLeft.lua | 18 - .../modules/Noble.Transition/SlideOnRight.lua | 18 - .../modules/Noble.Transition/SlideOnUp.lua | 18 - .../modules/Noble.Transition/Spotlight.lua | 100 -- .../Noble.Transition/SpotlightMask.lua | 99 -- .../Noble.Transition/WidgetSatchel.lua | 73 - source/libraries/noble/modules/NobleScene.lua | 242 --- .../libraries/noble/modules/NobleSprite.lua | 149 -- .../noble/templates/SceneTemplate.lua | 185 --- source/libraries/noble/utilities/Ease.lua | 81 - .../libraries/noble/utilities/Utilities.lua | 197 --- source/main.lua | 9 +- source/scenes/Menu.lua | 10 +- source/scripts/player.lua | 21 +- 85 files changed, 31 insertions(+), 14341 deletions(-) delete mode 100644 source/libraries/noble/.docs/.ldoc/config.ldoc delete mode 100644 source/libraries/noble/.docs/.ldoc/ldoc.css delete mode 100644 source/libraries/noble/.docs/.ldoc/ldoc.css.map delete mode 100644 source/libraries/noble/.docs/.ldoc/ldoc.ltp delete mode 100644 source/libraries/noble/.docs/.ldoc/ldoc.scss delete mode 100644 source/libraries/noble/.docs/classes/NobleScene.html delete mode 100644 source/libraries/noble/.docs/classes/NobleSprite.html delete mode 100644 source/libraries/noble/.docs/classes/favicon.ico delete mode 100644 source/libraries/noble/.docs/examples/SceneTemplate.lua.html delete mode 100644 source/libraries/noble/.docs/favicon.ico delete mode 100644 source/libraries/noble/.docs/index.html delete mode 100644 source/libraries/noble/.docs/ldoc.css delete mode 100644 source/libraries/noble/.docs/logo.png delete mode 100644 source/libraries/noble/.docs/modules/Ease.html delete mode 100644 source/libraries/noble/.docs/modules/Noble.Animation.html delete mode 100644 source/libraries/noble/.docs/modules/Noble.Bonk.html delete mode 100644 source/libraries/noble/.docs/modules/Noble.GameData.html delete mode 100644 source/libraries/noble/.docs/modules/Noble.Input.html delete mode 100644 source/libraries/noble/.docs/modules/Noble.Menu.html delete mode 100644 source/libraries/noble/.docs/modules/Noble.Settings.html delete mode 100644 source/libraries/noble/.docs/modules/Noble.Text.html delete mode 100644 source/libraries/noble/.docs/modules/Noble.Transition.html delete mode 100644 source/libraries/noble/.docs/modules/Noble.TransitionType.html delete mode 100644 source/libraries/noble/.docs/modules/Noble.html delete mode 100644 source/libraries/noble/.docs/modules/favicon.ico delete mode 100644 source/libraries/noble/.docs/modules/modules.Noble.Transition.Imagetable.html delete mode 100644 source/libraries/noble/.docs/modules/modules.Noble.Transition.ImagetableMask.html delete mode 100644 source/libraries/noble/.gitattributes delete mode 100644 source/libraries/noble/.github/FUNDING.yml delete mode 100644 source/libraries/noble/.github/ISSUE_TEMPLATE/bug_report.md delete mode 100644 source/libraries/noble/.github/ISSUE_TEMPLATE/feature_request.md delete mode 100644 source/libraries/noble/.github/workflows/Documentation.yml delete mode 100644 source/libraries/noble/.gitignore delete mode 100644 source/libraries/noble/CODE_OF_CONDUCT.md delete mode 100644 source/libraries/noble/LICENSE delete mode 100644 source/libraries/noble/Noble.lua delete mode 100644 source/libraries/noble/README.gif delete mode 100644 source/libraries/noble/README.md delete mode 100644 source/libraries/noble/assets/fonts/NobleSans-table-8-9.png delete mode 100644 source/libraries/noble/assets/fonts/NobleSans.fnt delete mode 100644 source/libraries/noble/assets/fonts/SatchelRoughed-table-17-14.png delete mode 100644 source/libraries/noble/assets/fonts/SatchelRoughed.fnt delete mode 100644 source/libraries/noble/assets/images/BoltTransitionEnter-table-400-240.png delete mode 100644 source/libraries/noble/assets/images/BoltTransitionExit-table-400-240.png delete mode 100644 source/libraries/noble/assets/images/ImagetableTransition-table-400-240.png delete mode 100644 source/libraries/noble/assets/images/NobleRobotLogo.png delete mode 100644 source/libraries/noble/libraries/Sequence.lua delete mode 100644 source/libraries/noble/libraries/Signal.lua delete mode 100644 source/libraries/noble/modules/Noble.Animation.lua delete mode 100644 source/libraries/noble/modules/Noble.Bonk.lua delete mode 100644 source/libraries/noble/modules/Noble.GameData.lua delete mode 100644 source/libraries/noble/modules/Noble.Input.lua delete mode 100644 source/libraries/noble/modules/Noble.Menu.lua delete mode 100644 source/libraries/noble/modules/Noble.Settings.lua delete mode 100644 source/libraries/noble/modules/Noble.Text.lua delete mode 100644 source/libraries/noble/modules/Noble.Transition.lua delete mode 100644 source/libraries/noble/modules/Noble.Transition/CrossDissolve.lua delete mode 100644 source/libraries/noble/modules/Noble.Transition/Cut.lua delete mode 100644 source/libraries/noble/modules/Noble.Transition/Dip.lua delete mode 100644 source/libraries/noble/modules/Noble.Transition/DipToBlack.lua delete mode 100644 source/libraries/noble/modules/Noble.Transition/DipToWhite.lua delete mode 100644 source/libraries/noble/modules/Noble.Transition/Imagetable.lua delete mode 100644 source/libraries/noble/modules/Noble.Transition/ImagetableMask.lua delete mode 100644 source/libraries/noble/modules/Noble.Transition/MetroNexus.lua delete mode 100644 source/libraries/noble/modules/Noble.Transition/SlideOff.lua delete mode 100644 source/libraries/noble/modules/Noble.Transition/SlideOffDown.lua delete mode 100644 source/libraries/noble/modules/Noble.Transition/SlideOffLeft.lua delete mode 100644 source/libraries/noble/modules/Noble.Transition/SlideOffRight.lua delete mode 100644 source/libraries/noble/modules/Noble.Transition/SlideOffUp.lua delete mode 100644 source/libraries/noble/modules/Noble.Transition/SlideOn.lua delete mode 100644 source/libraries/noble/modules/Noble.Transition/SlideOnDown.lua delete mode 100644 source/libraries/noble/modules/Noble.Transition/SlideOnLeft.lua delete mode 100644 source/libraries/noble/modules/Noble.Transition/SlideOnRight.lua delete mode 100644 source/libraries/noble/modules/Noble.Transition/SlideOnUp.lua delete mode 100644 source/libraries/noble/modules/Noble.Transition/Spotlight.lua delete mode 100644 source/libraries/noble/modules/Noble.Transition/SpotlightMask.lua delete mode 100644 source/libraries/noble/modules/Noble.Transition/WidgetSatchel.lua delete mode 100644 source/libraries/noble/modules/NobleScene.lua delete mode 100644 source/libraries/noble/modules/NobleSprite.lua delete mode 100644 source/libraries/noble/templates/SceneTemplate.lua delete mode 100644 source/libraries/noble/utilities/Ease.lua delete mode 100644 source/libraries/noble/utilities/Utilities.lua diff --git a/source/libraries/noble/.docs/.ldoc/config.ldoc b/source/libraries/noble/.docs/.ldoc/config.ldoc deleted file mode 100644 index 2a3611c..0000000 --- a/source/libraries/noble/.docs/.ldoc/config.ldoc +++ /dev/null @@ -1,26 +0,0 @@ -title = 'Noble Engine API reference' - -project = 'Noble Engine' -description = 'A li\'l game engine for Playdate.' - -format = 'markdown' - -no_lua_ref = true -wrap = true -no_space_before_args = true -backtick_references = true - -dir = '../../.docs' -file = { - '../../', - exclude = { - '../../.lua', - '../../.luarocks', - '../../.docs' - } -} - -style = "." -template = "." - -examples = "../../templates" \ No newline at end of file diff --git a/source/libraries/noble/.docs/.ldoc/ldoc.css b/source/libraries/noble/.docs/.ldoc/ldoc.css deleted file mode 100644 index e1dca6e..0000000 --- a/source/libraries/noble/.docs/.ldoc/ldoc.css +++ /dev/null @@ -1,524 +0,0 @@ -@import url(https://fonts.googleapis.com/css?family=Quicksand:300,700); -@import url(https://fonts.googleapis.com/css?family=Lato); -@import url(https://fonts.googleapis.com/css2?family=Source+Code+Pro:wght@200;300;400;600;700;900&display=swap); -* { - -webkit-box-sizing: border-box; - box-sizing: border-box; -} - -body { - margin: 2em; - font-family: "Lato", arial, helvetica, geneva, sans-serif; - background-color: #ffcb1f; - color: #31302f; -} - -code, -tt { - font-family: "Source Code Pro", monospace; - font-size: 1.1em; - letter-spacing: -1px; - font-weight: 600; - color: #056d8d; -} - -span.types:before { - content: ": "; -} - -span.types:after { - content: ""; -} - -.type, -.default, -.optional { - color: #74726e; -} - -.default .value { - font-weight: bold; -} - -.parameters { - list-style-type: none; -} - -.parameters li { - margin-bottom: 10px; - line-height: 1.5em; -} - -.parameter { - font-weight: 600; - color: #045771; -} - -body, td, th { - font-size: .95em; - line-height: 1.2em; -} - -p, ul { - margin: 10px 0 0 0px; -} - -ul { - padding-left: 25px; -} - -strong { - font-weight: bold; -} - -em { - font-style: italic; -} - -.logo { - width: 100%; - background-image: url("logo.png"); - background-repeat: no-repeat; - background-position: center; - height: 150px; -} - -.logo h1 { - display: none; -} - -h1 { - font-family: 'Quicksand', sans-serif; - font-weight: bold; - color: #cf5a5a; - font-size: 2.5em; - margin: 20px 0 30px 0; -} - -h2, h3, h4 { - font-family: 'Quicksand', sans-serif; - font-weight: 700; - margin: 15px 0 10px 0; -} - -h2 { - font-size: 1.25em; - color: #cf5a5a; -} - -h3 { - font-size: 1.15em; -} - -h4 { - font-size: 1em; -} - -.section-header { - margin-top: 50px; - padding: 10px; - padding-left: 15px; - margin-left: -25px; - border-radius: 50px; - border-left: 20px solid #cf5a5a; - background-color: #e9cfc8; - color: #31302f; -} - -a:link { - font-weight: bold; - color: #cf5a5a; - text-decoration: none; -} - -a:visited { - font-weight: bold; - color: #cf5a5a; - text-decoration: none; -} - -a:link:hover { - text-decoration: underline; -} - -hr { - background: #cf5a5a; - border-radius: 100px; - height: 6px; - margin: 60px 20%; - border: none; -} - -blockquote { - margin-left: 3em; -} - -ul { - list-style-type: none; -} - -p.name { - font-family: "Andale Mono", monospace; - padding-top: 1em; -} - -span.item-name { - background-color: #fbd350; - display: inline-block; - color: #31302f; - padding: 10px 20px; - border-radius: 25px; - border: 2px solid #bf9817; - font-size: 1em; - font-family: "Source Code Pro", monospace; - font-weight: 700; - letter-spacing: -1px; -} - -pre { - background-color: #056d8d; - border: 2px solid #03475c; - -webkit-box-shadow: 0 0 10px 0 rgba(49, 48, 47, 0.5); - box-shadow: 0 0 10px 0 rgba(49, 48, 47, 0.5); - border-radius: 15px; - color: #f0ece3; - padding: 15px 20px; - margin: 10px 0 10px 0; - font-family: "Source Code Pro", monospace; - -moz-tab-size: 4; - -o-tab-size: 4; - tab-size: 4; - overflow-x: auto; - width: 100%; - font-weight: 400; -} - -pre .keyword { - color: #ffcb1f; -} - -pre .string, pre .number { - color: #eb6e6e; - font-weight: bold; -} - -pre .comment { - color: #b4b1aa; -} - -pre.example { - font-size: .85em; -} - -table.index td { - text-align: left; - vertical-align: top; -} - -#container { - margin-left: auto; - margin-right: auto; - border-radius: 25px; - -webkit-box-shadow: 0 0 25px 0 rgba(49, 48, 47, 0.3); - box-shadow: 0 0 25px 0 rgba(49, 48, 47, 0.3); - overflow: hidden; - max-width: 1600px; -} - -#product { - text-align: center; - height: 500px; - background-color: #31302f; - color: #f0ece3; -} - -#product > :before { - content: 'Noble Engine'; -} - -#product big { - font-size: 2em; -} - -#main { - background-color: #31302f; - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - -ms-flex-direction: row; - flex-direction: row; -} - -#navigation { - -webkit-box-flex: 1; - -ms-flex-positive: 1; - flex-grow: 1; - -ms-flex-negative: 0; - flex-shrink: 0; - -ms-flex-preferred-size: auto; - flex-basis: auto; - width: 275px; - padding: 0 10px; - overflow: hidden; - color: #f0ece3; -} - -#navigation a:link, #navigation a:visited { - font-weight: normal; -} - -#navigation .nav-module, -#navigation .nav-modules { - color: #31302f; - padding: 15px; - border-radius: 20px; -} - -#navigation .nav-module a:link, #navigation .nav-module a:visited, -#navigation .nav-modules a:link, -#navigation .nav-modules a:visited { - color: #31302f; -} - -#navigation .nav-module ul a:active, #navigation .nav-module ul a:hover, #navigation .nav-module ul .selected, -#navigation .nav-modules ul a:active, -#navigation .nav-modules ul a:hover, -#navigation .nav-modules ul .selected { - color: #f0ece3; - background-color: #cf5a5a; - padding: 5px 10px; - margin-left: -10px; - border-radius: 30px; - text-decoration: none; -} - -#navigation .nav-module ul .selected, -#navigation .nav-modules ul .selected { - line-height: 2em; - margin-left: -28px; - padding-left: 28px; - border-radius: 0 30px 30px 0; - font-weight: bold; -} - -#navigation .nav-module { - background-color: #eb6e6e; - margin: 0 -10px 20px 10px; - border-radius: 20px 0 0 20px; -} - -#navigation .nav-module h2 { - background-color: #cf5a5a; - color: #f0ece3; - margin: 0; -} - -#navigation .nav-module ul a:active, #navigation .nav-module ul a:hover { - color: #31302f; - background-color: #ffcb1f; -} - -#navigation .nav-modules { - background-color: #f3e5bc; - margin: 0 10px 30px 10px; - padding-top: 5px; -} - -#navigation h1 { - color: #eb6e6e; - line-height: 80%; - font-family: 'Quicksand', sans-serif; - font-weight: 900; - font-size: 32px; - padding-left: 20px; - padding-bottom: 20px; -} - -#navigation h2 { - color: #31302f; - font-size: 1.1em; - background-color: #f0ece3; - padding: 5px 10px; - margin-right: 20px; - border-radius: 30px; - text-decoration: none; -} - -#navigation ul { - font-size: 1em; - list-style-type: none; - margin: 1px 1px 10px 1px; - padding-left: 0px; -} - -#navigation li { - display: block; - margin: 0px 0px 6px 12px; - padding-left: 0px; -} - -#navigation li li a { - margin: 0px 3px 0px -1em; -} - -#content { - -webkit-box-flex: 1; - -ms-flex-positive: 1; - flex-grow: 1; - -ms-flex-negative: 1; - flex-shrink: 1; - -ms-flex-preferred-size: auto; - flex-basis: auto; - min-width: 0; - padding: 2em; - padding-left: 3.5em; - border-left: 4px solid #cf5a5a; - -webkit-box-shadow: inset 0 0 50px 0 rgba(207, 90, 90, 0.25); - box-shadow: inset 0 0 50px 0 rgba(207, 90, 90, 0.25); - background-color: #f0ece3; -} - -#about { - clear: both; - padding: 20px; - border-top: 2px solid #31302f; - background-color: #cf5a5a; - color: #f0ece3; -} - -#about a:link, #about a:visited, #about a:hover, #about a:active { - color: #ffcb1f; -} - -@media print { - body { - font: 12pt "Times New Roman", "TimeNR", Times, serif; - } - a { - font-weight: bold; - color: #1c4e68; - text-decoration: underline; - } - #main { - background-color: #ffffff; - border-left: 0px; - } - #container { - margin-left: 2%; - margin-right: 2%; - background-color: #ffffff; - } - #content { - padding: 1em; - background-color: #ffffff; - } - #navigation { - display: none; - } - pre.example { - font-family: "Andale Mono", monospace; - font-size: 10pt; - page-break-inside: avoid; - } -} - -table.module_list { - border-width: 1px; - border-style: solid; - border-color: #b1e3fa; - border-collapse: collapse; -} - -table.module_list td { - border-width: 1px; - padding: 3px; - border-style: solid; - border-color: #b1e3fa; -} - -table.module_list td.name { - background-color: #e0f4fc; - min-width: 200px; -} - -table.module_list td.summary { - width: 100%; -} - -table.function_list { - border-width: 1px; - border-style: solid; - border-color: #b1e3fa; - border-collapse: collapse; -} - -table.function_list td { - border-width: 1px; - padding: 3px; - border-style: solid; - border-color: #b1e3fa; -} - -table.function_list td.name { - background-color: #e0f4fc; - min-width: 200px; -} - -table.function_list td.summary { - width: 100%; -} - -ul.nowrap { - overflow: auto; - white-space: nowrap; -} - -dl.table dt, -dl.function dt { - padding-top: 1em; -} - -dl.table dd dd, -dl.function dd { - padding-bottom: 30px; - margin: 10px 0 10px 20px; - border-bottom: 2px dotted #056d8d; -} - -dl.table dd > :last-child, -dl.function > :last-child { - border-bottom: none; -} - -dl.table h3, -dl.function h3 { - font-size: .95em; -} - -/* stop sublists from having initial vertical space */ -ul ul { - margin-top: 0px; -} - -ol ul { - margin-top: 0px; -} - -ol ol { - margin-top: 0px; -} - -ul ol { - margin-top: 0px; -} - -/* make the target distinct; helps when we're navigating to a function */ -a:target + * { - border: 2px solid #31302f; - border-bottom: 6px solid #31302f; - background-color: #cf5a5a; - color: #f0ece3; -} -/*# sourceMappingURL=ldoc.css.map */ \ No newline at end of file diff --git a/source/libraries/noble/.docs/.ldoc/ldoc.css.map b/source/libraries/noble/.docs/.ldoc/ldoc.css.map deleted file mode 100644 index 652a54b..0000000 --- a/source/libraries/noble/.docs/.ldoc/ldoc.css.map +++ /dev/null @@ -1,9 +0,0 @@ -{ - "version": 3, - "mappings": "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", - "sources": [ - "ldoc.scss" - ], - "names": [], - "file": "ldoc.css" -} \ No newline at end of file diff --git a/source/libraries/noble/.docs/.ldoc/ldoc.ltp b/source/libraries/noble/.docs/.ldoc/ldoc.ltp deleted file mode 100644 index f4f90be..0000000 --- a/source/libraries/noble/.docs/.ldoc/ldoc.ltp +++ /dev/null @@ -1,299 +0,0 @@ - - - - - $(ldoc.title) - - - - - -
- -
- -# local no_spaces = ldoc.no_spaces -# local use_li = ldoc.use_li -# local display_name = ldoc.display_name -# local iter = ldoc.modules.iter -# local function M(txt,item) return ldoc.markup(txt,item,ldoc.plain) end -# --local nowrap = ldoc.wrap and '' or 'nowrap' - - - - - -
- -# if ldoc.body then -- verbatim HTML as contents; 'non-code' entries - $(ldoc.body) -# elseif module then -- module documentation -

$(module.name)

-

$(M(module.summary,module))

-

$(M(module.description,module))

-# if module.tags.include then - $(M(ldoc.include_file(module.tags.include))) -# end -# if module.see then -# local li,il = use_li(module.see) -

See

-
    -# for see in iter(module.see) do - $(li)$(see.label)$(il) -# end -
-# end -# if module.usage then -# local li,il = use_li(module.usage) -

Usage

-# for usage in iter(module.usage) do -
$(ldoc.escape(usage))
-# end -# end -# if module.info then -

Info

-
    -# for tag, value in module.info:iter() do -
  • $(tag): $(M(value,module))
  • -# end -
-# end - -
- -# --- currently works for both Functions and Tables. The params field either contains -# --- function parameters or table fields. -# local show_return = not ldoc.no_return_or_parms -# local show_parms = show_return -# for kind, items in module.kinds() do -# local kitem = module.kinds:get_item(kind) -# local has_description = kitem and ldoc.descript(kitem) ~= "" -# kind = kind:gsub("modules.", ""):gsub(" Functions", "") -

$(kind)

- -# if kitem then -# if has_description then -
- $(M(ldoc.descript(kitem),kitem)) -
-# end -# if kitem.usage then -

Usage

-
$(ldoc.prettify(kitem.usage[1]))
-# end -# end -
-# for item in items() do -
- - $(display_name(item)) -# if ldoc.prettify_files and ldoc.is_file_prettified[item.module.file.filename] then - line $(item.lineno) -# end -
-
- $(M(ldoc.descript(item),item)) -# if ldoc.custom_tags then -# for custom in iter(ldoc.custom_tags) do -# local tag = item.tags[custom[1]] -# if tag and not custom.hidden then -# local li,il = use_li(tag) -

$(custom.title or custom[1])

-
    -# for value in iter(tag) do - $(li)$(custom.format and custom.format(value) or M(value))$(il) -# end -# end -
-# end -# end - -# if show_parms and item.params and #item.params > 0 then -# local subnames = module.kinds:type_of(item).subnames -# if subnames then -

$(subnames)

-# end -
    -# for parm in iter(item.params) do -# local param,sublist = item:subparam(parm) -# if sublist then -
  • $(sublist)$(M(item.params.map[sublist],item)) -
      -# end -# for p in iter(param) do -# local name,tp,def = item:display_name_of(p), ldoc.typename(item:type_of_param(p)), item:default_of_param(p) -
    • $(name) -# if tp ~= '' then - $(tp) -# end -# if def == true then - (optional) -# elseif def then - = $(def) (default) -# end -# if item:readonly(p) then - readonly -# end -
      - $(M(item.params.map[p],item)) -
    • -# end -# if sublist then -
    -
  • -# end -# end -
-# end - -# if show_return and item.retgroups then local groups = item.retgroups -

Returns

-# for i,group in ldoc.ipairs(groups) do local li,il = use_li(group) -
    -# for r in group:iter() do local type, ctypes = item:return_type(r); local rt = ldoc.typename(type) - $(li) -# if rt ~= '' then - $(rt) -# end - $(M(r.text,item))$(il) -# if ctypes then -
      -# for c in ctypes:iter() do -
    • $(c.name) - $(ldoc.typename(c.type)) - $(M(c.comment,item)) -
    • -# end -
    -# end -# end -
-# if i < #groups then -

Or

-# end -# end -# end - -# if show_return and item.raise then -

Raises

- $(M(item.raise,item)) -# end - -# if item.see then -# local li,il = use_li(item.see) -

See

-
    -# for see in iter(item.see) do - $(li)$(see.label)$(il) -# end -
-# end - -# if item.usage then -# local li,il = use_li(item.usage) -

Usage

-# for usage in iter(item.usage) do -
$(ldoc.prettify(usage))
-# end -# end - -
-# end -- for items -
-# end - -# else -- if module; project-level contents - -# if ldoc.description then -

$(M(ldoc.description,nil))

-# end -# if ldoc.full_description then -

$(M(ldoc.full_description,nil))

-# end - -# for kind, mods in ldoc.kinds() do -

$(kind)

-# kind = kind:lower() - -# for m in mods() do - - - - -# end -
$(m.name)$(M(ldoc.strip_header(m.summary),m))
-# end - -# end -- if module - -
- -
- -
- Noble Engine by Mark LaCroix, Noble Robot - - Documentation created using LDoc $(ldoc.version). -# if not module then - Last updated $(ldoc.updatetime) -# end - -
- -
- - - - diff --git a/source/libraries/noble/.docs/.ldoc/ldoc.scss b/source/libraries/noble/.docs/.ldoc/ldoc.scss deleted file mode 100644 index 353d8e2..0000000 --- a/source/libraries/noble/.docs/.ldoc/ldoc.scss +++ /dev/null @@ -1,443 +0,0 @@ -@import url(https://fonts.googleapis.com/css?family=Quicksand:300,700); -@import url(https://fonts.googleapis.com/css?family=Lato); -@import url(https://fonts.googleapis.com/css2?family=Source+Code+Pro:wght@200;300;400;600;700;900&display=swap); - -$red: #cf5a5a; -$redBright: #eb6e6e; -$yellow: #ffcb1f; -$blue: #056d8d; -$white:#f0ece3; -$black:#31302f; - -* { - box-sizing: border-box; -} - -body { - margin: 2em; - font-family: "Lato", arial, helvetica, geneva, sans-serif; - background-color: $yellow; - color: $black; -} - -code, -tt { - font-family: "Source Code Pro", monospace; - font-size: 1.1em; - letter-spacing: -1px; - font-weight: 600; - color: $blue; -} - -span.types:before { content:": "; } -span.types:after { content:""; } - -.type, -.default, -.optional { - color: ($black * 0.65) + ($white *0.35); -} -.default .value { font-weight: bold; } - - -.parameters { - list-style-type: none; - li { - margin-bottom: 10px; - line-height: 1.5em; - } -} - -.parameter { - font-weight: 600; - color: $blue * 0.8; -} - -body, td, th { font-size: .95em; line-height: 1.2em;} - -p, ul { margin: 10px 0 0 0px;} - -ul { - padding-left: 25px; -} - -strong { font-weight: bold;} - -em { font-style: italic;} - -.logo { - h1 { - display: none; - } - width: 100%; - background-image: url('logo.png'); - background-repeat: no-repeat; - background-position: center; - height: 150px; -} - -h1 { - font-family: 'Quicksand', sans-serif; - font-weight: bold; - color: $red; - font-size: 2.5em; - margin: 20px 0 30px 0; -} -h2, h3, h4 { - font-family: 'Quicksand', sans-serif; - font-weight: 700; - margin: 15px 0 10px 0; } -h2 { font-size: 1.25em; color: $red; } -h3 { font-size: 1.15em; } -h4 { font-size: 1em; } - -.section-header { - margin-top: 50px; - padding: 10px; - padding-left: 15px; - margin-left: -25px; - border-radius: 50px; - border-left: 20px solid $red; - background-color: ($white * 0.8) + ($red * 0.20); - color: $black; -} - -a:link { font-weight: bold; color: $red; text-decoration: none; } -a:visited { font-weight: bold; color: $red; text-decoration: none; } -a:link:hover { text-decoration: underline; } - -hr { - background: $red; - border-radius: 100px; - height: 6px; - margin: 60px 20%; - border: none; -} - -blockquote { margin-left: 3em; } - -ul { list-style-type: none; } - -p.name { - font-family: "Andale Mono", monospace; - padding-top: 1em; -} - -span.item-name { - background-color: ($white*0.25) + ($yellow*0.75); - display: inline-block; - color: $black; - padding: 10px 20px; - border-radius: 25px; - - border: 2px solid $yellow*0.75; - //border-bottom: none; - //border-bottom: 4px solid $red*0.75; - - font-size: 1em; - font-family: "Source Code Pro", monospace; - font-weight: 700; - letter-spacing: -1px; -} - -pre { - background-color: $blue; - border: 2px solid $blue*0.65; - box-shadow: 0 0 10px 0 rgba($black, 0.5); - border-radius: 15px; - color: $white; - padding: 15px 20px; - margin: 10px 0 10px 0; - //font-family: "Andale Mono", monospace; - font-family: "Source Code Pro", monospace; - //font-size: 20px !important; - tab-size: 4; - overflow-x: auto; - width: 100%; - font-weight: 400; - .keyword { - color: $yellow; - } - .string, .number { - color: $redBright; - font-weight: bold; - } - .comment { - color: $white*0.75; - } -} - -pre.example { - font-size: .85em; -} - -table.index td { text-align: left; vertical-align: top; } - -#container { - margin-left: auto; - margin-right: auto; - border-radius: 25px; - box-shadow: 0 0 25px 0 rgba($black, .3); - overflow: hidden; - max-width: 1600px; -} - -#product { - text-align: center; - height: 500px; - background-color: $black; - color: $white; - > :before{ - content: 'Noble Engine'; - } -} - -#product big { - font-size: 2em; -} - -#main { - background-color: $black; - display: flex; - flex-direction: row; -} - -#navigation { - - flex-grow: 1; - flex-shrink: 0; - flex-basis: auto; - width: 275px; - - padding: 0 10px; - - overflow: hidden; - - color: $white; - - a:link, a:visited { - font-weight: normal; - } - - .nav-module, - .nav-modules { - color: $black; - padding: 15px; - - a:link, a:visited { - color: $black; - } - - border-radius: 20px; - - ul { - a:active, a:hover, .selected { - color: $white; - background-color: $red; - padding: 5px 10px; - margin-left:-10px; - border-radius: 30px; - text-decoration: none; - } - .selected{ - line-height: 2em; - margin-left: -28px; - padding-left: 28px; - border-radius: 0 30px 30px 0; - font-weight: bold; - } - } - } - .nav-module { - background-color: $redBright; - margin: 0 -10px 20px 10px; - border-radius: 20px 0 0 20px; - - h2 { - background-color: $red; - color: $white; - margin: 0; - } - - ul { - a:active, a:hover { - color: $black; - background-color: $yellow; - } - } - } - .nav-modules { - background-color: ($white*0.8) + ($yellow*0.2); - margin: 0 10px 30px 10px; - padding-top: 5px; - } - - h1 { - color: $redBright; - line-height: 80%; - font-family: 'Quicksand', sans-serif; - font-weight: 900; - font-size: 32px; - padding-left: 20px; - padding-bottom: 20px; - } - - h2 { - - color: $black; - font-size:1.1em; - - background-color: $white; - padding: 5px 10px; - margin-right: 20px; - border-radius: 30px; - text-decoration: none; - } - - ul { - font-size:1em; - list-style-type: none; - margin: 1px 1px 10px 1px; - padding-left: 0px; - } - - li { - //font-size: 14px; - display: block; - margin: 0px 0px 6px 12px; - padding-left: 0px; - } - - li li a { - margin: 0px 3px 0px -1em; - } -} - -#content { - - flex-grow: 1; - flex-shrink: 1; - flex-basis: auto; - min-width: 0; // For pre elements... - - //margin-left: 14em; - padding: 2em; - padding-left:3.5em; - border-left: 4px solid $red; - box-shadow: inset 0 0 50px 0 rgba($red, 0.25); - background-color: $white; -} - -#about { - clear: both; - padding: 20px; - border-top: 2px solid $black; - background-color: $red; - - color:$white; - a:link, a:visited, a:hover, a:active { - color: $yellow; - } -} - -@media print { - body { - font: 12pt "Times New Roman", "TimeNR", Times, serif; - } - a { font-weight: bold; color: #1c4e68; text-decoration: underline; } - - #main { - background-color: #ffffff; - border-left: 0px; - } - - #container { - margin-left: 2%; - margin-right: 2%; - background-color: #ffffff; - } - - #content { - padding: 1em; - background-color: #ffffff; - } - - #navigation { - display: none; - } - pre.example { - font-family: "Andale Mono", monospace; - font-size: 10pt; - page-break-inside: avoid; - } -} - -table.module_list { - border-width: 1px; - border-style: solid; - border-color: #b1e3fa; - border-collapse: collapse; -} -table.module_list td { - border-width: 1px; - padding: 3px; - border-style: solid; - border-color: #b1e3fa; -} -table.module_list td.name { background-color: #e0f4fc; min-width: 200px; } -table.module_list td.summary { width: 100%; } - - -table.function_list { - border-width: 1px; - border-style: solid; - border-color: #b1e3fa; - border-collapse: collapse; -} -table.function_list td { - border-width: 1px; - padding: 3px; - border-style: solid; - border-color: #b1e3fa; -} -table.function_list td.name { background-color: #e0f4fc; min-width: 200px; } -table.function_list td.summary { width: 100%; } - -ul.nowrap { - overflow:auto; - white-space:nowrap; -} - -dl.table dt, -dl.function dt { - padding-top: 1em; -} -dl.table dd, -dl.function { - dd { - padding-bottom: 30px; - margin: 10px 0 10px 20px; - border-bottom: 2px dotted $blue; - } - > :last-child { - border-bottom: none; - } -} -dl.table h3, -dl.function h3 { - font-size: .95em; -} - -/* stop sublists from having initial vertical space */ -ul ul { margin-top: 0px; } -ol ul { margin-top: 0px; } -ol ol { margin-top: 0px; } -ul ol { margin-top: 0px; } - -/* make the target distinct; helps when we're navigating to a function */ -a:target + * { - border: 2px solid $black; - border-bottom: 6px solid $black; - background-color: $red; - color: $white; -} diff --git a/source/libraries/noble/.docs/classes/NobleScene.html b/source/libraries/noble/.docs/classes/NobleScene.html deleted file mode 100644 index e97943d..0000000 --- a/source/libraries/noble/.docs/classes/NobleScene.html +++ /dev/null @@ -1,485 +0,0 @@ - - - - - Noble Engine API reference - - - - - -
- -
- - - - - - -
- -

NobleScene

-

An abstract scene class.

-

Do not copy this file as a template for your scenes. Instead, your scenes will extend this class. - See templates/SceneTemplate.lua for a blank scene that you can copy and modify for your own scenes. - If you are using NobleEngine-ProjectTemplate, - see scenes/ExampleScene.lua for an implementation example.

-

Usage

-
YourSceneName = {}
-class("YourSceneName").extends(NobleScene)
-local scene = YourSceneName
-
- -
- -

Properties

- -
-
- - noblescene.name -
-
- The name of this scene. Optional. - If you do not set this value, it will take on the scene's className. - - - - - - -
-
- - noblescene.backgroundColor -
-
- This is the background color of this scene. - - - - - - -
-
-

Tables

- -
-
- - noblescene.inputHandler -
-
- All scenes have a default inputHandler which is made active when the scene starts. - If you do not define your scene's inputHandler, it is nil and input is disabled when this scene - starts. - - - - -

See

- - -

Usage

-
YourSceneName.inputHandler = {
-	AButtonDown = function()
-		// Your code here
-	end,
-	AButtonHold = function()
-		// Your code here
-	end,
-	-- ...
-	-- ...
-}
--- OR...
--- Use a non-scene-specific inputHandler, defined elsewhere.
-YourSceneName.inputHandler = somePreviouslyDefinedInputHandler
--- OR...
--- Reuse another scene's inputHandler.
-YourSceneName.inputHandler = SomeOtherSceneName.inputHandler
- -
-
- - noblescene.sprites -
-
- When you add a sprite to your scene, it is put in this table so the scene can keep track of it.

- -

This is intended as read-only. You should not modify this table directly. - - - - -

See

- - - -
-
-

Methods

- -
-
- - noblescene:addSprite(__sprite) -
-
- Use this to add sprites to your scene instead of playdate.graphics.sprite:add().

- -

If your sprite is a NobleSprite, using NobleSprite:add() will also call this method.

- -

Sprites added with this method that are tracked by the scene. Any not manually removed before transitioning to another scene are automatically removed in finish. - -

Parameters

-
    -
  • __sprite - playdate.graphics.sprite -
    - The sprite to add to the scene. -
  • -
- - - -

See

- - - -
-
- - noblescene:removeSprite(__sprite) -
-
- Use this to remove sprites from your scene instead of playdate.graphics.sprite:remove().

- -

If your sprite is a NobleSprite, using NobleSprite:remove() will also call this method.

- -

Sprites not manually removed before transitioning to another scene are automatically removed in finish. - -

Parameters

-
    -
  • __sprite - playdate.graphics.sprite -
    - The sprite to add to the scene. -
  • -
- - - -

See

- - - -
-
-

Callbacks

- -
-
- - noblescene:init() -
-
- Implement this in your scene if you have code to run when your scene's object is created. - - - - - -

Usage

-
function YourSceneName:init()
-	YourSceneName.super.init(self)
-	--[Your code here]--
-end
- -
-
- - noblescene:enter() -
-
- Implement if you want to run code as the transition to this scene begins, such as UI animation, triggers, etc. - - - - - -

Usage

-
function YourSceneName:enter()
-	YourSceneName.super.enter(self)
-	--[Your code here]--
-end
- -
-
- - noblescene:start() -
-
- Implement if you have code to run once the transition to this scene is complete. This method signifies the full activation of a scene. If this scene's inputHandler is defined, it is enabled now. - - - - -

See

- - -

Usage

-
function YourSceneName:start()
-	YourSceneName.super.start(self)
-	--[Your code here]--
-end
- -
-
- - noblescene:update() -
-
- Implement to run scene-specific code on every frame while this scene is active. - NOTE: you may use coroutine.yield() here, because it only runs inside of playdate.update(), which is a coroutine. - - - - - -

Usage

-
function YourSceneName:update()
-	YourSceneName.super.update(self)
-	--[Your code here]--
-end
- -
-
- - noblescene:drawBackground(__x, __y, __width, __height) -
-
- Implement this function to draw background visual elements in your scene. - This runs when the engine need to redraw a background area. - By default it runs every frame and fills the background with self.backgroundColor. All arguments are optional. - Use Graphics.sprite.setAlwaysRedraw(false) after Noble.new() to optimize partial redraw. - -

Parameters

-
    -
  • __x -
    - - - -
  • -
  • __y -
    - - - -
  • -
  • __width -
    - - - -
  • -
  • __height -
    - - - -
  • -
- - - - -

Usage

-
function YourSceneName:drawBackground(__x, __y, __width, __height)
-	YourSceneName.super.drawBackground(self) -- optional, invokes default behavior.
-	--[Your code here]--
-end
- -
-
- - noblescene:exit() -
-
- Implement this in your scene if you have "goodbye" code to run when a transition to another scene - begins, such as UI animation, saving to disk, etc. - - - - - -

Usage

-
function YourSceneName:exit()
-	YourSceneName.super.exit(self)
-	--[Your code here]--
-end
- -
-
- - noblescene:finish() -
-
- Implement this in your scene if you have code to run when a transition to another scene - is complete, such as resetting variables. - - - - - -

Usage

-
function YourSceneName:finish()
-	YourSceneName.super.finish(self)
-	--[Your code here]--
-end
- -
-
- - noblescene:pause() -
-
- pause() / resume()

- -

Implement one or both of these in your scene if you want something to happen when the game is paused/unpaused - by the system. The Playdate SDK does not require you to write pause logic, but these are useful if you want a - custom menu image (see Playdate SDK for more details), want to obscure game elements to prevent players from - cheating in a time-sensitive game, want to count the number of times the player pauses the game, etc. - - - - - -

Usage

-
function YourSceneName:pause()
-	YourSceneName.super.pause(self)
-	--[Your code here]--
-end
- -
-
- - noblescene:resume() -
-
- - - - - - -

Usage

-
function YourSceneName:resume()
-	YourSceneName.super.resume(self)
-	--[Your code here]--
-end
- -
-
- - -
- -
- -
- Noble Engine by Mark LaCroix, Noble Robot - - Documentation created using LDoc 1.5.0. - -
- -
- - - - diff --git a/source/libraries/noble/.docs/classes/NobleSprite.html b/source/libraries/noble/.docs/classes/NobleSprite.html deleted file mode 100644 index 20032d7..0000000 --- a/source/libraries/noble/.docs/classes/NobleSprite.html +++ /dev/null @@ -1,290 +0,0 @@ - - - - - Noble Engine API reference - - - - - -
- -
- - - - - - -
- -

NobleSprite

-

An extension of Playdate's sprite object, incorporating Noble.Animation and other Noble Engine features.

-

Use this in place of playdate.graphics.sprite in most cases.

- -

NobleSprite is a child class of playdate.graphics.sprite, so see the Playdate SDK documentation for additional methods and properties.

- -
- -

Fields

- -
-
- - self.animation -
-
- The animation for this NobleSprite. - - - - -

See

- - - -
-
-

Methods

- -
-
- - noblesprite:init([__view[, __viewIsSpritesheet=false[, __singleState=false[, __singleStateLoop=true]]]]) -
-
- Do not call an "init" method directly. Use NobleSprite() (see usage examples). - -

Parameters

-
    -
  • __view - string - (optional) -
    - This can be: the path to an image or spritesheet image file, an image object (Graphics.image) or an animation object (Noble.Animation) -
  • -
  • __viewIsSpritesheet - boolean - = false (default) -
    - Set this to true to indicate that __view is a spritesheet. Will only be considered if __view is a string path to an image. -
  • -
  • __singleState - boolean - = false (default) -
    - If this sprite has just one animation, set this to true. It saves you from having to use Noble.Animation.addState() -
  • -
  • __singleStateLoop - boolean - = true (default) -
    - If using a single state animation, should it loop? -
  • -
- - - -

See

- - -

Usage

-
-- Provide a spritesheet image file to create a new Noble.Animation for a NobleSprite's view.
-myNobleSprite = NobleSprite("path/to/spritesheet", true)
-
-- Provide an image file to create a new Graphics.image for a NobleSprite's view.
-myNobleSprite = NobleSprite("path/to/image")
-
-- Use an existing Noble.Animation for a NobleSprite's view.
-	local myAnimation = Noble.Animation.new("path/to/spritesheet")
- myAnimation:addState("default", 1, animation.imageTable:getLength(), nil, true)
-myNobleSprite = NobleSprite(myAnimation)
-
-- Use an existing Graphics.image object for a NobleSprite's view.
- local myImage = Graphics.image.new("path/to/image")
-myNobleSprite = NobleSprite(myImage)
-
-- Extending NobleSprite.
-
--- MyCustomSprite.lua
-MyCustomSprite = {}
-class("MyCustomSprite").extends(NobleSprite)
-
-function MyCustomSprite:init(__x, __y, __anotherFunArgument)
-	MyCustomSprite.super.init(self, "path/to/spritesheet", true)
-	-- Etc. etc.
-end
-
--- MyNobleScene.lua
-myNobleSprite = MyCustomSprite(100, 100, "Fun!")
- -
-
- - noblesprite:play() -
-
- This will enable the update loop for this NobleSprite, which also causes its Noble.Animation to play. - - - - - - -
-
- - noblesprite:pause() -
-
- This will disable the update loop for this NobleSprite, which also causes its Noble.Animation to pause. - - - - - - -
-
- - noblesprite:stop() -
-
- This will disable the update loop for this NobleSprite, and also reset its Noble.Animation (if it exists) to the first frame of its current state. - - - - - - -
-
- - noblesprite:add(__x, __y) -
-
- Use this to add this NobleSprite to your scene. This replaces playdate.graphics.sprite:add() to allow NobleSprites to be tracked by the current NobleScene.

- -

To add a playdate.graphics.sprite to a scene, use NobleScene:addSprite(__sprite). - -

Parameters

-
    -
  • __x -
    - - - -
  • -
  • __y -
    - - - -
  • -
- - - -

See

- - - -
-
- - noblesprite:remove() -
-
- Use this to remove this NobleSprite from your scene. This replaces playdate.graphics.sprite:remove() to allow NobleSprites to be tracked by the current NobleScene.

- -

To remove a playdate.graphics.sprite from a scene, use NobleScene:removeSprite(__sprite). - - - - -

See

- - - -
-
- - -
- -
- -
- Noble Engine by Mark LaCroix, Noble Robot - - Documentation created using LDoc 1.5.0. - -
- -
- - - - diff --git a/source/libraries/noble/.docs/classes/favicon.ico b/source/libraries/noble/.docs/classes/favicon.ico deleted file mode 100644 index 0e6485a21c177d4a630dde7912ce3c25c71dd9ba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 294734 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�rl=i&OJ2Ok|MgP1g=5HrT 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 - - - - Noble Engine API reference - - - - - -
- -
- - - - - - -
- -

SceneTemplate.lua

-
---
--- SceneTemplate.lua
---
--- Use this as a starting point for your game's scenes.
--- Copy this file to your root "scenes" directory,
--- and rename it.
---
-
--- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
--- !!! Rename "SceneTemplate" to your scene's name in these first three lines. !!!
--- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-SceneTemplate = {}
-class("SceneTemplate").extends(NobleScene)
-local scene = SceneTemplate
-
--- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
--- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
--- It is recommended that you declare, but don't yet define,
--- your scene-specific varibles and methods here. Use "local" where possible.
---
--- local variable1 = nil	-- local variable
--- scene.variable2 = nil	-- Scene variable.
---							   When accessed outside this file use SceneTemplate.variable2.
--- ...
---
-
--- This is the background color of this scene.
-scene.backgroundColor = Graphics.kColorWhite
-
--- This runs when your scene's object is created, which is the
--- first thing that happens when transitining away from another scene.
-function scene:init()
-	scene.super.init(self)
-
-	-- variable1 = 100
-	-- SceneTemplate.variable2 = "string"
-	-- ...
-
-	-- Your code here
-end
-
--- When transitioning from another scene, this runs as soon as this
--- scene needs to be visible (this moment depends on which transition type is used).
-function scene:enter()
-	scene.super.enter(self)
-	-- Your code here
-end
-
--- This runs once a transition from another scene is complete.
-function scene:start()
-	scene.super.start(self)
-	-- Your code here
-end
-
--- This runs once per frame.
-function scene:update()
-	scene.super.update(self)
-	-- Your code here
-end
-
--- This runs once per frame, and is meant for drawing code.
-function scene:drawBackground()
-	scene.super.drawBackground(self)
-	-- Your code here
-end
-
--- This runs as as soon as a transition to another scene begins.
-function scene:exit()
-	scene.super.exit(self)
-	-- Your code here
-end
-
--- This runs once a transition to another scene completes.
-function scene:finish()
-	scene.super.finish(self)
-	-- Your code here
-end
-
-function scene:pause()
-	scene.super.pause(self)
-	-- Your code here
-end
-function scene:resume()
-	scene.super.resume(self)
-	-- Your code here
-end
-
--- Define the inputHander for this scene here, or use a previously defined inputHandler.
-
--- scene.inputHandler = someOtherInputHandler
--- OR
-scene.inputHandler = {
-
-	-- A button
-	--
-	AButtonDown = function()			-- Runs once when button is pressed.
-		-- Your code here
-	end,
-	AButtonHold = function()			-- Runs every frame while the player is holding button down.
-		-- Your code here
-	end,
-	AButtonHeld = function()			-- Runs after button is held for 1 second.
-		-- Your code here
-	end,
-	AButtonUp = function()				-- Runs once when button is released.
-		-- Your code here
-	end,
-
-	-- B button
-	--
-	BButtonDown = function()
-		-- Your code here
-	end,
-	BButtonHeld = function()
-		-- Your code here
-	end,
-	BButtonHold = function()
-		-- Your code here
-	end,
-	BButtonUp = function()
-		-- Your code here
-	end,
-
-	-- D-pad left
-	--
-	leftButtonDown = function()
-		-- Your code here
-	end,
-	leftButtonHold = function()
-		-- Your code here
-	end,
-	leftButtonUp = function()
-		-- Your code here
-	end,
-
-	-- D-pad right
-	--
-	rightButtonDown = function()
-		-- Your code here
-	end,
-	rightButtonHold = function()
-		-- Your code here
-	end,
-	rightButtonUp = function()
-		-- Your code here
-	end,
-
-	-- D-pad up
-	--
-	upButtonDown = function()
-		-- Your code here
-	end,
-	upButtonHold = function()
-		-- Your code here
-	end,
-	upButtonUp = function()
-		-- Your code here
-	end,
-
-	-- D-pad down
-	--
-	downButtonDown = function()
-		-- Your code here
-	end,
-	downButtonHold = function()
-		-- Your code here
-	end,
-	downButtonUp = function()
-		-- Your code here
-	end,
-
-	-- Crank
-	--
-	cranked = function(change, acceleratedChange)	-- Runs when the crank is rotated. See Playdate SDK documentation for details.
-		-- Your code here
-	end,
-	crankDocked = function()						-- Runs once when when crank is docked.
-		-- Your code here
-	end,
-	crankUndocked = function()						-- Runs once when when crank is undocked.
-		-- Your code here
-	end
-}
- - -
- -
- -
- Noble Engine by Mark LaCroix, Noble Robot - - Documentation created using LDoc 1.5.0. - -
- -
- - - - diff --git a/source/libraries/noble/.docs/favicon.ico b/source/libraries/noble/.docs/favicon.ico deleted file mode 100644 index 0e6485a21c177d4a630dde7912ce3c25c71dd9ba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 294734 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�rl=i&OJ2Ok|MgP1g=5HrT ze|~d&z3A^Rx4O5cwCA_(XZfJL9RIotZnIBm&)<9eTNC^ir1M%Xlf0b&Z5->IRQmHh zy~lmhUXFjA1-IFzwCAxu0^l*5$+7OXj~xFto^?$s{ktHJ`l!7e|GElpvrB2uWB&pm z)BC(`$G+%q<5}0F(tjVsuLE8>W?C-uzplc=E~P#1^G*Z!E!s?V_S#SM*I$3Wx4Ak8 z+S4aQe@*p=Ha!0MZssk3*YTTex#+K<{z`l5e>Cus=&zwjIW$S>&u<3(C5PI}{GUS& zGi_RF&tv~2pkDOPl*wT3r}QsJJU_?U%ki(7izw}R?2iWc&5mrZ?~?5=*MA!MfYN^t z#LM!ay&V4;Xs2wNWuEF55_`?C-qfN7=ZPmFi!1*Mdceh3VZ4~A$ zrL^KVlX&b<1KyiG59k17WC!;H4gu-_KXgsC4LSbPR7`1Q*PmST?^4eJxF(xgrrfHk z&v&=)1X9(_uX>_?%1Sj?RC+n}ryl&~2EVaB65zeNq%E_KLKWgq0KariwH?tvsY)#? zD81bDw>anb7HLx;eY@6J zrZ5~aeI}o}TYZWC+bPp}fzm9Q{uaNRP=5x{RqdB(T;=)h_Cmm_pYK@oPbiXFLg|*O z{?wE2XY#wt{60(ko)Kc}*gps91|Z+MTm6atsmY$GrL;>&e~WAW%@@9}%VVDUcLQDk ztnGz}MgN4dsU?(lndnb_d93rE(GkEEK)&wtdij>73|jP0 zP!Y<6=pRbi6N4806I6sUA^L|>_Qaq?{{$7GOo;xWlsz$M(LX^&C=;T8C}mF!TJ%p) z5z2(ng z<$XVA9eMvRO)u6+f4)1;cgXoJIo~PI27Tk{e!7LzZn((j*MkK@|GWTMS2FnZ%&)A%K6PXetVAJplj{gQ1o{am?W?GEu{YZ zRwTa}>1nC5k^aGNP~HZ3eP2-Y_hiw1gW|SO`tuvHRmui;18t?M9=}D)Z_@JHw9dIe z^tbVqN>XuJDE;}3XxHzFdfBe*$eFbCkbs;zU4=)77mxa)OE&4r#{bv%C z-TX#9zg5p~*3$<>|1`-2XNAz8^Y%4BG5gOnDBJnBD)=`mc+Y4vz`tdYX_KMbk6Z!y zKK|c8pZwb}S@W&z=NKvg{tcU>StcPh2FMkVPyKnHmwywA{ibGQ3bj;wyl2F}WtGAn zQiTjC-twvcGW5y62`2(*z(Ah$=ih)Ft@_kp^kPDu^`DRa%Gsv`Js8NN{`KhVB-NiD zgBL6EdH(+kwCBA$VO=8z)bW_>>%WiCPyBb8=&zCZFeOj=--3SRcbQ(&$F0eO{=7Ha zhy6&y@42d-U=3cZ_2c*7Gtj=pyW2u* za2Uw)_}_y4Pm^OmIC?uR%~Jn|u>a0%Lqaea$U^^5u`j>R63l^%)o}*0(El#%o7TJA zLb-knWT^i-?DrGyD%{rT?prD~tx z4_-!)?){%-(0)(qFQIKPppNBKp8tP~x?@!RwlR1aMLNg-lhD2s^_S3g7*NOak%*(f zCjg)4Sl?5#Vt#Ltb41)<+Ro@@BuZ1ho4E_n7vLO!Bf#%2Zvgnsj{ATe0U@l7GeC_2 z{hwmb6} z-nQ+Hu~^G|O$@`cZ8u|eE%N1#d|52oVtbJzZ^R-kwi{KByot@W{){q5zSxmx)?Q!o zq2r_4p?{qtZ=0{^{6)6;ES`_GtX~p~B<4?UFNxK)$d|?H9r=b9`SMs(i@X_&IrA|q zI1fg*e2rBZF}FMOw$1VFj(ky)e2HUwS(1FYW4kkNI<`CWRgUe>e2rtfGjHFF@wOPA zOTNYMu-%z&Fawy%*x%z;1v%PYaFu;U1{+{dS0N1zrap2Cf4}0{sAPli!=+c9S+a zddsg74*@;^tb43nS5Xh}Ju2RNyA9yCa`{db@4NGukoRlaq*sJzQ1D^S>$?J6J8b#B zTg-2V@o&3)2D}JN1$d7-JY>m8+Y|%zU4`L@zX06)-m5H%`X=|6APfYN0s1b$Ih@xw zUViRXz6kq>{|8ZcvDupU8IK3}Ox?@Ry~@S^#g78Z0Q{Z4zc0Wwq+UMWTDkatVAT(| z;mY@U@8;Kl+xoiJ{NCCo{vU2P3gqaO?{n_wef^by<a><>LQ=^MvpjtbD&G;#Yn2 zeI6^~|KW3|K#f@WKHp=E0F6Mpb9`&{#s3544dF6Y`96R19s=+kuGV}xlWpSv;c}@! zjaK;6-KkAY;@F_~@`|JP9eu$!d(e|N-><T_he4odZ_X<18ef+`#cWB z|HJBZ8jTx%NZ&65eh=8^=Uk`7|26W1u$rR$zZ&r-@&B-TK{&^)e4pRqPxkHdT$~GJ z{tu_yX)$W$`@Hr!9pE?lbK&EywJH9ug(rm52<88KB7U*}zR%-A{6CzoSMX6Q-{;&v z2JrKpUix*a5dSZ@Cxp`g<^OvlekBcmP1Ubcttb8;PWLP5sFm**Bc2Ro`t9;meY~}L z;{OHpgm8AQ{GZ=0e-miUKXbiJ{6Cy7Sg=tm-!DacJ&^79YqLE*#QzKC3E}Hl`96R1 z4gl5x+4^s``-}gF&kYMUV&(t*p2M9Q_&$#v@&AH(L-;yY{(n5;PsIPjr+=77tbD%% z;<=jmzRdq&cE~)AUHLw*`}t1q=i>i)BwxBJC<8X%FXTE0&h>7P>;Hm!N89gQ`9Gg^ zoe$*ey)HLjcPkVBZ~HD-&=D&C?}2zZ;O2vcEEE4PsCTsO&Xw=;Z?sPX{wx09w)K|L zwPZl~Ki4_@TSMRHc}M2|mXb-%CkB-7^I6x8K%v(;cwJ+O|NEr3G_#EX<@>zfSq12@ z&O!Wtn>>=rF$2o~cS3wW;N^QdlrMsPChe6V4EV(W{Rub$*bM04=Uz65|NA9+f!k3& z$NTI%sB}RrQhoD#4)Xyoztg2${J$Vx;(w>g@A!;$0>JO6@mTP`qgGmEe+pv|>$J|n z>v$9YZ$-}_ZBl+`B8~!Y0V9E(fxHcaeF3zAeiaJ8%NSnZWy43N=wW4IRD-a z@b5;)=jGh=+}x__gMX*@S3o|#UGB&6CH|jFr^sX5%Ktc*S^iJ|;Ch=EfRh2PJAZNTt!}(!=8Y(TRsnhrPzDX^>-v_>*3sjqYr#GM9E_aSGlRUXH zX}^SEGoXBsT2j-P3;2zxXMjNfzq9Y#fY}ys1h5)#>s!|{a%BR(aUl&Ah5>4*w4|o3 z`P+JIzY^fz*vk4`pxS7U_!gkGes$bNu1t#gVC8NP} zKLwssHUi1|)onYuGC2kb!DfIODlMsLDt^W_Y3~9T02M&m=K{44@3Gzoq|&Eub;y;; zaYzU@1JqDyNlnx7GoB0n2J{8ERzGDTSQi)$)C1}CsY_jQWdbRWSt{zu05w!vQqxTQ zi{By~3#4?P6!q92e?u$)GU-o;eaMvw=qajLl`;d=P-#g`GxaS#GrI@q0eGGZu#J5Y zWoyh0`7rGQsEK`37Y z`%R8VLa-U2hDu9n>WA;~?-AVq@EiRJa+n6V&S4VJ2>8)gq1qrn9chLxIG)YNUGsh5mNAA7dm}CJ;=~#p(nD)KFn zcwPwl+|TimD-%fYD2ZS)Kn<0a)Rfx#4W0`g1ttP(a?rlt_NLO_B80tp@^5ljZCq0*9?>gH#<+C#2Pawj3!3{XR* zB{kL6-*mH!T$$ufLa-U2hDu9ns+*tbY7eNf78t_a%GY`3BhK7 z8Y(TRscwFzt3Bk(BzF>m%>Xr2T2fP8{Y^K!$dyU%Bm|oQYN)iNrn>o=uJ({CliW!N zHUrd9X-Q3W^*7z@B3CB4lMrkMsG-u5n(F3fy4pjoOmZh7*bGoZr6o1h)!%fpi(HxH zPC~F5poU6IYO0%`>1q$TGRd8UU^74sm6p_0SAWyZE^=j(I|;#NfEp?-si|&$rmH>V z$|QFZg3SOmR9aF~UHwfryU3ME?j!`80cxnUq^7$0nXdMbE0f$w2sQ)MP-#g`b@eyh z>>^htxswoV2B@LZlA7w~XS&)$u1s<#A=nI1L!~7()z#m0vx{7r5`xVDHB?$s zQ(gT{H@nD{N$w;Bn*nO5w4|oG`I)ZvkSmkiNeDIr)KF<$HcM^il05w!vQd3?1O*gy9l}YX- z1e*bBsI;V}y7`%|_K+)++(`&F1JqDyNlkV2H{I+aS0=fW5Nrmhq0*9?>gH#<+C#2P zawj3!3{XR*B{kL6-*mH!T$$ufLa-U2hDu9ns+*tbY7eNf78t_ za%GY`3BhK78Y(TRscwFzt3Bk(BzF>m%>Xr2T2fP8{Y^K!$dyU%Bm|oQYN)iNrn>o= zuJ({CliW!NHUrd9X-Q3W^*7z@B3CB4lMrkMsG-u5n(F3fy4pjoOmZh7*bGoZr6o1h z)!%fpi(HxHPC~F5poU6IYO0%`Wn$0w7{@oj4>=qUxiW!Zi!avG_uHEPufdom0*?Yb z7BV@8lISSEd^(-&;{W3R>G(^&>b?m-?*&-r zwH=Ti3M>TtJQs-ni~r}#r&H~RbN?iu1W2gEG_W_o^TKC9s_nH_ZxPxtfkZ!&2qpv6 zP-#g`ThmS@XVHB?$s({y}5m%8`C?wvV~bOP%uR3N?pco#_ZcLBLFfpof*x*9S-4V9MER2QF4 z)sBs@d5{`IM(nD6`Mh8tFc(PWTtKc&AfrBICw&;8hDu9nnyTOFQtuYn+@52|CUAcR z{)VugnYA`Xa%FNK3BhJS=}s-FX)Hik4O@=@d=r3e0Y3tGPI(6KIv0>Da^_p#(okU- zpoU7zAo)L^DFLWig<+|Nj^EO#^cNtjpp<;&3sbx&JSReLZNS1YsZ-3~22CTyJweAotmG zA-uF1XFy~Be-gIEpRv+L3Bo`w7|_)Jxz1sfvMm?GmNtcfI0Ksc|6JI`wa228FpyIQ zH1vPIZ*si&eokeV#uWn^`v0A1oi0{Z{&(RZ2nf1#9@e#tpFct${M+g}4O?sx2I36l!T)bXAM!m1@i#3Q z$g%&wgZ2+meP}s;F)G{)%w)uCXbsVl}0!U+l}p{r_*^`y`XA=ga7lL-hE}>Pf#j} z05OoI|8K?q<5e308nu`z3^X&4rT=rC!!B$?f-n$725kNxMLL!SzChjKYX2Y(U2GNx zto1*f!>0l-0{kXF*YNxRw01o3+vU3g!lEz`SO)070Po%K9YubN|3F|ga2vqu8@|I; z5AgY}bv%54^bjC^`~-IJVz@Bi!hq%1h+x9vj@ASIxCPi(N0r)%T zdA`TUb)Ebhy?X&|bFeb177WB%h9xbtiCm;6k!+EO6t&1EGDdpkO&;~V${RiEH>6o! z?@`~Yyw0P(S9#QpkjwmDhRH_bQKi)Q_ZD zZg|x9C{j2c{9ep_buRU1c$7~^dDNx;H7Jj`lym-dEw75jSlwx7q}-#tEEcDE zyZS{Qs0iqrB0r9A!-&<*{pc6mAP~`%92tyseC>czGET>paT8b1BC;&l%$Fc$J&Z z+Nxi#@+yz|Ugb3&^}WisuO8>YL1nxa$K_Q{I-P;_y~;_mGqAo_xeJ|fJ56UJ$g>@< z@+yz|Ugb3&^}Whns>ki|D0ici^}Wj7=wy92+FC1jqm%W$%1saZy~?XR>U)*fc+~eQ zcdHKjU1@8j+?7t$_bPX#8TGx&UFk%9uX594Twdi>9`$R|EO)IAJ3Y$XY2I%BP3*lS zk!nu-cKFFdJM6gUjyO&`oN)Z$Q{nGO78&huE;B}5^5D6K(cU~^@SxMLSiSlE_b2VO zakt32^*4V0VaE-p8}}E#vD=GxFCO^rHNW5SiMc&K+wr*f&RKTq4iEge_VsJt95m{h zOBUZg?8Lv;-n+wV)27Uxum>dU0k&RjZC@chmj9%?z^hwuup$ndB&v1 z=gmozyBL2j?XlwFbtf0U*{*u-J)4Ri9A;eduXi84{;(V^PB%_E?cRaL;q9V_v6Ig>?Q>UE(OrEGdT!RA zjFaBk@_6N|cejr&c=X`1NhcTgyJ*Fd7k)GA_r^*0?soQT|Ib)G@z#OHmVJ$j>Km(H zJI+}B#)R@{W4r2OcAss&_-^T(gMYErcy*?+;KS#C^^Z+Y%ouxY>70Ssavq{HuHEBz z#)41oy<>XU>BfSGU+Es%+P-?>84LgY)%dNQ77R01ubfa`y{2@|MQ2=l)NhRiU-X({ ztlrPqeCg8uLpw*VM0Yn;8e8gWCowvE$X(OhN2gvftw$NQefP!<{bqEEeD}%xvN;%M z)lFR|TwL7m6qvGLknzz=73((*F+O^DMfb=jog?2pQTghvrDOkd)hmOh{?2&yo{eQ+ z{cmxRTl z^Nt@JTlC=Hko}}n~5;(#sh9^iBtyXw=q@7*R3z1fyZ;CBp|5NB6&}Yv1FIr&nw# znOR|ce(BOH4k?aq>~_fLTBH7!K2st;MNbFaJFeSM{Zm)W+|=c)>x_xDP2CoK^7z}A?p0BB?xN`b zl}3L0O!p~Ay?E*=eP&j7duV3G8Q0FZc>n)gyHnNe#~2+i|EgmBw|87Ms_~`wiYDIJ z=kqfzDL-`TZ4JFH+%oL?V~m?7)vL{&D~)a!JodMCYtQ=dA8-EzWX_vCs^ZzF-ahB{ z$@i5;PJ6^0+3|_D-|ARYx9gYzL*700l(SIy!?dMO-#>e6L)TjlnR?Z^k)0NS@2*o9 zymP?X;_9=DjqBPQyY@1M-(>_T^ZEn782rpD-G76FYs$2d7e3jy=eR!&Y`3{{Hq%E@3?B&p^ZB~cSFDOOUfqx@!l@?Y(9EQ?ZC@0FO@xA(*Ly?UGKQ+iLzBMJYF;Q zsM@|Ld9HrRKUQ8=G4JK>zd3(W+3=;0S2kX{wcANEjkn*t?!z9RS456`q}`UIFsYQk zGHB=0IbBbw_~_W81I}yM^_)8gmVH+`XYS>gIyy)0yZ*x-2R-+E`|686+f?-8e#Ui2 zjq6r42NThN;^FV1&C|Aa+tA6V98mRm@1p1>!_O|R9^8N2Ge0h>d$!LMqtA&(!=HLC z`>et^7PC_H!*)i^xFJvPUR1ZwJF7}2?ok}=f~jVPQGZvT-et>Y8})P6^_jC`_Vg{g z7|%WcwdeOT2E1Ice#`#G)Z2S5+c?a4_l2XU7_a@*xZ)4Uo@l&#=A8qL^_`8ahd$D7 z(el~TC$%?b;A|Crx-{}H%r4V#m|uSOQRf{|8kydI+|<#fk#oLAc6Vg2yrF(-J7eg) z$^qrY(F5nsFRMGOIQj+#admO@?<-;3fTFs6Z|ZvSJx0IlF^-#h8na%lSigA}W7(TC zc3byRJL4~pSH9P)XzXF|?wwv4G_1l{wh{wuDvkV4hl8G5xap{OZ#E`&1Y?N%9evPq zn>!h=eF)oU_cCT(*K^sL9>%QGy4*3n*D$01UPEs@uc)rF+abpeD~|4WIkFRqqt9bVSCvLiJPQLhOCvL%s2p%` zarO0=kLdWv(xSQ#(9F@Lk=|F2==ih!jlVu#IiN#v^`1j-+}PQ8;ujOjhu>}7^759F zOWPZ#z5b{A3nou`>dcAv{7^aa>*X)pY|ft$!8!WKig~Lyp1A(=af^OeyJp>t-*)>1 zM^nF#KUilxGqbAC)-{{<*|= - - - - Noble Engine API reference - - - - - -
- -
- - - - - - -
- - -

A li'l game engine for Playdate.

- -

Modules

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NobleA li'l game engine for Playdate.
Noble.AnimationAnimation states using a spritesheet/imagetable.
Noble.BonkEngine-specific error handling.
Noble.GameDataOperations for game data / save slots.
Noble.InputA complete encapsulation of the Playdate's input system.
Noble.MenuAn extended implementation of playdate.ui.gridview, meant for 1-dimensional, single-screen text menus.
Noble.SettingsOperations for game settings / stats.
Noble.TextText and font handling.
Noble.TransitionAn abstract class from which transition types are extended.
EaseExtensions to playdate.easingFunctions, aliased as Ease in Noble Engine.
-

Classes

- - - - - - - - - -
NobleSceneAn abstract scene class.
NobleSpriteAn extension of Playdate's sprite object, incorporating Noble.Animation and other Noble Engine features.
-

Examples

- - - - - -
SceneTemplate.lua
- - -
- -
- -
- Noble Engine by Mark LaCroix, Noble Robot - - Documentation created using LDoc 1.5.0. - Last updated 2024-04-28 21:37:43 - -
- -
- - - - diff --git a/source/libraries/noble/.docs/ldoc.css b/source/libraries/noble/.docs/ldoc.css deleted file mode 100644 index e1dca6e..0000000 --- a/source/libraries/noble/.docs/ldoc.css +++ /dev/null @@ -1,524 +0,0 @@ -@import url(https://fonts.googleapis.com/css?family=Quicksand:300,700); -@import url(https://fonts.googleapis.com/css?family=Lato); -@import url(https://fonts.googleapis.com/css2?family=Source+Code+Pro:wght@200;300;400;600;700;900&display=swap); -* { - -webkit-box-sizing: border-box; - box-sizing: border-box; -} - -body { - margin: 2em; - font-family: "Lato", arial, helvetica, geneva, sans-serif; - background-color: #ffcb1f; - color: #31302f; -} - -code, -tt { - font-family: "Source Code Pro", monospace; - font-size: 1.1em; - letter-spacing: -1px; - font-weight: 600; - color: #056d8d; -} - -span.types:before { - content: ": "; -} - -span.types:after { - content: ""; -} - -.type, -.default, -.optional { - color: #74726e; -} - -.default .value { - font-weight: bold; -} - -.parameters { - list-style-type: none; -} - -.parameters li { - margin-bottom: 10px; - line-height: 1.5em; -} - -.parameter { - font-weight: 600; - color: #045771; -} - -body, td, th { - font-size: .95em; - line-height: 1.2em; -} - -p, ul { - margin: 10px 0 0 0px; -} - -ul { - padding-left: 25px; -} - -strong { - font-weight: bold; -} - -em { - font-style: italic; -} - -.logo { - width: 100%; - background-image: url("logo.png"); - background-repeat: no-repeat; - background-position: center; - height: 150px; -} - -.logo h1 { - display: none; -} - -h1 { - font-family: 'Quicksand', sans-serif; - font-weight: bold; - color: #cf5a5a; - font-size: 2.5em; - margin: 20px 0 30px 0; -} - -h2, h3, h4 { - font-family: 'Quicksand', sans-serif; - font-weight: 700; - margin: 15px 0 10px 0; -} - -h2 { - font-size: 1.25em; - color: #cf5a5a; -} - -h3 { - font-size: 1.15em; -} - -h4 { - font-size: 1em; -} - -.section-header { - margin-top: 50px; - padding: 10px; - padding-left: 15px; - margin-left: -25px; - border-radius: 50px; - border-left: 20px solid #cf5a5a; - background-color: #e9cfc8; - color: #31302f; -} - -a:link { - font-weight: bold; - color: #cf5a5a; - text-decoration: none; -} - -a:visited { - font-weight: bold; - color: #cf5a5a; - text-decoration: none; -} - -a:link:hover { - text-decoration: underline; -} - -hr { - background: #cf5a5a; - border-radius: 100px; - height: 6px; - margin: 60px 20%; - border: none; -} - -blockquote { - margin-left: 3em; -} - -ul { - list-style-type: none; -} - -p.name { - font-family: "Andale Mono", monospace; - padding-top: 1em; -} - -span.item-name { - background-color: #fbd350; - display: inline-block; - color: #31302f; - padding: 10px 20px; - border-radius: 25px; - border: 2px solid #bf9817; - font-size: 1em; - font-family: "Source Code Pro", monospace; - font-weight: 700; - letter-spacing: -1px; -} - -pre { - background-color: #056d8d; - border: 2px solid #03475c; - -webkit-box-shadow: 0 0 10px 0 rgba(49, 48, 47, 0.5); - box-shadow: 0 0 10px 0 rgba(49, 48, 47, 0.5); - border-radius: 15px; - color: #f0ece3; - padding: 15px 20px; - margin: 10px 0 10px 0; - font-family: "Source Code Pro", monospace; - -moz-tab-size: 4; - -o-tab-size: 4; - tab-size: 4; - overflow-x: auto; - width: 100%; - font-weight: 400; -} - -pre .keyword { - color: #ffcb1f; -} - -pre .string, pre .number { - color: #eb6e6e; - font-weight: bold; -} - -pre .comment { - color: #b4b1aa; -} - -pre.example { - font-size: .85em; -} - -table.index td { - text-align: left; - vertical-align: top; -} - -#container { - margin-left: auto; - margin-right: auto; - border-radius: 25px; - -webkit-box-shadow: 0 0 25px 0 rgba(49, 48, 47, 0.3); - box-shadow: 0 0 25px 0 rgba(49, 48, 47, 0.3); - overflow: hidden; - max-width: 1600px; -} - -#product { - text-align: center; - height: 500px; - background-color: #31302f; - color: #f0ece3; -} - -#product > :before { - content: 'Noble Engine'; -} - -#product big { - font-size: 2em; -} - -#main { - background-color: #31302f; - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - -ms-flex-direction: row; - flex-direction: row; -} - -#navigation { - -webkit-box-flex: 1; - -ms-flex-positive: 1; - flex-grow: 1; - -ms-flex-negative: 0; - flex-shrink: 0; - -ms-flex-preferred-size: auto; - flex-basis: auto; - width: 275px; - padding: 0 10px; - overflow: hidden; - color: #f0ece3; -} - -#navigation a:link, #navigation a:visited { - font-weight: normal; -} - -#navigation .nav-module, -#navigation .nav-modules { - color: #31302f; - padding: 15px; - border-radius: 20px; -} - -#navigation .nav-module a:link, #navigation .nav-module a:visited, -#navigation .nav-modules a:link, -#navigation .nav-modules a:visited { - color: #31302f; -} - -#navigation .nav-module ul a:active, #navigation .nav-module ul a:hover, #navigation .nav-module ul .selected, -#navigation .nav-modules ul a:active, -#navigation .nav-modules ul a:hover, -#navigation .nav-modules ul .selected { - color: #f0ece3; - background-color: #cf5a5a; - padding: 5px 10px; - margin-left: -10px; - border-radius: 30px; - text-decoration: none; -} - -#navigation .nav-module ul .selected, -#navigation .nav-modules ul .selected { - line-height: 2em; - margin-left: -28px; - padding-left: 28px; - border-radius: 0 30px 30px 0; - font-weight: bold; -} - -#navigation .nav-module { - background-color: #eb6e6e; - margin: 0 -10px 20px 10px; - border-radius: 20px 0 0 20px; -} - -#navigation .nav-module h2 { - background-color: #cf5a5a; - color: #f0ece3; - margin: 0; -} - -#navigation .nav-module ul a:active, #navigation .nav-module ul a:hover { - color: #31302f; - background-color: #ffcb1f; -} - -#navigation .nav-modules { - background-color: #f3e5bc; - margin: 0 10px 30px 10px; - padding-top: 5px; -} - -#navigation h1 { - color: #eb6e6e; - line-height: 80%; - font-family: 'Quicksand', sans-serif; - font-weight: 900; - font-size: 32px; - padding-left: 20px; - padding-bottom: 20px; -} - -#navigation h2 { - color: #31302f; - font-size: 1.1em; - background-color: #f0ece3; - padding: 5px 10px; - margin-right: 20px; - border-radius: 30px; - text-decoration: none; -} - -#navigation ul { - font-size: 1em; - list-style-type: none; - margin: 1px 1px 10px 1px; - padding-left: 0px; -} - -#navigation li { - display: block; - margin: 0px 0px 6px 12px; - padding-left: 0px; -} - -#navigation li li a { - margin: 0px 3px 0px -1em; -} - -#content { - -webkit-box-flex: 1; - -ms-flex-positive: 1; - flex-grow: 1; - -ms-flex-negative: 1; - flex-shrink: 1; - -ms-flex-preferred-size: auto; - flex-basis: auto; - min-width: 0; - padding: 2em; - padding-left: 3.5em; - border-left: 4px solid #cf5a5a; - -webkit-box-shadow: inset 0 0 50px 0 rgba(207, 90, 90, 0.25); - box-shadow: inset 0 0 50px 0 rgba(207, 90, 90, 0.25); - background-color: #f0ece3; -} - -#about { - clear: both; - padding: 20px; - border-top: 2px solid #31302f; - background-color: #cf5a5a; - color: #f0ece3; -} - -#about a:link, #about a:visited, #about a:hover, #about a:active { - color: #ffcb1f; -} - -@media print { - body { - font: 12pt "Times New Roman", "TimeNR", Times, serif; - } - a { - font-weight: bold; - color: #1c4e68; - text-decoration: underline; - } - #main { - background-color: #ffffff; - border-left: 0px; - } - #container { - margin-left: 2%; - margin-right: 2%; - background-color: #ffffff; - } - #content { - padding: 1em; - background-color: #ffffff; - } - #navigation { - display: none; - } - pre.example { - font-family: "Andale Mono", monospace; - font-size: 10pt; - page-break-inside: avoid; - } -} - -table.module_list { - border-width: 1px; - border-style: solid; - border-color: #b1e3fa; - border-collapse: collapse; -} - -table.module_list td { - border-width: 1px; - padding: 3px; - border-style: solid; - border-color: #b1e3fa; -} - -table.module_list td.name { - background-color: #e0f4fc; - min-width: 200px; -} - -table.module_list td.summary { - width: 100%; -} - -table.function_list { - border-width: 1px; - border-style: solid; - border-color: #b1e3fa; - border-collapse: collapse; -} - -table.function_list td { - border-width: 1px; - padding: 3px; - border-style: solid; - border-color: #b1e3fa; -} - -table.function_list td.name { - background-color: #e0f4fc; - min-width: 200px; -} - -table.function_list td.summary { - width: 100%; -} - -ul.nowrap { - overflow: auto; - white-space: nowrap; -} - -dl.table dt, -dl.function dt { - padding-top: 1em; -} - -dl.table dd dd, -dl.function dd { - padding-bottom: 30px; - margin: 10px 0 10px 20px; - border-bottom: 2px dotted #056d8d; -} - -dl.table dd > :last-child, -dl.function > :last-child { - border-bottom: none; -} - -dl.table h3, -dl.function h3 { - font-size: .95em; -} - -/* stop sublists from having initial vertical space */ -ul ul { - margin-top: 0px; -} - -ol ul { - margin-top: 0px; -} - -ol ol { - margin-top: 0px; -} - -ul ol { - margin-top: 0px; -} - -/* make the target distinct; helps when we're navigating to a function */ -a:target + * { - border: 2px solid #31302f; - border-bottom: 6px solid #31302f; - background-color: #cf5a5a; - color: #f0ece3; -} -/*# sourceMappingURL=ldoc.css.map */ \ No newline at end of file diff --git a/source/libraries/noble/.docs/logo.png b/source/libraries/noble/.docs/logo.png deleted file mode 100644 index d2abce285ec47df600d21b0df7ad924171001b03..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1224 zcmV;(1ULJMP)Px#3{Xr|MF0Q*@a*INaB%<2A1I%sssI200d!JMQvg8b z*k%9#1WidqK~z}7?U=u+qd*kKCraQV7u;ggUv3qw0=B}W***)&`=ks$MX-{23SnEp zR}rQiaL;#UG%*=XvTT`w4X*L$`S+bOlPkn~z1Mra*L&IZ@!VsZt84Wfl3gyNCz0lI znW*Dah#sy2^(2y27r&Bof8EX@U3+Dv#K-vV{R&g0tg=X1QalQ#x)~pz`@kXQIVQUzoN zgc7!0`cf8WI!tQ_nNu2(z(_P`7a-nZ#*M5DnW@;1ZIDv}iZj{;W%=zxQe6{9Lgp&$ zSj*}dJH%U<%yc5tB;=J17Ok(uEE3C<;vpg12UwVAZkI_UMNc+b4+zg?w96!7bVlPO zGYj`X#B*6*5RdjHO+MLd2-z(e!K}2%e(6QDZjm2ho&NWSwUZ&D-AW&$mXyexP~ zi)RoRPu4|}VB20*obw^drIN-3 z4+`XqUSB>y>?sTgZYN)K1U|VV%5|2}R$E4LcM9tf+Ga&i_>f;*4BCisaG_AzkddwU z{z7Sdh!qLuU7~;>9JZX0|G{YvvHy_b*dpI>Oxf^ndU8O5oRHQbJF!NVPF{rN9-a7= ze9{dGS?xqLX~i~3Qr;m5Uwj|$e+8@@a&`!Y1du%&7UdCQ37$bnF(2@V)KA%pj?WNVfqZ%lZl8;m;s&m*ee`pAYBwfJlct zp5sxEkZ1ZaGW&oB8p5|fm>_9cW%`5MBdtX@Op!%BLB mdDSm?_WqmCd%f3xSbqT!%gTn6M}bBF0000 - - - - Noble Engine API reference - - - - - -
- -
- - - - - - -
- -

Ease

-

Extensions to playdate.easingFunctions, aliased as Ease in Noble Engine.

-

See the Playdate SDK for a list of easing functions.

- -
- -

Functions

- -
-
- - enter(__easingFunction) -
-
- Returns the first half of an "inOut" or "outIn" easing function. - Returns nil for any easing function that isn't in the form of Ease.inOutXxxx or Ease.outInXxxx. Ease.linear returns itself. - -

Parameters

-
    -
  • __easingFunction -
    - - - -
  • -
- - - - -

Usage

-
local ease = Ease.outInQuad
-local easeEnter = Ease.enter(ease)	-- Returns "Ease.outQuad"
- -
-
- - exit(__easingFunction) -
-
- Returns the second half of an "inOut" or "outIn" easing function. - Returns nil for any easing function that isn't in the form of Ease.inOutXxxx or Ease.outInXxxx. Ease.linear returns itself. - -

Parameters

-
    -
  • __easingFunction -
    - - - -
  • -
- - - - -

Usage

-
local ease = Ease.outInQuad
-local easeExit = Ease.exit(ease)		-- Returns "Ease.inQuad"
- -
-
- - reverse(__easingFunction) -
-
- Returns the reverse function of the provided function. - Returns nil for any easing function that isn't in the form of Ease.inXxxx or Ease.outXxxx. Ease.linear returns itself. - -

Parameters

-
    -
  • __easingFunction -
    - - - -
  • -
- - - - -

Usage

-
local ease = Ease.inQuad
-local reverseEase = Ease.reverse(ease) -- Returns "Ease.outQuad"
- -
-
- - -
- -
- -
- Noble Engine by Mark LaCroix, Noble Robot - - Documentation created using LDoc 1.5.0. - -
- -
- - - - diff --git a/source/libraries/noble/.docs/modules/Noble.Animation.html b/source/libraries/noble/.docs/modules/Noble.Animation.html deleted file mode 100644 index 0945b8e..0000000 --- a/source/libraries/noble/.docs/modules/Noble.Animation.html +++ /dev/null @@ -1,507 +0,0 @@ - - - - - Noble Engine API reference - - - - - -
- -
- - - - - - -
- -

Noble.Animation

-

Animation states using a spritesheet/imagetable.

-

Ideal for use with NobleSprite objects. Suitable for other uses as well.

- -
- -

Setup

- -
-
- - Noble.Animation.new(__view) -
-
- Create a new animation "state machine". This function is called automatically when creating a new NobleSprite. - -

Parameters

-
    -
  • __view - string -
    - This can be: the path to a spritesheet image file or an image table object (Graphics.imagetable). See Playdate SDK docs for imagetable file naming conventions. -
  • -
- -

Returns

-
    - - animation, a new animation object. -
- - -

See

- - -

Usage

-
local myHero = MyHero("path/to/spritesheet")
-
-- When extending NobleSprite (recommended), you don't call Noble.Animation.new(),
--- but you do feed its __view argument into MySprite.super.init()...
-MyHero = {}
-class("MyHero").extends(NobleSprite)
-
-function MyHero:init()
-	MyHero.super.init(self, "assets/images/Hero")
-	-- ...
-	-- A new NobleSprite creates a Noble.Animation object named "self.animation"
-	self.animation:addState("idle", 1, 30)
-	self.animation:addState("jump", 31, 34, "float")
-	self.animation:addState("float", 35, 45)
-	self.animation:addState("turn", 46, 55, "idle")
-	self.animation:addState("walk", 56, 65)
-	-- ...
-end
-
local myAnimation = Noble.Animation.new("path/to/spritesheet")
-
-- When extending playdate.graphics.Sprite, Noble.Animation.new() must be called manually...
-MyHero = {}
-class("MyHero").extends(Graphics.sprite)
-
-function MyHero:init()
-	MyHero.super.init(self)
-	-- ...
-	self.animation = Noble.Animation.new("assets/images/Hero")
-	self.animation:addState("idle", 1, 30)
-	self.animation:addState("jump", 31, 34, "float")
-	self.animation:addState("float", 35, 45)
-	self.animation:addState("turn", 46, 55, "idle")
-	self.animation:addState("walk", 56, 65)
-	-- ...
-end
- -
-
- - animation:addState(__name, __startFrame, __endFrame, __next[, __loop=true], __onComplete[, __frameDuration=1]) -
-
- Add an animation state. The first state added will be the default set for this animation.

- -

NOTE: Added states are first-degree member objects of your Noble.Animation object, so do not use names of already existing methods/properties ("current", "draw", etc.). - -

Parameters

-
    -
  • __name - string -
    - The name of the animation, this is also used as the key for the animation. -
  • -
  • __startFrame - integer -
    - This is the first frame of this animation in the imagetable/spritesheet -
  • -
  • __endFrame - integer -
    - This is the final frame of this animation in the imagetable/spritesheet -
  • -
  • __next - string -
    - By default, animation states will loop, but if you want to sequence an animation, enter the name of the next state here. -
  • -
  • __loop - boolean - = true (default) -
    - If you want a state to "freeze" on its final frame, instead of looping, enter false here. -
  • -
  • __onComplete -
    - This function will run when this animation is complete. Be careful when using this on a looping animation! -
  • -
  • __frameDuration - integer - = 1 (default) -
    - This is the number of ticks between each frame in this animation. If not specified, it will be set to 1. -
  • -
- - - - -

Usage

-
-- You can reference an animation's state's properties using bog-standard lua syntax:
-
-animation.idle.startFrame		-- 30
-animation.walk.endFrame			-- 65
-animation.["walk"].endFrame		-- 65
-animation.jump.name				-- "jump"
-animation.["jump"].next			-- "float"
-animation.idle.next				-- nil
- -
-
-

Properties

- -
-
- - animation.current -
-
- The currently set animation state.

- -

This is intended as read-only. You should not modify this property directly. - - - - -

See

- - - -
-
- - animation.currentName -
-
- The name of the current animation state. Calling this instead of animation.current.name is just a little faster.

- -

This is intended as read-only. You should not modify this property directly. - - - - - - -

-
- - animation.currentFrame -
-
- The current frame of the animation. This is the index of the imagetable, not the frame of the current state.

- -

Most of the time, you should not modify this directly, although you can if you're feeling saucy and are prepared for unpredictable results. - - - - -

See

- - - -
-
- - animation.direction -
-
- This controls the flipping of the image when drawing. DIRECTIONRIGHT is unflipped, DIRECTIONLEFT is flipped on the X axis. - - - - - -

Usage

-
function MyHero:goLeft()
-	self.animation.direction = Noble.Animation.DIRECTION_LEFT
-	-- ...
-end
- -
-
-

Methods

- -
-
- - animation:setState(__animationState[, __continuous=false], __unlessThisState) -
-
- Sets the current animation state. This can be run in a object's update method because it only changes the animation state if the new state is different from the current one. - -

Parameters

-
    -
  • __animationState - string or Noble.Animation -
    - The name of the animation to set. You can pass the name of the state, or the object itself. -
  • -
  • __continuous - boolean - = false (default) -
    - Set to true if your new state's frames line up with the previous one's, i.e.: two walk cycles but one is wearing a cute hat! -
  • -
  • __unlessThisState - string or Noble.Animation -
    - If this state is the current state, do not set the new one. -
  • -
- - - - -

Usage

-
animation:setState("walk")
-
animation:setState(animation.walk)
-
animation:setState(animation.walkNoHat)
---
-animation:setState(animation.walkYesHat, true)
-
function MyHero:update()
-	-- Input
-	-- ...
-
-	-- Physics/collisions
-	-- ...
-
-	-- Animation states
-	if (grounded) then
-		if (turning) then
-			self.animation:setState(self.animation.turn)
-		elseif (math.abs(self.velocity.x) > 15) then
-			self.animation:setState(self.animation.walk, false, self.animation.turn)
-		else
-			self.animation:setState(self.animation.idle, false, self.animation.turn)
-		end
-	else
-		self.animation:setState(self.animation.jump, false, self.animation.float)
-	end
-
-	groundedLastFrame = grounded
-end
- -
-
- - animation:draw([__x=0[, __y=0[, __advance=true]]]) -
-
- Draw the current frame.

- -

When attached to a NobleSprite, this is called by NobleSprite:draw() when added to a scene. For non-NobleSprite sprites, put this method inside your sprite's draw() method, or inside NobleScene:update. - -

Parameters

-
    -
  • __x - number - = 0 (default) -
    - - - -
  • -
  • __y - number - = 0 (default) -
    - - - -
  • -
  • __advance - boolean - = true (default) -
    - Advances to the next frame after drawing this one. Noble.Animation is frame-based, not "delta time"-based, so its speed is dependent on your game's framerate. -
  • -
- - - - -

Usage

-
function MySprite:draw()
-	animation:draw()
-end
-
function MyScene:update()
-	animation:draw(100,100)
-end
- -
-
- - animation:drawFrame(__frameNumber[, __stateName=self.currentName[, __x=0[, __y=0[, __direction=self.direction]]]]) -
-
- Sometimes, you just want to draw a specific frame. - Use this for objects or sprites that you want to control outside of update loops, such as score counters, flipbook-style objects that respond to player input, etc. - -

Parameters

-
    -
  • __frameNumber - integer -
    - The frame to draw from the current state. This is not an imagetable index. Entering 1 will draw the selected state's startFrame. -
  • -
  • __stateName - string - = self.currentName (default) -
    - The specific state to pull the __frameNumber from. -
  • -
  • __x - number - = 0 (default) -
    - - - -
  • -
  • __y - number - = 0 (default) -
    - - - -
  • -
  • __direction - = self.direction (default) -
    - Override the current direction. -
  • -
- - - - - -
-
-

Constants

- -
-
- - Noble.Animation.DIRECTION_RIGHT -
-
- A re-contextualized instance of playdate.graphics.kImageUnflipped - - - - - - -
-
- - Noble.Animation.DIRECTION_LEFT -
-
- A re-contextualized instance of playdate.graphics.kImageFlippedX - - - - - - -
-
- - -
- -
- -
- Noble Engine by Mark LaCroix, Noble Robot - - Documentation created using LDoc 1.5.0. - -
- -
- - - - diff --git a/source/libraries/noble/.docs/modules/Noble.Bonk.html b/source/libraries/noble/.docs/modules/Noble.Bonk.html deleted file mode 100644 index 38feee4..0000000 --- a/source/libraries/noble/.docs/modules/Noble.Bonk.html +++ /dev/null @@ -1,188 +0,0 @@ - - - - - Noble Engine API reference - - - - - -
- -
- - - - - - -
- -

Noble.Bonk

-

Engine-specific error handling.

-

Noble Engine overrides/supersedes some Playdate SDK behavior. A "bonk" is what happens when your game breaks the engine.

- -

Most bonks will throw during normal operation, but others ("debug bonks") introduce some execution overhead so are not - checked by default.

- -
- -

Functions

- -
-
- - Noble.Bonk.startCheckingDebugBonks() -
-
- Begin checking for debug bonks, on every frame. This introduces needless overhead, so don't do it in a release build. - You can only run this if you ran previously Noble.new() with __enableDebugBonkChecking as true, which you should also not do in a release build. - - - - -

See

- - - -
-
- - Noble.Bonk.stopCheckingDebugBonks() -
-
- Stop checking for debug bonks on every frame.

- -

NOTE: You can only run this if debug bonk checking is enabled. - - - - - - -

-
- - Noble.Bonk.disableDebugBonkChecking() -
-
- Disable the ability to check for debug bonks. It frees up some memory. Once you disable debug bonk checking, you cannot re-enable it.

- -

NOTE: You can only run this if debug bonk checking is enabled. - - - - - - -

-
- - Noble.Bonk.checkingDebugBonks() -
-
- Are we debug bonk checking for debug bonks? - - -

Returns

-
    - - bool - - - -
- - - - -
-
- - Noble.Bonk.checkDebugBonks() -
-
- Manually check for debug bonks. - This method runs every frame when checkingDebugBonks is true, but you may call it manually instead.

- -

NOTE: You can only run this if debug bonk checking is enabled. - - - - - - -

-
- - -
- -
- -
- Noble Engine by Mark LaCroix, Noble Robot - - Documentation created using LDoc 1.5.0. - -
- -
- - - - diff --git a/source/libraries/noble/.docs/modules/Noble.GameData.html b/source/libraries/noble/.docs/modules/Noble.GameData.html deleted file mode 100644 index 9cdb090..0000000 --- a/source/libraries/noble/.docs/modules/Noble.GameData.html +++ /dev/null @@ -1,550 +0,0 @@ - - - - - Noble Engine API reference - - - - - -
- -
- - - - - - -
- -

Noble.GameData

-

Operations for game data / save slots.

-

- -

- -
- -

Functions

- -
-
- - Noble.GameData.setup(__keyValuePairs[, __numberOfSlots=1[, __saveToDisk=true[, __modifyExistingOnKeyChange=true]]]) -
-
- Sets up the GameDatas (save slots) for your game, and/or loads any existing GameDatas from disk. - You can only run this once, ideally in your main.lua before you load your first scene. - -

Parameters

-
    -
  • __keyValuePairs - table -
    - All the data items for a saved game, and their default values, as key/value pairs. NOTE: Do not use "nil" as a value. -
  • -
  • __numberOfSlots - integer - = 1 (default) -
    - If you want multiple save slots, enter an integer here. You can add additional slots later. -
  • -
  • __saveToDisk - boolean - = true (default) -
    - Saves your default values immediately to disk. -
  • -
  • __modifyExistingOnKeyChange - boolean - = true (default) -
    - Updates the existing gameData objects on disk if you make changes to your keys (not values) during development or when updating your game. -
  • -
- - - -

See

- - -

Usage

-
Noble.GameData.setup(
-	{
-		name = "",
-		checkpointReached = 0,
-		score = 0
-	},
-	3,
-	true,
-	true
-)
-Noble.GameData.set("name", "Game A", 1)
-Noble.GameData.set("name", "Game B", 2)
-Noble.GameData.set("name", "Game C", 3)
- -
-
- - Noble.GameData.get(__dataItemName[, __gameDataSlot]) -
-
- Returns the value of the requested data item. - -

Parameters

-
    -
  • __dataItemName - string -
    - The name of the data item. -
  • -
  • __gameDataSlot - integer - (optional) -
    - If set, uses a specific GameData slot. If not, uses the most recently touched GameData slot. -
  • -
- -

Returns

-
    - - any - - - -
- - - -

Usage

-
Noble.GameData.get("equippedItem")
-
Noble.GameData.get("equippedItem", 2)
- -
-
- - Noble.GameData.set(__dataItemName, __value[, __gameDataSlot[, __saveToDisk=true[, __updateTimestamp=true]]]) -
-
- Set the value of a GameData item. - -

Parameters

-
    -
  • __dataItemName - string -
    - The name of the data item. -
  • -
  • __value - any -
    - The data item's new value -
  • -
  • __gameDataSlot - integer - (optional) -
    - If set, uses a specific GameData slot. If not, uses the most recently touched GameData slot. -
  • -
  • __saveToDisk - boolean - = true (default) -
    - Saves to disk immediately. Set to false if you prefer to manually save (via a checkpoint or menu). -
  • -
  • __updateTimestamp - boolean - = true (default) -
    - Sets the timestamp of this GameData to the current time. Leave false to retain existing timestamp. -
  • -
- - - -

See

- - -

Usage

-
Noble.GameData.set("score", 74205)
-
Noble.GameData.set("score", Noble.GameData.get("score") + 100)
- -
-
- - Noble.GameData.reset(__dataItemName[, __gameDataSlot[, __saveToDisk=true[, __updateTimestamp=true]]]) -
-
- Reset a GameData item to its default value, defined in setup. - -

Parameters

-
    -
  • __dataItemName - string -
    - The name of the data item. -
  • -
  • __gameDataSlot - integer - (optional) -
    - If set, uses a specific GameData slot. If not, uses the most recently touched GameData slot. -
  • -
  • __saveToDisk - boolean - = true (default) -
    - Saves to disk immediately. Set to false if you prefer to manually save (via a checkpoint or menu). -
  • -
  • __updateTimestamp - boolean - = true (default) -
    - Resets the timestamp of this GameData to the current time. Leave false to retain existing timestamp. -
  • -
- - - -

See

- - - -
-
- - Noble.GameData.resetAll([__gameDataSlot[, __saveToDisk=true[, __updateTimestamp=true]]]) -
-
- Reset all values in a GameData slot to the default values, defined in setup. - -

Parameters

-
    -
  • __gameDataSlot - integer - (optional) -
    - If set, uses a specific GameData slot. If not, uses the most recently touched GameData slot. -
  • -
  • __saveToDisk - boolean - = true (default) -
    - Saves to disk immediately. Set to false if you prefer to manually save (via a checkpoint or menu). -
  • -
  • __updateTimestamp - boolean - = true (default) -
    - Resets the timestamp of this GameData to the current time. Leave false to retain existing timestamp. -
  • -
- - - -

See

- - - -
-
- - Noble.GameData.addSlot([__numberToAdd=1[, __saveToDisk=true]]) -
-
- Add a save slot to your game. This is useful for games which have arbitrary save slots, or encourage save scumming. - -

Parameters

-
    -
  • __numberToAdd - integer - = 1 (default) -
    - What it says on the tin. -
  • -
  • __saveToDisk - boolean - = true (default) -
    - Saves to disk immediately. Set to false if you prefer to manually save (via a checkpoint or menu). -
  • -
- - - - -

Usage

-
Noble.GameData.addSlot()
-
Noble.GameData.addSlot(10)
- -
-
- - Noble.GameData.deleteSlot(__gameDataSlot[, __collapseGameDatas=true]) -
-
- Deletes a GameData from disk if its save slot is greater than the default number established in setup. - Otherwise, resets all data items to default values using resetAll.

- -

Generally, you won't need this unless you've added save slots using addSlot. In other cases, use resetAll. - -

Parameters

-
    -
  • __gameDataSlot - integer -
    - The slot holding the GameData to delete. Unlike other methods that take this argument, this is not optional. -
  • -
  • __collapseGameDatas - boolean - = true (default) -
    - Re-sorts the gameDatas table (and renames existing JSON files on disk) to fill the gap left by the deleted GameData. -
  • -
- - - -

See

- - -

Usage

-
Noble.GameData.deleteSlot(6)
-
Noble.GameData.deleteSlot(15, false)
- -
-
- - Noble.GameData.deleteAllSlots() -
-
- Deletes all GameDatas from disk, except for the number specified in setup, which are reset to default values. - Use this to clear all data as if you were running setup again. - Generally, you don't need this unless you've added save slots using addSlot. In other cases, use resetAll on each slot. - - - - -

See

- - - -
-
- - Noble.GameData.getTimestamp(__gameDataSlot) -
-
- Returns the timestamp of the requested GameData, as a tuple (local time, GMT time). The timestamp is updated - See Playdate SDK for details on how a time object is formatted. NOTE: Timestamps are stored internally in GMT. - -

Parameters

-
    -
  • __gameDataSlot - integer -
    - The GameData slot to get the timestamp of. Unlike other methods that take this argument, this is not optional. -
  • -
- -

Returns

-
    -
  1. - table - Local time
  2. -
  3. - table - GMT time
  4. -
- - - -

Usage

-
Noble.GameData.getTimestamp(1)
- -
-
- - Noble.GameData.getNumberOfSlots() -
-
- Returns the current number of GameData slots. - - -

Returns

-
    - - int - - - -
- - - - -
-
- - Noble.GameData.getCurrentSlot() -
-
- Returns the number of the current GameData slot. - - -

Returns

-
    - - int - - - -
- - - - -
-
- - Noble.GameData.save([__gameDataSlot]) -
-
- Saves a single GameData to disk. If you want to save all GameDatas, use saveAll instead. - -

Parameters

-
    -
  • __gameDataSlot - integer - (optional) -
    - If set, uses a specific GameData slot. If not, uses the most recently touched GameData slot. -
  • -
- - - -

See

- - -

Usage

-
Noble.GameData.save()
-
Noble.GameData.save(3)
- -
-
- - Noble.GameData.saveAll() -
-
- Save all GameDatas to disk. If you only have one, or want to save a specific one, use save instead. - - - - -

See

- - - -
-
- - -
- -
- -
- Noble Engine by Mark LaCroix, Noble Robot - - Documentation created using LDoc 1.5.0. - -
- -
- - - - diff --git a/source/libraries/noble/.docs/modules/Noble.Input.html b/source/libraries/noble/.docs/modules/Noble.Input.html deleted file mode 100644 index 877a799..0000000 --- a/source/libraries/noble/.docs/modules/Noble.Input.html +++ /dev/null @@ -1,617 +0,0 @@ - - - - - Noble Engine API reference - - - - - -
- -
- - - - - - -
- -

Noble.Input

-

A complete encapsulation of the Playdate's input system.

-

The Playdate SDK gives developers multiple ways to manage input. Noble Engine's approach revolves around the SDK's "inputHandlers," extending them to include additional input methods, and pull in other hardware functions that the SDK puts elsewhere. See usage below for the full list of supported methods. -

By default, Noble Engine assumes each scene will have an inputManager assigned to it. So, for example, you can define one inputManager for menu screens and another for gameplay scenes in your main.lua, and then in each scene, set which one that scene uses. You can instead define a unique inputHandler in each scene. -

You may also create and manage inputManagers within and outside of scenes. When a NobleScene is loaded, its inputHandler will become active, thus, inputHandlers do not carry across scenes, and all input is suspended during scene transitions. An advanced use-case is to leave a scene's inputHandler as nil, and manage it separately. -

NOTE: While the Playdate SDK allows you to stack as many inputHandlers as you want, Noble Engine assumes only one active inputHandler at a time. You may still manually call playdate.inputHandlers.push() and playdate.inputHandlers.pop() yourself, but Noble Engine will not know about it and it may cause unexpected behavior. -

In addition, you may directly query button status using the SDK's methods for that, but it is not advised to use that as the primary way to manage input for Noble Engine projects, because much of Noble.Input's functionality will not apply.

-

See

- -

Usage

-
local myInputHandler = {
-	AButtonDown = function() end,	-- Fires once when button is pressed down.
-	AButtonHold = function() end,	-- Fires each frame while a button is held (Noble Engine implementation).
-	AButtonHeld = function() end,	-- Fires once after button is held for 1 second (available for A and B).
-	AButtonUp = function() end,		-- Fires once when button is released.
-	BButtonDown = function() end,
-	BButtonHold = function() end,
-	BButtonHeld = function() end,
-	BButtonUp = function() end,
-	downButtonDown = function() end,
-	downButtonHold = function() end,
-	downButtonUp = function() end,
-	leftButtonDown = function() end,
-	leftButtonHold = function() end,
-	leftButtonUp = function() end,
-	rightButtonDown = function() end,
-	rightButtonHold = function() end,
-	rightButtonUp = function() end,
-	upButtonDown = function() end,
-	upButtonHold = function() end
-	upButtonUp = function() end,
-
-	cranked = function(change, acceleratedChange) end,	-- See Playdate SDK.
-	crankDocked = function() end,						-- Noble Engine implementation.
-	crankUndocked = function() end,						-- Noble Engine implementation.
-
-	orientationChanged = function() end					-- Noble Engine implementation.
-}
-
- -
- -

Functions

- -
-
- - Noble.Input.getHandler() -
-
- Get the currently active input handler. Returns nil if none are active. - - -

Returns

-
    - - table - A table of callbacks which handle input events. -
- - -

See

- - - -
-
- - Noble.Input.setHandler([__inputHandler=nil]) -
-
- Use this to change the active inputHandler. -

Enter nil to disable input. Use Noble.Input.setEnabled to disable/enable input without losing track of the current inputHandler. - -

Parameters

-
    -
  • __inputHandler - table - = nil (default) -
    - A table of callbacks which handle input events. -
  • -
- - - -

See

- - - -
-
- - Noble.Input.clearHandler() -
-
- A helper function that calls Noble.Input.setHandler() with no argument. - - - - -

See

- - - -
-
- - Noble.Input.setEnabled(__value) -
-
- Enable and disable user input without dealing with inputHanders. - The Playdate SDK requires removing all inputHanders to halt user input, so while the currentHandler is cleared when false is passed to this method, - it is cached so it can be later re-enabled by passing true it. - -

Parameters

-
    -
  • __value - boolean -
    - Set to false to halt input. Set to true to resume accepting input. -
  • -
- - - -

See

- - - -
-
- - Noble.Input.getEnabled() -
-
- Checks to see that there is an active inputHandler - - -

Returns

-
    - - bool - Returns true if the input system is enabled. Returns false if setEnabled(false) was used, or if currentHandler is nil. -
- - - - -
-
- - Noble.Input.setCrankIndicatorStatus(__active[, __evenWhenUndocked=false]) -
-
- Enable/disable on-screen system crank indicator.

- -

NOTE: The indicator will only ever show if the crank is docked, unless __evenWhenUndocked is true. - -

Parameters

-
    -
  • __active - boolean -
    - Set true to start showing the on-screen crank indicator. Set false to stop showing it. -
  • -
  • __evenWhenUndocked - boolean - = false (default) -
    - Set true to show the crank indicator even if the crank is already undocked (__active must also be true). -
  • -
- - - - - -
-
- - Noble.Input.getCrankIndicatorStatus() -
-
- Checks whether the system crank indicator status. Returns a tuple. - - -

Returns

-
    -
  1. - bool - Is the crank indicator active?
  2. -
  3. - bool - Is the crank indicator being forced when active, even when the crank is undocked?
  4. -
- - -

See

- - - -
-
- - Noble.Input.getOrientation([__getStoredValues=false]) -
-
- Checks the current display orientation of the device. Returns a tuple. - If the accelerometer is not currently enabled, this method will turn it on, return current values, and then turn it off. - If you are trying to get raw accelerometer values rather than the display orientation, you may want to use playdate.readAccelerometer() instead. - -

Parameters

-
    -
  • __getStoredValues - boolean - = false (default) -
    - If true, this method will simply return the most recently stored values, rather than use the accelerometer to check for new ones. -
  • -
- -

Returns

-
    -
  1. - str - The named orientation of the device (a pseudo enum Noble.Input.ORIENTATION_XX)
  2. -
  3. - list - Accelerometer values, where list[1] is x, list[2] is y and list[3] is z
  4. -
- - -

See

- - - -
-
-

Constants -

- -
- A set of constants referencing device inputs, stored as strings. Can be used for querying button input, - but are mainly for on-screen prompts or other elements where a string literal is useful, such as a filename, GameData value, or localization key. - For faster performance, use the ones that exist in the Playdate SDK (i.e.: playdate.kButtonA), which are stored as binary numbers. -
-

Usage

-
function newPrompt(__input, __promptString)
-	-- ...
-	local icon = Graphics.image.new("assets/images/UI/Icon_" .. __input)
-	-- ...
-end
-
-promptMove = newPrompt(Noble.Input.DPAD_HORIZONTAL, "Move!")				-- assets/images/UI/Icon_dPadHorizontal.png"
-promptJump = newPrompt(Noble.Input.BUTTON_A, "Jump!") 						-- assets/images/UI/Icon_buttonA.png"
-promptCharge = newPrompt(Noble.Input.CRANK_FORWARD, "Charge the battery!")	-- assets/images/UI/Icon_crankForward.png"
-
-
- - Noble.Input.BUTTON_A -
-
- "buttonA" - - - - - - -
-
- - Noble.Input.BUTTON_B -
-
- "buttonB" - - - - - - -
-
- - Noble.Input.BUTTON_MENU -
-
- The system menu button.

- -

"buttonMenu" - - - - - - -

-
- - Noble.Input.DPAD -
-
- Referencing the D-pad component itself, rather than an input.

- -

"dPad" - - - - - - -

-
- - Noble.Input.DPAD_HORIZONTAL -
-
- Referencing the left and right input D-pad inputs.

- -

"dPadHorizontal" - - - - - - -

-
- - Noble.Input.DPAD_VERTICAL -
-
- Referencing the up and down input D-pad inputs.

- -

"dPadVertical" - - - - - - -

-
- - Noble.Input.DPAD_UP -
-
- "dPadUp" - - - - - - -
-
- - Noble.Input.DPAD_DOWN -
-
- "dPadDown" - - - - - - -
-
- - Noble.Input.DPAD_LEFT -
-
- "dPadLeft" - - - - - - -
-
- - Noble.Input.DPAD_RIGHT -
-
- "dPadRight" - - - - - - -
-
- - Noble.Input.CRANK -
-
- Referencing the crank component itself, rather than an input.

- -

"crank" - - - - - - -

-
- - Noble.Input.CRANK_FORWARD -
-
- AKA: Clockwise. See Playdate SDK.

- -

"crankForward" - - - - - - -

-
- - Noble.Input.CRANK_REVERSE -
-
- AKA: Anticlockwise. See Playdate SDK.

- -

"crankReverse" - - - - - - -

-
- - Noble.Input.CRANK_DOCK -
-
- Referencing the action of docking the crank.

- -

"crankDock" - - - - - - -

-
- - Noble.Input.CRANK_UNDOCK -
-
- Referencing the action of undocking the crank.

- -

"crankUndock" - - - - - - -

-
- - Noble.Input.ORIENTATION_UP -
-
- Referencing the display orientations.

- -

"orientationUp" - - - - - - -

-
- - -
- -
- -
- Noble Engine by Mark LaCroix, Noble Robot - - Documentation created using LDoc 1.5.0. - -
- -
- - - - diff --git a/source/libraries/noble/.docs/modules/Noble.Menu.html b/source/libraries/noble/.docs/modules/Noble.Menu.html deleted file mode 100644 index 98beff1..0000000 --- a/source/libraries/noble/.docs/modules/Noble.Menu.html +++ /dev/null @@ -1,928 +0,0 @@ - - - - - Noble Engine API reference - - - - - -
- -
- - - - - - -
- -

Noble.Menu

-

An extended implementation of playdate.ui.gridview, meant for 1-dimensional, single-screen text menus.

-

- -

- -
- -

Setup

- -
-
- - Noble.Menu.new([__activate=true[, __alignment=Noble.Text.ALIGN_LEFT[, __localized=false[, __color=Graphics.kColorBlack[, __padding=2[, __horizontalPadding[, __margin=2[, __font=Noble.Text.getCurrentFont()[, __selectedCornerRadius=__font:getHeight()/4[, __selectedOutlineThickness=1]]]]]]]]]]) -
-
- Create a new menu object. - -

Parameters

-
    -
  • __activate - boolean - = true (default) -
    - Activate this menu upon creation. -
  • -
  • __alignment - = Noble.Text.ALIGN_LEFT (default) -
    - The text alignment of menu items. -
  • -
  • __localized - boolean - = false (default) -
    - If true, menu item names are localization keys rather than display names. -
  • -
  • __color - = Graphics.kColorBlack (default) -
    - The color of menu item text. The selected highlight will be the inverse color. -
  • -
  • __padding - integer - = 2 (default) -
    - Cell padding for menu items. -
  • -
  • __horizontalPadding - integer - (optional) -
    - Use this to override horizontal padding, useful for certain fonts. If nil, uses __padding. -
  • -
  • __margin - integer - = 2 (default) -
    - Spacing between menu items. -
  • -
  • __font - = Noble.Text.getCurrentFont() (default) -
    - If nil, uses current set font. -
  • -
  • __selectedCornerRadius - integer - = __font:getHeight()/4 (default) -
    - Sets rounded corners for a selected menu item. -
  • -
  • __selectedOutlineThickness - integer - = 1 (default) -
    - Sets the outline thickness for selected items. -
  • -
- -

Returns

-
    - - menu, a new menu item. -
- - -

See

- - -

Usage

-
local menu = Noble.Menu.new(
-	true,
-	Noble.Text.ALIGN_CENTER,
-	false,
-	Graphics.kColorWhite,
-	4, 6,
-	Noble.Text.large,
-	nil, 3
-)
-menu:addItem("Play Game", function() TitleScreen:playGame() end)
-menu:addItem("Options", function() Noble.transition(OptionsScreen) end)
-menu:addItem("Credits", function() Noble.transition(CreditsScreen) end)
- -
-
- - menu:addItem(__nameOrKey[, __clickHandler[, __position[, __displayName[, __displayNameIsALocalizationKey=false]]]]) -
-
- Adds a item to this menu. - -

Parameters

-
    -
  • __nameOrKey - string -
    - The name of this menu item. It can be a display name or a localization key. Must be unique. -
  • -
  • __clickHandler - function - (optional) -
    - The function that runs when this menu item is "clicked." -
  • -
  • __position - integer - (optional) -
    - Insert the item at a specific position. If not set, adds to the end of the list. -
  • -
  • __displayName - string - (optional) -
    - You can create an optional, separate display name for this item. You can add or change this at runtime via setItemDisplayName. -
  • -
  • __displayNameIsALocalizationKey - boolean - = false (default) -
    - If true, will treat the __displayName as a localization key. This is separate from this menu's localized value. -
  • -
- - - -

See

- - - -
-
- - menu:removeItem([__menuItem=#menu.itemNames]) -
-
- Removes a item from this menu. - -

Parameters

-
    -
  • __menuItem - int or string - = #menu.itemNames (default) -
    - The menu item to remove. You can enter either the item's name/key or it's position. If left blank, removes the last item. -
  • -
- - - -

See

- - - -
-
-

Properties

- -
-
- - menu.localized -
-
- - - - -
    -
  • _ - boolean - = false (default) -
    - Indicates whether this menu's item names are treated as localization keys. -
  • -
- - - - - -
-
- - menu.currentItemNumber -
-
- - - - -
    -
  • _ - integer -
    - The current menu item's index.

    - -

    This is meant as a read-only value. Do not modify it directly. -

  • -
- - - -

See

- - - -
-
- - menu.currentItemName -
-
- - - - -
    -
  • _ - string -
    - The current menu item's name.

    - -

    This is meant as a read-only value. Do not modify it directly. -

  • -
- - - -

See

- - - -
-
- - menu.width -
-
- - - - -
    -
  • _ - integer -
    - The width of the widest menu item plus the menu's horizontal padding.

    - -

    This is meant as a read-only value. Do not modify it directly. -

  • -
- - - - - -
-
-

Methods

- -
-
- - menu:activate() -
-
- Activate this menu. - This selects the most recently selected menu item (or the first item if none have been previously selected), and enables this menu's selectPrevious, selectNext, and click methods. - - - - - -

Usage

-
local menu = Noble.Menu.new(false)
-menu:activate()
- -
-
- - menu:deactivate() -
-
- Deactivate this menu. - This deselects all menu items, and disables this menu's selectPrevious, selectNext, and click methods. - - - - - -

Usage

-
local menu = Noble.Menu.new(true)
-menu:deactivate()
- -
-
- - menu:isActive() -
-
- Check to see if this menu is currently active. - - -

Returns

-
    - - bool - - - -
- - - - -
-
- - menu:selectPrevious([__force=false[, __wrapSelection=true]]) -
-
- Selects the previous item in this menu. This menu must be active. - -

Parameters

-
    -
  • __force - boolean - = false (default) -
    - Force this method to run, even if this menu is not active. -
  • -
  • __wrapSelection - boolean - = true (default) -
    - Selects the final menu item if the first menu item is currently selected. -
  • -
- - - -

See

- - -

Usage

-
TitleScreen.inputHandler.upButtonDown = function()
-	menu:selectPrevious()
-end
- -
-
- - menu:selectNext([__force=false[, __wrapSelection=true]]) -
-
- Selects the next previous item in this menu. This menu must be active. - -

Parameters

-
    -
  • __force - boolean - = false (default) -
    - Force this method to run, even if this menu is not active. -
  • -
  • __wrapSelection - boolean - = true (default) -
    - Selects the first menu item if the final menu item is currently selected. -
  • -
- - - -

See

- - -

Usage

-
TitleScreen.inputHandler.downButtonDown = function()
-	menu:selectNext()
-end
- -
-
- - menu:select(__menuItem[, __force=false]) -
-
- Selects a specific item in this menu, either by it's index, or it's name. This menu must be active. - -

Parameters

-
    -
  • __menuItem - int or string -
    - The menu item to select. You can enter the item's number or it's name/key. -
  • -
  • __force - boolean - = false (default) -
    - Force this method to run, even if this menu is not active. -
  • -
- - - -

See

- - -

Usage

-
function resetMenu()
-	menu:select(1, true)
-	menu:deactivate()
-end
-
function resetMenu()
-	menu:select("Play Game", true)
-	menu:deactivate()
-end
- -
-
- - menu:click([__force=false]) -
-
- Runs the function associated with the currently selected menu item. This menu must be active. - -

Parameters

-
    -
  • __force - boolean - = false (default) -
    - Force this method to run, even if this menu is not active. -
  • -
- - - -

See

- - -

Usage

-
TitleScreen.inputHandler.AButtonDown = function()
-	menu:click()
-end
- -
-
- - menu:getItemDisplayName(__itemName) -
-
- Gets the display name of a menu item.

- -

If a menu item does not have a display name, then the __nameOrKey (or its localized string) will be returned instead. This method is used internally when draw is called.

- -

If this menu's localized value is true, a returned __nameOrKey will always be localized, but a returned display name is only localized if the __displayNameIsALocalizationKey argument was set to true when the display name was added. - -

Parameters

-
    -
  • __itemName - string -
    - The menu item you want the display name of. -
  • -
- -

Returns

-
    - - string - - - -
- - -

See

- - - -
-
- - menu:setItemDisplayName(__itemName, __displayName[, __displayNameIsALocalizationKey=false]) -
-
- When you add a menu item, you can give it a display name that's different from it's actual name. This method adds or changes the display name of a menu item. - -

Parameters

-
    -
  • __itemName - string -
    - The menu item name (or key if this menu uses localization keys). -
  • -
  • __displayName - string -
    - The display name. -
  • -
  • __displayNameIsALocalizationKey - boolean - = false (default) -
    - Set to use to indicate that this display name is a localization key. This setting is separate from localized -
  • -
- - - - -

Usage

-
function changeDifficultyLevel(__level)
-	menu:setItemDisplayName("Difficulty", "Difficulty: " .. __level)
-end
- -
-
-

Tables

- -
-
- - menu.itemNames -
-
- A string "array" of menu item strings/keys. - You cannot add or remove menu items by modifying this table. - It is meant as a read-only table, provided for convenience when iterating, etc. Modifying its values may break other methods. - - - - -

See

- - -

Usage

-
for i = 1, #menu.itemNames, 1 do
-	menu.clickHandlers[menu.itemNames[i]]	= nil -- Clears all click handlers, for some reason.
-end
- -
-
- - menu.clickHandlers -
-
- A table of functions associated with menu items. Items are a defined when calling addItem, but their associated functions may be modified afterward.

- -

You cannot add or remove menu items by modifying this table. - - - - -

See

- - -

Usage

-
local menu = Noble.Menu.new(true)
-menu.addItem("Play Game")
-menu.addItem("Options")
-
-menu.clickHandlers["Play Game"] = function() TitleScreen:playGame() end
-menu.clickHandlers["Options"] = function() Noble.transition(OptionsScreen) end
-
local menu = Noble.Menu.new(true)
-menu.addItem("Play Game")
-menu.addItem("Options")
-
-menu.clickHandlers = {
-	["Play Game"] = function TitleScreen:playGame() end,
-	["Options"] = function() Noble.transition(OptionsScreen) end
-}
- -
-
- - menu.itemPositions -
-
- A key/value table of menu item indices.

- -

This is meant as a read-only table, provided for convenience. Modifying its values will break other methods. - - - - - -

Usage

-
menu.itemPositions["Play Game"]	-- 1
-menu.itemPositions["Options"]	-- 2
- -
-
- - menu.itemWidths -
-
- A key/value table of pixel widths for each menu item, based on its text. Useful for animation, layout, etc.

- -

This is meant as a read-only table, provided for convenience. Modifying its values will break other methods. - - - - - -

Usage

-
local playGameMenuItemWidth = menu.itemWidths["Play Game"]
- -
-
-

Drawing

- -
-
- - menu:draw(__x, __y) -
-
- Draw's this menu to the screen. You may call this manually, but ideally, you will put it in in your scene's update or drawBackground method. - -

Parameters

-
    -
  • __x -
    - - - -
  • -
  • __y -
    - - - -
  • -
- - - - -

Usage

-
function YourScene:update()
-	YourScene.super.update(self)
-	menu:draw(50, 100)
-end
- -
-
- - menu:drawItem(__x, __y, __itemIndex) -
-
- This method is called for every non-selected item when draw is called. You shouldn't call this directly, but you may re-implement it if you wish. - -

Parameters

-
    -
  • __x -
    - - - -
  • -
  • __y -
    - - - -
  • -
  • __itemIndex -
    - - - -
  • -
- - - -

See

- - -

Usage

-
-- This is the default implementation for this method.
-function menu:drawItem(__x, __y, __itemIndex)
-	Graphics.setImageDrawMode(self.fillMode)
-	local xAdjustment = 0
-	if (self.alignment == Noble.Text.ALIGN_CENTER) then
-		xAdjustment = self.width/2 - self.horizontalPadding/2
-	elseif (self.alignment == Noble.Text.ALIGN_RIGHT) then
-		xAdjustment = self.width - self.horizontalPadding
-	end
-	Noble.Text.draw(self.itemNames[__itemIndex], __x + self.horizontalPadding/2 + xAdjustment, __y + self.padding/2, self.alignment, self.localized, self.font)
-end
- -
-
- - menu:drawSelectedItem(__x, __y, __itemIndex) -
-
- This method is called for every selected item when draw is called. You shouldn't call this directly, but you may re-implement it if you wish. - -

Parameters

-
    -
  • __x -
    - - - -
  • -
  • __y -
    - - - -
  • -
  • __itemIndex -
    - - - -
  • -
- - - -

See

- - -

Usage

-
-- This is the default implementation for this method.
-function menu:drawSelectedItem(__x, __y, __itemIndex)
-	local xAdjustmentText = 0
-	local xAdjustmentRect = 0
-	if (self.alignment == Noble.Text.ALIGN_CENTER) then
-		xAdjustmentText = self.width/2 - self.horizontalPadding/2
-	xAdjustmentRect = self.width/2 - self.itemWidths[self.itemNames[__itemIndex]]/2 - self.horizontalPadding/2
-	elseif (self.alignment == Noble.Text.ALIGN_RIGHT) then
-		xAdjustmentText = self.width - self.horizontalPadding
-		xAdjustmentRect = self.width - self.itemWidths[self.itemNames[__itemIndex]] - self.horizontalPadding
-	end
-	Graphics.setColor(self.color)
-	Graphics.fillRoundRect(__x + xAdjustmentRect, __y, self.itemWidths[self.itemNames[__itemIndex]]+self.horizontalPadding, self.textHeight+self.padding, self.selectedCornerRadius)
-	Graphics.setColor(self.otherColor)
-	Graphics.setLineWidth(self.selectedOutlineThickness)
-	Graphics.drawRoundRect(__x + xAdjustmentRect, __y, self.itemWidths[self.itemNames[__itemIndex]]+self.horizontalPadding, self.textHeight+self.padding, self.selectedCornerRadius)
-	Graphics.setImageDrawMode(self.otherFillMode)
-	Noble.Text.draw(self.itemNames[__itemIndex], __x + self.horizontalPadding/2 + xAdjustmentText, __y+self.padding/2, self.alignment, self.localized, self.font)
-end
- -
-
- - -
- -
- -
- Noble Engine by Mark LaCroix, Noble Robot - - Documentation created using LDoc 1.5.0. - -
- -
- - - - diff --git a/source/libraries/noble/.docs/modules/Noble.Settings.html b/source/libraries/noble/.docs/modules/Noble.Settings.html deleted file mode 100644 index 60ffb05..0000000 --- a/source/libraries/noble/.docs/modules/Noble.Settings.html +++ /dev/null @@ -1,331 +0,0 @@ - - - - - Noble Engine API reference - - - - - -
- -
- - - - - - -
- -

Noble.Settings

-

Operations for game settings / stats.

-

- -

- -
- -

Functions

- -
-
- - Noble.Settings.setup(__keyValuePairs[, __saveToDisk=true[, __modifyExistingOnKeyChange=true]]) -
-
- Sets up the settings for your game. You can only run this once, and you must run it before using other Noble.Settings functions. It is recommended to place it in your main.lua, before Noble.new().

- -

NOTE: You will not be able to add new keys via the Noble.Settings.set method. This means you need to specify the keys and default values of all of the settings in your game at setup. - If you need to add keys that are not known during setup, it is probably not a setting and you should consider using Noble.GameData instead. - -

Parameters

-
    -
  • __keyValuePairs - table -
    - table. Your game's settings, and thier default values, as key/value pairs. NOTE: Do not use "nil" as a value. -
  • -
  • __saveToDisk - boolean - = true (default) -
    - Saves your default values immediatly to disk. -
  • -
  • __modifyExistingOnKeyChange - boolean - = true (default) -
    - Updates the existing settings object on disk if you make changes to your settings keys (not values) during development or when updating your game. -
  • -
- - - - -

Usage

-
Noble.Settings.setup({
-	difficulty = "normal",
-	music = true,
-	sfx = true,
-	players = 2,
-	highScore = 0	-- You can store persistant stats here, too!
-})
- -
-
- - Noble.Settings.get(__settingName) -
-
- Get the value of a setting. - -

Parameters

-
    -
  • __settingName - string -
    - The name of the setting. -
  • -
- -

Returns

-
    - - any - The value of the requested setting. -
- - -

See

- - - -
-
- - Noble.Settings.set(__settingName, __value[, __saveToDisk=true]) -
-
- Set the value of a setting.

- -

NOTE: If __settingName is not a key in the __keyValuePairs dictionary given to the setup method it will not be added to the Settings. - -

Parameters

-
    -
  • __settingName - string -
    - The name of the setting. -
  • -
  • __value - any -
    - The setting's new value -
  • -
  • __saveToDisk - boolean - = true (default) -
    - Saves to disk immediately. Set to false if you prefer to manually save (via a confirm button, etc). -
  • -
- - - -

See

- - - -
-
- - Noble.Settings.reset(__settingName[, __saveToDisk=true]) -
-
- Resets the value of a setting to its default value defined in setup(). - -

Parameters

-
    -
  • __settingName - string -
    - The name of the setting. -
  • -
  • __saveToDisk - boolean - = true (default) -
    - Saves to disk immediately. Set to false if you prefer to manually save (via a confirm button, etc). -
  • -
- - - -

See

- - - -
-
- - Noble.Settings.resetSome(__settingNames[, __saveToDisk=true]) -
-
- Resets the value of multiple settings to thier default value defined in setup(). This is useful if you are storing persistant stats like high scores in Settings and want the player to be able to reset them seperately. - -

Parameters

-
    -
  • __settingNames - table -
    - The names of the settings, in an array-style table. -
  • -
  • __saveToDisk - boolean - = true (default) -
    - Saves to disk immediately. Set to false if you prefer to manually save (via a confirm button, etc). -
  • -
- - - -

See

- - - -
-
- - Noble.Settings.resetAll([__saveToDisk=true]) -
-
- Resets all settings to thier default values defined in setup(). - -

Parameters

-
    -
  • __saveToDisk - boolean - = true (default) -
    - Saves to disk immediately. Set to false if you prefer to manually save (via a confirm button, etc). -
  • -
- - - -

See

- - - -
-
- - Noble.Settings.save() -
-
- Saves settings to disk. - You don't need to call this unless you set __saveToDisk as false when setting or resetting a setting (say that five times fast!). - - - - -

See

- - - -
-
- - -
- -
- -
- Noble Engine by Mark LaCroix, Noble Robot - - Documentation created using LDoc 1.5.0. - -
- -
- - - - diff --git a/source/libraries/noble/.docs/modules/Noble.Text.html b/source/libraries/noble/.docs/modules/Noble.Text.html deleted file mode 100644 index 9a01b52..0000000 --- a/source/libraries/noble/.docs/modules/Noble.Text.html +++ /dev/null @@ -1,313 +0,0 @@ - - - - - Noble Engine API reference - - - - - -
- -
- - - - - - -
- -

Noble.Text

-

Text and font handling.

-

- -

- -
- -

Constants

- -
-
- - Noble.Text.ALIGN_LEFT -
-
- An alternate way to call Playdate SDK's kTextAlignment.left - - - - - - -
-
- - Noble.Text.ALIGN_RIGHT -
-
- An alternate way to call Playdate SDK's kTextAlignment.right - - - - - - -
-
- - Noble.Text.ALIGN_CENTER -
-
- An alternate way to call Playdate SDK's kTextAlignment.center - - - - - - -
-
-

Fonts

- -
- You can use these fonts in your project, or override them with your own if you wish. -
-

Usage

-
Noble.Text.FONT_SMALL = Graphics.font.new("assets/fonts/MySmallFont")
-Noble.Text.setFont(Noble.Text.FONT_SMALL)
-
-
- - Noble.Text.FONT_SYSTEM -
-
- The Playdate system font. - - - - - - -
-
- - Noble.Text.FONT_SMALL -
-
- Noble Sans: A sans-serif 8×9 font, with English and Japanese-Kana character sets. - - - - - - -
-
- - Noble.Text.FONT_MEDIUM -
-
- Noble Slab: (This font is not ready yet!) - - - - - - -
-
- - Noble.Text.FONT_LARGE -
-
- Satchel Roughed: A sans-serif 17×14 rounded font, with an English character set. - - - - - - -
-
-

Functions

- -
-
- - Noble.Text.getCurrentFont() -
-
- - - - - -

Returns

-
    - - The currently set font. -
- - - - -
-
- - Noble.Text.setFont(__font, __variant) -
-
- Set the current font - -

Parameters

-
    -
  • __font -
    - any -
  • -
  • __variant -
    - any -
  • -
- - - - - -
-
- - Noble.Text.draw(__string, __x, __y[, __alignment=Noble.Text.ALIGN_LEFT[, __localized=false[, __font=Noble.Text.getCurrentFont()]]]) -
-
- Abstracts multiple playdate.text drawing functions into one. - -

Parameters

-
    -
  • __string - string -
    - Display text or localization key. -
  • -
  • __x - number -
    - - - -
  • -
  • __y - number -
    - - - -
  • -
  • __alignment - = Noble.Text.ALIGN_LEFT (default) -
    - Left, right, or center! -
  • -
  • __localized - boolean - = false (default) -
    - If true, __string is a localization key rather than display text. -
  • -
  • __font - = Noble.Text.getCurrentFont() (default) -
    - A font to use. If not set, the currentFont is used. If set, the currentFont is not updated. -
  • -
- - - - - -
-
- - -
- -
- -
- Noble Engine by Mark LaCroix, Noble Robot - - Documentation created using LDoc 1.5.0. - -
- -
- - - - diff --git a/source/libraries/noble/.docs/modules/Noble.Transition.html b/source/libraries/noble/.docs/modules/Noble.Transition.html deleted file mode 100644 index ec3a03c..0000000 --- a/source/libraries/noble/.docs/modules/Noble.Transition.html +++ /dev/null @@ -1,1377 +0,0 @@ - - - - - Noble Engine API reference - - - - - -
- -
- - - - - - -
- -

Noble.Transition

-

An abstract class from which transition types are extended.

-

- -

- -
- -

Functions

- -
-
- - Noble.Transition.setDefaultProperties(__transition, __properties) -
-
- Use this to modify multiple default properties of a transition. Having default properties avoids having to set them every time a transition is called. - Properties added here are merged with the existing default properties table. Overwrites only happen when a new value is set. - -

Parameters

-
    -
  • __transition -
    - - - -
  • -
  • __properties -
    - - - -
  • -
- - - -

See

- - -

Usage

-
Noble.Transition.setDefaultProperties(Noble.Transition.CrossDissolve, {
-	dither = Graphics.image.kDitherTypeDiagonalLine
-	ease = Ease.outQuint
-})
-Noble.Transition.setDefaultProperties(Noble.Transition.SpotlightMask, {
-	x = 325,
-	y = 95,
-	invert = true
-})
- -
-
- - Noble.Transition:setProperties(__arguments) -
-
- Do not call this directly. Implement this in a custom transition in order to set properties from user arguments given in Noble.transition(). See existing transitions for implementation examples. - -

Parameters

-
    -
  • __arguments -
    - - - -
  • -
- - - -

See

- - - -
-
- - Noble.Transition:onStart() -
-
- Do not call this directly. Implement this in a custom transition in order to run custom code when the transition starts. Default transitions in Noble Engine do not use this. - - - - - - -
-
- - Noble.Transition:onMidpoint() -
-
- Do not call this directly. Implement this in a custom transition in order to run custom code when the transition reaches its midpoint. Default transitions in Noble Engine do not use this. - - - - - - -
-
- - Noble.Transition:onHoldTimeElapsed() -
-
- Do not call this directly. Implement this in a custom transition in order to run custom code when the transition's hold time has elapsed. Default transitions in Noble Engine do not use this. - - - - - - -
-
- - Noble.Transition:onComplete() -
-
- Do not call this directly. Implement this in a custom transition in order to run custom code when the transition completes. Default transitions in Noble Engine do not use this. - - - - - - -
-
- - Noble.Transition:draw() -
-
- Do not call this directly. Implement this in a custom transition to draw the transition. This runs once per frame while the transition is running. See existing transitions for implementation examples. - - - - - - -
-
-

Tables

- -
-
- - Noble.Transition.defaultProperties -
-
- A transition may have unique properties that can be set by the user when invoked. This table holds the default values for those properties. - - - - -

See

- - - -
-
-

Fields

- -
-
- - Noble.Transition.Type.CUT -
-
- A transition type where no time at all passes between scenes. - - - - -

See

-
    -
- - -
-
- - Noble.Transition.Type.COVER -
-
- A transition type that has an "Enter" phase and an "Exit" phase. The new scene does not become active until the Enter phase is complete. A "holdTime" value determines how long to wait after the Enter phase completes before starting the Exit phase. - - - - -

See

-
    -
- - -
-
- - Noble.Transition.Type.MIX -
-
- A transition type that takes a screenshot of the exiting scene and activates the new scene before beginning the transition, allowing for both scenes to appear to be visible during the transition. - - - - -

See

-
    -
- - -
-
-

Noble.Transition.CrossDissolve

- -
-
- - Noble.Transition.CrossDissolve.defaultProperties -
-
- A simple cross-fade. - -

Fields

-
    -
  • ease - Ease - = Ease.outCubic (default) -
    - - - -
  • -
  • dither - Graphics.image.kDither - = Graphics.image.kDitherTypeBayer4x4 (default) -
    - - - -
  • -
- - - - - -
-
-

Noble.Transition.Cut

- -
-
- - Noble.Transition.Cut.defaultProperties -
-
- An all-time classic. - This transition has no properties. - - - - - - -
-
-

Noble.Transition.Dip

- -
-
- - Noble.Transition.Dip.defaultProperties -
-
- Fade to an image, then to the next scene. - -

Fields

-
    -
  • holdTime - number - = 0.25 (default) -
    - - - -
  • -
  • panelImage - Graphics.image -
    - - - -
  • -
  • dither - Graphics.image.kDither - = Graphics.image.kDitherTypeBayer4x4 (default) -
    - - - -
  • -
  • ease - Ease - = Ease.outInQuad (default) -
    - - - -
  • -
  • x - number - = 0 (default) -
    - - - -
  • -
  • y - number - = 0 (default) -
    - - - -
  • -
- - - - - -
-
-

Noble.Transition.DipToBlack

- -
-
- - Noble.Transition.DipToBlack.defaultProperties -
-
- Fade to black, then to the next scene. - NOTE: The panelImage property is locked. - - - - -

See

- - - -
-
-

Noble.Transition.DipToWhite

- -
-
- - Noble.Transition.DipToWhite.defaultProperties -
-
- Fade to white, then to the next scene. - NOTE: The panelImage property is locked. - - - - -

See

- - - -
-
-

Noble.Transition.Imagetable

- -
-
- - Noble.Transition.Imagetable.defaultProperties -
-
- A dip-style transition using one or two imagetables. - -

Fields

-
    -
  • holdTime - number - = 0 (default) -
    - - - -
  • -
  • imagetable - Graphics.imagetable -
    - - - -
  • -
  • reverse - boolean - = false (default) -
    - - - -
  • -
  • flipX - boolean - = false (default) -
    - - - -
  • -
  • flipY - boolean - = false (default) -
    - - - -
  • -
  • rotate - boolean - = false (default) -
    - - - -
  • -
  • imagetableEnter - Graphics.imagetable -
    - - - -
  • -
  • reverseEnter - boolean - = nil (default) -
    - - - -
  • -
  • flipXEnter - boolean - = nil (default) -
    - - - -
  • -
  • flipYEnter - boolean - = nil (default) -
    - - - -
  • -
  • rotateEnter - boolean - = nil (default) -
    - - - -
  • -
  • imagetableExit - Graphics.imagetable -
    - - - -
  • -
  • reverseExit - boolean - = nil (default) -
    - - - -
  • -
  • flipXExit - boolean - = nil (default) -
    - - - -
  • -
  • flipYExit - boolean - = nil (default) -
    - - - -
  • -
  • rotateExit - boolean - = nil (default) -
    - - - -
  • -
- - - -

See

- - - -
-
-

Noble.Transition.ImagetableMask

- -
-
- - Noble.Transition.ImagetableMask.defaultProperties -
-
- A wipe transition using an animated mask in the form of an imagetable. - -

Fields

-
    -
  • imagetable - Graphics.imagetable -
    - - - -
  • -
  • reverse - boolean - = false (default) -
    - Set true to play the imagetable's frames in reverse order. -
  • -
  • flipX - boolean - = false (default) -
    - - - -
  • -
  • flipY - boolean - = false (default) -
    - - - -
  • -
  • rotate - boolean - = false (default) -
    - Set as true to rotate the image 180-degrees -
  • -
  • hasTransparency - boolean - = true (default) -
    - Set as true if the imagetable asset has transparent pixels. Set as false if the image uses white pixels for transparency. -
  • -
  • invert - boolean - = false (default) -
    - Set as true to invert the image mask. -
  • -
- - - -

See

- - - -
-
-

Noble.Transition.MetroNexus

- -
-
- - Noble.Transition.MetroNexus.defaultProperties -
-
- A "cascade" wipe transition, taken from "Metro Nexus" by Noble Robot. - This transition has no properties. - - - - - - -
-
-

Noble.Transition.SlideOff

- -
-
- - Noble.Transition.SlideOff.defaultProperties -
-
- The previous scene slides off the screen, revealing the next scene. - -

Fields

-
    -
  • ease - Ease - = Ease.outInQuad (default) -
    - - - -
  • -
  • x - number - = 0 (default) -
    - - - -
  • -
  • y - number - = 0 (default) -
    - - - -
  • -
  • rotation - number - = 0 (default) -
    - - - -
  • -
- - - - - -
-
-

Noble.Transition.SlideOffDown

- -
-
- - Noble.Transition.SlideOffDown.defaultProperties -
-
- The previous scene slides off the bottom of the screen, revealing the next scene. - NOTE: The x, y, and rotation properties are locked. - - - - -

See

- - - -
-
-

Noble.Transition.SlideOffLeft

- -
-
- - Noble.Transition.SlideOffLeft.defaultProperties -
-
- The previous scene slides off the left side of the screen, revealing the next scene. - NOTE: The x, y, and rotation properties are locked. - - - - -

See

- - - -
-
-

Noble.Transition.SlideOffRight

- -
-
- - Noble.Transition.SlideOffRight.defaultProperties -
-
- The previous scene slides off the right side of the screen, revealing the next scene. - NOTE: The x, y, and rotation properties are locked. - - - - -

See

- - - -
-
-

Noble.Transition.SlideOffUp

- -
-
- - Noble.Transition.SlideOffUp.defaultProperties -
-
- The previous scene slides off the top of the screen, revealing the next scene. - NOTE: The x, y, and rotation properties are locked. - - - - -

See

- - - -
-
-

Noble.Transition.SlideOn

- -
-
- - Noble.Transition.SlideOn.defaultProperties -
-
- The next scene slides on the screen, covering up the previous scene. - -

Fields

-
    -
  • ease - Ease - = Ease.outInQuad (default) -
    - - - -
  • -
  • x - number - = 0 (default) -
    - - - -
  • -
  • y - number - = 0 (default) -
    - - - -
  • -
  • rotation - number - = 0 (default) -
    - - - -
  • -
- - - - - -
-
-

Noble.Transition.SlideOnDown

- -
-
- - Noble.Transition.SlideOnDown.defaultProperties -
-
- The next scene slides onto the screen from the top, covering up the previous scene. - NOTE: The x, y, and rotation properties are locked. - - - - -

See

- - - -
-
-

Noble.Transition.SlideOnLeft

- -
-
- - Noble.Transition.SlideOnLeft.defaultProperties -
-
- The next scene slides onto the screen right-to-left, covering up the previous scene. - NOTE: The x, y, and rotation properties are locked. - - - - -

See

- - - -
-
-

Noble.Transition.SlideOnRight

- -
-
- - Noble.Transition.SlideOnRight.defaultProperties -
-
- The next scene slides onto the screen left-to-right, covering up the previous scene. - NOTE: The x, y, and rotation properties are locked. - - - - -

See

- - - -
-
-

Noble.Transition.SlideOnUp

- -
-
- - Noble.Transition.SlideOnUp.defaultProperties -
-
- The next scene slides onto the screen from the bottom, covering up the previous scene. - NOTE: The x, y, and rotation properties are locked. - - - - -

See

- - - -
-
-

Noble.Transition.Spotlight

- -
-
- - Noble.Transition.Spotlight.defaultProperties -
-
- A spotlight in-out transition. - -

Fields

-
    -
  • holdTime - number - = 0.25 (default) -
    - - - -
  • -
  • panelImage - Graphics.image -
    - - - -
  • -
  • dither - Graphics.image.kDither - = Graphics.image.kDitherTypeBayer4x4 (default) -
    - - - -
  • -
  • ease - Ease - = Ease.outInQuad (default) -
    - - - -
  • -
  • x - number - = 200 (default) -
    - - - -
  • -
  • y - number - = 120 (default) -
    - - - -
  • -
  • easeEnter - Ease - = nil (default) -
    - - - -
  • -
  • xEnter - number - = nil (default) -
    - - - -
  • -
  • yEnter - number - = nil (default) -
    - - - -
  • -
  • xEnterStart - number - = nil (default) -
    - - - -
  • -
  • yEnterStart - number - = nil (default) -
    - - - -
  • -
  • xEnterEnd - number - = nil (default) -
    - - - -
  • -
  • yEnterEnd - number - = nil (default) -
    - - - -
  • -
  • easeEnter - Ease - = nil (default) -
    - - - -
  • -
  • xExit - number - = nil (default) -
    - - - -
  • -
  • yExit - number - = nil (default) -
    - - - -
  • -
  • xExitStart - number - = nil (default) -
    - - - -
  • -
  • yExitStart - number - = nil (default) -
    - - - -
  • -
  • xExitEnd - number - = nil (default) -
    - - - -
  • -
  • yExitEnd - number - = nil (default) -
    - - - -
  • -
- - - -

See

- - - -
-
-

Noble.Transition.SpotlightMask

- -
-
- - Noble.Transition.SpotlightMask.defaultProperties -
-
- A circle wipe transition. - -

Fields

-
    -
  • ease - Ease - = Ease.outQuad (default) -
    - - - -
  • -
  • x - number - = 200 (default) -
    - - - -
  • -
  • y - number - = 120 (default) -
    - - - -
  • -
  • xStart - number - = nil (default) -
    - - - -
  • -
  • yStart - number - = nil (default) -
    - - - -
  • -
  • xEnd - number - = nil (default) -
    - - - -
  • -
  • yEnd - number - = nil (default) -
    - - - -
  • -
  • invert - boolean - = false (default) -
    - - - -
  • -
- - - -

See

- - - -
-
-

Noble.Transition.WidgetSatchel

- -
-
- - Noble.Transition.MetroNexus.defaultProperties -
-
- An "accordion" transition, taken from "Widget Satchel" by Noble Robot. - This transition has no properties. - - - - - - -
-
- - -
- -
- -
- Noble Engine by Mark LaCroix, Noble Robot - - Documentation created using LDoc 1.5.0. - -
- -
- - - - diff --git a/source/libraries/noble/.docs/modules/Noble.TransitionType.html b/source/libraries/noble/.docs/modules/Noble.TransitionType.html deleted file mode 100644 index 34d6549..0000000 --- a/source/libraries/noble/.docs/modules/Noble.TransitionType.html +++ /dev/null @@ -1,240 +0,0 @@ - - - - - Noble Engine API reference - - - - - -
- -
- - - - - - -
- -

Noble.TransitionType

-

A set of constants for scene transition animations.

-

- -

-

See

- - -
- -

Constants

- -
-
- - Noble.TransitionType.CUT -
-
- An all-time classic. - - - - - - -
-
- - Noble.TransitionType.CROSS_DISSOLVE -
-
- A simple cross-fade. - - - - - - -
-
- - Noble.TransitionType.DIP_TO_BLACK -
-
- Fade to black, then to the next scene. - - - - - - -
-
- - Noble.TransitionType.DIP_TO_WHITE -
-
- Fade to white, then to the next scene. - - - - - - -
-
- - Noble.TransitionType.DIP_WIDGET_SATCHEL -
-
- An "accordion" transition, from "Widget Satchel" by Noble Robot. - - - - - - -
-
- - Noble.TransitionType.DIP_METRO_NEXUS -
-
- A "cascade" transition, from "Metro Nexus" by Noble Robot. - - - - - - -
-
- - Noble.TransitionType.SLIDE_OFF_LEFT -
-
- The existing scene slides off the left side of the screen, revealing the next scene. - - - - - - -
-
- - Noble.TransitionType.SLIDE_OFF_RIGHT -
-
- The existing scene slides off the right side of the screen, revealing the next scene. - - - - - - -
-
- - Noble.TransitionType.SLIDE_OFF_UP -
-
- The existing scene slides off the top of the screen. - - - - - - -
-
- - Noble.TransitionType.SLIDE_OFF_DOWN -
-
- The existing scene slides off the bottom of the screen, revealing the next scene. - - - - - - -
-
- - -
- -
- -
- Noble Engine by Mark LaCroix, Noble Robot - - Documentation created using LDoc 1.5.0. - -
- -
- - - - diff --git a/source/libraries/noble/.docs/modules/Noble.html b/source/libraries/noble/.docs/modules/Noble.html deleted file mode 100644 index 5988601..0000000 --- a/source/libraries/noble/.docs/modules/Noble.html +++ /dev/null @@ -1,476 +0,0 @@ - - - - - Noble Engine API reference - - - - - -
- -
- - - - - - -
- -

Noble

-

A li'l game engine for Playdate.

-

- -

- -
- -

Functions

- -
-
- - new(StartingScene[, __launcherTransitionDuration=0[, __launcherTransition=Noble.Transition.DipToBlack[, __launcherTransitionProperties={}[, __configuration={}]]]]) -
-
- Engine initialization. Run this once in your main.lua file to begin your game. - -

Parameters

-
    -
  • StartingScene - NobleScene -
    - This is the scene your game begins with, such as a title screen, loading screen, splash screen, etc. NOTE: Pass the scene's class name, not an instance of the scene. -
  • -
  • __launcherTransitionDuration - number - = 0 (default) -
    - If you want to transition from the final frame of your launch image sequence, enter a duration in seconds here. -
  • -
  • __launcherTransition - Noble.Transition - = Noble.Transition.DipToBlack (default) -
    - If a transition duration is set, use this transition type. -
  • -
  • __launcherTransitionProperties - table - = {} (default) -
    - Provide a table of properties to apply to the launcher transition. See the documentation for the transition you're using for a list of available properties. -
  • -
  • __configuration - table - = {} (default) -
    - Provide a table of Noble Engine configuration values. This will run Noble.setConfig for you at launch. -
  • -
- - - -

See

- - -

Usage

-
Noble.new(
-	TitleScreen,
-	2,
-	Noble.Transition.DipToWhite,
-	{
-		holdTime = 0,
-		ease = Ease.outInQuad
-	},
-	{
-		defaultTransition = Noble.Transition.Imagetable,
-		defaultTransitionDuration = 1.75,
-		enableDebugBonkChecking = true,
-	}
-)
- -
-
- - engineInitialized() -
-
- This checks to see if Noble.new has been run. It is used internally to ward off bonks. - - -

Returns

-
    - - bool - - - -
- - -

See

- - - -
-
- - getConfig() -
-
- Retrieve miscellaneous Noble Engine configuration options / default values - - -

Returns

-
    - - A table of all configuration values -
- - -

See

- - - -
-
- - setConfig(__configuration) -
-
- Optionally customize miscellaneous Noble Engine configuration options / default values. You may run this method to change these values during runtime. - -

Parameters

-
    -
  • __configuration - table -
    - This is a table with your configuration values in it. -
  • -
- - - -

See

- - - -
-
- - resetConfig() -
-
- Reset miscellaneous Noble Engine configuration values to their defaults. - - - - -

See

- - - -
-
- - transition(NewScene[, __duration=1.5[, __transition=Noble.TransitionType.DIP_TO_BLACK[, __transitionProperties={}]]]) -
-
- Transition to a new scene (at the end of this frame). - This method will create a new scene, mark the previous one for garbage collection, and animate between them. - Additional calls to this method within the same frame (before the already-called transition begins), will override previous calls. Any calls to this method once a transition begins will be ignored until the transition completes. - -

Parameters

-
    -
  • NewScene - NobleScene -
    - The scene to transition to. Pass the scene's class, not an instance of the scene. You always transition from Noble.currentScene -
  • -
  • __duration - number - = 1.5 (default) -
    - The length of the transition, in seconds. -
  • -
  • __transition - Noble.Transition - = Noble.TransitionType.DIP_TO_BLACK (default) -
    - If a transition duration is set, use this transition type. If not set, it will use the value of configuration.defaultTransition. -
  • -
  • __transitionProperties - table - = {} (default) -
    - A table consisting of properties for this transition. Properties not set here will use values that transition's defaultProperties table. -
  • -
- - - -

See

- - -

Usage

-
Noble.transition(Level2, 1, Noble.Transition.CrossDissolve, {
-	dither = Graphics.image.kDitherTypeDiagonalLine
-	ease = Ease.outQuint
-})
---
-Noble.transition(Level2, 1, Noble.Transition.DipToBlack, {
-	holdTime = 0.5,
-	ease = Ease.outInElastic
-})
---
-Noble.transition(Level2, 1, Noble.Transition.SlideOff, {
-	x = 400,
-	y = 150
-	rotation = 45
-})
- -
-
- - currentScene() -
-
- Get the current scene object - - -

Returns

-
    - - NobleScene - - - -
- - - - -
-
- - currentSceneName() -
-
- Get the name of the current scene - - -

Returns

-
    - - string - - - -
- - - - -
-
- - isTransitioning() -
-
- Check to see if the game is transitioning between scenes. - Useful to control game logic that lives outside of a scene's update() method. - - -

Returns

-
    - - bool - - - -
- - - - -
-
-

Tables

- -
-
- - configuration -
-
- Miscellaneous Noble Engine configuration options / default values. - This table cannot be edited directly. Use Noble.getConfig and Noble.setConfig. - -

Fields

-
    -
  • defaultTransition - Noble.Transition - = Noble.Transition.DipToBlack (default) -
    - When running Noble.transition if the transition is unspecified, it will use this one. -
  • -
  • defaultTransitionDuration - number - = 1.5 (default) -
    - When running Noble.transition if the scene transition duration is unspecified, it will take this long in seconds. -
  • -
  • enableDebugBonkChecking - boolean - = false (default) -
    - Noble Engine-specific errors are called "Bonks." You can set this to true during development in order to check for more of them. However, it uses resources, so you will probably want to turn it off before release. -
  • -
  • alwaysRedraw - boolean - = true (default) -
    - This sets the Playdate SDK method playdate.graphics.sprite.setAlwaysRedraw. See the Playdate SDK for details on how this function works, and the reasons you might want to set it as true or false for your project. -
  • -
- - - -

See

- - - -
-
-

Fields

- -
-
- - showFPS -
-
- Show/hide the Playdate SDK's FPS counter. - -
    -
  • bool -
    - - - -
  • -
- - - - - -
-
- - -
- -
- -
- Noble Engine by Mark LaCroix, Noble Robot - - Documentation created using LDoc 1.5.0. - -
- -
- - - - diff --git a/source/libraries/noble/.docs/modules/favicon.ico b/source/libraries/noble/.docs/modules/favicon.ico deleted file mode 100644 index 0e6485a21c177d4a630dde7912ce3c25c71dd9ba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 294734 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�rl=i&OJ2Ok|MgP1g=5HrT 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 - - - - Noble Engine API reference - - - - - -
- -
- - - - - - -
- -

modules.Noble.Transition.Imagetable

-

Transition properties.

-

- -

-

See

- - -
- - - -
- -
- -
- Noble Engine by Mark LaCroix, Noble Robot - - Documentation created using LDoc 1.5.0. - -
- -
- - - - diff --git a/source/libraries/noble/.docs/modules/modules.Noble.Transition.ImagetableMask.html b/source/libraries/noble/.docs/modules/modules.Noble.Transition.ImagetableMask.html deleted file mode 100644 index a8e2326..0000000 --- a/source/libraries/noble/.docs/modules/modules.Noble.Transition.ImagetableMask.html +++ /dev/null @@ -1,92 +0,0 @@ - - - - - Noble Engine API reference - - - - - -
- -
- - - - - - -
- -

modules.Noble.Transition.ImagetableMask

-

Transition properties.

-

- -

-

See

- - -
- - - -
- -
- -
- Noble Engine by Mark LaCroix, Noble Robot - - Documentation created using LDoc 1.5.0. - -
- -
- - - - diff --git a/source/libraries/noble/.gitattributes b/source/libraries/noble/.gitattributes deleted file mode 100644 index 61d1124..0000000 --- a/source/libraries/noble/.gitattributes +++ /dev/null @@ -1 +0,0 @@ -.docs/** linguist-documentation diff --git a/source/libraries/noble/.github/FUNDING.yml b/source/libraries/noble/.github/FUNDING.yml deleted file mode 100644 index ed753b5..0000000 --- a/source/libraries/noble/.github/FUNDING.yml +++ /dev/null @@ -1,13 +0,0 @@ -# These are supported funding model platforms - -github: NobleRobot -#patreon: # Replace with a single Patreon username -#open_collective: # Replace with a single Open Collective username -ko_fi: NobleRobot -#tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel -#community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry -#liberapay: # Replace with a single Liberapay username -#issuehunt: # Replace with a single IssueHunt username -#otechie: # Replace with a single Otechie username -#lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry -#custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] diff --git a/source/libraries/noble/.github/ISSUE_TEMPLATE/bug_report.md b/source/libraries/noble/.github/ISSUE_TEMPLATE/bug_report.md deleted file mode 100644 index 1286a8c..0000000 --- a/source/libraries/noble/.github/ISSUE_TEMPLATE/bug_report.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -name: Bug report -about: Help track problems in the project -title: '' -labels: bug -assignees: '' - ---- - -**Describe the bug** -(A clear and concise description of what the bug is.) - -**To reproduce** -(Steps to reproduce the behavior:) - -**Expected behavior** -(A clear and concise description of what you expected to happen.) - -**Screenshots/Code snippets** -(If applicable, add screenshots or code snippets to help explain your problem.) - -**Additional context** -(Add any other context about the problem here.) diff --git a/source/libraries/noble/.github/ISSUE_TEMPLATE/feature_request.md b/source/libraries/noble/.github/ISSUE_TEMPLATE/feature_request.md deleted file mode 100644 index 6a837ca..0000000 --- a/source/libraries/noble/.github/ISSUE_TEMPLATE/feature_request.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -name: Feature request -about: Suggest an idea for this project -title: '' -labels: enhancement -assignees: '' - ---- - -**Describe the feature** -(A clear and concise description of your proposal.) - - -**Describe alternatives you've considered** -(A clear and concise description of any alternative solutions or features you've considered.) - - -**What problems would this solve or help prevent, if any** -(OPTIONAL: If this feature is related to a bug or other problem, describe it here.) - - -**Additional context** -(Add any other context or screenshots about the feature request here.) diff --git a/source/libraries/noble/.github/workflows/Documentation.yml b/source/libraries/noble/.github/workflows/Documentation.yml deleted file mode 100644 index 075af24..0000000 --- a/source/libraries/noble/.github/workflows/Documentation.yml +++ /dev/null @@ -1,60 +0,0 @@ -name: Update documentation - -on: - push: - branches: - - 'main' - -jobs: - generate-docs: - runs-on: ubuntu-latest - steps: - - - name: Check out main branch - uses: actions/checkout@v3 - - - name: Install Lua - uses: leafo/gh-actions-lua@v10.0.0 - with: - luaVersion: "5.4" - - - name: Install Luarocks package manager - uses: leafo/gh-actions-luarocks@v4.3.0 - - - name: Install LDoc (with dependencies) - run: | - luarocks install ldoc - - - name: Generate HTML documentation using LDoc - run: | - ldoc -c .docs/.ldoc/config.ldoc . - - - name: Commit any changes made inside the .docs folder - uses: EndBug/add-and-commit@v9.1.1 - with: - add: '.docs' - remove: '.lua' - default_author: github_actions - author_name: Noble Robot - author_email: contact@noblerobot.com - message: '(Documentation updates)' - push: true - - - name: Remove .lua - uses: JesseTG/rm@v1.0.3 - with: - path: .lua - - - name: Remove .luarocks - uses: JesseTG/rm@v1.0.3 - with: - path: .luarocks - - - uses: numtide/clean-git-action@v1 - - - name: GitHub Pages Overwriter - uses: rayluo/github-pages-overwriter@v1.3 - - with: - source-directory: .docs - target-branch: gh_pages \ No newline at end of file diff --git a/source/libraries/noble/.gitignore b/source/libraries/noble/.gitignore deleted file mode 100644 index a850910..0000000 --- a/source/libraries/noble/.gitignore +++ /dev/null @@ -1,46 +0,0 @@ -# Compiled Lua sources -luac.out - -# luarocks build files -*.src.rock -*.zip -*.tar.gz - -# Object files -*.o -*.os -*.ko -*.obj -*.elf - -# Precompiled Headers -*.gch -*.pch - -# Libraries -*.lib -*.a -*.la -*.lo -*.def -*.exp - -# Shared objects (inc. Windows DLLs) -*.dll -*.so -*.so.* -*.dylib - -# Executables -*.exe -*.out -*.app -*.i*86 -*.x86_64 -*.hex - -.vscode - -# LDoc config files -config.ld -.docs_templates/ diff --git a/source/libraries/noble/CODE_OF_CONDUCT.md b/source/libraries/noble/CODE_OF_CONDUCT.md deleted file mode 100644 index d00725b..0000000 --- a/source/libraries/noble/CODE_OF_CONDUCT.md +++ /dev/null @@ -1,43 +0,0 @@ -# Contributor Code of Conduct - -## Pledge - -This project pledges to make participation a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, religion, or sexual identity and orientation. - -The project's leaders pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community. - -## Standards - -Examples of behavior that contributes to a positive environment include: - -* Demonstrating empathy and kindness toward other people. -* Being respectful of differing opinions, viewpoints, and experiences. -* Giving and gracefully accepting constructive feedback. -* Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience. -* Valuing the contributions of others, in effort but also time. -* Focusing on what is best not just for us as individuals, but for others as well. - -Examples of unacceptable behavior include: - -* The use of sexualized language or imagery, and sexual attention or advances of any kind. -* Trolling, insulting, or derogatory comments. -* Personal or political attacks. -* Public or private harassment. -* Publishing others' private information, such as a physical or email address, without their explicit permission. -* Other conduct which could reasonably be considered inappropriate in a professional setting. - -## Enforcement - -Project leaders are responsible for clarifying and enforcing standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful. - -Project leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for moderation decisions when appropriate. - -Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at contact@noblerobot.com. All complaints will be reviewed and investigated promptly and fairly. - -All project leaders are obligated to respect the privacy and security of the reporter of any incident. - -## Attribution - -This Code of Conduct is adapted and simplified from Contributor Covenant version 2.0, which is available at https://www.contributor-covenant.org/version/2/0/code_of_conduct.html. - -For answers to common questions about the originating document, see the FAQ at https://www.contributor-covenant.org/faq. diff --git a/source/libraries/noble/LICENSE b/source/libraries/noble/LICENSE deleted file mode 100644 index 8ddfb39..0000000 --- a/source/libraries/noble/LICENSE +++ /dev/null @@ -1,51 +0,0 @@ -Licenses - --- - -"assets/images/NobleRobotLogo.png" - -© 2021 Mark LaCroix, Noble Robot - -You are granted a non-exclusive license to this version of the Noble Robot -logo, solely for the purposes of providing credit, if you choose, in a -resulting product which uses this software. You may not sell or create -commercial derivative works from this asset, or use it in any other context. - -Where appropriate, and at your discretion, include the logo unmodified against -a black background, or inverted against a white background, with a version of -the following message: - -"Created with Noble Engine, by Noble Robot. https://noblerobot.com" - --- - -"libraries/" - -Sequence library by Nic Magnier -Signal library by Dustin Mierau - --- - -All other assets - -MIT License - -© 2021 Mark LaCroix, Noble Robot - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/source/libraries/noble/Noble.lua b/source/libraries/noble/Noble.lua deleted file mode 100644 index 3c6bd16..0000000 --- a/source/libraries/noble/Noble.lua +++ /dev/null @@ -1,375 +0,0 @@ ---- A li'l game engine for Playdate. --- @module Noble - --- --- https://noblerobot.com/ --- - --- Playdate libraries -import "CoreLibs/graphics" -import "CoreLibs/sprites" -import "CoreLibs/animation" -import "CoreLibs/animator" -import "CoreLibs/object" -import "CoreLibs/ui" -import "CoreLibs/math" -import "CoreLibs/timer" -import "CoreLibs/frameTimer" -import "CoreLibs/crank" - --- We create aliases for both fun and performance reasons. -Graphics = playdate.graphics -Display = playdate.display -Geometry = playdate.geometry -Ease = playdate.easingFunctions -UI = playdate.ui -File = playdate.file -Datastore = playdate.datastore -Timer = playdate.timer -FrameTimer = playdate.frameTimer - --- In lua, variables are global by default, but having a "Global" object to put --- variables into is useful for maintaining sanity if you're coming from an OOP language. --- It's included here for basically no reason at all. Noble Engine doesn't use it. (◔◡◔) -Global = {} - --- It all fits inside this table, oooo! -Noble = {} - --- Third-party libraries -import 'libraries/noble/libraries/Signal' -import 'libraries/noble/libraries/Sequence' - --- Noble libraries, modules, and classes. -import 'libraries/noble/utilities/Utilities.lua' -import 'libraries/noble/utilities/Ease.lua' -- Extensions to the Ease library -import 'libraries/noble/modules/Noble.Animation.lua' -import 'libraries/noble/modules/Noble.Bonk.lua' -import 'libraries/noble/modules/Noble.GameData.lua' -import 'libraries/noble/modules/Noble.Input.lua' -import 'libraries/noble/modules/Noble.Settings.lua' -import 'libraries/noble/modules/Noble.Transition.lua' -import 'libraries/noble/modules/Noble.Text.lua' -import 'libraries/noble/modules/Noble.Menu.lua' -import 'libraries/noble/modules/NobleScene.lua' -import 'libraries/noble/modules/NobleSprite.lua' - -local isTransitioning = false -local currentScene = nil -local engineInitialized = false - --- configuration --- - -local defaultConfiguration = { - defaultTransition = Noble.Transition.DipToBlack, - defaultTransitionDuration = 1.5, - defaultTransitionHoldTime = 0.25, - transitionDurationIncludesHoldTime = true, - enableDebugBonkChecking = false, - alwaysRedraw = true, -} -local configuration = Utilities.copy(defaultConfiguration) - ---- Engine initialization. Run this once in your main.lua file to begin your game. --- @tparam NobleScene StartingScene This is the scene your game begins with, such as a title screen, loading screen, splash screen, etc. **NOTE: Pass the scene's class name, not an instance of the scene.** --- @number[opt=0] __launcherTransitionDuration If you want to transition from the final frame of your launch image sequence, enter a duration in seconds here. --- @tparam[opt=Noble.Transition.DipToBlack] Noble.Transition __launcherTransition If a transition duration is set, use this transition type. --- @tparam[opt={}] table __launcherTransitionProperties Provide a table of properties to apply to the launcher transition. See the documentation for the transition you're using for a list of available properties. --- @tparam[opt={}] table __configuration Provide a table of Noble Engine configuration values. This will run `Noble.setConfig` for you at launch. --- @usage --- Noble.new( --- TitleScreen, --- 2, --- Noble.Transition.DipToWhite, --- { --- holdTime = 0, --- ease = Ease.outInQuad --- }, --- { --- defaultTransition = Noble.Transition.Imagetable, --- defaultTransitionDuration = 1.75, --- enableDebugBonkChecking = true, --- } --- ) --- @see NobleScene --- @see Noble.Transition --- @see setConfig -function Noble.new(StartingScene, __launcherTransitionDuration, __launcherTransition, __launcherTransitionProperties, __configuration) - - math.randomseed(playdate.getSecondsSinceEpoch()) -- Set a new random seed at runtime. - - if (engineInitialized) then - error("BONK: You can only run Noble.new() once.") - return - end - - -- If the user supplies a config object, we use it, otherwise, we set default values. - if (__configuration ~= nil) then - Noble.setConfig(__configuration) - else - Noble.resetConfig() - end - - -- Screen drawing: see the Playdate SDK for details on these methods. - Graphics.sprite.setBackgroundDrawingCallback( - function (x, y, width, height) - if (currentScene ~= nil) then - -- Each scene has its own method for this. We only want to run one at a time. - currentScene:drawBackground(x, y, width, height) - else - Graphics.clear(Graphics.kColorBlack) - end - end - ) - -- Override this Playdate method that we've used already and don't want to be used again! - Graphics.sprite.setBackgroundDrawingCallback = function(callback) - error("BONK: Don't call Graphics.sprite.setBackgroundDrawingCallback() directly. Put background drawing code in your scenes' drawBackground() methods instead.") - end - - -- These values are used if not set. - local launcherTransition = __launcherTransition or defaultConfiguration.defaultTransition - local launcherTransitionDuration = __launcherTransitionDuration or 1.5 - local launcherTransitionProperties =__launcherTransitionProperties or {} - - -- Now that everything is set, let's-a go! - engineInitialized = true - Noble.transition(StartingScene, launcherTransitionDuration, launcherTransition, launcherTransitionProperties) -end - ---- This checks to see if `Noble.new` has been run. It is used internally to ward off bonks. --- @treturn bool --- @see Noble.Bonk -function Noble.engineInitialized() - return engineInitialized -end - ---- Miscellaneous Noble Engine configuration options / default values. --- This table cannot be edited directly. Use `Noble.getConfig` and `Noble.setConfig`. --- @table configuration --- @tparam[opt=Noble.Transition.DipToBlack] Noble.Transition defaultTransition When running `Noble.transition` if the transition is unspecified, it will use this one. --- @number[opt=1.5] defaultTransitionDuration When running `Noble.transition` if the scene transition duration is unspecified, it will take this long in seconds. --- @bool[opt=false] enableDebugBonkChecking Noble Engine-specific errors are called "Bonks." You can set this to true during development in order to check for more of them. However, it uses resources, so you will probably want to turn it off before release. --- @bool[opt=true] alwaysRedraw This sets the Playdate SDK method `playdate.graphics.sprite.setAlwaysRedraw`. See the Playdate SDK for details on how this function works, and the reasons you might want to set it as true or false for your project. --- @see Noble.getConfig --- @see Noble.setConfig --- @see Noble.Bonk.startCheckingDebugBonks - ---- Retrieve miscellaneous Noble Engine configuration options / default values --- @return A table of all configuration values --- @see configuration --- @see setConfig -function Noble.getConfig() - return configuration -end - ---- Optionally customize miscellaneous Noble Engine configuration options / default values. You may run this method to change these values during runtime. --- @tparam table __configuration This is a table with your configuration values in it. --- @see configuration --- @see getConfig -function Noble.setConfig(__configuration) - - if (__configuration == nil) then - error("BONK: You cannot pass a nil value to Noble.setConfig(). If you want to reset to default values, use Noble.resetConfig().") - end - - if (__configuration.defaultTransition ~= nil) then configuration.defaultTransition = __configuration.defaultTransition end - if (__configuration.defaultTransitionDuration ~= nil) then configuration.defaultTransitionDuration = __configuration.defaultTransitionDuration end - if (__configuration.defaultTransitionHoldTime ~= nil) then configuration.defaultTransitionHoldTime = __configuration.defaultTransitionHoldTime end - if (__transitionDurationIncludesHoldTime ~= nil) then configuration.transitionDurationIncludesHoldTime = __configuration.transitionDurationIncludesHoldTime end - - if (__configuration.enableDebugBonkChecking ~= nil) then - configuration.enableDebugBonkChecking = __configuration.enableDebugBonkChecking - if (configuration.enableDebugBonkChecking == true) then Noble.Bonk.enableDebugBonkChecking() end - end - - if (__configuration.alwaysRedraw ~= nil) then - configuration.alwaysRedraw = __configuration.alwaysRedraw - Graphics.sprite.setAlwaysRedraw(configuration.alwaysRedraw) - end - -end - ---- Reset miscellaneous Noble Engine configuration values to their defaults. --- @see getConfig --- @see setConfig -function Noble.resetConfig() - Noble.setConfig(Utilities.copy(defaultConfiguration)) -end - --- Transition stuff --- -local currentTransition = nil -local queuedScene = nil - ---- Transition to a new scene (at the end of this frame). ---- This method will create a new scene, mark the previous one for garbage collection, and animate between them. ---- Additional calls to this method within the same frame (before the already-called transition begins), will override previous calls. Any calls to this method once a transition begins will be ignored until the transition completes. --- @tparam NobleScene NewScene The scene to transition to. Pass the scene's class, not an instance of the scene. You always transition from `Noble.currentScene` --- @number[opt=1.5] __duration The length of the transition, in seconds. --- @tparam[opt=Noble.TransitionType.DIP_TO_BLACK] Noble.Transition __transition If a transition duration is set, use this transition type. If not set, it will use the value of `configuration.defaultTransition`. --- @tparam[opt={}] table __transitionProperties A table consisting of properties for this transition. Properties not set here will use values that transition's `defaultProperties` table. --- @usage --- Noble.transition(Level2, 1, Noble.Transition.CrossDissolve, { --- dither = Graphics.image.kDitherTypeDiagonalLine --- ease = Ease.outQuint --- }) --- -- --- Noble.transition(Level2, 1, Noble.Transition.DipToBlack, { --- holdTime = 0.5, --- ease = Ease.outInElastic --- }) --- -- --- Noble.transition(Level2, 1, Noble.Transition.SlideOff, { --- x = 400, --- y = 150 --- rotation = 45 --- }) --- @see Noble.isTransitioning --- @see NobleScene --- @see Noble.Transition --- @see Noble.Transition.defaultProperties -function Noble.transition(NewScene, __duration, __transition, __transitionProperties) - if (isTransitioning) then - -- This bonk no longer throws an error (compared to previous versions of Noble Engine), but maybe it still should? - warn("BONK: You can't start a transition in the middle of another transition, silly!") - return -- Let's get otta here! - elseif (queuedScene ~= nil) then - -- Calling this method multiple times between Noble.update() calls is probably not intentional behavior. - warn("Soft-BONK: You are calling Noble.transition() multiple times within the same frame. Did you mean to do that?") - -- We don't return here because maybe the developer *did* intend to override a previous call to Noble.transition(). - end - - queuedScene = NewScene() -- Creates new scene object. Its init() function runs now. - - currentTransition = (__transition or configuration.defaultTransition)( - __duration or configuration.defaultTransitionDuration, - __transitionProperties or {} - ) -end - - --- These methods are triggered during an transition - -function Noble.transitionStartHandler() - isTransitioning = true - if (currentScene ~= nil) then - currentScene:exit() -- The current scene runs its "goodbye" code. Sprites are taken out of the simulation. - end - Noble.Input.setHandler(nil) -- Disable user input. -end - -function Noble.transitionMidpointHandler() - if (currentScene ~= nil) then - currentScene:finish() - currentScene = nil -- Allows current scene to be garbage collected. - end - currentScene = queuedScene -- New scene's update loop begins. - queuedScene = nil - currentScene:enter() -- The new scene runs its "hello" code. -end - -function Noble.transitionCompleteHandler() - isTransitioning = false -- Reset - currentTransition = nil -- Clear the transition variable. - currentScene:start() -- The new scene is now active. -end - ---- Get the current scene object --- @treturn NobleScene -function Noble.currentScene() - return currentScene -end - ---- Get the name of the current scene --- @treturn string -function Noble.currentSceneName() - return currentScene.name -end - ---- Check to see if the game is transitioning between scenes. --- Useful to control game logic that lives outside of a scene's `update()` method. --- @treturn bool -function Noble.isTransitioning() - return isTransitioning -end - ---- Show/hide the Playdate SDK's FPS counter. --- @field bool -Noble.showFPS = false; - -local crankIndicatorActive = false -local crankIndicatorForced = false - -local transitionCanvas = Graphics.image.new(400, 240) - --- Game loop --- -function playdate.update() - Noble.Input.update() -- Check for Noble Engine-specific input methods. - - Sequence.update() -- Update all animations that use the Sequence library. - - -- Here we check to see if a transition currently in progress needs screenshots of the new scene. - -- If so, we route drawing for this frame into a new context. - if (isTransitioning and currentTransition._captureScreenshotsDuringTransition) then - currentTransition.newSceneScreenshot = Graphics.image.new(400, 240) - Graphics.pushContext(currentTransition.newSceneScreenshot) - end - - Graphics.sprite.update() -- Let's draw our sprites (and backgrounds). - - if (currentScene ~= nil) then - currentScene:update() -- Scene-specific update code. - end - - if (isTransitioning) then - if (currentTransition._captureScreenshotsDuringTransition) then - Graphics.popContext() - end - transitionCanvas:clear(Graphics.kColorClear) - - Graphics.pushContext(transitionCanvas) - currentTransition:draw() - Graphics.popContext() - - Graphics.setImageDrawMode(currentTransition.drawMode) - transitionCanvas:drawIgnoringOffset(0, 0) - Graphics.setImageDrawMode(Graphics.kDrawModeCopy) - end - - -- We want to draw the crank indicator and FPS display last - crankIndicatorActive, crankIndicatorForced = Noble.Input.getCrankIndicatorStatus() - if (crankIndicatorActive) then - if (playdate.isCrankDocked() or crankIndicatorForced) then - UI.crankIndicator:update() -- Draw crank indicator (if requested). - end - end - if (Noble.showFPS) then - playdate.drawFPS(4, 4) - end - - Timer.updateTimers() -- Finally, update all SDK timers. - FrameTimer.updateTimers() -- Update all frame timers - - if (Noble.Bonk.checkingDebugBonks()) then -- Checks for code that breaks the engine. - Noble.Bonk.checkDebugBonks() - end - - -- Once this frame is complete, we can check to see if it's time to start transitioning to a new scene. - if (not isTransitioning and currentTransition ~= nil) then - currentTransition:execute() - end -end - -function playdate.gameWillPause() - if (currentScene ~= nil) then - currentScene:pause() - end -end - -function playdate.gameWillResume() - if (currentScene ~= nil) then - currentScene:resume() - end -end diff --git a/source/libraries/noble/README.gif b/source/libraries/noble/README.gif deleted file mode 100644 index 6d9e7477dc6fb945d34a54245b247dec4d5f7ad8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 224823 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%0D17pb6yno_`zNw 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%0A%0* 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 NgHdsZM`{oV06RFDoGAbR diff --git a/source/libraries/noble/README.md b/source/libraries/noble/README.md deleted file mode 100644 index 252699f..0000000 --- a/source/libraries/noble/README.md +++ /dev/null @@ -1,66 +0,0 @@ -Noble Engine -============ -### A li'l game engine for Playdate. - -![](README.gif) - -The Playdate SDK is probably the most user-friendly console SDK ever made, but if you're familiar with state/scene-based game engine frameworks like Unity, Flixel, Citrus, or others, you may be looking for a library that can get your game "on its feet,” extend existing APIs, offer new features, or provide more intuative ways to leverage the SDK in your game. - -If so, you're looking for Noble Engine! - -Features --------- -- Complete scene lifecycle management. Handle update loops, sprites, input, and initialization steps on a per scene basis. -- Scene transition API and animation library with over a dozen transition types (cross dissolve, dip-to-black, and more). -- Settings/SaveGame API, supporting up to 1000 save slots and automatic updating of on disk files when you inevitably muck around with your data structure in development. -- Boilerplate menu object, with simple way to add/remove items and manage “click” handlers. -- Additional input methods, and per-scene \`inputHandler\` logic. -- Full state manager for sprite animations. -- New fonts! Including full Japanese katakana character set. -- Fully documented code, explaining methods and architecture, and LDoc-generated [documentation pages](https://noblerobot.github.io/NobleEngine). -- Full project template, with example scenes and launcher assets, to help beginners get started with Playdate development. -- Random goodies, like a unified text drawing method for normal/aligned/localized text, one-line methods for showing/hiding the crank indicator and the FPS counter, and more. - -Setup ------ - -### Via Template -The recommended setup procedure is to clone the [Noble Engine Project Template repository](https://github.com/NobleRobot/NobleEngine-ProjectTemplate) instead of this one. That project is available as a [GitHub Template](https://github.blog/2019-06-06-generate-new-repositories-with-repository-templates/), which you can use to start your own project if you're hosting it on GitHub, or you can clone or download it manually. - -The template repository includes this one as a [git submodule](https://www.atlassian.com/git/tutorials/git-submodule). This way, you can mange your use of Noble Engine independently from your own code. - -The project template also includes some usage examples to help you get up to speed on how Noble Engine works. - -### Manual setup -If, instead, you want to download or clone this repository directly in to a new or existing project, simply place it into `libraries/noble/` relative to your `main.lua` file. - -Once you’ve done that, using Noble Engine can be quickly wired up in your `main.lua` file: - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -import libraries/noble/Noble -import scenes/MyStartingScene -- Or whatever your game's first scene is. - -Noble.new(MyStartingScene) -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -**Note:** If you are adding Noble Engine to an existing project, it is still recommended to either start with the project template and bring your existing code in, or reorganize your project to mimic the structure of the template. The project template defines a folder layout and has some additional flotsam that reflects the “opinion” of Noble Engine, which is useful if you want to have the best experience using it. - -Documentation -------------- -Noble Engine is fully documented in code, and has a full set of html pages generated with [LDoc](https://github.com/lunarmodules/LDoc) and styled for legibility, ease-of-use, and playful charm if I do say so myself. - -These pages are included in the repository at `docs/index.html` and on [GitHub Pages](https://noblerobot.github.io/NobleEngine). - -Notes on Style --------------- -Noble Engine was originally developed for _Widget Satchel II: Return of Sprocket_, by Mark LaCroix, who never wrote a line of Lua in his life before starting this project. - -In general, Lua best-practices are followed, but in some cases code style and naming conventions are more likely to follow those found in “C-like” languages such as Haxe, C\#, Java, ActionScript, etc. - -- Methods and variables are **camelCase**. -- “Class” names are **TitleCase**, and Lua “modules” are treated as nested classes, thus `Noble.Text` instead of `noble.text`. -- Constants, such as `Noble.TransitionType.DIP_TO_BLACK`, are **ALL_CAPS_SNAKE_CASE** -- Argument names are prefixed with a **double-underscore**, as in `__displayName`. This mostly impacts documentation legibility. I’m very sorry but it couldn’t be helped. 😆 -- Names are verbose by default; no abbreviations. This includes aliases for Playdate packages, so `playdate.graphics` is aliased as `Graphics`, instead of `gfx`. - -Some of these conventions run counter to those seen in the Playdate SDK. In places where there’s a potential conflict, either an alias is created for Noble Engine’s version to match the engine’s code style, or the Playdate SDK item is given preference and Noble Engine stays out of its way. diff --git a/source/libraries/noble/assets/fonts/NobleSans-table-8-9.png b/source/libraries/noble/assets/fonts/NobleSans-table-8-9.png deleted file mode 100644 index 9ce7df9ccbb789565f422583b5485c76adef3f95..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7324 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 Ee>-K2-T(jq diff --git a/source/libraries/noble/assets/fonts/NobleSans.fnt b/source/libraries/noble/assets/fonts/NobleSans.fnt deleted file mode 100644 index c621ee9..0000000 --- a/source/libraries/noble/assets/fonts/NobleSans.fnt +++ /dev/null @@ -1,296 +0,0 @@ -tracking=1 - -space 2 -A 7 -B 6 -C 6 -D 6 -E 5 -F 5 -G 6 -H 6 -I 3 -J 6 -K 6 -L 5 -M 7 -N 7 -O 7 -P 6 -Q 7 -R 6 -S 6 -T 5 -U 6 -V 6 -W 8 -X 7 -Y 7 -Z 7 -. 3 -: 4 -0 6 -1 6 -2 6 -3 6 -4 6 -5 6 -6 6 -7 6 -8 6 -9 6 -- 6 -! 4 -" 5 -% 7 -' 2 -( 5 -) 5 -+ 8 -, 3 -? 4 -/ 5 -< 5 -> 5 -[ 3 -\ 5 -] 3 -{ 5 -} 5 -_ 6 -~ 7 -= 7 -* 8 -ラ 6 -リ 6 -ル 8 -レ 5 -ロ 7 -ヮ 6 -ワ 6 -ョ 6 -ヨ 6 -゠ 6 -ァ 7 -ア 7 -ィ 6 -イ 6 -ニ 7 -ユ 7 -ゥ 6 -ウ 6 -ェ 6 -エ 6 -ォ 6 -オ 6 -カ 6 -ガ 7 -キ 6 -ギ 6 -ク 6 -グ 6 -ケ 7 -ゲ 6 -コ 6 -ゴ 6 -サ 6 -ザ 6 -シ 7 -ジ 7 -ス 6 -ズ 6 -セ 7 -ゼ 7 -ソ 6 -ゾ 6 -ツ 6 -ヅ 6 -ッ 6 -タ 6 -ダ 6 -チ 6 -ヂ 6 -テ 6 -デ 6 -ナ 6 -ト 6 -ド 6 -・ 6 -ー 7 -ノ 5 -ヌ 6 -ネ 6 -マ 6 -ハ 7 -バ 7 -パ 7 -ヒ 6 -ビ 6 -ピ 6 -フ 6 -ブ 6 -プ 6 -ヘ 7 -ベ 7 -ペ 7 -ホ 7 -ボ 7 -ポ 7 -ミ 6 -ム 6 -メ 6 -モ 6 -ャ 7 -ヤ 7 -ュ 7 -ヱ 7 -ヲ 6 -ン 7 -ヰ 7 -ヴ 6 -ヵ 6 -ヶ 6 -ヷ 6 -ヸ 7 -ヹ 7 -ヺ 6 -ヽ 5 -ヾ 5 -ヿ 5 -「 6 -」 6 -。 7 -、 7 -ぁ 6 -あ 7 -ぃ 6 -い 7 -ぅ 5 -う 6 -え 6 -ぇ 5 -お 7 -ぉ 7 -か 7 -が 7 -き 6 -ぎ 7 -く 6 -ぐ 6 -げ 7 -け 7 -こ 7 -ご 7 -さ 6 -ざ 7 -じ 6 -し 6 -す 7 -ず 7 -せ 7 -ぜ 7 -そ 5 -ぞ 6 -た 7 -だ 7 -ち 6 -ぢ 7 -つ 7 -づ 7 -っ 7 -て 7 -で 7 -と 7 -ど 7 -に 7 -な 7 -ぬ 7 -ね 7 -の 7 -は 8 -ば 8 -ぱ 8 -ひ 8 -び 8 -ぴ 8 -ふ 8 -ぶ 8 -ぷ 8 -へ 7 -べ 7 -ぺ 7 -ほ 8 -ぼ 8 -ぽ 8 -ま 6 -み 7 -む 8 -め 7 -も 6 -ゃ 6 -や 7 -ゅ 7 -ゆ 8 -ょ 6 -よ 6 -ら 6 -り 6 -る 7 -ろ 7 -円 8 -れ 8 -ゎ 7 -わ 8 -ゐ 7 -ゑ 7 -を 7 -ん 7 -ゔ 7 -ゕ 7 -ゖ 6 -ゝ 5 -ゞ 5 -゛ 6 -゜ 6 -ゟ 6 -a 6 -b 6 -c 6 -d 6 -e 6 -f 5 -g 6 -h 6 -i 3 -j 5 -k 6 -l 3 -m 7 -n 6 -o 6 -p 6 -q 6 -r 5 -s 6 -t 5 -u 6 -v 6 -w 8 -| 4 -x 6 -y 6 -` 3 -z 6 -# 7 -$ 6 -& 8 -™ 8 -© 6 -® 6 -‼ 6 -� 8 -… 8 -@ 8 -; 4 -^ 7 -¥ 8 \ No newline at end of file diff --git a/source/libraries/noble/assets/fonts/SatchelRoughed-table-17-14.png b/source/libraries/noble/assets/fonts/SatchelRoughed-table-17-14.png deleted file mode 100644 index df0fe545aa51ad89e943b74da44a4586b3eec196..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4767 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 10 -? 10 -@ 14 -A 13 -B 11 -C 13 -D 13 -E 11 -F 11 -G 13 -H 11 -I 5 -J 11 -K 13 -L 10 -M 16 -N 13 -O 14 -P 11 -Q 14 -R 12 -S 11 -T 11 -U 12 -V 13 -W 17 -X 12 -Y 11 -Z 12 -[ 9 -\ 12 -] 9 -^ 10 -_ 15 -` 8 -a 13 -b 11 -c 13 -d 13 -e 11 -f 11 -g 13 -h 11 -i 5 -j 11 -k 13 -l 10 -m 16 -n 13 -o 14 -p 11 -q 14 -r 12 -s 11 -t 11 -u 12 -v 13 -w 17 -x 12 -y 11 -z 12 -{ 9 -| 6 -} 8 -¥ 12 \ No newline at end of file diff --git a/source/libraries/noble/assets/images/BoltTransitionEnter-table-400-240.png b/source/libraries/noble/assets/images/BoltTransitionEnter-table-400-240.png deleted file mode 100644 index ae3ef78b6ae4e4bd3f094d2ed82cc58a7af8750d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 55860 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

    L! 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 z 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 diff --git a/source/libraries/noble/assets/images/ImagetableTransition-table-400-240.png b/source/libraries/noble/assets/images/ImagetableTransition-table-400-240.png deleted file mode 100644 index 5b69ce55163261bb3f5bf2accaf9279f2e25a618..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 138828 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 ArvLx| diff --git a/source/libraries/noble/assets/images/NobleRobotLogo.png b/source/libraries/noble/assets/images/NobleRobotLogo.png deleted file mode 100644 index c117ae466f4d9879d18c13d32af0d0bb6d402a91..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 366 zcmeAS@N?(olHy`uVBq!ia0vp^DL^dE#0(_A|2T9RNU@|l`Z_W&Z0zU$lgJ9>GZqKA zJ29*~C-V}>;SBHzaRt)<|NjS)#mAZpK`Kgu{DK)Ap4~_Ta=v-GIEHAPFP-4n*KEM! zy7=7#xw{4P^BcoAb81<#zLK>GD$j`#oL?lfKz7;U8cub4|NEVs57(ygiEj1oH3_|R zZ?;Zv1fb2D$9+Z{68|S`|Mi_u}imRp196htQ_Rw{B%jQ|C1AMp4^&md^kXH zzU1bm#-41aBhO4d`EHwqqVFjoVWX#k%QsCrc%JD%L&G0$e%B)mK6ww1ypF2~$?00k zvPV_t*XubIAros>e+jv#tNhDW@{Nnv@pfV6)a@JpJI|ZnvSbgx-KlH5OK0ajxo~Cs zDgDiYRc9}^YoE3|@7SVJC1=1 and easingIndex<=self.easingCount do - local easing = self.easings[easingIndex] - - if clampedTime < easing.timestamp then - easingIndex = easingIndex - 1 - elseif clampedTime > (easing.timestamp+easing.duration) then - easingIndex = easingIndex + 1 - else - self.previousUpdateEasingIndex = easingIndex - return easing, easingIndex - end - end - - -- we didn't the correct part - print("Sequence warning: couldn't find sequence part. clampedTime probably out of bound.", clampedTime, self.duration) - return self.easings[1] -end - -function Sequence:get( time ) - if not self then return nil end - - if self:isEmpty() then - return 0 - end - - time = time or self.time - - -- try to get cached result - if self.cachedResultTimestamp==time then - return self.cachedResult - end - - -- we calculate and cache the result - local clampedTime = self:getClampedTime(time) - local easing = self:getEasingByTime(clampedTime) - local result = easing.fn(clampedTime-easing.timestamp, easing.from, easing.to-easing.from, easing.duration, table.unpack(easing.params or {})) - - -- cache - self.cachedResultTimestamp = clampedTime - self.cachedResult = result - - return result -end - -function Sequence:updateCallbacks( dt ) - if #self.callbacks==0 then - return - end - - local callTimeRange = function( clampedStart, clampedEnd) - if clampedStart>clampedEnd then - clampedStart, clampedEnd = clampedEnd, clampedStart - end - - for index, cbObject in pairs(self.callbacks) do - if cbObject.timestamp>=clampedStart and cbObject.timestamp<=clampedEnd then - if type(cbObject.fn)=="function" then - cbObject.fn() - end - end - end - end - - -- most straightforward case: no loop - if not self.loopType then - local clampedTime = self:getClampedTime( self.time ) - callTimeRange(clampedTime, clampedTime+dt) - return - end - - -- - -- now we handle loops - - -- probably rare case but we have to handle it - if dt>self.duration then - callTimeRange(0, self.duration) - end - - local clampedTime, isForward = self:getClampedTime( self.time ) - local endTime = clampedTime - if isForward then - endTime = endTime + dt - else - endTime = endTime - dt - end - - if endTime<0 then - callTimeRange(0, math.max(clampedTime, self:getClampedTime( endTime ))) - elseif endTime>self.duration then - if self.loopType=="loop" then - callTimeRange(clampedTime, self.duration) - callTimeRange(0, self:getClampedTime( endTime )) - else - callTimeRange(math.min(clampedTime, self:getClampedTime( endTime )), self.duration) - end - else - callTimeRange(clampedTime, endTime) - end -end - --- get the time clamped in the sequence duration --- manage time using loop setting -function Sequence:getClampedTime( time ) - time = time or self.time - - local isForward = true - - -- time is looped - if self.loopType=="loop" then - return time%self.duration, isForward - - -- time is mirrored / yoyo - elseif self.loopType=="mirror" then - time = time%(self.duration*2) - if time>self.duration then - isForward = false - time = self.duration + self.duration - time - end - - return time, isForward - end - - -- time is normally clamped - return math.clamp(time, 0, self.duration), isForward -end - -function Sequence:addRunning() - if self:isEmpty() or self.isRunning then - return - end - - table.insert(_runningSequences, self) - self.isRunning = true -end - -function Sequence:removeRunning() - local indexInRunningTable = table.indexOfElement(_runningSequences, self) - if indexInRunningTable then - table.remove(_runningSequences, indexInRunningTable) - end - self.isRunning = false -end - -function Sequence:start() - self:addRunning() - return self -end - -function Sequence:stop() - self:removeRunning() - self.time = 0 - self.cachedResultTimestamp = nil - self.previousUpdateEasingIndex = nil - return self -end - -function Sequence:pause() - self:removeRunning() - return self -end - -function Sequence:restart() - self.time = 0 - self.cachedResultTimestamp = nil - self.previousUpdateEasingIndex = nil - self:start() - return self -end - -function Sequence:isDone() - return self.time>=self.duration and (not self.loopType) -end - -function Sequence:isEmpty() - return self.easingCount==0 -end - --- new easing function -function _easings.flat(t, b, c, d) - return b -end - -math.clamp = math.clamp or function(a, min, max) - if min > max then - min, max = max, min - end - return math.max(min, math.min(max, a)) -end \ No newline at end of file diff --git a/source/libraries/noble/libraries/Signal.lua b/source/libraries/noble/libraries/Signal.lua deleted file mode 100644 index fbadc5c..0000000 --- a/source/libraries/noble/libraries/Signal.lua +++ /dev/null @@ -1,47 +0,0 @@ --- --- Signal library by Dustin Mierau --- - -import "CoreLibs/object" - -class("Signal").extends() - -function Signal:init() - self.listeners = {} -end - -function Signal:add(key, bind, fn) - local t = self.listeners[key] - local v = {fn = fn, bind = bind} - if not t then - self.listeners[key] = {v} - else - t[#t + 1] = v - end -end - -function Signal:remove(key, fn) - local t = self.listeners[key] - if t then - for i, v in ipairs(t) do - if v.fn == fn then - table.remove(t, i) - break - end - end - if #t == 0 then - self.listeners[key] = nil - end - end -end - -function Signal:dispatch(key, ...) - local t = self.listeners[key] - if t then - for _, v in ipairs(t) do - v.fn(v.bind, key, ...) - end - end -end - -Signal = Signal() \ No newline at end of file diff --git a/source/libraries/noble/modules/Noble.Animation.lua b/source/libraries/noble/modules/Noble.Animation.lua deleted file mode 100644 index 02744ec..0000000 --- a/source/libraries/noble/modules/Noble.Animation.lua +++ /dev/null @@ -1,293 +0,0 @@ ---- Animation states using a spritesheet/imagetable. Ideal for use with `NobleSprite` objects. Suitable for other uses as well. --- @module Noble.Animation --- - -Noble.Animation = {} - ---- Setup --- @section setup - ---- Create a new animation "state machine". This function is called automatically when creating a new `NobleSprite`. --- @string __view This can be: the path to a spritesheet image file or an image table object (`Graphics.imagetable`). See Playdate SDK docs for imagetable file naming conventions. --- @return `animation`, a new animation object. --- @usage --- local myHero = MyHero("path/to/spritesheet") --- @usage --- -- When extending NobleSprite (recommended), you don't call Noble.Animation.new(), --- -- but you do feed its __view argument into MySprite.super.init()... --- MyHero = {} --- class("MyHero").extends(NobleSprite) --- --- function MyHero:init() --- MyHero.super.init(self, "assets/images/Hero") --- -- ... --- -- A new NobleSprite creates a Noble.Animation object named "self.animation" --- self.animation:addState("idle", 1, 30) --- self.animation:addState("jump", 31, 34, "float") --- self.animation:addState("float", 35, 45) --- self.animation:addState("turn", 46, 55, "idle") --- self.animation:addState("walk", 56, 65) --- -- ... --- end --- @usage --- local myAnimation = Noble.Animation.new("path/to/spritesheet") --- @usage --- -- When extending playdate.graphics.Sprite, Noble.Animation.new() must be called manually... --- MyHero = {} --- class("MyHero").extends(Graphics.sprite) --- --- function MyHero:init() --- MyHero.super.init(self) --- -- ... --- self.animation = Noble.Animation.new("assets/images/Hero") --- self.animation:addState("idle", 1, 30) --- self.animation:addState("jump", 31, 34, "float") --- self.animation:addState("float", 35, 45) --- self.animation:addState("turn", 46, 55, "idle") --- self.animation:addState("walk", 56, 65) --- -- ... --- end --- @see NobleSprite:init -function Noble.Animation.new(__view) - local animation = {} - - --- Properties - -- @section properties - - --- The currently set animation state. - -- - -- This is intended as `read-only`. You should not modify this property directly. - -- @see setState - animation.current = nil - - --- The name of the current animation state. Calling this instead of `animation.current.name` is just a little faster. - -- - -- This is intended as `read-only`. You should not modify this property directly. - animation.currentName = nil - - --- The current frame of the animation. This is the index of the imagetable, not the frame of the current state. - -- - -- Most of the time, you should not modify this directly, although you can if you're feeling saucy and are prepared for unpredictable results. - -- @see draw - animation.currentFrame = 1 - - --- This controls the flipping of the image when drawing. DIRECTION_RIGHT is unflipped, DIRECTION_LEFT is flipped on the X axis. - -- @usage - -- function MyHero:goLeft() - -- self.animation.direction = Noble.Animation.DIRECTION_LEFT - -- -- ... - -- end - animation.direction = Noble.Animation.DIRECTION_RIGHT - - --- This animation's spritesheet. You can replace this with another `playdate.graphics.imagetable` object, but generally you would not want to. - -- @see new - if (type(__view) == "userdata") then - animation.imageTable = __view - else - animation.imageTable = Graphics.imagetable.new(__view) - end - -- The current count of frame durations. This is used to determine when to advance to the next frame. - animation.frameDurationCount = 1 - -- The previous number of frame durations in the animation - animation.previousFrameDurationCount = 1 - - local empty = true - - --- Setup - -- @section setup - - --- Add an animation state. The first state added will be the default set for this animation. - -- - -- NOTE: Added states are first-degree member objects of your Noble.Animation object, so do not use names of already existing methods/properties ("current", "draw", etc.). - -- @string __name The name of the animation, this is also used as the key for the animation. - -- @int __startFrame This is the first frame of this animation in the imagetable/spritesheet - -- @int __endFrame This is the final frame of this animation in the imagetable/spritesheet - -- @string[optional] __next By default, animation states will loop, but if you want to sequence an animation, enter the name of the next state here. - -- @bool[opt=true] __loop If you want a state to "freeze" on its final frame, instead of looping, enter `false` here. - -- @param[optional] __onComplete This function will run when this animation is complete. Be careful when using this on a looping animation! - -- @int[opt=1] __frameDuration This is the number of ticks between each frame in this animation. If not specified, it will be set to 1. - -- @usage - -- -- You can reference an animation's state's properties using bog-standard lua syntax: - -- - -- animation.idle.startFrame -- 30 - -- animation.walk.endFrame -- 65 - -- animation.["walk"].endFrame -- 65 - -- animation.jump.name -- "jump" - -- animation.["jump"].next -- "float" - -- animation.idle.next -- nil - function animation:addState(__name, __startFrame, __endFrame, __next, __loop, __onComplete, __frameDuration) - local loop = true - local frameDuration = 1 - if (__loop ~= nil) then loop = __loop end - if (__frameDuration ~= nil) then frameDuration = __frameDuration end - self[__name] = { - name = __name, - startFrame = __startFrame, - endFrame = __endFrame, - next = __next, - loop = loop, - onComplete = __onComplete, - frameDuration = frameDuration, - } - - -- Set this animation state as default if it is the first one added. - if (empty == true) then - empty = false - self.currentFrame = __startFrame - self.current = self[__name] - self.currentName = __name - self.frameDuration = frameDuration - end - end - - --- Methods - -- @section methods - - --- Sets the current animation state. This can be run in a object's `update` method because it only changes the animation state if the new state is different from the current one. - -- @tparam string|Noble.Animation __animationState The name of the animation to set. You can pass the name of the state, or the object itself. - -- @bool[opt=false] __continuous Set to true if your new state's frames line up with the previous one's, i.e.: two walk cycles but one is wearing a cute hat! - -- @tparam string|Noble.Animation __unlessThisState If this state is the current state, do not set the new one. - -- @usage animation:setState("walk") - -- @usage animation:setState(animation.walk) - -- @usage - -- animation:setState(animation.walkNoHat) - -- -- - -- animation:setState(animation.walkYesHat, true) - -- @usage - -- function MyHero:update() - -- -- Input - -- -- ... - -- - -- -- Physics/collisions - -- -- ... - -- - -- -- Animation states - -- if (grounded) then - -- if (turning) then - -- self.animation:setState(self.animation.turn) - -- elseif (math.abs(self.velocity.x) > 15) then - -- self.animation:setState(self.animation.walk, false, self.animation.turn) - -- else - -- self.animation:setState(self.animation.idle, false, self.animation.turn) - -- end - -- else - -- self.animation:setState(self.animation.jump, false, self.animation.float) - -- end - -- - -- groundedLastFrame = grounded - -- end - function animation:setState(__animationState, __continuous, __unlessThisState) - if (__unlessThisState ~= nil) then - if (type(__unlessThisState) == "string") then - if (self.currentName == __unlessThisState) then return end - elseif (type(__unlessThisState) == "table") then - if (self.current == __unlessThisState) then return end - end - end - - local newState = nil - - if (type(__animationState) == "string") then - if (self.currentName == __animationState) then return end - newState = self[__animationState] - self.currentName = __animationState - elseif (type(__animationState) == "table") then - if (self.current == __animationState) then return end - newState = __animationState - self.currentName = __animationState.name - end - - local continuous = Utilities.handleOptionalBoolean(__continuous, false) - - if (continuous) then - local localFrame = self.currentFrame - self.current.startFrame - self.currentFrame = newState.startFrame + localFrame - else - self.currentFrame = newState.startFrame - end - - self.current = newState - end - - --- Draw the current frame. - -- - -- When attached to a NobleSprite, this is called by `NobleSprite:draw()` when added to a scene. For non-NobleSprite sprites, put this method inside your sprite's `draw()` method, or inside @{NobleScene:update|NobleScene:update}. - -- @number[opt=0] __x - -- @number[opt=0] __y - -- @bool[opt=true] __advance Advances to the next frame after drawing this one. Noble.Animation is frame-based, not "delta time"-based, so its speed is dependent on your game's framerate. - -- @usage - -- function MySprite:draw() - -- animation:draw() - -- end - -- @usage - -- function MyScene:update() - -- animation:draw(100,100) - -- end - function animation:draw(__x, __y, __advance) - --print(self.currentName .. " > " .. self.currentFrame .. " >> " .. tostring(self.current.loop)) - - if (__advance == nil) then __advance = true end - - if (self.currentFrame < self.current.startFrame or self.currentFrame > self.current.endFrame + 1) then - self.currentFrame = self.current.startFrame -- Error correction. - elseif (self.currentFrame == self.current.endFrame + 1) then -- End frame behavior. - if (self.current.next ~= nil) then - self.currentFrame = self.current.next.startFrame -- Set to first frame of next animation. - self.frameDurationCount = 1 -- Reset ticks. - self.previousFrameDurationCount = self.frameDuration - self:setState(self.current.next) -- Set next animation state. - elseif (self.current.loop == true) then - self.currentFrame = self.current - .startFrame -- Loop animation state. (TO-DO: account for continuous somehow?) - self.frameDurationCount = 1 -- Reset ticks. - self.previousFrameDurationCount = self.frameDuration - elseif (__advance) then - self.currentFrame = self.currentFrame - - 1 -- Undo advance frame because we want to draw the same frame again. - end - - if (self.current.onComplete ~= nil) then - self.current.onComplete() - end - end - - local x = __x or 0 - local y = __y or 0 - self.imageTable:drawImage(self.currentFrame, x, y, self.direction) - - if (__advance == true) then - self.frameDurationCount += 1 - if ((self.frameDurationCount - self.previousFrameDurationCount) >= self.current.frameDuration) then - self.currentFrame = self.currentFrame + 1 - self.previousFrameDurationCount += self.current.frameDuration - end - end - --previousAnimationName = self.currentName - end - - --- Sometimes, you just want to draw a specific frame. - -- Use this for objects or sprites that you want to control outside of update loops, such as score counters, flipbook-style objects that respond to player input, etc. - -- @int __frameNumber The frame to draw from the current state. This is not an imagetable index. Entering `1` will draw the selected state's `startFrame`. - -- @string[opt=self.currentName] __stateName The specific state to pull the __frameNumber from. - -- @number[opt=0] __x - -- @number[opt=0] __y - -- @param[opt=self.direction] __direction Override the current direction. - function animation:drawFrame(__frameNumber, __stateName, __x, __y, __direction) - local x = __x or 0 - local y = __y or 0 - local stateName = __stateName or self.currentName - local direction = __direction or self.direction - local frameNumber = self[stateName].startFrame - 1 + __frameNumber - self.imageTable:drawImage(frameNumber, x, y, direction) - end - - return animation -end - ---- Constants --- @section constants - ---- A re-contextualized instance of `playdate.graphics.kImageUnflipped` -Noble.Animation.DIRECTION_RIGHT = Graphics.kImageUnflipped ---- A re-contextualized instance of `playdate.graphics.kImageFlippedX` -Noble.Animation.DIRECTION_LEFT = Graphics.kImageFlippedX diff --git a/source/libraries/noble/modules/Noble.Bonk.lua b/source/libraries/noble/modules/Noble.Bonk.lua deleted file mode 100644 index ac0dc6f..0000000 --- a/source/libraries/noble/modules/Noble.Bonk.lua +++ /dev/null @@ -1,108 +0,0 @@ ---- Engine-specific error handling. --- Noble Engine overrides/supersedes some Playdate SDK behavior. A "bonk" is what happens when your game breaks the engine. --- --- Most bonks will throw during normal operation, but others ("debug bonks") introduce some execution overhead so are not --- checked by default. --- --- @module Noble.Bonk --- -Noble.Bonk = {} - -local bonksAreSetup = false - -local checkingForBonks = false - -local debugBonks = {} - --- You cannot run this directly. Run Noble.new() with __enableDebugBonkChecking as true to enable debug bonk checking. -function Noble.Bonk.enableDebugBonkChecking() - if (bonksAreSetup == false) then - if (Noble.engineInitialized() == false) then - debugBonks.update = playdate.update - debugBonks.pause = playdate.gameWillPause - debugBonks.resume = playdate.gameWillResume - debugBonks.crankDocked = playdate.crankDocked - debugBonks.crankUndocked = playdate.crankUndocked - bonksAreSetup = true - else - error("BONK-BONK: You cannot run this directly. Run Noble.new() with __enableDebugBonkChecking as true.") - end - else - print("BONK-BONK: You have already run Noble.new() with __enableDebugBonkChecking as true, you cannot run this directly.") - end -end - - ---- Begin checking for debug bonks, on every frame. This introduces needless overhead, so don't do it in a release build. --- You can only run this if you ran previously `Noble.new()` with `__enableDebugBonkChecking` as true, which you should also not do in a release build. - -- @see Noble.new -function Noble.Bonk.startCheckingDebugBonks() - if (checkingForBonks == false) then - if (bonksAreSetup) then - checkingForBonks = true - else - error("BONK-BONK: You cannot run this unless debug bonk checking is enabled.") - end - end -end - ---- Stop checking for debug bonks on every frame. --- --- NOTE: You can only run this if debug bonk checking is enabled. -function Noble.Bonk.stopCheckingDebugBonks() - if (checkingForBonks) then - if (bonksAreSetup) then - checkingForBonks = false - else - error("BONK-BONK: You cannot run this unless debug bonk checking is enabled.") - end - end -end - ---- Disable the ability to check for debug bonks. It frees up some memory. Once you disable debug bonk checking, you cannot re-enable it. --- --- NOTE: You can only run this if debug bonk checking is enabled. -function Noble.Bonk.disableDebugBonkChecking() - if (bonksAreSetup) then - debugBonks = {} - bonksAreSetup = false - else - error("BONK-BONK: You cannot run this unless debug bonk checking is enabled.") - end -end - ---- Are we debug bonk checking for debug bonks? --- @treturn bool -function Noble.Bonk.checkingDebugBonks() - return checkingForBonks -end - ---- Manually check for debug bonks. --- This method runs every frame when `checkingDebugBonks` is true, but you may call it manually instead. --- --- NOTE: You can only run this if debug bonk checking is enabled. -function Noble.Bonk.checkDebugBonks() - - if (playdate.crankDocked ~= debugBonks.crankDocked) then - error("BONK: Don't manually define playdate.crankDocked(). Create a crankDocked() inside of an inputHandler instead.") - end - if (playdate.crankUndocked ~= debugBonks.crankUndocked) then - error("BONK: Don't manually define playdate.crankUndocked(). Create a crankUndocked() inside of an inputHandler instead.") - end - if (playdate.update ~= debugBonks.update) then - error("BONK: Don't manually define playdate.update(). Put update code in your scenes' update() methods instead.") - end - if (playdate.gameWillPause ~= debugBonks.pause) then - error("BONK: Don't manually define playdate.gameWillPause(). Put pause code in your scenes' pause() methods instead.") - end - if (playdate.gameWillResume ~= debugBonks.resume) then - error("BONK: Don't manually define playdate.gameWillResume(). Put resume code in your scenes' resume() methods instead.") - end - if (Graphics.sprite.getAlwaysRedraw() == false) then - error("BONK: Don't use Graphics.sprite.setAlwaysRedraw(false) unless you know what you're doing...") - end - if (Noble.currentScene.backgroundColor == Graphics.kColorClear) then - error("BONK: Don't set a scene's backgroundColor to Graphics.kColorClear, silly.") - end - -end \ No newline at end of file diff --git a/source/libraries/noble/modules/Noble.GameData.lua b/source/libraries/noble/modules/Noble.GameData.lua deleted file mode 100644 index 3d52431..0000000 --- a/source/libraries/noble/modules/Noble.GameData.lua +++ /dev/null @@ -1,327 +0,0 @@ ---- Operations for game data / save slots. --- @module Noble.GameData --- -Noble.GameData = {} - -local gameDatas = {} -- This is the actual "GameDatas" object, which holds multiple GameData slots. We keep it local to avoid direct tampering. -local gameDataDefault = nil -local numberOfGameDataSlotsAtSetup = 1 -local numberOfSlots = 1 -local currentSlot = 1 -- This is a helper value, so you don't have to specify a save slot with every GameData operation. - -local function keyChange(__dataDefault, __data) - local defaultKeys = {} - local keys = {} - for key, value in pairs(__dataDefault.data) do - table.insert(defaultKeys, key) - end - for key, value in pairs(__data.data) do - table.insert(keys, key) - end - for i = 1, #keys, 1 do - if (defaultKeys[i] ~= keys[i]) then return true end - end - return false -end - -local function exists(__gameDataSlot, __key) - -- Check for valid gameSlot. - if (__gameDataSlot > #gameDatas or __gameDataSlot <= 0 ) then - error("BONK: Game Slot number " .. __gameDataSlot .. " does not exist. Use Noble.GameData.addSlot().", 3) - return false - end - - if (__key ~= nil) then - -- Check for valid data item. - for key, value in pairs(gameDatas[__gameDataSlot].data) do - if __key == key then - return true - end - end - else - return true - end - - error("BONK: Game Datum \"" .. __key .. "\" does not exist. Maybe you spellet it wronlgly.", 3) - return false -end - -local function updateTimestamp(__gameData) - __gameData.timestamp = playdate.getGMTTime() -end - -local gameDataHasBeenSetup = false - ---- Sets up the GameDatas (save slots) for your game, and/or loads any existing GameDatas from disk. --- You can only run this once, ideally in your main.lua before you load your first scene. --- @tparam table __keyValuePairs All the data items for a saved game, and their default values, as key/value pairs. NOTE: Do not use "nil" as a value. --- @int[opt=1] __numberOfSlots If you want multiple save slots, enter an integer here. You can add additional slots later. --- @bool[opt=true] __saveToDisk Saves your default values immediately to disk. --- @bool[opt=true] __modifyExistingOnKeyChange Updates the existing gameData objects on disk if you make changes to your keys (not values) during development or when updating your game. --- @usage --- Noble.GameData.setup( --- { --- name = "", --- checkpointReached = 0, --- score = 0 --- }, --- 3, --- true, --- true --- ) --- Noble.GameData.set("name", "Game A", 1) --- Noble.GameData.set("name", "Game B", 2) --- Noble.GameData.set("name", "Game C", 3) --- @see addSlot --- @see deleteSlot -function Noble.GameData.setup(__keyValuePairs, __numberOfSlots, __saveToDisk, __modifyExistingOnKeyChange) - if (gameDataHasBeenSetup) then - error("BONK: You can only run Noble.GameData.setup() once.") - return - else - gameDataHasBeenSetup = true - end - - numberOfSlots = __numberOfSlots or numberOfSlots - numberOfGameDataSlotsAtSetup = numberOfSlots - - local saveToDisk = Utilities.handleOptionalBoolean(__saveToDisk, true) - local modifyExistingOnKeyChange = Utilities.handleOptionalBoolean(__modifyExistingOnKeyChange, true) - - gameDataDefault = { - data = __keyValuePairs, - timestamp = playdate.getGMTTime() - } - - local createdNewData = false - - -- Noble Engine checks on disk for GameDatas, including ones that were - -- added with addSlot, but it assumes your game will have no greater than 1000 of them. - for i = 1, 1000, 1 do - -- We use a local here to avoid adding a nil item to the gameDatas table. - local gameData = Datastore.read("Game" .. i) - - if (gameData == nil) then - if (i <= numberOfSlots) then - -- No gameData on disk, so we create a new ones using default values - -- up to the numberOfGameDataSlots. - gameDatas[i] = table.deepcopy(gameDataDefault) - createdNewData = true - else - -- We can't find any more GameDatas on disk, so we update the - -- value of numberOfGameDataSlots if necessary and get outta town! - numberOfSlots = i - 1 - print("Total number of game slots: " .. numberOfSlots) - - if (saveToDisk and createdNewData) then - Noble.GameData.saveAll() - end - - return -- This is our only way out! - end - else - -- We found a gameData on disk, so we use it (either as-is or modified by a key change). - if (modifyExistingOnKeyChange and keyChange(gameDataDefault, gameData)) then - -- Found gameData on disk, but key changes have been made... - -- ...so we start with a new one, with default values... - local existingGameData = table.deepcopy(gameData) - gameData = table.deepcopy(gameDataDefault) - for key, _ in pairs(gameData.data) do - -- ...then copy data with unchanged keys to the new object, - -- naturally discarding keys that don't exist anymore. - if (existingGameData.data[key] ~= nil) then gameData.data[key] = existingGameData.data[key] end - end - gameDatas.timestamp = existingGameData.timestamp - createdNewData = true - end - gameDatas[i] = gameData - end - - end - -end - ---- Returns the value of the requested data item. --- @string __dataItemName The name of the data item. --- @int[opt] __gameDataSlot If set, uses a specific GameData slot. If not, uses the most recently touched GameData slot. --- @treturn any --- @usage Noble.GameData.get("equippedItem") --- @usage Noble.GameData.get("equippedItem", 2) -function Noble.GameData.get(__dataItemName, __gameDataSlot) - currentSlot = __gameDataSlot or currentSlot - if (exists(currentSlot, __dataItemName)) then - return gameDatas[currentSlot].data[__dataItemName] - end -end - ---- Set the value of a GameData item. --- @string __dataItemName The name of the data item. --- @tparam any __value The data item's new value --- @int[opt] __gameDataSlot If set, uses a specific GameData slot. If not, uses the most recently touched GameData slot. --- @bool[opt=true] __saveToDisk Saves to disk immediately. Set to false if you prefer to manually save (via a checkpoint or menu). --- @bool[opt=true] __updateTimestamp Sets the timestamp of this GameData to the current time. Leave false to retain existing timestamp. --- @usage Noble.GameData.set("score", 74205) --- @usage Noble.GameData.set("score", Noble.GameData.get("score") + 100) --- @see save -function Noble.GameData.set(__dataItemName, __value, __gameDataSlot, __saveToDisk, __updateTimestamp) - currentSlot = __gameDataSlot or currentSlot - if (exists(currentSlot, __dataItemName)) then - gameDatas[currentSlot].data[__dataItemName] = __value - local setTimestamp = Utilities.handleOptionalBoolean(__updateTimestamp, true) - if (setTimestamp) then updateTimestamp(gameDatas[currentSlot]) end - local saveToDisk = Utilities.handleOptionalBoolean(__saveToDisk, true) - if (saveToDisk) then Noble.GameData.save() end - end -end - ---- Reset a GameData item to its default value, defined in @{setup|setup}. --- @string __dataItemName The name of the data item. --- @int[opt] __gameDataSlot If set, uses a specific GameData slot. If not, uses the most recently touched GameData slot. --- @bool[opt=true] __saveToDisk Saves to disk immediately. Set to false if you prefer to manually save (via a checkpoint or menu). --- @bool[opt=true] __updateTimestamp Resets the timestamp of this GameData to the current time. Leave false to retain existing timestamp. --- @see save -function Noble.GameData.reset(__dataItemName, __gameDataSlot, __saveToDisk, __updateTimestamp) - currentSlot = __gameDataSlot or currentSlot - if (exists(currentSlot, __dataItemName)) then - gameDatas[currentSlot].data[__dataItemName] = gameDataDefault.data[__dataItemName] - local setTimestamp = Utilities.handleOptionalBoolean(__updateTimestamp, true) - if (setTimestamp) then updateTimestamp(gameDatas[currentSlot]) end - local saveToDisk = Utilities.handleOptionalBoolean(__saveToDisk, true) - if (saveToDisk) then Noble.GameData.save(currentSlot) end - end -end - ---- Reset all values in a GameData slot to the default values, defined in @{setup|setup}. --- @int[opt] __gameDataSlot If set, uses a specific GameData slot. If not, uses the most recently touched GameData slot. --- @bool[opt=true] __saveToDisk Saves to disk immediately. Set to false if you prefer to manually save (via a checkpoint or menu). --- @bool[opt=true] __updateTimestamp Resets the timestamp of this GameData to the current time. Leave false to retain existing timestamp. --- @see save -function Noble.GameData.resetAll(__gameDataSlot, __saveToDisk, __updateTimestamp) - currentSlot = __gameDataSlot or currentSlot - for key, _ in pairs(gameDatas[currentSlot].data) do - gameDatas[currentSlot].data[key] = gameDataDefault.data[key] - end - local setTimestamp = Utilities.handleOptionalBoolean(__updateTimestamp, true) - if (setTimestamp) then updateTimestamp(gameDatas[currentSlot]) end - local saveToDisk = Utilities.handleOptionalBoolean(__saveToDisk, true) - if (saveToDisk) then Noble.GameData.save(currentSlot) end -end - ---- Add a save slot to your game. This is useful for games which have arbitrary save slots, or encourage save scumming. --- @int[opt=1] __numberToAdd What it says on the tin. --- @bool[opt=true] __saveToDisk Saves to disk immediately. Set to false if you prefer to manually save (via a checkpoint or menu). --- @usage Noble.GameData.addSlot() --- @usage Noble.GameData.addSlot(10) -function Noble.GameData.addSlot(__numberToAdd, __saveToDisk) - local numberToAdd = __numberToAdd or 1 - local saveToDisk = Utilities.handleOptionalBoolean(__saveToDisk, true) - if (__numberToAdd < 1) then error ("BONK: Don't use a number smaller than 1, silly.", 2) return end - for i = 1, numberToAdd, 1 do - local newGameData = table.deepcopy(gameDataDefault) - updateTimestamp(newGameData) - table.insert(gameDatas, newGameData) - if (saveToDisk) then Noble.GameData.save() end - end - numberOfSlots = numberOfSlots + numberToAdd - print("Added " .. numberToAdd .. " GameData slots. Total GameData slots: " .. numberOfSlots) -end - ---- Deletes a GameData from disk if its save slot is greater than the default number established in `setup`. --- Otherwise, resets all data items to default values using @{resetAll|resetAll}. --- --- Generally, you won't need this unless you've added save slots using @{addSlot|addSlot}. In other cases, use @{resetAll|resetAll}. --- @int __gameDataSlot The slot holding the GameData to delete. Unlike other methods that take this argument, this is not optional. --- @bool[opt=true] __collapseGameDatas Re-sorts the gameDatas table (and renames existing JSON files on disk) to fill the gap left by the deleted GameData. --- @see deleteAllSlots --- @see addSlot --- @see resetAll --- @usage Noble.GameData.deleteSlot(6) --- @usage Noble.GameData.deleteSlot(15, false) -function Noble.GameData.deleteSlot(__gameDataSlot, __collapseGameDatas) - if (__gameDataSlot == nil) then - error("BONK: You must specify a GameData slot to delete.") - end - local collapseGameDatas = Utilities.handleOptionalBoolean(__collapseGameDatas, true) - if (exists(__gameDataSlot)) then - if (__gameDataSlot > numberOfGameDataSlotsAtSetup) then - -- If this GameData is not one of the default ones from setup(), it is removed from disk. - if (playdate.file.exists("Game" .. __gameDataSlot)) then - gameDatas[__gameDataSlot] = nil -- Clear from memory. - Datastore.delete("Game" .. __gameDataSlot) -- Clear from disk. - if (currentSlot == __gameDataSlot) then currentSlot = 1 end -- Safety! - if (collapseGameDatas) then - -- Collapse GameDatas - local newGameDatas = {} - for i = 1, numberOfSlots do - if(gameDatas[i] ~= nil) then - table.insert(newGameDatas, gameDatas[i]) - if (i >= __gameDataSlot) then - playdate.file.rename("Game" .. __gameDataSlot, "Game" .. __gameDataSlot-1) - end - end - end - gameDatas = newGameDatas - numberOfSlots = numberOfSlots - 1 - end - else - error("BONK: This GameData is in memory, but its file doesn't exist on disk, so it can't be deleted.", 2) - end - else - -- If this GameData is one of the default ones from setup(), it is reset to default values. - Noble.GameData.resetAll(__gameDataSlot) - end - end -end - ---- Deletes all GameDatas from disk, except for the number specified in setup, which are reset to default values. --- Use this to clear all data as if you were running setup again. --- Generally, you don't need this unless you've added save slots using @{addSlot|addSlot}. In other cases, use @{resetAll|resetAll} on each slot. --- @see deleteSlot --- @see addSlot -function Noble.GameData.deleteAllSlots() - local numberToDelete = numberOfSlots - for i = numberToDelete, 1, -1 do - Noble.GameData.deleteSlot(i, false) -- Don't need to collapse the table because we're deleting them in reverse order. - end -end - ---- Returns the timestamp of the requested GameData, as a tuple (local time, GMT time). The timestamp is updated --- See Playdate SDK for details on how a time object is formatted. NOTE: Timestamps are stored internally in GMT. --- @int __gameDataSlot The GameData slot to get the timestamp of. Unlike other methods that take this argument, this is not optional. --- @treturn table Local time --- @treturn table GMT time --- @usage Noble.GameData.getTimestamp(1) -function Noble.GameData.getTimestamp(__gameDataSlot) - if (exists(__gameDataSlot)) then - return playdate.timeFromEpoch(playdate.epochFromGMTTime(gameDatas[__gameDataSlot].timestamp)), gameDatas[__gameDataSlot].timestamp - end -end - ---- Returns the current number of GameData slots. --- @treturn int -function Noble.GameData.getNumberOfSlots() return numberOfSlots end - ---- Returns the number of the current GameData slot. --- @treturn int -function Noble.GameData.getCurrentSlot() return currentSlot end - ---- Saves a single GameData to disk. If you want to save all GameDatas, use @{saveAll|saveAll} instead. --- @int[opt] __gameDataSlot If set, uses a specific GameData slot. If not, uses the most recently touched GameData slot. --- @see saveAll --- @usage Noble.GameData.save() --- @usage Noble.GameData.save(3) -function Noble.GameData.save(__gameDataSlot) - local gameDataSlot = __gameDataSlot or currentSlot - if (exists(gameDataSlot)) then - currentSlot = gameDataSlot - Datastore.write(gameDatas[currentSlot], "Game" .. currentSlot) - end -end - ---- Save all GameDatas to disk. If you only have one, or want to save a specific one, use @{save|save} instead. --- @see save -function Noble.GameData.saveAll() - for i = 1, numberOfSlots, 1 do - Datastore.write(gameDatas[i], "Game" .. currentSlot) - end -end diff --git a/source/libraries/noble/modules/Noble.Input.lua b/source/libraries/noble/modules/Noble.Input.lua deleted file mode 100644 index e57e68f..0000000 --- a/source/libraries/noble/modules/Noble.Input.lua +++ /dev/null @@ -1,333 +0,0 @@ ---- A complete encapsulation of the Playdate's input system. The Playdate SDK gives developers multiple ways to manage input. Noble Engine's approach revolves around the SDK's "inputHandlers," extending them to include additional input methods, and pull in other hardware functions that the SDK puts elsewhere. See usage below for the full list of supported methods. ---

    By default, Noble Engine assumes each scene will have an inputManager assigned to it. So, for example, you can define one inputManager for menu screens and another for gameplay scenes in your `main.lua`, and then in each scene, set which one that scene uses. You can instead define a unique inputHandler in each scene. ---

    You may also create and manage inputManagers within and outside of scenes. When a NobleScene is loaded, its inputHandler will become active, thus, inputHandlers do not carry across scenes, and all input is suspended during scene transitions. An advanced use-case is to leave a scene's inputHandler as nil, and manage it separately. ---

    NOTE: While the Playdate SDK allows you to stack as many inputHandlers as you want, Noble Engine assumes only one active inputHandler at a time. You may still manually call `playdate.inputHandlers.push()` and `playdate.inputHandlers.pop()` yourself, but Noble Engine will not know about it and it may cause unexpected behavior. ---

    In addition, you may directly query button status using the SDK's methods for that, but it is not advised to use that as the primary way to manage input for Noble Engine projects, because much of Noble.Input's functionality will not apply. --- @module Noble.Input --- @usage --- local myInputHandler = { --- AButtonDown = function() end, -- Fires once when button is pressed down. --- AButtonHold = function() end, -- Fires each frame while a button is held (Noble Engine implementation). --- AButtonHeld = function() end, -- Fires once after button is held for 1 second (available for A and B). --- AButtonUp = function() end, -- Fires once when button is released. --- BButtonDown = function() end, --- BButtonHold = function() end, --- BButtonHeld = function() end, --- BButtonUp = function() end, --- downButtonDown = function() end, --- downButtonHold = function() end, --- downButtonUp = function() end, --- leftButtonDown = function() end, --- leftButtonHold = function() end, --- leftButtonUp = function() end, --- rightButtonDown = function() end, --- rightButtonHold = function() end, --- rightButtonUp = function() end, --- upButtonDown = function() end, --- upButtonHold = function() end --- upButtonUp = function() end, --- --- cranked = function(change, acceleratedChange) end, -- See Playdate SDK. --- crankDocked = function() end, -- Noble Engine implementation. --- crankUndocked = function() end, -- Noble Engine implementation. --- --- orientationChanged = function() end -- Noble Engine implementation. --- } --- @see NobleScene.inputHandler --- -Noble.Input = {} - -local currentHandler = {} - ---- Get the currently active input handler. Returns nil if none are active. --- @treturn table A table of callbacks which handle input events. --- @see NobleScene.inputHandler -function Noble.Input.getHandler() - return currentHandler -end - ---- Use this to change the active inputHandler. ---

    Enter `nil` to disable input. Use @{setEnabled} to disable/enable input without losing track of the current inputHandler. --- @tparam[opt=nil] table __inputHandler A table of callbacks which handle input events. --- @see NobleScene.inputHandler --- @see clearHandler --- @see setEnabled -function Noble.Input.setHandler(__inputHandler) - if (currentHandler ~= nil) then - playdate.inputHandlers.pop() - end - - if (__inputHandler == nil) then - currentHandler = nil - else - currentHandler = __inputHandler - playdate.inputHandlers.push(__inputHandler, true) -- The Playdate SDK allows for multiple inputHandlers to mix and match methods. Noble Engine removes this functionality. - end -end - ---- A helper function that calls Noble.Input.setHandler() with no argument. --- @see setHandler -function Noble.Input.clearHandler() - Noble.Input.setHandler() -end - -local cachedInputHandler = nil - ---- Enable and disable user input without dealing with inputHanders. --- The Playdate SDK requires removing all inputHanders to halt user input, so while the currentHandler is cleared when `false` is passed to this method, --- it is cached so it can be later re-enabled by passing `true` it. --- @bool __value Set to false to halt input. Set to true to resume accepting input. --- @see getHandler --- @see clearHandler -function Noble.Input.setEnabled(__value) - local value = Utilities.handleOptionalBoolean(__value, true) - if (value == true) then - Noble.Input.setHandler(cachedInputHandler or currentHandler) - cachedInputHandler = nil - else - cachedInputHandler = currentHandler - Noble.Input.clearHandler() - end -end - ---- Checks to see that there is an active inputHandler --- @treturn bool Returns true if the input system is enabled. Returns false if `setEnabled(false)` was used, or if currentHandler is `nil`. -function Noble.Input.getEnabled() - return cachedInputHandler == nil -end - -local crankIndicatorActive = false -local crankIndicatorForced = false - ---- Enable/disable on-screen system crank indicator. --- --- NOTE: The indicator will only ever show if the crank is docked, unless `__evenWhenUndocked` is true. --- @bool __active Set true to start showing the on-screen crank indicator. Set false to stop showing it. --- @bool[opt=false] __evenWhenUndocked Set true to show the crank indicator even if the crank is already undocked (`__active` must also be true). -function Noble.Input.setCrankIndicatorStatus(__active, __evenWhenUndocked) - if (__active) then - UI.crankIndicator:start() - end - crankIndicatorActive = __active - crankIndicatorForced = Utilities.handleOptionalBoolean(__evenWhenUndocked, false) -end - ---- Checks whether the system crank indicator status. Returns a tuple. --- --- @treturn bool Is the crank indicator active? --- @treturn bool Is the crank indicator being forced when active, even when the crank is undocked? --- @see setCrankIndicatorStatus -function Noble.Input.getCrankIndicatorStatus() - return crankIndicatorActive, crankIndicatorForced -end - --- Noble Engine defines extra "buttonHold" methods that run every frame that a button is held down, but to implement them, we need to do some magic. -local buttonHoldBufferAmount = 3 -- This is how many frames to wait before the engine determines that a button is being held down. Using !buttonJustPressed() provides only 1 frame, which isn't enough. - -local AButtonHoldBufferCount = 0 -local BButtonHoldBufferCount = 0 -local upButtonHoldBufferCount = 0 -local downButtonHoldBufferCount = 0 -local leftButtonHoldBufferCount = 0 -local rightButtonHoldBufferCount = 0 - --- Store the latest orientation in order to know when to run the orientationChanged callback -local orientation = nil -local accelerometerValues = nil - ---- Checks the current display orientation of the device. Returns a tuple. --- If the accelerometer is not currently enabled, this method will turn it on, return current values, and then turn it off. --- If you are trying to get raw accelerometer values rather than the display orientation, you may want to use `playdate.readAccelerometer()` instead. --- @bool[opt=false] __getStoredValues If true, this method will simply return the most recently stored values, rather than use the accelerometer to check for new ones. --- @treturn str The named orientation of the device (a pseudo enum Noble.Input.ORIENTATION_XX) --- @treturn list Accelerometer values, where list[1] is x, list[2] is y and list[3] is z --- @see Noble.Input.ORIENTATION_UP --- @see Noble.Input.ORIENTATION_DOWN --- @see Noble.Input.ORIENTATION_LEFT --- @see Noble.Input.ORIENTATION_RIGHT -function Noble.Input.getOrientation(__getStoredValues) - - local getStoredValues = Utilities.handleOptionalBoolean(__getStoredValues, false) - if (not getStoredValues) then - - local turnOffAfterUse = false - if (not playdate.accelerometerIsRunning()) then - playdate.startAccelerometer() - turnOffAfterUse = true - end - - local x, y, z = playdate.readAccelerometer() - - if (turnOffAfterUse) then - playdate.stopAccelerometer() - end - - local newOrientation = nil - - if (x <= -0.7) then - newOrientation = Noble.Input.ORIENTATION_LEFT - elseif (x >= 0.7) then - newOrientation = Noble.Input.ORIENTATION_RIGHT - elseif (y <= -0.3) then - newOrientation = Noble.Input.ORIENTATION_DOWN - else - newOrientation = Noble.Input.ORIENTATION_UP - end - - accelerometerValues = {x, y, z} - - if (newOrientation ~= orientation) then - if (currentHandler.orientationChanged ~= nil) then - currentHandler.orientationChanged(orientation, accelerometerValues) - end - orientation = newOrientation - end - end - - return orientation, accelerometerValues - -end - --- Do not call this method directly, or modify it, thanks. :-) -function Noble.Input.update() - - if (currentHandler == nil) then return end - - if (currentHandler.AButtonHold ~= nil) then - if (playdate.buttonIsPressed(playdate.kButtonA)) then - if (AButtonHoldBufferCount >= buttonHoldBufferAmount) then currentHandler.AButtonHold(AButtonHoldBufferCount) end -- Execute! - AButtonHoldBufferCount = AButtonHoldBufferCount + 1 -- Wait another frame! - end - if (playdate.buttonJustReleased(playdate.kButtonA)) then AButtonHoldBufferCount = 0 end -- Reset! - end - if (currentHandler.BButtonHold ~= nil) then - if (playdate.buttonIsPressed(playdate.kButtonB)) then - if (BButtonHoldBufferCount >= buttonHoldBufferAmount) then currentHandler.BButtonHold(BButtonHoldBufferCount) end - BButtonHoldBufferCount = BButtonHoldBufferCount + 1 - end - if (playdate.buttonJustReleased(playdate.kButtonB)) then BButtonHoldBufferCount = 0 end - end - if (currentHandler.upButtonHold ~= nil) then - if (playdate.buttonIsPressed(playdate.kButtonUp)) then - if (upButtonHoldBufferCount >= buttonHoldBufferAmount) then currentHandler.upButtonHold(upButtonHoldBufferCount) end - upButtonHoldBufferCount = upButtonHoldBufferCount + 1 - end - if (playdate.buttonJustReleased(playdate.kButtonUp)) then upButtonHoldBufferCount = 0 end - end - if (currentHandler.downButtonHold ~= nil) then - if (playdate.buttonIsPressed(playdate.kButtonDown)) then - if (downButtonHoldBufferCount >= buttonHoldBufferAmount) then currentHandler.downButtonHold(downButtonHoldBufferCount) end - downButtonHoldBufferCount = downButtonHoldBufferCount + 1 - end - if (playdate.buttonJustReleased(playdate.kButtonDown)) then downButtonHoldBufferCount = 0 end - end - if (currentHandler.leftButtonHold ~= nil) then - if (playdate.buttonIsPressed(playdate.kButtonLeft)) then - if (leftButtonHoldBufferCount >= buttonHoldBufferAmount) then currentHandler.leftButtonHold(leftButtonHoldBufferCount) end - leftButtonHoldBufferCount = leftButtonHoldBufferCount + 1 - end - if (playdate.buttonJustReleased(playdate.kButtonLeft)) then leftButtonHoldBufferCount = 0 end - end - if (currentHandler.rightButtonHold ~= nil) then - if (playdate.buttonIsPressed(playdate.kButtonRight)) then - if (rightButtonHoldBufferCount >= buttonHoldBufferAmount) then currentHandler.rightButtonHold(rightButtonHoldBufferCount) end - rightButtonHoldBufferCount = rightButtonHoldBufferCount + 1 - end - if (playdate.buttonJustReleased(playdate.kButtonRight)) then rightButtonHoldBufferCount = 0 end - end - if (playdate.accelerometerIsRunning()) then - Noble.Input.getOrientation() - end -end - --- Do not call this method directly, or modify it, thanks. :-) -function playdate.crankDocked() - if (currentHandler ~= nil and currentHandler.crankDocked ~= nil and Noble.Input.getEnabled() == true) then - currentHandler.crankDocked() - end -end - --- Do not call this method directly, or modify it, thanks. :-) -function playdate.crankUndocked() - if (currentHandler ~= nil and currentHandler.crankUndocked ~= nil and Noble.Input.getEnabled() == true) then - currentHandler.crankUndocked() - end -end - ---- Constants --- . A set of constants referencing device inputs, stored as strings. Can be used for querying button input, --- but are mainly for on-screen prompts or other elements where a string literal is useful, such as a filename, GameData value, or localization key. --- For faster performance, use the ones that exist in the Playdate SDK (i.e.: `playdate.kButtonA`), which are stored as binary numbers. --- @usage --- function newPrompt(__input, __promptString) --- -- ... --- local icon = Graphics.image.new("assets/images/UI/Icon_" .. __input) --- -- ... --- end --- --- promptMove = newPrompt(Noble.Input.DPAD_HORIZONTAL, "Move!") -- assets/images/UI/Icon_dPadHorizontal.png" --- promptJump = newPrompt(Noble.Input.BUTTON_A, "Jump!") -- assets/images/UI/Icon_buttonA.png" --- promptCharge = newPrompt(Noble.Input.CRANK_FORWARD, "Charge the battery!") -- assets/images/UI/Icon_crankForward.png" --- @section constants - ---- `"buttonA"` -Noble.Input.BUTTON_A = "buttonA" ---- `"buttonB"` -Noble.Input.BUTTON_B = "buttonB" ---- The system menu button. --- --- `"buttonMenu"` -Noble.Input.BUTTON_MENU = "buttonMenu" - ---- Referencing the D-pad component itself, rather than an input. --- --- `"dPad"` -Noble.Input.DPAD = "dPad" ---- Referencing the left and right input D-pad inputs. --- --- `"dPadHorizontal"` -Noble.Input.DPAD_HORIZONTAL = "dPadHorizontal" ---- Referencing the up and down input D-pad inputs. --- --- `"dPadVertical"` -Noble.Input.DPAD_VERTICAL = "dPadVertical" ---- `"dPadUp"` -Noble.Input.DPAD_UP = "dPadUp" ---- `"dPadDown"` -Noble.Input.DPAD_DOWN = "dPadDown" ---- `"dPadLeft"` -Noble.Input.DPAD_LEFT = "dPadLeft" ---- `"dPadRight"` -Noble.Input.DPAD_RIGHT = "dPadRight" - ---- Referencing the crank component itself, rather than an input. --- --- `"crank"` -Noble.Input.CRANK = "crank" ---- AKA: Clockwise. See Playdate SDK. --- --- `"crankForward"` -Noble.Input.CRANK_FORWARD = "crankForward" ---- AKA: Anticlockwise. See Playdate SDK. --- --- `"crankReverse"` -Noble.Input.CRANK_REVERSE = "crankReverse" ---- Referencing the action of docking the crank. --- --- `"crankDock"` -Noble.Input.CRANK_DOCK = "crankDock" ---- Referencing the action of undocking the crank. --- --- `"crankUndock"` -Noble.Input.CRANK_UNDOCK = "crankUndock" - ---- Referencing the display orientations. --- --- `"orientationUp"` -Noble.Input.ORIENTATION_UP = "orientationUp" --- `"orientationDown"` -Noble.Input.ORIENTATION_DOWN = "orientationDown" --- `"orientationLeft"` -Noble.Input.ORIENTATION_LEFT = "orientationLeft" --- `"orientationRight"` -Noble.Input.ORIENTATION_RIGHT = "orientationRight" \ No newline at end of file diff --git a/source/libraries/noble/modules/Noble.Menu.lua b/source/libraries/noble/modules/Noble.Menu.lua deleted file mode 100644 index 00781cf..0000000 --- a/source/libraries/noble/modules/Noble.Menu.lua +++ /dev/null @@ -1,570 +0,0 @@ ---- An extended implementation of `playdate.ui.gridview`, meant for 1-dimensional, single-screen text menus. --- @module Noble.Menu --- -Noble.Menu = {} - ---- Setup --- @section setup - ---- Create a new menu object. --- @bool[opt=true] __activate @{activate|Activate} this menu upon creation. --- @param[opt=Noble.Text.ALIGN_LEFT] __alignment The text alignment of menu items. --- @bool[opt=false] __localized If true, menu item names are localization keys rather than display names. --- @param[opt=Graphics.kColorBlack] __color The color of menu item text. The selected highlight will be the inverse color. --- @int[opt=2] __padding Cell padding for menu items. --- @int[opt] __horizontalPadding Use this to override horizontal padding, useful for certain fonts. If nil, uses __padding. --- @int[opt=2] __margin Spacing between menu items. --- @param[opt=Noble.Text.getCurrentFont()] __font If nil, uses current set font. --- @int[opt=__font:getHeight()/4] __selectedCornerRadius Sets rounded corners for a selected menu item. --- @int[opt=1] __selectedOutlineThickness Sets the outline thickness for selected items. --- @return `menu`, a new menu item. --- @usage --- local menu = Noble.Menu.new( --- true, --- Noble.Text.ALIGN_CENTER, --- false, --- Graphics.kColorWhite, --- 4, 6, --- Noble.Text.large, --- nil, 3 --- ) --- menu:addItem("Play Game", function() TitleScreen:playGame() end) --- menu:addItem("Options", function() Noble.transition(OptionsScreen) end) --- menu:addItem("Credits", function() Noble.transition(CreditsScreen) end) --- @see addItem -function Noble.Menu.new(__activate, __alignment, __localized, __color, __padding, __horizontalPadding, __margin, __font, __selectedCornerRadius, __selectedOutlineThickness) - - -- Prep for creating the gridview object - local paddingLocal = __padding or 2 - local fontLocal = __font or Noble.Text.getCurrentFont() - local textHeightLocal = fontLocal:getHeight() - - -- Create gridview object - local menu = UI.gridview.new(0, textHeightLocal + paddingLocal) - - --- Properties - --@section properties - - menu.alignment = __alignment or Noble.Text.ALIGN_LEFT - - --- @bool[opt=false] _ Indicates whether this menu's item names are treated as localization keys. - menu.localized = Utilities.handleOptionalBoolean(__localized, false) - menu.textHeight = textHeightLocal - menu.padding = paddingLocal - menu.horizontalPadding = __horizontalPadding or menu.padding - menu.margin = __margin or 2 - menu.font = fontLocal - menu.selectedCornerRadius = __selectedCornerRadius or textHeightLocal/4 - menu.selectedOutlineThickness = __selectedOutlineThickness or 1 - - -- Local cleanup. We don't need these anymore. - paddingLocal = nil - fontLocal = nil - textHeightLocal = nil - - -- Colors - menu.color = __color or Graphics.kColorBlack -- TO-DO allow for copy fill mode instead of color. - menu.fillMode = Graphics.kDrawModeFillBlack - menu.otherColor = Graphics.kColorWhite - menu.otherFillMode = Graphics.kDrawModeFillWhite - if (menu.color == Graphics.kColorWhite) then - menu.fillMode = Graphics.kDrawModeFillWhite - menu.otherColor = Graphics.kColorBlack - menu.otherFillMode = Graphics.kDrawModeFillBlack - end - - -- Gridview properties - menu:setNumberOfColumns(1) - menu:setCellPadding(0, 0, 0, 0) - menu.changeRowOnColumnWrap = false - - --- Tables - --@section tables - - --- A string "array" of menu item strings/keys. - -- You cannot add or remove menu items by modifying this table. - -- It is meant as a read-only table, provided for convenience when iterating, etc. Modifying its values may break other methods. - -- @usage - -- for i = 1, #menu.itemNames, 1 do - -- menu.clickHandlers[menu.itemNames[i]] = nil -- Clears all click handlers, for some reason. - -- end - -- @see addItem - menu.itemNames = {} - - -- This is an internal table. Modifying its may break other methods. - menu.displayNames = {} - - -- This is an internal table. Modifying its may break other methods. - menu.displayNamesAreLocalized = {} - - --- A table of functions associated with menu items. Items are a defined when calling @{addItem|addItem}, but their associated functions may be modified afterward. - -- - -- You cannot add or remove menu items by modifying this table. - -- @usage - -- local menu = Noble.Menu.new(true) - -- menu.addItem("Play Game") - -- menu.addItem("Options") - -- - -- menu.clickHandlers["Play Game"] = function() TitleScreen:playGame() end - -- menu.clickHandlers["Options"] = function() Noble.transition(OptionsScreen) end - -- @usage - -- local menu = Noble.Menu.new(true) - -- menu.addItem("Play Game") - -- menu.addItem("Options") - -- - -- menu.clickHandlers = { - -- ["Play Game"] = function TitleScreen:playGame() end, - -- ["Options"] = function() Noble.transition(OptionsScreen) end - -- } - -- @see addItem - -- @see removeItem - menu.clickHandlers = {} - - --- A key/value table of menu item indices. - -- - -- This is meant as a read-only table, provided for convenience. Modifying its values will break other methods. - -- @usage - -- menu.itemPositions["Play Game"] -- 1 - -- menu.itemPositions["Options"] -- 2 - menu.itemPositions = {} - - --- A key/value table of pixel widths for each menu item, based on its text. Useful for animation, layout, etc. - -- - -- This is meant as a read-only table, provided for convenience. Modifying its values will break other methods. - -- @usage local playGameMenuItemWidth = menu.itemWidths["Play Game"] - menu.itemWidths = {} - - --- Properties - -- @section properties - - --- @int _ - -- The current menu item's index. - -- - -- This is meant as a read-only value. Do not modify it directly. - -- @see select - menu.currentItemNumber = 1 - - --- @string _ - -- The current menu item's name. - -- - -- This is meant as a read-only value. Do not modify it directly. - -- @see select - menu.currentItemName = menu.itemNames[1] - - - --- @int _ - -- The width of the widest menu item plus the menu's horizontal padding. - -- - -- This is meant as a read-only value. Do not modify it directly. - menu.width = 0 - - --- Setup - -- @section setup - - --- Adds a item to this menu. - -- @string __nameOrKey The name of this menu item. It can be a display name or a localization key. Must be unique. - -- @tparam[opt] function __clickHandler The function that runs when this menu item is "clicked." - -- @int[opt] __position Insert the item at a specific position. If not set, adds to the end of the list. - -- @string[opt] __displayName You can create an optional, separate display name for this item. You can add or change this at runtime via @{setItemDisplayName|setItemDisplayName}. - -- @bool[opt=false] __displayNameIsALocalizationKey If true, will treat the `__displayName` as a localization key. This is separate from this menu's @{localized|localized} value. - -- @see new - -- @see removeItem - -- @see setItemDisplayName - function menu:addItem(__nameOrKey, __clickHandler, __position, __displayName, __displayNameIsALocalizationKey) - local clickHandler = __clickHandler or function () print("Menu item \"" .. __nameOrKey .. "\" clicked!") end - if (__position ~= nil) then - if (__position <= 0 or __position > #self.itemNames) then error("BONK: Menu item out of range.", 3) return end - table.insert(self.itemNames, __position, __nameOrKey) - for key, value in pairs(self.itemPositions) do - if (value >= __position) then - self.itemPositions[key] = self.itemPositions[key] + 1 - end - end - self.itemPositions[__nameOrKey] = __position - else - table.insert(self.itemNames, __nameOrKey) - self.itemPositions[__nameOrKey] = #self.itemNames - end - - self.clickHandlers[__nameOrKey] = clickHandler - - -- Item name - local nameOrKey - if (self.localized) then - nameOrKey = Graphics.getLocalizedText(__nameOrKey) - else - nameOrKey = __nameOrKey - end - - -- Display name - local displayName = nil - if (__displayName ~= nil) then - if (__displayNameIsALocalizationKey == true) then - displayName = Graphics.getLocalizedText(__displayName) - else - displayName = __displayName - end - self.displayNames[__nameOrKey] = displayName - end - - if (displayName == nil) then - self:updateWidths(__nameOrKey, nameOrKey) - else - self:updateWidths(__nameOrKey, displayName) - end - - self:setNumberOfRows(#self.itemNames) - - end - - -- Internal method. - function menu:updateWidths(__nameOrKey, __string) - - if (__string == nil) then - __string = __nameOrKey - end - - -- Item width - self.itemWidths[__nameOrKey] = self.font:getTextWidth(__string) - - -- Menu width - local width = 0 - for _, value in pairs(self.itemWidths) do - if value > width then width = value end - end - self.width = width + (self.horizontalPadding * 2) + (self.selectedOutlineThickness * 2) - end - - --- Removes a item from this menu. - -- @tparam[opt=#menu.itemNames] int|string __menuItem The menu item to remove. You can enter either the item's name/key or it's position. If left blank, removes the last item. - -- @see addItem - function menu:removeItem(__menuItem) - local itemString = nil - local itemPosition = nil - - if (__menuItem == nil) then - __menuItem = #self.itemNames - end - - if (type(__menuItem) == "number") then - if (__menuItem <= 0 or __menuItem > #self.itemNames) then error("BONK: Menu item out of range.", 3) return end - itemString = self.itemNames[__menuItem] - itemPosition = __menuItem - elseif (type(__menuItem) == "string") then - itemString = __menuItem - itemPosition = self.itemPositions[__menuItem] - if (itemPosition == nil) then error("BONK: Menu item not found.", 3) return end - end - - for key, value in pairs(self.itemPositions) do - if (value > itemPosition) then - self.itemPositions[key] = self.itemPositions[key] - 1 - end - end - - table.remove(self.itemNames, itemPosition) - self.itemPositions[itemString] = nil - self.clickHandlers[itemString] = nil - self.itemWidths[itemString] = nil - self.displayNames[itemString] = nil - self.displayNamesAreLocalized[itemString] = nil - - -- In case the current item is selected. - if (self.currentItemNumber == itemPosition and self.currentItemNumber ~= 1) then - self:select(self.currentItemNumber - 1, true) - if (self.isActive() == false) then - self:setSelectedRow(0) - end - end - - self:setNumberOfRows(#self.itemNames) - - -- Update width - local width = 0 - for _, value in pairs(self.itemWidths) do - if value > width then width = value end - end - self.width = width + (self.horizontalPadding * 2) + (self.selectedOutlineThickness * 2) - - end - - -- - - local active = Utilities.handleOptionalBoolean(__activate, true) - if (active) then - menu.currentItemNumber = 1 - menu.currentItemName = menu.itemNames[1] - menu:setSelectedRow(1) - else - menu:setSelectedRow(0) - end - - --- Methods - --@section methods - - --- Activate this menu. - -- This selects the most recently selected menu item (or the first item if none have been previously selected), and enables this menu's @{selectPrevious|selectPrevious}, @{selectNext|selectNext}, and @{click|click} methods. - -- @usage - -- local menu = Noble.Menu.new(false) - -- menu:activate() - function menu:activate() - active = true - self:select(self.currentItemNumber) - end - --- Deactivate this menu. - -- This deselects all menu items, and disables this menu's @{selectPrevious|selectPrevious}, @{selectNext|selectNext}, and @{click|click} methods. - -- @usage - -- local menu = Noble.Menu.new(true) - -- menu:deactivate() - function menu:deactivate() - self:setSelectedRow(0) - active = false - end - --- Check to see if this menu is currently active. - -- @treturn bool - function menu:isActive() - return active - end - - --- Selects the previous item in this menu. This menu must be active. - -- @bool[opt=false] __force Force this method to run, even if this menu is not active. - -- @bool[opt=true] __wrapSelection Selects the final menu item if the first menu item is currently selected. - -- @see activate - -- @usage - -- TitleScreen.inputHandler.upButtonDown = function() - -- menu:selectPrevious() - -- end - function menu:selectPrevious(__force, __wrapSelection) - if (self:isActive() or __force) then - local wrapSelection = Utilities.handleOptionalBoolean(__wrapSelection, true) - self:selectPreviousRow(wrapSelection, false, false) - local _, row, _ = self:getSelection() - self.currentItemNumber = row - self.currentItemName = self.itemNames[row] - end - end - --- Selects the next previous item in this menu. This menu must be active. - -- @bool[opt=false] __force Force this method to run, even if this menu is not active. - -- @bool[opt=true] __wrapSelection Selects the first menu item if the final menu item is currently selected. - -- @see activate - -- @usage - -- TitleScreen.inputHandler.downButtonDown = function() - -- menu:selectNext() - -- end - function menu:selectNext(__force, __wrapSelection) - if (self:isActive() or __force) then - local wrapSelection = Utilities.handleOptionalBoolean(__wrapSelection, true) - self:selectNextRow(wrapSelection, false, false) - local _, row, _ = self:getSelection() - self.currentItemNumber = row - self.currentItemName = self.itemNames[row] - end - end - - --- Selects a specific item in this menu, either by it's index, or it's name. This menu must be active. - -- @tparam int|string __menuItem The menu item to select. You can enter the item's number or it's name/key. - -- @bool[opt=false] __force Force this method to run, even if this menu is not active. - -- @see activate - -- @usage - -- function resetMenu() - -- menu:select(1, true) - -- menu:deactivate() - -- end - -- @usage - -- function resetMenu() - -- menu:select("Play Game", true) - -- menu:deactivate() - -- end - function menu:select(__menuItem, __force) - if (self:isActive() or __force) then - if (type(__menuItem) == 'number') then - if (__menuItem < 1) then - error("BONK: _menuItem must be a number greater than 0 (or a string).") - end - self:setSelectedRow(__menuItem) - elseif (type(__menuItem) == 'string') then - self:setSelectedRow(self.itemPositions[__menuItem]) - else - error("BONK: _menuItem must be a number or string, silly.") - end - local _, row, _ = self:getSelection() - self.currentItemNumber = row - self.currentItemName = self.itemNames[row] - end - end - - --- Runs the function associated with the currently selected menu item. This menu must be active. - -- @bool[opt=false] __force Force this method to run, even if this menu is not active. - -- @see activate - -- @usage - -- TitleScreen.inputHandler.AButtonDown = function() - -- menu:click() - -- end - function menu:click(__force) - if ((self:isActive() or __force) and self.clickHandlers[self.currentItemName] ~= nil) then - self.clickHandlers[self.currentItemName]() - end - end - - --- Gets the display name of a menu item. - -- - -- If a menu item does not have a display name, then the `__nameOrKey` (or its localized string) will be returned instead. This method is used internally when @{draw|draw} is called. - -- - -- If this menu's `localized` value is true, a returned `__nameOrKey` will always be localized, but a returned display name is only localized if the `__displayNameIsALocalizationKey` argument was set to `true` when the display name was added. - -- @string __itemName The menu item you want the display name of. - -- @treturn string - -- @see addItem - -- @see setItemDisplayName - function menu:getItemDisplayName(__itemName) - if (self.displayNames[__itemName] == nil) then - -- No display name. - if (self.localized) then - return Graphics.getLocalizedText(__itemName) - else - return __itemName - end - else - -- Has display name. - if (self.displayNamesAreLocalized[__itemName] == true) then - return Graphics.getLocalizedText(self.displayNames[__itemName]) - else - return self.displayNames[__itemName] - end - end - end - - --- When you add a menu item, you can give it a display name that's different from it's actual name. This method adds or changes the display name of a menu item. - -- @string __itemName The menu item name (or key if this menu uses localization keys). - -- @string __displayName The display name. - -- @bool[opt=false] __displayNameIsALocalizationKey Set to use to indicate that this display name is a localization key. This setting is separate from @{localized|localized} - -- @usage - -- function changeDifficultyLevel(__level) - -- menu:setItemDisplayName("Difficulty", "Difficulty: " .. __level) - -- end - function menu:setItemDisplayName(__itemName, __displayName, __displayNameIsALocalizationKey) - self.displayNames[__itemName] = __displayName - self.displayNamesAreLocalized[__itemName] = Utilities.handleOptionalBoolean(__displayNameIsALocalizationKey, false) - - local displayName - if (__displayNameIsALocalizationKey == true) then - displayName = Graphics.getLocalizedText(__displayName) - else - displayName = __displayName - end - - -- If we're "resetting" the display name by setting it to nil, then use __nameOrKey instead (checking for localization before calling updateWidths) - if (displayName == nil) then - if (self.localized) then - displayName = Graphics.getLocalizedText(__itemName) - else - displayName = __itemName - end - end - - self:updateWidths(__itemName, displayName) - end - - --- Drawing - --@section drawing - - --- Draw's this menu to the screen. You may call this manually, but ideally, you will put it in in your scene's @{NobleScene:update|update} or @{NobleScene:drawBackground|drawBackground} method. - -- @usage - -- function YourScene:update() - -- YourScene.super.update(self) - -- menu:draw(50, 100) - -- end - function menu:draw(__x, __y) - local xAdjustment = 0 - if (self.alignment == Noble.Text.ALIGN_CENTER) then - xAdjustment = self.width/2 - elseif (self.alignment == Noble.Text.ALIGN_RIGHT) then - xAdjustment = self.width - end - self:drawInRect(__x - xAdjustment, __y, self.width, ((self.textHeight + self.padding + self.margin) * #self.itemNames) + (self.selectedOutlineThickness * 2) - self.margin) - end - - --- This method is called for every non-selected item when @{draw|draw} is called. You shouldn't call this directly, but you may re-implement it if you wish. - -- @usage - -- -- This is the default implementation for this method. - -- function menu:drawItem(__x, __y, __itemIndex) - -- Graphics.setImageDrawMode(self.fillMode) - -- local xAdjustment = 0 - -- if (self.alignment == Noble.Text.ALIGN_CENTER) then - -- xAdjustment = self.width/2 - self.horizontalPadding/2 - -- elseif (self.alignment == Noble.Text.ALIGN_RIGHT) then - -- xAdjustment = self.width - self.horizontalPadding - -- end - -- Noble.Text.draw(self.itemNames[__itemIndex], __x + self.horizontalPadding/2 + xAdjustment, __y + self.padding/2, self.alignment, self.localized, self.font) - -- end - -- @see Noble.Text.draw - function menu:drawItem(__x, __y, __itemIndex) - Graphics.setImageDrawMode(self.fillMode) - local xAdjustment = self.selectedOutlineThickness - if (self.alignment == Noble.Text.ALIGN_CENTER) then - xAdjustment = self.width/2 - self.horizontalPadding/2 - elseif (self.alignment == Noble.Text.ALIGN_RIGHT) then - xAdjustment = self.width - self.horizontalPadding - self.selectedOutlineThickness - end - Noble.Text.draw( - self:getItemDisplayName(self.itemNames[__itemIndex]), - __x + self.horizontalPadding/2 + xAdjustment, __y + self.padding/2 + self.selectedOutlineThickness + (self.margin * (__itemIndex -1)), - self.alignment, false, self.font - ) - end - - --- This method is called for every selected item when @{draw|draw} is called. You shouldn't call this directly, but you may re-implement it if you wish. - -- @usage - -- -- This is the default implementation for this method. - -- function menu:drawSelectedItem(__x, __y, __itemIndex) - -- local xAdjustmentText = 0 - -- local xAdjustmentRect = 0 - -- if (self.alignment == Noble.Text.ALIGN_CENTER) then - -- xAdjustmentText = self.width/2 - self.horizontalPadding/2 - -- xAdjustmentRect = self.width/2 - self.itemWidths[self.itemNames[__itemIndex]]/2 - self.horizontalPadding/2 - -- elseif (self.alignment == Noble.Text.ALIGN_RIGHT) then - -- xAdjustmentText = self.width - self.horizontalPadding - -- xAdjustmentRect = self.width - self.itemWidths[self.itemNames[__itemIndex]] - self.horizontalPadding - -- end - -- Graphics.setColor(self.color) - -- Graphics.fillRoundRect(__x + xAdjustmentRect, __y, self.itemWidths[self.itemNames[__itemIndex]]+self.horizontalPadding, self.textHeight+self.padding, self.selectedCornerRadius) - -- Graphics.setColor(self.otherColor) - -- Graphics.setLineWidth(self.selectedOutlineThickness) - -- Graphics.drawRoundRect(__x + xAdjustmentRect, __y, self.itemWidths[self.itemNames[__itemIndex]]+self.horizontalPadding, self.textHeight+self.padding, self.selectedCornerRadius) - -- Graphics.setImageDrawMode(self.otherFillMode) - -- Noble.Text.draw(self.itemNames[__itemIndex], __x + self.horizontalPadding/2 + xAdjustmentText, __y+self.padding/2, self.alignment, self.localized, self.font) - -- end - -- @see Noble.Text.draw - function menu:drawSelectedItem(__x, __y, __itemIndex) - local xAdjustmentText = self.selectedOutlineThickness - local xAdjustmentRect = self.selectedOutlineThickness - if (self.alignment == Noble.Text.ALIGN_CENTER) then - xAdjustmentText = self.width/2 - self.horizontalPadding/2 - xAdjustmentRect = self.width/2 - self.itemWidths[self.itemNames[__itemIndex]]/2 - self.horizontalPadding/2 - elseif (self.alignment == Noble.Text.ALIGN_RIGHT) then - xAdjustmentText = self.width - self.horizontalPadding - self.selectedOutlineThickness - xAdjustmentRect = self.width - self.itemWidths[self.itemNames[__itemIndex]] - self.horizontalPadding - self.selectedOutlineThickness - end - Graphics.setColor(self.color) - Graphics.fillRoundRect(__x + xAdjustmentRect, __y + self.selectedOutlineThickness + (self.margin * (__itemIndex -1)), self.itemWidths[self.itemNames[__itemIndex]]+self.horizontalPadding, self.textHeight+self.padding, self.selectedCornerRadius) - Graphics.setColor(self.otherColor) - Graphics.setLineWidth(self.selectedOutlineThickness) - Graphics.drawRoundRect(__x + xAdjustmentRect, __y + self.selectedOutlineThickness + (self.margin * (__itemIndex -1)), self.itemWidths[self.itemNames[__itemIndex]]+self.horizontalPadding, self.textHeight+self.padding, self.selectedCornerRadius) - Graphics.setImageDrawMode(self.otherFillMode) - Noble.Text.draw( - self:getItemDisplayName(self.itemNames[__itemIndex]), - __x + self.horizontalPadding/2 + xAdjustmentText, __y + self.padding/2 + self.selectedOutlineThickness + (self.margin * (__itemIndex -1)), - self.alignment, false, self.font - ) - end - - -- Don't call or modify this function. - function menu:drawCell(_, row, _, selected, x, y, width, height) - if selected then - self:drawSelectedItem(x, y, row) - else - self:drawItem(x, y, row) - end - end - - return menu -end diff --git a/source/libraries/noble/modules/Noble.Settings.lua b/source/libraries/noble/modules/Noble.Settings.lua deleted file mode 100644 index fa69a91..0000000 --- a/source/libraries/noble/modules/Noble.Settings.lua +++ /dev/null @@ -1,158 +0,0 @@ ---- Operations for game settings / stats. --- @module Noble.Settings --- -Noble.Settings = {} -- This is the "class" that holds methods. -local settings = nil -- This is the actual settings object. We keep it local to avoid direct tampering. -local settingsDefault = nil -- We keep track of default values so they can be reset. - -local function keyChange(__dataDefault, __data) - local defaultKeys = {} - local keys = {} - for key, value in pairs(__dataDefault) do table.insert(defaultKeys, key) end - for key, value in pairs(__data) do table.insert(keys, key) end - for i = 1, #keys, 1 do - if (defaultKeys[i] ~= keys[i]) then return true end - end - return false -end - -local function settingExists(__key) - -- Check for valid data item. - for key, value in pairs(settings) do - if __key == key then - return true - end - end - error("BONK: Setting \'" .. __key .. "\' does not exist. Maybe you spellet ti wronlgly.", 3) - return false -end - -local settingsHaveBeenSetup = false - ---- Sets up the settings for your game. You can only run this once, and you must run it before using other `Noble.Settings` functions. It is recommended to place it in your main.lua, before `Noble.new()`. --- --- NOTE: You will *not* be able to add new keys via the `Noble.Settings.set` method. This means you need to specify the keys and default values of all of the settings in your game at setup. --- If you need to add keys that are not known during setup, it is probably not a setting and you should consider using `Noble.GameData` instead. --- @tparam table __keyValuePairs table. Your game's settings, and thier default values, as key/value pairs. NOTE: Do not use "nil" as a value. --- @bool[opt=true] __saveToDisk Saves your default values immediatly to disk. --- @bool[opt=true] __modifyExistingOnKeyChange Updates the existing settings object on disk if you make changes to your settings keys (not values) during development or when updating your game. --- @usage --- Noble.Settings.setup({ --- difficulty = "normal", --- music = true, --- sfx = true, --- players = 2, --- highScore = 0 -- You can store persistant stats here, too! --- }) -function Noble.Settings.setup(__keyValuePairs, __saveToDisk, __modifyExistingOnKeyChange) - if (settingsHaveBeenSetup) then - error("BONK: You can only run Noble.Settings.setup() once.") - return - else - settingsHaveBeenSetup = true - end - - -- Prevent using the setup() method if there are no settings to register - if (__keyValuePairs == nil or table.getSize(__keyValuePairs) == 0) then - error("BONK: Do not use Noble.Settings.setup if you do not have any settings to register. New settings cannot be added via Noble.Settings.set and must be all declared upfront in the Noble.Settings.setup method.") - return - end - - local saveToDisk = Utilities.handleOptionalBoolean(__saveToDisk, true) - local modifyExistingOnKeyChange = Utilities.handleOptionalBoolean(__modifyExistingOnKeyChange, true) - settingsDefault = __keyValuePairs - - -- Get existing settings from disk, if any. - settings = Datastore.read("Settings") - - if (settings == nil) then - -- No settings on disk, so we create a new settings object using default values. - settings = table.deepcopy(settingsDefault) - elseif (modifyExistingOnKeyChange and keyChange(settingsDefault, settings)) then - -- Found settings on disk, but key changes have been made... - -- ...so we start with a new default settings object... - local existingSettings = table.deepcopy(settings) - settings = table.deepcopy(settingsDefault) - for key, value in pairs(settings) do - -- ...then copy settings with unchanged keys to the new settings object, - -- naturally discarding keys that don't exist anymore. - if (existingSettings[key] ~= nil) then settings[key] = existingSettings[key] end - end - - end - - if (saveToDisk) then - Noble.Settings.save() - end -end - ---- Get the value of a setting. --- @string __settingName The name of the setting. --- @treturn any The value of the requested setting. --- @see set -function Noble.Settings.get(__settingName) - if (settingExists(__settingName)) then - return settings[__settingName] - end -end - ---- Set the value of a setting. --- --- NOTE: If __settingName is not a key in the __keyValuePairs dictionary given to the `setup` method it will not be added to the Settings. --- @string __settingName The name of the setting. --- @tparam any __value The setting's new value --- @bool[opt=true] __saveToDisk Saves to disk immediately. Set to false if you prefer to manually save (via a confirm button, etc). --- @see setup --- @see get --- @see save -function Noble.Settings.set(__settingName, __value, __saveToDisk) - if (settingExists(__settingName)) then - settings[__settingName] = __value - local saveToDisk = Utilities.handleOptionalBoolean(__saveToDisk, true) - if (saveToDisk) then Noble.Settings.save() end - end -end - ---- Resets the value of a setting to its default value defined in `setup()`. --- @string __settingName The name of the setting. --- @bool[opt=true] __saveToDisk Saves to disk immediately. Set to false if you prefer to manually save (via a confirm button, etc). --- @see resetSome --- @see resetAll --- @see save -function Noble.Settings.reset(__settingName, __saveToDisk) - if (settingExists(__settingName)) then - settings[__settingName] = settingsDefault[__settingName] - local saveToDisk = Utilities.handleOptionalBoolean(__saveToDisk, true) - if (saveToDisk) then Noble.Settings.save() end - end -end - ---- Resets the value of multiple settings to thier default value defined in `setup()`. This is useful if you are storing persistant stats like high scores in `Settings` and want the player to be able to reset them seperately. --- @tparam table __settingNames The names of the settings, in an array-style table. --- @bool[opt=true] __saveToDisk Saves to disk immediately. Set to false if you prefer to manually save (via a confirm button, etc). --- @see resetAll --- @see save -function Noble.Settings.resetSome(__settingNames, __saveToDisk) - for i = 1, #__settingNames, 1 do - Noble.Settings.reset(__settingNames[i], __saveToDisk) - end -end - ---- Resets all settings to thier default values defined in `setup()`. --- @bool[opt=true] __saveToDisk Saves to disk immediately. Set to false if you prefer to manually save (via a confirm button, etc). --- @see resetSome --- @see save -function Noble.Settings.resetAll(__saveToDisk) - settings = table.deepcopy(settingsDefault) - local saveToDisk = Utilities.handleOptionalBoolean(__saveToDisk, true) - if (saveToDisk) then Noble.Settings.save() end -end - ---- Saves settings to disk. --- You don't need to call this unless you set `__saveToDisk` as false when setting or resetting a setting (say that five times fast!). --- @see set --- @see reset --- @see resetAll -function Noble.Settings.save() - Datastore.write(settings, "Settings") -end diff --git a/source/libraries/noble/modules/Noble.Text.lua b/source/libraries/noble/modules/Noble.Text.lua deleted file mode 100644 index f910c95..0000000 --- a/source/libraries/noble/modules/Noble.Text.lua +++ /dev/null @@ -1,74 +0,0 @@ ---- Text and font handling. --- @module Noble.Text -Noble.Text = {} - ---- Fonts --- --- You can use these fonts in your project, or override them with your own if you wish. --- @section fonts --- @usage --- Noble.Text.FONT_SMALL = Graphics.font.new("assets/fonts/MySmallFont") --- Noble.Text.setFont(Noble.Text.FONT_SMALL) - ---- The Playdate system font. -Noble.Text.FONT_SYSTEM = Graphics.getSystemFont() ---- Noble Sans: A sans-serif 8×9 font, with English and Japanese-Kana character sets. -Noble.Text.FONT_SMALL = Graphics.font.new("libraries/noble/assets/fonts/NobleSans") ---- Noble Slab: (This font is not ready yet!) -Noble.Text.FONT_MEDIUM = Graphics.font.new("libraries/noble/assets/fonts/NobleSlab") ---- Satchel Roughed: A sans-serif 17×14 rounded font, with an English character set. -Noble.Text.FONT_LARGE = Graphics.font.new("libraries/noble/assets/fonts/SatchelRoughed") - ---- Constants ---@section constants - ---- An alternate way to call Playdate SDK's `kTextAlignment.left` -Noble.Text.ALIGN_LEFT = kTextAlignment.left ---- An alternate way to call Playdate SDK's `kTextAlignment.right` -Noble.Text.ALIGN_RIGHT = kTextAlignment.right ---- An alternate way to call Playdate SDK's `kTextAlignment.center` -Noble.Text.ALIGN_CENTER = kTextAlignment.center - -local currentFont = Noble.Text.FONT_SYSTEM - - ---- Functions ---@section functions - ---- --- @return The currently set font. -function Noble.Text.getCurrentFont() - return currentFont -end - ---- Set the current font --- @param __font any --- @param __variant any -function Noble.Text.setFont(__font, __variant) - currentFont = __font - local variant = __variant or Graphics.font.kVariantNormal - Graphics.setFont(__font, variant) -end - ---- Abstracts multiple `playdate.text` drawing functions into one. --- @string __string Display text or localization key. --- @number __x --- @number __y --- @param[opt=Noble.Text.ALIGN_LEFT] __alignment Left, right, or center! --- @bool[opt=false] __localized If true, `__string` is a localization key rather than display text. --- @param[opt=Noble.Text.getCurrentFont()] __font A font to use. If not set, the `currentFont` is used. If set, the `currentFont` is not updated. -function Noble.Text.draw(__string, __x, __y, __alignment, __localized, __font) - local alignment = __alignment or Noble.Text.ALIGN_LEFT - local localized = Utilities.handleOptionalBoolean(__localized, false) - local string = __string or "" - - if (__font ~= nil) then Graphics.setFont(__font) end -- Temporary font - - if (localized) then - Graphics.drawLocalizedTextAligned(string, __x, __y, alignment) - else - Graphics.drawTextAligned(string, __x, __y, alignment) - end - - if (__font ~= nil) then Graphics.setFont(currentFont) end -- Reset -end diff --git a/source/libraries/noble/modules/Noble.Transition.lua b/source/libraries/noble/modules/Noble.Transition.lua deleted file mode 100644 index 728811e..0000000 --- a/source/libraries/noble/modules/Noble.Transition.lua +++ /dev/null @@ -1,208 +0,0 @@ ---- An abstract class from which transition types are extended. --- @module Noble.Transition - -Noble.Transition = {} -class("Transition", nil, Noble).extends() - -Noble.Transition.Type = {} - ---- A transition type where no time at all passes between scenes. --- @see Noble.Transition.Cut -Noble.Transition.Type.CUT = "Cut" - ---- A transition type that has an "Enter" phase and an "Exit" phase. The new scene does not become active until the Enter phase is complete. A "holdTime" value determines how long to wait after the Enter phase completes before starting the Exit phase. --- @see Noble.Transition.Dip --- @see Noble.Transition.Imagetable --- @see Noble.Transition.Spotlight -Noble.Transition.Type.COVER = "Cover" - ---- A transition type that takes a screenshot of the exiting scene and activates the new scene before beginning the transition, allowing for both scenes to appear to be visible during the transition. --- @see Noble.Transition.CrossDissolve --- @see Noble.Transition.SlideOff --- @see Noble.Transition.ImagetableMask -Noble.Transition.Type.MIX = "Mix" - ---- A transition may have unique properties that can be set by the user when invoked. This table holds the default values for those properties. --- @see setDefaultProperties -Noble.Transition.defaultProperties = {} - -function Noble.Transition:init(__duration, __arguments) - - self.duration = __duration or Noble.getConfig().defaultTransitionDuration - - self.durationEnter = __arguments.durationEnter or self.duration/2 - self.durationExit = __arguments.durationExit or self.duration/2 - - if (__arguments.durationEnter and not __arguments.durationExit) then - warn("Soft-BONK: You've specified 'durationEnter' but not 'durationExit' for this transition. Thus, 'durationExit' will be half the value of 'duration'. Did you intend to do that?") - elseif (__arguments.durationExit and not __arguments.durationEnter) then - warn("Soft-BONK: You've specified 'durationExit' but not 'durationEnter' for this transition. Thus, 'durationEnter' will be half the value of 'duration'. Did you intend to do that?") - end - - self.sequence = nil - - self._captureScreenshotsDuringTransition = self._captureScreenshotsDuringTransition or false - - self.midpointReached = false - self.holdTimeElapsed = false - - self.drawMode = self.drawMode or __arguments.drawMode or Graphics.kDrawModeCopy - - self.holdTime = self.holdTime or __arguments.holdTime or self.defaultProperties.holdTime or 0 - - if (self._type == Noble.Transition.Type.MIX) then - - self._sequenceStartValue = self._sequenceStartValue or 0 - self._sequenceCompleteValue = self._sequenceCompleteValue or 1 - - self.ease = self.ease or __arguments.ease or self.defaultProperties.ease or Ease.linear - if ((__arguments.easeEnter or __arguments.easeExit) ~= nil) then - warn("BONK: You've specified an 'easeEnter' and/or 'easeExit' argument for a transition of type 'Noble.Transition.Type.MIX'. This will have no effect. Use 'ease' instead, or specify a transition of type 'Noble.Transition.Type.COVER'.") - end - - self.oldSceneScreenshot = Utilities.screenshot() - - elseif (self._type == Noble.Transition.Type.COVER) then - - self._sequenceStartValue = self._sequenceStartValue or 0 - self._sequenceMidpointValue = self._sequenceMidpointValue or 1 - self._sequenceResumeValue = self._sequenceResumeValue or 1 - self._sequenceCompleteValue = self._sequenceCompleteValue or 0 - - local ease = self.ease or __arguments.ease or self.defaultProperties.ease or Ease.linear - if (ease) then - self.easeEnter = self.easeEnter or self.defaultProperties.easeEnter or Ease.enter(ease) or ease - self.easeExit = self.easeExit or self.defaultProperties.easeExit or Ease.exit(ease) or ease - if (Ease.enter(ease) == nil or Ease.exit(ease) == nil) then - warn("Soft-BONK: You've specified an 'ease' value for a transition of type 'Noble.Transition.Type.COVER' that isn't in the form of 'Ease.inOutXxxx' or an 'Ease.outInXxxx'. As a result, this value will be used for both 'easeEnter' and 'easeExit'. Did you mean to do that?") - end - else - self.easeEnter = self.easeEnter or __arguments.easeEnter or self.defaultProperties.easeEnter or self.easeEnter or Ease.linear - self.easeExit = self.easeExit or __arguments.easeExit or self.defaultProperties.easeExit or self.easeExit or Ease.linear - end - - end - - self:setProperties(__arguments) - -end - ---- Use this to modify multiple default properties of a transition. Having default properties avoids having to set them every time a transition is called. --- Properties added here are merged with the existing default properties table. Overwrites only happen when a new value is set. --- @usage --- Noble.Transition.setDefaultProperties(Noble.Transition.CrossDissolve, { --- dither = Graphics.image.kDitherTypeDiagonalLine --- ease = Ease.outQuint --- }) --- Noble.Transition.setDefaultProperties(Noble.Transition.SpotlightMask, { --- x = 325, --- y = 95, --- invert = true --- }) --- @see defaultProperties -function Noble.Transition.setDefaultProperties(__transition, __properties) - table.merge(__transition.defaultProperties, __properties) -end - -function Noble.Transition:execute() - - local onStart = function() - Noble.transitionStartHandler() - self:onStart() -- If this transition has any custom code to run here, run it. - end - - local onMidpoint = function() - Noble.transitionMidpointHandler() - self.midpointReached = true - self:onMidpoint() -- If this transition has any custom code to run here, run it. - end - - local onHoldTimeElapsed = function() - self.holdTimeElapsed = true - self:onHoldTimeElapsed() - end - - local onComplete = function() - self:onComplete() -- If this transition has any custom code to run here, run it. - Noble.transitionCompleteHandler() - end - - local type = self._type - local holdTime = self.holdTime - - if (type == Noble.Transition.Type.CUT) then - onStart() - onMidpoint() - onHoldTimeElapsed() - onComplete() - elseif (type == Noble.Transition.Type.COVER) then - onStart() - self.sequence = Sequence.new() - :from(self._sequenceStartValue) - :to(self._sequenceMidpointValue, self.durationEnter-(holdTime/2), self.easeEnter) - :callback(onMidpoint) - :sleep(holdTime) - :callback(onHoldTimeElapsed) - :to(self._sequenceResumeValue, 0) - :to(self._sequenceCompleteValue, self.durationExit-(holdTime/2), self.easeExit) - :callback(onComplete) - :start() - elseif (type == Noble.Transition.Type.MIX) then - onStart() - onMidpoint() - onHoldTimeElapsed() - self.sequence = Sequence.new() - :from(self._sequenceStartValue) - :to(self._sequenceCompleteValue, self.duration, self.ease) - :callback(onComplete) - :start() - end - -end - ---- *Do not call this directly.* Implement this in a custom transition in order to set properties from user arguments given in `Noble.transition()`. See existing transitions for implementation examples. --- @see Noble.transition -function Noble.Transition:setProperties(__arguments) end - ---- *Do not call this directly.* Implement this in a custom transition in order to run custom code when the transition starts. Default transitions in Noble Engine do not use this. -function Noble.Transition:onStart() end - ---- *Do not call this directly.* Implement this in a custom transition in order to run custom code when the transition reaches its midpoint. Default transitions in Noble Engine do not use this. -function Noble.Transition:onMidpoint() end - ---- *Do not call this directly.* Implement this in a custom transition in order to run custom code when the transition's hold time has elapsed. Default transitions in Noble Engine do not use this. -function Noble.Transition:onHoldTimeElapsed() end - ---- *Do not call this directly.* Implement this in a custom transition in order to run custom code when the transition completes. Default transitions in Noble Engine do not use this. -function Noble.Transition:onComplete() end - ---- *Do not call this directly.* Implement this in a custom transition to draw the transition. This runs once per frame while the transition is running. See existing transitions for implementation examples. -function Noble.Transition:draw() end - - --- Noble Engine built-in transitions. -import 'libraries/noble/modules/Noble.Transition/Cut.lua' --- -import 'libraries/noble/modules/Noble.Transition/CrossDissolve.lua' -import 'libraries/noble/modules/Noble.Transition/Dip.lua' -import 'libraries/noble/modules/Noble.Transition/DipToBlack.lua' -import 'libraries/noble/modules/Noble.Transition/DipToWhite.lua' --- -import 'libraries/noble/modules/Noble.Transition/Imagetable.lua' -import 'libraries/noble/modules/Noble.Transition/ImagetableMask.lua' -import 'libraries/noble/modules/Noble.Transition/Spotlight.lua' -import 'libraries/noble/modules/Noble.Transition/SpotlightMask.lua' --- -import 'libraries/noble/modules/Noble.Transition/SlideOff.lua' -import 'libraries/noble/modules/Noble.Transition/SlideOffLeft.lua' -import 'libraries/noble/modules/Noble.Transition/SlideOffRight.lua' -import 'libraries/noble/modules/Noble.Transition/SlideOffUp.lua' -import 'libraries/noble/modules/Noble.Transition/SlideOffDown.lua' -import 'libraries/noble/modules/Noble.Transition/SlideOn.lua' -import 'libraries/noble/modules/Noble.Transition/SlideOnLeft.lua' -import 'libraries/noble/modules/Noble.Transition/SlideOnRight.lua' -import 'libraries/noble/modules/Noble.Transition/SlideOnUp.lua' -import 'libraries/noble/modules/Noble.Transition/SlideOnDown.lua' --- -import 'libraries/noble/modules/Noble.Transition/MetroNexus.lua' -import 'libraries/noble/modules/Noble.Transition/WidgetSatchel.lua' \ No newline at end of file diff --git a/source/libraries/noble/modules/Noble.Transition/CrossDissolve.lua b/source/libraries/noble/modules/Noble.Transition/CrossDissolve.lua deleted file mode 100644 index b89a5c0..0000000 --- a/source/libraries/noble/modules/Noble.Transition/CrossDissolve.lua +++ /dev/null @@ -1,26 +0,0 @@ ---- --- @submodule Noble.Transition - -class("CrossDissolve", nil, Noble.Transition).extends(Noble.Transition) -local transition = Noble.Transition.CrossDissolve -transition.name = "Cross Dissolve" - --- Type -transition._type = Noble.Transition.Type.MIX - ---- A simple cross-fade. --- @table Noble.Transition.CrossDissolve.defaultProperties --- @tparam[opt=Ease.outCubic] Ease ease --- @tparam[opt=Graphics.image.kDitherTypeBayer4x4] Graphics.image.kDither dither -transition.defaultProperties = { - ease = Ease.outCubic, - dither = Graphics.image.kDitherTypeBayer4x4 -} - -function transition:setProperties(__properties) - self.dither = __properties.dither or self.defaultProperties.dither -end - -function transition:draw() - self.oldSceneScreenshot:drawFaded(0, 0, 1 - self.sequence:get(), self.dither) -end \ No newline at end of file diff --git a/source/libraries/noble/modules/Noble.Transition/Cut.lua b/source/libraries/noble/modules/Noble.Transition/Cut.lua deleted file mode 100644 index 0413b81..0000000 --- a/source/libraries/noble/modules/Noble.Transition/Cut.lua +++ /dev/null @@ -1,13 +0,0 @@ ---- --- @submodule Noble.Transition - -class("Cut", nil, Noble.Transition).extends(Noble.Transition) -local transition = Noble.Transition.Cut -transition.name = "Cut" - --- Properties -transition._type = Noble.Transition.Type.CUT - ---- An all-time classic. --- This transition has no properties. --- @table Noble.Transition.Cut.defaultProperties \ No newline at end of file diff --git a/source/libraries/noble/modules/Noble.Transition/Dip.lua b/source/libraries/noble/modules/Noble.Transition/Dip.lua deleted file mode 100644 index 367313b..0000000 --- a/source/libraries/noble/modules/Noble.Transition/Dip.lua +++ /dev/null @@ -1,37 +0,0 @@ ---- --- @submodule Noble.Transition - -class("Dip", nil, Noble.Transition).extends(Noble.Transition) -local transition = Noble.Transition.Dip -transition.name = "Dip" - --- Type -transition._type = Noble.Transition.Type.COVER - ---- Fade to an image, then to the next scene. --- @table Noble.Transition.Dip.defaultProperties --- @number[opt=0.25] holdTime --- @tparam Graphics.image panelImage --- @tparam[opt=Graphics.image.kDitherTypeBayer4x4] Graphics.image.kDither dither --- @tparam[opt=Ease.outInQuad] Ease ease --- @number[opt=0] x --- @number[opt=0] y -transition.defaultProperties = { - holdTime = 0.25, - ease = Ease.outInQuad, - dither = Graphics.image.kDitherTypeBayer4x4, - panelImage = nil, - x = 0, - y = 0 -} - -function transition:setProperties(__arguments) - self.dither = __arguments.dither or self.defaultProperties.dither - self.panelImage = __arguments.panelImage or self.defaultProperties.panelImage - self.x = __arguments.x or self.defaultProperties.x - self.y = __arguments.y or self.defaultProperties.y -end - -function transition:draw() - self.panelImage:drawFaded(self.x, self.y, self.sequence:get(), self.dither) -end \ No newline at end of file diff --git a/source/libraries/noble/modules/Noble.Transition/DipToBlack.lua b/source/libraries/noble/modules/Noble.Transition/DipToBlack.lua deleted file mode 100644 index 9b3d0be..0000000 --- a/source/libraries/noble/modules/Noble.Transition/DipToBlack.lua +++ /dev/null @@ -1,19 +0,0 @@ ---- --- @submodule Noble.Transition - -class("DipToBlack", nil, Noble.Transition).extends(Noble.Transition.Dip) -local transition = Noble.Transition.DipToBlack -transition.name = "Dip to Black" - ---- Fade to black, then to the next scene. --- NOTE: The `panelImage` property is locked. --- @see Noble.Transition.Dip.defaultProperties --- @table Noble.Transition.DipToBlack.defaultProperties - -transition.panelImage = Graphics.image.new(400, 240, Graphics.kColorBlack) - -function transition:setCustomArguments(__arguments) - transition.super.setCustomArguments(self, __arguments) - self.x = 0 - self.y = 0 -end \ No newline at end of file diff --git a/source/libraries/noble/modules/Noble.Transition/DipToWhite.lua b/source/libraries/noble/modules/Noble.Transition/DipToWhite.lua deleted file mode 100644 index fc101ac..0000000 --- a/source/libraries/noble/modules/Noble.Transition/DipToWhite.lua +++ /dev/null @@ -1,19 +0,0 @@ ---- --- @submodule Noble.Transition - -class("DipToWhite", nil, Noble.Transition).extends(Noble.Transition.Dip) -local transition = Noble.Transition.DipToWhite -transition.name = "Dip to White" - ---- Fade to white, then to the next scene. --- NOTE: The `panelImage` property is locked. --- @see Noble.Transition.Dip.defaultProperties --- @table Noble.Transition.DipToWhite.defaultProperties - -transition.panelImage = Graphics.image.new(400, 240, Graphics.kColorWhite) - -function transition:setCustomArguments(__arguments) - transition.super.setCustomArguments(self, __arguments) - self.x = 0 - self.y = 0 -end \ No newline at end of file diff --git a/source/libraries/noble/modules/Noble.Transition/Imagetable.lua b/source/libraries/noble/modules/Noble.Transition/Imagetable.lua deleted file mode 100644 index 64c402a..0000000 --- a/source/libraries/noble/modules/Noble.Transition/Imagetable.lua +++ /dev/null @@ -1,131 +0,0 @@ ---- --- @submodule Noble.Transition - -class("Imagetable", nil, Noble.Transition).extends(Noble.Transition) -local transition = Noble.Transition.Imagetable -transition.name = "Imagetable" - --- Type -transition._type = Noble.Transition.Type.COVER - --- Overrides -transition.easeEnter = Ease.linear -transition.easeExit = Ease.linear - ---- A dip-style transition using one or two imagetables. --- @see Noble.Transition.ImagetableMask.defaultProperties --- @table Noble.Transition.Imagetable.defaultProperties --- @number[opt=0] holdTime --- @tparam Graphics.imagetable imagetable --- @bool[opt=false] reverse --- @bool[opt=false] flipX --- @bool[opt=false] flipY --- @bool[opt=false] rotate --- @tparam Graphics.imagetable imagetableEnter --- @bool[opt=nil] reverseEnter --- @bool[opt=nil] flipXEnter --- @bool[opt=nil] flipYEnter --- @bool[opt=nil] rotateEnter --- @tparam Graphics.imagetable imagetableExit --- @bool[opt=nil] reverseExit --- @bool[opt=nil] flipXExit --- @bool[opt=nil] flipYExit --- @bool[opt=nil] rotateExit -transition.defaultProperties = { - holdTime = 0, - imagetable = nil, - imagetableEnter = Graphics.imagetable.new("libraries/noble/assets/images/BoltTransitionEnter"), - imagetableExit = Graphics.imagetable.new("libraries/noble/assets/images/BoltTransitionExit"), - reverse = false, - reverseEnter = nil, - reverseExit = nil, - flipX = false, - flipY = false, - flipXEnter = nil, - flipYEnter = nil, - flipXExit = nil, - flipYExit = nil, - rotate = false, - rotateEnter = nil, - rotateExit = nil, -} - -function transition:setProperties(__properties) - - self.imagetable = __properties.imagetable or self.defaultProperties.imagetable - self.imagetableEnter = __properties.imagetableEnter or self.defaultProperties.imagetableEnter or self.imagetable - self.imagetableExit = __properties.imagetableExit or self.defaultProperties.imagetableExit or self.imagetable - - self.reverse = __properties.reverse or self.defaultProperties.reverse - self.reverseEnter = __properties.reverseEnter or self.defaultProperties.reverseEnter or self.reverse - self.reverseExit = __properties.reverseExit or self.defaultProperties.reverseExit or self.reverse - - self.flipX = __properties.flipX or self.defaultProperties.flipX - self.flipY = __properties.flipY or self.defaultProperties.flipY - self.flipXEnter = __properties.flipXEnter or self.defaultProperties.flipXEnter or self.flipX - self.flipYEnter = __properties.flipYEnter or self.defaultProperties.flipYEnter or self.flipY - self.flipXExit = __properties.flipXExit or self.defaultProperties.flipXExit or self.flipX - self.flipYExit = __properties.flipYExit or self.defaultProperties.flipYExit or self.flipY - - self.rotate = __properties.rotate or self.defaultProperties.rotate - self.rotateEnter = __properties.rotateEnter or self.defaultProperties.rotateEnter or self.rotate - self.rotateExit = __properties.rotateExit or self.defaultProperties.rotateExit or self.rotate - - -- "Private" variables - self._frameCountEnter = self.imagetableEnter and #self.imagetableEnter or 0 - self._frameCountExit = self.imagetableExit and #self.imagetableExit or 0 - - self._flipValueEnter = Noble.Transition.Imagetable.getFlipValue(self.rotateEnter, self.flipXEnter, self.flipYEnter) - self._flipValueExit = Noble.Transition.Imagetable.getFlipValue(self.rotateExit, self.flipXExit, self.flipYExit) - - local sequence0 = (not self.reverseEnter) and 0 or 1 - local sequence1 = (not self.reverseEnter) and 1 or 0 - local sequenceExit0 = (not self.reverseExit) and 0 or 1 - local sequenceExit1 = (not self.reverseExit) and 1 or 0 - - if (self.imagetableEnter == self.imagetableExit) then - self._sequenceStartValue = sequence0 - self._sequenceMidpointValue = sequence1 - self._sequenceResumeValue = sequence1 - self._sequenceCompleteValue = sequence0 - else - self._sequenceStartValue = sequence0 - self._sequenceMidpointValue = sequence1 - self._sequenceResumeValue = sequenceExit0 - self._sequenceCompleteValue = sequenceExit1 - end - - -- Warnings - if ((__properties.ease or __properties.easeEnter or __properties.easeExit) ~= nil) then - warn("BONK: You've specified an ease value for an Noble.Transition.Imagetable transition. This will have no effect.") - end - -end - -function transition:draw() - local progress = self.sequence:get() - local imagetable - local frameCount - local flipValue - if not self.holdTimeElapsed then - imagetable = self.imagetableEnter - frameCount = self._frameCountEnter - flipValue = self._flipValueEnter - else - imagetable = self.imagetableExit - frameCount = self._frameCountExit - flipValue = self._flipValueExit - end - local index = math.clamp((progress * frameCount) // 1, 1, frameCount) - imagetable[index]:draw(0, 0, flipValue) -end - -function Noble.Transition.Imagetable.getFlipValue(__rotate, __flipX, __flipY) - if(__rotate or (__flipX and __flipY)) then - return Graphics.kImageFlippedXY - else - if(__flipX) then return Graphics.kImageFlippedX - elseif(__flipY) then return Graphics.kImageFlippedY end - end - return Graphics.kImageUnflipped -end \ No newline at end of file diff --git a/source/libraries/noble/modules/Noble.Transition/ImagetableMask.lua b/source/libraries/noble/modules/Noble.Transition/ImagetableMask.lua deleted file mode 100644 index 134d77d..0000000 --- a/source/libraries/noble/modules/Noble.Transition/ImagetableMask.lua +++ /dev/null @@ -1,83 +0,0 @@ ---- --- @submodule Noble.Transition - -class("ImagetableMask", nil, Noble.Transition).extends(Noble.Transition) -local transition = Noble.Transition.ImagetableMask -transition.name = "Imagetable Mask" - --- Type -transition._type = Noble.Transition.Type.MIX - --- Overrides -transition.ease = Ease.linear - ---- A wipe transition using an animated mask in the form of an imagetable. --- @see Noble.Transition.Imagetable.defaultProperties --- @table Noble.Transition.ImagetableMask.defaultProperties --- @tparam Graphics.imagetable imagetable --- @bool[opt=false] reverse Set `true` to play the imagetable's frames in reverse order. --- @bool[opt=false] flipX --- @bool[opt=false] flipY --- @bool[opt=false] rotate Set as `true` to rotate the image 180-degrees --- @bool[opt=true] hasTransparency Set as `true` if the imagetable asset has transparent pixels. Set as `false` if the image uses white pixels for transparency. --- @bool[opt=false] invert Set as `true` to invert the image mask. -transition.defaultProperties = { - imagetable = Graphics.imagetable.new("libraries/noble/assets/images/BoltTransitionEnter"), - reverse = false, - flipX = false, - flipY = false, - rotate = false, - hasTransparency = true, - invert = false -} - -function transition:setProperties(__properties) - - self.imagetable = __properties.imagetable or self.defaultProperties.imagetable - self.reverse = __properties.reverse or self.defaultProperties.reverse - self.flipX = __properties.flipX or self.defaultProperties.flipX - self.flipY = __properties.flipY or self.defaultProperties.flipY - self.rotate = __properties.rotate or self.defaultProperties.rotate - self.hasTransparency = __properties.hasTransparency or self.defaultProperties.hasTransparency - self.invert = __properties.invert or self.defaultProperties.invert - - -- "Private" variables - self._flipValue = Noble.Transition.Imagetable.getFlipValue(self.rotate, self.flipX, self.flipY) - self._imagetableLength = self.imagetable and #self.imagetable or 0 - self._maskBackground = nil - self._maskForegroundDrawMode = nil - if (self.invert ~= true) then - self._maskBackground = Graphics.image.new(400, 240, Graphics.kColorWhite) - self._maskForegroundDrawMode = Graphics.kDrawModeFillBlack - else - self._maskBackground = Graphics.image.new(400, 240, Graphics.kColorBlack) - self._maskForegroundDrawMode = Graphics.kDrawModeFillWhite - end - - -- Warnings - if (__properties.imagetableExit ~= nil) then - warn("BONK: You've specified an 'imagetableExit' for an Noble.Transition.ImagetableMask transition. This will have no effect. ") - end - if ((__properties.ease or __properties.easeEnter or __properties.easeExit) ~= nil) then - warn("BONK: You've specified an ease value for an Noble.Transition.ImagetableMask transition. This will have no effect.") - end - -end - -function transition:draw() - local progress = self.sequence:get() - local length = self._imagetableLength - local index = math.clamp((progress * length) // 1, 1, length) - local mask = Graphics.image.new(400, 240) - - Graphics.pushContext(mask) - Graphics.setImageDrawMode(Graphics.kDrawModeCopy) - self._maskBackground:draw(0,0) - if (self.hasTransparency) then Graphics.setImageDrawMode(self._maskForegroundDrawMode) end - self.imagetable[index]:draw(0,0, self._flipValue) - Graphics.popContext() - - self.oldSceneScreenshot:setMaskImage(mask) - self.oldSceneScreenshot:draw(0,0) - -end \ No newline at end of file diff --git a/source/libraries/noble/modules/Noble.Transition/MetroNexus.lua b/source/libraries/noble/modules/Noble.Transition/MetroNexus.lua deleted file mode 100644 index bfb46a7..0000000 --- a/source/libraries/noble/modules/Noble.Transition/MetroNexus.lua +++ /dev/null @@ -1,58 +0,0 @@ ---- --- @submodule Noble.Transition - -class("MetroNexus", nil, Noble.Transition).extends(Noble.Transition) -local transition = Noble.Transition.MetroNexus -transition.name = "Metro Nexus" - --- Type -transition._type = Noble.Transition.Type.COVER - --- Overrides -transition._sequenceResumeValue = 0 -transition._sequenceCompleteValue = 1 -transition.easeEnter = Ease.linear -transition.easeExit = Ease.linear - ---- A "cascade" wipe transition, taken from "Metro Nexus" by Noble Robot. --- This transition has no properties. --- @table Noble.Transition.MetroNexus.defaultProperties - --- "Static" variables -local panels - -function transition:setProperties(__arguments) - - if (panels == nil) then - panels = { - Graphics.image.new(80,240, Graphics.kColorWhite), - Graphics.image.new(80,240, Graphics.kColorWhite), - Graphics.image.new(80,240, Graphics.kColorWhite), - Graphics.image.new(80,240, Graphics.kColorWhite), - Graphics.image.new(80,240, Graphics.kColorWhite) - } - end - - -- Warnings - if (__arguments.easeEnter or __arguments.easeEnter or __arguments.ease) then - warn("BONK: 'Noble.Transition.MetroNexus' does not support custom ease values.") - end - -end - -function transition:draw() - local progress = self.sequence:get() - if (not self.holdTimeElapsed) then - panels[1]:draw(000, (-1 + Ease.outQuint(progress, 0, 1, 1)) * 240) - panels[2]:draw(080, (-1 + Ease.outQuart(progress, 0, 1, 1)) * 240) - panels[3]:draw(160, (-1 + Ease.outQuart(progress, 0, 1, 1)) * 240) - panels[4]:draw(240, (-1 + Ease.outCubic(progress, 0, 1, 1)) * 240) - panels[5]:draw(320, (-1 + Ease.outSine (progress, 0, 1, 1)) * 240) - else - panels[1]:draw(000, (1 - Ease.inQuint(progress, 0, 1, 1)) * -240 + 240) - panels[2]:draw(080, (1 - Ease.inQuart(progress, 0, 1, 1)) * -240 + 240) - panels[3]:draw(160, (1 - Ease.inQuart(progress, 0, 1, 1)) * -240 + 240) - panels[4]:draw(240, (1 - Ease.inCubic(progress, 0, 1, 1)) * -240 + 240) - panels[5]:draw(320, (1 - Ease.inSine (progress, 0, 1, 1)) * -240 + 240) - end -end diff --git a/source/libraries/noble/modules/Noble.Transition/SlideOff.lua b/source/libraries/noble/modules/Noble.Transition/SlideOff.lua deleted file mode 100644 index ecfa2e4..0000000 --- a/source/libraries/noble/modules/Noble.Transition/SlideOff.lua +++ /dev/null @@ -1,38 +0,0 @@ ---- --- @submodule Noble.Transition - -class("SlideOff", nil, Noble.Transition).extends(Noble.Transition) -local transition = Noble.Transition.SlideOff -transition.name = "Slide Off" - --- Type -transition._type = Noble.Transition.Type.MIX - ---- The previous scene slides off the screen, revealing the next scene. --- @table Noble.Transition.SlideOff.defaultProperties --- @tparam[opt=Ease.outInQuad] Ease ease --- @number[opt=0] x --- @number[opt=0] y --- @number[opt=0] rotation -transition.defaultProperties = { - ease = Ease.inQuart, - x = 0, - y = 0, - rotation = 0 -} - -function transition:setProperties(__arguments) - self.x = __arguments.x or self.defaultProperties.x - self.y = __arguments.y or self.defaultProperties.y - self.rotation = __arguments.rotation or self.defaultProperties.rotation -end - -function transition:draw() - transition.super.draw(self) - local progress = self.sequence:get() - self.oldSceneScreenshot:drawRotated( - self.x * progress + 200, - self.y * progress + 120, - self.rotation * progress - ) -end \ No newline at end of file diff --git a/source/libraries/noble/modules/Noble.Transition/SlideOffDown.lua b/source/libraries/noble/modules/Noble.Transition/SlideOffDown.lua deleted file mode 100644 index 5a003b5..0000000 --- a/source/libraries/noble/modules/Noble.Transition/SlideOffDown.lua +++ /dev/null @@ -1,18 +0,0 @@ ---- --- @submodule Noble.Transition - -class("SlideOffDown", nil, Noble.Transition).extends(Noble.Transition.SlideOff) -local transition = Noble.Transition.SlideOffDown -transition.name = "Slide Off (Down)" - ---- The previous scene slides off the bottom of the screen, revealing the next scene. --- NOTE: The `x`, `y`, and `rotation` properties are locked. --- @see Noble.Transition.SlideOff.defaultProperties --- @table Noble.Transition.SlideOffDown.defaultProperties - -function transition:setProperties(__arguments) - transition.super.setProperties(self, __arguments) - self.x = 0 - self.y = 240 - self.rotation = 0 -end \ No newline at end of file diff --git a/source/libraries/noble/modules/Noble.Transition/SlideOffLeft.lua b/source/libraries/noble/modules/Noble.Transition/SlideOffLeft.lua deleted file mode 100644 index 732fec6..0000000 --- a/source/libraries/noble/modules/Noble.Transition/SlideOffLeft.lua +++ /dev/null @@ -1,18 +0,0 @@ ---- --- @submodule Noble.Transition - -class("SlideOffLeft", nil, Noble.Transition).extends(Noble.Transition.SlideOff) -local transition = Noble.Transition.SlideOffLeft -transition.name = "Slide Off (Left)" - ---- The previous scene slides off the left side of the screen, revealing the next scene. --- NOTE: The `x`, `y`, and `rotation` properties are locked. --- @see Noble.Transition.SlideOff.defaultProperties --- @table Noble.Transition.SlideOffLeft.defaultProperties - -function transition:setProperties(__arguments) - transition.super.setProperties(self, __arguments) - self.x = -400 - self.y = 0 - self.rotation = 0 -end \ No newline at end of file diff --git a/source/libraries/noble/modules/Noble.Transition/SlideOffRight.lua b/source/libraries/noble/modules/Noble.Transition/SlideOffRight.lua deleted file mode 100644 index 4dc3bd9..0000000 --- a/source/libraries/noble/modules/Noble.Transition/SlideOffRight.lua +++ /dev/null @@ -1,18 +0,0 @@ ---- --- @submodule Noble.Transition - -class("SlideOffRight", nil, Noble.Transition).extends(Noble.Transition.SlideOff) -local transition = Noble.Transition.SlideOffRight -transition.name = "Slide Off (Right)" - ---- The previous scene slides off the right side of the screen, revealing the next scene. --- NOTE: The `x`, `y`, and `rotation` properties are locked. --- @see Noble.Transition.SlideOff.defaultProperties --- @table Noble.Transition.SlideOffRight.defaultProperties - -function transition:setProperties(__arguments) - transition.super.setProperties(self, __arguments) - self.x = 400 - self.y = 0 - self.rotation = 0 -end \ No newline at end of file diff --git a/source/libraries/noble/modules/Noble.Transition/SlideOffUp.lua b/source/libraries/noble/modules/Noble.Transition/SlideOffUp.lua deleted file mode 100644 index 68a06a4..0000000 --- a/source/libraries/noble/modules/Noble.Transition/SlideOffUp.lua +++ /dev/null @@ -1,18 +0,0 @@ ---- --- @submodule Noble.Transition - -class("SlideOffUp", nil, Noble.Transition).extends(Noble.Transition.SlideOff) -local transition = Noble.Transition.SlideOffUp -transition.name = "Slide Off (Up)" - ---- The previous scene slides off the top of the screen, revealing the next scene. --- NOTE: The `x`, `y`, and `rotation` properties are locked. --- @see Noble.Transition.SlideOff.defaultProperties --- @table Noble.Transition.SlideOffUp.defaultProperties - -function transition:setProperties(__arguments) - transition.super.setProperties(self, __arguments) - self.x = 0 - self.y = -240 - self.rotation = 0 -end \ No newline at end of file diff --git a/source/libraries/noble/modules/Noble.Transition/SlideOn.lua b/source/libraries/noble/modules/Noble.Transition/SlideOn.lua deleted file mode 100644 index 202c17d..0000000 --- a/source/libraries/noble/modules/Noble.Transition/SlideOn.lua +++ /dev/null @@ -1,44 +0,0 @@ ---- --- @submodule Noble.Transition - -class("SlideOn", nil, Noble.Transition).extends(Noble.Transition) -local transition = Noble.Transition.SlideOn -transition.name = "Slide On" - --- Type -transition._type = Noble.Transition.Type.MIX - --- Overrides -transition._sequenceStartValue = 1 -transition._sequenceCompleteValue = 0 -transition._captureScreenshotsDuringTransition = true - ---- The next scene slides on the screen, covering up the previous scene. --- @table Noble.Transition.SlideOn.defaultProperties --- @tparam[opt=Ease.outInQuad] Ease ease --- @number[opt=0] x --- @number[opt=0] y --- @number[opt=0] rotation -transition.defaultProperties = { - ease = Ease.outQuart, - x = 0, - y = 0, - rotation = 0 -} - -function transition:setProperties(__arguments) - self.x = __arguments.x or self.defaultProperties.x - self.y = __arguments.y or self.defaultProperties.y - self.rotation = __arguments.rotation or self.defaultProperties.rotation -end - -function transition:draw() - transition.super.draw(self) - local progress = self.sequence:get() - self.oldSceneScreenshot:draw(0,0) - self.newSceneScreenshot:drawRotated( - self.x * progress + 200, - self.y * progress + 120, - self.rotation * progress - ) -end \ No newline at end of file diff --git a/source/libraries/noble/modules/Noble.Transition/SlideOnDown.lua b/source/libraries/noble/modules/Noble.Transition/SlideOnDown.lua deleted file mode 100644 index ff7e1ad..0000000 --- a/source/libraries/noble/modules/Noble.Transition/SlideOnDown.lua +++ /dev/null @@ -1,18 +0,0 @@ ---- --- @submodule Noble.Transition - -class("SlideOnDown", nil, Noble.Transition).extends(Noble.Transition.SlideOn) -local transition = Noble.Transition.SlideOnDown -transition.name = "Slide On (Down)" - ---- The next scene slides onto the screen from the top, covering up the previous scene. --- NOTE: The `x`, `y`, and `rotation` properties are locked. --- @see Noble.Transition.SlideOn.defaultProperties --- @table Noble.Transition.SlideOnDown.defaultProperties - -function transition:setProperties(__arguments) - transition.super.setProperties(self, __arguments) - self.x = 0 - self.y = -240 - self.rotation = 0 -end \ No newline at end of file diff --git a/source/libraries/noble/modules/Noble.Transition/SlideOnLeft.lua b/source/libraries/noble/modules/Noble.Transition/SlideOnLeft.lua deleted file mode 100644 index df0ac13..0000000 --- a/source/libraries/noble/modules/Noble.Transition/SlideOnLeft.lua +++ /dev/null @@ -1,18 +0,0 @@ ---- --- @submodule Noble.Transition - -class("SlideOnLeft", nil, Noble.Transition).extends(Noble.Transition.SlideOn) -local transition = Noble.Transition.SlideOnLeft -transition.name = "Slide On (Left)" - ---- The next scene slides onto the screen right-to-left, covering up the previous scene. --- NOTE: The `x`, `y`, and `rotation` properties are locked. --- @see Noble.Transition.SlideOn.defaultProperties --- @table Noble.Transition.SlideOnLeft.defaultProperties - -function transition:setProperties(__arguments) - transition.super.setProperties(self, __arguments) - self.x = 400 - self.y = 0 - self.rotation = 0 -end \ No newline at end of file diff --git a/source/libraries/noble/modules/Noble.Transition/SlideOnRight.lua b/source/libraries/noble/modules/Noble.Transition/SlideOnRight.lua deleted file mode 100644 index dbbe2c7..0000000 --- a/source/libraries/noble/modules/Noble.Transition/SlideOnRight.lua +++ /dev/null @@ -1,18 +0,0 @@ ---- --- @submodule Noble.Transition - -class("SlideOnRight", nil, Noble.Transition).extends(Noble.Transition.SlideOn) -local transition = Noble.Transition.SlideOnRight -transition.name = "Slide On (Right)" - ---- The next scene slides onto the screen left-to-right, covering up the previous scene. --- NOTE: The `x`, `y`, and `rotation` properties are locked. --- @see Noble.Transition.SlideOn.defaultProperties --- @table Noble.Transition.SlideOnRight.defaultProperties - -function transition:setProperties(__arguments) - transition.super.setProperties(self, __arguments) - self.x = -400 - self.y = 0 - self.rotation = 0 -end \ No newline at end of file diff --git a/source/libraries/noble/modules/Noble.Transition/SlideOnUp.lua b/source/libraries/noble/modules/Noble.Transition/SlideOnUp.lua deleted file mode 100644 index 701a94a..0000000 --- a/source/libraries/noble/modules/Noble.Transition/SlideOnUp.lua +++ /dev/null @@ -1,18 +0,0 @@ ---- --- @submodule Noble.Transition - -class("SlideOnUp", nil, Noble.Transition).extends(Noble.Transition.SlideOn) -local transition = Noble.Transition.SlideOnUp -transition.name = "Slide On (Up)" - ---- The next scene slides onto the screen from the bottom, covering up the previous scene. --- NOTE: The `x`, `y`, and `rotation` properties are locked. --- @see Noble.Transition.SlideOn.defaultProperties --- @table Noble.Transition.SlideOnUp.defaultProperties - -function transition:setProperties(__arguments) - transition.super.setProperties(self, __arguments) - self.x = 0 - self.y = 240 - self.rotation = 0 -end \ No newline at end of file diff --git a/source/libraries/noble/modules/Noble.Transition/Spotlight.lua b/source/libraries/noble/modules/Noble.Transition/Spotlight.lua deleted file mode 100644 index 745ecee..0000000 --- a/source/libraries/noble/modules/Noble.Transition/Spotlight.lua +++ /dev/null @@ -1,100 +0,0 @@ ---- --- @submodule Noble.Transition - -class("Spotlight", nil, Noble.Transition).extends(Noble.Transition) -local transition = Noble.Transition.Spotlight -transition.name = "Spotlight" - --- Type -transition._type = Noble.Transition.Type.COVER - ---- A spotlight in-out transition. --- @see Noble.Transition.SpotlightMask.defaultProperties --- @table Noble.Transition.Spotlight.defaultProperties --- @number[opt=0.25] holdTime --- @tparam Graphics.image panelImage --- @tparam[opt=Graphics.image.kDitherTypeBayer4x4] Graphics.image.kDither dither --- @tparam[opt=Ease.outInQuad] Ease ease --- @number[opt=200] x --- @number[opt=120] y --- @tparam[opt=nil] Ease easeEnter --- @number[opt=nil] xEnter --- @number[opt=nil] yEnter --- @number[opt=nil] xEnterStart --- @number[opt=nil] yEnterStart --- @number[opt=nil] xEnterEnd --- @number[opt=nil] yEnterEnd --- @tparam[opt=nil] Ease easeEnter --- @number[opt=nil] xExit --- @number[opt=nil] yExit --- @number[opt=nil] xExitStart --- @number[opt=nil] yExitStart --- @number[opt=nil] xExitEnd --- @number[opt=nil] yExitEnd -transition.defaultProperties = { - holdTime = 0.25, - panelImage = nil, - dither = Graphics.image.kDitherTypeBayer4x4, - ease = Ease.outInQuad, - x = 200, - y = 120, - easeEnter = nil, - xEnter = nil, - yEnter = nil, - xEnterStart = nil, - yEnterStart = nil, - xEnterEnd = nil, - yEnterEnd = nil, - easeExit = nil, - xExit = nil, - yExit = nil, - xExitStart = nil, - yExitStart = nil, - xExitEnd = nil, - yExitEnd = nil -} - --- "Static" variables -local defaultPanelImage - -function transition:setProperties(__arguments) - if (defaultPanelImage == nil) then defaultPanelImage = Graphics.image.new(400,240, Graphics.kColorBlack) end - self.panelImage = __arguments.panelImage or self.defaultProperties.panelImage or defaultPanelImage - self.dither = __arguments.dither or self.defaultProperties.dither - self.x = __arguments.x or self.defaultProperties.x - self.y = __arguments.y or self.defaultProperties.y - - self.xEnter = __arguments.xEnter or self.defaultProperties.xEnter or self.x - self.yEnter = __arguments.yEnter or self.defaultProperties.yEnter or self.y - self.xEnterStart = __arguments.xEnterStart or self.defaultProperties.xEnterStart or self.xEnter - self.yEnterStart = __arguments.yEnterStart or self.defaultProperties.yEnterStart or self.yEnter - self.xEnterEnd = __arguments.xEnterEnd or self.defaultProperties.xEnterEnd or self.xEnter - self.yEnterEnd = __arguments.yEnterEnd or self.defaultProperties.yEnterEnd or self.yEnter - - self.xExit = __arguments.xExit or self.defaultProperties.xExit or self.x - self.yExit = __arguments.yExit or self.defaultProperties.yExit or self.y - self.xExitStart = __arguments.xExitStart or self.defaultProperties.xExitStart or self.xExit - self.yExitStart = __arguments.yExitStart or self.defaultProperties.yExitStart or self.yExit - self.xExitEnd = __arguments.xExitEnd or self.defaultProperties.xExitEnd or self.xExit - self.yExitEnd = __arguments.yExitEnd or self.defaultProperties.yExitEnd or self.yExit -end - -function transition:draw() - local progress = self.sequence:get() - self.panelImage:drawFaded(0, 0, progress, self.dither) - Graphics.setColor(Graphics.kColorClear) - if (not self.midpointReached) then - Graphics.fillCircleAtPoint( - math.lerp(self.xEnterStart, self.xEnterEnd, progress), - math.lerp(self.yEnterStart, self.yEnterEnd, progress), - (1 - progress) * 233 - ) - else - Graphics.fillCircleAtPoint( - math.lerp(self.xExitStart, self.xExitEnd, progress), - math.lerp(self.yExitStart, self.yExitEnd, progress), - (1 - progress) * 233 - ) - end - Graphics.setColor(Graphics.kColorBlack) -end \ No newline at end of file diff --git a/source/libraries/noble/modules/Noble.Transition/SpotlightMask.lua b/source/libraries/noble/modules/Noble.Transition/SpotlightMask.lua deleted file mode 100644 index 11b16f0..0000000 --- a/source/libraries/noble/modules/Noble.Transition/SpotlightMask.lua +++ /dev/null @@ -1,99 +0,0 @@ ---- --- @submodule Noble.Transition - -class("SpotlightMask", nil, Noble.Transition).extends(Noble.Transition) -local transition = Noble.Transition.SpotlightMask -transition.name = "Spotlight Mask" - --- Type -transition._type = Noble.Transition.Type.MIX - ---- A circle wipe transition. --- @see Noble.Transition.Spotlight.defaultProperties --- @table Noble.Transition.SpotlightMask.defaultProperties --- @tparam[opt=Ease.outQuad] Ease ease --- @number[opt=200] x --- @number[opt=120] y --- @number[opt=nil] xStart --- @number[opt=nil] yStart --- @number[opt=nil] xEnd --- @number[opt=nil] yEnd --- @bool[opt=false] invert -transition.defaultProperties = { - ease = Ease.outQuad, - x = 200, - y = 120, - xStart = nil, - yStart = nil, - xEnd = nil, - yEnd = nil, - invert = false -} - -function transition:setProperties(__arguments) - self.x = __arguments.x or self.defaultProperties.x - self.y = __arguments.y or self.defaultProperties.y - self.xStart = __arguments.xStart or self.defaultProperties.xStart or self.x - self.yStart = __arguments.yStart or self.defaultProperties.yStart or self.y - self.xEnd = __arguments.xEnd or self.defaultProperties.xEnd or self.x - self.yEnd = __arguments.yEnd or self.defaultProperties.yEnd or self.y - - self.invert = __arguments.invert or self.defaultProperties.invert - - if (self.invert) then - self.ease = Ease.reverse(self.ease) - end - - -- "Private" variables - self._maskBackground = nil - self._maskForegroundDrawMode = nil - if (self.invert ~= true) then - self._maskBackground = Graphics.image.new(400, 240, Graphics.kColorWhite) - self._maskForegroundDrawMode = Graphics.kDrawModeFillBlack - else - self._maskBackground = Graphics.image.new(400, 240, Graphics.kColorBlack) - self._maskForegroundDrawMode = Graphics.kDrawModeFillWhite - end - - self._startRadius = math.max( - Geometry.distanceToPoint(self.xStart, self.yStart, 0, 0), - Geometry.distanceToPoint(self.xStart, self.yStart, 400, 0), - Geometry.distanceToPoint(self.xStart, self.yStart, 400, 240), - Geometry.distanceToPoint(self.xStart, self.yStart, 0, 240) - ) - self._endRadius = math.max( - Geometry.distanceToPoint(self.xEnd, self.yEnd, 0, 0), - Geometry.distanceToPoint(self.xEnd, self.yEnd, 400, 0), - Geometry.distanceToPoint(self.xEnd, self.yEnd, 400, 240), - Geometry.distanceToPoint(self.xEnd, self.yEnd, 0, 240) - ) - -end - -function transition:draw() - local progress = self.sequence:get() - - if (not self.invert) then - self.oldSceneScreenshot:draw(0, 0) - Graphics.setColor(Graphics.kColorClear) - Graphics.fillCircleAtPoint( - math.lerp(self.xStart, self.xEnd, progress), - math.lerp(self.yStart, self.yEnd, progress), - progress * self._endRadius - ) - Graphics.setColor(Graphics.kColorBlack) - else - local mask = Graphics.image.new(400, 240, Graphics.kColorBlack) - Graphics.pushContext(mask) - Graphics.setColor(Graphics.kColorWhite) - Graphics.fillCircleAtPoint( - math.lerp(self.xStart, self.xEnd, progress), - math.lerp(self.yStart, self.yEnd, progress), - (1 - progress) * self._startRadius - ) - Graphics.popContext() - self.oldSceneScreenshot:setMaskImage(mask) - self.oldSceneScreenshot:draw(0, 0) - end - -end \ No newline at end of file diff --git a/source/libraries/noble/modules/Noble.Transition/WidgetSatchel.lua b/source/libraries/noble/modules/Noble.Transition/WidgetSatchel.lua deleted file mode 100644 index 66f8795..0000000 --- a/source/libraries/noble/modules/Noble.Transition/WidgetSatchel.lua +++ /dev/null @@ -1,73 +0,0 @@ ---- --- @submodule Noble.Transition - -class("WidgetSatchel", nil, Noble.Transition).extends(Noble.Transition) -local transition = Noble.Transition.WidgetSatchel -transition.name = "Widget Satchel" - --- Type -transition._type = Noble.Transition.Type.COVER - --- Overrides -transition._sequenceCompleteValue = 2 -transition.easeEnter = Ease.outCubic -transition.easeExit = Ease.inCubic - ---- An "accordion" transition, taken from "Widget Satchel" by Noble Robot. --- This transition has no properties. --- @table Noble.Transition.MetroNexus.defaultProperties - --- "Static" variables -local panels - -function transition:setProperties(__arguments) - - if (panels == nil) then - panels = { - Graphics.image.new(400,48, Graphics.kColorWhite), - Graphics.image.new(400,48, Graphics.kColorWhite), - Graphics.image.new(400,48, Graphics.kColorWhite), - Graphics.image.new(400,48, Graphics.kColorWhite), - Graphics.image.new(400,48, Graphics.kColorWhite) - } - Graphics.lockFocus(panels[1]) - Graphics.setDitherPattern(0.4, Graphics.image.kDitherTypeScreen) - Graphics.fillRect(0,0,400,48) - Graphics.lockFocus(panels[2]) - Graphics.setDitherPattern(0.7, Graphics.image.kDitherTypeScreen) - Graphics.fillRect(0,0,400,48) - Graphics.lockFocus(panels[3]) - Graphics.setDitherPattern(0.25, Graphics.image.kDitherTypeBayer8x8) - Graphics.fillRect(0,0,400,48) - Graphics.lockFocus(panels[4]) - Graphics.setDitherPattern(0.5, Graphics.image.kDitherTypeDiagonalLine) - Graphics.fillRect(0,0,400,48) - Graphics.lockFocus(panels[5]) - Graphics.setDitherPattern(0.8, Graphics.image.kDitherTypeHorizontalLine) - Graphics.fillRect(0,0,400,48) - Graphics.unlockFocus() - end - - -- Warnings - if (__arguments.easeEnter or __arguments.easeEnter or __arguments.ease) then - warn("BONK: 'Noble.Transition.WidgetSatchel' does not support custom ease values.") - end - -end - -function transition:draw() - local progress = self.sequence:get() - if (not self.midpointReached ) then - panels[1]:draw(0, -48 + (progress * (48*1)) ) - panels[2]:draw(0, -48 + (progress * (48*2)) ) - panels[3]:draw(0, -48 + (progress * (48*3)) ) - panels[4]:draw(0, -48 + (progress * (48*4)) ) - panels[5]:draw(0, -48 + (progress * (48*5)) ) - else - panels[1]:draw(0, 48*0 + (progress - 1) * 48*5) - panels[2]:draw(0, 48*1 + (progress - 1) * 48*4) - panels[3]:draw(0, 48*2 + (progress - 1) * 48*3) - panels[4]:draw(0, 48*3 + (progress - 1) * 48*2) - panels[5]:draw(0, 48*4 + (progress - 1) * 48*1) - end -end \ No newline at end of file diff --git a/source/libraries/noble/modules/NobleScene.lua b/source/libraries/noble/modules/NobleScene.lua deleted file mode 100644 index 48536de..0000000 --- a/source/libraries/noble/modules/NobleScene.lua +++ /dev/null @@ -1,242 +0,0 @@ ---- --- An abstract scene class. --- Do not copy this file as a template for your scenes. Instead, your scenes will extend this class. --- See
    templates/SceneTemplate.lua for a blank scene that you can copy and modify for your own scenes. --- If you are using NobleEngine-ProjectTemplate, --- see `scenes/ExampleScene.lua` for an implementation example. --- @usage --- YourSceneName = {} --- class("YourSceneName").extends(NobleScene) --- local scene = YourSceneName --- --- @classmod NobleScene --- - -NobleScene = {} -class("NobleScene").extends(Object) - ---- Properties --- @section properties - ---- The name of this scene. Optional. --- If you do not set this value, it will take on the scene's `className`. -NobleScene.name = "" - ---- This is the background color of this scene. --- -NobleScene.backgroundColor = Graphics.kColorWhite - ---- Tables --- @section tables - ---- All scenes have a default inputHandler which is made active when the scene starts. --- If you do not define your scene's `inputHandler`, it is `nil` and input is disabled when this scene --- starts. --- @see Noble.Input.setHandler --- --- @usage --- YourSceneName.inputHandler = { --- AButtonDown = function() --- // Your code here --- end, --- AButtonHold = function() --- // Your code here --- end, --- -- ... --- -- ... --- } --- -- OR... --- -- Use a non-scene-specific inputHandler, defined elsewhere. --- YourSceneName.inputHandler = somePreviouslyDefinedInputHandler --- -- OR... --- -- Reuse another scene's inputHandler. --- YourSceneName.inputHandler = SomeOtherSceneName.inputHandler -NobleScene.inputHandler = {} - ---- When you add a sprite to your scene, it is put in this table so the scene can keep track of it. --- --- This is intended as `read-only`. You should not modify this table directly. --- @see addSprite -NobleScene.sprites = {} - ---- Methods --- @section Methods - ---- Use this to add sprites to your scene instead of `playdate.graphics.sprite:add()`. --- --- If your sprite is a `NobleSprite`, using `NobleSprite:add()` will also call this method. --- --- Sprites added with this method that are tracked by the scene. Any not manually removed before transitioning to another scene are automatically removed in @{finish|finish}. --- @tparam playdate.graphics.sprite __sprite The sprite to add to the scene. --- @see NobleSprite:add --- @see removeSprite -function NobleScene:addSprite(__sprite) - if (__sprite.isNobleSprite == true) then - __sprite:superAdd() - else - __sprite:add() - end - - if (table.indexOfElement(self.sprites, __sprite) == nil) then - table.insert(self.sprites, __sprite) - end -end - ---- Use this to remove sprites from your scene instead of `playdate.graphics.sprite:remove()`. --- --- If your sprite is a `NobleSprite`, using `NobleSprite:remove()` will also call this method. --- --- Sprites not manually removed before transitioning to another scene are automatically removed in @{finish|finish}. --- @tparam playdate.graphics.sprite __sprite The sprite to add to the scene. --- @see NobleSprite:remove --- @see addSprite -function NobleScene:removeSprite(__sprite) - if (__sprite.isNobleSprite == true) then - __sprite:superRemove() - else - __sprite:remove() - end - - if (table.indexOfElement(self.sprites, __sprite) ~= nil) then - table.remove(self.sprites, table.indexOfElement(self.sprites, __sprite)) - end -end - ---- Callbacks --- @section callbacks - ---- Implement this in your scene if you have code to run when your scene's object is created. --- --- @usage --- function YourSceneName:init() --- YourSceneName.super.init(self) --- --[Your code here]-- --- end --- -function NobleScene:init() - self.name = self.className - self.sprites = {} -end - ---- Implement if you want to run code as the transition to this scene begins, such as UI animation, triggers, etc. --- --- @usage --- function YourSceneName:enter() --- YourSceneName.super.enter(self) --- --[Your code here]-- --- end --- -function NobleScene:enter() end - ---- Implement if you have code to run once the transition to this scene is complete. This method signifies the full activation of a scene. If this scene's `inputHandler` is defined, it is enabled now. --- @see inputHandler --- @usage --- function YourSceneName:start() --- YourSceneName.super.start(self) --- --[Your code here]-- --- end --- -function NobleScene:start() - Noble.Input.setHandler(self.inputHandler) -end - ---- Implement to run scene-specific code on every frame while this scene is active. --- NOTE: you may use coroutine.yield() here, because it only runs inside of playdate.update(), which is a coroutine. --- --- @usage --- function YourSceneName:update() --- YourSceneName.super.update(self) --- --[Your code here]-- --- end --- -function NobleScene:update() end - ---- Implement this function to draw background visual elements in your scene. ---- This runs when the engine need to redraw a background area. ---- By default it runs every frame and fills the background with self.backgroundColor. All arguments are optional. ---- Use `Graphics.sprite.setAlwaysRedraw(false)` after `Noble.new()` to optimize partial redraw. --- --- @usage --- function YourSceneName:drawBackground(__x, __y, __width, __height) --- YourSceneName.super.drawBackground(self) -- optional, invokes default behavior. --- --[Your code here]-- --- end --- -function NobleScene:drawBackground(__x, __y, __width, __height) - __x = __x or 0 - __y = __y or 0 - __width = __width or Display.getWidth() - __height = __height or Display.getHeight() - - -- Cache the currently set color/pattern. - local color = Graphics.getColor() - local color_type = type(color) - - -- Draw background. - Graphics.setColor(self.backgroundColor) - Graphics.fillRect(__x, __y, __width, __height) - - -- Reset color/pattern from cache. - if color_type == 'number' then - Graphics.setColor(color) - elseif color_type == 'table' then - Graphics.setPattern(color) - end -end - ---- Implement this in your scene if you have "goodbye" code to run when a transition to another scene --- begins, such as UI animation, saving to disk, etc. --- --- @usage --- function YourSceneName:exit() --- YourSceneName.super.exit(self) --- --[Your code here]-- --- end --- -function NobleScene:exit() - for _, sprite in ipairs(self.sprites) do - sprite:setUpdatesEnabled(false) - sprite:setCollisionsEnabled(false) - end -end - ---- Implement this in your scene if you have code to run when a transition to another scene --- is complete, such as resetting variables. --- --- @usage --- function YourSceneName:finish() --- YourSceneName.super.finish(self) --- --[Your code here]-- --- end --- -function NobleScene:finish() - for _, sprite in ipairs(self.sprites) do - if (sprite.isNobleSprite) then - sprite:superRemove() - else - sprite:remove() - end - end -end - ---- `pause()` / `resume()` --- --- Implement one or both of these in your scene if you want something to happen when the game is paused/unpaused --- by the system. The Playdate SDK does not require you to write pause logic, but these are useful if you want a --- custom menu image (see Playdate SDK for more details), want to obscure game elements to prevent players from --- cheating in a time-sensitive game, want to count the number of times the player pauses the game, etc. --- --- @usage --- function YourSceneName:pause() --- YourSceneName.super.pause(self) --- --[Your code here]-- --- end -function NobleScene:pause() end - ---- --- @usage --- function YourSceneName:resume() --- YourSceneName.super.resume(self) --- --[Your code here]-- --- end -function NobleScene:resume() end \ No newline at end of file diff --git a/source/libraries/noble/modules/NobleSprite.lua b/source/libraries/noble/modules/NobleSprite.lua deleted file mode 100644 index aad6d31..0000000 --- a/source/libraries/noble/modules/NobleSprite.lua +++ /dev/null @@ -1,149 +0,0 @@ ---- --- An extension of Playdate's sprite object, incorporating `Noble.Animation` and other Noble Engine features. --- Use this in place of `playdate.graphics.sprite` in most cases. --- --- `NobleSprite` is a child class of `playdate.graphics.sprite`, so see the Playdate SDK documentation for additional methods and properties. --- --- @classmod NobleSprite --- - -NobleSprite = {} -class("NobleSprite").extends(Graphics.sprite) - ---- Do not call an "init" method directly. Use `NobleSprite()` (see usage examples). --- @string[opt] __view This can be: the path to an image or spritesheet image file, an image object (`Graphics.image`) or an animation object (`Noble.Animation`) --- @bool[opt=false] __viewIsSpritesheet Set this to `true` to indicate that `__view` is a spritesheet. Will only be considered if `__view` is a string path to an image. --- @bool[opt=false] __singleState If this sprite has just one animation, set this to true. It saves you from having to use Noble.Animation.addState() --- @bool[opt=true] __singleStateLoop If using a single state animation, should it loop? --- --- @usage --- -- Provide a spritesheet image file to create a new `Noble.Animation` for a NobleSprite's view. --- myNobleSprite = NobleSprite("path/to/spritesheet", true) --- --- @usage --- -- Provide an image file to create a new `Graphics.image` for a NobleSprite's view. --- myNobleSprite = NobleSprite("path/to/image") --- --- @usage --- -- Use an existing `Noble.Animation` for a NobleSprite's view. --- local myAnimation = Noble.Animation.new("path/to/spritesheet") --- myAnimation:addState("default", 1, animation.imageTable:getLength(), nil, true) --- myNobleSprite = NobleSprite(myAnimation) --- --- @usage --- -- Use an existing `Graphics.image` object for a NobleSprite's view. --- local myImage = Graphics.image.new("path/to/image") --- myNobleSprite = NobleSprite(myImage) --- --- @usage --- -- Extending NobleSprite. --- --- -- MyCustomSprite.lua --- MyCustomSprite = {} --- class("MyCustomSprite").extends(NobleSprite) --- --- function MyCustomSprite:init(__x, __y, __anotherFunArgument) --- MyCustomSprite.super.init(self, "path/to/spritesheet", true) --- -- Etc. etc. --- end --- --- -- MyNobleScene.lua --- myNobleSprite = MyCustomSprite(100, 100, "Fun!") --- --- @see Noble.Animation:addState --- @see Noble.Animation.new --- -function NobleSprite:init(__view, __viewIsSpritesheet, __singleState, __singleStateLoop) - NobleSprite.super.init(self) - self.isNobleSprite = true -- This is important so other methods don't confuse this for a playdate.graphics.sprite. DO NOT modify this value at runtime. - if (__view ~= nil) then - -- __view is the path to an image or spritesheet file. - if (type(__view) == "string") then - self.animated = __viewIsSpritesheet -- NO NOT modify self.animated at runtime. - - if (__viewIsSpritesheet == true) then - -- Create a new Noble.Animation object. - - --- The animation for this NobleSprite. - -- @see Noble.Animation.new - self.animation = Noble.Animation.new(__view) - - local singleStateLoop = true - if (__singleStateLoop ~= nil) then singleStateLoop = __singleStateLoop end - - if (__singleState == true) then - self.animation:addState("default", 1, self.animation.imageTable:getLength(), nil, singleStateLoop) - end - else - -- Create a new Graphics.image object. - self:setImage(Graphics.image.new(__view)) - end - - -- __view is an existing Graphics.image object. - elseif (type(__view) == "userdata") then - self.animated = false - self:setImage(__view) - - -- __view is an existing Noble.Animation object. - elseif (type(__view) == "table") then - self.animated = true - self.animation = __view - end - end -end - -function NobleSprite:draw() - if (self.animation ~= nil) then - self.animation:draw() - self:markDirty() - end -end - ---- This will enable the update loop for this NobleSprite, which also causes its Noble.Animation to play. -function NobleSprite:play() - self:setUpdatesEnabled(true) -end - ---- This will disable the update loop for this NobleSprite, which also causes its Noble.Animation to pause. -function NobleSprite:pause() - self:setUpdatesEnabled(false) -end - ---- This will disable the update loop for this NobleSprite, and also reset its Noble.Animation (if it exists) to the first frame of its current state. -function NobleSprite:stop() - self:setUpdatesEnabled(false) - if (self.animation ~= nil) then - self.animation.currentFrame = self.animation.current.startFrame - end -end - ---- Use this to add this NobleSprite to your scene. This replaces `playdate.graphics.sprite:add()` to allow NobleSprites to be tracked by the current NobleScene. --- --- To add a `playdate.graphics.sprite` to a scene, use `NobleScene:addSprite(__sprite)`. --- @see NobleScene:addSprite -function NobleSprite:add(__x, __y) - local x = __x or 0 - local y = __y or 0 - self:moveTo(x, y) - Noble.currentScene():addSprite(self) -end - -function NobleSprite:superAdd() - NobleSprite.super.add(self) -end - ---- Use this to remove this NobleSprite from your scene. This replaces `playdate.graphics.sprite:remove()` to allow NobleSprites to be tracked by the current NobleScene. --- --- To remove a `playdate.graphics.sprite` from a scene, use `NobleScene:removeSprite(__sprite)`. --- @see NobleScene:removeSprite -function NobleSprite:remove() - if (self.animation ~= nil) then - self:stop() - self:setUpdatesEnabled(true) -- reset! - end - Noble.currentScene():removeSprite(self) -end - -function NobleSprite:superRemove() - NobleSprite.super.remove(self) -end diff --git a/source/libraries/noble/templates/SceneTemplate.lua b/source/libraries/noble/templates/SceneTemplate.lua deleted file mode 100644 index 5bb25c8..0000000 --- a/source/libraries/noble/templates/SceneTemplate.lua +++ /dev/null @@ -1,185 +0,0 @@ --- --- SceneTemplate.lua --- --- Use this as a starting point for your game's scenes. --- Copy this file to your root "scenes" directory, --- and rename it. --- - --- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --- !!! Rename "SceneTemplate" to your scene's name in these first three lines. !!! --- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - -SceneTemplate = {} -class("SceneTemplate").extends(NobleScene) -local scene = SceneTemplate - --- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - --- It is recommended that you declare, but don't yet define, --- your scene-specific varibles and methods here. Use "local" where possible. --- --- local variable1 = nil -- local variable --- scene.variable2 = nil -- Scene variable. --- When accessed outside this file use `SceneTemplate.variable2`. --- ... --- - --- This is the background color of this scene. -scene.backgroundColor = Graphics.kColorWhite - --- This runs when your scene's object is created, which is the --- first thing that happens when transitining away from another scene. -function scene:init() - scene.super.init(self) - - -- variable1 = 100 - -- SceneTemplate.variable2 = "string" - -- ... - - -- Your code here -end - --- When transitioning from another scene, this runs as soon as this --- scene needs to be visible (this moment depends on which transition type is used). -function scene:enter() - scene.super.enter(self) - -- Your code here -end - --- This runs once a transition from another scene is complete. -function scene:start() - scene.super.start(self) - -- Your code here -end - --- This runs once per frame. -function scene:update() - scene.super.update(self) - -- Your code here -end - --- This runs once per frame, and is meant for drawing code. -function scene:drawBackground() - scene.super.drawBackground(self) - -- Your code here -end - --- This runs as as soon as a transition to another scene begins. -function scene:exit() - scene.super.exit(self) - -- Your code here -end - --- This runs once a transition to another scene completes. -function scene:finish() - scene.super.finish(self) - -- Your code here -end - -function scene:pause() - scene.super.pause(self) - -- Your code here -end -function scene:resume() - scene.super.resume(self) - -- Your code here -end - --- Define the inputHander for this scene here, or use a previously defined inputHandler. - --- scene.inputHandler = someOtherInputHandler --- OR -scene.inputHandler = { - - -- A button - -- - AButtonDown = function() -- Runs once when button is pressed. - -- Your code here - end, - AButtonHold = function() -- Runs every frame while the player is holding button down. - -- Your code here - end, - AButtonHeld = function() -- Runs after button is held for 1 second. - -- Your code here - end, - AButtonUp = function() -- Runs once when button is released. - -- Your code here - end, - - -- B button - -- - BButtonDown = function() - -- Your code here - end, - BButtonHeld = function() - -- Your code here - end, - BButtonHold = function() - -- Your code here - end, - BButtonUp = function() - -- Your code here - end, - - -- D-pad left - -- - leftButtonDown = function() - -- Your code here - end, - leftButtonHold = function() - -- Your code here - end, - leftButtonUp = function() - -- Your code here - end, - - -- D-pad right - -- - rightButtonDown = function() - -- Your code here - end, - rightButtonHold = function() - -- Your code here - end, - rightButtonUp = function() - -- Your code here - end, - - -- D-pad up - -- - upButtonDown = function() - -- Your code here - end, - upButtonHold = function() - -- Your code here - end, - upButtonUp = function() - -- Your code here - end, - - -- D-pad down - -- - downButtonDown = function() - -- Your code here - end, - downButtonHold = function() - -- Your code here - end, - downButtonUp = function() - -- Your code here - end, - - -- Crank - -- - cranked = function(change, acceleratedChange) -- Runs when the crank is rotated. See Playdate SDK documentation for details. - -- Your code here - end, - crankDocked = function() -- Runs once when when crank is docked. - -- Your code here - end, - crankUndocked = function() -- Runs once when when crank is undocked. - -- Your code here - end -} diff --git a/source/libraries/noble/utilities/Ease.lua b/source/libraries/noble/utilities/Ease.lua deleted file mode 100644 index b256893..0000000 --- a/source/libraries/noble/utilities/Ease.lua +++ /dev/null @@ -1,81 +0,0 @@ ---- Extensions to `playdate.easingFunctions`, aliased as `Ease` in Noble Engine. --- See the Playdate SDK for a list of easing functions. --- @module Ease - -local componentFunctions = { - [Ease.inOutQuad] = { enter = Ease.inQuad, exit = Ease.outQuad }, - [Ease.inOutCubic] = { enter = Ease.inCubic, exit = Ease.outCubic }, - [Ease.inOutQuart] = { enter = Ease.inQuart, exit = Ease.outQuart }, - [Ease.inOutQuint] = { enter = Ease.inQuint, exit = Ease.outQuint }, - [Ease.inOutSine] = { enter = Ease.inSine, exit = Ease.outSine }, - [Ease.inOutExpo] = { enter = Ease.inExpo, exit = Ease.outExpo }, - [Ease.inOutCirc] = { enter = Ease.inCirc, exit = Ease.outCirc }, - [Ease.inOutElastic] = { enter = Ease.inElastic, exit = Ease.outElastic }, - [Ease.inOutBack] = { enter = Ease.inBack, exit = Ease.outBack }, - [Ease.inOutBounce] = { enter = Ease.inBounce, exit = Ease.outBounce }, - [Ease.outInQuad] = { enter = Ease.outQuad, exit = Ease.inQuad }, - [Ease.outInCubic] = { enter = Ease.outCubic, exit = Ease.inCubic }, - [Ease.outInQuart] = { enter = Ease.outQuart, exit = Ease.inQuart }, - [Ease.outInQuint] = { enter = Ease.outQuint, exit = Ease.inQuint }, - [Ease.outInSine] = { enter = Ease.outSine, exit = Ease.inSine }, - [Ease.outInExpo] = { enter = Ease.outExpo, exit = Ease.inExpo }, - [Ease.outInCirc] = { enter = Ease.outCirc, exit = Ease.inCirc }, - [Ease.outInElastic] = { enter = Ease.outElastic, exit = Ease.inElastic }, - [Ease.outInBack] = { enter = Ease.outBack, exit = Ease.inBack }, - [Ease.outInBounce] = { enter = Ease.outBounce, exit = Ease.inBounce }, - [Ease.linear] = { enter = Ease.linear, exit = Ease.linear } -} - -local reverseFunctions = { - [Ease.inQuad] = Ease.outQuad, - [Ease.inCubic] = Ease.outCubic, - [Ease.inQuart] = Ease.outQuart, - [Ease.inQuint] = Ease.outQuint, - [Ease.inSine] = Ease.outSine, - [Ease.inExpo] = Ease.outExpo, - [Ease.inCirc] = Ease.outCirc, - [Ease.inElastic] = Ease.outElastic, - [Ease.inBack] = Ease.outBack, - [Ease.inBounce] = Ease.outBounce, - [Ease.outQuad] = Ease.inQuad, - [Ease.outCubic] = Ease.inCubic, - [Ease.outQuart] = Ease.inQuart, - [Ease.outQuint] = Ease.inQuint, - [Ease.outSine] = Ease.inSine, - [Ease.outExpo] = Ease.inExpo, - [Ease.outCirc] = Ease.inCirc, - [Ease.outElastic] = Ease.inElastic, - [Ease.outBack] = Ease.inBack, - [Ease.outBounce] = Ease.inBounce, - [Ease.linear] = Ease.linear -} - ---- Returns the first half of an "inOut" or "outIn" easing function. --- Returns `nil` for any easing function that isn't in the form of `Ease.inOutXxxx` or `Ease.outInXxxx`. `Ease.linear` returns itself. --- @usage --- local ease = Ease.outInQuad --- local easeEnter = Ease.enter(ease) -- Returns "Ease.outQuad" -function Ease.enter(__easingFunction) - if (componentFunctions[__easingFunction] == nil) then return nil end - return componentFunctions[__easingFunction].enter -end - ---- Returns the second half of an "inOut" or "outIn" easing function. --- Returns `nil` for any easing function that isn't in the form of `Ease.inOutXxxx` or `Ease.outInXxxx`. `Ease.linear` returns itself. --- @usage --- local ease = Ease.outInQuad --- local easeExit = Ease.exit(ease) -- Returns "Ease.inQuad" -function Ease.exit(__easingFunction) - if (componentFunctions[__easingFunction] == nil) then return nil end - return componentFunctions[__easingFunction].exit -end - ---- Returns the reverse function of the provided function. --- Returns `nil` for any easing function that isn't in the form of `Ease.inXxxx` or `Ease.outXxxx`. `Ease.linear` returns itself. --- @usage --- local ease = Ease.inQuad --- local reverseEase = Ease.reverse(ease) -- Returns "Ease.outQuad" -function Ease.reverse(__easingFunction) - if (reverseFunctions[__easingFunction] == nil) then return nil end - return reverseFunctions[__easingFunction] -end \ No newline at end of file diff --git a/source/libraries/noble/utilities/Utilities.lua b/source/libraries/noble/utilities/Utilities.lua deleted file mode 100644 index 1fc871d..0000000 --- a/source/libraries/noble/utilities/Utilities.lua +++ /dev/null @@ -1,197 +0,0 @@ --- --- Utilities.lua --- --- Useful helper functions and API extensions. --- Place your own utilities in "utilities/Utilities.lua" --- - -Utilities = {} - -function Utilities.copy(obj, seen) - if type(obj) ~= 'table' then return obj end - if seen and seen[obj] then return seen[obj] end - local s = seen or {} - local res = setmetatable({}, getmetatable(obj)) - s[obj] = res - for k, v in pairs(obj) do res[Utilities.copy(k, s)] = Utilities.copy(v, s) end - return res -end - -function Utilities.isNull(__object) - return __object == nil or __object == '' -end -function Utilities.isNotNull(__object) - return __object ~= nil and __object ~= '' -end - -function Utilities.startsWith(__string, __start) - return __string:sub(1, #__start) == __start -end - -function Utilities.endsWith(__string, __ending) - return __ending == "" or __string:sub(-#__ending) == __ending -end - -function Utilities.handleOptionalBoolean(__argument, __default) - if (__argument == nil) then - return __default - elseif (__argument == true or __argument == false) then - return __argument - else - error("BONK: You shouldn’t pass non-boolean value as a boolean parameter.") - return __argument - end -end - -Utilities.varName = {} -setmetatable( - Utilities.varName, - { - __index = function(self, __key, __value) - return string.format('%s', __key) - end - } -) - - -function Utilities.getHypotenuse(__x,__y) - return math.sqrt((__x*__x)+(__y*__y)) -end - -function Utilities.average(__a, __b) - return (__a + __b) / 2 -end - -function Utilities.screenshot() - return Graphics.getDisplayImage() -end - -function Utilities.autoTable(__numberOfDimensions) - local metatable = {}; - for i = 1, __numberOfDimensions do - metatable[i] = { - __index = function(__table, __key) - if i < __numberOfDimensions then - __table[__key] = setmetatable({}, metatable[i+1]) - return __table[__key]; - end - end - } - end - return setmetatable({}, metatable[1]); -end - -function Utilities.newUUID() - local func = function(x) - local random = math.random(16) - 1 - random = (x == "x") and (random + 1) or (random % 4) + 9 - return ("0123456789abcdef"):sub(random, random) - end - return (("xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx"):gsub("[xy]", func)) -end - - --- New math methods --- - -function math.clamp(__value, __min, __max) - if (__min > __max) then - __min, __max = __max, __min - end - return math.max(__min, math.min(__max, __value)) -end - -function math.ring(__value, __min, __max) - if (__min > __max) then - __min, __max = __max, __min - end - return __min + (__value - __min) % (__max - __min) -end - -function math.ringInt(__value, __min, __max) - return math.ring(__value, __min, __max + 1) -end - -function math.approach(_value, __target, __step) - if (_value == __target) then - return _value, true - end - local d = __target - _value - if (d > 0) then - _value = _value + __step - if (_value >= __target) then - return __target, true - else - return _value, false - end - elseif (d < 0) then - _value = _value - __step - if (_value <= __target) then - return __target, true - else - return _value, false - end - else - return _value, true - end -end - -function math.infiniteApproach(at_zero, at_infinite, x_halfway, x) - return at_infinite - (at_infinite - at_zero) * 0.5 ^ (x / x_halfway) -end - -function math.round(__value, __bracket) - local bracket = __bracket or 1 - return math.floor(__value/bracket + math.sign(__value) * 0.5) * bracket -end - -function math.sign(__value) - return (__value >= 0 and 1) or -1 -end - -function math.lerp(a, b, t) - return a + (b - a) * t -end - --- New array/table methods --- - -function table.merge(__table1, __table2) - local mergedTable = {} - for k,v in pairs(__table1) do - mergedTable[k] = v - end - for k,v in pairs(__table2) do - mergedTable[k] = v - end - return mergedTable -end - -function table.random(__table) - if (type(__table) ~= "table") then return nil end - return __table[math.ceil(math.random(#__table))] -end -function table.each(__table, __function) - if (type(__function) ~= "function") then return end - for _, e in pairs(__table) do - __function(e) - end -end - -function table.filter(__table, __filter) - local out = {} - for _, value in pairs(__table) do - --if filterIter(v, k, table) then out[k] = v end - if (__filter(value)) then - __table.insert (out,value) - end - end - - return out -end - -function table.getSize(__table) - local count = 0 - for _, _ in pairs(__table) do count += 1 end - return count -end diff --git a/source/main.lua b/source/main.lua index 77eb6b9..eb05d82 100644 --- a/source/main.lua +++ b/source/main.lua @@ -100,19 +100,20 @@ Difficulty = { DifficultySettings = { [Difficulty.Easy] = { - assebleTime = 2500, + assebleTime = 1700, }, [Difficulty.Medium] = { - assebleTime = 1500, + assebleTime = 1000, }, [Difficulty.Hard] = { - assebleTime = 800, + assebleTime = 500, } } Noble.Settings.setup({ difficulty = Difficulty.Medium, - music = true + music = true, + debug = true }) Noble.GameData.setup({ diff --git a/source/scenes/Menu.lua b/source/scenes/Menu.lua index bbfa40e..d99b8ee 100644 --- a/source/scenes/Menu.lua +++ b/source/scenes/Menu.lua @@ -113,7 +113,15 @@ end function scene:setupMenu(__menu) __menu:addItem("Start", function() Noble.transition(DroneCardSelector, nil, Noble.Transition.DipToWhite) end) - __menu:addItem("Tutorial", function() return end) + __menu:addItem("Tutorial", function() + local debug = Noble.Settings.get("debug") + if debug then + Noble.Settings.set("debug", false) + else + Noble.Settings.set("debug", true) + end + return + end) __menu:addItem("Credits", function() return end) __menu:select("Start") end diff --git a/source/scripts/player.lua b/source/scripts/player.lua index 3c8ba37..5ed7e62 100644 --- a/source/scripts/player.lua +++ b/source/scripts/player.lua @@ -53,8 +53,12 @@ function Player:init(x, y) Player.bat = Player.fullBat Player.dischargeRate = 1 Player.moveRight = false + Player.moveLeft = false -- TODO: refactor to use a single variable self.lastDirection = nil self.targetDone = false + + + self.debug = Noble.Settings.get("debug") end function Player:handleInput() @@ -68,6 +72,7 @@ function Player:handleInput() if not playdate.buttonIsPressed(playdate.kButtonLeft) and not playdate.buttonIsPressed(playdate.kButtonRight) then self.xVelocity = self.xVelocity * self.friction Player.moveRight = false + Player.moveLeft = false self.animation:setState("down") end @@ -78,6 +83,8 @@ function Player:handleInput() end self:changeToRunState("left") self.lastDirection = "left" + Player.moveLeft = true + Player.moveRight = false self.xVelocity = self.xVelocity - self.acceleration elseif playdate.buttonIsPressed(playdate.kButtonRight) then if self.lastDirection == "left" then @@ -85,6 +92,7 @@ function Player:handleInput() end self:changeToRunState("right") Player.moveRight = true + Player.moveLeft = false self.lastDirection = "right" self.xVelocity = self.xVelocity + self.acceleration end @@ -95,10 +103,12 @@ function Player:handleInput() -- Y velocity if crankChange ~= 0 then - if crankChange > 0 then - self.animation:setState("up") - else - self.animation:setState("down") + if Player.moveRight == false and Player.moveLeft == false then + if crankChange > 0 then + self.animation:setState("up") + else + self.animation:setState("down") + end end self.yInertia = self.yInertia - (acceleratedChange * 0.007) else @@ -173,6 +183,9 @@ function Player:handleMovementAndCollisions() self:boom() return elseif collisionTag == 154 then -- Baleba + if self.debug then + return + end self:boom(collisionObject) return elseif collisionTag == 2 then -- Tank