diff --git a/package.json b/package.json index 32f1e36..7519c55 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "lexogrine_dota2_hud", - "version": "1.3.0", + "version": "1.3.1", "homepage": "./", "private": true, "dependencies": { diff --git a/public/hud.json b/public/hud.json index 3892c8f..a38ef85 100644 --- a/public/hud.json +++ b/public/hud.json @@ -1,6 +1,6 @@ { "name":"Lexogrine Dota2 HUD", - "version":"1.3.0", + "version":"1.3.1", "author":"Lexogrine", "legacy": false, "radar": true, diff --git a/public/panel.json b/public/panel.json index c986ec3..361f137 100644 --- a/public/panel.json +++ b/public/panel.json @@ -8,6 +8,21 @@ "name": "info_box", "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", "name": "viewType", diff --git a/src/HUD/GameHUD/Game.tsx b/src/HUD/GameHUD/Game.tsx index d2c2c8a..1fe0a43 100644 --- a/src/HUD/GameHUD/Game.tsx +++ b/src/HUD/GameHUD/Game.tsx @@ -2,6 +2,7 @@ import React from 'react'; import { Draft, Team, Faction, Player, TeamDraft } from 'dotagsi'; import { apiUrl, getAssetURL } from '../../api/api'; 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 getPlayerById = (id: number) => { @@ -32,7 +33,7 @@ const ObservedPlayer = ({ players, player, team, show}: { show: boolean, player:
- {player.avatar ? : null} +
: null} diff --git a/src/HUD/Players/Avatar.tsx b/src/HUD/Players/Avatar.tsx new file mode 100644 index 0000000..eae0cfb --- /dev/null +++ b/src/HUD/Players/Avatar.tsx @@ -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 +};