diff --git a/addons/yt_world/data/yt_world_build_item.xml b/addons/yt_world/data/yt_world_build_item.xml
index 4c60f77..b7eec26 100644
--- a/addons/yt_world/data/yt_world_build_item.xml
+++ b/addons/yt_world/data/yt_world_build_item.xml
@@ -123,8 +123,8 @@
farmland农田
- facilityassets/buildings/default/props/1.png
- 33310
+ facilityassets/buildings/spring/farmland/farmland.png
+ 22310
1
春季播种的耕地,定期产出粮食作物。
160
@@ -166,4 +166,31 @@
190
+
+ library图书馆
+ buildassets/buildings/spring/library/library_l.png
+ 22360
+ 0
+ 收藏典籍与卷轴,提升领地科研与知识产出。
+ 1110
+
+
+
+ barracks兵营
+ buildassets/buildings/spring/barracks/barracks_l.png
+ 22370
+ 0
+ 训练士兵与储备武备的军事建筑,提升领地军事产出。
+ 1130
+
+
+
+ school学堂
+ buildassets/buildings/spring/school/school_l.png
+ 22380
+ 0
+ 讲学习字之所,培养人才并提升领地科研积累。
+ 1100
+
+
diff --git a/assets/buildings/spring/barracks/barracks_l.png b/assets/buildings/spring/barracks/barracks_l.png
new file mode 100644
index 0000000..13f6098
Binary files /dev/null and b/assets/buildings/spring/barracks/barracks_l.png differ
diff --git a/assets/buildings/spring/barracks/barracks_r.png b/assets/buildings/spring/barracks/barracks_r.png
new file mode 100644
index 0000000..7d38d8d
Binary files /dev/null and b/assets/buildings/spring/barracks/barracks_r.png differ
diff --git a/assets/buildings/spring/farmland/farmland.png b/assets/buildings/spring/farmland/farmland.png
new file mode 100644
index 0000000..6b1f5b7
Binary files /dev/null and b/assets/buildings/spring/farmland/farmland.png differ
diff --git a/assets/buildings/spring/library/library_l.png b/assets/buildings/spring/library/library_l.png
new file mode 100644
index 0000000..6b7732a
Binary files /dev/null and b/assets/buildings/spring/library/library_l.png differ
diff --git a/assets/buildings/spring/library/library_r.png b/assets/buildings/spring/library/library_r.png
new file mode 100644
index 0000000..aaa06b5
Binary files /dev/null and b/assets/buildings/spring/library/library_r.png differ
diff --git a/assets/buildings/spring/school/school_l.png b/assets/buildings/spring/school/school_l.png
new file mode 100644
index 0000000..e69de29
diff --git a/assets/buildings/spring/school/school_r.png b/assets/buildings/spring/school/school_r.png
new file mode 100644
index 0000000..e69de29
diff --git a/world.html b/world.html
index 1a96492..8996bdb 100644
--- a/world.html
+++ b/world.html
@@ -1582,7 +1582,6 @@ const BUILDINGS = {
farm: { name: '农场', icon: '🌾', color: '#8bc34a', yield: { food: 8 } },
lumber: { name: '伐木场', icon: '🪓', color: '#795548', yield: { wood: 6 } },
mine: { name: '矿场', icon: '⛏', color: '#ff9800', yield: { metal: 5 } },
- house: { name: '民居', icon: '🏠', color: '#64b5f6', yield: { pop: 4 } },
market: { name: '集市', icon: '🏪', color: '#4dd0e1', yield: { gold: 6 } },
temple: { name: '神庙', icon: '⛩', color: '#fff176', yield: { culture: 3 } },
barracks: { name: '兵营', icon: '⚔', color: '#ef5350', yield: { military: 8 } },
@@ -1717,8 +1716,11 @@ const MICRO_BUILD_EXTRA = [
{ id: 'restaurant', cat: 'build', icon: 'assets/buildings/spring/restaurant/restaurant_l.png',name: '饭馆', desc: '烹制料理,为居民提供饱食与心情加成。', flat: false, w: 2, h: 2, statLevel: 1, statHp: 95, statYield: { satiety: 3 } },
{ id: 'pasture', cat: 'business', icon: 'assets/buildings/spring/pasture/pasture_l.png', name: '牧场', desc: '放养牲畜,稳定产出肉奶类资源。', flat: false, w: 2, h: 2, statLevel: 1, statHp: 105, statYield: { meat: 2, milk: 1 } },
{ id: 'blackmarket', cat: 'build', icon: 'assets/buildings/spring/blackmarket/blackmarket_l.png',name:'黑市', desc: '灰色交易点,可换取稀有物资但伴随风险。', flat: false, w: 2, h: 2, statLevel: 1, statHp: 80, statYield: { rare: 1 } },
- { id: 'farmland', cat: 'business', icon: 'assets/buildings/default/props/1.png', name: '农田', desc: '春季播种的耕地,定期产出粮食作物。', flat: true, w: 2, h: 2, statLevel: 1, statHp: 60, statYield: { food: 3 } },
+ { id: 'farmland', cat: 'business', icon: 'assets/buildings/spring/farmland/farmland.png', name: '农田', desc: '春季播种的耕地,定期产出粮食作物。', flat: true, w: 2, h: 2, statLevel: 1, statHp: 60, statYield: { food: 3 } },
{ id: 'well', cat: 'build', icon: 'assets/buildings/default/props/well_l.png', name: '水井', desc: '汲取地下水的圆井,保障饮水与灌溉。', flat: false, w: 2, h: 2, statLevel: 1, statHp: 90, statYield: { water: 2 } },
+ { id: 'library', cat: 'build', icon: 'assets/buildings/spring/library/library_l.png', name: '图书馆', desc: '收藏典籍与卷轴,提升领地科研与知识产出。', flat: false, w: 2, h: 2, statLevel: 1, statHp: 110, statYield: { research: 4 } },
+ { id: 'barracks', cat: 'build', icon: 'assets/buildings/spring/barracks/barracks_l.png', name: '兵营', desc: '训练士兵与储备武备的军事建筑,提升领地军事产出。', flat: false, w: 2, h: 2, statLevel: 1, statHp: 130, statYield: { military: 4 } },
+ { id: 'school', cat: 'build', icon: 'assets/buildings/spring/school/school_l.png', name: '学堂', desc: '讲学习字之所,培养人才并提升领地科研积累。', flat: false, w: 2, h: 2, statLevel: 1, statHp: 100, statYield: { research: 3 } },
];
// 建筑交互配置(数据驱动,与后端 BUILD_EFFECTS 的 (code,action) 对应)。
@@ -1790,6 +1792,21 @@ const BUILD_INTERACT = {
{ action: 'stall', label: '摆摊', icon: '🏪', desc: '摆摊获得金币' },
{ action: 'upgrade', label: '升级', icon: '⬆️', desc: '升级集市' },
] },
+ library: { title: '图书馆', tagline: '典籍与知识', actions: [
+ { action: 'study', label: '研读', icon: '📖', desc: '研读典籍,获取科研点' },
+ { action: 'archive', label: '整理卷轴', icon: '🗂', desc: '整理卷轴,提升知识产出' },
+ { action: 'upgrade', label: '升级', icon: '⬆️', desc: '升级图书馆' },
+ ] },
+ barracks: { title: '兵营', tagline: '训练与征召', actions: [
+ { action: 'recruit', label: '招募', icon: '🛡️', desc: '招募新兵,补充兵员' },
+ { action: 'drill', label: '操练', icon: '⚔️', desc: '操练部队,提升军事产出' },
+ { action: 'upgrade', label: '升级', icon: '⬆️', desc: '升级兵营' },
+ ] },
+ school: { title: '学堂', tagline: '讲学与习字', actions: [
+ { action: 'lecture', label: '讲学', icon: '📚', desc: '开设讲习,提升科研积累' },
+ { action: 'study', label: '习字', icon: '✍️', desc: '习字读书,培养人才' },
+ { action: 'upgrade', label: '升级', icon: '⬆️', desc: '升级学堂' },
+ ] },
};
// 装备目录:每个槽位的候选装备(图标 + 简短加成,仅作展示/穿戴)。
@@ -1985,24 +2002,33 @@ function microDrawPlaced(ctx, b, it, cell, ew, eh) {
ctx.drawImage(img, -s / 2, -s / 2, s, s);
ctx.restore();
} else if (flat) {
- // 平面俯视:把方形贴图经「缩放 + 45°旋转 + 纵向压扁」投影到 cell×cell/2 菱形
- // 贴图尺寸与占地格边缘对齐
+ // 平面俯视:把方形贴图经「缩放 + 45°旋转 + 纵向压扁」投影到 footprint 菱形内
+ // s 取 cell*max(ew,eh)/sqrt(2)≈0.71,让方形旋转后宽≈占地宽,再 clip 到 footprint 防溢出
ctx.save();
- const s = cell * Math.max(ew, eh) * 1.65;
+ const hw = cell / 2, hh = cell / 4;
+ ctx.beginPath();
+ ctx.moveTo(0, -eh * hh);
+ ctx.lineTo(ew * hw, 0);
+ ctx.lineTo(0, eh * hh);
+ ctx.lineTo(-ew * hw, 0);
+ ctx.closePath();
+ ctx.clip();
+ const s = cell * Math.max(ew, eh) * 0.72;
ctx.transform(1, 0, 0, 0.5, 0, 0);
ctx.rotate(Math.PI / 4);
ctx.drawImage(img, -s / 2, -s / 2, s, s);
ctx.restore();
} else {
// 3/4 立绘建筑:按 rot 切换 _r/_l 视角;180/270 做水平翻转表示背面,取消 canvas 整体旋转
- // 尺寸贴合占位地块:底宽 = 占位格宽,与格子边缘对齐
+ // 尺寸贴合占位地块:底宽 = 占位格宽,与格子边缘对齐;
+ // 图片脚底对齐 footprint 菱形最下方顶点,避免建筑“浮”在占地左上角。
const dim = Math.max(ew, eh);
const w = cell * dim; // 建筑底宽 = 占位格宽
const h = w / 0.85; // 维持原宽高比(建筑立绘偏高)
const flip = (rot === 180 || rot === 270);
ctx.save();
ctx.scale(flip ? -1 : 1, 1);
- ctx.drawImage(img, -w / 2, -h * 0.85, w, h);
+ ctx.drawImage(img, -w / 2, eh * cell / 4 - h, w, h);
ctx.restore();
}
return;