#include "lcconfig.h"#include <stdio.h>#include <stdlib.h>#include "lcstring.h"#include "common.h"#include "lctypes.h"#include "lin-city.h"#include "typeinit.h"#include "cliglobs.h"#include "engglobs.h"Go to the source code of this file.
Functions | |
| void | set_mappoint_used (int fromx, int fromy, int x, int y) |
| void | set_mappoint (int x, int y, short selected_type) |
| void | connect_transport (int originx, int originy, int w, int h) |
|
||||||||||||||||||||
|
Definition at line 78 of file shrtypes.c. 00079 {
00080 int x, y, mask, tflags;
00081 short group, type;
00082
00083 static const short power_table[16] =
00084 {
00085 CST_POWERL_H_D, CST_POWERL_V_D, CST_POWERL_H_D, CST_POWERL_RD_D,
00086 CST_POWERL_H_D, CST_POWERL_LD_D, CST_POWERL_H_D, CST_POWERL_LDR_D,
00087 CST_POWERL_V_D, CST_POWERL_V_D, CST_POWERL_RU_D, CST_POWERL_UDR_D,
00088 CST_POWERL_LU_D, CST_POWERL_LDU_D, CST_POWERL_LUR_D, CST_POWERL_LUDR_D
00089 };
00090 static const short track_table[16] =
00091 {
00092 CST_TRACK_LR, CST_TRACK_LR, CST_TRACK_UD, CST_TRACK_LU,
00093 CST_TRACK_LR, CST_TRACK_LR, CST_TRACK_UR, CST_TRACK_LUR,
00094 CST_TRACK_UD, CST_TRACK_LD, CST_TRACK_UD, CST_TRACK_LUD,
00095 CST_TRACK_DR, CST_TRACK_LDR, CST_TRACK_UDR, CST_TRACK_LUDR
00096 };
00097 static const short road_table[16] =
00098 {
00099 CST_ROAD_LR, CST_ROAD_LR, CST_ROAD_UD, CST_ROAD_LU,
00100 CST_ROAD_LR, CST_ROAD_LR, CST_ROAD_UR, CST_ROAD_LUR,
00101 CST_ROAD_UD, CST_ROAD_LD, CST_ROAD_UD, CST_ROAD_LUD,
00102 CST_ROAD_DR, CST_ROAD_LDR, CST_ROAD_UDR, CST_ROAD_LUDR
00103 };
00104 static const short rail_table[16] =
00105 {
00106 CST_RAIL_LR, CST_RAIL_LR, CST_RAIL_UD, CST_RAIL_LU,
00107 CST_RAIL_LR, CST_RAIL_LR, CST_RAIL_UR, CST_RAIL_LUR,
00108 CST_RAIL_UD, CST_RAIL_LD, CST_RAIL_UD, CST_RAIL_LUD,
00109 CST_RAIL_DR, CST_RAIL_LDR, CST_RAIL_UDR, CST_RAIL_LUDR
00110 };
00111 static const short water_table[16] =
00112 {
00113 CST_WATER, CST_WATER_D, CST_WATER_R, CST_WATER_RD,
00114 CST_WATER_L, CST_WATER_LD, CST_WATER_LR, CST_WATER_LRD,
00115 CST_WATER_U, CST_WATER_UD, CST_WATER_UR, CST_WATER_URD,
00116 CST_WATER_LU, CST_WATER_LUD, CST_WATER_LUR, CST_WATER_LURD
00117 };
00118
00119 /* Adjust originx,originy,w,h to proper range */
00120 if (originx <= 0) {
00121 w -= 1 - originx;
00122 originx = 1;
00123 }
00124 if (originy <= 0) {
00125 h -= 1 - originy;
00126 originy = 1;
00127 }
00128 if (originx + w >= WORLD_SIDE_LEN) {
00129 w = WORLD_SIDE_LEN - originx;
00130 }
00131 if (originy + h >= WORLD_SIDE_LEN) {
00132 h = WORLD_SIDE_LEN - originy;
00133 }
00134
00135 for (x = originx; x < originx + w; x++) {
00136 for (y = originy; y < originy + h; y++) {
00137 switch (MP_GROUP(x,y))
00138 {
00139 case GROUP_POWER_LINE:
00140 /* First, set up a mask indicating into which directions
00141 power may be transferred */
00142 mask = 0;
00143 #ifdef THOMMY_MAY_BE_WRONG /* just in case -- (ThMO) */
00144 if (y > 0)
00145 #endif
00146 { /* up -- (ThMO) */
00147 group = MP_GROUP(x,y-1);
00148
00149 /* see if dug under track, rail or road */
00150
00151 if (y > 1 && (group == GROUP_TRACK
00152 || group == GROUP_RAIL
00153 || group == GROUP_ROAD
00154 || group == GROUP_WATER))
00155 group = MP_GROUP(x,y-2);
00156 switch (group)
00157 {
00158 case GROUP_POWER_LINE:
00159 case GROUP_SOLAR_POWER:
00160 case GROUP_SUBSTATION:
00161 case GROUP_COAL_POWER:
00162 mask |= 8;
00163 break;
00164 }
00165 }
00166 #ifdef THOMMY_MAY_BE_WRONG /* just in case -- (ThMO) */
00167 if (x > 0)
00168 #endif
00169 { /* left -- (ThMO) */
00170 group = MP_GROUP(x-1,y);
00171 if (x > 1 && (group == GROUP_TRACK
00172 || group == GROUP_RAIL
00173 || group == GROUP_ROAD
00174 || group == GROUP_WATER))
00175 group = MP_GROUP(x-2,y);
00176 switch (group)
00177 {
00178 case GROUP_POWER_LINE:
00179 case GROUP_SOLAR_POWER:
00180 case GROUP_SUBSTATION:
00181 case GROUP_COAL_POWER:
00182 mask |= 4;
00183 break;
00184 }
00185 }
00186 #ifdef THOMMY_MAY_BE_WRONG /* just in case -- (ThMO) */
00187 if (x < WORLD_SIDE_LEN - 1)
00188 #endif
00189 { /* right -- (ThMO) */
00190 group = MP_GROUP(x+1,y);
00191 if (x < WORLD_SIDE_LEN - 2 && (group == GROUP_TRACK
00192 || group == GROUP_RAIL
00193 || group == GROUP_ROAD
00194 || group == GROUP_WATER))
00195 group = MP_GROUP(x+2,y);
00196 switch (group)
00197 {
00198 case GROUP_WINDMILL:
00199 if (MP_INFO(x + 1,y).int_2 < MODERN_WINDMILL_TECH)
00200 break;
00201 case GROUP_POWER_LINE:
00202 case GROUP_SOLAR_POWER:
00203 case GROUP_SUBSTATION:
00204 case GROUP_COAL_POWER:
00205 mask |= 2;
00206 break;
00207 }
00208 }
00209 #ifdef THOMMY_MAY_BE_WRONG /* just in case -- (ThMO) */
00210 if (y < WORLD_SIDE_LEN - 1)
00211 #endif
00212 { /* down -- (ThMO) */
00213 group = MP_GROUP(x,y+1);
00214 if (y < WORLD_SIDE_LEN - 2 && (group == GROUP_TRACK
00215 || group == GROUP_RAIL
00216 || group == GROUP_ROAD
00217 || group == GROUP_WATER))
00218 group = MP_GROUP(x,y+2);
00219 switch (group)
00220 {
00221 case GROUP_WINDMILL:
00222 if (MP_INFO(x,y + 1).int_2 < MODERN_WINDMILL_TECH)
00223 break;
00224 case GROUP_POWER_LINE:
00225 case GROUP_SOLAR_POWER:
00226 case GROUP_SUBSTATION:
00227 case GROUP_COAL_POWER:
00228 ++mask;
00229 break;
00230 }
00231 }
00232 /* Next, set the connectivity into MP_TYPE */
00233 MP_TYPE(x,y) = power_table[mask];
00234 /* Finally, adjust MP_TYPE to show electon bolt */
00235 #ifdef commentout
00236 WCK: This is done in do_power_line now
00237 if (MP_INFO(x,y).int_1 != 0)
00238 MP_TYPE(x,y) -= 11;
00239 #endif
00240 break;
00241
00242 case GROUP_TRACK:
00243 #if FLAG_LEFT != 1 || FLAG_UP != 2 || FLAG_RIGHT != 4 || FLAG_DOWN != 8
00244 #error check_track_graphics(): you loose
00245 #error this algorithm depends on proper flag settings -- (ThMO)
00246 #endif
00247 mask = 0;
00248 #ifdef THOMMY_MAY_BE_WRONG /* just in case -- (ThMO) */
00249 if (y > 0)
00250 #endif
00251 {
00252 if (MP_GROUP(x,y-1) == GROUP_TRACK)
00253 mask |= FLAG_UP;
00254 }
00255 #ifdef THOMMY_MAY_BE_WRONG /* just in case -- (ThMO) */
00256 if (x > 0)
00257 #endif
00258 {
00259 if (MP_GROUP(x-1,y) == GROUP_TRACK)
00260 mask |= FLAG_LEFT;
00261 }
00262 tflags = mask;
00263 #ifdef THOMMY_MAY_BE_WRONG /* just in case -- (ThMO) */
00264 if (x < WORLD_SIDE_LEN - 1)
00265 #endif
00266 {
00267 switch (MP_GROUP(x+1,y))
00268 {
00269 case GROUP_TRACK:
00270 tflags |= FLAG_RIGHT;
00271 case GROUP_COMMUNE:
00272 case GROUP_COALMINE:
00273 case GROUP_OREMINE:
00274 case GROUP_INDUSTRY_L:
00275 case GROUP_INDUSTRY_H:
00276 case GROUP_RECYCLE:
00277 case GROUP_TIP:
00278 case GROUP_PORT:
00279 mask |= FLAG_RIGHT;
00280 break;
00281 default:
00282 #ifdef THOMMY_MAY_BE_WRONG /* just in case -- (ThMO) */
00283 if (y > 0)
00284 #endif
00285 if (MP_GROUP(x+1,y-1) == GROUP_COAL_POWER)
00286 mask |= FLAG_RIGHT;
00287 break;
00288 }
00289 }
00290 #ifdef THOMMY_MAY_BE_WRONG /* just in case -- (ThMO) */
00291 if (y < WORLD_SIDE_LEN - 1)
00292 #endif
00293 {
00294 switch (MP_GROUP(x,y+1))
00295 {
00296 case GROUP_TRACK:
00297 tflags |= FLAG_DOWN;
00298 case GROUP_COMMUNE:
00299 case GROUP_COALMINE:
00300 case GROUP_OREMINE:
00301 case GROUP_INDUSTRY_L:
00302 case GROUP_INDUSTRY_H:
00303 case GROUP_RECYCLE:
00304 case GROUP_TIP:
00305 case GROUP_PORT:
00306 mask |= FLAG_DOWN;
00307 break;
00308 default:
00309 #ifdef THOMMY_MAY_BE_WRONG /* just in case -- (ThMO) */
00310 if (x > 0)
00311 #endif
00312 if (MP_GROUP(x-1,y+1) == GROUP_COAL_POWER)
00313 mask |= FLAG_DOWN;
00314 break;
00315 }
00316 }
00317 MP_INFO(x,y).flags &= ~(FLAG_UP | FLAG_DOWN | FLAG_LEFT
00318 | FLAG_RIGHT);
00319 MP_INFO(x,y).flags |= tflags;
00320 MP_TYPE(x,y) = track_table[mask];
00321 break;
00322
00323 case GROUP_ROAD:
00324 #if FLAG_LEFT != 1 || FLAG_UP != 2 || FLAG_RIGHT != 4 || FLAG_DOWN != 8
00325 #error check_road_graphics(): you loose
00326 #error this algorithm depends on proper flag settings -- (ThMO)
00327 #endif
00328 mask = 0;
00329 #ifdef THOMMY_MAY_BE_WRONG /* just in case -- (ThMO) */
00330 if (y > 0)
00331 #endif
00332 {
00333 if (MP_GROUP(x,y-1) == GROUP_ROAD)
00334 mask |= FLAG_UP;
00335 }
00336 #ifdef THOMMY_MAY_BE_WRONG /* just in case -- (ThMO) */
00337 if (x > 0)
00338 #endif
00339 {
00340 if (MP_GROUP(x-1,y) == GROUP_ROAD)
00341 mask |= FLAG_LEFT;
00342 }
00343 tflags = mask;
00344 #ifdef THOMMY_MAY_BE_WRONG /* just in case -- (ThMO) */
00345 if (x < WORLD_SIDE_LEN - 1)
00346 #endif
00347 {
00348 switch (MP_GROUP(x+1,y))
00349 {
00350 case GROUP_ROAD:
00351 tflags |= FLAG_RIGHT;
00352 case GROUP_COMMUNE:
00353 case GROUP_COALMINE:
00354 case GROUP_OREMINE:
00355 case GROUP_INDUSTRY_L:
00356 case GROUP_INDUSTRY_H:
00357 case GROUP_RECYCLE:
00358 case GROUP_TIP:
00359 case GROUP_PORT:
00360 mask |= FLAG_RIGHT;
00361 break;
00362 default:
00363 #ifdef THOMMY_MAY_BE_WRONG /* just in case -- (ThMO) */
00364 if (y > 0)
00365 #endif
00366 if (MP_GROUP(x+1,y-1) == GROUP_COAL_POWER)
00367 mask |= FLAG_RIGHT;
00368 break;
00369 }
00370 }
00371 #ifdef THOMMY_MAY_BE_WRONG /* just in case -- (ThMO) */
00372 if (y < WORLD_SIDE_LEN - 1)
00373 #endif
00374 {
00375 switch (MP_GROUP(x,y+1))
00376 {
00377 case GROUP_ROAD:
00378 tflags |= FLAG_DOWN;
00379 case GROUP_COMMUNE:
00380 case GROUP_COALMINE:
00381 case GROUP_OREMINE:
00382 case GROUP_INDUSTRY_L:
00383 case GROUP_INDUSTRY_H:
00384 case GROUP_RECYCLE:
00385 case GROUP_TIP:
00386 case GROUP_PORT:
00387 mask |= FLAG_DOWN;
00388 break;
00389 default:
00390 #ifdef THOMMY_MAY_BE_WRONG /* just in case -- (ThMO) */
00391 if (x > 0)
00392 #endif
00393 if (MP_GROUP(x-1,y+1) == GROUP_COAL_POWER)
00394 mask |= FLAG_DOWN;
00395 break;
00396 }
00397 }
00398 MP_INFO(x,y).flags &= ~(FLAG_UP | FLAG_DOWN | FLAG_LEFT
00399 | FLAG_RIGHT);
00400 MP_INFO(x,y).flags |= tflags;
00401 MP_TYPE(x,y) = road_table[mask];
00402 break;
00403
00404 case GROUP_RAIL:
00405 #if FLAG_LEFT != 1 || FLAG_UP != 2 || FLAG_RIGHT != 4 || FLAG_DOWN != 8
00406 #error check_rail_graphics(): you loose
00407 #error this algorithm depends on proper flag settings -- (ThMO)
00408 #endif
00409 mask = 0;
00410 #ifdef THOMMY_MAY_BE_WRONG /* just in case -- (ThMO) */
00411 if (y > 0)
00412 #endif
00413 {
00414 if (MP_GROUP(x,y-1) == GROUP_RAIL)
00415 mask |= FLAG_UP;
00416 }
00417 #ifdef THOMMY_MAY_BE_WRONG /* just in case -- (ThMO) */
00418 if (x > 0)
00419 #endif
00420 {
00421 if (MP_GROUP(x-1,y) == GROUP_RAIL)
00422 mask |= FLAG_LEFT;
00423 }
00424 tflags = mask;
00425 #ifdef THOMMY_MAY_BE_WRONG /* just in case -- (ThMO) */
00426 if (x < WORLD_SIDE_LEN - 1)
00427 #endif
00428 {
00429 switch (MP_GROUP(x+1,y))
00430 {
00431 case GROUP_RAIL:
00432 tflags |= FLAG_RIGHT;
00433 case GROUP_COMMUNE:
00434 case GROUP_COALMINE:
00435 case GROUP_OREMINE:
00436 case GROUP_INDUSTRY_L:
00437 case GROUP_INDUSTRY_H:
00438 case GROUP_RECYCLE:
00439 case GROUP_TIP:
00440 case GROUP_PORT:
00441 mask |= FLAG_RIGHT;
00442 break;
00443 default:
00444 #ifdef THOMMY_MAY_BE_WRONG /* just in case -- (ThMO) */
00445 if (y > 0)
00446 #endif
00447 if (MP_GROUP(x+1,y-1) == GROUP_COAL_POWER)
00448 mask |= FLAG_RIGHT;
00449 break;
00450 }
00451 }
00452 #ifdef THOMMY_MAY_BE_WRONG /* just in case -- (ThMO) */
00453 if (y < WORLD_SIDE_LEN - 1)
00454 #endif
00455 {
00456 switch (MP_GROUP(x,y + 1))
00457 {
00458 case GROUP_RAIL:
00459 tflags |= FLAG_DOWN;
00460 case GROUP_COMMUNE:
00461 case GROUP_COALMINE:
00462 case GROUP_OREMINE:
00463 case GROUP_INDUSTRY_L:
00464 case GROUP_INDUSTRY_H:
00465 case GROUP_RECYCLE:
00466 case GROUP_TIP:
00467 case GROUP_PORT:
00468 mask |= FLAG_DOWN;
00469 break;
00470 default:
00471 #ifdef THOMMY_MAY_BE_WRONG /* just in case -- (ThMO) */
00472 if (x > 0)
00473 #endif
00474 if (MP_GROUP(x - 1,y + 1)
00475 == GROUP_COAL_POWER)
00476 mask |= FLAG_DOWN;
00477 break;
00478 }
00479 }
00480 MP_INFO(x,y).flags &= ~(FLAG_UP | FLAG_DOWN | FLAG_LEFT
00481 | FLAG_RIGHT);
00482 MP_INFO(x,y).flags |= tflags;
00483 MP_TYPE(x,y) = rail_table[mask];
00484 break;
00485
00486 case GROUP_WATER:
00487 mask = 0;
00488 #ifdef THOMMY_MAY_BE_WRONG /* just in case -- (ThMO) */
00489 if (y > 0)
00490 #endif
00491 { /* up -- (ThMO) */
00492 if (MP_GROUP(x,y - 1)
00493 == GROUP_WATER)
00494 mask |= 8;
00495 }
00496 #ifdef THOMMY_MAY_BE_WRONG /* just in case -- (ThMO) */
00497 if (x > 0)
00498 #endif
00499 { /* left -- (ThMO) */
00500 type = MP_TYPE(x - 1,y);
00501 if ((type == CST_USED &&
00502 MP_GROUP(MP_INFO(x-1,y).int_1,MP_INFO(x-1,y).int_2)
00503 == GROUP_PORT)
00504 || get_group_of_type(type) == GROUP_WATER)
00505 mask |= 4;
00506 }
00507 #ifdef THOMMY_MAY_BE_WRONG /* just in case -- (ThMO) */
00508 if (x < WORLD_SIDE_LEN - 1)
00509 #endif
00510 { /* right -- (ThMO) */
00511 if (MP_GROUP(x + 1,y)
00512 == GROUP_WATER)
00513 mask |= 2;
00514 }
00515 #ifdef THOMMY_MAY_BE_WRONG /* just in case -- (ThMO) */
00516 if (y < WORLD_SIDE_LEN - 1)
00517 #endif
00518 { /* down -- (ThMO) */
00519 if (MP_GROUP(x,y + 1)
00520 == GROUP_WATER)
00521 ++mask;
00522 }
00523 MP_TYPE(x,y) = water_table[mask];
00524 break;
00525 } /* end switch */
00526 } /* end for */
00527 } /* end for */
00528 }
|
|
||||||||||||||||
|
Definition at line 29 of file shrtypes.c. 00030 {
00031 int grp;
00032
00033 if ((grp = get_group_of_type(selected_type)) < 0) return;
00034
00035 MP_TYPE(x,y) = selected_type;
00036 MP_GROUP(x,y) = grp;
00037
00038 if (main_groups[grp].size == 2)
00039 {
00040 set_mappoint_used (x, y, x + 1, y);
00041 set_mappoint_used (x, y, x, y + 1);
00042 set_mappoint_used (x, y, x + 1, y + 1);
00043 }
00044 else if (main_groups[grp].size == 3)
00045 {
00046 set_mappoint_used (x, y, x + 1, y);
00047 set_mappoint_used (x, y, x + 2, y);
00048 set_mappoint_used (x, y, x + 1, y + 1);
00049 set_mappoint_used (x, y, x + 2, y + 1);
00050 set_mappoint_used (x, y, x + 1, y + 2);
00051 set_mappoint_used (x, y, x + 2, y + 2);
00052 set_mappoint_used (x, y, x, y + 1);
00053 set_mappoint_used (x, y, x, y + 2);
00054 }
00055 else if (main_groups[grp].size == 4)
00056 {
00057 set_mappoint_used (x, y, x + 1, y);
00058 set_mappoint_used (x, y, x + 2, y);
00059 set_mappoint_used (x, y, x + 1, y + 1);
00060 set_mappoint_used (x, y, x + 2, y + 1);
00061 set_mappoint_used (x, y, x + 1, y + 2);
00062 set_mappoint_used (x, y, x + 2, y + 2);
00063 set_mappoint_used (x, y, x, y + 1);
00064 set_mappoint_used (x, y, x, y + 2);
00065
00066 set_mappoint_used (x, y, x + 3, y);
00067 set_mappoint_used (x, y, x + 3, y + 1);
00068 set_mappoint_used (x, y, x + 3, y + 2);
00069 set_mappoint_used (x, y, x + 3, y + 3);
00070 set_mappoint_used (x, y, x, y + 3);
00071 set_mappoint_used (x, y, x + 1, y + 3);
00072 set_mappoint_used (x, y, x + 2, y + 3);
00073 }
00074 }
|
|
||||||||||||||||||||
|
Definition at line 19 of file shrtypes.c. 00020 {
00021 MP_TYPE(x,y) = CST_USED;
00022 MP_GROUP(x,y) = GROUP_USED;
00023 MP_INFO(x,y).int_1 = fromx;
00024 MP_INFO(x,y).int_2 = fromy;
00025 }
|
1.3.9.1