Browse Source

map update final

master
gsd 2 weeks ago
parent
commit
ae61d16a9a
  1. 127
      src/app/pages/servers-page/livetime-server-map.ts
  2. 2
      src/app/pages/servers-page/servers-page.component.html
  3. 4
      src/app/services/tf2data.service.ts

127
src/app/pages/servers-page/livetime-server-map.ts

@ -5,6 +5,8 @@ import {LatLng, LatLngBoundsLiteral, Layer, Marker} from "leaflet";
import {HttpClient} from "@angular/common/http";
import {Player} from "../../entities/servers/Player";
import {of} from "rxjs";
import {Tf2dataService} from "../../services/tf2data.service";
import {MatExpansionPanel} from "@angular/material/expansion";
interface MapOverlayConfig {
x: number;
@ -15,7 +17,7 @@ interface MapOverlayConfig {
@Component({
selector: "app-live-time-server-map",
template: `
<div>
<div class="container responsive-grid-250">
<mat-form-field appearance="fill">
<mat-label>Команда</mat-label>
<mat-select [(ngModel)]="teams_select">
@ -33,9 +35,18 @@ interface MapOverlayConfig {
</mat-option>
</mat-select>
</mat-form-field>
<mat-form-field appearance="fill">
<mat-label>Игрок</mat-label>
<mat-select [(ngModel)]="player_select" multiple>
<mat-option *ngFor="let m of markers | keyvalue" [value]="m.key">
{{m.value.player.name}}
</mat-option>
</mat-select>
</mat-form-field>
</div>
<div [id]="server.name+'_map'" style="height: 500px;width: 100%;">
<p hidden *ngFor="let player of server.players">{{updatePlayerPos(player)}}</p>
<div *ngIf="allow_processing"><p hidden *ngFor="let player of server.players">{{updatePlayerPos(player)}}</p></div>
</div>
`,
styleUrls: ["servers-page.component.scss"]
@ -45,38 +56,39 @@ export class LivetimeServerMap implements AfterViewInit {
server!: Server;
map!: L.Map;
canShow: boolean = false;
markers: {[player_id: string]: {marker: L.Marker, player: Player, hidden: boolean}} = {};
markers: {[player_id: string]: {
marker: L.Marker,
player: Player,
hidden_via_team: boolean,
hidden_via_class: boolean,
hidden_via_player: boolean
}} = {};
config: MapOverlayConfig = {
x: 0, y: 0, hu:0
}
teams:{id:number, name:string}[] = [
{id: 0, name: "Все"},
{id: 1, name: "Наблюдатель"}, {id: 2, name: "Красные"}, {id: 3, name: "Синий"}
];
teams:{id:number, name:string}[] = [];
teams_select: number = 0;
classes:{id:number, name:string}[] = [
{id: 0, name: "Все"},
{id: 1, name: "Все"},
{id: 2, name: "Все"},
{id: 3, name: "Все"},
{id: 4, name: "Все"},
{id: 5, name: "Все"},
{id: 6, name: "Все"},
{id: 7, name: "Все"},
{id: 8, name: "Все"},
{id: 9, name: "Все"}
]
classes:{id:number, name:string}[] = []
classes_select: number = 0;
constructor(private http: HttpClient) {
player_select: string[] = [];
allow_processing: boolean = false;
constructor(private http: HttpClient,
private tf2service: Tf2dataService) {
this.classes = tf2service.TFClassType.map(clz => {
return {id: tf2service.TFClassType.indexOf(clz), name: clz}
})
this.teams = tf2service.TFTeam.map(t => {
return {id: tf2service.TFTeam.indexOf(t), name: t}
})
}
ngAfterViewInit(): void {
}
prepareMap() {
prepareMap(serverMap: MatExpansionPanel) {
this.allow_processing = serverMap.hideToggle;
if (this.canShow) return;
this.http.head(this.generateUrl()).subscribe(
@ -115,8 +127,10 @@ export class LivetimeServerMap implements AfterViewInit {
return new LatLng(y, x);
}
//это пиздец какой кастыль А ВОТ А ВЬЮЮЮЮЮ А ТАМ....
updatePlayerPos(player:Player) {
if (!this.map) return;
if (!this.allow_processing) return;
const ids = Object.keys(this.markers);
const id: string = `${player.id}`;
@ -127,28 +141,81 @@ export class LivetimeServerMap implements AfterViewInit {
this.markers[id].player = player;
} else {
this.markers[id] = {marker: L.marker(this.getRektPos(player)), player: player, hidden: false};
this.markers[id] = {
marker: L.marker(this.getRektPos(player)),
player: player,
hidden_via_team: false,
hidden_via_class: false,
hidden_via_player: false
};
this.markers[id].marker.addTo(this.map);
this.markers[id].marker.setIcon(this.getPlayerEmblem(player));
}
//проверяем фильтр выбора команды
switch (this.teams_select) {
case 0: {
if (this.markers[id].hidden) {
if (this.markers[id].hidden_via_team && !this.markers[id].hidden_via_class && !this.markers[id].hidden_via_player) {
this.markers[id].marker.addTo(this.map);
this.markers[id].hidden_via_team = false;
}
break;
}
default: {
if (this.markers[id].player.team == this.teams_select && this.markers[id].hidden_via_team && !this.markers[id].hidden_via_class && !this.markers[id].hidden_via_player) {
this.markers[id].marker.addTo(this.map);
this.markers[id].hidden_via_team = false;
}
if (this.markers[id].player.team != this.teams_select && !this.markers[id].hidden_via_team && !this.markers[id].hidden_via_class && !this.markers[id].hidden_via_player) {
this.markers[id].marker.remove();
this.markers[id].hidden_via_team = true;
}
break;
}
}
//проверяем фильтр класса
switch (this.classes_select) {
case 0: {
if (this.markers[id].hidden_via_class && !this.markers[id].hidden_via_team && !this.markers[id].hidden_via_player) {
this.markers[id].marker.addTo(this.map);
this.markers[id].hidden_via_class = false;
}
break;
}
default: {
if (this.markers[id].player.clz == this.classes_select && this.markers[id].hidden_via_class && !this.markers[id].hidden_via_team && !this.markers[id].hidden_via_player) {
this.markers[id].marker.addTo(this.map);
this.markers[id].hidden_via_class = false;
}
if (this.markers[id].player.clz != this.classes_select && !this.markers[id].hidden_via_class && !this.markers[id].hidden_via_team && !this.markers[id].hidden_via_player) {
this.markers[id].marker.remove();
this.markers[id].hidden_via_class = true;
}
break;
}
}
//проверяем челикса по имени
switch (this.player_select.length) {
case 0: {
if (this.markers[id].hidden_via_player && !this.markers[id].hidden_via_class && !this.markers[id].hidden_via_team) {
this.markers[id].marker.addTo(this.map);
this.markers[id].hidden = false;
this.markers[id].hidden_via_player = false;
}
break;
}
default: {
if (this.markers[id].player.team == this.teams_select && this.markers[id].hidden) {
if (this.player_select.indexOf(id) != -1 && this.markers[id].hidden_via_player && !this.markers[id].hidden_via_class && !this.markers[id].hidden_via_team) {
this.markers[id].marker.addTo(this.map);
this.markers[id].hidden = false;
this.markers[id].hidden_via_player = false;
}
if (this.markers[id].player.team != this.teams_select && !this.markers[id].hidden) {
if (this.player_select.indexOf(id) == -1 && !this.markers[id].hidden_via_player && !this.markers[id].hidden_via_class && !this.markers[id].hidden_via_team) {
this.markers[id].marker.remove();
this.markers[id].hidden = true;
this.markers[id].hidden_via_player = true;
}
break;
}

2
src/app/pages/servers-page/servers-page.component.html

@ -68,7 +68,7 @@
<mat-card-subtitle>из воркшопа</mat-card-subtitle>
</mat-card>
</div>
<mat-expansion-panel hideToggle *ngIf="server.value.player_count>0" (click)="map.prepareMap()">
<mat-expansion-panel hideToggle *ngIf="server.value.player_count>0" (click)="map.prepareMap(serverMap)" #serverMap>
<mat-expansion-panel-header>
<mat-panel-title>
Посмотреть игроков на карте

4
src/app/services/tf2data.service.ts

@ -5,7 +5,7 @@ import { Injectable } from '@angular/core';
})
export class Tf2dataService {
TFClassType: string[] = [
"ХЗ",
"Все",
"Скаут",
"Снайпер",
"Солдат",
@ -18,7 +18,7 @@ export class Tf2dataService {
]
TFTeam: string[] = [
"ХЗ",
"Все",
"Наблюдатель",
"Красная",
"Синия"

Loading…
Cancel
Save