[Add] Mission destinations are now marked when selecting mission at the

mission computer.
This commit is contained in:
Allanis 2014-03-17 00:22:46 +00:00
parent 3e97d1eea7
commit ee57228de5
6 changed files with 57 additions and 13 deletions

View File

@ -104,6 +104,7 @@ static void spaceport_bar_open(void);
static void news_open(unsigned int parent, char* str); static void news_open(unsigned int parent, char* str);
/* Mission computer. */ /* Mission computer. */
static void misn_open(void); static void misn_open(void);
static void misn_close(unsigned int wid, char* name);
static void misn_accept(unsigned int wid, char* str); static void misn_accept(unsigned int wid, char* str);
static void misn_genList(unsigned int wid, int first); static void misn_genList(unsigned int wid, int first);
static void misn_update(unsigned int wid, char* str); static void misn_update(unsigned int wid, char* str);
@ -1016,7 +1017,7 @@ static void misn_open(void) {
/* Buttons. */ /* Buttons. */
window_addButton(wid, -20, 20, window_addButton(wid, -20, 20,
BUTTON_WIDTH, BUTTON_HEIGHT, "btnCloseMission", BUTTON_WIDTH, BUTTON_HEIGHT, "btnCloseMission",
"Close", window_close); "Close", misn_close);
window_addButton(wid, -20, 40+BUTTON_HEIGHT, window_addButton(wid, -20, 40+BUTTON_HEIGHT,
BUTTON_WIDTH, BUTTON_HEIGHT, "btnAcceptMission", BUTTON_WIDTH, BUTTON_HEIGHT, "btnAcceptMission",
@ -1037,6 +1038,12 @@ static void misn_open(void) {
misn_genList(wid, 1); misn_genList(wid, 1);
} }
static void misn_close(unsigned int wid, char* name) {
/* Remove computer markers just in case. */
space_clearComputerMarkers();
window_close(wid, name);
}
static void misn_accept(unsigned int wid, char* str) { static void misn_accept(unsigned int wid, char* str) {
char* misn_name; char* misn_name;
Mission* misn; Mission* misn;
@ -1107,6 +1114,7 @@ static void misn_update(unsigned int wid, char* str) {
return; return;
} }
misn = &mission_computer[toolkit_getListPos(wid, "lstMission")]; misn = &mission_computer[toolkit_getListPos(wid, "lstMission")];
mission_sysComputerMark(misn);
window_modifyText(wid, "txtReward", misn->reward); window_modifyText(wid, "txtReward", misn->reward);
window_modifyText(wid, "txtDesc", misn->desc); window_modifyText(wid, "txtDesc", misn->desc);
window_enableButton(wid, "btnAcceptMission"); window_enableButton(wid, "btnAcceptMission");

View File

@ -21,14 +21,14 @@
#define BUTTON_WIDTH 60 #define BUTTON_WIDTH 60
#define BUTTON_HEIGHT 30 #define BUTTON_HEIGHT 30
static double map_zoom = 1.; /* Zoom of the map. */ static double map_zoom = 1.; /**< Zoom of the map. */
static double map_xpos = 0.; /* Map position. */ static double map_xpos = 0.; /**< Map X position. */
static double map_ypos = 0.; static double map_ypos = 0.; /**< Map Y position. */
static int map_selected = -1; static int map_selected = -1; /**< Currently selected system on map. */
static StarSystem** map_path = NULL; /* The path to current selected system. */ static StarSystem** map_path = NULL; /**< The path to current selected system. */
int map_npath = 0; int map_npath = 0; /**< Number of systems in map_path. */
static int map_drag = 0; /* Is the user dragging the map? */ static int map_drag = 0; /**< Is the user dragging the map? */
/* Extern. */ /* Extern. */
/* space.c */ /* space.c */
@ -45,7 +45,9 @@ static void map_mouse(unsigned int wid, SDL_Event* event, double mx, double my);
static void map_buttonZoom(unsigned int wid, char* str); static void map_buttonZoom(unsigned int wid, char* str);
static void map_selectCur(void); static void map_selectCur(void);
/* Open the map window. */ /**
* @brief Open the map window.
*/
void map_open(void) { void map_open(void) {
unsigned int wid; unsigned int wid;
@ -328,7 +330,8 @@ static void map_render(double bx, double by, double w, double h) {
sys = &systems_stack[i]; sys = &systems_stack[i];
/* Check to make sure system is known of adjacent to known (or marked). */ /* Check to make sure system is known of adjacent to known (or marked). */
if(!sys_isMarked(sys) && !space_sysReachable(sys)) continue; if(!sys_isFlag(sys, SYSTEM_MARKED | SYSTEM_CMARKED) && !space_sysReachable(sys))
continue;
/* System colours. */ /* System colours. */
if(sys == cur_system) col = &cRadar_tPlanet; if(sys == cur_system) col = &cRadar_tPlanet;
@ -342,8 +345,12 @@ static void map_render(double bx, double by, double w, double h) {
gl_drawCircleInRect(tx, ty, r, bx, by, w, h); gl_drawCircleInRect(tx, ty, r, bx, by, w, h);
/* Mark the system if needed. */ /* Mark the system if needed. */
if(sys_isMarked(sys)) { if(sys_isFlag(sys, SYSTEM_MARKED | SYSTEM_CMARKED)) {
COLOUR(cRed); if(sys_isFlag(sys, SYSTEM_CMARKED))
COLOUR(cGreen);
else if(sys_isFlag(sys, SYSTEM_MARKED))
COLOUR(cRed);
glBegin(GL_TRIANGLES); glBegin(GL_TRIANGLES);
glVertex2d(tx+r+9, ty+r+3); glVertex2d(tx+r+9, ty+r+3);
glVertex2d(tx+r+3, ty+r+3); glVertex2d(tx+r+3, ty+r+3);

View File

@ -303,6 +303,23 @@ void mission_sysMark(void) {
} }
} }
/**
* @brief Marks the system of the computer mission to reflect where it will head to.
*
* Does not modify other markers.
* @param misn Mission to mark.
*/
void mission_sysComputerMark(Mission* misn) {
StarSystem* sys;
space_clearComputerMarkers();
if(misn->sys_marker != NULL) {
sys = system_get(misn->sys_marker);
sys_setFlag(sys, SYSTEM_CMARKED);
}
}
/* Links cargo to the mission for posterior cleanup. */ /* Links cargo to the mission for posterior cleanup. */
int mission_linkCargo(Mission* misn, unsigned int cargo_id) { int mission_linkCargo(Mission* misn, unsigned int cargo_id) {
misn->ncargo++; misn->ncargo++;

View File

@ -76,13 +76,14 @@ Mission* missions_computer(int* n, int faction, char* planet, char* sysname);
/* Player accepted mission - mission computer. */ /* Player accepted mission - mission computer. */
int mission_accept(Mission* mission); int mission_accept(Mission* mission);
void missions_run(int loc, int faction, char* planet, char* sysname); void missions_run(int loc, int faction, char* planet, char* sysname);
int missions_start(char* name); int mission_start(char* name);
/* Misc. */ /* Misc. */
void missions_update(const double dt); void missions_update(const double dt);
int mission_getID(char* name); int mission_getID(char* name);
MissionData* mission_get(int id); MissionData* mission_get(int id);
void mission_sysMark(void); void mission_sysMark(void);
void mission_sysComputerMark(Mission* misn);
/* Cargo stuff. */ /* Cargo stuff. */
int mission_linkCargo(Mission* misn, unsigned int cargo_id); int mission_linkCargo(Mission* misn, unsigned int cargo_id);

View File

@ -1350,6 +1350,15 @@ void space_clearMarkers(void) {
sys_rmFlag(&systems_stack[i], SYSTEM_MARKED); sys_rmFlag(&systems_stack[i], SYSTEM_MARKED);
} }
/**
* @brief Clear all the system computer markers.
*/
void space_clearComputerMarkers(void) {
int i;
for(i = 0; i < systems_nstack; i++)
sys_rmFlag(&systems_stack[i], SYSTEM_CMARKED);
}
/* Save what is needed to be saved for space. */ /* Save what is needed to be saved for space. */
int space_sysSave(xmlTextWriterPtr writer) { int space_sysSave(xmlTextWriterPtr writer) {
int i; int i;

View File

@ -82,6 +82,7 @@ typedef struct Planet_ {
/* Star system flags. */ /* Star system flags. */
#define SYSTEM_KNOWN (1<<0) /**< System is known. */ #define SYSTEM_KNOWN (1<<0) /**< System is known. */
#define SYSTEM_MARKED (1<<1) /**< System is marked by a mission. */ #define SYSTEM_MARKED (1<<1) /**< System is marked by a mission. */
#define SYSTEM_CMARKED (1<<2) /**< System is marked by a coputer mission. */
#define sys_isFlag(s,f) ((s)->flags & (f)) /**< Check system flag. */ #define sys_isFlag(s,f) ((s)->flags & (f)) /**< Check system flag. */
#define sys_setFlag(s,f) ((s)->flags |= (f)) /**< Set a system flag. */ #define sys_setFlag(s,f) ((s)->flags |= (f)) /**< Set a system flag. */
#define sys_rmFlag(s,f) ((s)->flags &= ~(f)) /**< Remove a system flag. */ #define sys_rmFlag(s,f) ((s)->flags &= ~(f)) /**< Remove a system flag. */
@ -165,5 +166,6 @@ char** space_getFactionPlanet(int* nplanets, int* factions, int nfactions);
char* space_getRndPlanet(void); char* space_getRndPlanet(void);
void space_clearKnown(void); void space_clearKnown(void);
void space_clearMarkers(void); void space_clearMarkers(void);
void space_clearComputerMarkers(void);
extern char* stardate; extern char* stardate;