forked from github/server
newterrain was unfit for unit testing.
bad test: insects cannot trade in deserts without castle.
This commit is contained in:
parent
f997ff7e59
commit
db253ea6a1
4 changed files with 28 additions and 9 deletions
|
@ -254,6 +254,7 @@ static void test_trade_insect(CuTest *tc) {
|
|||
CuAssertPtrEquals(tc, r, u->region);
|
||||
CuAssertPtrEquals(tc, (void *)it_luxury, (void *)r_luxury(u->region));
|
||||
produce(u->region);
|
||||
CuAssertPtrEquals(tc, NULL, test_find_messagetype(u->faction->msgs, "error119"));
|
||||
CuAssertIntEquals(tc, 1, get_item(u, it_luxury));
|
||||
CuAssertIntEquals(tc, 5, get_item(u, it_silver));
|
||||
|
||||
|
|
|
@ -1202,12 +1202,17 @@ void terraform_region(region * r, const terrain_type * terrain)
|
|||
}
|
||||
|
||||
if (oldterrain == NULL || terrain->size != oldterrain->size) {
|
||||
static int changed;
|
||||
static const terrain_type *t_plain;
|
||||
int horses = 0, trees = 0;
|
||||
if (terrain_changed(&changed)) {
|
||||
t_plain = get_terrain(terrainnames[T_PLAIN]);
|
||||
}
|
||||
if (terrain->size>0) {
|
||||
horses = rng_int() % (terrain->size / 50);
|
||||
trees = terrain->size * (30 + rng_int() % 40) / 1000;
|
||||
}
|
||||
if (terrain == newterrain(T_PLAIN)) {
|
||||
if (t_plain && terrain == t_plain) {
|
||||
rsethorses(r, horses);
|
||||
if (chance(0.4)) {
|
||||
rsettrees(r, 2, trees);
|
||||
|
|
|
@ -38,7 +38,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
static const char *terrainnames[MAXTERRAINS] = {
|
||||
const char *terrainnames[MAXTERRAINS] = {
|
||||
"ocean",
|
||||
"plain",
|
||||
"swamp",
|
||||
|
@ -114,10 +114,14 @@ static terrain_type *terrain_find_i(const char *name)
|
|||
return terrain;
|
||||
}
|
||||
|
||||
const terrain_type *get_terrain(const char *name) {
|
||||
static terrain_type *get_terrain_i(const char *name) {
|
||||
return terrain_find_i(name);
|
||||
}
|
||||
|
||||
const terrain_type *get_terrain(const char *name) {
|
||||
return get_terrain_i(name);
|
||||
}
|
||||
|
||||
terrain_type * get_or_create_terrain(const char *name) {
|
||||
terrain_type *terrain = terrain_find_i(name);
|
||||
if (!terrain) {
|
||||
|
@ -127,7 +131,7 @@ terrain_type * get_or_create_terrain(const char *name) {
|
|||
terrain->_name = str_strdup(name);
|
||||
terrain->next = registered_terrains;
|
||||
registered_terrains = terrain;
|
||||
if (strcmp("plain", name) == 0) {
|
||||
if (strcmp(terrainnames[T_PLAIN], name) == 0) {
|
||||
/* TODO: this is awful, it belongs in config */
|
||||
terrain->name = &plain_name;
|
||||
}
|
||||
|
@ -136,19 +140,26 @@ terrain_type * get_or_create_terrain(const char *name) {
|
|||
return terrain;
|
||||
}
|
||||
|
||||
static const terrain_type *newterrains[MAXTERRAINS];
|
||||
static terrain_type *newterrains[MAXTERRAINS];
|
||||
|
||||
const struct terrain_type *newterrain(terrain_t t)
|
||||
{
|
||||
static int changed;
|
||||
const struct terrain_type *result;
|
||||
if (t == NOTERRAIN) {
|
||||
return NULL;
|
||||
}
|
||||
assert(t >= 0);
|
||||
assert(t < MAXTERRAINS);
|
||||
if (terrain_changed(&changed)) {
|
||||
memset(newterrains, 0, sizeof(newterrains));
|
||||
result = NULL;
|
||||
}
|
||||
else {
|
||||
result = newterrains[t];
|
||||
}
|
||||
if (!result) {
|
||||
result = newterrains[t] = get_terrain(terrainnames[t]);
|
||||
result = newterrains[t] = get_terrain_i(terrainnames[t]);
|
||||
}
|
||||
if (!result) {
|
||||
log_error("no such terrain: %s.", terrainnames[t]);
|
||||
|
@ -194,11 +205,11 @@ void init_terrains(void)
|
|||
{
|
||||
terrain_t t;
|
||||
for (t = 0; t != MAXTERRAINS; ++t) {
|
||||
const terrain_type *newterrain = newterrains[t];
|
||||
terrain_type *newterrain = newterrains[t];
|
||||
if (newterrain != NULL)
|
||||
continue;
|
||||
if (terrainnames[t] != NULL) {
|
||||
newterrain = get_terrain(terrainnames[t]);
|
||||
newterrain = get_terrain_i(terrainnames[t]);
|
||||
if (newterrain != NULL) {
|
||||
newterrains[t] = newterrain;
|
||||
}
|
||||
|
|
|
@ -36,6 +36,8 @@ extern "C" {
|
|||
#define SWIM_INTO (1<<8) /* man darf hierhin schwimmen */
|
||||
#define WALK_INTO (1<<9) /* man darf hierhin laufen */
|
||||
|
||||
extern const char *terrainnames[];
|
||||
|
||||
typedef struct production_rule {
|
||||
char *name;
|
||||
const struct resource_type *rtype;
|
||||
|
|
Loading…
Reference in a new issue