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;