8
8
import GameData from "./GameData.js" ;
9
9
10
10
/*----- Classes --------------------------------------------------------------*/
11
- /** @module Renderer - Superclass for managing game view. */
11
+ /** @module Renderer Superclass for managing game view. */
12
12
export default class Renderer {
13
13
/**
14
14
* Initialize base rendering functions.
15
- * @arg {GameData} model - A game model instance.
15
+ * @arg {GameData} model A game model instance.
16
16
*/
17
17
constructor ( model ) {
18
- /** @var {GameData} model - Reference to the game's model. */
18
+ /** @var {GameData} model Reference to the game's model. */
19
19
this . model = model ;
20
+ /** @var {boolean} running Should the renderer continue running? */
21
+ this . running = true ;
20
22
}
21
23
22
24
/*---- Setters and getters -------------------------------------------------*/
@@ -29,12 +31,12 @@ export default class Renderer {
29
31
/*----- Methods ------------------------------------------------------------*/
30
32
/**
31
33
* Sets the view container
32
- * @arg {HTMLElement} el - Element to set as view container.
34
+ * @arg {HTMLElement} el Element to set as view container.
33
35
*/
34
36
setContainer ( el ) {
35
37
el . id = `gravity-${ this . model . id } ` ;
36
38
el . classList . add ( "gravity" ) ;
37
- /** @var {HTMLElement} container - DOM Element holding all game views. */
39
+ /** @var {HTMLElement} container DOM Element holding all game views. */
38
40
this . container = el ;
39
41
}
40
42
/**
@@ -44,4 +46,9 @@ export default class Renderer {
44
46
render ( ) {
45
47
throw new Error ( "Renderer#render() must be implemented by subclass!" ) ;
46
48
}
49
+ /** Render on animationFrame */
50
+ loop ( ) {
51
+ if ( this . running ) this . render ( ) ;
52
+ requestAnimationFrame ( this . loop ) ;
53
+ }
47
54
}
0 commit comments