11class Game {
2- constructor ( map , element , rules = { roundCount : 5 , distribution : distribution . weighted } ) {
2+ constructor ( map , element , rules = {
3+ roundCount : 5 ,
4+ moveLimit : - 1 ,
5+ panAllowed : true ,
6+ timeLimit : - 1 ,
7+ zoomAllowed : true
8+ } ) {
39 this . element = element ;
410 this . svElement = new StreetviewElement ( element . querySelector ( '.streetview' ) , element . querySelector ( '.return-home' ) ) ;
511
@@ -8,6 +14,8 @@ class Game {
814 this . movesElement = element . querySelector ( '.moves-left' ) ;
915 this . roundElement = element . querySelector ( '.round' ) ;
1016
17+ this . scores = new Scores ( ) ;
18+
1119 this . googleMap = new google . maps . Map ( element . querySelector ( '.map-element' ) , {
1220 zoom : 0 ,
1321 center : { lat : 0 , lng : 0 } ,
@@ -41,6 +49,24 @@ class Game {
4149 } ) ;
4250 }
4351
52+ async uploadScore ( e ) {
53+ if ( e ) e . preventDefault ( ) ;
54+
55+ let username = this . element . querySelector ( '.username-input' ) . value ;
56+ if ( this . latestScore ) {
57+ this . latestScore . user = username ;
58+ this . scores . addLocal ( this . latestScore ) ;
59+ await this . scores . addGlobal ( this . latestScore ) ;
60+ }
61+
62+ location . href = '../highscore/#' + this . map . name ;
63+ }
64+
65+ async logHighScores ( ) {
66+ let scores = await this . scores . getGlobalHighScores ( this . map . name , this . rules ) ;
67+ console . log ( scores ) ;
68+ }
69+
4470 setRules ( e ) {
4571 console . log ( 'set rules called' , this . ready ) ;
4672 if ( e ) e . preventDefault ( ) ;
@@ -56,6 +82,7 @@ class Game {
5682 let rules = { roundCount : + roundCount , timeLimit : + timeLimit , moveLimit : + moveLimit } ;
5783 rules . panAllowed = restrictions . includes ( 'pan' ) ;
5884 rules . zoomAllowed = restrictions . includes ( 'zoom' ) ;
85+ console . log ( rules ) ;
5986 this . rules = rules ;
6087
6188 setTimeout ( ( ) => this . applyRules ( ) , 300 ) ;
@@ -137,10 +164,10 @@ class Game {
137164 } ;
138165 let onDown = ( ) => {
139166 resizerDown = true ;
140- }
167+ } ;
141168 let onUp = ( ) => {
142169 resizerDown = false ;
143- }
170+ } ;
144171
145172 resizeElement . addEventListener ( 'mousedown' , ( ) => onDown ( ) ) ;
146173 document . addEventListener ( 'mousemove' , e => onMove ( e . pageX , e . pageY ) ) ;
@@ -192,7 +219,6 @@ class Game {
192219 showOverview ( guess , actual ) {
193220 this . attachMap ( '.overview-map' ) ;
194221
195-
196222 let distance = this . measureDistance ( guess , actual ) ;
197223 let niceDistance = this . formatDistance ( distance ) ;
198224 let score = this . map . scoreCalculation ( distance ) ;
@@ -250,6 +276,13 @@ class Game {
250276 let locations = this . previousGuesses . map ( result => result . guess ) . concat ( this . previousGuesses . map ( result => result . actual ) ) ;
251277 this . fitMap ( locations ) ;
252278
279+ this . latestScore = {
280+ totalScore,
281+ map : this . map . name ,
282+ rules : this . rules ,
283+ date : + new Date ( )
284+ } ;
285+
253286 setTimeout ( ( ) => {
254287 overviewElement . querySelector ( '.score-progress' ) . style . width = ( totalScore / maxScore * 100 ) + '%' ;
255288 for ( let result of this . previousGuesses )
0 commit comments