Merge feature/add_skin into master: resolve all conflicts
- GameGlobal.js: keep upstream SERVER_URL with /ws suffix - en.js/zh.js: merge both settings.nickname and settings.profile keys - SettingsScene.js: keep both nickname row and profile button - server/index.js: merge express app + content security proxy with noServer WebSocket mode and path validation - Add .gitignore for node_modules and .codebuddy
This commit is contained in:
@@ -90,6 +90,10 @@ const SettingsScene = {
|
||||
}
|
||||
}
|
||||
|
||||
// Profile entry button (below the last toggle row)
|
||||
const profileY = firstCenterY + rows.length * step;
|
||||
this._renderProfileButton(ctx, cx, profileY);
|
||||
|
||||
// Back button
|
||||
this._renderBackButton(ctx, cx, backCenterY);
|
||||
},
|
||||
@@ -180,6 +184,34 @@ const SettingsScene = {
|
||||
ctx.fill();
|
||||
},
|
||||
|
||||
_renderProfileButton(ctx, cx, y) {
|
||||
const w = SCREEN_WIDTH * 0.7;
|
||||
const h = 50;
|
||||
const x = cx - w / 2;
|
||||
|
||||
this._buttons['profile'] = { x, y: y - h / 2, w, h };
|
||||
|
||||
// Background
|
||||
ctx.fillStyle = '#1e1e3a';
|
||||
ctx.fillRect(x, y - h / 2, w, h);
|
||||
ctx.strokeStyle = '#333366';
|
||||
ctx.lineWidth = 1;
|
||||
ctx.strokeRect(x, y - h / 2, w, h);
|
||||
|
||||
// Icon and label
|
||||
ctx.fillStyle = COLORS.HUD_TEXT;
|
||||
ctx.font = '16px Arial';
|
||||
ctx.textAlign = 'left';
|
||||
ctx.textBaseline = 'middle';
|
||||
ctx.fillText(`👤 ${t('settings.profile')}`, x + 15, y);
|
||||
|
||||
// Arrow indicator
|
||||
ctx.fillStyle = '#888888';
|
||||
ctx.font = '14px Arial';
|
||||
ctx.textAlign = 'right';
|
||||
ctx.fillText('›', x + w - 15, y);
|
||||
},
|
||||
|
||||
_renderBackButton(ctx, cx, y) {
|
||||
const w = SCREEN_WIDTH * 0.4;
|
||||
const h = 42;
|
||||
@@ -215,6 +247,13 @@ const SettingsScene = {
|
||||
// IMPORTANT: wx.getUserProfile must be called synchronously from a
|
||||
// user tap handler; invoking it here is fine (touchstart is a tap).
|
||||
this._requestNicknameAuth();
|
||||
} else if (key === 'profile') {
|
||||
const sm = GameGlobal.sceneManager;
|
||||
if (!sm._scenes.has(SCENE.PROFILE)) {
|
||||
const ProfileScene = require('./ProfileScene');
|
||||
sm.register(SCENE.PROFILE, ProfileScene);
|
||||
}
|
||||
sm.switchTo(SCENE.PROFILE);
|
||||
} else if (this._settings.hasOwnProperty(key)) {
|
||||
this._settings[key] = !this._settings[key];
|
||||
// Notify audio system
|
||||
|
||||
Reference in New Issue
Block a user