Mercurial > ~darius > hgwebdir.cgi > paradise_client
view planetlist.c @ 3:5a977ccbc7a9 default tip
Empty changelog
author | darius |
---|---|
date | Sat, 06 Dec 1997 05:41:29 +0000 |
parents | |
children |
line wrap: on
line source
/* $Id: planetlist.c,v 1.1.1.1 1997/12/06 05:41:29 darius Exp $ */ /* * planetlist.c */ #include "copyright.h" #include <stdio.h> #include <string.h> #include "Wlib.h" #include "defs.h" #include "struct.h" #include "data.h" #include "proto.h" /* Prototypes */ static void planet_list_paradise P((void)); static void planet_list_normal P((void)); static void print_planet P((W_Window wind, int line, struct planet * j)); static char *teamname[5] = { "IND", "FED", "ROM", "KLI", "ORI" }; /* ** Open a window which contains all the planets and their current ** statistics. Players will not know about planets that their team ** has not orbited. */ void planetlist() { /* W_ClearWindow(planetw); */ if (!paradise) { /* if not a paradise server then */ planet_list_normal(); } else { /* else must be a paradise server */ planet_list_paradise(); } } /*This function provides the planet list for a normal server. */ static void planet_list_normal() { int k = 0; /* for row number */ int i; /* looping var */ struct planet *j; /* to point to a planet */ char buf[100]; /* to sprintf into */ char buf1[40]; W_Window wind; wind = planetw; for (i = 0, j = &planets[i]; i < nplanets; i++, j++) { if (i == 0 || i == nplanets / 2) { if (i != 0) { wind = planetw2; } sprintf(buf, "Planet name Own Armies Resources Info"); W_WriteText(wind, 2, 1, textColor, buf, strlen(buf), W_RegularFont); k = 2; } sprintf(buf1, "%-16s ", j->pl_name); if (j->pl_info & idx_to_mask(me->p_teami)) { sprintf(buf, "%3s %3d %s%s%s %s ", teamname[mask_to_idx(j->pl_owner) + 1], j->pl_armies, (j->pl_flags & PLREPAIR ? "REPR " : " "), (j->pl_flags & PLFUEL ? "FUEL " : " "), (j->pl_flags & PLAGRI ? "AGRI " : " "), team_bit_string(j->pl_info)); W_WriteText(wind, 2, k, planetColor(j), buf1, strlen(buf1), planetFont(j)); W_WriteText(wind, 24, k++, planetColor(j), buf, strlen(buf), planetFont(j)); } /* end of have info */ else { /* else no info on planet */ W_WriteText(wind, 2, k++, planetColor(j), buf1, strlen(buf1), planetFont(j)); } } /* end of for loop */ } /*This function provides the planet list for a paradise server version 2.0 */ static void planet_list_paradise() { typedef struct planet *plptr; int k = 0; /* for row number */ int i, team_pnum; /* looping var */ plptr j; /* to point to a planet */ char buf[100]; /* to sprintf into */ W_Window wind; extern int number_of_teams; plptr **team_p; int *team_pcount; wind = planetw; /* this malloc stuff will handle any number of teams/races */ /* team's planet counters */ team_pcount = (int *) malloc((number_of_teams + 1) * sizeof(int)); for (i = 0; i < number_of_teams + 1; i++) team_pcount[i] = 0; if (mapSort) { /* make some memory */ team_p = (plptr **) malloc((number_of_teams + 1) * sizeof(struct planet *)); for (i = 0; i < (number_of_teams + 1); i++) team_p[i] = (plptr *) malloc(nplanets * sizeof(struct planet *)); /* loop thru and put proper team planeter point on each planet */ for (i = 0, j = &planets[i]; i < nplanets; i++, j++) { k = mask_to_idx(j->pl_owner) + 1; /* which team gets planet */ team_p[k][team_pcount[k]] = j; team_pcount[k]++; } /* go thru each teams planet list and display */ for (i = 0, k = 0; i < (number_of_teams + 1); i++) { for (team_pnum = 0; team_pnum < team_pcount[i]; team_pnum++, k++) { j = team_p[i][team_pnum]; /* (nplanets+13)/2 is the height of window; from newwin.c */ if (k == 0 || k >= ((nplanets + 13) / 2)) { if (k != 0) wind = planetw2; sprintf(buf, "Planet name sctr own armies RESOURCES SURFC ATMOS VISIT TIME"); W_WriteText(wind, 2, 1, textColor, buf, strlen(buf), W_RegularFont); k = 2; } print_planet(wind, k, j); } /* end of 2nd for */ if (team_pcount[i] > 0) k++; } /* end of 1st for */ for (i = 0; i < (number_of_teams + 1); i++) free(team_p[i]); free(team_p); } else { /* do the original alpa only sort planet list */ for (i = 0, j = &planets[i]; i < nplanets; i++, j++, k++) { if (i == 0 || i == nplanets / 2) { sprintf(buf, "Planet name sctr own armies RESOURCES SURFC ATMOS VISIT TIME"); if (i != 0) { wind = planetw2; } W_WriteText(wind, 2, 1, textColor, buf, strlen(buf), W_RegularFont); k = 2; } team_pcount[mask_to_idx(j->pl_owner) + 1]++; print_planet(wind, k, j); } } k++; for (i = 0; i < (number_of_teams + 1); i++) { W_Color cur_color; cur_color = shipCol[i]; sprintf(buf, "%s: ", teamname[i]); W_WriteText(wind, i * 7 + 2, k, cur_color, buf, strlen(buf), W_RegularFont); sprintf(buf, " %.2i", team_pcount[i]); W_WriteText(wind, i * 7 + 2, k + 1, cur_color, buf, strlen(buf), W_RegularFont); } free(team_pcount); } /* end of planet_list_paradise */ /****************************** print_planet() ************************/ static void print_planet(wind, line, j) W_Window wind; int line; struct planet *j; { char buf[100]; /* to sprintf into */ sprintf(buf, "%-16s %d-%d", j->pl_name, (j->pl_x / GRIDSIZE) + 1, (j->pl_y / GRIDSIZE) + 1); W_WriteText(wind, 2, line, textColor, buf, strlen(buf), W_RegularFont); if (j->pl_info & idx_to_mask(me->p_teami)) { if (PL_TYPE(*j) == PLSTAR) { /* if planet actually a star */ W_WriteText(wind, 24, line, textColor, "---S T A R---", 13, W_RegularFont); } else if (PL_TYPE(*j) == PLWHOLE) { /* if wormhole... */ W_WriteText(wind, 24, line, textColor, "---W O R M H O L E---", 21, W_RegularFont); } else { /* else planet not a star */ char *s = NULL; switch (j->pl_flags & PLATMASK) { case PLPOISON: s = "TOXC"; break; case PLATYPE3: s = "TNTD"; break; case PLATYPE2: s = "THIN"; break; case PLATYPE1: s = "STND"; break; }; sprintf(buf, "%3s %3d %c%c%c%c %c%c%c %4s", teamname[mask_to_idx(j->pl_owner) + 1], j->pl_armies, (j->pl_flags & PLREPAIR ? 'R' : ' '), (j->pl_flags & PLFUEL ? 'F' : ' '), (j->pl_flags & PLAGRI ? 'A' : ' '), (j->pl_flags & PLSHIPYARD ? 'S' : ' '), (j->pl_flags & PLDILYTH ? 'D' : ' '), (j->pl_flags & PLMETAL ? 'M' : ' '), (j->pl_flags & PLARABLE ? 'A' : ' '), s); W_WriteText(wind, 24, line, planetColor(j), buf, strlen(buf), planetFont(j)); sprintf(buf, "%4s %3ld", team_bit_string(j->pl_info), ((idx_to_mask(me->p_teami) == j->pl_owner) ? 0 : (status2->clock - j->pl_timestamp))); W_WriteText(wind, 64, line, planetColor(j), buf, strlen(buf), planetFont(j)); } } else { sprintf(buf, "--- No info; Scout me ---"); W_WriteText(wind, 24, line, textColor, buf, strlen(buf), W_RegularFont); } } /* end of print_planet */