add skin manager

This commit is contained in:
jakciehan
2026-04-10 23:05:26 +08:00
parent cc2e7b9bb0
commit 0e321bcea6
9 changed files with 421 additions and 46 deletions
+32 -12
View File
@@ -22,8 +22,10 @@ const BTN_GAP = Math.min(8, SCREEN_HEIGHT * 0.015);
const BTN_START_Y = SCREEN_HEIGHT * 0.38;
const BTN_X = (SCREEN_WIDTH - BTN_WIDTH) / 2;
// Half-width buttons for the utility row (shop, battle pass, ranking, settings)
// Half-width buttons for the utility row
const HALF_BTN_WIDTH = (BTN_WIDTH - BTN_GAP) / 2;
// Third-width buttons for 3-column row
const THIRD_BTN_WIDTH = (BTN_WIDTH - BTN_GAP * 2) / 3;
// Main game mode buttons (full width, vertical)
const MAIN_BUTTONS = [
@@ -33,10 +35,11 @@ const MAIN_BUTTONS = [
{ labelKey: 'menu.team3v3', mode: GAME_MODE.TEAM_3V3, scene: SCENE.TEAM_ROOM },
];
// Utility buttons: shop, daily gold, ranking, settings (2x2 grid)
// Utility buttons: shop, daily gold, skin, ranking, settings (grid)
const UTIL_BUTTONS = [
{ labelKey: 'menu.shop', mode: null, scene: SCENE.SHOP },
{ labelKey: 'dailyGold.btn', mode: null, scene: 'DAILY_GOLD' },
{ labelKey: 'menu.skin', mode: null, scene: SCENE.SKIN },
{ labelKey: 'menu.ranking', mode: null, scene: SCENE.RANKING },
{ labelKey: 'menu.settings', mode: null, scene: SCENE.SETTINGS },
];
@@ -50,18 +53,29 @@ const mainBtnRects = MAIN_BUTTONS.map((btn, i) => ({
...btn,
}));
// Pre-calculate button rects for utility buttons (2x2 grid)
// Pre-calculate button rects for utility buttons (row1: 3 cols, row2: 2 cols centered)
const utilStartY = BTN_START_Y + MAIN_BUTTONS.length * (BTN_HEIGHT + BTN_GAP) + BTN_GAP;
const utilBtnRects = UTIL_BUTTONS.map((btn, i) => {
const col = i % 2;
const row = Math.floor(i / 2);
return {
x: BTN_X + col * (HALF_BTN_WIDTH + BTN_GAP),
y: utilStartY + row * (BTN_HEIGHT + BTN_GAP),
w: HALF_BTN_WIDTH,
h: BTN_HEIGHT,
...btn,
};
if (i < 3) {
// First row: 3 buttons
return {
x: BTN_X + i * (THIRD_BTN_WIDTH + BTN_GAP),
y: utilStartY,
w: THIRD_BTN_WIDTH,
h: BTN_HEIGHT,
...btn,
};
} else {
// Second row: 2 buttons centered
const col = i - 3;
return {
x: BTN_X + col * (HALF_BTN_WIDTH + BTN_GAP),
y: utilStartY + (BTN_HEIGHT + BTN_GAP),
w: HALF_BTN_WIDTH,
h: BTN_HEIGHT,
...btn,
};
}
});
// Combined list for unified iteration
@@ -289,6 +303,12 @@ const MenuScene = {
sm.register(SCENE.SHOP, ShopScene);
}
sm.switchTo(SCENE.SHOP);
} else if (btn.scene === SCENE.SKIN) {
if (!sm._scenes.has(SCENE.SKIN)) {
const SkinScene = require('./SkinScene');
sm.register(SCENE.SKIN, SkinScene);
}
sm.switchTo(SCENE.SKIN);
} else if (btn.scene === SCENE.SETTINGS) {
if (!sm._scenes.has(SCENE.SETTINGS)) {
const SettingsScene = require('./SettingsScene');