[Add] Use flags now for systems to allow missions to mark them.

This commit is contained in:
Allanis 2013-06-24 21:48:57 +01:00
parent 6c3d96ba51
commit 700e47cd57
4 changed files with 24 additions and 22 deletions

View File

@ -171,18 +171,12 @@ static void map_render(double bx, double by, double w, double h) {
for(i = 0; i < systems_nstack; i++) { for(i = 0; i < systems_nstack; i++) {
sys = &systems_stack[i]; sys = &systems_stack[i];
/* Check ot make sure system is known of adjacent to known. */ /* Check to make sure system is known of adjacent to known. */
if(!space_sysReachable(sys)) { if(!space_sysReachable(sys)) continue;
for(j = 0; j < sys->njumps; j++)
if(systems_stack[sys->jumps[j]].known == 1)
break;
if(j == sys->njumps) /* None found. */
continue;
}
/* System Colours. */ /* System Colours. */
if(sys == cur_system) COLOUR(cRadar_targ); if(sys == cur_system) COLOUR(cRadar_targ);
else if((sys->known == 0) || (sys->nplanets==0)) COLOUR(cInert); else if(!sys_isKnown(sys) || (sys->nplanets==0)) COLOUR(cInert);
else if(areEnemies(player->faction, sys->faction)) COLOUR(cRed); else if(areEnemies(player->faction, sys->faction)) COLOUR(cRed);
else COLOUR(cYellow); else COLOUR(cYellow);
@ -191,7 +185,7 @@ static void map_render(double bx, double by, double w, double h) {
r, bx, by, w, h); r, bx, by, w, h);
/* Draw the system name. */ /* Draw the system name. */
if(sys->known != 0) { if(sys_isKnown(sys)) {
tx = x + 7. + sys->pos.x * map_zoom; tx = x + 7. + sys->pos.x * map_zoom;
ty = y - 5. + sys->pos.y * map_zoom; ty = y - 5. + sys->pos.y * map_zoom;
gl_print(&gl_smallFont, gl_print(&gl_smallFont,
@ -199,7 +193,7 @@ static void map_render(double bx, double by, double w, double h) {
&cWhite, sys->name); &cWhite, sys->name);
} }
if(sys->known == 0) continue; /* We dont't draw hyperspace lines. */ if(!sys_isKnown(sys)) continue; /* We dont't draw hyperspace lines. */
/* Draw the hyperspace paths. */ /* Draw the hyperspace paths. */
glShadeModel(GL_SMOOTH); glShadeModel(GL_SMOOTH);

View File

@ -671,7 +671,7 @@ void player_render(void) {
gl_printMid(&gl_smallFont, (int)gui.nav.w, gui.nav.x, gl_printMid(&gl_smallFont, (int)gui.nav.w, gui.nav.x,
gui.nav.y - 10 - gl_smallFont.h, gui.nav.y - 10 - gl_smallFont.h,
NULL, "%d - %s", pilot_getJumps(player), NULL, "%d - %s", pilot_getJumps(player),
(sys->known == 0) ? "Unknown" : sys->name); (sys_isKnown(sys)) ? sys->name : "Unknown");
} }
else { else {
/* No NAV target. */ /* No NAV target. */

View File

@ -306,7 +306,7 @@ StarSystem** system_getJumpPath(int* njumps, char* sysstart, char* sysend) {
esys = system_get(sysend); /* End. */ esys = system_get(sysend); /* End. */
/* System target must be known. */ /* System target must be known. */
if(esys->known == 0) { if(!sys_isKnown(esys)) {
if(space_sysReachable(esys)) { /* Can we still reach it? */ if(space_sysReachable(esys)) { /* Can we still reach it? */
res = malloc(sizeof(StarSystem*)); res = malloc(sizeof(StarSystem*));
(*njumps) = 1; (*njumps) = 1;
@ -332,7 +332,7 @@ StarSystem** system_getJumpPath(int* njumps, char* sysstart, char* sysend) {
for(i = 0; i < cur->sys->njumps; i++) { for(i = 0; i < cur->sys->njumps; i++) {
sys = &systems_stack[cur->sys->jumps[i]]; sys = &systems_stack[cur->sys->jumps[i]];
if(sys->known == 0) continue; if(!sys_isKnown(sys)) continue;
neighbour = A_newNode(sys, NULL); neighbour = A_newNode(sys, NULL);
@ -494,11 +494,11 @@ char* space_getRndPlanet(void) {
int space_sysReachable(StarSystem* sys) { int space_sysReachable(StarSystem* sys) {
int i; int i;
if(sys->known != 0) return 1; /* It is known. */ if(sys_isKnown(sys)) return 1; /* It is known. */
/* Check to see if it is adjacent to known. */ /* Check to see if it is adjacent to known. */
for(i = 0; i < sys->njumps; i++) for(i = 0; i < sys->njumps; i++)
if(systems_stack[sys->jumps[i]].known == 1) if(sys_isKnown(&systems_stack[sys->jumps[i]]))
return 1; return 1;
return 0; return 0;
} }
@ -647,8 +647,8 @@ void space_init(const char* sysname) {
/* Start the spawn timer. */ /* Start the spawn timer. */
spawn_timer = SDL_GetTicks() + 120000./(float)(cur_system->nfleets+1); spawn_timer = SDL_GetTicks() + 120000./(float)(cur_system->nfleets+1);
/* We know this system. */ /* We now know this system. */
cur_system->known = 1; sys_setFlag(cur_system, SYSTEM_KNOWN);
} }
/* Load the planets of name 'name'. */ /* Load the planets of name 'name'. */
@ -1148,7 +1148,7 @@ void space_exit(void) {
void space_clearKnown(void) { void space_clearKnown(void) {
int i; int i;
for(i = 0; i < systems_nstack; i++) for(i = 0; i < systems_nstack; i++)
systems_stack[i].known = 0; sys_rmFlag(&systems_stack[i], SYSTEM_KNOWN);
} }
/* Save what is needed to be saved for space. */ /* Save what is needed to be saved for space. */
@ -1158,7 +1158,7 @@ int space_sysSave(xmlTextWriterPtr writer) {
xmlw_startElem(writer, "space"); xmlw_startElem(writer, "space");
for(i = 0; i < systems_nstack; i++) { for(i = 0; i < systems_nstack; i++) {
if(systems_stack[i].known == 0) continue; /* Not Known */ if(!sys_isKnown(&systems_stack[i])) continue; /* Not known. */
xmlw_elem(writer, "known", "%s", systems_stack[i].name); xmlw_elem(writer, "known", "%s", systems_stack[i].name);
} }
@ -1181,7 +1181,7 @@ int space_sysLoad(xmlNodePtr parent) {
do { do {
if(xml_isNode(cur, "known")) { if(xml_isNode(cur, "known")) {
sys = system_get(xml_get(cur)); sys = system_get(xml_get(cur));
sys->known = 1; sys_setFlag(sys, SYSTEM_KNOWN);
} }
} while(xml_nextNode(cur)); } while(xml_nextNode(cur));
} }

View File

@ -70,6 +70,14 @@ typedef struct Planet_ {
glTexture* gfx_exterior; /* Graphics in the exterior. */ glTexture* gfx_exterior; /* Graphics in the exterior. */
} Planet; } Planet;
/* Star system flags. */
#define SYSTEM_KNOWN (1<<0)
#define SYSTEM_MARKED (1<<1)
#define sys_isFlag(s,f) ((s)->flags & (f))
#define sys_setFlag(s,f) if(!sys_isFlag(s,f)) (s)->flags |= (f)
#define sys_rmFlag(s,f) if(sys_isFlag(s,f)) (s)->flags ^= (f)
#define sys_isKnown(s) ((s)->flags & SYSTEM_KNOWN)
/* Star systems. */ /* Star systems. */
typedef struct SystemFleet_ { typedef struct SystemFleet_ {
Fleet* fleet; /* Fleet to appear. */ Fleet* fleet; /* Fleet to appear. */
@ -93,7 +101,7 @@ typedef struct StarSystem_ {
int* jumps; /* Adjacent star system index number. */ int* jumps; /* Adjacent star system index number. */
int njumps; /* Number of adjacent jumps. */ int njumps; /* Number of adjacent jumps. */
int known; /* Known by player? */ unsigned int flags; /* Flags for system properties. */
} StarSystem; } StarSystem;
extern StarSystem* cur_system; /* Current star system. */ extern StarSystem* cur_system; /* Current star system. */