Exemple #1
0
void collision_detect(Trash* t){
  Fix trad = int_to_fix(trash_radius(t)); 
  Fix arad = int_to_fix(AVATAR_RADIUS);
  Fix tmass = (trash_radius(t) == 8 ? float_to_fix(1.0) : float_to_fix(2.0));
  Fix amass = float_to_fix(4.0);
  Bool first_hit = vec_eq(t->vec, vec_zero);
  if (collision_circle_check(t->pos, trad, tick_avatar.pos, arad)){
    if (t->type == POWER_CELL) {
      on_collision_power_cell(t);
    } else {
      collision_circle_bounce(t->pos, &t->vec, trad, tmass, 
                              tick_avatar.pos, &tick_avatar.vec, 
                              arad, amass);
      if (fix_lt(vec_get_x(tick_avatar.vec), fix_one)){
        tick_avatar.vec = vec_set_x(tick_avatar.vec, fix_one);
      }
      on_collision_trash(t, first_hit);
    }
  }
}
Exemple #2
0
/** Maximum component of vector. */
inline float vector_component_max(avec v)
{
    return std::max(vec_get_x(v), std::max(vec_get_y(v), vec_get_z(v)));
}