void Monster::step()

in coinrun/coinrun.cpp [1396:1422]


void Monster::step(const std::shared_ptr<Maze>& maze)
{
  if (!is_flying && !is_walking)
  return;
  float control = sign(vx);
  int ix = int(x);
  int iy = int(y);
  int look_left  = maze->get_elem(ix-0, iy);
  int look_right = maze->get_elem(ix+1, iy);
  if (is_wall(look_left)) control = +1;
  if (is_wall(look_right)) control = -1;
  if (is_walking) {
    int feel_left  = maze->get_elem(ix-0, iy-1);
    int feel_right = maze->get_elem(ix+1, iy-1);
    if (!is_wall(feel_left)) control = +1;
    if (!is_wall(feel_right)) control = -1;
  }
  vx = clip_abs(MONSTER_MIXRATE*control + (1-MONSTER_MIXRATE)*vx, MONSTER_SPEED);
  x += vx;
  y += vy;
  for (int t=1; t<MONSTER_TRAIL; t++) {
    prev_x[t-1] = prev_x[t];
    prev_y[t-1] = prev_y[t];
  }
  prev_x[MONSTER_TRAIL-1] = x;
  prev_y[MONSTER_TRAIL-1] = y;
}