mirror of
https://github.com/DaInfLoop/Battler-Generator.git
synced 2024-11-09 15:49:57 +00:00
84 lines
1.9 KiB
TypeScript
84 lines
1.9 KiB
TypeScript
|
// Making a whole new file for this, that's how complex it looks like it'll be.
|
||
|
import { Canvas, createCanvas, loadImage, GlobalFonts, SKRSContext2D } from "@napi-rs/canvas";
|
||
|
|
||
|
import {
|
||
|
GenerateBattlerOptions,
|
||
|
GenerateBattleImageOptions,
|
||
|
PlayerActionOptions,
|
||
|
Colour,
|
||
|
Opponents,
|
||
|
PlayerActions,
|
||
|
CustomActionOptions
|
||
|
} from "./types";
|
||
|
|
||
|
import {
|
||
|
generateBattler, drawText, applyText,
|
||
|
} from "./utils";
|
||
|
|
||
|
type Rank = "Beginner" | "Casual" | "Pro" | "Master";
|
||
|
|
||
|
type PartyOptions = {
|
||
|
ready: string;
|
||
|
|
||
|
player1: string;
|
||
|
username1: string;
|
||
|
rank1: Rank;
|
||
|
|
||
|
player2?: string;
|
||
|
username2?: string;
|
||
|
rank2?: Rank;
|
||
|
|
||
|
player3?: string;
|
||
|
username3?: string;
|
||
|
rank3?: Rank;
|
||
|
|
||
|
player4?: string;
|
||
|
username4?: string;
|
||
|
rank4?: Rank;
|
||
|
|
||
|
player5?: string;
|
||
|
username5?: string;
|
||
|
rank5?: Rank;
|
||
|
|
||
|
player6?: string;
|
||
|
username6?: string;
|
||
|
rank6?: Rank;
|
||
|
|
||
|
player7?: string;
|
||
|
username7?: string;
|
||
|
rank7?: Rank;
|
||
|
|
||
|
player8?: string;
|
||
|
username8?: string;
|
||
|
rank8?: Rank;
|
||
|
}
|
||
|
|
||
|
function generateMatchType(opts: PartyOptions): string {
|
||
|
const keys: (keyof PartyOptions)[] = [
|
||
|
'player1', 'player2', 'player3', 'player4', 'player5', 'player6', 'player7', 'player8'
|
||
|
];
|
||
|
let playerCount = keys.reduce((count, key) => opts[key] ? count + 1 : count, 0);
|
||
|
// If there's an odd number of players, round up to the next even number
|
||
|
if (playerCount % 2 !== 0) {
|
||
|
playerCount++;
|
||
|
}
|
||
|
// Divide by 2 to get the number for each team, since it's evenly matched (e.g. "1v1", "2v2")
|
||
|
const teamSize = playerCount / 2;
|
||
|
return `${teamSize}v${teamSize}`;
|
||
|
}
|
||
|
|
||
|
|
||
|
export default async function party(request: Request, url: import("url").URL): Promise<Response> {
|
||
|
const opts = Object.fromEntries(
|
||
|
Array.from(url.searchParams.entries())
|
||
|
.map(([key, value]) => [key, value.replaceAll('+', ' ')]),
|
||
|
) as PartyOptions;
|
||
|
|
||
|
if (!opts.player1 && !opts.username1 && !opts.rank1) {
|
||
|
return Response.json({
|
||
|
error: "At least one player must be in the party"
|
||
|
})
|
||
|
}
|
||
|
|
||
|
|
||
|
}
|