From 94eb6cd6791a1e6dbabc935801565ec7eb9ad6da Mon Sep 17 00:00:00 2001 From: xmanrui <841206367@qq.com> Date: Wed, 4 Mar 2026 04:40:20 +0800 Subject: [PATCH] fix(pixel-office): restore idle roaming and shorten seat rest to 5-10s --- lib/pixel-office/constants.ts | 4 ++-- lib/pixel-office/engine/officeState.ts | 16 ++++++++++++++-- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/lib/pixel-office/constants.ts b/lib/pixel-office/constants.ts index 6b9d8f3..e3158b0 100644 --- a/lib/pixel-office/constants.ts +++ b/lib/pixel-office/constants.ts @@ -15,8 +15,8 @@ export const WANDER_PAUSE_MIN_SEC = 1.0 export const WANDER_PAUSE_MAX_SEC = 8.0 export const WANDER_MOVES_BEFORE_REST_MIN = 3 export const WANDER_MOVES_BEFORE_REST_MAX = 6 -export const SEAT_REST_MIN_SEC = 30.0 -export const SEAT_REST_MAX_SEC = 120.0 +export const SEAT_REST_MIN_SEC = 5.0 +export const SEAT_REST_MAX_SEC = 10.0 export const INTERACTION_CHANCE = 0.6 export const INTERACTION_STAY_MIN_SEC = 5.0 export const INTERACTION_STAY_MAX_SEC = 15.0 diff --git a/lib/pixel-office/engine/officeState.ts b/lib/pixel-office/engine/officeState.ts index 02c27fa..1a9eaac 100644 --- a/lib/pixel-office/engine/officeState.ts +++ b/lib/pixel-office/engine/officeState.ts @@ -123,11 +123,22 @@ export class OfficeState { private bugWorldWidth: number private bugWorldHeight: number + private buildRuntimeBlockedTiles(furniture: PlacedFurniture[]): Set { + // Keep right-office stool seats walkable so adding subagent stools + // does not shrink idle wandering range. + const nonBlockingSeatTiles = new Set() + for (const [seatId, seat] of this.seats.entries()) { + if (!seatId.startsWith('stool-r')) continue + nonBlockingSeatTiles.add(`${seat.seatCol},${seat.seatRow}`) + } + return getBlockedTiles(furniture, nonBlockingSeatTiles) + } + constructor(layout?: OfficeLayout) { this.layout = layout || createDefaultLayout() this.tileMap = layoutToTileMap(this.layout) this.seats = layoutToSeats(this.layout.furniture) - this.blockedTiles = getBlockedTiles(this.layout.furniture) + this.blockedTiles = this.buildRuntimeBlockedTiles(this.layout.furniture) this.furniture = layoutToFurnitureInstances(this.layout.furniture) this.walkableTiles = getWalkableTiles(this.tileMap, this.blockedTiles) this.interactionPoints = getInteractionPoints(this.layout.furniture, this.tileMap, this.blockedTiles) @@ -146,7 +157,7 @@ export class OfficeState { this.layout = layout this.tileMap = layoutToTileMap(layout) this.seats = layoutToSeats(layout.furniture) - this.blockedTiles = getBlockedTiles(layout.furniture) + this.blockedTiles = this.buildRuntimeBlockedTiles(layout.furniture) this.rebuildFurnitureInstances() this.walkableTiles = getWalkableTiles(this.tileMap, this.blockedTiles) this.interactionPoints = getInteractionPoints(layout.furniture, this.tileMap, this.blockedTiles) @@ -857,6 +868,7 @@ export class OfficeState { setAgentActive(id: number, active: boolean): void { const ch = this.characters.get(id) if (ch) { + if (ch.isActive === active) return ch.isActive = active if (!active) { // Sentinel -1: signals turn just ended, skip next seat rest timer.