I am building a simulation in which items (like chess pieces) move on a discrete set of positions that do not follow a sequence (like positions on a chessboard) according to a schedule.
Each position
can hold only one item
at any given time. The schedule could ask multiple item
s to move at the same time. If the destination position
is occupied, the scheduled movement is cancelled.
Here is the question: if item A
and item B
, originally situated at position 1
and position 2
respectively, are scheduled to move simultaneously to their next positions position 2
and position 3
, how do I make sure that item A
gets to position 2
, hopefully in an efficient design?
The reason to ask this question is that naively I would check whether position 2
is being occupied for item 1
to move into. If the check happens before item B
is moved out of the way, item 1
would not move while in fact it should. Because the positions do not follow a sequence, it is not obvious which one to check first. You could imagine things gets messy if many items want to move at the same time. In the extreme case, a full chessboard of items should be allowed to move/rearrange themselves but the naive check may not be able to facilitate that.
Is there a common practice to handle such "nonexistent collision"? Ideas and references are all welcomed.