forked from github/server
is_building_type should be a quicker way to test for a building type than bt_find.
This commit is contained in:
parent
fdc91c01a0
commit
5bb9a10a46
|
@ -158,9 +158,7 @@ const char *buildingtype(const building_type * btype, const building * b, int bs
|
||||||
s = btype->name(btype, b, bsize);
|
s = btype->name(btype, b, bsize);
|
||||||
}
|
}
|
||||||
if (b && b->attribs) {
|
if (b && b->attribs) {
|
||||||
const struct building_type *bt_generic = bt_find("generic");
|
if (is_building_type(btype, "generic")) {
|
||||||
|
|
||||||
if (btype == bt_generic) {
|
|
||||||
const attrib *a = a_find(b->attribs, &at_building_generic_type);
|
const attrib *a = a_find(b->attribs, &at_building_generic_type);
|
||||||
if (a) {
|
if (a) {
|
||||||
s = (const char *)a->data.v;
|
s = (const char *)a->data.v;
|
||||||
|
@ -390,16 +388,9 @@ building *new_building(const struct building_type * btype, region * r,
|
||||||
{
|
{
|
||||||
building **bptr = &r->buildings;
|
building **bptr = &r->buildings;
|
||||||
building *b = (building *)calloc(1, sizeof(building));
|
building *b = (building *)calloc(1, sizeof(building));
|
||||||
static bool init_lighthouse = false;
|
|
||||||
static const struct building_type *bt_lighthouse = 0;
|
|
||||||
const char *bname = 0;
|
const char *bname = 0;
|
||||||
char buffer[32];
|
char buffer[32];
|
||||||
|
|
||||||
if (!init_lighthouse) {
|
|
||||||
bt_lighthouse = bt_find("lighthouse");
|
|
||||||
init_lighthouse = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
b->no = newcontainerid();
|
b->no = newcontainerid();
|
||||||
bhash(b);
|
bhash(b);
|
||||||
|
|
||||||
|
@ -409,9 +400,7 @@ building *new_building(const struct building_type * btype, region * r,
|
||||||
bptr = &(*bptr)->next;
|
bptr = &(*bptr)->next;
|
||||||
*bptr = b;
|
*bptr = b;
|
||||||
|
|
||||||
if (b->type == bt_lighthouse) {
|
update_lighthouse(b);
|
||||||
r->flags |= RF_LIGHTHOUSE;
|
|
||||||
}
|
|
||||||
if (b->type->name) {
|
if (b->type->name) {
|
||||||
bname = LOC(lang, buildingtype(btype, b, 0));
|
bname = LOC(lang, buildingtype(btype, b, 0));
|
||||||
}
|
}
|
||||||
|
@ -695,3 +684,8 @@ bool in_safe_building(unit *u1, unit *u2) {
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool is_building_type(const struct building_type *btype, const char *name) {
|
||||||
|
assert(btype);
|
||||||
|
return name && strcmp(btype->_name, name)==0;
|
||||||
|
}
|
||||||
|
|
|
@ -163,6 +163,7 @@ extern "C" {
|
||||||
bool buildingtype_exists(const struct region *r,
|
bool buildingtype_exists(const struct region *r,
|
||||||
const struct building_type *bt, bool working);
|
const struct building_type *bt, bool working);
|
||||||
bool building_is_active(const struct building *b);
|
bool building_is_active(const struct building *b);
|
||||||
|
bool is_building_type(const struct building_type *btype, const char *name);
|
||||||
struct building *active_building(const struct unit *u, const struct building_type *btype);
|
struct building *active_building(const struct unit *u, const struct building_type *btype);
|
||||||
|
|
||||||
extern const char *buildingname(const struct building *b);
|
extern const char *buildingname(const struct building *b);
|
||||||
|
|
|
@ -480,6 +480,16 @@ static void test_safe_building(CuTest *tc) {
|
||||||
test_cleanup();
|
test_cleanup();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void test_building_type(CuTest *tc) {
|
||||||
|
building_type *btype;
|
||||||
|
test_setup();
|
||||||
|
btype = test_create_buildingtype("house");
|
||||||
|
CuAssertIntEquals(tc, true, is_building_type(btype, "house"));
|
||||||
|
CuAssertIntEquals(tc, false, is_building_type(btype, "castle"));
|
||||||
|
CuAssertIntEquals(tc, false, is_building_type(NULL, "house"));
|
||||||
|
test_cleanup();
|
||||||
|
}
|
||||||
|
|
||||||
CuSuite *get_building_suite(void)
|
CuSuite *get_building_suite(void)
|
||||||
{
|
{
|
||||||
CuSuite *suite = CuSuiteNew();
|
CuSuite *suite = CuSuiteNew();
|
||||||
|
@ -494,6 +504,7 @@ CuSuite *get_building_suite(void)
|
||||||
SUITE_ADD_TEST(suite, test_buildingowner_goes_to_other_after_leave);
|
SUITE_ADD_TEST(suite, test_buildingowner_goes_to_other_after_leave);
|
||||||
SUITE_ADD_TEST(suite, test_buildingowner_goes_to_same_faction_after_leave);
|
SUITE_ADD_TEST(suite, test_buildingowner_goes_to_same_faction_after_leave);
|
||||||
SUITE_ADD_TEST(suite, test_buildingowner_goes_to_empty_unit_after_leave);
|
SUITE_ADD_TEST(suite, test_buildingowner_goes_to_empty_unit_after_leave);
|
||||||
|
SUITE_ADD_TEST(suite, test_building_type);
|
||||||
SUITE_ADD_TEST(suite, test_active_building);
|
SUITE_ADD_TEST(suite, test_active_building);
|
||||||
SUITE_ADD_TEST(suite, test_buildingtype_exists);
|
SUITE_ADD_TEST(suite, test_buildingtype_exists);
|
||||||
SUITE_ADD_TEST(suite, test_safe_building);
|
SUITE_ADD_TEST(suite, test_safe_building);
|
||||||
|
|
|
@ -899,7 +899,6 @@ default_wage(const region * r, const faction * f, const race * rc, int in_turn)
|
||||||
int esize = 0;
|
int esize = 0;
|
||||||
double wage;
|
double wage;
|
||||||
attrib *a;
|
attrib *a;
|
||||||
const building_type *artsculpture_type = bt_find("artsculpture");
|
|
||||||
const struct curse_type *ctype;
|
const struct curse_type *ctype;
|
||||||
|
|
||||||
if (b != NULL) {
|
if (b != NULL) {
|
||||||
|
@ -935,7 +934,7 @@ default_wage(const region * r, const faction * f, const race * rc, int in_turn)
|
||||||
|
|
||||||
/* Artsculpture: Income +5 */
|
/* Artsculpture: Income +5 */
|
||||||
for (b = r->buildings; b; b = b->next) {
|
for (b = r->buildings; b; b = b->next) {
|
||||||
if (b->type == artsculpture_type) {
|
if (is_building_type(b->type, "artsculpture")) {
|
||||||
wage += 5;
|
wage += 5;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,8 +25,7 @@ static attrib_type at_lighthouse = {
|
||||||
*/
|
*/
|
||||||
void update_lighthouse(building * lh)
|
void update_lighthouse(building * lh)
|
||||||
{
|
{
|
||||||
const struct building_type *bt_lighthouse = bt_find("lighthouse");
|
if (is_building_type(lh->type, "lighthouse")) {
|
||||||
if (bt_lighthouse && lh->type == bt_lighthouse) {
|
|
||||||
region *r = lh->region;
|
region *r = lh->region;
|
||||||
int d = (int)log10(lh->size) + 1;
|
int d = (int)log10(lh->size) + 1;
|
||||||
int x;
|
int x;
|
||||||
|
|
|
@ -1754,11 +1754,9 @@ f_regionid(const region * r, const faction * f, char *buffer, size_t size)
|
||||||
|
|
||||||
static char *f_regionid_s(const region * r, const faction * f)
|
static char *f_regionid_s(const region * r, const faction * f)
|
||||||
{
|
{
|
||||||
static int i = 0;
|
static char buf[NAMESIZE + 20]; // FIXME: static return value
|
||||||
static char bufs[4][NAMESIZE + 20]; // FIXME: static return value
|
|
||||||
char *buf = bufs[(++i) % 4];
|
|
||||||
|
|
||||||
f_regionid(r, f, buf, NAMESIZE + 20);
|
f_regionid(r, f, buf, sizeof(buf));
|
||||||
return buf;
|
return buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue