diff --git a/server/routes/players.js b/server/routes/players.js index cfb148b..3ec0610 100644 --- a/server/routes/players.js +++ b/server/routes/players.js @@ -54,26 +54,43 @@ campaignPlayer.route('/ranking/:campaignId') revive: 0, respawn: 0, flagTouch: 0, + travelDistance: 0, + driverDistance: 0, }; for (let i = 0; i < playerInstances.length; i++) { - resItem.kill += playerInstances[i].kill; - resItem.death += playerInstances[i].death; - resItem.friendlyFire += playerInstances[i].friendlyFire; - resItem.vehicleLight += playerInstances[i].vehicleLight; - resItem.vehicleHeavy += playerInstances[i].vehicleHeavy; - resItem.vehicleAir += playerInstances[i].vehicleAir; - resItem.revive += playerInstances[i].revive; - resItem.respawn += playerInstances[i].respawn; - resItem.flagTouch += playerInstances[i].flagTouch; + const player = playerInstances[i]; + resItem.kill += player.kill; + resItem.death += player.death; + resItem.friendlyFire += player.friendlyFire; + resItem.vehicleLight += player.vehicleLight; + resItem.vehicleHeavy += player.vehicleHeavy; + resItem.vehicleAir += player.vehicleAir; + resItem.revive += player.revive; + resItem.respawn += player.respawn; + resItem.flagTouch += player.flagTouch; + if (player.travelDistance) { + resItem.travelDistance += Math.round(player.travelDistance / 1000); // meters -> km + } + if (player.driverDistance) { + resItem.driverDistance += Math.round(player.driverDistance / 1000); // meters -> km + } } + resItem.warCount = playerInstances.length; resItem.fraction = playerInstances[playerInstances.length - 1].fraction; rankingItems.push(resItem); }); const getSortedField = (fieldName) => { let num = 1; - rankingItems.sort((a, b) => b[fieldName] - a[fieldName]); - const res = JSON.parse(JSON.stringify(rankingItems)); + const filteredSortResult = rankingItems.map((item) => { + return { + name: item.name, + fraction: item.fraction, + [fieldName]: item[fieldName], + }; + }) + .sort((a, b) => b[fieldName] - a[fieldName]); + const res = JSON.parse(JSON.stringify(filteredSortResult)); for (const entity of res) { entity.num = num++; } @@ -90,6 +107,9 @@ campaignPlayer.route('/ranking/:campaignId') revive: getSortedField('revive'), respawn: getSortedField('respawn'), flagTouch: getSortedField('flagTouch'), + travelDistance: getSortedField('travelDistance'), + driverDistance: getSortedField('driverDistance'), + warCount: getSortedField('warCount'), }; next(); }); diff --git a/static/src/app/app.component.ts b/static/src/app/app.component.ts index 8884e07..9832c71 100644 --- a/static/src/app/app.component.ts +++ b/static/src/app/app.component.ts @@ -67,6 +67,7 @@ export class AppComponent implements OnInit { 'vehicleLight': 'stats/scoreboard/vehicle-light', 'travelDistance': 'stats/scoreboard/travel-distance', 'driverDistance': 'stats/scoreboard/driver-distance', + 'warCount': 'stats/scoreboard/war-count', // --------LOCALE--------- 'flag-de': 'locale/de', 'flag-en': 'locale/en', diff --git a/static/src/app/statistic/campaign/highscore/highscore.component.css b/static/src/app/statistic/campaign/highscore/highscore.component.css index 29d9027..99cf434 100644 --- a/static/src/app/statistic/campaign/highscore/highscore.component.css +++ b/static/src/app/statistic/campaign/highscore/highscore.component.css @@ -8,13 +8,13 @@ h2 { .search-field { width: 40%; - margin: 32px 0 0 8%; + margin: 50px 0 50px 8%; } .highscore-table-container { width: 320px; max-height: 394px; - margin: 100px 0 0 8%; + margin: 50px 0 50px 8%; float: left; overflow-x: hidden; overflow-y: auto; @@ -36,7 +36,8 @@ h2 { } .mat-column-kill, .mat-column-friendlyFire, .mat-column-revive, .mat-column-flagTouch, -.mat-column-vehicleLight, .mat-column-vehicleHeavy, .mat-column-vehicleAir, .mat-column-death, .mat-column-respawn { +.mat-column-vehicleLight, .mat-column-vehicleHeavy, .mat-column-vehicleAir, .mat-column-death, .mat-column-respawn, +.mat-column-driverDistance, .mat-column-travelDistance, .mat-column-warCount { width: 67px; text-indent: 14px; } diff --git a/static/src/app/statistic/campaign/highscore/highscore.component.ts b/static/src/app/statistic/campaign/highscore/highscore.component.ts index dd3d208..9dfaf26 100644 --- a/static/src/app/statistic/campaign/highscore/highscore.component.ts +++ b/static/src/app/statistic/campaign/highscore/highscore.component.ts @@ -1,7 +1,6 @@ -import {Component, Input, OnInit} from '@angular/core'; +import {Component, OnInit} from '@angular/core'; import {ActivatedRoute} from '@angular/router'; import {PlayerService} from '../../../services/logs/player.service'; -import {CampaignService} from '../../../services/logs/campaign.service'; import {Fraction} from '../../../utils/fraction.enum'; import {FormControl} from '@angular/forms'; import {Observable} from 'rxjs/Observable'; @@ -24,7 +23,7 @@ export class StatisticHighScoreComponent implements OnInit { playersStored = {}; - playerAttributeDisplayNames = PlayerUtils.tmpAttributeDisplayNames.slice(2, PlayerUtils.tmpAttributeDisplayNames.length); + playerAttributeDisplayNames = PlayerUtils.attributeDisplayNames.slice(2, PlayerUtils.attributeDisplayNames.length); readonly fraction = Fraction; @@ -33,6 +32,8 @@ export class StatisticHighScoreComponent implements OnInit { } ngOnInit() { + this.playerAttributeDisplayNames.push({prop: 'warCount', head: 'stats.scoreboard.header.war.count'}); + this.route.params .map(params => params['id']) .subscribe((id) => { diff --git a/static/src/app/statistic/war/war-list/war-item.component.css b/static/src/app/statistic/war/war-list/war-item.component.css index d31d7ab..b863a03 100644 --- a/static/src/app/statistic/war/war-list/war-item.component.css +++ b/static/src/app/statistic/war/war-list/war-item.component.css @@ -3,6 +3,11 @@ border-right: 1px solid #dadada; } +.war-item:hover, .selected{ + background: linear-gradient(80deg, white 0%, #e7e7e7 120%); + border-bottom: 1px solid #dadada; +} + .war-item-box { padding-top: 15px; } diff --git a/static/src/app/statistic/war/war-list/war-list.component.css b/static/src/app/statistic/war/war-list/war-list.component.css index 4e67fa8..ac840c5 100644 --- a/static/src/app/statistic/war/war-list/war-list.component.css +++ b/static/src/app/statistic/war/war-list/war-list.component.css @@ -9,6 +9,21 @@ cursor: pointer; } +.list-header:hover, .selected{ + background: linear-gradient(80deg, white 0%, #e7e7e7 120%); +} + +.list-header-battles { + border-bottom: 1px solid #dadada; + border-right: 1px solid #dadada; + border-left: 4px solid transparent; + padding: 25px; + font-size: 16px; + text-transform: uppercase; + color: #333333; + border-bottom: 1px solid #f1f1f1; +} + .mat-icon { color: #666666; vertical-align: middle; diff --git a/static/src/app/statistic/war/war-list/war-list.component.html b/static/src/app/statistic/war/war-list/war-list.component.html index 61486c2..bb0781e 100644 --- a/static/src/app/statistic/war/war-list/war-list.component.html +++ b/static/src/app/statistic/war/war-list/war-list.component.html @@ -29,7 +29,7 @@ {{'stats.sidebar.highscore' | translate}} -
+
diff --git a/static/src/assets/i18n/statistics/de.json b/static/src/assets/i18n/statistics/de.json index 7fc9d38..00fbfd3 100644 --- a/static/src/assets/i18n/statistics/de.json +++ b/static/src/assets/i18n/statistics/de.json @@ -67,6 +67,7 @@ "stats.scoreboard.header.respawn": "Respawn", "stats.scoreboard.header.travel.distance": "Passagier Flugdistanz (km)", "stats.scoreboard.header.driver.distance": "Pilot Flugdistanz (km)", + "stats.scoreboard.header.war.count": "Schlachtteilnahmen", "stats.scoreboard.button.detail": "Kampagnenstatistik für {{name}}", "stats.highscore.filter.placholder": "Spielername (mehrere mit '&' trennen)", diff --git a/static/src/assets/i18n/statistics/en.json b/static/src/assets/i18n/statistics/en.json index ea69fb9..0e4838a 100644 --- a/static/src/assets/i18n/statistics/en.json +++ b/static/src/assets/i18n/statistics/en.json @@ -74,6 +74,7 @@ "stats.scoreboard.header.respawn": "Respawn", "stats.scoreboard.header.travel.distance": "Passenger Travel Distance (km)", "stats.scoreboard.header.driver.distance": "Pilot Travel Distance (km)", + "stats.scoreboard.header.war.count": "Battle Participation", "stats.scoreboard.button.detail": "Campaign statistics for {{name}}", "stats.highscore.filter.placholder": "Player Name (separate multiple using '&')", diff --git a/static/src/assets/icon/stats/scoreboard/war-count.svg b/static/src/assets/icon/stats/scoreboard/war-count.svg new file mode 100644 index 0000000..50970c7 --- /dev/null +++ b/static/src/assets/icon/stats/scoreboard/war-count.svg @@ -0,0 +1,7 @@ + + + + + + +