opt-cc/static/src/app/statistic/campaign/campaign-player-detail/campaign-player-detail.comp...

122 lines
3.6 KiB
TypeScript
Raw Normal View History

2018-03-08 09:44:35 +01:00
import {Component, EventEmitter, Input, OnInit, Output} from '@angular/core';
import {CampaignPlayer} from '../../../models/model-interfaces';
import {PlayerService} from '../../../services/logs/player.service';
import {ChartUtils} from '../../../utils/chart-utils';
@Component({
selector: 'campaign-player-detail',
templateUrl: './campaign-player-detail.component.html',
styleUrls: ['./campaign-player-detail.component.css', '../../../style/list-entry.css',
'../../../style/hide-scrollbar.css', '../../../style/overview.css']
})
2018-03-08 09:44:35 +01:00
export class CampaignPlayerDetailComponent implements OnInit {
2018-03-07 11:56:50 +01:00
@Input() campaignId: string;
2017-11-13 15:45:12 +01:00
2018-03-07 11:56:50 +01:00
@Input() playerName: string;
2017-11-13 15:45:12 +01:00
2018-03-07 11:56:50 +01:00
@Output() switchTab = new EventEmitter();
2017-11-13 15:45:12 +01:00
2018-04-27 09:29:30 +02:00
campaignPlayer: CampaignPlayer = { campaign: {}, players: [] };
graphData: any[] = [];
2017-10-02 17:09:30 +02:00
sumData: any[] = [];
2017-10-02 18:10:57 +02:00
avgLabel = 'Durchschnitt';
2017-10-02 14:41:17 +02:00
colorScheme = {
domain: ['#00ce12']
};
2017-10-02 17:09:30 +02:00
colorSchemeBar = {
domain: [
'#2d5a00', '#455600', '#00561f', '#3f3b00', '#003c19', '#083c00'
]
};
2017-10-02 14:41:17 +02:00
showRefLines = true;
showRefLabels = true;
gradient = false;
xAxis = true;
yAxis = true;
legend = false;
showXAxisLabel = true;
showYAxisLabel = true;
autoscale = false;
timeline = false;
roundDomains = true;
2017-10-02 17:09:30 +02:00
kdRatio = 0;
maxKd = 1.7;
2017-10-02 20:03:42 +02:00
2017-10-02 17:09:30 +02:00
respawnDeathRatio = 0;
2017-10-02 20:03:42 +02:00
maxRespawnDeathRatio = 1;
2017-10-02 17:09:30 +02:00
2017-11-13 15:45:12 +01:00
constructor(private playerService: PlayerService) {
}
ngOnInit() {
2017-11-13 15:45:12 +01:00
this.playerService.getCampaignPlayer(this.campaignId, encodeURIComponent(this.playerName))
2018-02-26 09:04:27 +01:00
.subscribe(campaignPlayer => {
this.campaignPlayer = campaignPlayer;
this.graphData = [
{ key: 'kill', label: 'Abschüsse', },
2018-04-27 09:29:30 +02:00
{ key: 'friendlyFire', label: 'Friendly Fire', },
{ key: 'death', label: 'Tode', },
{ key: 'respawn', label: 'Respawn', },
{ key: 'revive', label: 'Revive', },
{ key: 'flagTouch', label: 'Eroberungen', },
{ key: 'vehicleLight', label: 'Fahrzeug (Leicht)', },
{ key: 'vehicleHeavy', label: 'Fahrzeug (Schwer)', },
{ key: 'vehicleAir', label: 'Fahrzeug (Luft)', },
2018-02-26 09:04:27 +01:00
];
this.initDataArray();
const totalDeathDiv = this.graphData[2].total === 0 ? 1 : this.graphData[2].total;
this.kdRatio = parseFloat((this.graphData[0].total / totalDeathDiv).toFixed(2));
if (this.kdRatio > 1) {
this.maxKd = this.kdRatio * 1.7;
}
this.respawnDeathRatio = parseFloat((this.graphData[3].total / totalDeathDiv).toFixed(2));
// we can not directly push to target array, since only full reference changes trigger the refresh of data
const tmpSumData = [];
this.graphData.forEach(dataSet => {
2018-04-27 09:29:30 +02:00
tmpSumData.push({ name: dataSet.label, value: dataSet.total });
});
this.sumData = tmpSumData;
2018-02-26 09:04:27 +01:00
});
2017-10-02 14:41:17 +02:00
}
private initDataArray() {
this.graphData.forEach(dataSet => {
const killObj = {
name: dataSet.label,
series: []
};
const playerLength = this.campaignPlayer.players.length;
let total = 0;
for (let i = 0; i < playerLength; i++) {
const warDateString = ChartUtils.getShortDateString(this.campaignPlayer.players[i].warId.date);
const value = this.campaignPlayer.players[i][dataSet.key];
killObj.series.push({
name: warDateString,
value: value
});
total += value;
}
dataSet.data = [killObj];
2018-04-27 09:29:30 +02:00
dataSet.refLine = [{ value: total / playerLength, name: this.avgLabel }];
dataSet.total = total;
2018-04-27 09:29:30 +02:00
});
}
2017-10-02 18:10:57 +02:00
navigateBack() {
2017-11-13 15:45:12 +01:00
this.switchTab.emit(0);
2017-10-02 18:10:57 +02:00
}
}