[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++) {
sys = &systems_stack[i];
/* Check ot make sure system is known of adjacent to known. */
if(!space_sysReachable(sys)) {
for(j = 0; j < sys->njumps; j++)
if(systems_stack[sys->jumps[j]].known == 1)
break;
if(j == sys->njumps) /* None found. */
continue;
}
/* Check to make sure system is known of adjacent to known. */
if(!space_sysReachable(sys)) continue;
/* System Colours. */
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 COLOUR(cYellow);
@ -191,7 +185,7 @@ static void map_render(double bx, double by, double w, double h) {
r, bx, by, w, h);
/* Draw the system name. */
if(sys->known != 0) {
if(sys_isKnown(sys)) {
tx = x + 7. + sys->pos.x * map_zoom;
ty = y - 5. + sys->pos.y * map_zoom;
gl_print(&gl_smallFont,
@ -199,7 +193,7 @@ static void map_render(double bx, double by, double w, double h) {
&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. */
glShadeModel(GL_SMOOTH);

View File

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

View File

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

View File

@ -70,6 +70,14 @@ typedef struct Planet_ {
glTexture* gfx_exterior; /* Graphics in the exterior. */
} 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. */
typedef struct SystemFleet_ {
Fleet* fleet; /* Fleet to appear. */
@ -93,7 +101,7 @@ typedef struct StarSystem_ {
int* jumps; /* Adjacent star system index number. */
int njumps; /* Number of adjacent jumps. */
int known; /* Known by player? */
unsigned int flags; /* Flags for system properties. */
} StarSystem;
extern StarSystem* cur_system; /* Current star system. */