public void Configure(IStates states, ITriggers triggers) { if (_roomMachine == null) { throw new Exception(); } var roomsStates = (RoomsStates)states; var roomsTriggers = (RoomsTriggers)triggers; foreach (var roomState in roomsStates.rooms) { _roomMachine.Configure(roomState) .OnEntry(() => _transitionHandler.HandleEntry(roomState)) .OnExit(() => _transitionHandler.HandleExit(roomState)); if (!(String.IsNullOrEmpty(roomState.north))) { _roomMachine.Configure(roomState) .Permit(roomsTriggers.Fetch <RoomsTriggers.North>(), roomsStates.rooms.Single(rs => rs.id == roomState.north)); } if (!(String.IsNullOrEmpty(roomState.south))) { _roomMachine.Configure(roomState) .Permit(roomsTriggers.Fetch <RoomsTriggers.South>(), roomsStates.rooms.Single(rs => rs.id == roomState.south)); } if (!(String.IsNullOrEmpty(roomState.east))) { _roomMachine.Configure(roomState) .Permit(roomsTriggers.Fetch <RoomsTriggers.East>(), roomsStates.rooms.Single(rs => rs.id == roomState.east)); } if (!(String.IsNullOrEmpty(roomState.west))) { _roomMachine.Configure(roomState) .Permit(roomsTriggers.Fetch <RoomsTriggers.West>(), roomsStates.rooms.Single(rs => rs.id == roomState.west)); } if (!(String.IsNullOrEmpty(roomState.up))) { _roomMachine.Configure(roomState) .Permit(roomsTriggers.Fetch <RoomsTriggers.Up>(), roomsStates.rooms.Single(rs => rs.id == roomState.up)); } if (!(String.IsNullOrEmpty(roomState.down))) { _roomMachine.Configure(roomState) .Permit(roomsTriggers.Fetch <RoomsTriggers.Down>(), roomsStates.rooms.Single(rs => rs.id == roomState.down)); } } }
public void Configure(IStates states, ITriggers triggers) { if (_gameMachine == null) { throw new Exception(); } var gameState = (GameStates)states; var gameTrigger = (GameTriggers)triggers; _gameMachine.Configure(gameState.Fetch <GameStates.Exited>()) .OnEntry(() => _transitionHandler.HandleEntry(gameState.Fetch <GameStates.Exited>())); _gameMachine.Configure(gameState.Fetch <GameStates.Inactive>()) .OnEntry(() => _transitionHandler.HandleEntry(gameState.Fetch <GameStates.Inactive>())) .Permit(gameTrigger.Fetch <GameTriggers.Exit>(), gameState.Fetch <GameStates.Exited>()) .Permit(gameTrigger.Fetch <GameTriggers.Begin>(), gameState.Fetch <GameStates.Active>()); _gameMachine.Configure(gameState.Fetch <GameStates.Running>()); _gameMachine.Configure(gameState.Fetch <GameStates.Active>()) .SubstateOf(gameState.Fetch <GameStates.Running>()) .OnEntry(() => _transitionHandler.HandleEntry(gameState.Fetch <GameStates.Active>())) .OnExit(() => _transitionHandler.HandleExit(gameState.Fetch <GameStates.Active>())) .Permit(gameTrigger.Fetch <GameTriggers.End>(), gameState.Fetch <GameStates.Inactive>()) .Permit(gameTrigger.Fetch <GameTriggers.Pause>(), gameState.Fetch <GameStates.Paused>()); _gameMachine.Configure(gameState.Fetch <GameStates.Paused>()) .SubstateOf(gameState.Fetch <GameStates.Running>()) .OnEntry(() => _transitionHandler.HandleEntry(gameState.Fetch <GameStates.Paused>())) .Permit(gameTrigger.Fetch <GameTriggers.Resume>(), gameState.Fetch <GameStates.Active>()) .Permit(gameTrigger.Fetch <GameTriggers.End>(), gameState.Fetch <GameStates.Inactive>()); _gameMachine.Configure(gameState.Fetch <GameStates.Error>()) .OnEntry(() => _transitionHandler.HandleEntry(gameState.Fetch <GameStates.Error>())); }