X-Git-Url: https://git.zerfleddert.de/cgi-bin/gitweb.cgi/micropolis/blobdiff_plain/93200bebd82795ae3fa18226d8e31e0be9e0f1cc..cc31822e4ebe54c0109623ac0c5cdf0e3acad755:/src/sim/g_map.c diff --git a/src/sim/g_map.c b/src/sim/g_map.c index 87c7e27..5a65e00 100644 --- a/src/sim/g_map.c +++ b/src/sim/g_map.c @@ -83,23 +83,21 @@ short valGrayMap[] = { }; -int (*mapProcs[NMAPS])(); - -int drawAll(SimView *view); -int drawRes(SimView *view); -int drawCom(SimView *view); -int drawInd(SimView *view); -int drawPower(SimView *view); -int drawLilTransMap(SimView *view); -int drawPopDensity(SimView *view); -int drawRateOfGrowth(SimView *view); -int drawTrafMap(SimView *view); -int drawPolMap(SimView *view); -int drawCrimeMap(SimView *view); -int drawLandMap(SimView *view); -int drawFireRadius(SimView *view); -int drawPoliceRadius(SimView *view); -int drawDynamic(SimView *view); +void (*mapProcs[NMAPS])(); + +void drawPopDensity(SimView *view); +void drawRateOfGrowth(SimView *view); +void drawTrafMap(SimView *view); +void drawPolMap(SimView *view); +void drawCrimeMap(SimView *view); +void drawLandMap(SimView *view); +void drawFireRadius(SimView *view); +void drawPoliceRadius(SimView *view); +void ditherMap(SimView *view); +void drawRect(SimView *view, int pixel, int solid, + int x, int y, int w, int h); +void maybeDrawRect(SimView *view, int val, + int x, int y, int w, int h); short GetCI(short x) @@ -112,6 +110,7 @@ short GetCI(short x) } +void drawPopDensity(SimView *view) { short x, y; @@ -126,6 +125,7 @@ drawPopDensity(SimView *view) } +void drawRateOfGrowth(SimView *view) { short x, y; @@ -153,6 +153,7 @@ drawRateOfGrowth(SimView *view) } +void drawTrafMap(SimView *view) { short x; @@ -169,6 +170,7 @@ drawTrafMap(SimView *view) } +void drawPolMap(SimView *view) { short x, y; @@ -184,6 +186,7 @@ drawPolMap(SimView *view) } +void drawCrimeMap(SimView *view) { short x, y; @@ -199,6 +202,7 @@ drawCrimeMap(SimView *view) } +void drawLandMap(SimView *view) { short x, y; @@ -214,12 +218,13 @@ drawLandMap(SimView *view) } +void drawFireRadius(SimView *view) { short x, y; drawAll(view); - for (x = 0; x < SmY; x++) { + for (x = 0; x < SmX; x++) { for (y = 0; y < SmY; y++) { maybeDrawRect(view, GetCI(FireRate[x][y]), x * 24, y * 24, 24, 24); @@ -228,6 +233,7 @@ drawFireRadius(SimView *view) } +void drawPoliceRadius(SimView *view) { short x, y; @@ -242,6 +248,7 @@ drawPoliceRadius(SimView *view) } +void setUpMapProcs(void) { mapProcs[ALMAP] = drawAll; @@ -262,6 +269,7 @@ setUpMapProcs(void) } +void MemDrawMap(SimView *view) { (*mapProcs[view->map_state])(view); @@ -275,6 +283,7 @@ MemDrawMap(SimView *view) } +void ditherMap(SimView *view) { int i, x, y, width, height; @@ -346,6 +355,7 @@ ditherMap(SimView *view) } +void maybeDrawRect(SimView *view, int val, int x, int y, int w, int h) { @@ -359,6 +369,7 @@ maybeDrawRect(SimView *view, int val, } +void drawRect(SimView *view, int pixel, int solid, int x, int y, int w, int h) { @@ -385,8 +396,10 @@ drawRect(SimView *view, int pixel, int solid, if (w && h) { int i, j, stipple = (x ^ y) & 1; +#if 0 unsigned char *data = view->x->color ? view->data : view->data8; +#endif /* In the case of black and white, we use an 8 bit buffer and dither it. */ int pixelBytes = @@ -394,8 +407,10 @@ drawRect(SimView *view, int pixel, int solid, QUAD line = view->x->color ? view->line_bytes : view->line_bytes8; +#if 0 unsigned char *image = &(data[(line * y) + (x * pixelBytes)]); +#endif switch (pixelBytes) { @@ -406,25 +421,15 @@ drawRect(SimView *view, int pixel, int solid, unsigned char *image = &data[(line * y) + (x * pixelBytes)]; - if (solid) { - for (i = h; i > 0; i--) { - for (j = w; j > 0; j--) { + for (i = h; i > 0; i--) { + for (j = w; j > 0; j--) { + if (solid || stipple++ & 1) *image = pixel; - image++; - } - image += line - w; - } - } else { - for (i = h; i > 0; i--) { - for (j = w; j > 0; j--) { - if (stipple++ & 1) - *image = pixel; - image++; - } - if (!(w & 1)) - stipple++; - image += line - w; + image++; } + if (!(w & 1)) + stipple++; + image += line - w; } } break; @@ -438,26 +443,22 @@ drawRect(SimView *view, int pixel, int solid, image = &data[(line * y) + x]; - if (solid) { - for (i = h; i > 0; i--) { - for (j = w; j > 0; j--) { - *image = pixel; - image++; - } - image += line - w; - } - } else { - for (i = h; i > 0; i--) { - for (j = w; j > 0; j--) { - if (stipple++ & 1) - *image = pixel; - image++; + for (i = h; i > 0; i--) { + for (j = w; j > 0; j--) { + if (solid || stipple++ & 1) { + if (view->x->x_big_endian) { + *image = ((pixel & 0xff) << 8) | ((pixel & 0xff00) >> 8); + } else { + *image = pixel; + } } - if (!(w & 1)) - stipple++; - image += line - w; + image++; } + if (!(w & 1)) + stipple++; + image += line - w; } + } break; @@ -470,37 +471,36 @@ drawRect(SimView *view, int pixel, int solid, image = &data[(line * y) + x * pixelBytes]; - if (solid) { - for (i = h; i > 0; i--) { - for (j = w; j > 0; j--) { - *(image++) = (pixel >> 0) & 0xff; - *(image++) = (pixel >> 8) & 0xff; - *(image++) = (pixel >> 16) & 0xff; + for (i = h; i > 0; i--) { + for (j = w; j > 0; j--) { + if (view->x->x_big_endian) { if (pixelBytes == 4) { image++; } - } - image += line - w * pixelBytes; - } - } else { - for (i = h; i > 0; i--) { - for (j = w; j > 0; j--) { - if (stipple++ & 1) { - *(image++) = (pixel >> 0) & 0xff; - *(image++) = (pixel >> 8) & 0xff; - *(image++) = (pixel >> 16) & 0xff; + if (solid || stipple++ & 1) { + *(image++) = (pixel >> 16) & 0xff; + *(image++) = (pixel >> 8) & 0xff; + *(image++) = (pixel >> 0) & 0xff; + } else { + image += 3; + } + } else { + if (solid || stipple++ & 1) { + *(image++) = (pixel >> 0) & 0xff; + *(image++) = (pixel >> 8) & 0xff; + *(image++) = (pixel >> 16) & 0xff; } else { image += 3; } if (pixelBytes == 4) { - image++; + image++; } } - if (!(w & 1)) { - stipple++; - } - image += line - w * pixelBytes; } + if (!(w & 1)) { + stipple++; + } + image += line - w * pixelBytes; } } break;