[{"data":1,"prerenderedAt":5436},["ShallowReactive",2],{"breakout-doc":3},{"id":4,"title":5,"body":6,"description":21,"extension":5430,"meta":5431,"navigation":158,"path":5432,"seo":5433,"stem":5434,"__hash__":5435},"content\u002Fcode\u002Fbreakout.md","Breakout",{"type":7,"value":8,"toc":5426},"minimark",[9,14,404,512,593,597,1885,2507,3187,4168,4684,5227,5422],[10,11,13],"h2",{"id":12},"game-code","Game Code",[15,16,22],"pre",{"className":17,"code":18,"filename":19,"language":20,"meta":21,"style":21},"language-ts shiki shiki-themes github-light github-dark","import { BreakoutActions } from \"~\u002Fhelpers\u002Fbreakout\u002Factions\";\nimport { Ball } from \"~\u002Fhelpers\u002Fbreakout\u002Fentities\u002FBall\";\nimport { BlockSpawner } from \"~\u002Fhelpers\u002Fbreakout\u002Fentities\u002FBlockSpawner\";\nimport { Paddle } from \"~\u002Fhelpers\u002Fbreakout\u002Fentities\u002FPaddle\";\nimport { PauseScreen } from \"~\u002Fhelpers\u002Fbreakout\u002Fentities\u002FPauseScreen\";\nimport { ScoreText } from \"~\u002Fhelpers\u002Fbreakout\u002Fentities\u002FScoreText\";\nimport { ScreenFPS } from \"~\u002Fhelpers\u002Fbreakout\u002Fentities\u002FScreenFPS\";\nimport { GameEngine, SVGD3Selection } from \"~\u002Fhelpers\u002Fsvgame\u002FGame\";\n\nexport const makeBreakoutGame = (svg: SVGD3Selection) => {\n  const game = new GameEngine({ svg: svg });\n  game.input.registerAction(BreakoutActions.ShootBall, \" \");\n  game.input.registerAction(BreakoutActions.MoveRight, \"d\");\n  game.input.registerAction(BreakoutActions.MoveLeft, \"a\");\n  game.input.registerAction(BreakoutActions.Reset, \"r\");\n\n  game.addEntities([\n    new PauseScreen(game),\n\n    new ScreenFPS(game),\n    new Paddle(game, \"paddle\"),\n    new BlockSpawner(game, \"block-spawner\"),\n    new Ball(game, \"ball\"),\n    new ScoreText(game),\n  ]);\n  return game;\n};\n","main.ts","ts","",[23,24,25,48,63,78,93,108,123,138,153,160,198,219,237,252,267,282,287,299,311,316,326,343,358,373,383,389,398],"code",{"__ignoreMap":21},[26,27,30,34,38,41,45],"span",{"class":28,"line":29},"line",1,[26,31,33],{"class":32},"szBVR","import",[26,35,37],{"class":36},"sVt8B"," { BreakoutActions } ",[26,39,40],{"class":32},"from",[26,42,44],{"class":43},"sZZnC"," \"~\u002Fhelpers\u002Fbreakout\u002Factions\"",[26,46,47],{"class":36},";\n",[26,49,51,53,56,58,61],{"class":28,"line":50},2,[26,52,33],{"class":32},[26,54,55],{"class":36}," { Ball } ",[26,57,40],{"class":32},[26,59,60],{"class":43}," \"~\u002Fhelpers\u002Fbreakout\u002Fentities\u002FBall\"",[26,62,47],{"class":36},[26,64,66,68,71,73,76],{"class":28,"line":65},3,[26,67,33],{"class":32},[26,69,70],{"class":36}," { BlockSpawner } ",[26,72,40],{"class":32},[26,74,75],{"class":43}," \"~\u002Fhelpers\u002Fbreakout\u002Fentities\u002FBlockSpawner\"",[26,77,47],{"class":36},[26,79,81,83,86,88,91],{"class":28,"line":80},4,[26,82,33],{"class":32},[26,84,85],{"class":36}," { Paddle } ",[26,87,40],{"class":32},[26,89,90],{"class":43}," \"~\u002Fhelpers\u002Fbreakout\u002Fentities\u002FPaddle\"",[26,92,47],{"class":36},[26,94,96,98,101,103,106],{"class":28,"line":95},5,[26,97,33],{"class":32},[26,99,100],{"class":36}," { PauseScreen } ",[26,102,40],{"class":32},[26,104,105],{"class":43}," \"~\u002Fhelpers\u002Fbreakout\u002Fentities\u002FPauseScreen\"",[26,107,47],{"class":36},[26,109,111,113,116,118,121],{"class":28,"line":110},6,[26,112,33],{"class":32},[26,114,115],{"class":36}," { ScoreText } ",[26,117,40],{"class":32},[26,119,120],{"class":43}," \"~\u002Fhelpers\u002Fbreakout\u002Fentities\u002FScoreText\"",[26,122,47],{"class":36},[26,124,126,128,131,133,136],{"class":28,"line":125},7,[26,127,33],{"class":32},[26,129,130],{"class":36}," { ScreenFPS } ",[26,132,40],{"class":32},[26,134,135],{"class":43}," \"~\u002Fhelpers\u002Fbreakout\u002Fentities\u002FScreenFPS\"",[26,137,47],{"class":36},[26,139,141,143,146,148,151],{"class":28,"line":140},8,[26,142,33],{"class":32},[26,144,145],{"class":36}," { GameEngine, SVGD3Selection } ",[26,147,40],{"class":32},[26,149,150],{"class":43}," \"~\u002Fhelpers\u002Fsvgame\u002FGame\"",[26,152,47],{"class":36},[26,154,156],{"class":28,"line":155},9,[26,157,159],{"emptyLinePlaceholder":158},true,"\n",[26,161,163,166,169,173,176,179,183,186,189,192,195],{"class":28,"line":162},10,[26,164,165],{"class":32},"export",[26,167,168],{"class":32}," const",[26,170,172],{"class":171},"sScJk"," makeBreakoutGame",[26,174,175],{"class":32}," =",[26,177,178],{"class":36}," (",[26,180,182],{"class":181},"s4XuR","svg",[26,184,185],{"class":32},":",[26,187,188],{"class":171}," SVGD3Selection",[26,190,191],{"class":36},") ",[26,193,194],{"class":32},"=>",[26,196,197],{"class":36}," {\n",[26,199,201,204,208,210,213,216],{"class":28,"line":200},11,[26,202,203],{"class":32},"  const",[26,205,207],{"class":206},"sj4cs"," game",[26,209,175],{"class":32},[26,211,212],{"class":32}," new",[26,214,215],{"class":171}," GameEngine",[26,217,218],{"class":36},"({ svg: svg });\n",[26,220,222,225,228,231,234],{"class":28,"line":221},12,[26,223,224],{"class":36},"  game.input.",[26,226,227],{"class":171},"registerAction",[26,229,230],{"class":36},"(BreakoutActions.ShootBall, ",[26,232,233],{"class":43},"\" \"",[26,235,236],{"class":36},");\n",[26,238,240,242,244,247,250],{"class":28,"line":239},13,[26,241,224],{"class":36},[26,243,227],{"class":171},[26,245,246],{"class":36},"(BreakoutActions.MoveRight, ",[26,248,249],{"class":43},"\"d\"",[26,251,236],{"class":36},[26,253,255,257,259,262,265],{"class":28,"line":254},14,[26,256,224],{"class":36},[26,258,227],{"class":171},[26,260,261],{"class":36},"(BreakoutActions.MoveLeft, ",[26,263,264],{"class":43},"\"a\"",[26,266,236],{"class":36},[26,268,270,272,274,277,280],{"class":28,"line":269},15,[26,271,224],{"class":36},[26,273,227],{"class":171},[26,275,276],{"class":36},"(BreakoutActions.Reset, ",[26,278,279],{"class":43},"\"r\"",[26,281,236],{"class":36},[26,283,285],{"class":28,"line":284},16,[26,286,159],{"emptyLinePlaceholder":158},[26,288,290,293,296],{"class":28,"line":289},17,[26,291,292],{"class":36},"  game.",[26,294,295],{"class":171},"addEntities",[26,297,298],{"class":36},"([\n",[26,300,302,305,308],{"class":28,"line":301},18,[26,303,304],{"class":32},"    new",[26,306,307],{"class":171}," PauseScreen",[26,309,310],{"class":36},"(game),\n",[26,312,314],{"class":28,"line":313},19,[26,315,159],{"emptyLinePlaceholder":158},[26,317,319,321,324],{"class":28,"line":318},20,[26,320,304],{"class":32},[26,322,323],{"class":171}," ScreenFPS",[26,325,310],{"class":36},[26,327,329,331,334,337,340],{"class":28,"line":328},21,[26,330,304],{"class":32},[26,332,333],{"class":171}," Paddle",[26,335,336],{"class":36},"(game, ",[26,338,339],{"class":43},"\"paddle\"",[26,341,342],{"class":36},"),\n",[26,344,346,348,351,353,356],{"class":28,"line":345},22,[26,347,304],{"class":32},[26,349,350],{"class":171}," BlockSpawner",[26,352,336],{"class":36},[26,354,355],{"class":43},"\"block-spawner\"",[26,357,342],{"class":36},[26,359,361,363,366,368,371],{"class":28,"line":360},23,[26,362,304],{"class":32},[26,364,365],{"class":171}," Ball",[26,367,336],{"class":36},[26,369,370],{"class":43},"\"ball\"",[26,372,342],{"class":36},[26,374,376,378,381],{"class":28,"line":375},24,[26,377,304],{"class":32},[26,379,380],{"class":171}," ScoreText",[26,382,310],{"class":36},[26,384,386],{"class":28,"line":385},25,[26,387,388],{"class":36},"  ]);\n",[26,390,392,395],{"class":28,"line":391},26,[26,393,394],{"class":32},"  return",[26,396,397],{"class":36}," game;\n",[26,399,401],{"class":28,"line":400},27,[26,402,403],{"class":36},"};\n",[15,405,408],{"className":17,"code":406,"filename":407,"language":20,"meta":21,"style":21},"export enum BreakoutEvents {\n  BallShot = \"BALL_SHOT\",\n  BlockBroken = \"BLOCK_BROKEN\",\n  BlockHit = \"BLOCK_HIT\",\n  PaddleHit = \"PADDLE_HIT\",\n  Death = \"DEATH\",\n  Lose = \"LOSE\",\n  Win = \"WIN\",\n}\n","events.ts",[23,409,410,422,435,447,459,471,483,495,507],{"__ignoreMap":21},[26,411,412,414,417,420],{"class":28,"line":29},[26,413,165],{"class":32},[26,415,416],{"class":32}," enum",[26,418,419],{"class":171}," BreakoutEvents",[26,421,197],{"class":36},[26,423,424,427,429,432],{"class":28,"line":50},[26,425,426],{"class":206},"  BallShot",[26,428,175],{"class":32},[26,430,431],{"class":43}," \"BALL_SHOT\"",[26,433,434],{"class":36},",\n",[26,436,437,440,442,445],{"class":28,"line":65},[26,438,439],{"class":206},"  BlockBroken",[26,441,175],{"class":32},[26,443,444],{"class":43}," \"BLOCK_BROKEN\"",[26,446,434],{"class":36},[26,448,449,452,454,457],{"class":28,"line":80},[26,450,451],{"class":206},"  BlockHit",[26,453,175],{"class":32},[26,455,456],{"class":43}," \"BLOCK_HIT\"",[26,458,434],{"class":36},[26,460,461,464,466,469],{"class":28,"line":95},[26,462,463],{"class":206},"  PaddleHit",[26,465,175],{"class":32},[26,467,468],{"class":43}," \"PADDLE_HIT\"",[26,470,434],{"class":36},[26,472,473,476,478,481],{"class":28,"line":110},[26,474,475],{"class":206},"  Death",[26,477,175],{"class":32},[26,479,480],{"class":43}," \"DEATH\"",[26,482,434],{"class":36},[26,484,485,488,490,493],{"class":28,"line":125},[26,486,487],{"class":206},"  Lose",[26,489,175],{"class":32},[26,491,492],{"class":43}," \"LOSE\"",[26,494,434],{"class":36},[26,496,497,500,502,505],{"class":28,"line":140},[26,498,499],{"class":206},"  Win",[26,501,175],{"class":32},[26,503,504],{"class":43}," \"WIN\"",[26,506,434],{"class":36},[26,508,509],{"class":28,"line":155},[26,510,511],{"class":36},"}\n",[15,513,516],{"className":17,"code":514,"filename":515,"language":20,"meta":21,"style":21},"export enum BreakoutActions {\n  MoveLeft = \"MOVE_LEFT\",\n  MoveRight = \"MOVE_RIGHT\",\n  Pause = \"PAUSE\",\n  ShootBall = \"SHOOT_BALL\",\n  Reset = \"RESET\",\n}\n","actions.ts",[23,517,518,529,541,553,565,577,589],{"__ignoreMap":21},[26,519,520,522,524,527],{"class":28,"line":29},[26,521,165],{"class":32},[26,523,416],{"class":32},[26,525,526],{"class":171}," BreakoutActions",[26,528,197],{"class":36},[26,530,531,534,536,539],{"class":28,"line":50},[26,532,533],{"class":206},"  MoveLeft",[26,535,175],{"class":32},[26,537,538],{"class":43}," \"MOVE_LEFT\"",[26,540,434],{"class":36},[26,542,543,546,548,551],{"class":28,"line":65},[26,544,545],{"class":206},"  MoveRight",[26,547,175],{"class":32},[26,549,550],{"class":43}," \"MOVE_RIGHT\"",[26,552,434],{"class":36},[26,554,555,558,560,563],{"class":28,"line":80},[26,556,557],{"class":206},"  Pause",[26,559,175],{"class":32},[26,561,562],{"class":43}," \"PAUSE\"",[26,564,434],{"class":36},[26,566,567,570,572,575],{"class":28,"line":95},[26,568,569],{"class":206},"  ShootBall",[26,571,175],{"class":32},[26,573,574],{"class":43}," \"SHOOT_BALL\"",[26,576,434],{"class":36},[26,578,579,582,584,587],{"class":28,"line":110},[26,580,581],{"class":206},"  Reset",[26,583,175],{"class":32},[26,585,586],{"class":43}," \"RESET\"",[26,588,434],{"class":36},[26,590,591],{"class":28,"line":125},[26,592,511],{"class":36},[10,594,596],{"id":595},"entities","Entities",[15,598,601],{"className":17,"code":599,"filename":600,"language":20,"meta":21,"style":21},"import { Vec2 } from \"gl-matrix\u002Fdist\u002Fesm\";\nimport { BreakoutActions } from \"~\u002Fhelpers\u002Fbreakout\u002Factions\";\nimport { Block } from \"~\u002Fhelpers\u002Fbreakout\u002Fentities\u002FBlock\";\nimport { Paddle } from \"~\u002Fhelpers\u002Fbreakout\u002Fentities\u002FPaddle\";\nimport { BreakoutEvents } from \"~\u002Fhelpers\u002Fbreakout\u002Fevents\";\nimport { Entity } from \"~\u002Fhelpers\u002Fsvgame\";\nimport { drawCircles } from \"~\u002Fhelpers\u002Fsvgame\u002Flib\u002Fdrawing\";\n\nexport class Ball extends Entity {\n  position = new Vec2(250, 250);\n  radius = 15;\n  velocity = new Vec2();\n  attached = true;\n  speed = 10;\n\n  setup() {\n    \u002F\u002F Ball Shooting Event\n    this.game.eventBus.on(BreakoutEvents.BallShot, this.shoot);\n    this.game.eventBus.on(BreakoutEvents.BlockHit, this.blockHit);\n    this.game.eventBus.on(BreakoutEvents.PaddleHit, this.paddleHit);\n  }\n\n  begin(timestamp: number, delta: number) {\n    \u002F\u002F Handle Reset Action\n    if (this.game.input.isActionJustPressed(BreakoutActions.Reset)) {\n      this.reset();\n    }\n  }\n\n  update = (delta: number) => {\n    \u002F\u002F Bounce Back if hit top\n    if (this.position.y \u003C= this.radius) {\n      this.wallHit();\n    }\n    \u002F\u002F Bounce back if hit walls\n    if (\n      this.position.x \u003C= this.radius ||\n      this.position.x >= this.game.resolution.x\n    ) {\n      this.wallHit();\n    }\n\n    \u002F\u002F Reset if hits bottom\n    if (this.position.y >= this.game.resolution.y) this.reset();\n    \u002F\u002F If we're attached update the ball positions\n    if (this.attached) {\n      this.updateBallPosition();\n    }\n    this.velocity.normalize().scale(this.speed);\n    \u002F\u002F Add velocity always each frame\n    this.position.add(this.velocity);\n  };\n\n  draw(interpolationPercentage: number) {\n    drawCircles({\n      className: \"ball\",\n      fill: \"#fff\",\n      radius: this.radius,\n      svg: this.game.svg,\n      positions: [this.position],\n    });\n  }\n\n  \u002F\u002F reset it to its default state\n  reset = () => {\n    this.game.eventBus.emit(BreakoutEvents.Death);\n    this.attached = true;\n    this.velocity.set([0, 0]);\n  };\n\n  \u002F\u002F Shoot the ball up transferring the velocity of the paddle\n  private shoot = (paddleVelocity: Vec2) => {\n    if (this.attached) {\n      this.velocity.add([0, -1 * this.speed]).add(paddleVelocity);\n    }\n    this.attached = false;\n  };\n\n  \u002F\u002F Update the position of the ball, so it's on the paddle\n  private updateBallPosition = () => {\n    this.position = new Vec2(\n      this.game.getEntity\u003CPaddle>(\"paddle\")!.position,\n    ).sub([0, 30]);\n  };\n\n  private blockHit = (block: Block) => {\n    this.velocity.negate();\n  };\n\n  private paddleHit = (paddle: Paddle) => {\n    \u002F\u002F This makes sure we don't trigger collision too much!\n    this.position.add([0, -1]);\n    this.velocity.negate().add(paddle.velocity);\n  };\n\n  private wallHit = () => {\n    \u002F\u002F If the ball hits the left or right wall\n    if (\n      this.position.x \u003C= this.radius ||\n      this.position.x >= this.game.resolution.x - this.radius\n    ) {\n      this.velocity.x = -this.velocity.x; \u002F\u002F Reflect the horizontal component\n    }\n\n    \u002F\u002F If the ball hits the roof\n    if (this.position.y \u003C= this.radius) {\n      this.velocity.y = -this.velocity.y; \u002F\u002F Reflect the vertical component\n    }\n  };\n}\n\n","entities\u002FBall.ts",[23,602,603,617,629,643,655,669,683,697,701,718,743,755,769,781,793,797,805,811,831,847,863,868,872,899,904,922,935,940,945,950,972,978,999,1011,1016,1022,1030,1048,1063,1069,1080,1085,1090,1096,1122,1128,1140,1152,1157,1181,1187,1205,1211,1216,1233,1242,1252,1263,1274,1285,1296,1302,1307,1312,1318,1333,1346,1361,1384,1389,1394,1400,1426,1437,1471,1476,1490,1495,1500,1506,1522,1539,1570,1590,1595,1600,1626,1638,1643,1648,1673,1679,1700,1716,1721,1726,1742,1748,1755,1770,1791,1796,1817,1822,1827,1833,1850,1870,1875,1880],{"__ignoreMap":21},[26,604,605,607,610,612,615],{"class":28,"line":29},[26,606,33],{"class":32},[26,608,609],{"class":36}," { Vec2 } ",[26,611,40],{"class":32},[26,613,614],{"class":43}," \"gl-matrix\u002Fdist\u002Fesm\"",[26,616,47],{"class":36},[26,618,619,621,623,625,627],{"class":28,"line":50},[26,620,33],{"class":32},[26,622,37],{"class":36},[26,624,40],{"class":32},[26,626,44],{"class":43},[26,628,47],{"class":36},[26,630,631,633,636,638,641],{"class":28,"line":65},[26,632,33],{"class":32},[26,634,635],{"class":36}," { Block } ",[26,637,40],{"class":32},[26,639,640],{"class":43}," \"~\u002Fhelpers\u002Fbreakout\u002Fentities\u002FBlock\"",[26,642,47],{"class":36},[26,644,645,647,649,651,653],{"class":28,"line":80},[26,646,33],{"class":32},[26,648,85],{"class":36},[26,650,40],{"class":32},[26,652,90],{"class":43},[26,654,47],{"class":36},[26,656,657,659,662,664,667],{"class":28,"line":95},[26,658,33],{"class":32},[26,660,661],{"class":36}," { BreakoutEvents } ",[26,663,40],{"class":32},[26,665,666],{"class":43}," \"~\u002Fhelpers\u002Fbreakout\u002Fevents\"",[26,668,47],{"class":36},[26,670,671,673,676,678,681],{"class":28,"line":110},[26,672,33],{"class":32},[26,674,675],{"class":36}," { Entity } ",[26,677,40],{"class":32},[26,679,680],{"class":43}," \"~\u002Fhelpers\u002Fsvgame\"",[26,682,47],{"class":36},[26,684,685,687,690,692,695],{"class":28,"line":125},[26,686,33],{"class":32},[26,688,689],{"class":36}," { drawCircles } ",[26,691,40],{"class":32},[26,693,694],{"class":43}," \"~\u002Fhelpers\u002Fsvgame\u002Flib\u002Fdrawing\"",[26,696,47],{"class":36},[26,698,699],{"class":28,"line":140},[26,700,159],{"emptyLinePlaceholder":158},[26,702,703,705,708,710,713,716],{"class":28,"line":155},[26,704,165],{"class":32},[26,706,707],{"class":32}," class",[26,709,365],{"class":171},[26,711,712],{"class":32}," extends",[26,714,715],{"class":171}," Entity",[26,717,197],{"class":36},[26,719,720,723,725,727,730,733,736,739,741],{"class":28,"line":162},[26,721,722],{"class":181},"  position",[26,724,175],{"class":32},[26,726,212],{"class":32},[26,728,729],{"class":171}," Vec2",[26,731,732],{"class":36},"(",[26,734,735],{"class":206},"250",[26,737,738],{"class":36},", ",[26,740,735],{"class":206},[26,742,236],{"class":36},[26,744,745,748,750,753],{"class":28,"line":200},[26,746,747],{"class":181},"  radius",[26,749,175],{"class":32},[26,751,752],{"class":206}," 15",[26,754,47],{"class":36},[26,756,757,760,762,764,766],{"class":28,"line":221},[26,758,759],{"class":181},"  velocity",[26,761,175],{"class":32},[26,763,212],{"class":32},[26,765,729],{"class":171},[26,767,768],{"class":36},"();\n",[26,770,771,774,776,779],{"class":28,"line":239},[26,772,773],{"class":181},"  attached",[26,775,175],{"class":32},[26,777,778],{"class":206}," true",[26,780,47],{"class":36},[26,782,783,786,788,791],{"class":28,"line":254},[26,784,785],{"class":181},"  speed",[26,787,175],{"class":32},[26,789,790],{"class":206}," 10",[26,792,47],{"class":36},[26,794,795],{"class":28,"line":269},[26,796,159],{"emptyLinePlaceholder":158},[26,798,799,802],{"class":28,"line":284},[26,800,801],{"class":171},"  setup",[26,803,804],{"class":36},"() {\n",[26,806,807],{"class":28,"line":289},[26,808,810],{"class":809},"sJ8bj","    \u002F\u002F Ball Shooting Event\n",[26,812,813,816,819,822,825,828],{"class":28,"line":301},[26,814,815],{"class":206},"    this",[26,817,818],{"class":36},".game.eventBus.",[26,820,821],{"class":171},"on",[26,823,824],{"class":36},"(BreakoutEvents.BallShot, ",[26,826,827],{"class":206},"this",[26,829,830],{"class":36},".shoot);\n",[26,832,833,835,837,839,842,844],{"class":28,"line":313},[26,834,815],{"class":206},[26,836,818],{"class":36},[26,838,821],{"class":171},[26,840,841],{"class":36},"(BreakoutEvents.BlockHit, ",[26,843,827],{"class":206},[26,845,846],{"class":36},".blockHit);\n",[26,848,849,851,853,855,858,860],{"class":28,"line":318},[26,850,815],{"class":206},[26,852,818],{"class":36},[26,854,821],{"class":171},[26,856,857],{"class":36},"(BreakoutEvents.PaddleHit, ",[26,859,827],{"class":206},[26,861,862],{"class":36},".paddleHit);\n",[26,864,865],{"class":28,"line":328},[26,866,867],{"class":36},"  }\n",[26,869,870],{"class":28,"line":345},[26,871,159],{"emptyLinePlaceholder":158},[26,873,874,877,879,882,884,887,889,892,894,896],{"class":28,"line":360},[26,875,876],{"class":171},"  begin",[26,878,732],{"class":36},[26,880,881],{"class":181},"timestamp",[26,883,185],{"class":32},[26,885,886],{"class":206}," number",[26,888,738],{"class":36},[26,890,891],{"class":181},"delta",[26,893,185],{"class":32},[26,895,886],{"class":206},[26,897,898],{"class":36},") {\n",[26,900,901],{"class":28,"line":375},[26,902,903],{"class":809},"    \u002F\u002F Handle Reset Action\n",[26,905,906,909,911,913,916,919],{"class":28,"line":385},[26,907,908],{"class":32},"    if",[26,910,178],{"class":36},[26,912,827],{"class":206},[26,914,915],{"class":36},".game.input.",[26,917,918],{"class":171},"isActionJustPressed",[26,920,921],{"class":36},"(BreakoutActions.Reset)) {\n",[26,923,924,927,930,933],{"class":28,"line":391},[26,925,926],{"class":206},"      this",[26,928,929],{"class":36},".",[26,931,932],{"class":171},"reset",[26,934,768],{"class":36},[26,936,937],{"class":28,"line":400},[26,938,939],{"class":36},"    }\n",[26,941,943],{"class":28,"line":942},28,[26,944,867],{"class":36},[26,946,948],{"class":28,"line":947},29,[26,949,159],{"emptyLinePlaceholder":158},[26,951,953,956,958,960,962,964,966,968,970],{"class":28,"line":952},30,[26,954,955],{"class":171},"  update",[26,957,175],{"class":32},[26,959,178],{"class":36},[26,961,891],{"class":181},[26,963,185],{"class":32},[26,965,886],{"class":206},[26,967,191],{"class":36},[26,969,194],{"class":32},[26,971,197],{"class":36},[26,973,975],{"class":28,"line":974},31,[26,976,977],{"class":809},"    \u002F\u002F Bounce Back if hit top\n",[26,979,981,983,985,987,990,993,996],{"class":28,"line":980},32,[26,982,908],{"class":32},[26,984,178],{"class":36},[26,986,827],{"class":206},[26,988,989],{"class":36},".position.y ",[26,991,992],{"class":32},"\u003C=",[26,994,995],{"class":206}," this",[26,997,998],{"class":36},".radius) {\n",[26,1000,1002,1004,1006,1009],{"class":28,"line":1001},33,[26,1003,926],{"class":206},[26,1005,929],{"class":36},[26,1007,1008],{"class":171},"wallHit",[26,1010,768],{"class":36},[26,1012,1014],{"class":28,"line":1013},34,[26,1015,939],{"class":36},[26,1017,1019],{"class":28,"line":1018},35,[26,1020,1021],{"class":809},"    \u002F\u002F Bounce back if hit walls\n",[26,1023,1025,1027],{"class":28,"line":1024},36,[26,1026,908],{"class":32},[26,1028,1029],{"class":36}," (\n",[26,1031,1033,1035,1038,1040,1042,1045],{"class":28,"line":1032},37,[26,1034,926],{"class":206},[26,1036,1037],{"class":36},".position.x ",[26,1039,992],{"class":32},[26,1041,995],{"class":206},[26,1043,1044],{"class":36},".radius ",[26,1046,1047],{"class":32},"||\n",[26,1049,1051,1053,1055,1058,1060],{"class":28,"line":1050},38,[26,1052,926],{"class":206},[26,1054,1037],{"class":36},[26,1056,1057],{"class":32},">=",[26,1059,995],{"class":206},[26,1061,1062],{"class":36},".game.resolution.x\n",[26,1064,1066],{"class":28,"line":1065},39,[26,1067,1068],{"class":36},"    ) {\n",[26,1070,1072,1074,1076,1078],{"class":28,"line":1071},40,[26,1073,926],{"class":206},[26,1075,929],{"class":36},[26,1077,1008],{"class":171},[26,1079,768],{"class":36},[26,1081,1083],{"class":28,"line":1082},41,[26,1084,939],{"class":36},[26,1086,1088],{"class":28,"line":1087},42,[26,1089,159],{"emptyLinePlaceholder":158},[26,1091,1093],{"class":28,"line":1092},43,[26,1094,1095],{"class":809},"    \u002F\u002F Reset if hits bottom\n",[26,1097,1099,1101,1103,1105,1107,1109,1111,1114,1116,1118,1120],{"class":28,"line":1098},44,[26,1100,908],{"class":32},[26,1102,178],{"class":36},[26,1104,827],{"class":206},[26,1106,989],{"class":36},[26,1108,1057],{"class":32},[26,1110,995],{"class":206},[26,1112,1113],{"class":36},".game.resolution.y) ",[26,1115,827],{"class":206},[26,1117,929],{"class":36},[26,1119,932],{"class":171},[26,1121,768],{"class":36},[26,1123,1125],{"class":28,"line":1124},45,[26,1126,1127],{"class":809},"    \u002F\u002F If we're attached update the ball positions\n",[26,1129,1131,1133,1135,1137],{"class":28,"line":1130},46,[26,1132,908],{"class":32},[26,1134,178],{"class":36},[26,1136,827],{"class":206},[26,1138,1139],{"class":36},".attached) {\n",[26,1141,1143,1145,1147,1150],{"class":28,"line":1142},47,[26,1144,926],{"class":206},[26,1146,929],{"class":36},[26,1148,1149],{"class":171},"updateBallPosition",[26,1151,768],{"class":36},[26,1153,1155],{"class":28,"line":1154},48,[26,1156,939],{"class":36},[26,1158,1160,1162,1165,1168,1171,1174,1176,1178],{"class":28,"line":1159},49,[26,1161,815],{"class":206},[26,1163,1164],{"class":36},".velocity.",[26,1166,1167],{"class":171},"normalize",[26,1169,1170],{"class":36},"().",[26,1172,1173],{"class":171},"scale",[26,1175,732],{"class":36},[26,1177,827],{"class":206},[26,1179,1180],{"class":36},".speed);\n",[26,1182,1184],{"class":28,"line":1183},50,[26,1185,1186],{"class":809},"    \u002F\u002F Add velocity always each frame\n",[26,1188,1190,1192,1195,1198,1200,1202],{"class":28,"line":1189},51,[26,1191,815],{"class":206},[26,1193,1194],{"class":36},".position.",[26,1196,1197],{"class":171},"add",[26,1199,732],{"class":36},[26,1201,827],{"class":206},[26,1203,1204],{"class":36},".velocity);\n",[26,1206,1208],{"class":28,"line":1207},52,[26,1209,1210],{"class":36},"  };\n",[26,1212,1214],{"class":28,"line":1213},53,[26,1215,159],{"emptyLinePlaceholder":158},[26,1217,1219,1222,1224,1227,1229,1231],{"class":28,"line":1218},54,[26,1220,1221],{"class":171},"  draw",[26,1223,732],{"class":36},[26,1225,1226],{"class":181},"interpolationPercentage",[26,1228,185],{"class":32},[26,1230,886],{"class":206},[26,1232,898],{"class":36},[26,1234,1236,1239],{"class":28,"line":1235},55,[26,1237,1238],{"class":171},"    drawCircles",[26,1240,1241],{"class":36},"({\n",[26,1243,1245,1248,1250],{"class":28,"line":1244},56,[26,1246,1247],{"class":36},"      className: ",[26,1249,370],{"class":43},[26,1251,434],{"class":36},[26,1253,1255,1258,1261],{"class":28,"line":1254},57,[26,1256,1257],{"class":36},"      fill: ",[26,1259,1260],{"class":43},"\"#fff\"",[26,1262,434],{"class":36},[26,1264,1266,1269,1271],{"class":28,"line":1265},58,[26,1267,1268],{"class":36},"      radius: ",[26,1270,827],{"class":206},[26,1272,1273],{"class":36},".radius,\n",[26,1275,1277,1280,1282],{"class":28,"line":1276},59,[26,1278,1279],{"class":36},"      svg: ",[26,1281,827],{"class":206},[26,1283,1284],{"class":36},".game.svg,\n",[26,1286,1288,1291,1293],{"class":28,"line":1287},60,[26,1289,1290],{"class":36},"      positions: [",[26,1292,827],{"class":206},[26,1294,1295],{"class":36},".position],\n",[26,1297,1299],{"class":28,"line":1298},61,[26,1300,1301],{"class":36},"    });\n",[26,1303,1305],{"class":28,"line":1304},62,[26,1306,867],{"class":36},[26,1308,1310],{"class":28,"line":1309},63,[26,1311,159],{"emptyLinePlaceholder":158},[26,1313,1315],{"class":28,"line":1314},64,[26,1316,1317],{"class":809},"  \u002F\u002F reset it to its default state\n",[26,1319,1321,1324,1326,1329,1331],{"class":28,"line":1320},65,[26,1322,1323],{"class":171},"  reset",[26,1325,175],{"class":32},[26,1327,1328],{"class":36}," () ",[26,1330,194],{"class":32},[26,1332,197],{"class":36},[26,1334,1336,1338,1340,1343],{"class":28,"line":1335},66,[26,1337,815],{"class":206},[26,1339,818],{"class":36},[26,1341,1342],{"class":171},"emit",[26,1344,1345],{"class":36},"(BreakoutEvents.Death);\n",[26,1347,1349,1351,1354,1357,1359],{"class":28,"line":1348},67,[26,1350,815],{"class":206},[26,1352,1353],{"class":36},".attached ",[26,1355,1356],{"class":32},"=",[26,1358,778],{"class":206},[26,1360,47],{"class":36},[26,1362,1364,1366,1368,1371,1374,1377,1379,1381],{"class":28,"line":1363},68,[26,1365,815],{"class":206},[26,1367,1164],{"class":36},[26,1369,1370],{"class":171},"set",[26,1372,1373],{"class":36},"([",[26,1375,1376],{"class":206},"0",[26,1378,738],{"class":36},[26,1380,1376],{"class":206},[26,1382,1383],{"class":36},"]);\n",[26,1385,1387],{"class":28,"line":1386},69,[26,1388,1210],{"class":36},[26,1390,1392],{"class":28,"line":1391},70,[26,1393,159],{"emptyLinePlaceholder":158},[26,1395,1397],{"class":28,"line":1396},71,[26,1398,1399],{"class":809},"  \u002F\u002F Shoot the ball up transferring the velocity of the paddle\n",[26,1401,1403,1406,1409,1411,1413,1416,1418,1420,1422,1424],{"class":28,"line":1402},72,[26,1404,1405],{"class":32},"  private",[26,1407,1408],{"class":171}," shoot",[26,1410,175],{"class":32},[26,1412,178],{"class":36},[26,1414,1415],{"class":181},"paddleVelocity",[26,1417,185],{"class":32},[26,1419,729],{"class":171},[26,1421,191],{"class":36},[26,1423,194],{"class":32},[26,1425,197],{"class":36},[26,1427,1429,1431,1433,1435],{"class":28,"line":1428},73,[26,1430,908],{"class":32},[26,1432,178],{"class":36},[26,1434,827],{"class":206},[26,1436,1139],{"class":36},[26,1438,1440,1442,1444,1446,1448,1450,1452,1455,1458,1461,1463,1466,1468],{"class":28,"line":1439},74,[26,1441,926],{"class":206},[26,1443,1164],{"class":36},[26,1445,1197],{"class":171},[26,1447,1373],{"class":36},[26,1449,1376],{"class":206},[26,1451,738],{"class":36},[26,1453,1454],{"class":32},"-",[26,1456,1457],{"class":206},"1",[26,1459,1460],{"class":32}," *",[26,1462,995],{"class":206},[26,1464,1465],{"class":36},".speed]).",[26,1467,1197],{"class":171},[26,1469,1470],{"class":36},"(paddleVelocity);\n",[26,1472,1474],{"class":28,"line":1473},75,[26,1475,939],{"class":36},[26,1477,1479,1481,1483,1485,1488],{"class":28,"line":1478},76,[26,1480,815],{"class":206},[26,1482,1353],{"class":36},[26,1484,1356],{"class":32},[26,1486,1487],{"class":206}," false",[26,1489,47],{"class":36},[26,1491,1493],{"class":28,"line":1492},77,[26,1494,1210],{"class":36},[26,1496,1498],{"class":28,"line":1497},78,[26,1499,159],{"emptyLinePlaceholder":158},[26,1501,1503],{"class":28,"line":1502},79,[26,1504,1505],{"class":809},"  \u002F\u002F Update the position of the ball, so it's on the paddle\n",[26,1507,1509,1511,1514,1516,1518,1520],{"class":28,"line":1508},80,[26,1510,1405],{"class":32},[26,1512,1513],{"class":171}," updateBallPosition",[26,1515,175],{"class":32},[26,1517,1328],{"class":36},[26,1519,194],{"class":32},[26,1521,197],{"class":36},[26,1523,1525,1527,1530,1532,1534,1536],{"class":28,"line":1524},81,[26,1526,815],{"class":206},[26,1528,1529],{"class":36},".position ",[26,1531,1356],{"class":32},[26,1533,212],{"class":32},[26,1535,729],{"class":171},[26,1537,1538],{"class":36},"(\n",[26,1540,1542,1544,1547,1550,1553,1556,1559,1561,1564,1567],{"class":28,"line":1541},82,[26,1543,926],{"class":206},[26,1545,1546],{"class":36},".game.",[26,1548,1549],{"class":171},"getEntity",[26,1551,1552],{"class":36},"\u003C",[26,1554,1555],{"class":171},"Paddle",[26,1557,1558],{"class":36},">(",[26,1560,339],{"class":43},[26,1562,1563],{"class":36},")",[26,1565,1566],{"class":32},"!",[26,1568,1569],{"class":36},".position,\n",[26,1571,1573,1576,1579,1581,1583,1585,1588],{"class":28,"line":1572},83,[26,1574,1575],{"class":36},"    ).",[26,1577,1578],{"class":171},"sub",[26,1580,1373],{"class":36},[26,1582,1376],{"class":206},[26,1584,738],{"class":36},[26,1586,1587],{"class":206},"30",[26,1589,1383],{"class":36},[26,1591,1593],{"class":28,"line":1592},84,[26,1594,1210],{"class":36},[26,1596,1598],{"class":28,"line":1597},85,[26,1599,159],{"emptyLinePlaceholder":158},[26,1601,1603,1605,1608,1610,1612,1615,1617,1620,1622,1624],{"class":28,"line":1602},86,[26,1604,1405],{"class":32},[26,1606,1607],{"class":171}," blockHit",[26,1609,175],{"class":32},[26,1611,178],{"class":36},[26,1613,1614],{"class":181},"block",[26,1616,185],{"class":32},[26,1618,1619],{"class":171}," Block",[26,1621,191],{"class":36},[26,1623,194],{"class":32},[26,1625,197],{"class":36},[26,1627,1629,1631,1633,1636],{"class":28,"line":1628},87,[26,1630,815],{"class":206},[26,1632,1164],{"class":36},[26,1634,1635],{"class":171},"negate",[26,1637,768],{"class":36},[26,1639,1641],{"class":28,"line":1640},88,[26,1642,1210],{"class":36},[26,1644,1646],{"class":28,"line":1645},89,[26,1647,159],{"emptyLinePlaceholder":158},[26,1649,1651,1653,1656,1658,1660,1663,1665,1667,1669,1671],{"class":28,"line":1650},90,[26,1652,1405],{"class":32},[26,1654,1655],{"class":171}," paddleHit",[26,1657,175],{"class":32},[26,1659,178],{"class":36},[26,1661,1662],{"class":181},"paddle",[26,1664,185],{"class":32},[26,1666,333],{"class":171},[26,1668,191],{"class":36},[26,1670,194],{"class":32},[26,1672,197],{"class":36},[26,1674,1676],{"class":28,"line":1675},91,[26,1677,1678],{"class":809},"    \u002F\u002F This makes sure we don't trigger collision too much!\n",[26,1680,1682,1684,1686,1688,1690,1692,1694,1696,1698],{"class":28,"line":1681},92,[26,1683,815],{"class":206},[26,1685,1194],{"class":36},[26,1687,1197],{"class":171},[26,1689,1373],{"class":36},[26,1691,1376],{"class":206},[26,1693,738],{"class":36},[26,1695,1454],{"class":32},[26,1697,1457],{"class":206},[26,1699,1383],{"class":36},[26,1701,1703,1705,1707,1709,1711,1713],{"class":28,"line":1702},93,[26,1704,815],{"class":206},[26,1706,1164],{"class":36},[26,1708,1635],{"class":171},[26,1710,1170],{"class":36},[26,1712,1197],{"class":171},[26,1714,1715],{"class":36},"(paddle.velocity);\n",[26,1717,1719],{"class":28,"line":1718},94,[26,1720,1210],{"class":36},[26,1722,1724],{"class":28,"line":1723},95,[26,1725,159],{"emptyLinePlaceholder":158},[26,1727,1729,1731,1734,1736,1738,1740],{"class":28,"line":1728},96,[26,1730,1405],{"class":32},[26,1732,1733],{"class":171}," wallHit",[26,1735,175],{"class":32},[26,1737,1328],{"class":36},[26,1739,194],{"class":32},[26,1741,197],{"class":36},[26,1743,1745],{"class":28,"line":1744},97,[26,1746,1747],{"class":809},"    \u002F\u002F If the ball hits the left or right wall\n",[26,1749,1751,1753],{"class":28,"line":1750},98,[26,1752,908],{"class":32},[26,1754,1029],{"class":36},[26,1756,1758,1760,1762,1764,1766,1768],{"class":28,"line":1757},99,[26,1759,926],{"class":206},[26,1761,1037],{"class":36},[26,1763,992],{"class":32},[26,1765,995],{"class":206},[26,1767,1044],{"class":36},[26,1769,1047],{"class":32},[26,1771,1773,1775,1777,1779,1781,1784,1786,1788],{"class":28,"line":1772},100,[26,1774,926],{"class":206},[26,1776,1037],{"class":36},[26,1778,1057],{"class":32},[26,1780,995],{"class":206},[26,1782,1783],{"class":36},".game.resolution.x ",[26,1785,1454],{"class":32},[26,1787,995],{"class":206},[26,1789,1790],{"class":36},".radius\n",[26,1792,1794],{"class":28,"line":1793},101,[26,1795,1068],{"class":36},[26,1797,1799,1801,1804,1806,1809,1811,1814],{"class":28,"line":1798},102,[26,1800,926],{"class":206},[26,1802,1803],{"class":36},".velocity.x ",[26,1805,1356],{"class":32},[26,1807,1808],{"class":32}," -",[26,1810,827],{"class":206},[26,1812,1813],{"class":36},".velocity.x; ",[26,1815,1816],{"class":809},"\u002F\u002F Reflect the horizontal component\n",[26,1818,1820],{"class":28,"line":1819},103,[26,1821,939],{"class":36},[26,1823,1825],{"class":28,"line":1824},104,[26,1826,159],{"emptyLinePlaceholder":158},[26,1828,1830],{"class":28,"line":1829},105,[26,1831,1832],{"class":809},"    \u002F\u002F If the ball hits the roof\n",[26,1834,1836,1838,1840,1842,1844,1846,1848],{"class":28,"line":1835},106,[26,1837,908],{"class":32},[26,1839,178],{"class":36},[26,1841,827],{"class":206},[26,1843,989],{"class":36},[26,1845,992],{"class":32},[26,1847,995],{"class":206},[26,1849,998],{"class":36},[26,1851,1853,1855,1858,1860,1862,1864,1867],{"class":28,"line":1852},107,[26,1854,926],{"class":206},[26,1856,1857],{"class":36},".velocity.y ",[26,1859,1356],{"class":32},[26,1861,1808],{"class":32},[26,1863,827],{"class":206},[26,1865,1866],{"class":36},".velocity.y; ",[26,1868,1869],{"class":809},"\u002F\u002F Reflect the vertical component\n",[26,1871,1873],{"class":28,"line":1872},108,[26,1874,939],{"class":36},[26,1876,1878],{"class":28,"line":1877},109,[26,1879,1210],{"class":36},[26,1881,1883],{"class":28,"line":1882},110,[26,1884,511],{"class":36},[15,1886,1889],{"className":17,"code":1887,"filename":1888,"language":20,"meta":21,"style":21},"import { Vec2, Vec3 } from \"gl-matrix\u002Fdist\u002Fesm\";\nimport { Ball } from \"~\u002Fhelpers\u002Fbreakout\u002Fentities\u002FBall\";\nimport { BreakoutEvents } from \"~\u002Fhelpers\u002Fbreakout\u002Fevents\";\nimport { Entity } from \"~\u002Fhelpers\u002Fsvgame\";\nimport { BoxCollision } from \"~\u002Fhelpers\u002Fsvgame\u002Flib\u002FBoxCollision\";\nimport { createSquare, drawPolygons } from \"~\u002Fhelpers\u002Fsvgame\u002Flib\u002Fdrawing\";\n\nexport class Block extends Entity {\n  ball?: Ball;\n  vertices: Vec2[] = [];\n  position = new Vec2(250, 60);\n  size = new Vec2(50, 20);\n  color = new Vec3(1, 1, 1);\n  collision?: BoxCollision;\n  health = 1;\n\n  setup = () => {\n    this.vertices = createSquare(this.position, this.size);\n    this.ball = this.game.getEntity\u003CBall>(\"ball\");\n    this.collision = new BoxCollision(\n      this.position,\n      this.size,\n      this.handleCollision,\n    );\n  };\n\n  update = (delta: number) => {\n    if (this.ball) {\n      this.collision?.checkCollision(this.ball?.position);\n    }\n  };\n\n  draw(interpolationPercentage: number) {\n    drawPolygons({\n      svg: this.game.svg,\n      vertices: [this.vertices],\n      fill: `rgb(${this.color.x * 255}, ${this.color.y * 255}, ${\n        this.color.z * 255\n      })`,\n      className: this.name,\n    });\n  }\n\n  private handleCollision = () => {\n    this.health -= 1;\n    this.game.eventBus.emit(BreakoutEvents.BlockHit, this);\n    if (this.health \u003C= 0) {\n      this.game.eventBus.emit(BreakoutEvents.BlockBroken);\n      this.delete();\n    }\n  };\n}\n\n","entities\u002FBlock.ts",[23,1890,1891,1904,1916,1928,1940,1954,1967,1971,1985,1997,2014,2035,2058,2084,2096,2108,2112,2124,2148,2174,2189,2195,2202,2209,2214,2218,2222,2242,2253,2270,2274,2278,2282,2296,2303,2311,2321,2366,2385,2392,2401,2405,2409,2413,2428,2442,2456,2473,2484,2495,2499,2503],{"__ignoreMap":21},[26,1892,1893,1895,1898,1900,1902],{"class":28,"line":29},[26,1894,33],{"class":32},[26,1896,1897],{"class":36}," { Vec2, Vec3 } ",[26,1899,40],{"class":32},[26,1901,614],{"class":43},[26,1903,47],{"class":36},[26,1905,1906,1908,1910,1912,1914],{"class":28,"line":50},[26,1907,33],{"class":32},[26,1909,55],{"class":36},[26,1911,40],{"class":32},[26,1913,60],{"class":43},[26,1915,47],{"class":36},[26,1917,1918,1920,1922,1924,1926],{"class":28,"line":65},[26,1919,33],{"class":32},[26,1921,661],{"class":36},[26,1923,40],{"class":32},[26,1925,666],{"class":43},[26,1927,47],{"class":36},[26,1929,1930,1932,1934,1936,1938],{"class":28,"line":80},[26,1931,33],{"class":32},[26,1933,675],{"class":36},[26,1935,40],{"class":32},[26,1937,680],{"class":43},[26,1939,47],{"class":36},[26,1941,1942,1944,1947,1949,1952],{"class":28,"line":95},[26,1943,33],{"class":32},[26,1945,1946],{"class":36}," { BoxCollision } ",[26,1948,40],{"class":32},[26,1950,1951],{"class":43}," \"~\u002Fhelpers\u002Fsvgame\u002Flib\u002FBoxCollision\"",[26,1953,47],{"class":36},[26,1955,1956,1958,1961,1963,1965],{"class":28,"line":110},[26,1957,33],{"class":32},[26,1959,1960],{"class":36}," { createSquare, drawPolygons } ",[26,1962,40],{"class":32},[26,1964,694],{"class":43},[26,1966,47],{"class":36},[26,1968,1969],{"class":28,"line":125},[26,1970,159],{"emptyLinePlaceholder":158},[26,1972,1973,1975,1977,1979,1981,1983],{"class":28,"line":140},[26,1974,165],{"class":32},[26,1976,707],{"class":32},[26,1978,1619],{"class":171},[26,1980,712],{"class":32},[26,1982,715],{"class":171},[26,1984,197],{"class":36},[26,1986,1987,1990,1993,1995],{"class":28,"line":155},[26,1988,1989],{"class":181},"  ball",[26,1991,1992],{"class":32},"?:",[26,1994,365],{"class":171},[26,1996,47],{"class":36},[26,1998,1999,2002,2004,2006,2009,2011],{"class":28,"line":162},[26,2000,2001],{"class":181},"  vertices",[26,2003,185],{"class":32},[26,2005,729],{"class":171},[26,2007,2008],{"class":36},"[] ",[26,2010,1356],{"class":32},[26,2012,2013],{"class":36}," [];\n",[26,2015,2016,2018,2020,2022,2024,2026,2028,2030,2033],{"class":28,"line":200},[26,2017,722],{"class":181},[26,2019,175],{"class":32},[26,2021,212],{"class":32},[26,2023,729],{"class":171},[26,2025,732],{"class":36},[26,2027,735],{"class":206},[26,2029,738],{"class":36},[26,2031,2032],{"class":206},"60",[26,2034,236],{"class":36},[26,2036,2037,2040,2042,2044,2046,2048,2051,2053,2056],{"class":28,"line":221},[26,2038,2039],{"class":181},"  size",[26,2041,175],{"class":32},[26,2043,212],{"class":32},[26,2045,729],{"class":171},[26,2047,732],{"class":36},[26,2049,2050],{"class":206},"50",[26,2052,738],{"class":36},[26,2054,2055],{"class":206},"20",[26,2057,236],{"class":36},[26,2059,2060,2063,2065,2067,2070,2072,2074,2076,2078,2080,2082],{"class":28,"line":239},[26,2061,2062],{"class":181},"  color",[26,2064,175],{"class":32},[26,2066,212],{"class":32},[26,2068,2069],{"class":171}," Vec3",[26,2071,732],{"class":36},[26,2073,1457],{"class":206},[26,2075,738],{"class":36},[26,2077,1457],{"class":206},[26,2079,738],{"class":36},[26,2081,1457],{"class":206},[26,2083,236],{"class":36},[26,2085,2086,2089,2091,2094],{"class":28,"line":254},[26,2087,2088],{"class":181},"  collision",[26,2090,1992],{"class":32},[26,2092,2093],{"class":171}," BoxCollision",[26,2095,47],{"class":36},[26,2097,2098,2101,2103,2106],{"class":28,"line":269},[26,2099,2100],{"class":181},"  health",[26,2102,175],{"class":32},[26,2104,2105],{"class":206}," 1",[26,2107,47],{"class":36},[26,2109,2110],{"class":28,"line":284},[26,2111,159],{"emptyLinePlaceholder":158},[26,2113,2114,2116,2118,2120,2122],{"class":28,"line":289},[26,2115,801],{"class":171},[26,2117,175],{"class":32},[26,2119,1328],{"class":36},[26,2121,194],{"class":32},[26,2123,197],{"class":36},[26,2125,2126,2128,2131,2133,2136,2138,2140,2143,2145],{"class":28,"line":301},[26,2127,815],{"class":206},[26,2129,2130],{"class":36},".vertices ",[26,2132,1356],{"class":32},[26,2134,2135],{"class":171}," createSquare",[26,2137,732],{"class":36},[26,2139,827],{"class":206},[26,2141,2142],{"class":36},".position, ",[26,2144,827],{"class":206},[26,2146,2147],{"class":36},".size);\n",[26,2149,2150,2152,2155,2157,2159,2161,2163,2165,2168,2170,2172],{"class":28,"line":313},[26,2151,815],{"class":206},[26,2153,2154],{"class":36},".ball ",[26,2156,1356],{"class":32},[26,2158,995],{"class":206},[26,2160,1546],{"class":36},[26,2162,1549],{"class":171},[26,2164,1552],{"class":36},[26,2166,2167],{"class":171},"Ball",[26,2169,1558],{"class":36},[26,2171,370],{"class":43},[26,2173,236],{"class":36},[26,2175,2176,2178,2181,2183,2185,2187],{"class":28,"line":318},[26,2177,815],{"class":206},[26,2179,2180],{"class":36},".collision ",[26,2182,1356],{"class":32},[26,2184,212],{"class":32},[26,2186,2093],{"class":171},[26,2188,1538],{"class":36},[26,2190,2191,2193],{"class":28,"line":328},[26,2192,926],{"class":206},[26,2194,1569],{"class":36},[26,2196,2197,2199],{"class":28,"line":345},[26,2198,926],{"class":206},[26,2200,2201],{"class":36},".size,\n",[26,2203,2204,2206],{"class":28,"line":360},[26,2205,926],{"class":206},[26,2207,2208],{"class":36},".handleCollision,\n",[26,2210,2211],{"class":28,"line":375},[26,2212,2213],{"class":36},"    );\n",[26,2215,2216],{"class":28,"line":385},[26,2217,1210],{"class":36},[26,2219,2220],{"class":28,"line":391},[26,2221,159],{"emptyLinePlaceholder":158},[26,2223,2224,2226,2228,2230,2232,2234,2236,2238,2240],{"class":28,"line":400},[26,2225,955],{"class":171},[26,2227,175],{"class":32},[26,2229,178],{"class":36},[26,2231,891],{"class":181},[26,2233,185],{"class":32},[26,2235,886],{"class":206},[26,2237,191],{"class":36},[26,2239,194],{"class":32},[26,2241,197],{"class":36},[26,2243,2244,2246,2248,2250],{"class":28,"line":942},[26,2245,908],{"class":32},[26,2247,178],{"class":36},[26,2249,827],{"class":206},[26,2251,2252],{"class":36},".ball) {\n",[26,2254,2255,2257,2260,2263,2265,2267],{"class":28,"line":947},[26,2256,926],{"class":206},[26,2258,2259],{"class":36},".collision?.",[26,2261,2262],{"class":171},"checkCollision",[26,2264,732],{"class":36},[26,2266,827],{"class":206},[26,2268,2269],{"class":36},".ball?.position);\n",[26,2271,2272],{"class":28,"line":952},[26,2273,939],{"class":36},[26,2275,2276],{"class":28,"line":974},[26,2277,1210],{"class":36},[26,2279,2280],{"class":28,"line":980},[26,2281,159],{"emptyLinePlaceholder":158},[26,2283,2284,2286,2288,2290,2292,2294],{"class":28,"line":1001},[26,2285,1221],{"class":171},[26,2287,732],{"class":36},[26,2289,1226],{"class":181},[26,2291,185],{"class":32},[26,2293,886],{"class":206},[26,2295,898],{"class":36},[26,2297,2298,2301],{"class":28,"line":1013},[26,2299,2300],{"class":171},"    drawPolygons",[26,2302,1241],{"class":36},[26,2304,2305,2307,2309],{"class":28,"line":1018},[26,2306,1279],{"class":36},[26,2308,827],{"class":206},[26,2310,1284],{"class":36},[26,2312,2313,2316,2318],{"class":28,"line":1024},[26,2314,2315],{"class":36},"      vertices: [",[26,2317,827],{"class":206},[26,2319,2320],{"class":36},".vertices],\n",[26,2322,2323,2325,2328,2330,2332,2335,2337,2340,2342,2345,2348,2350,2352,2354,2356,2359,2361,2363],{"class":28,"line":1032},[26,2324,1257],{"class":36},[26,2326,2327],{"class":43},"`rgb(${",[26,2329,827],{"class":206},[26,2331,929],{"class":43},[26,2333,2334],{"class":36},"color",[26,2336,929],{"class":43},[26,2338,2339],{"class":36},"x",[26,2341,1460],{"class":32},[26,2343,2344],{"class":206}," 255",[26,2346,2347],{"class":43},"}, ${",[26,2349,827],{"class":206},[26,2351,929],{"class":43},[26,2353,2334],{"class":36},[26,2355,929],{"class":43},[26,2357,2358],{"class":36},"y",[26,2360,1460],{"class":32},[26,2362,2344],{"class":206},[26,2364,2365],{"class":43},"}, ${\n",[26,2367,2368,2371,2373,2375,2377,2380,2382],{"class":28,"line":1050},[26,2369,2370],{"class":206},"        this",[26,2372,929],{"class":43},[26,2374,2334],{"class":36},[26,2376,929],{"class":43},[26,2378,2379],{"class":36},"z",[26,2381,1460],{"class":32},[26,2383,2384],{"class":206}," 255\n",[26,2386,2387,2390],{"class":28,"line":1065},[26,2388,2389],{"class":43},"      })`",[26,2391,434],{"class":36},[26,2393,2394,2396,2398],{"class":28,"line":1071},[26,2395,1247],{"class":36},[26,2397,827],{"class":206},[26,2399,2400],{"class":36},".name,\n",[26,2402,2403],{"class":28,"line":1082},[26,2404,1301],{"class":36},[26,2406,2407],{"class":28,"line":1087},[26,2408,867],{"class":36},[26,2410,2411],{"class":28,"line":1092},[26,2412,159],{"emptyLinePlaceholder":158},[26,2414,2415,2417,2420,2422,2424,2426],{"class":28,"line":1098},[26,2416,1405],{"class":32},[26,2418,2419],{"class":171}," handleCollision",[26,2421,175],{"class":32},[26,2423,1328],{"class":36},[26,2425,194],{"class":32},[26,2427,197],{"class":36},[26,2429,2430,2432,2435,2438,2440],{"class":28,"line":1124},[26,2431,815],{"class":206},[26,2433,2434],{"class":36},".health ",[26,2436,2437],{"class":32},"-=",[26,2439,2105],{"class":206},[26,2441,47],{"class":36},[26,2443,2444,2446,2448,2450,2452,2454],{"class":28,"line":1130},[26,2445,815],{"class":206},[26,2447,818],{"class":36},[26,2449,1342],{"class":171},[26,2451,841],{"class":36},[26,2453,827],{"class":206},[26,2455,236],{"class":36},[26,2457,2458,2460,2462,2464,2466,2468,2471],{"class":28,"line":1142},[26,2459,908],{"class":32},[26,2461,178],{"class":36},[26,2463,827],{"class":206},[26,2465,2434],{"class":36},[26,2467,992],{"class":32},[26,2469,2470],{"class":206}," 0",[26,2472,898],{"class":36},[26,2474,2475,2477,2479,2481],{"class":28,"line":1154},[26,2476,926],{"class":206},[26,2478,818],{"class":36},[26,2480,1342],{"class":171},[26,2482,2483],{"class":36},"(BreakoutEvents.BlockBroken);\n",[26,2485,2486,2488,2490,2493],{"class":28,"line":1159},[26,2487,926],{"class":206},[26,2489,929],{"class":36},[26,2491,2492],{"class":171},"delete",[26,2494,768],{"class":36},[26,2496,2497],{"class":28,"line":1183},[26,2498,939],{"class":36},[26,2500,2501],{"class":28,"line":1189},[26,2502,1210],{"class":36},[26,2504,2505],{"class":28,"line":1207},[26,2506,511],{"class":36},[15,2508,2511],{"className":17,"code":2509,"filename":2510,"language":20,"meta":21,"style":21},"import { Vec2, Vec3 } from \"gl-matrix\u002Fdist\u002Fesm\";\nimport { Block } from \"~\u002Fhelpers\u002Fbreakout\u002Fentities\u002FBlock\";\nimport { Entity } from \"~\u002Fhelpers\u002Fsvgame\";\n\nexport class BlockSpawner extends Entity {\n  blocks: Block[] = [];\n  \u002F\u002F Define the number of rows and columns for the blocks\n  private readonly rows: number = 5;\n  private readonly columns: number = 10;\n\n  \u002F\u002F Block size\n  private readonly blockSize: Vec2 = Vec2.fromValues(60, 20); \u002F\u002F Example size, adjust as needed\n\n  setup() {\n    this.reset();\n  }\n\n  reset = () => {\n    for (const block of this.blocks) {\n      block.delete();\n    }\n    this.blocks = [];\n\n    \u002F\u002F Calculate the starting position and gap between blocks\n    const gap = 10; \u002F\u002F Gap between blocks\n    const startX =\n      (this.game.resolution.x -\n        (this.columns * this.blockSize[0] + (this.columns - 1) * gap)) \u002F\n      2;\n    const startY = this.game.resolution.y \u002F 4; \u002F\u002F Start from 1\u002F4th of the screen height\n\n    \u002F\u002F Create blocks in a grid pattern\n    for (let row = 0; row \u003C this.rows; row++) {\n      for (let col = 0; col \u003C this.columns; col++) {\n        \u002F\u002F Calculate position for each block\n        const x = startX + col * (this.blockSize[0] + gap);\n        const y = startY + row * (this.blockSize[1] + gap);\n        const position = Vec2.fromValues(x, y);\n\n        \u002F\u002F Create new block at the calculated position\n        const block = new Block(this.game, `block-${row * this.columns + col}`);\n        block.position = position;\n        block.color = new Vec3(Math.random(), Math.random(), Math.random());\n        this.blocks.push(block);\n      }\n    }\n\n    \u002F\u002F Add all blocks to the game\n    this.game.addEntities(this.blocks);\n  };\n}\n\n","entities\u002FBlockSpawner.ts",[23,2512,2513,2525,2537,2549,2553,2567,2582,2587,2608,2627,2631,2636,2671,2675,2681,2691,2695,2699,2711,2732,2741,2745,2756,2760,2765,2783,2793,2805,2851,2858,2883,2887,2892,2923,2953,2958,2992,3024,3040,3044,3049,3094,3104,3133,3146,3151,3155,3159,3164,3179,3183],{"__ignoreMap":21},[26,2514,2515,2517,2519,2521,2523],{"class":28,"line":29},[26,2516,33],{"class":32},[26,2518,1897],{"class":36},[26,2520,40],{"class":32},[26,2522,614],{"class":43},[26,2524,47],{"class":36},[26,2526,2527,2529,2531,2533,2535],{"class":28,"line":50},[26,2528,33],{"class":32},[26,2530,635],{"class":36},[26,2532,40],{"class":32},[26,2534,640],{"class":43},[26,2536,47],{"class":36},[26,2538,2539,2541,2543,2545,2547],{"class":28,"line":65},[26,2540,33],{"class":32},[26,2542,675],{"class":36},[26,2544,40],{"class":32},[26,2546,680],{"class":43},[26,2548,47],{"class":36},[26,2550,2551],{"class":28,"line":80},[26,2552,159],{"emptyLinePlaceholder":158},[26,2554,2555,2557,2559,2561,2563,2565],{"class":28,"line":95},[26,2556,165],{"class":32},[26,2558,707],{"class":32},[26,2560,350],{"class":171},[26,2562,712],{"class":32},[26,2564,715],{"class":171},[26,2566,197],{"class":36},[26,2568,2569,2572,2574,2576,2578,2580],{"class":28,"line":110},[26,2570,2571],{"class":181},"  blocks",[26,2573,185],{"class":32},[26,2575,1619],{"class":171},[26,2577,2008],{"class":36},[26,2579,1356],{"class":32},[26,2581,2013],{"class":36},[26,2583,2584],{"class":28,"line":125},[26,2585,2586],{"class":809},"  \u002F\u002F Define the number of rows and columns for the blocks\n",[26,2588,2589,2591,2594,2597,2599,2601,2603,2606],{"class":28,"line":140},[26,2590,1405],{"class":32},[26,2592,2593],{"class":32}," readonly",[26,2595,2596],{"class":181}," rows",[26,2598,185],{"class":32},[26,2600,886],{"class":206},[26,2602,175],{"class":32},[26,2604,2605],{"class":206}," 5",[26,2607,47],{"class":36},[26,2609,2610,2612,2614,2617,2619,2621,2623,2625],{"class":28,"line":155},[26,2611,1405],{"class":32},[26,2613,2593],{"class":32},[26,2615,2616],{"class":181}," columns",[26,2618,185],{"class":32},[26,2620,886],{"class":206},[26,2622,175],{"class":32},[26,2624,790],{"class":206},[26,2626,47],{"class":36},[26,2628,2629],{"class":28,"line":162},[26,2630,159],{"emptyLinePlaceholder":158},[26,2632,2633],{"class":28,"line":200},[26,2634,2635],{"class":809},"  \u002F\u002F Block size\n",[26,2637,2638,2640,2642,2645,2647,2649,2651,2654,2657,2659,2661,2663,2665,2668],{"class":28,"line":221},[26,2639,1405],{"class":32},[26,2641,2593],{"class":32},[26,2643,2644],{"class":181}," blockSize",[26,2646,185],{"class":32},[26,2648,729],{"class":171},[26,2650,175],{"class":32},[26,2652,2653],{"class":36}," Vec2.",[26,2655,2656],{"class":171},"fromValues",[26,2658,732],{"class":36},[26,2660,2032],{"class":206},[26,2662,738],{"class":36},[26,2664,2055],{"class":206},[26,2666,2667],{"class":36},"); ",[26,2669,2670],{"class":809},"\u002F\u002F Example size, adjust as needed\n",[26,2672,2673],{"class":28,"line":239},[26,2674,159],{"emptyLinePlaceholder":158},[26,2676,2677,2679],{"class":28,"line":254},[26,2678,801],{"class":171},[26,2680,804],{"class":36},[26,2682,2683,2685,2687,2689],{"class":28,"line":269},[26,2684,815],{"class":206},[26,2686,929],{"class":36},[26,2688,932],{"class":171},[26,2690,768],{"class":36},[26,2692,2693],{"class":28,"line":284},[26,2694,867],{"class":36},[26,2696,2697],{"class":28,"line":289},[26,2698,159],{"emptyLinePlaceholder":158},[26,2700,2701,2703,2705,2707,2709],{"class":28,"line":301},[26,2702,1323],{"class":171},[26,2704,175],{"class":32},[26,2706,1328],{"class":36},[26,2708,194],{"class":32},[26,2710,197],{"class":36},[26,2712,2713,2716,2718,2721,2724,2727,2729],{"class":28,"line":313},[26,2714,2715],{"class":32},"    for",[26,2717,178],{"class":36},[26,2719,2720],{"class":32},"const",[26,2722,2723],{"class":206}," block",[26,2725,2726],{"class":32}," of",[26,2728,995],{"class":206},[26,2730,2731],{"class":36},".blocks) {\n",[26,2733,2734,2737,2739],{"class":28,"line":318},[26,2735,2736],{"class":36},"      block.",[26,2738,2492],{"class":171},[26,2740,768],{"class":36},[26,2742,2743],{"class":28,"line":328},[26,2744,939],{"class":36},[26,2746,2747,2749,2752,2754],{"class":28,"line":345},[26,2748,815],{"class":206},[26,2750,2751],{"class":36},".blocks ",[26,2753,1356],{"class":32},[26,2755,2013],{"class":36},[26,2757,2758],{"class":28,"line":360},[26,2759,159],{"emptyLinePlaceholder":158},[26,2761,2762],{"class":28,"line":375},[26,2763,2764],{"class":809},"    \u002F\u002F Calculate the starting position and gap between blocks\n",[26,2766,2767,2770,2773,2775,2777,2780],{"class":28,"line":385},[26,2768,2769],{"class":32},"    const",[26,2771,2772],{"class":206}," gap",[26,2774,175],{"class":32},[26,2776,790],{"class":206},[26,2778,2779],{"class":36},"; ",[26,2781,2782],{"class":809},"\u002F\u002F Gap between blocks\n",[26,2784,2785,2787,2790],{"class":28,"line":391},[26,2786,2769],{"class":32},[26,2788,2789],{"class":206}," startX",[26,2791,2792],{"class":32}," =\n",[26,2794,2795,2798,2800,2802],{"class":28,"line":400},[26,2796,2797],{"class":36},"      (",[26,2799,827],{"class":206},[26,2801,1783],{"class":36},[26,2803,2804],{"class":32},"-\n",[26,2806,2807,2810,2812,2815,2818,2820,2823,2825,2828,2831,2833,2835,2837,2839,2841,2843,2845,2848],{"class":28,"line":942},[26,2808,2809],{"class":36},"        (",[26,2811,827],{"class":206},[26,2813,2814],{"class":36},".columns ",[26,2816,2817],{"class":32},"*",[26,2819,995],{"class":206},[26,2821,2822],{"class":36},".blockSize[",[26,2824,1376],{"class":206},[26,2826,2827],{"class":36},"] ",[26,2829,2830],{"class":32},"+",[26,2832,178],{"class":36},[26,2834,827],{"class":206},[26,2836,2814],{"class":36},[26,2838,1454],{"class":32},[26,2840,2105],{"class":206},[26,2842,191],{"class":36},[26,2844,2817],{"class":32},[26,2846,2847],{"class":36}," gap)) ",[26,2849,2850],{"class":32},"\u002F\n",[26,2852,2853,2856],{"class":28,"line":947},[26,2854,2855],{"class":206},"      2",[26,2857,47],{"class":36},[26,2859,2860,2862,2865,2867,2869,2872,2875,2878,2880],{"class":28,"line":952},[26,2861,2769],{"class":32},[26,2863,2864],{"class":206}," startY",[26,2866,175],{"class":32},[26,2868,995],{"class":206},[26,2870,2871],{"class":36},".game.resolution.y ",[26,2873,2874],{"class":32},"\u002F",[26,2876,2877],{"class":206}," 4",[26,2879,2779],{"class":36},[26,2881,2882],{"class":809},"\u002F\u002F Start from 1\u002F4th of the screen height\n",[26,2884,2885],{"class":28,"line":974},[26,2886,159],{"emptyLinePlaceholder":158},[26,2888,2889],{"class":28,"line":980},[26,2890,2891],{"class":809},"    \u002F\u002F Create blocks in a grid pattern\n",[26,2893,2894,2896,2898,2901,2904,2906,2908,2911,2913,2915,2918,2921],{"class":28,"line":1001},[26,2895,2715],{"class":32},[26,2897,178],{"class":36},[26,2899,2900],{"class":32},"let",[26,2902,2903],{"class":36}," row ",[26,2905,1356],{"class":32},[26,2907,2470],{"class":206},[26,2909,2910],{"class":36},"; row ",[26,2912,1552],{"class":32},[26,2914,995],{"class":206},[26,2916,2917],{"class":36},".rows; row",[26,2919,2920],{"class":32},"++",[26,2922,898],{"class":36},[26,2924,2925,2928,2930,2932,2935,2937,2939,2942,2944,2946,2949,2951],{"class":28,"line":1013},[26,2926,2927],{"class":32},"      for",[26,2929,178],{"class":36},[26,2931,2900],{"class":32},[26,2933,2934],{"class":36}," col ",[26,2936,1356],{"class":32},[26,2938,2470],{"class":206},[26,2940,2941],{"class":36},"; col ",[26,2943,1552],{"class":32},[26,2945,995],{"class":206},[26,2947,2948],{"class":36},".columns; col",[26,2950,2920],{"class":32},[26,2952,898],{"class":36},[26,2954,2955],{"class":28,"line":1018},[26,2956,2957],{"class":809},"        \u002F\u002F Calculate position for each block\n",[26,2959,2960,2963,2966,2968,2971,2973,2975,2977,2979,2981,2983,2985,2987,2989],{"class":28,"line":1024},[26,2961,2962],{"class":32},"        const",[26,2964,2965],{"class":206}," x",[26,2967,175],{"class":32},[26,2969,2970],{"class":36}," startX ",[26,2972,2830],{"class":32},[26,2974,2934],{"class":36},[26,2976,2817],{"class":32},[26,2978,178],{"class":36},[26,2980,827],{"class":206},[26,2982,2822],{"class":36},[26,2984,1376],{"class":206},[26,2986,2827],{"class":36},[26,2988,2830],{"class":32},[26,2990,2991],{"class":36}," gap);\n",[26,2993,2994,2996,2999,3001,3004,3006,3008,3010,3012,3014,3016,3018,3020,3022],{"class":28,"line":1032},[26,2995,2962],{"class":32},[26,2997,2998],{"class":206}," y",[26,3000,175],{"class":32},[26,3002,3003],{"class":36}," startY ",[26,3005,2830],{"class":32},[26,3007,2903],{"class":36},[26,3009,2817],{"class":32},[26,3011,178],{"class":36},[26,3013,827],{"class":206},[26,3015,2822],{"class":36},[26,3017,1457],{"class":206},[26,3019,2827],{"class":36},[26,3021,2830],{"class":32},[26,3023,2991],{"class":36},[26,3025,3026,3028,3031,3033,3035,3037],{"class":28,"line":1050},[26,3027,2962],{"class":32},[26,3029,3030],{"class":206}," position",[26,3032,175],{"class":32},[26,3034,2653],{"class":36},[26,3036,2656],{"class":171},[26,3038,3039],{"class":36},"(x, y);\n",[26,3041,3042],{"class":28,"line":1065},[26,3043,159],{"emptyLinePlaceholder":158},[26,3045,3046],{"class":28,"line":1071},[26,3047,3048],{"class":809},"        \u002F\u002F Create new block at the calculated position\n",[26,3050,3051,3053,3055,3057,3059,3061,3063,3065,3068,3071,3074,3076,3078,3080,3083,3086,3089,3092],{"class":28,"line":1082},[26,3052,2962],{"class":32},[26,3054,2723],{"class":206},[26,3056,175],{"class":32},[26,3058,212],{"class":32},[26,3060,1619],{"class":171},[26,3062,732],{"class":36},[26,3064,827],{"class":206},[26,3066,3067],{"class":36},".game, ",[26,3069,3070],{"class":43},"`block-${",[26,3072,3073],{"class":36},"row",[26,3075,1460],{"class":32},[26,3077,995],{"class":206},[26,3079,929],{"class":43},[26,3081,3082],{"class":36},"columns",[26,3084,3085],{"class":32}," +",[26,3087,3088],{"class":36}," col",[26,3090,3091],{"class":43},"}`",[26,3093,236],{"class":36},[26,3095,3096,3099,3101],{"class":28,"line":1087},[26,3097,3098],{"class":36},"        block.position ",[26,3100,1356],{"class":32},[26,3102,3103],{"class":36}," position;\n",[26,3105,3106,3109,3111,3113,3115,3118,3121,3124,3126,3128,3130],{"class":28,"line":1092},[26,3107,3108],{"class":36},"        block.color ",[26,3110,1356],{"class":32},[26,3112,212],{"class":32},[26,3114,2069],{"class":171},[26,3116,3117],{"class":36},"(Math.",[26,3119,3120],{"class":171},"random",[26,3122,3123],{"class":36},"(), Math.",[26,3125,3120],{"class":171},[26,3127,3123],{"class":36},[26,3129,3120],{"class":171},[26,3131,3132],{"class":36},"());\n",[26,3134,3135,3137,3140,3143],{"class":28,"line":1098},[26,3136,2370],{"class":206},[26,3138,3139],{"class":36},".blocks.",[26,3141,3142],{"class":171},"push",[26,3144,3145],{"class":36},"(block);\n",[26,3147,3148],{"class":28,"line":1124},[26,3149,3150],{"class":36},"      }\n",[26,3152,3153],{"class":28,"line":1130},[26,3154,939],{"class":36},[26,3156,3157],{"class":28,"line":1142},[26,3158,159],{"emptyLinePlaceholder":158},[26,3160,3161],{"class":28,"line":1154},[26,3162,3163],{"class":809},"    \u002F\u002F Add all blocks to the game\n",[26,3165,3166,3168,3170,3172,3174,3176],{"class":28,"line":1159},[26,3167,815],{"class":206},[26,3169,1546],{"class":36},[26,3171,295],{"class":171},[26,3173,732],{"class":36},[26,3175,827],{"class":206},[26,3177,3178],{"class":36},".blocks);\n",[26,3180,3181],{"class":28,"line":1183},[26,3182,1210],{"class":36},[26,3184,3185],{"class":28,"line":1189},[26,3186,511],{"class":36},[15,3188,3191],{"className":17,"code":3189,"filename":3190,"language":20,"meta":21,"style":21},"import { Vec2, Vec3 } from \"gl-matrix\u002Fdist\u002Fesm\";\nimport { BreakoutActions } from \"~\u002Fhelpers\u002Fbreakout\u002Factions\";\nimport { Ball } from \"~\u002Fhelpers\u002Fbreakout\u002Fentities\u002FBall\";\nimport { BreakoutEvents } from \"~\u002Fhelpers\u002Fbreakout\u002Fevents\";\nimport { Entity } from \"~\u002Fhelpers\u002Fsvgame\";\nimport { BoxCollision } from \"~\u002Fhelpers\u002Fsvgame\u002Flib\u002FBoxCollision\";\nimport { createSquare, drawPolygons } from \"~\u002Fhelpers\u002Fsvgame\u002Flib\u002Fdrawing\";\n\nexport class Paddle extends Entity {\n  ball?: Ball;\n  name = \"paddle\";\n  vertices: Vec2[] = [];\n  position = new Vec2(this.game.resolution.x \u002F 2, this.game.resolution.y - 30);\n  size = new Vec2(300, 20);\n  velocity = new Vec2();\n  speed = 2;\n  color = new Vec3(255, 255, 255);\n  collision?: BoxCollision;\n\n  setup() {\n    this.game.eventBus.on(BreakoutEvents.PaddleHit, this.paddleHit);\n    this.ball = this.game.getEntity\u003CBall>(\"ball\");\n    this.collision = new BoxCollision(\n      this.position,\n      this.size,\n      this.handleCollision,\n    );\n  }\n\n  begin(timestamp: number, delta: number) {\n    \u002F\u002F Handle input\n    \u002F\u002F Move Left\n    if (this.game.input.isActionPressed(BreakoutActions.MoveLeft)) {\n      this.velocity.add(new Vec2([-this.speed, 0]));\n    }\n    \u002F\u002F Move Right\n    if (this.game.input.isActionPressed(BreakoutActions.MoveRight)) {\n      this.velocity.add(new Vec2([this.speed, 0]));\n    }\n    \u002F\u002F Shoot the ball transferring velocity\n    if (this.game.input.isActionPressed(BreakoutActions.ShootBall)) {\n      this.game.eventBus.emit(BreakoutEvents.BallShot, this.velocity);\n    }\n  }\n\n  update(delta: number) {\n    if (this.ball) {\n      this.collision?.checkCollision(this.ball?.position);\n    }\n    this.velocity.scale(0.9);\n    this.position.add(this.velocity);\n    \u002F\u002F Bound to play space\n    this.position.x = Math.max(\n      this.size.x \u002F 2,\n      Math.min(this.position.x, this.game.resolution.x - this.size.x \u002F 2),\n    );\n    this.vertices = createSquare(this.position, this.size);\n    this.color.x = (Math.sin(this.game.time * 0.001) + 2) * 0.5;\n    this.color.y = (Math.cos(this.game.time * 0.001) + 2) * 0.5;\n    this.color.z = (Math.sin(-this.game.time * 0.001) + 2) * 0.5;\n  }\n\n  draw(interpolationPercentage: number) {\n    drawPolygons({\n      svg: this.game.svg,\n      vertices: [this.vertices],\n      fill: `rgb(${this.color.x * 255}, ${this.color.y * 255}, ${\n        this.color.z * 255\n      })`,\n      className: this.name,\n    });\n  }\n\n  private paddleHit = () => {};\n\n  private handleCollision = () => {\n    this.game.eventBus.emit(BreakoutEvents.PaddleHit, this);\n  };\n}\n\n","entities\u002FPaddle.ts",[23,3192,3193,3205,3217,3229,3241,3253,3265,3277,3281,3295,3305,3317,3331,3365,3386,3398,3408,3433,3443,3447,3453,3467,3491,3505,3511,3517,3523,3527,3531,3535,3557,3562,3567,3583,3612,3616,3621,3636,3660,3664,3669,3684,3698,3702,3706,3710,3724,3734,3748,3752,3767,3781,3786,3802,3815,3846,3850,3870,3912,3950,3989,3993,3997,4011,4017,4025,4033,4071,4087,4093,4101,4105,4109,4113,4128,4132,4146,4160,4164],{"__ignoreMap":21},[26,3194,3195,3197,3199,3201,3203],{"class":28,"line":29},[26,3196,33],{"class":32},[26,3198,1897],{"class":36},[26,3200,40],{"class":32},[26,3202,614],{"class":43},[26,3204,47],{"class":36},[26,3206,3207,3209,3211,3213,3215],{"class":28,"line":50},[26,3208,33],{"class":32},[26,3210,37],{"class":36},[26,3212,40],{"class":32},[26,3214,44],{"class":43},[26,3216,47],{"class":36},[26,3218,3219,3221,3223,3225,3227],{"class":28,"line":65},[26,3220,33],{"class":32},[26,3222,55],{"class":36},[26,3224,40],{"class":32},[26,3226,60],{"class":43},[26,3228,47],{"class":36},[26,3230,3231,3233,3235,3237,3239],{"class":28,"line":80},[26,3232,33],{"class":32},[26,3234,661],{"class":36},[26,3236,40],{"class":32},[26,3238,666],{"class":43},[26,3240,47],{"class":36},[26,3242,3243,3245,3247,3249,3251],{"class":28,"line":95},[26,3244,33],{"class":32},[26,3246,675],{"class":36},[26,3248,40],{"class":32},[26,3250,680],{"class":43},[26,3252,47],{"class":36},[26,3254,3255,3257,3259,3261,3263],{"class":28,"line":110},[26,3256,33],{"class":32},[26,3258,1946],{"class":36},[26,3260,40],{"class":32},[26,3262,1951],{"class":43},[26,3264,47],{"class":36},[26,3266,3267,3269,3271,3273,3275],{"class":28,"line":125},[26,3268,33],{"class":32},[26,3270,1960],{"class":36},[26,3272,40],{"class":32},[26,3274,694],{"class":43},[26,3276,47],{"class":36},[26,3278,3279],{"class":28,"line":140},[26,3280,159],{"emptyLinePlaceholder":158},[26,3282,3283,3285,3287,3289,3291,3293],{"class":28,"line":155},[26,3284,165],{"class":32},[26,3286,707],{"class":32},[26,3288,333],{"class":171},[26,3290,712],{"class":32},[26,3292,715],{"class":171},[26,3294,197],{"class":36},[26,3296,3297,3299,3301,3303],{"class":28,"line":162},[26,3298,1989],{"class":181},[26,3300,1992],{"class":32},[26,3302,365],{"class":171},[26,3304,47],{"class":36},[26,3306,3307,3310,3312,3315],{"class":28,"line":200},[26,3308,3309],{"class":181},"  name",[26,3311,175],{"class":32},[26,3313,3314],{"class":43}," \"paddle\"",[26,3316,47],{"class":36},[26,3318,3319,3321,3323,3325,3327,3329],{"class":28,"line":221},[26,3320,2001],{"class":181},[26,3322,185],{"class":32},[26,3324,729],{"class":171},[26,3326,2008],{"class":36},[26,3328,1356],{"class":32},[26,3330,2013],{"class":36},[26,3332,3333,3335,3337,3339,3341,3343,3345,3347,3349,3352,3354,3356,3358,3360,3363],{"class":28,"line":239},[26,3334,722],{"class":181},[26,3336,175],{"class":32},[26,3338,212],{"class":32},[26,3340,729],{"class":171},[26,3342,732],{"class":36},[26,3344,827],{"class":206},[26,3346,1783],{"class":36},[26,3348,2874],{"class":32},[26,3350,3351],{"class":206}," 2",[26,3353,738],{"class":36},[26,3355,827],{"class":206},[26,3357,2871],{"class":36},[26,3359,1454],{"class":32},[26,3361,3362],{"class":206}," 30",[26,3364,236],{"class":36},[26,3366,3367,3369,3371,3373,3375,3377,3380,3382,3384],{"class":28,"line":254},[26,3368,2039],{"class":181},[26,3370,175],{"class":32},[26,3372,212],{"class":32},[26,3374,729],{"class":171},[26,3376,732],{"class":36},[26,3378,3379],{"class":206},"300",[26,3381,738],{"class":36},[26,3383,2055],{"class":206},[26,3385,236],{"class":36},[26,3387,3388,3390,3392,3394,3396],{"class":28,"line":269},[26,3389,759],{"class":181},[26,3391,175],{"class":32},[26,3393,212],{"class":32},[26,3395,729],{"class":171},[26,3397,768],{"class":36},[26,3399,3400,3402,3404,3406],{"class":28,"line":284},[26,3401,785],{"class":181},[26,3403,175],{"class":32},[26,3405,3351],{"class":206},[26,3407,47],{"class":36},[26,3409,3410,3412,3414,3416,3418,3420,3423,3425,3427,3429,3431],{"class":28,"line":289},[26,3411,2062],{"class":181},[26,3413,175],{"class":32},[26,3415,212],{"class":32},[26,3417,2069],{"class":171},[26,3419,732],{"class":36},[26,3421,3422],{"class":206},"255",[26,3424,738],{"class":36},[26,3426,3422],{"class":206},[26,3428,738],{"class":36},[26,3430,3422],{"class":206},[26,3432,236],{"class":36},[26,3434,3435,3437,3439,3441],{"class":28,"line":301},[26,3436,2088],{"class":181},[26,3438,1992],{"class":32},[26,3440,2093],{"class":171},[26,3442,47],{"class":36},[26,3444,3445],{"class":28,"line":313},[26,3446,159],{"emptyLinePlaceholder":158},[26,3448,3449,3451],{"class":28,"line":318},[26,3450,801],{"class":171},[26,3452,804],{"class":36},[26,3454,3455,3457,3459,3461,3463,3465],{"class":28,"line":328},[26,3456,815],{"class":206},[26,3458,818],{"class":36},[26,3460,821],{"class":171},[26,3462,857],{"class":36},[26,3464,827],{"class":206},[26,3466,862],{"class":36},[26,3468,3469,3471,3473,3475,3477,3479,3481,3483,3485,3487,3489],{"class":28,"line":345},[26,3470,815],{"class":206},[26,3472,2154],{"class":36},[26,3474,1356],{"class":32},[26,3476,995],{"class":206},[26,3478,1546],{"class":36},[26,3480,1549],{"class":171},[26,3482,1552],{"class":36},[26,3484,2167],{"class":171},[26,3486,1558],{"class":36},[26,3488,370],{"class":43},[26,3490,236],{"class":36},[26,3492,3493,3495,3497,3499,3501,3503],{"class":28,"line":360},[26,3494,815],{"class":206},[26,3496,2180],{"class":36},[26,3498,1356],{"class":32},[26,3500,212],{"class":32},[26,3502,2093],{"class":171},[26,3504,1538],{"class":36},[26,3506,3507,3509],{"class":28,"line":375},[26,3508,926],{"class":206},[26,3510,1569],{"class":36},[26,3512,3513,3515],{"class":28,"line":385},[26,3514,926],{"class":206},[26,3516,2201],{"class":36},[26,3518,3519,3521],{"class":28,"line":391},[26,3520,926],{"class":206},[26,3522,2208],{"class":36},[26,3524,3525],{"class":28,"line":400},[26,3526,2213],{"class":36},[26,3528,3529],{"class":28,"line":942},[26,3530,867],{"class":36},[26,3532,3533],{"class":28,"line":947},[26,3534,159],{"emptyLinePlaceholder":158},[26,3536,3537,3539,3541,3543,3545,3547,3549,3551,3553,3555],{"class":28,"line":952},[26,3538,876],{"class":171},[26,3540,732],{"class":36},[26,3542,881],{"class":181},[26,3544,185],{"class":32},[26,3546,886],{"class":206},[26,3548,738],{"class":36},[26,3550,891],{"class":181},[26,3552,185],{"class":32},[26,3554,886],{"class":206},[26,3556,898],{"class":36},[26,3558,3559],{"class":28,"line":974},[26,3560,3561],{"class":809},"    \u002F\u002F Handle input\n",[26,3563,3564],{"class":28,"line":980},[26,3565,3566],{"class":809},"    \u002F\u002F Move Left\n",[26,3568,3569,3571,3573,3575,3577,3580],{"class":28,"line":1001},[26,3570,908],{"class":32},[26,3572,178],{"class":36},[26,3574,827],{"class":206},[26,3576,915],{"class":36},[26,3578,3579],{"class":171},"isActionPressed",[26,3581,3582],{"class":36},"(BreakoutActions.MoveLeft)) {\n",[26,3584,3585,3587,3589,3591,3593,3596,3598,3600,3602,3604,3607,3609],{"class":28,"line":1013},[26,3586,926],{"class":206},[26,3588,1164],{"class":36},[26,3590,1197],{"class":171},[26,3592,732],{"class":36},[26,3594,3595],{"class":32},"new",[26,3597,729],{"class":171},[26,3599,1373],{"class":36},[26,3601,1454],{"class":32},[26,3603,827],{"class":206},[26,3605,3606],{"class":36},".speed, ",[26,3608,1376],{"class":206},[26,3610,3611],{"class":36},"]));\n",[26,3613,3614],{"class":28,"line":1018},[26,3615,939],{"class":36},[26,3617,3618],{"class":28,"line":1024},[26,3619,3620],{"class":809},"    \u002F\u002F Move Right\n",[26,3622,3623,3625,3627,3629,3631,3633],{"class":28,"line":1032},[26,3624,908],{"class":32},[26,3626,178],{"class":36},[26,3628,827],{"class":206},[26,3630,915],{"class":36},[26,3632,3579],{"class":171},[26,3634,3635],{"class":36},"(BreakoutActions.MoveRight)) {\n",[26,3637,3638,3640,3642,3644,3646,3648,3650,3652,3654,3656,3658],{"class":28,"line":1050},[26,3639,926],{"class":206},[26,3641,1164],{"class":36},[26,3643,1197],{"class":171},[26,3645,732],{"class":36},[26,3647,3595],{"class":32},[26,3649,729],{"class":171},[26,3651,1373],{"class":36},[26,3653,827],{"class":206},[26,3655,3606],{"class":36},[26,3657,1376],{"class":206},[26,3659,3611],{"class":36},[26,3661,3662],{"class":28,"line":1065},[26,3663,939],{"class":36},[26,3665,3666],{"class":28,"line":1071},[26,3667,3668],{"class":809},"    \u002F\u002F Shoot the ball transferring velocity\n",[26,3670,3671,3673,3675,3677,3679,3681],{"class":28,"line":1082},[26,3672,908],{"class":32},[26,3674,178],{"class":36},[26,3676,827],{"class":206},[26,3678,915],{"class":36},[26,3680,3579],{"class":171},[26,3682,3683],{"class":36},"(BreakoutActions.ShootBall)) {\n",[26,3685,3686,3688,3690,3692,3694,3696],{"class":28,"line":1087},[26,3687,926],{"class":206},[26,3689,818],{"class":36},[26,3691,1342],{"class":171},[26,3693,824],{"class":36},[26,3695,827],{"class":206},[26,3697,1204],{"class":36},[26,3699,3700],{"class":28,"line":1092},[26,3701,939],{"class":36},[26,3703,3704],{"class":28,"line":1098},[26,3705,867],{"class":36},[26,3707,3708],{"class":28,"line":1124},[26,3709,159],{"emptyLinePlaceholder":158},[26,3711,3712,3714,3716,3718,3720,3722],{"class":28,"line":1130},[26,3713,955],{"class":171},[26,3715,732],{"class":36},[26,3717,891],{"class":181},[26,3719,185],{"class":32},[26,3721,886],{"class":206},[26,3723,898],{"class":36},[26,3725,3726,3728,3730,3732],{"class":28,"line":1142},[26,3727,908],{"class":32},[26,3729,178],{"class":36},[26,3731,827],{"class":206},[26,3733,2252],{"class":36},[26,3735,3736,3738,3740,3742,3744,3746],{"class":28,"line":1154},[26,3737,926],{"class":206},[26,3739,2259],{"class":36},[26,3741,2262],{"class":171},[26,3743,732],{"class":36},[26,3745,827],{"class":206},[26,3747,2269],{"class":36},[26,3749,3750],{"class":28,"line":1159},[26,3751,939],{"class":36},[26,3753,3754,3756,3758,3760,3762,3765],{"class":28,"line":1183},[26,3755,815],{"class":206},[26,3757,1164],{"class":36},[26,3759,1173],{"class":171},[26,3761,732],{"class":36},[26,3763,3764],{"class":206},"0.9",[26,3766,236],{"class":36},[26,3768,3769,3771,3773,3775,3777,3779],{"class":28,"line":1189},[26,3770,815],{"class":206},[26,3772,1194],{"class":36},[26,3774,1197],{"class":171},[26,3776,732],{"class":36},[26,3778,827],{"class":206},[26,3780,1204],{"class":36},[26,3782,3783],{"class":28,"line":1207},[26,3784,3785],{"class":809},"    \u002F\u002F Bound to play space\n",[26,3787,3788,3790,3792,3794,3797,3800],{"class":28,"line":1213},[26,3789,815],{"class":206},[26,3791,1037],{"class":36},[26,3793,1356],{"class":32},[26,3795,3796],{"class":36}," Math.",[26,3798,3799],{"class":171},"max",[26,3801,1538],{"class":36},[26,3803,3804,3806,3809,3811,3813],{"class":28,"line":1218},[26,3805,926],{"class":206},[26,3807,3808],{"class":36},".size.x ",[26,3810,2874],{"class":32},[26,3812,3351],{"class":206},[26,3814,434],{"class":36},[26,3816,3817,3820,3823,3825,3827,3830,3832,3834,3836,3838,3840,3842,3844],{"class":28,"line":1235},[26,3818,3819],{"class":36},"      Math.",[26,3821,3822],{"class":171},"min",[26,3824,732],{"class":36},[26,3826,827],{"class":206},[26,3828,3829],{"class":36},".position.x, ",[26,3831,827],{"class":206},[26,3833,1783],{"class":36},[26,3835,1454],{"class":32},[26,3837,995],{"class":206},[26,3839,3808],{"class":36},[26,3841,2874],{"class":32},[26,3843,3351],{"class":206},[26,3845,342],{"class":36},[26,3847,3848],{"class":28,"line":1244},[26,3849,2213],{"class":36},[26,3851,3852,3854,3856,3858,3860,3862,3864,3866,3868],{"class":28,"line":1254},[26,3853,815],{"class":206},[26,3855,2130],{"class":36},[26,3857,1356],{"class":32},[26,3859,2135],{"class":171},[26,3861,732],{"class":36},[26,3863,827],{"class":206},[26,3865,2142],{"class":36},[26,3867,827],{"class":206},[26,3869,2147],{"class":36},[26,3871,3872,3874,3877,3879,3882,3885,3887,3889,3892,3894,3897,3899,3901,3903,3905,3907,3910],{"class":28,"line":1265},[26,3873,815],{"class":206},[26,3875,3876],{"class":36},".color.x ",[26,3878,1356],{"class":32},[26,3880,3881],{"class":36}," (Math.",[26,3883,3884],{"class":171},"sin",[26,3886,732],{"class":36},[26,3888,827],{"class":206},[26,3890,3891],{"class":36},".game.time ",[26,3893,2817],{"class":32},[26,3895,3896],{"class":206}," 0.001",[26,3898,191],{"class":36},[26,3900,2830],{"class":32},[26,3902,3351],{"class":206},[26,3904,191],{"class":36},[26,3906,2817],{"class":32},[26,3908,3909],{"class":206}," 0.5",[26,3911,47],{"class":36},[26,3913,3914,3916,3919,3921,3923,3926,3928,3930,3932,3934,3936,3938,3940,3942,3944,3946,3948],{"class":28,"line":1276},[26,3915,815],{"class":206},[26,3917,3918],{"class":36},".color.y ",[26,3920,1356],{"class":32},[26,3922,3881],{"class":36},[26,3924,3925],{"class":171},"cos",[26,3927,732],{"class":36},[26,3929,827],{"class":206},[26,3931,3891],{"class":36},[26,3933,2817],{"class":32},[26,3935,3896],{"class":206},[26,3937,191],{"class":36},[26,3939,2830],{"class":32},[26,3941,3351],{"class":206},[26,3943,191],{"class":36},[26,3945,2817],{"class":32},[26,3947,3909],{"class":206},[26,3949,47],{"class":36},[26,3951,3952,3954,3957,3959,3961,3963,3965,3967,3969,3971,3973,3975,3977,3979,3981,3983,3985,3987],{"class":28,"line":1287},[26,3953,815],{"class":206},[26,3955,3956],{"class":36},".color.z ",[26,3958,1356],{"class":32},[26,3960,3881],{"class":36},[26,3962,3884],{"class":171},[26,3964,732],{"class":36},[26,3966,1454],{"class":32},[26,3968,827],{"class":206},[26,3970,3891],{"class":36},[26,3972,2817],{"class":32},[26,3974,3896],{"class":206},[26,3976,191],{"class":36},[26,3978,2830],{"class":32},[26,3980,3351],{"class":206},[26,3982,191],{"class":36},[26,3984,2817],{"class":32},[26,3986,3909],{"class":206},[26,3988,47],{"class":36},[26,3990,3991],{"class":28,"line":1298},[26,3992,867],{"class":36},[26,3994,3995],{"class":28,"line":1304},[26,3996,159],{"emptyLinePlaceholder":158},[26,3998,3999,4001,4003,4005,4007,4009],{"class":28,"line":1309},[26,4000,1221],{"class":171},[26,4002,732],{"class":36},[26,4004,1226],{"class":181},[26,4006,185],{"class":32},[26,4008,886],{"class":206},[26,4010,898],{"class":36},[26,4012,4013,4015],{"class":28,"line":1314},[26,4014,2300],{"class":171},[26,4016,1241],{"class":36},[26,4018,4019,4021,4023],{"class":28,"line":1320},[26,4020,1279],{"class":36},[26,4022,827],{"class":206},[26,4024,1284],{"class":36},[26,4026,4027,4029,4031],{"class":28,"line":1335},[26,4028,2315],{"class":36},[26,4030,827],{"class":206},[26,4032,2320],{"class":36},[26,4034,4035,4037,4039,4041,4043,4045,4047,4049,4051,4053,4055,4057,4059,4061,4063,4065,4067,4069],{"class":28,"line":1348},[26,4036,1257],{"class":36},[26,4038,2327],{"class":43},[26,4040,827],{"class":206},[26,4042,929],{"class":43},[26,4044,2334],{"class":36},[26,4046,929],{"class":43},[26,4048,2339],{"class":36},[26,4050,1460],{"class":32},[26,4052,2344],{"class":206},[26,4054,2347],{"class":43},[26,4056,827],{"class":206},[26,4058,929],{"class":43},[26,4060,2334],{"class":36},[26,4062,929],{"class":43},[26,4064,2358],{"class":36},[26,4066,1460],{"class":32},[26,4068,2344],{"class":206},[26,4070,2365],{"class":43},[26,4072,4073,4075,4077,4079,4081,4083,4085],{"class":28,"line":1363},[26,4074,2370],{"class":206},[26,4076,929],{"class":43},[26,4078,2334],{"class":36},[26,4080,929],{"class":43},[26,4082,2379],{"class":36},[26,4084,1460],{"class":32},[26,4086,2384],{"class":206},[26,4088,4089,4091],{"class":28,"line":1386},[26,4090,2389],{"class":43},[26,4092,434],{"class":36},[26,4094,4095,4097,4099],{"class":28,"line":1391},[26,4096,1247],{"class":36},[26,4098,827],{"class":206},[26,4100,2400],{"class":36},[26,4102,4103],{"class":28,"line":1396},[26,4104,1301],{"class":36},[26,4106,4107],{"class":28,"line":1402},[26,4108,867],{"class":36},[26,4110,4111],{"class":28,"line":1428},[26,4112,159],{"emptyLinePlaceholder":158},[26,4114,4115,4117,4119,4121,4123,4125],{"class":28,"line":1439},[26,4116,1405],{"class":32},[26,4118,1655],{"class":171},[26,4120,175],{"class":32},[26,4122,1328],{"class":36},[26,4124,194],{"class":32},[26,4126,4127],{"class":36}," {};\n",[26,4129,4130],{"class":28,"line":1473},[26,4131,159],{"emptyLinePlaceholder":158},[26,4133,4134,4136,4138,4140,4142,4144],{"class":28,"line":1478},[26,4135,1405],{"class":32},[26,4137,2419],{"class":171},[26,4139,175],{"class":32},[26,4141,1328],{"class":36},[26,4143,194],{"class":32},[26,4145,197],{"class":36},[26,4147,4148,4150,4152,4154,4156,4158],{"class":28,"line":1492},[26,4149,815],{"class":206},[26,4151,818],{"class":36},[26,4153,1342],{"class":171},[26,4155,857],{"class":36},[26,4157,827],{"class":206},[26,4159,236],{"class":36},[26,4161,4162],{"class":28,"line":1497},[26,4163,1210],{"class":36},[26,4165,4166],{"class":28,"line":1502},[26,4167,511],{"class":36},[15,4169,4172],{"className":17,"code":4170,"filename":4171,"language":20,"meta":21,"style":21},"import { Vec2 } from \"gl-matrix\u002Fdist\u002Fesm\";\nimport { BreakoutActions } from \"~\u002Fhelpers\u002Fbreakout\u002Factions\";\nimport { Entity } from \"~\u002Fhelpers\u002Fsvgame\";\nimport { drawText } from \"~\u002Fhelpers\u002Fsvgame\u002Flib\u002Fdrawing\";\n\nexport class PauseScreen extends Entity {\n  setup() {\n    this.game.input.registerAction(BreakoutActions.Pause, \"Escape\");\n  }\n\n  begin(timestamp: number, delta: number) {\n    \u002F\u002F Kinda wierd to put logic in draw but draw always runs\n    if (this.game.input.isActionJustPressed(BreakoutActions.Pause)) {\n      this.game.paused = !this.game.paused;\n    }\n  }\n\n  draw(interpolationPercentage: number) {\n    if (this.game.paused) {\n      drawText({\n        positions: [\n          new Vec2(\n            Number(this.game.svg.attr(\"width\")),\n            Number(this.game.svg.attr(\"height\")),\n          ).scale(0.5),\n        ],\n        className: \"pause-text\",\n        fill: \"#fff\",\n        fontSize: \"38px\",\n        svg: this.game.svg,\n        texts: [`PAUSED`],\n      }).attr(\"text-anchor\", \"middle\");\n      drawText({\n        positions: [\n          new Vec2(\n            Number(this.game.svg.attr(\"width\")),\n            Number(this.game.svg.attr(\"height\")),\n          )\n            .scale(0.5)\n            .sub([0, -50]),\n        ],\n        className: \"pause-instructions-text\",\n        fill: \"#fff\",\n        fontSize: \"18px\",\n        svg: this.game.svg,\n        texts: [`Press Esc to unpause`],\n      }).attr(\"text-anchor\", \"middle\");\n    }\n  }\n}\n\n","entities\u002FPauseScreen.ts",[23,4173,4174,4186,4198,4210,4223,4227,4241,4247,4263,4267,4271,4293,4298,4313,4330,4334,4338,4342,4356,4367,4374,4379,4388,4411,4430,4444,4449,4459,4468,4478,4487,4498,4517,4523,4527,4535,4553,4571,4576,4590,4609,4613,4622,4630,4639,4647,4656,4672,4676,4680],{"__ignoreMap":21},[26,4175,4176,4178,4180,4182,4184],{"class":28,"line":29},[26,4177,33],{"class":32},[26,4179,609],{"class":36},[26,4181,40],{"class":32},[26,4183,614],{"class":43},[26,4185,47],{"class":36},[26,4187,4188,4190,4192,4194,4196],{"class":28,"line":50},[26,4189,33],{"class":32},[26,4191,37],{"class":36},[26,4193,40],{"class":32},[26,4195,44],{"class":43},[26,4197,47],{"class":36},[26,4199,4200,4202,4204,4206,4208],{"class":28,"line":65},[26,4201,33],{"class":32},[26,4203,675],{"class":36},[26,4205,40],{"class":32},[26,4207,680],{"class":43},[26,4209,47],{"class":36},[26,4211,4212,4214,4217,4219,4221],{"class":28,"line":80},[26,4213,33],{"class":32},[26,4215,4216],{"class":36}," { drawText } ",[26,4218,40],{"class":32},[26,4220,694],{"class":43},[26,4222,47],{"class":36},[26,4224,4225],{"class":28,"line":95},[26,4226,159],{"emptyLinePlaceholder":158},[26,4228,4229,4231,4233,4235,4237,4239],{"class":28,"line":110},[26,4230,165],{"class":32},[26,4232,707],{"class":32},[26,4234,307],{"class":171},[26,4236,712],{"class":32},[26,4238,715],{"class":171},[26,4240,197],{"class":36},[26,4242,4243,4245],{"class":28,"line":125},[26,4244,801],{"class":171},[26,4246,804],{"class":36},[26,4248,4249,4251,4253,4255,4258,4261],{"class":28,"line":140},[26,4250,815],{"class":206},[26,4252,915],{"class":36},[26,4254,227],{"class":171},[26,4256,4257],{"class":36},"(BreakoutActions.Pause, ",[26,4259,4260],{"class":43},"\"Escape\"",[26,4262,236],{"class":36},[26,4264,4265],{"class":28,"line":155},[26,4266,867],{"class":36},[26,4268,4269],{"class":28,"line":162},[26,4270,159],{"emptyLinePlaceholder":158},[26,4272,4273,4275,4277,4279,4281,4283,4285,4287,4289,4291],{"class":28,"line":200},[26,4274,876],{"class":171},[26,4276,732],{"class":36},[26,4278,881],{"class":181},[26,4280,185],{"class":32},[26,4282,886],{"class":206},[26,4284,738],{"class":36},[26,4286,891],{"class":181},[26,4288,185],{"class":32},[26,4290,886],{"class":206},[26,4292,898],{"class":36},[26,4294,4295],{"class":28,"line":221},[26,4296,4297],{"class":809},"    \u002F\u002F Kinda wierd to put logic in draw but draw always runs\n",[26,4299,4300,4302,4304,4306,4308,4310],{"class":28,"line":239},[26,4301,908],{"class":32},[26,4303,178],{"class":36},[26,4305,827],{"class":206},[26,4307,915],{"class":36},[26,4309,918],{"class":171},[26,4311,4312],{"class":36},"(BreakoutActions.Pause)) {\n",[26,4314,4315,4317,4320,4322,4325,4327],{"class":28,"line":254},[26,4316,926],{"class":206},[26,4318,4319],{"class":36},".game.paused ",[26,4321,1356],{"class":32},[26,4323,4324],{"class":32}," !",[26,4326,827],{"class":206},[26,4328,4329],{"class":36},".game.paused;\n",[26,4331,4332],{"class":28,"line":269},[26,4333,939],{"class":36},[26,4335,4336],{"class":28,"line":284},[26,4337,867],{"class":36},[26,4339,4340],{"class":28,"line":289},[26,4341,159],{"emptyLinePlaceholder":158},[26,4343,4344,4346,4348,4350,4352,4354],{"class":28,"line":301},[26,4345,1221],{"class":171},[26,4347,732],{"class":36},[26,4349,1226],{"class":181},[26,4351,185],{"class":32},[26,4353,886],{"class":206},[26,4355,898],{"class":36},[26,4357,4358,4360,4362,4364],{"class":28,"line":313},[26,4359,908],{"class":32},[26,4361,178],{"class":36},[26,4363,827],{"class":206},[26,4365,4366],{"class":36},".game.paused) {\n",[26,4368,4369,4372],{"class":28,"line":318},[26,4370,4371],{"class":171},"      drawText",[26,4373,1241],{"class":36},[26,4375,4376],{"class":28,"line":328},[26,4377,4378],{"class":36},"        positions: [\n",[26,4380,4381,4384,4386],{"class":28,"line":345},[26,4382,4383],{"class":32},"          new",[26,4385,729],{"class":171},[26,4387,1538],{"class":36},[26,4389,4390,4393,4395,4397,4400,4403,4405,4408],{"class":28,"line":360},[26,4391,4392],{"class":171},"            Number",[26,4394,732],{"class":36},[26,4396,827],{"class":206},[26,4398,4399],{"class":36},".game.svg.",[26,4401,4402],{"class":171},"attr",[26,4404,732],{"class":36},[26,4406,4407],{"class":43},"\"width\"",[26,4409,4410],{"class":36},")),\n",[26,4412,4413,4415,4417,4419,4421,4423,4425,4428],{"class":28,"line":375},[26,4414,4392],{"class":171},[26,4416,732],{"class":36},[26,4418,827],{"class":206},[26,4420,4399],{"class":36},[26,4422,4402],{"class":171},[26,4424,732],{"class":36},[26,4426,4427],{"class":43},"\"height\"",[26,4429,4410],{"class":36},[26,4431,4432,4435,4437,4439,4442],{"class":28,"line":385},[26,4433,4434],{"class":36},"          ).",[26,4436,1173],{"class":171},[26,4438,732],{"class":36},[26,4440,4441],{"class":206},"0.5",[26,4443,342],{"class":36},[26,4445,4446],{"class":28,"line":391},[26,4447,4448],{"class":36},"        ],\n",[26,4450,4451,4454,4457],{"class":28,"line":400},[26,4452,4453],{"class":36},"        className: ",[26,4455,4456],{"class":43},"\"pause-text\"",[26,4458,434],{"class":36},[26,4460,4461,4464,4466],{"class":28,"line":942},[26,4462,4463],{"class":36},"        fill: ",[26,4465,1260],{"class":43},[26,4467,434],{"class":36},[26,4469,4470,4473,4476],{"class":28,"line":947},[26,4471,4472],{"class":36},"        fontSize: ",[26,4474,4475],{"class":43},"\"38px\"",[26,4477,434],{"class":36},[26,4479,4480,4483,4485],{"class":28,"line":952},[26,4481,4482],{"class":36},"        svg: ",[26,4484,827],{"class":206},[26,4486,1284],{"class":36},[26,4488,4489,4492,4495],{"class":28,"line":974},[26,4490,4491],{"class":36},"        texts: [",[26,4493,4494],{"class":43},"`PAUSED`",[26,4496,4497],{"class":36},"],\n",[26,4499,4500,4503,4505,4507,4510,4512,4515],{"class":28,"line":980},[26,4501,4502],{"class":36},"      }).",[26,4504,4402],{"class":171},[26,4506,732],{"class":36},[26,4508,4509],{"class":43},"\"text-anchor\"",[26,4511,738],{"class":36},[26,4513,4514],{"class":43},"\"middle\"",[26,4516,236],{"class":36},[26,4518,4519,4521],{"class":28,"line":1001},[26,4520,4371],{"class":171},[26,4522,1241],{"class":36},[26,4524,4525],{"class":28,"line":1013},[26,4526,4378],{"class":36},[26,4528,4529,4531,4533],{"class":28,"line":1018},[26,4530,4383],{"class":32},[26,4532,729],{"class":171},[26,4534,1538],{"class":36},[26,4536,4537,4539,4541,4543,4545,4547,4549,4551],{"class":28,"line":1024},[26,4538,4392],{"class":171},[26,4540,732],{"class":36},[26,4542,827],{"class":206},[26,4544,4399],{"class":36},[26,4546,4402],{"class":171},[26,4548,732],{"class":36},[26,4550,4407],{"class":43},[26,4552,4410],{"class":36},[26,4554,4555,4557,4559,4561,4563,4565,4567,4569],{"class":28,"line":1032},[26,4556,4392],{"class":171},[26,4558,732],{"class":36},[26,4560,827],{"class":206},[26,4562,4399],{"class":36},[26,4564,4402],{"class":171},[26,4566,732],{"class":36},[26,4568,4427],{"class":43},[26,4570,4410],{"class":36},[26,4572,4573],{"class":28,"line":1050},[26,4574,4575],{"class":36},"          )\n",[26,4577,4578,4581,4583,4585,4587],{"class":28,"line":1065},[26,4579,4580],{"class":36},"            .",[26,4582,1173],{"class":171},[26,4584,732],{"class":36},[26,4586,4441],{"class":206},[26,4588,4589],{"class":36},")\n",[26,4591,4592,4594,4596,4598,4600,4602,4604,4606],{"class":28,"line":1071},[26,4593,4580],{"class":36},[26,4595,1578],{"class":171},[26,4597,1373],{"class":36},[26,4599,1376],{"class":206},[26,4601,738],{"class":36},[26,4603,1454],{"class":32},[26,4605,2050],{"class":206},[26,4607,4608],{"class":36},"]),\n",[26,4610,4611],{"class":28,"line":1082},[26,4612,4448],{"class":36},[26,4614,4615,4617,4620],{"class":28,"line":1087},[26,4616,4453],{"class":36},[26,4618,4619],{"class":43},"\"pause-instructions-text\"",[26,4621,434],{"class":36},[26,4623,4624,4626,4628],{"class":28,"line":1092},[26,4625,4463],{"class":36},[26,4627,1260],{"class":43},[26,4629,434],{"class":36},[26,4631,4632,4634,4637],{"class":28,"line":1098},[26,4633,4472],{"class":36},[26,4635,4636],{"class":43},"\"18px\"",[26,4638,434],{"class":36},[26,4640,4641,4643,4645],{"class":28,"line":1124},[26,4642,4482],{"class":36},[26,4644,827],{"class":206},[26,4646,1284],{"class":36},[26,4648,4649,4651,4654],{"class":28,"line":1130},[26,4650,4491],{"class":36},[26,4652,4653],{"class":43},"`Press Esc to unpause`",[26,4655,4497],{"class":36},[26,4657,4658,4660,4662,4664,4666,4668,4670],{"class":28,"line":1142},[26,4659,4502],{"class":36},[26,4661,4402],{"class":171},[26,4663,732],{"class":36},[26,4665,4509],{"class":43},[26,4667,738],{"class":36},[26,4669,4514],{"class":43},[26,4671,236],{"class":36},[26,4673,4674],{"class":28,"line":1154},[26,4675,939],{"class":36},[26,4677,4678],{"class":28,"line":1159},[26,4679,867],{"class":36},[26,4681,4682],{"class":28,"line":1183},[26,4683,511],{"class":36},[15,4685,4688],{"className":17,"code":4686,"filename":4687,"language":20,"meta":21,"style":21},"import { Vec2 } from \"gl-matrix\u002Fdist\u002Fesm\";\nimport { BlockSpawner } from \"~\u002Fhelpers\u002Fbreakout\u002Fentities\u002FBlockSpawner\";\nimport { BreakoutEvents } from \"~\u002Fhelpers\u002Fbreakout\u002Fevents\";\nimport { Entity } from \"~\u002Fhelpers\u002Fsvgame\";\nimport { drawText } from \"~\u002Fhelpers\u002Fsvgame\u002Flib\u002Fdrawing\";\n\nexport class ScoreText extends Entity {\n  score = 0;\n  lives = 3;\n  setup() {\n    const blockSpawner = this.game.getEntity\u003CBlockSpawner>(\"block-spawner\")!;\n    this.game.eventBus.on(BreakoutEvents.BlockBroken, () => {\n      this.score++;\n      if (this.score >= blockSpawner.blocks.length) {\n        this.game.eventBus.emit(BreakoutEvents.Win);\n        this.game.paused = true;\n      }\n    });\n    this.game.eventBus.on(BreakoutEvents.Death, () => {\n      this.lives--;\n      if (this.lives \u003C= 0) {\n        this.game.eventBus.emit(BreakoutEvents.Lose, this.score);\n        this.score = 0;\n        this.lives = 3;\n        blockSpawner.reset();\n      }\n    });\n  }\n\n  draw(interpolationPercentage: number) {\n    drawText({\n      positions: [new Vec2(100, 40)],\n      className: \"lives-text\",\n      fill: \"#fff\",\n      fontSize: \"16px\",\n      svg: this.game.svg,\n      texts: [`Lives: ${this.lives}`],\n    }).attr(\"text-anchor\", \"middle\");\n    drawText({\n      positions: [new Vec2(100, 20)],\n      className: \"score-text\",\n      fill: \"#fff\",\n      fontSize: \"16px\",\n      svg: this.game.svg,\n      texts: [`Score: ${this.score}`],\n    }).attr(\"text-anchor\", \"middle\");\n  }\n}\n\n","entities\u002FScoreText.ts",[23,4689,4690,4702,4714,4726,4738,4750,4754,4768,4779,4791,4797,4827,4842,4853,4875,4886,4898,4902,4906,4921,4933,4950,4966,4978,4990,4999,5003,5007,5011,5015,5029,5036,5057,5066,5074,5084,5092,5111,5128,5134,5152,5161,5169,5177,5185,5203,5219,5223],{"__ignoreMap":21},[26,4691,4692,4694,4696,4698,4700],{"class":28,"line":29},[26,4693,33],{"class":32},[26,4695,609],{"class":36},[26,4697,40],{"class":32},[26,4699,614],{"class":43},[26,4701,47],{"class":36},[26,4703,4704,4706,4708,4710,4712],{"class":28,"line":50},[26,4705,33],{"class":32},[26,4707,70],{"class":36},[26,4709,40],{"class":32},[26,4711,75],{"class":43},[26,4713,47],{"class":36},[26,4715,4716,4718,4720,4722,4724],{"class":28,"line":65},[26,4717,33],{"class":32},[26,4719,661],{"class":36},[26,4721,40],{"class":32},[26,4723,666],{"class":43},[26,4725,47],{"class":36},[26,4727,4728,4730,4732,4734,4736],{"class":28,"line":80},[26,4729,33],{"class":32},[26,4731,675],{"class":36},[26,4733,40],{"class":32},[26,4735,680],{"class":43},[26,4737,47],{"class":36},[26,4739,4740,4742,4744,4746,4748],{"class":28,"line":95},[26,4741,33],{"class":32},[26,4743,4216],{"class":36},[26,4745,40],{"class":32},[26,4747,694],{"class":43},[26,4749,47],{"class":36},[26,4751,4752],{"class":28,"line":110},[26,4753,159],{"emptyLinePlaceholder":158},[26,4755,4756,4758,4760,4762,4764,4766],{"class":28,"line":125},[26,4757,165],{"class":32},[26,4759,707],{"class":32},[26,4761,380],{"class":171},[26,4763,712],{"class":32},[26,4765,715],{"class":171},[26,4767,197],{"class":36},[26,4769,4770,4773,4775,4777],{"class":28,"line":140},[26,4771,4772],{"class":181},"  score",[26,4774,175],{"class":32},[26,4776,2470],{"class":206},[26,4778,47],{"class":36},[26,4780,4781,4784,4786,4789],{"class":28,"line":155},[26,4782,4783],{"class":181},"  lives",[26,4785,175],{"class":32},[26,4787,4788],{"class":206}," 3",[26,4790,47],{"class":36},[26,4792,4793,4795],{"class":28,"line":162},[26,4794,801],{"class":171},[26,4796,804],{"class":36},[26,4798,4799,4801,4804,4806,4808,4810,4812,4814,4817,4819,4821,4823,4825],{"class":28,"line":200},[26,4800,2769],{"class":32},[26,4802,4803],{"class":206}," blockSpawner",[26,4805,175],{"class":32},[26,4807,995],{"class":206},[26,4809,1546],{"class":36},[26,4811,1549],{"class":171},[26,4813,1552],{"class":36},[26,4815,4816],{"class":171},"BlockSpawner",[26,4818,1558],{"class":36},[26,4820,355],{"class":43},[26,4822,1563],{"class":36},[26,4824,1566],{"class":32},[26,4826,47],{"class":36},[26,4828,4829,4831,4833,4835,4838,4840],{"class":28,"line":221},[26,4830,815],{"class":206},[26,4832,818],{"class":36},[26,4834,821],{"class":171},[26,4836,4837],{"class":36},"(BreakoutEvents.BlockBroken, () ",[26,4839,194],{"class":32},[26,4841,197],{"class":36},[26,4843,4844,4846,4849,4851],{"class":28,"line":239},[26,4845,926],{"class":206},[26,4847,4848],{"class":36},".score",[26,4850,2920],{"class":32},[26,4852,47],{"class":36},[26,4854,4855,4858,4860,4862,4865,4867,4870,4873],{"class":28,"line":254},[26,4856,4857],{"class":32},"      if",[26,4859,178],{"class":36},[26,4861,827],{"class":206},[26,4863,4864],{"class":36},".score ",[26,4866,1057],{"class":32},[26,4868,4869],{"class":36}," blockSpawner.blocks.",[26,4871,4872],{"class":206},"length",[26,4874,898],{"class":36},[26,4876,4877,4879,4881,4883],{"class":28,"line":269},[26,4878,2370],{"class":206},[26,4880,818],{"class":36},[26,4882,1342],{"class":171},[26,4884,4885],{"class":36},"(BreakoutEvents.Win);\n",[26,4887,4888,4890,4892,4894,4896],{"class":28,"line":284},[26,4889,2370],{"class":206},[26,4891,4319],{"class":36},[26,4893,1356],{"class":32},[26,4895,778],{"class":206},[26,4897,47],{"class":36},[26,4899,4900],{"class":28,"line":289},[26,4901,3150],{"class":36},[26,4903,4904],{"class":28,"line":301},[26,4905,1301],{"class":36},[26,4907,4908,4910,4912,4914,4917,4919],{"class":28,"line":313},[26,4909,815],{"class":206},[26,4911,818],{"class":36},[26,4913,821],{"class":171},[26,4915,4916],{"class":36},"(BreakoutEvents.Death, () ",[26,4918,194],{"class":32},[26,4920,197],{"class":36},[26,4922,4923,4925,4928,4931],{"class":28,"line":318},[26,4924,926],{"class":206},[26,4926,4927],{"class":36},".lives",[26,4929,4930],{"class":32},"--",[26,4932,47],{"class":36},[26,4934,4935,4937,4939,4941,4944,4946,4948],{"class":28,"line":328},[26,4936,4857],{"class":32},[26,4938,178],{"class":36},[26,4940,827],{"class":206},[26,4942,4943],{"class":36},".lives ",[26,4945,992],{"class":32},[26,4947,2470],{"class":206},[26,4949,898],{"class":36},[26,4951,4952,4954,4956,4958,4961,4963],{"class":28,"line":345},[26,4953,2370],{"class":206},[26,4955,818],{"class":36},[26,4957,1342],{"class":171},[26,4959,4960],{"class":36},"(BreakoutEvents.Lose, ",[26,4962,827],{"class":206},[26,4964,4965],{"class":36},".score);\n",[26,4967,4968,4970,4972,4974,4976],{"class":28,"line":360},[26,4969,2370],{"class":206},[26,4971,4864],{"class":36},[26,4973,1356],{"class":32},[26,4975,2470],{"class":206},[26,4977,47],{"class":36},[26,4979,4980,4982,4984,4986,4988],{"class":28,"line":375},[26,4981,2370],{"class":206},[26,4983,4943],{"class":36},[26,4985,1356],{"class":32},[26,4987,4788],{"class":206},[26,4989,47],{"class":36},[26,4991,4992,4995,4997],{"class":28,"line":385},[26,4993,4994],{"class":36},"        blockSpawner.",[26,4996,932],{"class":171},[26,4998,768],{"class":36},[26,5000,5001],{"class":28,"line":391},[26,5002,3150],{"class":36},[26,5004,5005],{"class":28,"line":400},[26,5006,1301],{"class":36},[26,5008,5009],{"class":28,"line":942},[26,5010,867],{"class":36},[26,5012,5013],{"class":28,"line":947},[26,5014,159],{"emptyLinePlaceholder":158},[26,5016,5017,5019,5021,5023,5025,5027],{"class":28,"line":952},[26,5018,1221],{"class":171},[26,5020,732],{"class":36},[26,5022,1226],{"class":181},[26,5024,185],{"class":32},[26,5026,886],{"class":206},[26,5028,898],{"class":36},[26,5030,5031,5034],{"class":28,"line":974},[26,5032,5033],{"class":171},"    drawText",[26,5035,1241],{"class":36},[26,5037,5038,5040,5042,5044,5046,5049,5051,5054],{"class":28,"line":980},[26,5039,1290],{"class":36},[26,5041,3595],{"class":32},[26,5043,729],{"class":171},[26,5045,732],{"class":36},[26,5047,5048],{"class":206},"100",[26,5050,738],{"class":36},[26,5052,5053],{"class":206},"40",[26,5055,5056],{"class":36},")],\n",[26,5058,5059,5061,5064],{"class":28,"line":1001},[26,5060,1247],{"class":36},[26,5062,5063],{"class":43},"\"lives-text\"",[26,5065,434],{"class":36},[26,5067,5068,5070,5072],{"class":28,"line":1013},[26,5069,1257],{"class":36},[26,5071,1260],{"class":43},[26,5073,434],{"class":36},[26,5075,5076,5079,5082],{"class":28,"line":1018},[26,5077,5078],{"class":36},"      fontSize: ",[26,5080,5081],{"class":43},"\"16px\"",[26,5083,434],{"class":36},[26,5085,5086,5088,5090],{"class":28,"line":1024},[26,5087,1279],{"class":36},[26,5089,827],{"class":206},[26,5091,1284],{"class":36},[26,5093,5094,5097,5100,5102,5104,5107,5109],{"class":28,"line":1032},[26,5095,5096],{"class":36},"      texts: [",[26,5098,5099],{"class":43},"`Lives: ${",[26,5101,827],{"class":206},[26,5103,929],{"class":43},[26,5105,5106],{"class":36},"lives",[26,5108,3091],{"class":43},[26,5110,4497],{"class":36},[26,5112,5113,5116,5118,5120,5122,5124,5126],{"class":28,"line":1050},[26,5114,5115],{"class":36},"    }).",[26,5117,4402],{"class":171},[26,5119,732],{"class":36},[26,5121,4509],{"class":43},[26,5123,738],{"class":36},[26,5125,4514],{"class":43},[26,5127,236],{"class":36},[26,5129,5130,5132],{"class":28,"line":1065},[26,5131,5033],{"class":171},[26,5133,1241],{"class":36},[26,5135,5136,5138,5140,5142,5144,5146,5148,5150],{"class":28,"line":1071},[26,5137,1290],{"class":36},[26,5139,3595],{"class":32},[26,5141,729],{"class":171},[26,5143,732],{"class":36},[26,5145,5048],{"class":206},[26,5147,738],{"class":36},[26,5149,2055],{"class":206},[26,5151,5056],{"class":36},[26,5153,5154,5156,5159],{"class":28,"line":1082},[26,5155,1247],{"class":36},[26,5157,5158],{"class":43},"\"score-text\"",[26,5160,434],{"class":36},[26,5162,5163,5165,5167],{"class":28,"line":1087},[26,5164,1257],{"class":36},[26,5166,1260],{"class":43},[26,5168,434],{"class":36},[26,5170,5171,5173,5175],{"class":28,"line":1092},[26,5172,5078],{"class":36},[26,5174,5081],{"class":43},[26,5176,434],{"class":36},[26,5178,5179,5181,5183],{"class":28,"line":1098},[26,5180,1279],{"class":36},[26,5182,827],{"class":206},[26,5184,1284],{"class":36},[26,5186,5187,5189,5192,5194,5196,5199,5201],{"class":28,"line":1124},[26,5188,5096],{"class":36},[26,5190,5191],{"class":43},"`Score: ${",[26,5193,827],{"class":206},[26,5195,929],{"class":43},[26,5197,5198],{"class":36},"score",[26,5200,3091],{"class":43},[26,5202,4497],{"class":36},[26,5204,5205,5207,5209,5211,5213,5215,5217],{"class":28,"line":1130},[26,5206,5115],{"class":36},[26,5208,4402],{"class":171},[26,5210,732],{"class":36},[26,5212,4509],{"class":43},[26,5214,738],{"class":36},[26,5216,4514],{"class":43},[26,5218,236],{"class":36},[26,5220,5221],{"class":28,"line":1142},[26,5222,867],{"class":36},[26,5224,5225],{"class":28,"line":1154},[26,5226,511],{"class":36},[15,5228,5231],{"className":17,"code":5229,"filename":5230,"language":20,"meta":21,"style":21},"import { Vec2 } from \"gl-matrix\u002Fdist\u002Fesm\";\nimport { Entity } from \"~\u002Fhelpers\u002Fsvgame\";\nimport { drawText } from \"~\u002Fhelpers\u002Fsvgame\u002Flib\u002Fdrawing\";\n\nexport class ScreenFPS extends Entity {\n  draw(interpolationPercentage: number) {\n    drawText({\n      positions: [new Vec2(1100, 20)],\n      className: \"debug-text\",\n      fill: \"#fff\",\n      fontSize: \"16px\",\n      svg: this.game.svg,\n      texts: [`FPS: ${this.game.loop.getFPS().toFixed(1)}`],\n    }).attr(\"text-anchor\", \"middle\");\n  }\n}\n\n","entities\u002FScreenFPS.ts",[23,5232,5233,5245,5257,5269,5273,5287,5301,5307,5326,5335,5343,5351,5359,5398,5414,5418],{"__ignoreMap":21},[26,5234,5235,5237,5239,5241,5243],{"class":28,"line":29},[26,5236,33],{"class":32},[26,5238,609],{"class":36},[26,5240,40],{"class":32},[26,5242,614],{"class":43},[26,5244,47],{"class":36},[26,5246,5247,5249,5251,5253,5255],{"class":28,"line":50},[26,5248,33],{"class":32},[26,5250,675],{"class":36},[26,5252,40],{"class":32},[26,5254,680],{"class":43},[26,5256,47],{"class":36},[26,5258,5259,5261,5263,5265,5267],{"class":28,"line":65},[26,5260,33],{"class":32},[26,5262,4216],{"class":36},[26,5264,40],{"class":32},[26,5266,694],{"class":43},[26,5268,47],{"class":36},[26,5270,5271],{"class":28,"line":80},[26,5272,159],{"emptyLinePlaceholder":158},[26,5274,5275,5277,5279,5281,5283,5285],{"class":28,"line":95},[26,5276,165],{"class":32},[26,5278,707],{"class":32},[26,5280,323],{"class":171},[26,5282,712],{"class":32},[26,5284,715],{"class":171},[26,5286,197],{"class":36},[26,5288,5289,5291,5293,5295,5297,5299],{"class":28,"line":110},[26,5290,1221],{"class":171},[26,5292,732],{"class":36},[26,5294,1226],{"class":181},[26,5296,185],{"class":32},[26,5298,886],{"class":206},[26,5300,898],{"class":36},[26,5302,5303,5305],{"class":28,"line":125},[26,5304,5033],{"class":171},[26,5306,1241],{"class":36},[26,5308,5309,5311,5313,5315,5317,5320,5322,5324],{"class":28,"line":140},[26,5310,1290],{"class":36},[26,5312,3595],{"class":32},[26,5314,729],{"class":171},[26,5316,732],{"class":36},[26,5318,5319],{"class":206},"1100",[26,5321,738],{"class":36},[26,5323,2055],{"class":206},[26,5325,5056],{"class":36},[26,5327,5328,5330,5333],{"class":28,"line":155},[26,5329,1247],{"class":36},[26,5331,5332],{"class":43},"\"debug-text\"",[26,5334,434],{"class":36},[26,5336,5337,5339,5341],{"class":28,"line":162},[26,5338,1257],{"class":36},[26,5340,1260],{"class":43},[26,5342,434],{"class":36},[26,5344,5345,5347,5349],{"class":28,"line":200},[26,5346,5078],{"class":36},[26,5348,5081],{"class":43},[26,5350,434],{"class":36},[26,5352,5353,5355,5357],{"class":28,"line":221},[26,5354,1279],{"class":36},[26,5356,827],{"class":206},[26,5358,1284],{"class":36},[26,5360,5361,5363,5366,5368,5370,5373,5375,5378,5380,5383,5385,5388,5390,5392,5394,5396],{"class":28,"line":239},[26,5362,5096],{"class":36},[26,5364,5365],{"class":43},"`FPS: ${",[26,5367,827],{"class":206},[26,5369,929],{"class":43},[26,5371,5372],{"class":36},"game",[26,5374,929],{"class":43},[26,5376,5377],{"class":36},"loop",[26,5379,929],{"class":43},[26,5381,5382],{"class":171},"getFPS",[26,5384,1170],{"class":43},[26,5386,5387],{"class":171},"toFixed",[26,5389,732],{"class":43},[26,5391,1457],{"class":206},[26,5393,1563],{"class":43},[26,5395,3091],{"class":43},[26,5397,4497],{"class":36},[26,5399,5400,5402,5404,5406,5408,5410,5412],{"class":28,"line":254},[26,5401,5115],{"class":36},[26,5403,4402],{"class":171},[26,5405,732],{"class":36},[26,5407,4509],{"class":43},[26,5409,738],{"class":36},[26,5411,4514],{"class":43},[26,5413,236],{"class":36},[26,5415,5416],{"class":28,"line":269},[26,5417,867],{"class":36},[26,5419,5420],{"class":28,"line":284},[26,5421,511],{"class":36},[5423,5424,5425],"style",{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":21,"searchDepth":50,"depth":50,"links":5427},[5428,5429],{"id":12,"depth":50,"text":13},{"id":595,"depth":50,"text":596},"md",{},"\u002Fcode\u002Fbreakout",{"description":21},"code\u002Fbreakout","rSvnW4yuhK8cCj68uJq7XtUyR-gV-KJgMe1j8PP32MU",1776025306606]