{"version":3,"sources":["src/domain/Atom/AtomConfig.js","src/app/Atom/AtomService.js","src/domain/Building/Building.js","src/domain/Building/BuildingConfig.js","src/domain/Flasher/Flasher.js","src/domain/Flasher/FlasherConfig.js","src/app/Flasher/FlasherService.js","src/app/Building/BuildingTiles.js","src/app/Building/BuildingService.js","src/domain/Rain/RainConfig.js","src/app/Rain/RainService.js","src/domain/ShootingStar/ShootingStar.js","src/domain/ShootingStar/ShootingStarConfig.js","src/app/ShootingStar/ShootingStarService.js","src/domain/Star/StarConfig.js","src/app/Star/StarService.js","src/app/App.js","src/index.js"],"names":["AtomConfig","background","timerRateMs","AtomService","config","Building","beginX","height","style","width","zCoordinate","BuildingConfig","color","count","heightPercent","maxWidth","minWidth","pixelsPerUpdate","Flasher","on","time","x","y","FlasherConfig","enabled","periodMs","FlasherService","props","flasher","blackOutFlasher","atomService","context","beginPath","arc","Math","PI","fillStyle","fill","buildingTiles","tileHeight","length","tileWidth","buildingStyleCount","BuildingService","buildings","flasherService","canvas","buildingIndex","buildingHeightOffset","buildingHeightRange","potentialX","potentialY","tileX","tileY","pixelsOn","floor","random","getTopBuilding","fillRect","canvasX","canvasY","buildingRight","buildingTop","frontBuilding","maxZ","checkSanity","maxActualHeight","maxHeight","tallestBuilding","ceil","building","pow","push","setFlasherAtTop","sortByX","minX","minXIndex","swap","index2","RainConfig","dropsPerUpdate","RainService","rainX","rainY","dropIndex","lineWidth","strokeStyle","moveTo","lineTo","stroke","ShootingStar","active","duration","startX","startY","velocityX","velocityY","ShootingStarConfig","maxDurationMs","maxPeriodMs","maxSpeedX","maxSpeedY","minSpeedY","ShootingStarService","shootingStar","buildingService","currentX","currentY","maxStarY","newX","newY","StarConfig","starsPerUpdate","StarService","starX","starY","starIndex","r","g","b","App","stop","offsetWidth","offsetHeight","rect","init","update","rainService","shootingStarService","starService","drawStars","drawBuildings","drawRain","drawShootingStar","drawFlasher","requestAnimationFrame","window","callback","setTimeout","w","onload","document","getElementById","getContext","app","onresize"],"mappings":"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jF,KAAL,CDEA,ECFa,CDEC,CAAd,SDDSqE,IFOAtC,CIRT;AJSF,AEPA,ACCE,ACFA,AKHJ,IHAaoE,GHKJjB,ACFAI,MDEL,GAAc,CAAd,GCFA,GAAqB,EEHZa,EFGT,WEFF,sBAAc;ARWd,AOXF,AFKI,ACFA,AEHY,OHKP3F,ACFA+E,IDEL,GAAY,CAAZ,GCFA,GAAmB,KNQTxE,AMRV,KNQF,EAAmB;AAAA,AKLjB,ACFA,AKJJ,ONMSoE,ACFAK,SDEL,ACFA,GDEiB,ACFA,GDEjB,ACFA;ACHJ,AEFA,AJQI,ACFA,AEJA,OHMKJ,ACFAK,AEJAW,SHML,ACFA,GDEiB,ACFA,EEJjB,CHMA,ACFA,EEJsB,EAAtB;ARWA,AKJD,ACFC,AEJD,AGDH,OLKSjG,ENMAY,KAAL,CMNA,ENMaA,CMNG,CAAhB,GNMA;AUbJ,AHGA,AEFA,AHOI,OAAK2E,SAAL,GAAiB,GAAjB;ANOA,AMND,AKNH,SXYSlG,MAAL,GAAc,kCAAd;AUdJ,ARiBE,AEPA,AGPF,uBHOcuB,IFOAA,CEPZ,EAAmB,EFOnB,EAAmB;AAAA,AFDjB,AINiB,AOPrB,SXaSC,OAAL,GAAe,sBAAf;AUfJ,AVgBG,ISfUqF,sBAAAA;APgBT,AEPA,AKRF,AECF,STcStF,AEPAA,KFOL,AEPA,GFOaA,AEPAA,KFOb,AEPA;AMTJ,AViBE,IOdW4E,8BAAAA;ALeT,AEPA,AGPF,AIDF,STeS3D,AEPAxC,MAAL,GFOA,AEPc,GFOG,CAAC,wBAAD,AEPjB,CFOA;AQjBJ,ANWG;AFQC,ASfJ,STeSA,MAAL,GAAc,oCAAd;AQlBJ,ARmBG,AEPD,AORF;AACA;ATgBE,AOfA,uBAAYuB,KAAZ,EAAmB;AAAA,AECrB6G,OAAOD,qBAAP,GACEC,GXUc,IWVPD,qBAAP,IACC,WAAC,yBAA0BE,QAA3B;AXUC,AWVD,IDPUjB,KCQTgB,CXSI3G,MWTG6G,EDRElB,QCQT,CAAkBiB,CXSI,KAAtB,EWTA,EAA4B,OAAO,EAAnC,CADD;ADND,AHOA,AEHE,AEED,CAFH,QFAS9G,KAAL,GAAaA,KAAb,SFGUA,KAAZ,EAAmB;APWjB,AOXiB,UPWb,KAAKvB,MAAL,CAAYoB,OAAZ,KAAwB,KAA5B,EAAmC;AACjC,ASbF,AEGJ,SFHSpB,ITaEwB,ESbP,GAAc,ETaZ,CAAaT,EAAb,GAAkB,KAAlB,eSbF;ATcE,AOZF,AEDD,AEGH,IAAMwH,IAAIH,CJFD7G,KAAL,AIEJ,GJFiBA,KAAb,SHKS;AJQR,AIPD,UAAIuD,QAAQ,CAAZ,iBFOc;AAAA,AENd,AGLA,AIEJyD,EAAEC,MAAF,CJFSxI,CHKD+E,COHG,IJFP,GHKY,AGLE,CLYsB,AEPpC,IOHkB,CTUuBxD,KAD3B,iCKXd;ALWc,AFNF,AWFd,UTSUI,OADM,EFEmB,KAAKJ,GED9BI,EFPI,KEME;AAAA,AFNF,AIFH,AGDT,AIEF,MAAMe,GJFC0D,CLUY3D,AFCTf,KWTK,IPGoB,EJFrB,AOHZ,GLSc,AEJwBH,AGLlB,KHCX,EJUDG,CSdE,CEKuB+G,CTQhBhG,QFPL,AWD8BiG,MTO5B,QKTd,AIEiC,CAAwB,MAAxB,CAAnC;ATOgB,AFNF,AIFH,AGAV,AEJW,UTcW/G,AINbD,OJFI,ESLyB,ELG5B,GKHiCH,GTarBI,CEAKA,COdhB,ELQFD,GJFI,EEQsBgB,MAFpB,AERL;AFQK,AERL,AKJC,AEOZ,UTOUvC,AENawB,AKPb0E,MPWM,CERL,QKJC,ELQW1E,OAJZ,CFUDxB,AObAkG,MPWM,SOZJ;APYI,AERL,AGEX,AENY,AEQZ,MAAM1E,ITMYtB,AObSsB,KPWX,CSJA,CFRJ,UACeA,CLQCA,MFKVtB,AOdN,AEQwBqC,EPCAA,GFGpB,ESJ2BiG,CPJhC,SOIyB,CAAkB,IAAlB,CAApC;AXQE,AIZS,UAKDxI,CJOHqB,KIZI,EJYT,CAAaR,IAAb,IAAqBU,QIPbvB,IJOyBH,EIZxB,IJYY,CAAmBF,WAAxC;AUbF,AVcE,AIbS,AKFT,AEQF,UXOM,AIRYO,AKPZyG,KCCMvF,AVcDC,AIbA,GKFG,CAAZ,CCCF,EAAmB,AVcb,CAAaR,IAAb,IAAqB,GIRTX,EJQcL,GIbrB,GJagB,CAAYqB,QAArC,EAA+C;AUd9B,ARajB,AFEE,ASfF,UPaIsB,AObAoE,GTeGvF,KSfK,CAAZ,CTeE,CAAaR,IAAb,CEFkB,CAApB,EFEuB,KAAKhB,MAAL,CAAYqB,QAAjC;AEDF,AFEE,AWPJ,MAAMK,ITKEkB,EFEA,KAAKpB,GWPO,IXOZ,CAAaT,EAAb,KAAoB,CEFG0B,IFE3B,EAA+B,SEFWjB,ESL9C,KTK+B,CAAuBN,CAApD;AQbA,ARcA,AFEI,AITJ,AKNA,SCDKK,CRcCsB,CENJ,GMRF,CVgBSrB,AIRHwD,EMROzD,KAAb,AVgBI,CAAaR,EAAb,EIRc,CJQI,AITtB,EAEEiE,EFK0B7E,AFExB,SEFiCyC,CELvB,KAAK5C,MAAL,CAAY4E,OFK1B,OEPA,EAGEI,WAHF,EAIE;AFIF,AFEG,AILDrD,AKVF,AEQF,SXKI,CEAEmB,KFEK,CILCmC,OFGO,CAAjB,CEHE,GACE,KAAKjF,MAAL,CAAYY,QAAZ,GACAkB,KAAKqB,KAAL,CACErB,KAAKsB,MAAL,MAAiB,KAAKpD,MAAL,CAAYW,QAAZ,GAAuB,KAAKX,MAAL,CAAYY,QAApD,CADF,CAFF;AMVF,ARcA,AFEI,ASfJ,SCDKyG,CRcDtE,GQdJ,EVgBSvB,CUhBG,IAAZ,EVgBI,CEFa,AFEAT,CEFjB,CFEI,GAAkB,KAAlB,MOba;AGFlB,ARcC,AFEIU,AIDFqD,AGbe,AIOnB,MAAMrC,ITKArC,MECM0B,EFDE,CAAZ,AKXkD,EHYnCqB,EONM,CJNkC5B,EHY7C,CAAWO,CJCC,COdL,GPcb,AIDsBsB,MAAL,KAAgB/C,KAA3B,CAAR,SONsC;ATMxC,AFEG,AIDD0E,AGde,AETP,AEiBVrD,UTKIsB,AKZItB,MHaEI,EFDE,CAAZ,EECeqB,AGdE,KHcP,CAAWrB,CKdKH,AEOc,GJNhCD,CHakB0B,IKdQV,ELcb,IGdJ,AETP,CLuB2BvC,MAA3B,CAAR;AFAF,AFEC,AOhBgB,AETP,AEkBVwB,UTKIsB,AKbiBoD,AEDblG,MATE,EPuBE,CAAZ,MKdiB,UACIkG,AEDblG,MATE,SFSO;AHgBfwB,AGhBe,AETP,AEgB8B,GAAnB,CAAvB,MJNwCA,AEDtBtB,KATN,CLyBA6E,CGhBO,UHgBf,AGfoCvD,GHedD,IGhBP,AEADrB,KATN,GLyB0BL,MAAZ,CAAmBH,UAAzC;AFAF,AFEA,AIDE8B,AGjBe,UPkBb,CEFC,IAAIuB,AFEA1B,CIDCI,MJCN,CAAab,EAAb,AIDF,CFDkB,CQhBf,ARgBL,CKd0BY,CLcHuB,CFEC,KAApB,COhB8BR,GPgBDjB,CEFC,EKhBjB,GLgBsBzB,MAAL,CAAYa,OFEO,KAArD,EAA4D,CEF5D,EAA+DqC,UAA/D,EAA2E;AQhBtE,ARiBHJ,AFEAnB,AIDAA,AGlBe,AIYnB,MAAMgG,IJVIxH,MPiBEyB,AIDAuD,AGlBO,GGCiC,CCWhC,CTKHrD,CECb,CAAegD,CMjBsCvD,CVkBrD,CEFkB4B,EEClB,CMlBG,CNkBmB4B,CFDT,CAAWjD,GECxB,AGhBM3B,ELeuBiD,IKjBd,ELiBS,KAAgB/C,CSLR,ITKnB,CAAb;AQjBG,ARkBH0C,AFEApB,AIDAA,AGnBe,AEEjB,AEWAD,UDZQA,AHCQrB,CECd,IFHe,AEGX2G,CTiBInF,AIDAuD,GJCR,CAAY,CUpBT,ARmBDxC,CEAF,CAAekC,EJCEtD,ESjBD,CADlB,AEUkC,EFRhCwF,CCHMtF,ANkBiB,CJCX,AIDZ,CJCyBT,CAAzB,AID0B8D,AGjBZ1E,EPkBc,GOpBb,EPoBkBmB,CUpB9B,ANmB+B,AKftB,CLeZ,CFAyBM,GOfR9B,CTgBW,CEDEmD,AFCWjC,CAAzC,EAA4C,CShBhC,CPea,AOfD0F,CPeY9E,AFCpC,EAAiD,CAAjD,EEDyCsB,AFCW,IAAItB,EEDpB,EOjBtC,CTkB+DC,CSf7DiF,CPcoDnE,AFCpD,EAAiE,KAAjE,GSlBF,EAIE,OPayB,CADzB;AQlBG,ANoBHlB,AKbAmF,AEOFnF,UDbqB0E,MNmBXhB,AKbAvD,KAAKqB,CLab,GMpBG,CDOK,CAAWrB,KAAKsB,GCNLiD,GDMA,KAAgBhG,KAA3B,CAAR,CCPG;AAAA,ARqBHsC,AFCA,AIDD,AOTiC,GAAhB,CAApB,MDXwChB,EVqBhC,KUtBD,AVsBMH,OEDO,AFCZ,CAAaT,EUrBmBY,AVqBhC,EEDiB0B,GFCG,EUtBrB,GVsBH,EAA+B,IEDf,CAAoBP,UAApB,EAAgCC,UAAhC,CAAhB;AACA,AFCEpB,AIDL,AGlBC,AEKE,UFLE2E,ELkBE3D,MFCMX,GOnBG,CAAf,KPmBI,GEDoB,AFCA,CEDC,CAAvB,EAA0B,CFCChC,MAAL,CAAYQ,KAAhC;AEAA,AFCD,AOnBH,AEKE,AEOJ,SXKI,COjBE+F,KPmBK,MOnBM,CAAf;AGFA5E,ARqBG,AFCCA,AOnBJ,AEKE,UFLI6E,IGHE9D,IVsBIV,EUtBZ,CAAe3B,AHIbF,KGJF,CVsBI,EUtBmBwB,CVsBCD,AOlBbvB,OGJoBuC,EHIX2D,GPkBgBrG,CUtBb,CAAesH,IVsBd,CAAmBzH,MUtB3C,AHIoCG,IPkBhC,EOlBgB,CAAuBU,aAAhC,GAAgD,GAAhD,4BADX;AGFAiB,AVsBG,AOlBH,AEIE,AEOJ,MAAM0E,IJXAI,IGJI/D,GHIG,CAAX,EGJA,CAAevC,GCeO,GDftB,GAAwBwB,QAAQe,MAAR,CAAe6E,YAAvC,ICe0C;ATOxCvE,AKjBF,AIWArB,UJXI+E,MLiBM,CAAC5D,AKjBA,CAAX,EIU0C,UTOlB,KAAKN,SAAL,CAAeG,aAAf,EAA8BzC,MAA5C,4BAAR;AQpBFyB,ARqBEsB,AFCAtB,ASdAoF,AEOFtE,cDfQ+E,ERqBEzE,AFCAd,ASdAH,ECRV,CAAa,CAAb,AVsBE,CSdaqB,CCRC,CAAhB,EAAmBxB,CDQT,CAAWG,KAAKqC,CCRCzB,EDQN,CAASZ,GCRX,CAAezB,CDQC+C,ICRnC,EAAyCzB,ADQX,EAAT,EAAwB,CAAxB,EPanB,CQrB+Ce,CDQCvC,KCRT,CAAeA,ADQ9C,CAAR,KCRF;AACAwB,ARqBEvB,AFCD,AOlBD,AIQ0C,GAApB,CAAxB,UDZU4B,ERqBE,KAAKQ,EQrBf,GAAoBd,IRqBV,CAAeiB,OQrBO3C,MAAZ,ARqBV,CQrB6BH,CRqBCO,KAAtC,IQrBF;AACAuB,ARqBE,AFCH,AOlBC,AEIE,YPaI,AObA0E,ECREpE,IAAR,UDQsBoB,aPaFjD,CObd,CAA+B0G,GPa/B,EAAqB7D,AObrB,EAAsC8D,GPatC,EAA4B/D,AOb5B,KPaA,CObiD,CAAC,CAAtD,EAAyD,CPad,CAA3C,EAA8C;AAC5C,AKjBJ,AEII,AEON;ADdEqD,ARqBG,AKjBH,AEIG,sBCRaoB,IAAhB;ACgBF,MAAMG,sBAAsB,6CAAwB;ADdlD,ARqBEjG,AKjBF,AEIE,AEOFD,UJXI,EEIIuF,GFJCb,CLiBCpE,AObEF,KAAKqB,IPaf,CObU,CFJR,AEImBrB,CPaD,AKjBAyD,AIU4B,IFNtBnC,CPaDpD,CKjBvB,IEImB,CPaD,AKjBW,CLiBCQ,GObK,CFJvC,CLiBE,CKjBsC,AEI5B,CAAV;ACPF,ARqBEmB,AKjBA,AEIA,AEOF0E,YFPQa,IPaE5D,AObExB,KAAKqB,GPaf,CAAiBL,CObP,CAAWhB,KAAKsB,GPa1B,CSRgD,CTQnBL,CObR,KAAgB,GAA3B,CPaV,AObA,EPayC,CAAzC,EAA4C,CAA5C;AQpBF,ARqBC,AKjBC,AEIA,AEOFpB,YFPQwF,IAAIrF,KAAKqB,KAAL,CAAWrB,KAAKsB,MAAL,KAAgB,GAA3B,CAAV;APcH,AKjBG,AIOgD,GAAxB,CAA5B;ADVE,AHIE,AEIAzB,WCRG+F,KDQK1F,CCRV,QDQE,GAAoB,SAASiF,CAAT,GAAa,IAAb,GAAoBC,CAApB,GAAwB,IAAxB,GAA+BC,CAA/B,GAAmC,GAAvD;ACPH,ARqBD,AObIxF,AEOJ,MAAMkG,UFPMvE,IEOQ,IFPhB,CAAiBwD,KAAjB,EAAwBC,KAAxB,EAA+B,CAA/B,EAAkC,CAAlC,MEOgC;AJVhC,AEID,AEODV,YJXM,KAAKD,YAAL,CAAkBpF,IAAlB,EIU4B,EJVFU,YAAY1B,MAAZ,CAAmBF,WAAjD,EAA8D;AAC5D,AEIL,AEOC6B,eJXSyE,YAAL,CAAkBpF,IAAlB,GAAyB,CAAzB;AACA,AIQ8B,GAAhB,CAApB,WJRWoF,YAAL,CAAkBb,CGLf,KHKH,GAA2B,IAA3B;AGLG;AHOH,AIWN;ADjBE,AHOI,WGPC8B,IAAL,GAAY,KAAZ;AHQI,AIWN,MAAMuB,MAAM,aAAQ;ADpBX,AHUH,AIWJlH,oBDZI,KAAKH,GCWS,EDpBX;AAAA,ACsBP8E,UDlBEA,eAJK,URyBM9C,CQrBX8C,ACgBgB,QTKI7C,OQzBf,ERyBwB;AQzBxB,AR0BP,AKdI,AIWJ7B,UDlBEc,ARqBEgB,KKdK2C,KIQS,IDpBX,ER0Ba,CAApB,AKdI,CAAkBX,MAAlB,CGPFhD,E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","file":"src.82f9e9bb.map","sourceRoot":"..","sourcesContent":["export class AtomConfig {\n  constructor() {\n    this.background = \"rgb(0, 0, 0)\";\n    this.timerRateMs = 1000 / 60;\n  }\n}\n","import { AtomConfig } from \"../../domain/Atom/AtomConfig\";\n\nexport class AtomService {\n  constructor() {\n    this.config = new AtomConfig();\n  }\n}\n","export class Building {\n  constructor() {\n    this.beginX = 0;\n    this.height = 0;\n    this.style = 0;\n    this.width = 0;\n    this.zCoordinate = 0;\n  }\n}\n","export class BuildingConfig {\n  constructor() {\n    this.color = \"rgb(248, 241, 3)\";\n    this.count = 100;\n    this.heightPercent = 50; // 35\n    this.maxWidth = 18;\n    this.minWidth = 5;\n    this.pixelsPerUpdate = 15;\n  }\n}\n","export class Flasher {\n  constructor() {\n    this.on = false;\n    this.time = 0;\n    this.x = 0;\n    this.y = 0;\n  }\n}\n","export class FlasherConfig {\n  constructor() {\n    this.color = \"rgb(190, 0, 0)\";\n    this.enabled = true;\n    this.periodMs = 1700;\n  }\n}\n","import { Flasher } from \"../../domain/Flasher/Flasher\";\nimport { FlasherConfig } from \"../../domain/Flasher/FlasherConfig\";\nimport { AtomService } from \"../Atom/AtomService\";\n\nexport class FlasherService {\n  /**\n   * @typedef IProps\n   * @property {AtomService} atomService\n   * @property {CanvasRenderingContext2D} context\n   *\n   * @param {IProps} props\n   */\n  constructor(props) {\n    this.props = props;\n\n    this.config = new FlasherConfig();\n\n    this.flasher = new Flasher();\n  }\n\n  /**\n   * Draw the flasher if enabled.\n   */\n  drawFlasher() {\n    let blackOutFlasher = false;\n\n    if (this.config.enabled === false) {\n      this.flasher.on = false;\n      return;\n    }\n\n    const { atomService, context } = this.props;\n\n    this.flasher.time += atomService.config.timerRateMs;\n    if (this.flasher.time >= this.config.periodMs) {\n      this.flasher.time -= this.config.periodMs;\n      if (this.flasher.on === false) {\n        this.flasher.on = true;\n      } else {\n        this.flasher.on = false;\n        blackOutFlasher = true;\n      }\n    }\n\n    if (this.flasher.on !== false || blackOutFlasher !== false) {\n      context.beginPath();\n      context.arc(this.flasher.x, this.flasher.y, 3.5, 0, 2 * Math.PI, false);\n\n      if (this.flasher.on === false) {\n        context.fillStyle = this.config.color;\n      } else {\n        context.fillStyle = atomService.config.background;\n      }\n\n      context.fill();\n    }\n  }\n}\n","/**\n * Buildings are made up of tiled 8x8 blocks.\n */\nexport const buildingTiles = [\n  [\n    [0, 0, 0, 0, 1, 0, 0, 1],\n    [0, 0, 0, 0, 1, 0, 0, 1],\n    [0, 0, 0, 0, 1, 0, 0, 1],\n    [0, 0, 0, 0, 1, 0, 0, 1],\n    [0, 0, 0, 0, 0, 0, 0, 0],\n    [0, 0, 0, 0, 0, 0, 0, 0],\n    [0, 0, 0, 0, 0, 0, 0, 0],\n    [0, 0, 0, 0, 0, 0, 0, 0]\n  ],\n  [\n    [1, 1, 0, 0, 1, 1, 0, 0],\n    [1, 1, 0, 0, 1, 1, 0, 0],\n    [0, 0, 0, 0, 0, 0, 0, 0],\n    [0, 0, 0, 0, 0, 0, 0, 0],\n    [0, 0, 0, 0, 0, 0, 0, 0],\n    [0, 0, 0, 0, 0, 0, 0, 0],\n    [0, 0, 0, 0, 0, 0, 0, 0],\n    [0, 0, 0, 0, 0, 0, 0, 0]\n  ],\n  [\n    [1, 0, 0, 0, 0, 0, 0, 0],\n    [1, 0, 0, 0, 0, 0, 0, 0],\n    [0, 0, 0, 0, 0, 0, 0, 0],\n    [0, 0, 0, 0, 0, 0, 0, 0],\n    [1, 0, 0, 0, 0, 0, 0, 0],\n    [1, 0, 0, 0, 0, 0, 0, 0],\n    [0, 0, 0, 0, 0, 0, 0, 0],\n    [0, 0, 0, 0, 0, 0, 0, 0]\n  ],\n  [\n    [0, 1, 0, 1, 0, 1, 0, 0],\n    [0, 0, 0, 0, 0, 0, 0, 0],\n    [0, 0, 0, 0, 0, 0, 0, 0],\n    [0, 0, 0, 0, 0, 0, 0, 0],\n    [0, 0, 0, 0, 0, 0, 0, 0],\n    [0, 0, 0, 0, 0, 0, 0, 0],\n    [0, 0, 0, 0, 0, 0, 0, 0],\n    [0, 0, 0, 0, 0, 0, 0, 0]\n  ],\n  [\n    [1, 0, 0, 0, 1, 0, 0, 0],\n    [1, 0, 0, 0, 1, 0, 0, 0],\n    [0, 0, 0, 0, 0, 0, 0, 0],\n    [1, 0, 0, 0, 1, 0, 0, 0],\n    [1, 0, 0, 0, 1, 0, 0, 0],\n    [0, 0, 0, 0, 0, 0, 0, 0],\n    [0, 0, 0, 0, 0, 0, 0, 0],\n    [0, 0, 0, 0, 0, 0, 0, 0]\n  ],\n  [\n    [0, 1, 1, 0, 1, 1, 0, 0],\n    [0, 1, 1, 0, 1, 1, 0, 0],\n    [0, 0, 0, 0, 0, 0, 0, 0],\n    [0, 0, 0, 0, 0, 0, 0, 0],\n    [0, 0, 0, 0, 0, 0, 0, 0],\n    [0, 0, 0, 0, 0, 0, 0, 0],\n    [0, 0, 0, 0, 0, 0, 0, 0],\n    [0, 0, 0, 0, 0, 0, 0, 0]\n  ]\n];\n\nexport const tileHeight = buildingTiles[0].length;\nexport const tileWidth = buildingTiles[0][0].length;\nexport const buildingStyleCount = buildingTiles.length;\n","import { Building } from \"../../domain/Building/Building\";\nimport { BuildingConfig } from \"../../domain/Building/BuildingConfig\";\nimport { FlasherService } from \"../Flasher/FlasherService\";\nimport {\n  buildingStyleCount,\n  buildingTiles,\n  tileHeight,\n  tileWidth\n} from \"./BuildingTiles\";\n\nexport class BuildingService {\n  /**\n   * @typedef IProps\n   * @property {CanvasRenderingContext2D} context\n   * @property {FlasherService} flasherService\n   *\n   * @param {IProps} props\n   */\n  constructor(props) {\n    this.props = props;\n\n    this.buildings = [new Building()];\n\n    this.config = new BuildingConfig();\n  }\n\n  /**\n   * Draws little lights into the buildings, each one a hard little worker.\n   */\n  drawBuildings() {\n    const { context, flasherService } = this.props;\n    const { height, width } = context.canvas;\n\n    let buildingIndex = 0;\n    const buildingHeightOffset = flasherService.flasher.y;\n    const buildingHeightRange = height - buildingHeightOffset;\n    let potentialX = 0;\n    let potentialY = 0;\n    let style = 0;\n    let tileX = 0;\n    let tileY = 0;\n\n    for (let pixelsOn = 0; pixelsOn < this.config.pixelsPerUpdate; pixelsOn++) {\n      potentialX = Math.floor(Math.random() * width);\n      potentialY =\n        buildingHeightOffset + Math.floor(Math.random() * buildingHeightRange);\n\n      buildingIndex = this.getTopBuilding(potentialX, potentialY);\n      if (buildingIndex === -1) {\n        continue;\n      }\n\n      tileX = (potentialX - this.buildings[buildingIndex].beginX) % tileWidth;\n      tileY = potentialY % tileHeight;\n      style = this.buildings[buildingIndex].style;\n      if (buildingTiles[style][tileY][tileX] === 0) {\n        continue;\n      }\n\n      context.fillStyle = this.config.color;\n      context.fillRect(potentialX, potentialY, 1, 1);\n    }\n  }\n\n  /**\n   * Determines which building the given pixel is in.\n   *\n   * @param {number} canvasX\n   * @param {number} canvasY\n   */\n  getTopBuilding(canvasX, canvasY) {\n    let buildingRight = 0;\n    let buildingTop = 0;\n    let frontBuilding = -1;\n    let maxZ = 0;\n\n    const { context } = this.props;\n    const { height } = context.canvas;\n\n    for (\n      let buildingIndex = 0;\n      buildingIndex < this.config.count;\n      buildingIndex++\n    ) {\n      //\n      // The buildings are sorted by X coordinate. If this building\n      // starts to the right of the pixel in question,\n      // none of the rest intersect.\n      //\n\n      if (this.buildings[buildingIndex].beginX > canvasX) {\n        break;\n      }\n\n      //\n      // Check to see if the pixel is inside this building.\n      //\n\n      buildingTop = height - this.buildings[buildingIndex].height * tileHeight;\n\n      buildingRight =\n        this.buildings[buildingIndex].beginX +\n        this.buildings[buildingIndex].width * tileWidth;\n\n      if (\n        canvasX >= this.buildings[buildingIndex].beginX &&\n        canvasX < buildingRight &&\n        canvasY > buildingTop\n      ) {\n        //\n        // If this is the front-most building, mark it as the new winner.\n        //\n\n        if (this.buildings[buildingIndex].zCoordinate > maxZ) {\n          frontBuilding = buildingIndex;\n          maxZ = this.buildings[buildingIndex].zCoordinate;\n        }\n      }\n    }\n\n    return frontBuilding;\n  }\n\n  init() {\n    this.checkSanity();\n\n    let maxActualHeight = 0;\n    let maxHeight = 0;\n    let tallestBuilding = 0;\n\n    const { context } = this.props;\n    const { height, width } = context.canvas;\n\n    this.buildings = [];\n\n    maxActualHeight = 0;\n\n    maxHeight = Math.ceil(\n      height * (this.config.heightPercent / 100) / tileHeight\n    );\n\n    for (\n      let buildingIndex = 0;\n      buildingIndex < this.config.count;\n      buildingIndex++\n    ) {\n      const building = new Building();\n\n      building.style = Math.floor(Math.random() * buildingStyleCount);\n\n      //\n      // Squaring the random height makes for a more interesting\n      // distribution of buildings.\n      //\n\n      building.height = Math.ceil(Math.pow(Math.random(), 2) * maxHeight);\n      building.width =\n        this.config.minWidth +\n        Math.floor(\n          Math.random() * (this.config.maxWidth - this.config.minWidth)\n        );\n      building.beginX = Math.floor(Math.random() * width);\n      building.zCoordinate = buildingIndex + 1;\n\n      //\n      // The tallest building on the landscape gets the flasher.\n      //\n\n      if (building.height > maxActualHeight) {\n        maxActualHeight = building.height;\n        tallestBuilding = buildingIndex;\n      }\n\n      this.buildings.push(building);\n    }\n\n    this.setFlasherAtTop(tallestBuilding);\n\n    this.sortByX();\n  }\n\n  /**\n   * @private\n   */\n  checkSanity() {\n    if (this.config.minWidth === 0) {\n      this.config.minWidth = 1;\n    }\n\n    if (this.config.maxWidth < this.config.minWidth) {\n      this.config.maxWidth = this.config.minWidth + 1;\n    }\n  }\n\n  /**\n   * @private\n   * @param {number} buildingIndex\n   */\n  setFlasherAtTop(buildingIndex) {\n    const { context, flasherService } = this.props;\n\n    flasherService.flasher.on = false;\n    flasherService.flasher.time = 0;\n\n    flasherService.flasher.x =\n      this.buildings[buildingIndex].beginX +\n      this.buildings[buildingIndex].width * tileWidth / 2;\n\n    flasherService.flasher.y =\n      context.canvas.height - this.buildings[buildingIndex].height * tileHeight;\n  }\n\n  /**\n   * @private\n   */\n  sortByX() {\n    let minX = 0;\n    let minXIndex = 0;\n    let swap = new Building();\n\n    const { context } = this.props;\n    const { width } = context.canvas;\n\n    for (\n      let buildingIndex = 0;\n      buildingIndex < this.config.count - 1;\n      buildingIndex += 1\n    ) {\n      //\n      // Find the building with the lowest X coordinate.\n      //\n\n      minX = width;\n      minXIndex = -1;\n      for (\n        let index2 = buildingIndex;\n        index2 < this.config.count;\n        index2 += 1\n      ) {\n        if (this.buildings[index2].beginX < minX) {\n          minX = this.buildings[index2].beginX;\n          minXIndex = index2;\n        }\n      }\n\n      //\n      // Swap it into position.\n      //\n\n      if (buildingIndex !== minXIndex) {\n        swap = this.buildings[buildingIndex];\n        this.buildings[buildingIndex] = this.buildings[minXIndex];\n        this.buildings[minXIndex] = swap;\n      }\n    }\n  }\n}\n","export class RainConfig {\n  constructor() {\n    this.dropsPerUpdate = 15;\n    this.maxWidth = 16;\n    this.minWidth = 2;\n  }\n}\n","import { RainConfig } from \"../../domain/Rain/RainConfig\";\nimport { AtomService } from \"../Atom/AtomService\";\n\nexport class RainService {\n  /**\n   * @typedef IProps\n   * @property {AtomService} atomService\n   * @property {CanvasRenderingContext2D} context\n   *\n   * @param {IProps} props\n   */\n  constructor(props) {\n    this.props = props;\n\n    this.config = new RainConfig();\n  }\n\n  /**\n   * Draws black rain onto the sky, giving the illusion\n   * that stars and lights are going back off.\n   */\n  drawRain() {\n    let rainX = 0;\n    let rainY = 0;\n\n    const { atomService, context } = this.props;\n    const { height, width } = context.canvas;\n\n    for (\n      let dropIndex = 0;\n      dropIndex < this.config.dropsPerUpdate;\n      dropIndex++\n    ) {\n      context.lineWidth =\n        this.config.minWidth +\n        Math.floor(\n          Math.random() * (this.config.maxWidth - this.config.minWidth)\n        );\n\n      rainX = Math.floor(Math.random() * width);\n      rainY = Math.floor(Math.random() * height);\n\n      context.strokeStyle = atomService.config.background;\n      context.beginPath();\n      context.moveTo(rainX, rainY);\n      context.lineTo(rainX + 1, rainY + 1);\n      context.stroke();\n    }\n  }\n}\n","export class ShootingStar {\n  constructor() {\n    this.active = false;\n    this.duration = 0;\n    this.startX = 0;\n    this.startY = 0;\n    this.time = 0;\n    this.velocityX = 0.0;\n    this.velocityY = 0.0;\n  }\n}\n","export class ShootingStarConfig {\n  constructor() {\n    this.color = \"rgb(100, 0, 0)\";\n    this.maxDurationMs = 1000;\n    this.maxPeriodMs = 25000;\n    this.maxSpeedX = 3.0;\n    this.maxSpeedY = 1.0;\n    this.maxWidth = 4;\n    this.minSpeedY = 0.1;\n  }\n}\n","import { ShootingStar } from \"../../domain/ShootingStar/ShootingStar\";\nimport { ShootingStarConfig } from \"../../domain/ShootingStar/ShootingStarConfig\";\nimport { AtomService } from \"../Atom/AtomService\";\nimport { BuildingService } from \"../Building/BuildingService\";\nimport { tileHeight } from \"../Building/BuildingTiles\";\n\nexport class ShootingStarService {\n  /**\n   * @typedef IProps\n   * @property {AtomService} atomService\n   * @property {BuildingService} buildingService\n   * @property {CanvasRenderingContext2D} context\n   *\n   * @param {IProps} props\n   */\n  constructor(props) {\n    this.props = props;\n\n    this.config = new ShootingStarConfig();\n\n    this.shootingStar = new ShootingStar();\n  }\n\n  /**\n   * Updates any shooting stars on the screen, for those watching very closely.\n   */\n  drawShootingStar() {\n    const { atomService, buildingService, context } = this.props;\n    const { height, width } = context.canvas;\n\n    let currentX = 0;\n    let currentY = 0;\n    const maxStarY =\n      height - height * buildingService.config.heightPercent / 100 / tileHeight;\n    let newX = 0;\n    let newY = 0;\n\n    //\n    // If there is no shooting star now, count time until the decided period\n    // has ended.\n    //\n\n    if (this.shootingStar.active === false) {\n      //\n      // If this causes the shooting star time to fire, set up the shooting\n      // star.\n      //\n\n      if (this.shootingStar.time <= atomService.config.timerRateMs) {\n        this.shootingStar.time = 0;\n        this.shootingStar.active = true;\n\n        //\n        // The shooting star should start somewhere between the top of the\n        // buildings and the top of the screen.\n        //\n\n        this.shootingStar.startX = Math.floor(Math.random() * width);\n        this.shootingStar.startY = Math.floor(\n          Math.pow(Math.random(), 2) * maxStarY\n        );\n\n        this.shootingStar.duration = Math.ceil(\n          Math.random() * this.config.maxDurationMs\n        );\n\n        this.shootingStar.velocityX =\n          Math.random() * (2.0 * this.config.maxSpeedX) - this.config.maxSpeedX;\n\n        this.shootingStar.velocityY =\n          Math.random() * (this.config.maxSpeedY - this.config.minSpeedY) +\n          this.config.minSpeedY;\n\n        //\n        // No shooting star now, keep counting down.\n        //\n      } else {\n        this.shootingStar.time -= atomService.config.timerRateMs;\n        return;\n      }\n    }\n\n    //\n    // TODO: unbreak this code.\n    //\n\n    // context.lineWidth = Math.ceil(\n    //   this.config.maxWidth *\n    //   this.shootingStar.time /\n    //   this.shootingStar.duration\n    // )\n\n    context.lineWidth = this.config.maxWidth;\n\n    //\n    // Draw the shooting star line from the current location to the next\n    // location.\n    //\n\n    currentX =\n      this.shootingStar.startX +\n      Math.ceil(this.shootingStar.time * this.shootingStar.velocityX);\n\n    currentY =\n      this.shootingStar.startY +\n      Math.ceil(this.shootingStar.time * this.shootingStar.velocityY);\n\n    if (this.shootingStar.time < this.shootingStar.duration) {\n      newX =\n        currentX +\n        Math.ceil(atomService.config.timerRateMs * this.shootingStar.velocityX);\n      newY =\n        currentY +\n        Math.ceil(atomService.config.timerRateMs * this.shootingStar.velocityY);\n\n      // If the shooting star is about to fall behind a building, cut it off;\n      // otherwise, draw it.\n\n      if (this.props.buildingService.getTopBuilding(newX, newY) !== -1) {\n        this.shootingStar.time = this.shootingStar.duration;\n      } else {\n        context.strokeStyle = this.config.color;\n        context.beginPath();\n        context.moveTo(currentX, currentY);\n        context.lineTo(newX, newY);\n        context.stroke();\n      }\n    }\n\n    //\n    // Draw background from the start to the current value.\n    //\n\n    context.lineWidth = this.config.maxWidth + 1;\n    context.strokeStyle = atomService.config.background;\n    context.beginPath();\n    context.moveTo(this.shootingStar.startX, this.shootingStar.startY);\n    context.lineTo(currentX, currentY);\n    context.stroke();\n\n    if (this.shootingStar.time < this.shootingStar.duration) {\n      //\n      // If there is more time on the shooting star, just update time.\n      //\n\n      this.shootingStar.time += atomService.config.timerRateMs;\n    } else {\n      //\n      // The shooting star is sadly over. Reset the counters and patiently\n      // wait for the next one.\n      //\n\n      this.shootingStar.active = false;\n      this.shootingStar.time = Math.ceil(\n        Math.random() * this.config.maxPeriodMs\n      );\n    }\n  }\n}\n","export class StarConfig {\n  constructor() {\n    this.starsPerUpdate = 12;\n  }\n}\n","import { StarConfig } from \"../../domain/Star/StarConfig\";\nimport { BuildingService } from \"../Building/BuildingService\";\n\nexport class StarService {\n  /**\n   * @typedef IProps\n   * @property {BuildingService} buildingService\n   * @property {CanvasRenderingContext2D} context\n   *\n   * @param {IProps} props\n   */\n  constructor(props) {\n    this.props = props;\n\n    this.config = new StarConfig();\n  }\n\n  drawStars() {\n    const { buildingService, context } = this.props;\n    let starX = 0;\n    let starY = 0;\n\n    //\n    // Randomly sprinkle a certain number of stars on the screen.\n    //\n\n    const { height, width } = context.canvas;\n\n    for (\n      let starIndex = 0;\n      starIndex < this.config.starsPerUpdate;\n      starIndex++\n    ) {\n      starX = Math.floor(Math.random() * width);\n\n      //\n      // Squaring the Y coordinate puts more stars at the top\n      // and gives it a more realistic (and less static-ish) view.\n      //\n\n      starY = Math.floor(Math.pow(Math.random(), 2) * height);\n\n      if (buildingService.getTopBuilding(starX, starY) !== -1) {\n        continue;\n      }\n\n      const r = Math.floor(Math.random() * 180);\n      const g = Math.floor(Math.random() * 180);\n      const b = Math.floor(Math.random() * 256);\n\n      context.fillStyle = \"rgb(\" + r + \", \" + g + \", \" + b + \")\";\n      context.fillRect(starX, starY, 1, 1);\n    }\n  }\n}\n","import { AtomService } from \"./Atom/AtomService\";\nimport { BuildingService } from \"./Building/BuildingService\";\nimport { FlasherService } from \"./Flasher/FlasherService\";\nimport { RainService } from \"./Rain/RainService\";\nimport { ShootingStarService } from \"./ShootingStar/ShootingStarService\";\nimport { StarService } from \"./Star/StarService\";\n\nexport class App {\n  /**\n   * @typedef IProps\n   * @property {AtomService} atomService\n   * @property {BuildingService} buildingService\n   * @property {CanvasRenderingContext2D} context\n   * @property {FlasherService} flasherService\n   * @property {RainService} rainService\n   * @property {ShootingStarService} shootingStarService\n   * @property {StarService} starService\n   *\n   * @param {IProps} props\n   */\n  constructor(props) {\n    this.props = props;\n\n    this.stop = true;\n  }\n\n  init() {\n    const { atomService, buildingService, context } = this.props;\n\n    context.canvas.width = context.canvas.offsetWidth;\n    context.canvas.height = context.canvas.offsetHeight;\n\n    context.rect(0, 0, context.canvas.width, context.canvas.height);\n    context.fillStyle = atomService.config.background;\n    context.fill();\n\n    buildingService.init();\n\n    //\n    // Kick off the timer.\n    //\n\n    this.update();\n  }\n\n  update() {\n    this.stop = false;\n\n    const {\n      buildingService,\n      flasherService,\n      rainService,\n      shootingStarService,\n      starService\n    } = this.props;\n\n    starService.drawStars();\n    buildingService.drawBuildings();\n    rainService.drawRain();\n    shootingStarService.drawShootingStar();\n    flasherService.drawFlasher();\n\n    requestAnimationFrame(() => {\n      if (this.stop !== true) {\n        this.update();\n      }\n    });\n  }\n}\n","import { App } from \"./app/App\";\nimport { AtomService } from \"./app/Atom/AtomService\";\nimport { BuildingService } from \"./app/Building/BuildingService\";\nimport { FlasherService } from \"./app/Flasher/FlasherService\";\nimport { RainService } from \"./app/Rain/RainService\";\nimport { ShootingStarService } from \"./app/ShootingStar/ShootingStarService\";\nimport { StarService } from \"./app/Star/StarService\";\n\n//\n// Entry point.\n//\n\nwindow.requestAnimationFrame =\n  window.requestAnimationFrame ||\n  ((/** @type {() => void} */ callback) =>\n    window.setTimeout(callback, 1000 / 60));\n\n/** @type {any} */\nconst w = window;\n\nw.onload = function() {\n  /** @type {HTMLCanvasElement} */\n  const canvas = /** @type {any} */ (document.getElementById(\"city\"));\n\n  /** @type {CanvasRenderingContext2D} */\n  const context = /** @type {any} */ (canvas.getContext(\"2d\"));\n\n  // ---\n\n  const atomService = new AtomService();\n\n  // ---\n\n  const flasherService = new FlasherService({\n    atomService,\n    context\n  });\n\n  const rainService = new RainService({\n    atomService,\n    context\n  });\n\n  // ---\n\n  const buildingService = new BuildingService({\n    context,\n    flasherService\n  });\n\n  // ---\n\n  const shootingStarService = new ShootingStarService({\n    atomService,\n    buildingService,\n    context\n  });\n\n  const starService = new StarService({\n    buildingService,\n    context\n  });\n\n  // ---\n\n  const app = new App({\n    atomService,\n    buildingService,\n    context,\n    flasherService,\n    rainService,\n    shootingStarService,\n    starService\n  });\n\n  app.init();\n\n  w.onresize = () => {\n    app.stop = true;\n    setTimeout(() => app.init(), 500);\n  };\n};\n"]}