@@ -48,6 +48,8 @@ export default function litecanvas(settings = {}) {
4848
4949 let /** @type {boolean } */
5050 _initialized = false ,
51+ /** @type {boolean } */
52+ _paused = true ,
5153 /** @type {HTMLCanvasElement } _canvas */
5254 _canvas ,
5355 /** @type {number } */
@@ -1056,6 +1058,7 @@ export default function litecanvas(settings = {}) {
10561058 'string' === typeof eventName ,
10571059 '[litecanvas] emit() 1st param must be a string'
10581060 )
1061+
10591062 if ( _initialized ) {
10601063 eventName = lowerCase ( eventName )
10611064
@@ -1156,7 +1159,7 @@ export default function litecanvas(settings = {}) {
11561159 } ,
11571160
11581161 /**
1159- * Returns information about that engine instance.
1162+ * Returns information about the engine instance.
11601163 *
11611164 * @param {number|string } index
11621165 * @returns {any }
@@ -1190,8 +1193,10 @@ export default function litecanvas(settings = {}) {
11901193 _rngSeed ,
11911194 // 10
11921195 _fontSize ,
1193- // 11
1196+ // 11
11941197 _fontFamily ,
1198+ // 12
1199+ _colorPaletteState ,
11951200 ]
11961201
11971202 const data = { index, value : internals [ index ] }
@@ -1202,49 +1207,24 @@ export default function litecanvas(settings = {}) {
12021207 return data . value
12031208 } ,
12041209
1205- /**
1206- * Stops the litecanvas instance and remove all event listeners.
1207- */
1208- quit ( ) {
1209- // stop the game loop (update & draw)
1210- instance . pause ( )
1211-
1212- // emit "quit" event to manual clean ups
1213- instance . emit ( 'quit' )
1214-
1215- // clear all engine event listeners
1216- _eventListeners = { }
1217-
1218- // clear all browser event listeners
1219- for ( const removeListener of _browserEventListeners ) {
1220- removeListener ( )
1221- }
1222-
1223- // maybe clear global context
1224- if ( settings . global ) {
1225- for ( const key in instance ) {
1226- delete root [ key ]
1227- }
1228- delete root . ENGINE
1229- }
1230-
1231- // unset that flag
1232- _initialized = false
1233- } ,
1234-
12351210 /**
12361211 * Pauses the engine loop (update & draw).
12371212 */
12381213 pause ( ) {
1214+ _paused = true
12391215 cancelAnimationFrame ( _rafid )
1240- _rafid = 0
12411216 } ,
12421217
12431218 /**
12441219 * Resumes (if paused) the engine loop.
12451220 */
12461221 resume ( ) {
1247- if ( _initialized && ! _rafid ) {
1222+ DEV: assert (
1223+ _initialized ,
1224+ '[litecanvas] resume() cannot be called before the "init" event and neither after the quit() function'
1225+ )
1226+ if ( _initialized && _paused ) {
1227+ _paused = false
12481228 _accumulated = _fpsInterval
12491229 _lastFrameTime = Date . now ( )
12501230 _rafid = raf ( drawFrame )
@@ -1257,7 +1237,37 @@ export default function litecanvas(settings = {}) {
12571237 * @returns {boolean }
12581238 */
12591239 paused ( ) {
1260- return ! _rafid
1240+ return _paused
1241+ } ,
1242+
1243+ /**
1244+ * Shutdown the litecanvas instance and remove all event listeners.
1245+ */
1246+ quit ( ) {
1247+ // emit "quit" event to manual clean ups
1248+ instance . emit ( 'quit' )
1249+
1250+ // stop the game loop (update & draw)
1251+ instance . pause ( )
1252+
1253+ // deinitialize the engine
1254+ _initialized = false
1255+
1256+ // clear all engine event listeners
1257+ _eventListeners = { }
1258+
1259+ // clear all browser event listeners
1260+ for ( const removeListener of _browserEventListeners ) {
1261+ removeListener ( )
1262+ }
1263+
1264+ // maybe clear global context
1265+ if ( settings . global ) {
1266+ for ( const key in instance ) {
1267+ delete root [ key ]
1268+ }
1269+ delete root . ENGINE
1270+ }
12611271 } ,
12621272 }
12631273
@@ -1655,6 +1665,8 @@ export default function litecanvas(settings = {}) {
16551665 // trigger "resized" event
16561666 // note: not triggered before the "init" event
16571667 instance . emit ( 'resized' , _scale )
1668+
1669+ DEV: console . warn ( '[litecanvas] quit() terminated a Litecanvas instance.' )
16581670 }
16591671
16601672 /**
@@ -1711,9 +1723,11 @@ export default function litecanvas(settings = {}) {
17111723 setupCanvas ( )
17121724
17131725 if ( 'loading' === document . readyState ) {
1714- on ( root , 'DOMContentLoaded' , ( ) => raf ( init ) )
1726+ on ( root , 'DOMContentLoaded' , ( ) => {
1727+ raf ( init )
1728+ } )
17151729 } else {
1716- raf ( init )
1730+ _rafid = raf ( init )
17171731 }
17181732
17191733 return instance
0 commit comments