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:
parent
4137401b00
commit
0c25ee1658
@ -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": {
|
||||||
|
|||||||
@ -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,
|
||||||
|
|||||||
@ -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",
|
||||||
|
|||||||
@ -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}
|
||||||
|
|
||||||
|
|||||||
42
src/HUD/Players/Avatar.tsx
Normal file
42
src/HUD/Players/Avatar.tsx
Normal 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} />
|
||||||
|
};
|
||||||
Loading…
x
Reference in New Issue
Block a user