feat: 网站布局统一化+公告卡片重做+地形素材归类+加载动画升级+底部栏拆分
- 网站 7 个页签统一内边距/宽度/滚动方式,去掉重复页头 - 公告卡片改为图文大卡(支持后台 image/title/pinned 字段) - assets/terrain/ 拆 6 个子目录并同步 manifest + TERRAIN_ASSETS - 删除 assets/art/(transition 图片已清空) - 加载界面增加随机过渡背景图 + 深色压暗层 - 底部栏建造按钮拆为地形/移动/高度/管理 4 个独立按钮 - 侧面板改为从底部向上展开(WorldBox 风格) - 删除视频背景文件(已回滚为静态 JPG) - 新增 wc1.js(六边形地图渲染)、wc2.js(导航控件)
@@ -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 {
|
||||
|
||||
@@ -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 |
@@ -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 |