From 700e47cd577e4ac4b18e16967685e6bea13a171e Mon Sep 17 00:00:00 2001 From: Allanis Date: Mon, 24 Jun 2013 21:48:57 +0100 Subject: [PATCH] [Add] Use flags now for systems to allow missions to mark them. --- src/map.c | 16 +++++----------- src/player.c | 2 +- src/space.c | 18 +++++++++--------- src/space.h | 10 +++++++++- 4 files changed, 24 insertions(+), 22 deletions(-) diff --git a/src/map.c b/src/map.c index f08dd3a..6108d01 100644 --- a/src/map.c +++ b/src/map.c @@ -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); diff --git a/src/player.c b/src/player.c index c89b662..3932ea4 100644 --- a/src/player.c +++ b/src/player.c @@ -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. */ diff --git a/src/space.c b/src/space.c index bbc9aeb..3cc4b0b 100644 --- a/src/space.c +++ b/src/space.c @@ -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)); } diff --git a/src/space.h b/src/space.h index bb2cd34..195ad1a 100644 --- a/src/space.h +++ b/src/space.h @@ -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. */