*/
-#define DEG(x) (((double)(x)) * (180.0 / M_PI))
-#define RAD(x) (((double)(x)) * (M_PI / 180.0))
-#define M_2PI (2*M_PI)
-
struct xy_point {
int16_t x;
int16_t y;
({ \
uint8_t __err = 0; \
while ( (! (cond)) && (__err == 0)) { \
- __err = test_traj_end(TRAJ_FLAGS_NO_NEAR); \
+ __err = test_traj_end(mask); \
} \
+ if (!__err) \
+ DEBUG(E_USER_STRAT, "cond is true at line %d", \
+ __LINE__); \
+ else \
+ DEBUG(E_USER_STRAT, "got %s at line %d", \
+ get_err(__err), __LINE__); \
__err; \
}) \
+#define WAIT_COND_OR_TE_TO(cond, mask, timeout) \
+ ({ \
+ microseconds __us = time_get_us2(); \
+ uint8_t __ret = 0; \
+ while ( (! (cond)) && (__ret == 0)) { \
+ __ret = test_traj_end(mask); \
+ if (time_get_us2() - __us > (timeout)*1000L) { \
+ __ret = 0; \
+ break; \
+ } \
+ } \
+ if (!__ret) \
+ DEBUG(E_USER_STRAT, "cond / timeout at line %d", \
+ __LINE__); \
+ else \
+ DEBUG(E_USER_STRAT, "got %s (%d) at line %d", \
+ get_err(__ret), __ret, __LINE__); \
+ \
+ __ret; \
+ })
+
int16_t distance_between(int16_t x1, int16_t y1, int16_t x2, int16_t y2);
+int32_t quad_distance_between(int16_t x1, int16_t y1, int16_t x2, int16_t y2);
int16_t distance_from_robot(int16_t x, int16_t y);
int16_t simple_modulo_360(int16_t a);
int16_t angle_abs_to_rel(int16_t a_abs);
int8_t get_opponent_xy(int16_t *x, int16_t *y);
int8_t get_opponent_da(int16_t *d, int16_t *a);
int8_t get_opponent_xyda(int16_t *x, int16_t *y, int16_t *d, int16_t *a);
-uint8_t opponent_is_behind(void);
+int16_t distance_from_opponent(int16_t x, int16_t y);
+
+uint8_t get_ball_count(void);
+uint8_t get_cob_count(void);