feat: 网站布局统一化+公告卡片重做+地形素材归类+加载动画升级+底部栏拆分

- 网站 7 个页签统一内边距/宽度/滚动方式,去掉重复页头
- 公告卡片改为图文大卡(支持后台 image/title/pinned 字段)
- assets/terrain/ 拆 6 个子目录并同步 manifest + TERRAIN_ASSETS
- 删除 assets/art/(transition 图片已清空)
- 加载界面增加随机过渡背景图 + 深色压暗层
- 底部栏建造按钮拆为地形/移动/高度/管理 4 个独立按钮
- 侧面板改为从底部向上展开(WorldBox 风格)
- 删除视频背景文件(已回滚为静态 JPG)
- 新增 wc1.js(六边形地图渲染)、wc2.js(导航控件)
This commit is contained in:
李鹏宇
2026-07-24 23:39:49 +08:00
parent f12cab0b53
commit e405eb7a07
60 changed files with 3423 additions and 309 deletions
+27
View File
@@ -1,8 +1,12 @@
# -*- coding: utf-8 -*-
import json
import logging
import re
from odoo import http
from odoo.http import request, Response
_logger = logging.getLogger(__name__)
def _json(data):
"""返回 UTF-8 JSON 响应(与 game_base 一致)。"""
@@ -59,3 +63,26 @@ class YtWorldApi(http.Controller):
if world and settings is not None:
world.settings = settings
return _json({'ok': True})
@http.route('/yt_world/api/world/rename', type='http', auth='user',
methods=['POST', 'OPTIONS'], csrf=False)
def rename_world(self, **kw):
"""修改当前用户世界名称。body: {"name": "..."}
校验:trim 后 1-24 字符,禁控制字符,空白正常允许。"""
user = request.env.user
world = request.env['yt.world'].sudo().search(
[('user_id', '=', user.id)], limit=1)
if not world:
return _json({'ok': False, 'error': 'no_world'})
body = _post_body()
name = (body.get('name') or '').strip()
if not name:
return _json({'ok': False, 'error': 'empty'})
if len(name) > 24:
return _json({'ok': False, 'error': 'too_long'})
if re.search(r'[\x00-\x1f\x7f]', name):
return _json({'ok': False, 'error': 'invalid_char'})
old = world.name
world.name = name
_logger.info('yt.world rename uid=%s %r -> %r', user.id, old, name)
return _json({'ok': True, 'name': name})