From ae61d16a9a3930490272da03944733c1b06fe959 Mon Sep 17 00:00:00 2001 From: gsd Date: Tue, 8 Apr 2025 23:03:44 +0300 Subject: [PATCH] map update final --- .../pages/servers-page/livetime-server-map.ts | 127 +++++++++++++----- .../servers-page/servers-page.component.html | 2 +- src/app/services/tf2data.service.ts | 4 +- 3 files changed, 100 insertions(+), 33 deletions(-) diff --git a/src/app/pages/servers-page/livetime-server-map.ts b/src/app/pages/servers-page/livetime-server-map.ts index a895989..dd28f78 100644 --- a/src/app/pages/servers-page/livetime-server-map.ts +++ b/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: ` -
+
Команда @@ -33,9 +35,18 @@ interface MapOverlayConfig { + + + Игрок + + + {{m.value.player.name}} + + +
- +
`, 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; } diff --git a/src/app/pages/servers-page/servers-page.component.html b/src/app/pages/servers-page/servers-page.component.html index 6d9c1dc..056f332 100644 --- a/src/app/pages/servers-page/servers-page.component.html +++ b/src/app/pages/servers-page/servers-page.component.html @@ -68,7 +68,7 @@ из воркшопа
- + Посмотреть игроков на карте diff --git a/src/app/services/tf2data.service.ts b/src/app/services/tf2data.service.ts index 8aec175..e89d633 100644 --- a/src/app/services/tf2data.service.ts +++ b/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[] = [ - "ХЗ", + "Все", "Наблюдатель", "Красная", "Синия"