mirror of
https://github.com/Shu-Ying/main_plugin_farm.git
synced 2026-10-31 23:09:58 +08:00
add # 新增背景图的优化
This commit is contained in:
Binary file not shown.
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"schema": 1,
|
||||
"canvas": [3072, 1872],
|
||||
"anchor": "full_canvas_bottom_center",
|
||||
"buildings": [
|
||||
{"name": "房屋", "sprite": "decorate_default_2.png", "rect": [1675.75, 158.36, 572.14, 630.64], "layer": "background", "basis": "prefab parent and image transforms"},
|
||||
{"name": "矿洞", "sprite": "decorate_default_3.png", "rect": [1385.61, 256.06, 282.88, 282.88], "layer": "background", "basis": "prefab geometry and inferred runtime origin"},
|
||||
{"name": "主题入口", "sprite": "decorate_default_4.png", "rect": [860.44, 423.68, 294.97, 249.07], "layer": "background", "basis": "prefab geometry and inferred runtime origin"},
|
||||
{"name": "摊位", "sprite": "decorate_default_5.png", "rect": [514.20, 553.27, 298.97, 288.52], "layer": "background", "basis": "approved screenshot inverse projection"},
|
||||
{"name": "狗窝", "sprite": "decorate_default_6.png", "rect": [277.95, 762.35, 305.25, 206.98], "layer": "background", "basis": "approved screenshot inverse projection"},
|
||||
{"name": "码头", "sprite": "decorate_default_7.png", "rect": [1074.51, 1019.51, 355.42, 397.24], "layer": "foreground", "basis": "approved screenshot inverse projection"},
|
||||
{"name": "邮箱", "sprite": "decorate_default_8.png", "rect": [790.18, 576.27, 104.54, 140.08], "layer": "background", "basis": "approved screenshot inverse projection"},
|
||||
{"name": "加工坊标牌", "sprite": "decorate_default_9.png", "rect": [2347.77, 756.08, 269.70, 269.70], "layer": "background", "basis": "approved screenshot inverse projection"},
|
||||
{"name": "稻草人标牌", "sprite": "decorate_default_10.png", "rect": [1120.51, 300.30, 238.34, 238.34], "layer": "background", "basis": "approved screenshot inverse projection"}
|
||||
]
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -25,7 +25,7 @@ class RenderOptions:
|
||||
if self.format not in ("AUTO", "WEBP", "JPEG", "PNG"):
|
||||
raise ValueError("Unsupported output format")
|
||||
if self.theme not in ("default", "spring", "summer", "autumn",
|
||||
"winter"):
|
||||
"winter", "bee"):
|
||||
raise ValueError("Unsupported theme")
|
||||
|
||||
@classmethod
|
||||
|
||||
@@ -65,6 +65,7 @@ class FarmRenderer:
|
||||
canvas = self._base(scene, options)
|
||||
self._plants(canvas, scene, options)
|
||||
self._pests(canvas, scene, options)
|
||||
self._decorations(canvas, options, "foreground")
|
||||
self._panel(canvas, scene, options, avatar)
|
||||
composed = perf_counter()
|
||||
content = canvas.encode(codec, options.quality, options.method)
|
||||
@@ -101,6 +102,7 @@ class FarmRenderer:
|
||||
f"decorate_{options.theme}_1.jpg", size,
|
||||
)
|
||||
canvas = Canvas(background)
|
||||
self._decorations(canvas, options, "background")
|
||||
soil_size = tuple(max(1, s(n)) for n in (
|
||||
self.assets.metadata["soil_size"]
|
||||
))
|
||||
@@ -121,6 +123,16 @@ class FarmRenderer:
|
||||
self.assets.cache.put(key, canvas.image, size[0] * size[1] * 4)
|
||||
return canvas.copy()
|
||||
|
||||
def _decorations(self, canvas, options, layer):
|
||||
s = lambda n: self._scale(n, options)
|
||||
for item in self.assets.metadata["decorations"][options.theme]:
|
||||
if item["layer"] != layer:
|
||||
continue
|
||||
image = self.assets.image(
|
||||
item["sprite"], tuple(max(1, s(n)) for n in item["size"]),
|
||||
)
|
||||
canvas.paste(image, tuple(s(n) for n in item["position"]))
|
||||
|
||||
def _plants(self, canvas, scene, options):
|
||||
s = lambda n: self._scale(n, options)
|
||||
soil_w, soil_h = self.assets.metadata["soil_size"]
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
"""按北京时间选择四季主题;蜂巢主题只供显式离线预览。"""
|
||||
|
||||
from datetime import datetime, timedelta, timezone
|
||||
|
||||
from farm_core.domain import integer
|
||||
|
||||
BEIJING = timezone(timedelta(hours=8))
|
||||
|
||||
|
||||
def season_for(now: int) -> str:
|
||||
month = datetime.fromtimestamp(integer(now), BEIJING).month
|
||||
if 3 <= month <= 5:
|
||||
return "spring"
|
||||
if 6 <= month <= 8:
|
||||
return "summer"
|
||||
if 9 <= month <= 11:
|
||||
return "autumn"
|
||||
return "winter"
|
||||
Reference in New Issue
Block a user