1
0
mirror of https://github.com/lexogrine/dota2-react-hud.git synced 2025-12-10 01:52:49 +01:00

added team logo avatar replacement

This commit is contained in:
Hubert Walczak 2023-10-19 12:18:02 +02:00
parent 4137401b00
commit 0c25ee1658
No known key found for this signature in database
GPG Key ID: 17BB1C9355357860
5 changed files with 61 additions and 3 deletions

View File

@ -1,6 +1,6 @@
{ {
"name": "lexogrine_dota2_hud", "name": "lexogrine_dota2_hud",
"version": "1.3.0", "version": "1.3.1",
"homepage": "./", "homepage": "./",
"private": true, "private": true,
"dependencies": { "dependencies": {

View File

@ -1,6 +1,6 @@
{ {
"name":"Lexogrine Dota2 HUD", "name":"Lexogrine Dota2 HUD",
"version":"1.3.0", "version":"1.3.1",
"author":"Lexogrine", "author":"Lexogrine",
"legacy": false, "legacy": false,
"radar": true, "radar": true,

View File

@ -8,6 +8,21 @@
"name": "info_box", "name": "info_box",
"label": "Top right corner match info" "label": "Top right corner match info"
}, },
{
"type":"select",
"name":"replace_avatars",
"label":"Use team logos as player avatars",
"values": [
{
"label": "Only if player has no avatar",
"name": "if_missing"
},
{
"label": "Always",
"name": "always"
}
]
},
{ {
"type": "action", "type": "action",
"name": "viewType", "name": "viewType",

View File

@ -2,6 +2,7 @@ import React from 'react';
import { Draft, Team, Faction, Player, TeamDraft } from 'dotagsi'; import { Draft, Team, Faction, Player, TeamDraft } from 'dotagsi';
import { apiUrl, getAssetURL } from '../../api/api'; import { apiUrl, getAssetURL } from '../../api/api';
import CameraContainer from '../Camera/Container'; import CameraContainer from '../Camera/Container';
import { Avatar } from '../Players/Avatar';
const ObservedPlayer = ({ players, player, team, show}: { show: boolean, player: Player | null, players: Player[], team: Team | null }) => { const ObservedPlayer = ({ players, player, team, show}: { show: boolean, player: Player | null, players: Player[], team: Team | null }) => {
const getPlayerById = (id: number) => { const getPlayerById = (id: number) => {
@ -32,7 +33,7 @@ const ObservedPlayer = ({ players, player, team, show}: { show: boolean, player:
</div> </div>
<div className="player_picture"> <div className="player_picture">
<CameraContainer observedSteamid={player.steamid} /> <CameraContainer observedSteamid={player.steamid} />
{player.avatar ? <img src={player.avatar} /> : null} <Avatar player={player} teamId={team?.id} />
</div> </div>
</div> : null} </div> : null}

View File

@ -0,0 +1,42 @@
import { useEffect, useState } from "react";
import { configs } from "../../App";
import { apiUrl } from "../../api/api";
import React from "react";
import { Player } from "dotagsi";
export const Avatar = (
{ player, teamId }: { player: Player; teamId?: string | null },
) => {
const [replaceAvatars, setAvatars] = useState<"always" | "never" | "if_missing">("never");
useEffect(() => {
const onData = (data: any) => {
if (!data) return;
const display = data.view;
if (!display) return;
setAvatars(display.replace_avatars || "never");
};
configs.onChange(onData);
onData(configs.data);
return () => {
configs.listeners = configs.listeners.filter((l) => l !== onData);
};
}, []);
const getUrl = () => {
const avatarData = player.avatar;
if(replaceAvatars === 'always' || (replaceAvatars === 'if_missing' && !avatarData)){
return teamId ? `${apiUrl}api/teams/logo/${teamId}` : avatarData || null;
}
return avatarData || null;
}
const url = getUrl();
if(!url) return null
return <img src={url} />
};