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
+7
View File
@@ -87,6 +87,13 @@ const API = {
body: JSON.stringify({ settings }),
})).json();
},
async renameWorld(name) {
return (await fetch('/yt_world/api/world/rename?db=' + WORLD_DB, {
method: 'POST', credentials: 'same-origin',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ name }),
})).json();
},
// ---------- 世界数据 / 包裹(后端接口预留:yt_world 暂未实现路由,前端 mock 兜底) ----------
async worldData() {
try {
+19 -4
View File
@@ -64,9 +64,11 @@ async function loadForum(){
// 分类筛选
const cats = [];
list.forEach(t => { if (t.category && cats.indexOf(t.category) < 0) cats.push(t.category); });
const catLabels = {};
list.forEach(t => { if (t.category) catLabels[t.category] = t.category_label || t.category; });
if (catsEl){
catsEl.innerHTML = `<div class="ch active" data-fcat="all">全部</div>` +
cats.map(c => `<div class="ch" data-fcat="${c}">${c}</div>`).join('');
cats.map(c => `<div class="ch" data-fcat="${c}">${catLabels[c] || c}</div>`).join('');
catsEl.querySelectorAll('.ch').forEach(b => b.addEventListener('click', () => {
catsEl.querySelectorAll('.ch').forEach(x => x.classList.remove('active'));
b.classList.add('active');
@@ -90,9 +92,22 @@ async function loadAnnounce(){
try {
const list = await API.announcements();
if (!list || !list.length){ el.innerHTML = '<div class="note"><div class="body">暂无公告</div></div>'; return; }
el.innerHTML = list.map(n =>
`<div class="note"><div class="date">${n.date}</div><div class="body">${n.body_html || ''}</div></div>`
).join('');
el.innerHTML = list.map((n, i) => {
// 封面图:后台返回 image 字段则铺满封面;否则渐变占位(图片位从后台取)
const cover = n.image
? `<div class="note-cover" style="background-image:url('${n.image}')"></div>`
: `<div class="note-cover empty"></div>`;
const title = n.title ? `<div class="note-title">${n.title}</div>` : '';
const feat = (i === 0) ? ' feat' : '';
return `<div class="note${n.pinned ? ' pin' : ''}${feat}">
${cover}
<div class="note-body">
<div class="date">${n.date || ''}</div>
${title}
<div class="body">${n.body_html || ''}</div>
</div>
</div>`;
}).join('');
} catch (e) { /* 保留静态兜底内容 */ }
}

Before

Width:  |  Height:  |  Size: 174 KiB

After

Width:  |  Height:  |  Size: 174 KiB

Before

Width:  |  Height:  |  Size: 194 KiB

After

Width:  |  Height:  |  Size: 194 KiB

Before

Width:  |  Height:  |  Size: 180 KiB

After

Width:  |  Height:  |  Size: 180 KiB

Before

Width:  |  Height:  |  Size: 189 KiB

After

Width:  |  Height:  |  Size: 189 KiB

Before

Width:  |  Height:  |  Size: 377 KiB

After

Width:  |  Height:  |  Size: 377 KiB

Before

Width:  |  Height:  |  Size: 396 KiB

After

Width:  |  Height:  |  Size: 396 KiB

Before

Width:  |  Height:  |  Size: 384 KiB

After

Width:  |  Height:  |  Size: 384 KiB

Before

Width:  |  Height:  |  Size: 605 KiB

After

Width:  |  Height:  |  Size: 605 KiB

Before

Width:  |  Height:  |  Size: 621 KiB

After

Width:  |  Height:  |  Size: 621 KiB

Before

Width:  |  Height:  |  Size: 597 KiB

After

Width:  |  Height:  |  Size: 597 KiB

Before

Width:  |  Height:  |  Size: 364 KiB

After

Width:  |  Height:  |  Size: 364 KiB

Before

Width:  |  Height:  |  Size: 368 KiB

After

Width:  |  Height:  |  Size: 368 KiB

Before

Width:  |  Height:  |  Size: 375 KiB

After

Width:  |  Height:  |  Size: 375 KiB

Before

Width:  |  Height:  |  Size: 362 KiB

After

Width:  |  Height:  |  Size: 362 KiB

+51 -51
View File
@@ -1,60 +1,60 @@
{
"desert": [
"desert_1.png",
"desert_2.png",
"desert_3.png",
"desert_4.png",
"desert_5.png",
"desert_6.png",
"desert_7.png"
],
"snow": [
"snow_1.png",
"snow_2.png",
"snow_3.png",
"snow_4.png",
"snow_5.png",
"snow_6.png",
"snow_8.png"
"desert/desert_1.png",
"desert/desert_2.png",
"desert/desert_3.png",
"desert/desert_4.png",
"desert/desert_5.png",
"desert/desert_6.png",
"desert/desert_7.png"
],
"forest": [
"forest_1.png",
"forest_2.png",
"forest_3.png",
"forest_5.png",
"forest_6.png",
"forest_7.png",
"forest_8.png"
],
"plain": [
"plain_1.png",
"plain_2.png",
"plain_3.png",
"plain_4.png",
"plain_5.png",
"plain_6.png",
"plain_7.png",
"plain_8.png"
"forest/forest_1.png",
"forest/forest_2.png",
"forest/forest_3.png",
"forest/forest_5.png",
"forest/forest_6.png",
"forest/forest_7.png",
"forest/forest_8.png"
],
"mountain": [
"mountain_1.png",
"mountain_2.png",
"mountain_3.png",
"mountain_4.png",
"mountain_5.png",
"mountain_6.png",
"mountain_7.png",
"mountain_8.png"
"mountain/mountain_1.png",
"mountain/mountain_2.png",
"mountain/mountain_3.png",
"mountain/mountain_4.png",
"mountain/mountain_5.png",
"mountain/mountain_6.png",
"mountain/mountain_7.png",
"mountain/mountain_8.png"
],
"plain": [
"plain/plain_1.png",
"plain/plain_2.png",
"plain/plain_3.png",
"plain/plain_4.png",
"plain/plain_5.png",
"plain/plain_6.png",
"plain/plain_7.png",
"plain/plain_8.png"
],
"snow": [
"snow/snow_1.png",
"snow/snow_2.png",
"snow/snow_3.png",
"snow/snow_4.png",
"snow/snow_5.png",
"snow/snow_6.png",
"snow/snow_8.png"
],
"water": [
"water_1.png",
"water_2.png",
"water_3.png",
"water_4.png",
"water_5.png",
"water_6.png",
"water_7.png",
"water_8.png",
"water_9.png"
"water/water_1.png",
"water/water_2.png",
"water/water_3.png",
"water/water_4.png",
"water/water_5.png",
"water/water_6.png",
"water/water_7.png",
"water/water_8.png",
"water/water_9.png"
]
}
}

Before

Width:  |  Height:  |  Size: 611 KiB

After

Width:  |  Height:  |  Size: 611 KiB

Before

Width:  |  Height:  |  Size: 577 KiB

After

Width:  |  Height:  |  Size: 577 KiB

Before

Width:  |  Height:  |  Size: 504 KiB

After

Width:  |  Height:  |  Size: 504 KiB

Before

Width:  |  Height:  |  Size: 633 KiB

After

Width:  |  Height:  |  Size: 633 KiB

Before

Width:  |  Height:  |  Size: 600 KiB

After

Width:  |  Height:  |  Size: 600 KiB

Before

Width:  |  Height:  |  Size: 465 KiB

After

Width:  |  Height:  |  Size: 465 KiB

Before

Width:  |  Height:  |  Size: 430 KiB

After

Width:  |  Height:  |  Size: 430 KiB

Before

Width:  |  Height:  |  Size: 482 KiB

After

Width:  |  Height:  |  Size: 482 KiB

Before

Width:  |  Height:  |  Size: 544 KiB

After

Width:  |  Height:  |  Size: 544 KiB

Before

Width:  |  Height:  |  Size: 526 KiB

After

Width:  |  Height:  |  Size: 526 KiB

Before

Width:  |  Height:  |  Size: 530 KiB

After

Width:  |  Height:  |  Size: 530 KiB

Before

Width:  |  Height:  |  Size: 514 KiB

After

Width:  |  Height:  |  Size: 514 KiB

Before

Width:  |  Height:  |  Size: 196 KiB

After

Width:  |  Height:  |  Size: 196 KiB

Before

Width:  |  Height:  |  Size: 188 KiB

After

Width:  |  Height:  |  Size: 188 KiB

Before

Width:  |  Height:  |  Size: 260 KiB

After

Width:  |  Height:  |  Size: 260 KiB

Before

Width:  |  Height:  |  Size: 258 KiB

After

Width:  |  Height:  |  Size: 258 KiB

Before

Width:  |  Height:  |  Size: 321 KiB

After

Width:  |  Height:  |  Size: 321 KiB

Before

Width:  |  Height:  |  Size: 378 KiB

After

Width:  |  Height:  |  Size: 378 KiB

Before

Width:  |  Height:  |  Size: 404 KiB

After

Width:  |  Height:  |  Size: 404 KiB

Before

Width:  |  Height:  |  Size: 415 KiB

After

Width:  |  Height:  |  Size: 415 KiB

Before

Width:  |  Height:  |  Size: 492 KiB

After

Width:  |  Height:  |  Size: 492 KiB

Before

Width:  |  Height:  |  Size: 512 KiB

After

Width:  |  Height:  |  Size: 512 KiB

Before

Width:  |  Height:  |  Size: 463 KiB

After

Width:  |  Height:  |  Size: 463 KiB

Before

Width:  |  Height:  |  Size: 386 KiB

After

Width:  |  Height:  |  Size: 386 KiB

Before

Width:  |  Height:  |  Size: 372 KiB

After

Width:  |  Height:  |  Size: 372 KiB

Before

Width:  |  Height:  |  Size: 385 KiB

After

Width:  |  Height:  |  Size: 385 KiB

Before

Width:  |  Height:  |  Size: 378 KiB

After

Width:  |  Height:  |  Size: 378 KiB

Before

Width:  |  Height:  |  Size: 405 KiB

After

Width:  |  Height:  |  Size: 405 KiB

Before

Width:  |  Height:  |  Size: 390 KiB

After

Width:  |  Height:  |  Size: 390 KiB

Before

Width:  |  Height:  |  Size: 400 KiB

After

Width:  |  Height:  |  Size: 400 KiB

Before

Width:  |  Height:  |  Size: 391 KiB

After

Width:  |  Height:  |  Size: 391 KiB

Before

Width:  |  Height:  |  Size: 373 KiB

After

Width:  |  Height:  |  Size: 373 KiB

Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.