[chore] projet structure
This commit is contained in:
248
src/map.h
Normal file
248
src/map.h
Normal file
@@ -0,0 +1,248 @@
|
||||
#ifndef MAP_H
|
||||
#define MAP_H
|
||||
|
||||
#include <assert.h>
|
||||
#include <stdbool.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include <SDL.h>
|
||||
|
||||
#include "pervasives.h"
|
||||
#include "hept_ffi.h"
|
||||
#include "globals_types.h"
|
||||
|
||||
#define MAX_ROAD_COUNT 50 /* maximum number of roads */
|
||||
#define MAX_WAYP_COUNT 50 /* maximum number of waypoints */
|
||||
#define MAX_TL_COUNT Globals__trafnum /* maximum number of traffic lights */
|
||||
#define MAX_STOP_COUNT 50 /* maximum number of stops */
|
||||
#define MAX_OBST_COUNT Globals__obstnum /* maximum number of obstacles */
|
||||
#define MAX_ITI_COUNT Globals__itinum /* maximum number of itinerary steps */
|
||||
|
||||
/*
|
||||
* =========================================================================
|
||||
* Reference system
|
||||
* =========================================================================
|
||||
*/
|
||||
|
||||
/** Size of the Carthesian space (in cm) */
|
||||
#define MIN_X 0
|
||||
#define MIN_Y 0
|
||||
#define MAX_X 600
|
||||
#define MAX_Y 300
|
||||
|
||||
/** Precision of comparison between points */
|
||||
#define EPS 0.001
|
||||
|
||||
/** Type of points used, in a Carthesian space */
|
||||
/** see @code{positionTy} in kcg_types.h */
|
||||
|
||||
float toradian(float);
|
||||
|
||||
/*
|
||||
* =========================================================================
|
||||
* Car size
|
||||
* =========================================================================
|
||||
*/
|
||||
|
||||
/**
|
||||
* Car plan with o-point is the position of camera
|
||||
*
|
||||
* +---------------+
|
||||
* | SC |SB |
|
||||
* |----------o----| SA
|
||||
* | |SD |
|
||||
* +---------------+
|
||||
*
|
||||
* Dimensions defined as constants in kcg_const.h
|
||||
* #define SA (kcg_lit_float64(3.0))
|
||||
* #define SB (kcg_lit_float64(3.0))
|
||||
* #define SD (kcg_lit_float64(3.0))
|
||||
* #define SC (kcg_lit_float64(7.0))
|
||||
*/
|
||||
#define CAR_WIDTH (SB+SD)
|
||||
#define CAR_HALF_WIDTH SB
|
||||
|
||||
/*
|
||||
* =========================================================================
|
||||
* Colors
|
||||
* =========================================================================
|
||||
*/
|
||||
|
||||
/** Color type @code{colorTy} defined in @see{kcg_types.h} */
|
||||
|
||||
/** True colors used
|
||||
* defined in @see{kcg_const.h} as constants of SCADE
|
||||
*
|
||||
* extern const colorTy AMBER;
|
||||
* extern const colorTy GRAY;
|
||||
* extern const colorTy CYAN;
|
||||
* extern const colorTy MAGENTA;
|
||||
* extern const colorTy YELLOW;
|
||||
* extern const colorTy BLUE;
|
||||
* extern const colorTy GREEN;
|
||||
* extern const colorTy RED;
|
||||
*/
|
||||
|
||||
/** Symbolic colors used for road, points, etc */
|
||||
#define COL_ROADLINE Globals__blue
|
||||
#define COL_ROADLEFT Globals__cyan
|
||||
#define COL_ROADRIGHT Globals__magenta
|
||||
#define COL_WAYPOINT Globals__green
|
||||
#define COL_STOP Globals__red
|
||||
#define COL_OUT Globals__gray
|
||||
|
||||
/** String colors used to print */
|
||||
#define STR_ROADLINE "blue"
|
||||
#define STR_ROADLEFT "cyan"
|
||||
#define STR_ROADRIGHT "magenta"
|
||||
#define STR_WAYPOINT "yellow"
|
||||
#define STR_STOP "red"
|
||||
#define STR_TLIGHT "orange"
|
||||
#define STR_OUT "gray"
|
||||
|
||||
/*
|
||||
* =========================================================================
|
||||
* Road segments and points
|
||||
* =========================================================================
|
||||
*/
|
||||
|
||||
/** Kind of road segments */
|
||||
typedef enum {
|
||||
RD_LINE_1 = 0, /* linear road, one direction */
|
||||
RD_LINE_2, /* linear road, two directions */
|
||||
RD_ARC, /* arc road, one direction */
|
||||
RD_OTHER /* INTERNAL USE ONLY */
|
||||
} road_kind_t;
|
||||
|
||||
/** Dimensions used for road (in cm) */
|
||||
#define RD_SIZE_LINE 1.0
|
||||
#define RD_SIZE_LINE2 2.0
|
||||
#define RD_SIZE_HALF_WIDTH 10.0 /* 10.0 in simulator version */
|
||||
#define RD_SIZE_WAYPOINT 1.0 /* the size of the half of the ruban */
|
||||
#define RD_SIZE_STOP 1.0
|
||||
|
||||
/** Dimensions for traffic lights (in cm) */
|
||||
#define TL_NUMBER 5
|
||||
#define TL_VIEW 50.0
|
||||
#define TL_COSDIR 0.5
|
||||
#define STP_AFTER 3.0
|
||||
|
||||
/** Speeds */
|
||||
#define SPEED_MIN 20
|
||||
#define SPEED_MAX 40
|
||||
|
||||
typedef Globals__phase phase_t;
|
||||
|
||||
/** Road segment */
|
||||
typedef struct {
|
||||
road_kind_t kind; /* kind to select informations */
|
||||
|
||||
Globals__color color; /* color used on the middle line */
|
||||
float dir_x, dir_y; /* direction vector/sense for line/arc (x) */
|
||||
int max_speed; /* maximal speed */
|
||||
|
||||
union {
|
||||
struct { /* parameters for a linear road */
|
||||
Globals__position startp; /* on the middle line */
|
||||
Globals__position endp; /* on the middle line */
|
||||
} line;
|
||||
struct { /* parameters for a arc road */
|
||||
Globals__position center; /* the circle center */
|
||||
float radius; /* the circle radius (in cm) */
|
||||
float start_angle; /* start and stop angles */
|
||||
float end_angle;
|
||||
} arc;
|
||||
} u;
|
||||
} road_t;
|
||||
|
||||
/** Waypoint used to consult the map */
|
||||
typedef struct {
|
||||
int road; /* road identifier */
|
||||
Globals__position position; /* on the middle line of the road */
|
||||
} waypoint_t;
|
||||
|
||||
/** Stop point used to signal a traffic light */
|
||||
typedef struct {
|
||||
int road; /* road identifier */
|
||||
int sema; /* traffic light identifier */
|
||||
Globals__position position; /* on the middle line of a road */
|
||||
} stop_t;
|
||||
|
||||
/** Traffic lights: added road reference to type
|
||||
* @code{paramTLTy_City} defined in @see{kcg_tpes.h} */
|
||||
typedef struct {
|
||||
Globals__param_tlight tl;
|
||||
int road; /* road identifier that the tlight controls */
|
||||
} tlight_t;
|
||||
|
||||
typedef Globals__param_obst obst_t;
|
||||
|
||||
typedef Globals__itielt iti_t;
|
||||
|
||||
typedef Globals__position position_t;
|
||||
|
||||
/*
|
||||
* =========================================================================
|
||||
* Maps
|
||||
* =========================================================================
|
||||
*/
|
||||
|
||||
/** One map contains roads, waypoints, traffic lights and stop points */
|
||||
typedef struct {
|
||||
char name[255]; /* Name of the map */
|
||||
char graphics[255]; /* Path to graphics file (bmp) */
|
||||
char guide[255]; /* Path to guide file (bmp) */
|
||||
phase_t init_phase; /* Initial phase of the robot */
|
||||
road_t *road_arr; /* Roads */
|
||||
int tlight_sz; /* Road count */
|
||||
waypoint_t *wayp_arr; /* Waypoints */
|
||||
int road_sz; /* Waypoint count */
|
||||
tlight_t *tlight_arr; /* Traffic lights */
|
||||
int wayp_sz; /* Traffic light count */
|
||||
stop_t *stop_arr; /* Stops */
|
||||
int stop_sz; /* Stop count */
|
||||
obst_t *obst_arr; /* Obstacles */
|
||||
int obst_sz; /* Obstacle count */
|
||||
iti_t *iti_arr; /* Itinerary */
|
||||
int iti_sz; /* Itinerary step count */
|
||||
} map_t;
|
||||
|
||||
extern map_t *map;
|
||||
|
||||
void map_load(const char *); /* parse and load global map file */
|
||||
void map_destroy(); /* free the map loaded via load_map() */
|
||||
|
||||
/*
|
||||
* =========================================================================
|
||||
* Functions exported to the Heptagon side
|
||||
* =========================================================================
|
||||
*/
|
||||
|
||||
typedef struct asset_wav {
|
||||
SDL_AudioSpec spec;
|
||||
Uint8 *buffer;
|
||||
Uint32 size;
|
||||
} asset_wav_t;
|
||||
|
||||
extern asset_wav_t collision, wrong_dir, exit_road, light_run, speed_excess;
|
||||
extern SDL_AudioDeviceID audio_device;
|
||||
|
||||
DECLARE_HEPT_FUN_NULLARY(Map,
|
||||
read_obstacles,
|
||||
Globals__param_obsts obst);
|
||||
DECLARE_HEPT_FUN_NULLARY(Map,
|
||||
read_traffic_lights,
|
||||
Globals__param_tlights tlights);
|
||||
DECLARE_HEPT_FUN_NULLARY(Map,
|
||||
read_itinerary,
|
||||
Globals__itielts iti);
|
||||
DECLARE_HEPT_FUN(Map,
|
||||
lookup_pos,
|
||||
(Globals__position),
|
||||
Globals__map_data data);
|
||||
DECLARE_HEPT_FUN(Map,
|
||||
soundEffects,
|
||||
(Globals__event, Globals__status),);
|
||||
|
||||
#endif /* MAP_H */
|
||||
Reference in New Issue
Block a user