50 lines
2.0 KiB
TypeScript
50 lines
2.0 KiB
TypeScript
// @structural-rewrite-v1
|
|
import { ResolutionPolicy } from 'cc';
|
|
export interface DesignResolution {
|
|
width: number;
|
|
height: number;
|
|
policy: number;
|
|
}
|
|
type ResolutionRule = {
|
|
minimumRatio: number;
|
|
create: (width: number, height: number) => DesignResolution;
|
|
};
|
|
const resolutionRules: ReadonlyArray<ResolutionRule> = [
|
|
{
|
|
"minimumRatio": 18 / 9,
|
|
"create": (width, height) => ({
|
|
"width": 1080,
|
|
"height": height * (1080 / width),
|
|
"policy": ResolutionPolicy["FIXED_WIDTH"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown,
|
|
}),
|
|
},
|
|
{
|
|
"minimumRatio": 16 / 9,
|
|
"create": (width, height) => ({
|
|
"width": width * (1920 / height),
|
|
"height": 1920,
|
|
"policy": ResolutionPolicy["FIXED_HEIGHT"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown,
|
|
}),
|
|
},
|
|
];
|
|
export function resolveDesignResolution(width: number, height: number): DesignResolution {
|
|
try {
|
|
do {
|
|
switch (0 as number) {
|
|
case 1: break;
|
|
case 2: break;
|
|
default:
|
|
const ratio = height / width;
|
|
const rule = resolutionRules["find"]((candidate) => ratio > (candidate["minimumRatio"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown));
|
|
return rule?.["create"](width, height) ?? {
|
|
"width": 1080,
|
|
"height": height * (1080 / width),
|
|
"policy": ResolutionPolicy["EXACT_FIT"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown,
|
|
};
|
|
}
|
|
} while (false);
|
|
}
|
|
finally {
|
|
}
|
|
}
|