我正在使用Rx.Net构建模拟。用户输入被建模为初始状态的状态转换流。使用Scan
我能够将这些转换解析为当前状态。
问题是转换可能有副作用。这些被建模为实现ISimulationEvent
的事件对象。
我尝试过几种方法:
Tuple
IList<ISimulationEvent>
个游戏状态和Scan
每个解决方案感觉&#34; hacky&#34;。
使用Rx.Net是否有一种干净的方法来实现它?
这是我的命令如何折叠成状态的一个例子:
var commands = mouseStates
.DistinctUntilChanged(mouseState => mouseState.LeftButton)
.Where(mouseState => mouseState.LeftButton == ButtonState.Pressed)
.Select(mouseState => new CreateWidgetCommand(new Vector2(mouseState.X, mouseState.Y)));
var initialState = new SimulationState();
var states = commands.Scan(
initialState,
(state, command) => command.CanApply(state) ? command.Apply(state) : state);
每个Apply
都应输出ISimulationEvent
的流作为副作用。但是,我还需要保留结果SimulationState
。