!MUDMobile methodsFor:'brain'! bfsRoom: aRoom " Breadth First Search for a Room - resulting in an MUDExit object or nil " | visited queued where togo | where := self location. where = aRoom ifTrue: [ ^ nil ]. visited := Set new. queued := SharedQueue new. visited add: where. where exits do: [ :e | e direction = aRoom ifTrue: [ ^ e ]. (visited includes: e direction) ifFalse: [ queued nextPut: e. queued nextPut: e ] ]. [ queued isEmpty not ] whileTrue: [ visited add: where. where := queued next direction. togo := queued next. where exits do: [ :e | e direction = aRoom ifTrue: [ ^ togo ]. (visited includes: e direction) ifFalse: [ queued nextPut: e. queued nextPut: togo ] ] ]. ^ nil ! !