mirror of
https://github.com/Sendouc/sendou.ink.git
synced 2026-08-27 21:55:15 -05:00
Allow 1v1/2v2/3v3 tournaments to show on the sidebar for streams
This commit is contained in:
@@ -21,6 +21,7 @@ export type SidebarStream = {
|
||||
subtitle: string;
|
||||
startsAt: number;
|
||||
tier: TournamentTierNumber | null;
|
||||
membersPerTeam?: number;
|
||||
tentativeTier?: number;
|
||||
peakXp?: number;
|
||||
twitchUsername?: string;
|
||||
@@ -31,7 +32,6 @@ export function getLiveTournamentStreams(): SidebarStream[] {
|
||||
|
||||
for (const tournament of RunningTournaments.all) {
|
||||
if (tournament.isLeagueDivision) continue;
|
||||
if (tournament.minMembersPerTeam < 4) continue;
|
||||
|
||||
streams.push({
|
||||
id: `tournament-${tournament.ctx.id}`,
|
||||
@@ -41,6 +41,7 @@ export function getLiveTournamentStreams(): SidebarStream[] {
|
||||
subtitle: deriveCurrentRound(tournament),
|
||||
startsAt: dateToDatabaseTimestamp(tournament.ctx.startTime),
|
||||
tier: tournament.ctx.tier,
|
||||
membersPerTeam: tournament.minMembersPerTeam,
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -25,14 +25,28 @@ export function rank(
|
||||
return [...live, ...upcoming].map((rs) => rs.stream);
|
||||
}
|
||||
|
||||
const SMALL_TOURNAMENT_PENALTY = 4;
|
||||
|
||||
export function tournamentTierToScore(
|
||||
tier: TournamentTierNumber | null,
|
||||
membersPerTeam?: number,
|
||||
): number {
|
||||
return tier ?? 9;
|
||||
const base = tier ?? 9;
|
||||
const isSmallTeamSize = (membersPerTeam ?? 4) < 4;
|
||||
|
||||
return Math.min(9, base + (isSmallTeamSize ? SMALL_TOURNAMENT_PENALTY : 0));
|
||||
}
|
||||
|
||||
export function upcomingTournamentTierToScore(tier: number): number {
|
||||
return Math.min(9, tier + 4);
|
||||
export function upcomingTournamentTierToScore(
|
||||
tier: number,
|
||||
membersPerTeam?: number,
|
||||
): number {
|
||||
const isSmallTeamSize = (membersPerTeam ?? 4) < 4;
|
||||
|
||||
return Math.min(
|
||||
9,
|
||||
tier + 4 + (isSmallTeamSize ? SMALL_TOURNAMENT_PENALTY : 0),
|
||||
);
|
||||
}
|
||||
|
||||
export function sendouQTierToScore(tier: {
|
||||
|
||||
@@ -152,7 +152,10 @@ async function combinedStreams(): Promise<SidebarStream[]> {
|
||||
for (const stream of tournamentStreams) {
|
||||
ranked.push({
|
||||
stream,
|
||||
score: StreamRanking.tournamentTierToScore(stream.tier),
|
||||
score: StreamRanking.tournamentTierToScore(
|
||||
stream.tier,
|
||||
stream.membersPerTeam,
|
||||
),
|
||||
});
|
||||
}
|
||||
|
||||
@@ -215,7 +218,8 @@ async function combinedStreams(): Promise<SidebarStream[]> {
|
||||
if (event.startTime < nowTimestamp) continue;
|
||||
if (event.startTime > threeDaysFromNow) continue;
|
||||
if (event.hidden) continue;
|
||||
if ((event.minMembersPerTeam ?? 4) < 4) continue;
|
||||
|
||||
const membersPerTeam = event.minMembersPerTeam ?? 4;
|
||||
|
||||
ranked.push({
|
||||
stream: {
|
||||
@@ -226,9 +230,13 @@ async function combinedStreams(): Promise<SidebarStream[]> {
|
||||
subtitle: "",
|
||||
startsAt: event.startTime,
|
||||
tier: (event.tier as TournamentTierNumber) ?? null,
|
||||
membersPerTeam,
|
||||
tentativeTier: event.tentativeTier ?? undefined,
|
||||
},
|
||||
score: StreamRanking.upcomingTournamentTierToScore(effectiveTier),
|
||||
score: StreamRanking.upcomingTournamentTierToScore(
|
||||
effectiveTier,
|
||||
membersPerTeam,
|
||||
),
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user