| 19 | | { type: 'body'; dir: Dir } |
| 20 | | { type: 'apple'; dir: undefined }; |
| 21 | export function getGamObjectAtPos( |
| 22 | context: SnakeMachineContext, |
| 23 | p: Point |
| 24 | ): GameObject | undefined { |
| 25 | let maybeBodyPart: BodyPart | undefined; |
| 26 | if (isSamePos(head(context.snake), p)) { |
| 27 | return { type: 'head', dir: context.dir }; |
| 28 | } else if (isSamePos(context.apple, p)) { |
| 29 | return { type: 'apple', dir: undefined }; |
| 30 | } else if ((maybeBodyPart = find(body(context.snake), p))) { |
| 31 | return { type: 'body', dir: maybeBodyPart.dir }; |
| 32 | } else { |
| 33 | return undefined; |
| 34 | } |
| 35 | } |
| 36 | |
| 37 | const oppositeDir: Record<Dir, Dir> = { |
| 38 | Up: 'Down', |