2019-10-05 05:01:46 -07:00

91 lines
3.0 KiB
Python

"""Functionality related to player profiles."""
from __future__ import annotations
import random
from typing import TYPE_CHECKING
import _ba
if TYPE_CHECKING:
from typing import List, Tuple, Any, Dict, Optional
# NOTE: player color options are enforced server-side for non-pro accounts
# so don't change these or they won't stick...
PLAYER_COLORS = [(1, 0.15, 0.15), (0.2, 1, 0.2), (0.1, 0.1, 1), (0.2, 1, 1),
(0.5, 0.25, 1.0), (1, 1, 0), (1, 0.5, 0), (1, 0.3, 0.5),
(0.1, 0.1, 0.5), (0.4, 0.2, 0.1), (0.1, 0.35, 0.1),
(1, 0.8, 0.5), (0.4, 0.05, 0.05), (0.13, 0.13, 0.13),
(0.5, 0.5, 0.5), (1, 1, 1)] # yapf: disable
def get_player_colors() -> List[Tuple[float, float, float]]:
"""Return user-selectable player colors."""
return PLAYER_COLORS
def get_player_profile_icon(profilename: str) -> str:
"""Given a profile name, returns an icon string for it.
(non-account profiles only)
"""
from ba._enums import SpecialChar
bs_config = _ba.app.config
icon: str
try:
is_global = bs_config['Player Profiles'][profilename]['global']
except Exception:
is_global = False
if is_global:
try:
icon = bs_config['Player Profiles'][profilename]['icon']
except Exception:
icon = _ba.charstr(SpecialChar.LOGO)
else:
icon = ''
return icon
def get_player_profile_colors(
profilename: Optional[str], profiles: Dict[str, Dict[str, Any]] = None
) -> Tuple[Tuple[float, float, float], Tuple[float, float, float]]:
"""Given a profile, return colors for them."""
bs_config = _ba.app.config
if profiles is None:
profiles = bs_config['Player Profiles']
# special case - when being asked for a random color in kiosk mode,
# always return default purple
if _ba.app.kiosk_mode and profilename is None:
color = (0.5, 0.4, 1.0)
highlight = (0.4, 0.4, 0.5)
else:
try:
assert profilename is not None
color = profiles[profilename]['color']
except Exception:
# key off name if possible
if profilename is None:
# first 6 are bright-ish
color = PLAYER_COLORS[random.randrange(6)]
else:
# first 6 are bright-ish
color = PLAYER_COLORS[sum([ord(c) for c in profilename]) % 6]
try:
assert profilename is not None
highlight = profiles[profilename]['highlight']
except Exception:
# key off name if possible
if profilename is None:
# last 2 are grey and white; ignore those or we
# get lots of old-looking players
highlight = PLAYER_COLORS[random.randrange(
len(PLAYER_COLORS) - 2)]
else:
highlight = PLAYER_COLORS[sum(
[ord(c) + 1
for c in profilename]) % (len(PLAYER_COLORS) - 2)]
return color, highlight