feat: 实现避难所仓储系统与生存状态HUD改进
- 新增避难所仓储功能,支持物品在随身背包与仓储间转移 - 添加生存状态图标资源与状态阈值告警系统 - 重构HUD界面,优化状态显示与操作流程 - 扩展游戏核心系统,增加仓储相关动作和校验 - 更新文档说明仓储规则与实现细节
This commit is contained in:
@@ -8,6 +8,7 @@ describe('TinyWaste gameplay loop', () => {
|
||||
|
||||
expect(state.player.placeId).toBe('home');
|
||||
expect(state.player.inventory.some((entry) => entry.itemId === 'shiv')).toBe(true);
|
||||
expect(state.player.storage.some((entry) => entry.itemId === 'leather_coat')).toBe(true);
|
||||
expect(state.player.quests.q_tutorial_water.state).toBe('active');
|
||||
});
|
||||
|
||||
@@ -42,4 +43,48 @@ describe('TinyWaste gameplay loop', () => {
|
||||
expect(view.header.placeName).toBe('近郊土路');
|
||||
expect(view.map.places.find((place) => place.current)?.id).toBe('roadside');
|
||||
});
|
||||
|
||||
it('moves items between field bag and shelter storage while at home', () => {
|
||||
const state = createNewGameState(gameContent, '测试幸存者');
|
||||
const initialBagWater = state.player.inventory.find((entry) => entry.itemId === 'water_dirty')?.count ?? 0;
|
||||
const initialStorageWater =
|
||||
state.player.storage.find((entry) => entry.itemId === 'water_dirty')?.count ?? 0;
|
||||
|
||||
const stashed = applyGameAction(state, gameContent, {
|
||||
type: 'stash-item',
|
||||
itemId: 'water_dirty',
|
||||
count: 1,
|
||||
});
|
||||
|
||||
const stashView = buildGameView(stashed.state, gameContent);
|
||||
expect(stashView.player.storageAccessible).toBe(true);
|
||||
expect(
|
||||
stashed.state.player.inventory.find((entry) => entry.itemId === 'water_dirty')?.count ?? 0,
|
||||
).toBe(initialBagWater - 1);
|
||||
expect(
|
||||
stashed.state.player.storage.find((entry) => entry.itemId === 'water_dirty')?.count ?? 0,
|
||||
).toBe(initialStorageWater + 1);
|
||||
|
||||
const retrieved = applyGameAction(stashed.state, gameContent, {
|
||||
type: 'retrieve-item',
|
||||
itemId: 'water_dirty',
|
||||
count: 1,
|
||||
});
|
||||
|
||||
expect(
|
||||
retrieved.state.player.inventory.find((entry) => entry.itemId === 'water_dirty')?.count ?? 0,
|
||||
).toBe(initialBagWater);
|
||||
});
|
||||
|
||||
it('builds survival alerts from threshold-based status states', () => {
|
||||
const state = createNewGameState(gameContent, '测试幸存者');
|
||||
state.player.stats.thirst = 20;
|
||||
state.player.stats.energy = 18;
|
||||
|
||||
const view = buildGameView(state, gameContent);
|
||||
|
||||
expect(view.survival.alerts.some((entry) => entry.stat === 'thirst')).toBe(true);
|
||||
expect(view.survival.alerts.some((entry) => entry.stat === 'energy')).toBe(true);
|
||||
expect(view.survival.headline).toContain('告警');
|
||||
});
|
||||
});
|
||||
|
||||
@@ -3,6 +3,7 @@ import type { GameContent } from '@tinywaste/game-core';
|
||||
export const gameContent: GameContent = {
|
||||
version: '0.1.0',
|
||||
inventoryCapacity: 36,
|
||||
storageCapacity: 84,
|
||||
items: {
|
||||
water_dirty: {
|
||||
id: 'water_dirty',
|
||||
|
||||
Reference in New Issue
Block a user