From c932969539b00a42937f0aa5ed1e10b4e94932a3 Mon Sep 17 00:00:00 2001 From: "Somhairle H. Marisol" Date: Mon, 21 Sep 2026 08:37:29 +0800 Subject: feat(desktop): 增加可选昼光自动演示启动 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [变更性质] - 本提交新增可选的 Desktop 启动行为,不改变默认启动行为。 [新增功能] - 设置 LV_AUTOPLAY_DAYLIGHT=1 时,初始世界和 StartNewGame 从黎明 tick 开始。 - 未设置该变量时继续从 tick 0 的夜晚状态开始。 [实现方案] - 在 WorldBootstrap 中集中计算昼光起始 tick 和同步时间。 - 在 Game 中复用同一世界工厂,并增加黎明与默认状态回归测试。 [影响范围] - 仅影响 Desktop 运行时代码和测试;Kernel 保持不变。 - 环境变量为显式 opt-in,不影响现有自动演示和普通启动路径。 --- src/LivingVillage.Desktop/WorldBootstrap.fs | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'src/LivingVillage.Desktop/WorldBootstrap.fs') diff --git a/src/LivingVillage.Desktop/WorldBootstrap.fs b/src/LivingVillage.Desktop/WorldBootstrap.fs index 612931b..d6b906d 100644 --- a/src/LivingVillage.Desktop/WorldBootstrap.fs +++ b/src/LivingVillage.Desktop/WorldBootstrap.fs @@ -16,10 +16,13 @@ module WorldBootstrap = let private avatarSpawnPosition = tileCenter 31 25 - let initialWorld (seed: uint64) (count: int) : World = + let private daylightStartTick = 6L * Sim.ticksPerDay / 24L + + let initialWorldForDaylight (startAtDaylight: bool) (seed: uint64) (count: int) : World = if count < 0 || count > npcSpawnTiles.Length then invalidArg (nameof count) "Desktop bootstrap supports at most 30 NPCs." + let startTick = if startAtDaylight then daylightStartTick else 0L let baseWorld = Sim.initialWorldN seed count let avatar = { baseWorld.Avatar with @@ -32,5 +35,10 @@ module WorldBootstrap = { npc with Pos = tileCenter x y }) { baseWorld with + Tick = startTick + Time = float startTick * Sim.dtSeconds Avatar = avatar Npcs = npcs } + + let initialWorld (seed: uint64) (count: int) : World = + initialWorldForDaylight false seed count -- cgit v1.2.3