v0.1.19: 八方风雨 + 孤立系统归并(双主线,1002 全绿)
【主线一:世界自演进深化《八方风雨》】 - NPC 战略姿态 stance:守成/扩张/隐忍/结盟四态,年首评估(era>景气>power>relation) 全行为调制:raid 概率×2/×0.4/×0、互攻阈值 -40/-70/不攻、贸量 ×1.3/×0.7、 赠礼收益 ally×1.3、结盟门槛 ally 放宽至30——NPC 从统计物理到行为战略 - 超卖潮(谷贱伤农):池>1.8×base 世界产能回调×0.7 + 年度播报(防玩家玩崩市场) - 盟约连坐:结盟令世仇(rel<-50)对玩家-20;盟者世仇 raid 概率×2 - 盟友求援:互攻失利盟友告急(distress 旗标)——WorldPanel 响应(出资200/见死不救) - 干预天下:调停(50灵石令世仇-60→-25、声望+2)/ 资助盟友;恩怨网情报视图(各家关系展开+调停钮) 【主线二:孤立系统归并引擎】 - P0 兜底修复:empty() 收敛 makeWorldSimState 单源 + normalize 补 tideTicks/calamityLeft/ era/eraStartYear/prosperity/distress/overfluxYear(旧档 NaN 级联防死) - FxGate 从 engine/kernel/fxqueue.ts 并入 ui/fx.ts(kernel 清纯引擎;deltas 顶层导出, 3 处引用 10 行改动);engine 侧零 UI 依赖再下一城 - 音效语义补充:onFx→blade/pulse/spark→sWar/sGong/sBell;onLog kind 兜底保留(不静音) - store.advance drift/season 段左移 fx.ts(fxSeason 复活接管 season 检测) - 死码清除:timesense.tideOf/tintLabel、tideDir 全链(类型/初始/写入/domain) - domain.ts worldSim 局部类型补全 0.1.18/0.1.19 全部新字段(断言类型安全) 【测试】1002 全绿(41 套件):stance-world 7 例(兜底/姿态/raid/超卖/连坐/调停/求援)
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
import { describe, expect, it } from 'vitest'
|
||||
import { seasonOf } from '../src/renderer/game/data/season'
|
||||
import { tideOf, yearRing, seasonTint, seasonCssVars, TIDES } from '../src/renderer/game/engine/kernel/timesense'
|
||||
import { FxGate, FxKind } from '../src/renderer/game/engine/kernel/fxqueue'
|
||||
import { yearRing, seasonTint, seasonCssVars, TIDES } from '../src/renderer/game/engine/kernel/timesense'
|
||||
import { FxGate, FxKind, deltas } from '../src/renderer/ui/fx'
|
||||
|
||||
describe('timesense 时间感知矩阵', () => {
|
||||
it.each([[1, 'spring'], [3, 'spring'], [4, 'summer'], [6, 'summer'], [7, 'autumn'], [9, 'autumn'], [10, 'winter'], [12, 'winter']] as const)(
|
||||
@@ -15,11 +15,6 @@ describe('timesense 时间感知矩阵', () => {
|
||||
expect(TIDES.length).toBe(24)
|
||||
})
|
||||
|
||||
it.each([1, 2, 4, 6, 9, 11, 12].map((m) => [m] as const))('月%i 两个节气均有效', (m) => {
|
||||
expect(TIDES).toContain(tideOf(m, 0))
|
||||
expect(TIDES).toContain(tideOf(m, 1))
|
||||
})
|
||||
|
||||
it.each([1, 6, 12].map((m) => [m] as const))('年环 %i 月在 [0,1]', (m) => {
|
||||
const r = yearRing(m)
|
||||
expect(r).toBeGreaterThanOrEqual(0)
|
||||
@@ -83,7 +78,7 @@ describe('FxGate 竞态安全', () => {
|
||||
})
|
||||
|
||||
it('deltas:差异、净零、NaN 滤除', () => {
|
||||
const d = FxGate.deltas({ a: 10, b: 5, c: NaN }, { a: 14, b: 5, d: 3 })
|
||||
const d = deltas({ a: 10, b: 5, c: NaN }, { a: 14, b: 5, d: 3 })
|
||||
expect(d.a).toBe(4)
|
||||
expect(d.b).toBeUndefined()
|
||||
expect(d.c).toBeUndefined() // NaN 原值被过滤
|
||||
@@ -91,6 +86,6 @@ describe('FxGate 竞态安全', () => {
|
||||
})
|
||||
|
||||
it('deltas 空对象不产生输出', () => {
|
||||
expect(Object.keys(FxGate.deltas({}, {}))).toHaveLength(0)
|
||||
expect(Object.keys(deltas({}, {}))).toHaveLength(0)
|
||||
})
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user