summaryrefslogtreecommitdiff
path: root/src/position_util.c
blob: 26a8c518509ac328eb7d319dcb75ad6895c8a937 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#include "global.h"
#include "position_util.h"

#include "constants/direction.h"

const s32 gFacingDirMapping[3][3] = {
  {DIRECTION_NORTHWEST, DIRECTION_NORTH, DIRECTION_NORTHEAST},
  {DIRECTION_WEST, DIRECTION_SOUTH, DIRECTION_EAST},
  {DIRECTION_SOUTHWEST, DIRECTION_SOUTH, DIRECTION_SOUTHEAST}
};

s32 CalculateFacingDir(struct Position *originPos, struct Position *targetPos)
{
  s32 facingDir;
  s32 yDiff;
  s32 xDiff;

  xDiff = targetPos->x - originPos->x;
  yDiff = targetPos->y - originPos->y;
  if (xDiff == 0 && yDiff == 0)
  {
    facingDir = DIRECTION_SOUTH;
  }
  else
  {
    if (xDiff > 0)
    {
      xDiff = 1;
    }
    if (yDiff > 0)
    {
      yDiff = 1;
    }
    if (xDiff <= -1)
    {
      xDiff = -1;
    }
    if (yDiff <= -1)
    {
      yDiff = -1;
    }
    facingDir = gFacingDirMapping[yDiff + 1][xDiff + 1];
  }
  return facingDir;
}

s32 GetMaxPositionDifference(short param_1[],short param_2[])
{
  s32 diff_index1;
  s32 diff_index0;

  diff_index0 = param_1[0] - param_2[0];
  if (diff_index0 < 0) {
    diff_index0 = -diff_index0;
  }
  diff_index1 = param_1[1] - param_2[1];
  if (diff_index1 < 0) {
    diff_index1 = -diff_index1;
  }
  if (diff_index1 < diff_index0) {
    diff_index1 = diff_index0;
  }
  return diff_index1;
}