Merge pull request #617 from ennorehling/hotfix/bug-2266-follow

BUG 2266 Fixing FOLLOW
This commit is contained in:
Enno Rehling 2016-12-16 17:30:02 +01:00 committed by GitHub
commit f5c52a1ccd
5 changed files with 38 additions and 5 deletions

View File

@ -14,7 +14,7 @@
#include <assert.h> #include <assert.h>
#include <math.h> #include <math.h>
const attrib_type at_lighthouse = { attrib_type at_lighthouse = {
"lighthouse" "lighthouse"
/* Rest ist NULL; tempor<6F>res, nicht alterndes Attribut */ /* Rest ist NULL; tempor<6F>res, nicht alterndes Attribut */
}; };

View File

@ -29,7 +29,7 @@ extern "C" {
struct building; struct building;
struct attrib; struct attrib;
extern const struct attrib_type at_lighthouse; extern struct attrib_type at_lighthouse;
/* leuchtturm */ /* leuchtturm */
bool check_leuchtturm(struct region *r, struct faction *f); bool check_leuchtturm(struct region *r, struct faction *f);
void update_lighthouse(struct building *lh); void update_lighthouse(struct building *lh);

View File

@ -571,7 +571,7 @@ direction_t reldirection(const region * from, const region * to)
return NODIRECTION; return NODIRECTION;
} }
static void leave_trail(ship * sh, region * from, region_list * route) void leave_trail(ship * sh, region * from, region_list * route)
{ {
region *r = from; region *r = from;
@ -595,7 +595,7 @@ static void leave_trail(ship * sh, region * from, region_list * route)
a = a->next; a = a->next;
} }
if (a == NULL) { if (a == NULL || a->type != &at_shiptrail) {
a = a_add(&(r->attribs), a_new(&at_shiptrail)); a = a_add(&(r->attribs), a_new(&at_shiptrail));
td = (traveldir *)a->data.v; td = (traveldir *)a->data.v;
td->no = sh->no; td->no = sh->no;

View File

@ -63,6 +63,8 @@ extern "C" {
int enoughsailors(const struct ship *sh, int sumskill); int enoughsailors(const struct ship *sh, int sumskill);
bool canswim(struct unit *u); bool canswim(struct unit *u);
bool canfly(struct unit *u); bool canfly(struct unit *u);
void leave_trail(struct ship *sh, struct region *from,
struct region_list *route);
struct ship *move_ship(struct ship *sh, struct region *from, struct ship *move_ship(struct ship *sh, struct region *from,
struct region *to, struct region_list *route); struct region *to, struct region_list *route);
int walkingcapacity(const struct unit *u); int walkingcapacity(const struct unit *u);

View File

@ -3,6 +3,7 @@
#include "move.h" #include "move.h"
#include "keyword.h" #include "keyword.h"
#include "lighthouse.h"
#include <kernel/config.h> #include <kernel/config.h>
#include <kernel/ally.h> #include <kernel/ally.h>
@ -478,7 +479,7 @@ static void test_drifting_ships(CuTest *tc) {
region *r1, *r2, *r3; region *r1, *r2, *r3;
terrain_type *t_ocean, *t_plain; terrain_type *t_ocean, *t_plain;
ship_type *st_boat; ship_type *st_boat;
test_cleanup(); test_setup();
t_ocean = test_create_terrain("ocean", SEA_REGION); t_ocean = test_create_terrain("ocean", SEA_REGION);
t_plain = test_create_terrain("plain", LAND_REGION); t_plain = test_create_terrain("plain", LAND_REGION);
r1 = test_create_region(0, 0, t_ocean); r1 = test_create_region(0, 0, t_ocean);
@ -491,11 +492,41 @@ static void test_drifting_ships(CuTest *tc) {
test_cleanup(); test_cleanup();
} }
static void test_ship_leave_trail(CuTest *tc) {
ship *s1, *s2;
region *r1, *r2;
terrain_type *t_ocean;
ship_type *st_boat;
region_list *route = NULL;
test_setup();
t_ocean = test_create_terrain("ocean", SEA_REGION);
r1 = test_create_region(0, 0, t_ocean);
add_regionlist(&route, test_create_region(2, 0, t_ocean));
add_regionlist(&route, r2 = test_create_region(1, 0, t_ocean));
st_boat = test_create_shiptype("boat");
s1 = test_create_ship(r1, st_boat);
s2 = test_create_ship(r1, st_boat);
leave_trail(s1, r1, route);
a_add(&r1->attribs, a_new(&at_lighthouse));
leave_trail(s2, r1, route);
a_add(&r2->attribs, a_new(&at_lighthouse));
CuAssertPtrEquals(tc, &at_shiptrail, (void *)r1->attribs->type);
CuAssertPtrEquals(tc, &at_shiptrail, (void *)r1->attribs->next->type);
CuAssertPtrEquals(tc, &at_lighthouse, (void *)r1->attribs->next->next->type);
CuAssertPtrEquals(tc, &at_shiptrail, (void *)r2->attribs->type);
CuAssertPtrEquals(tc, &at_shiptrail, (void *)r2->attribs->next->type);
CuAssertPtrEquals(tc, &at_lighthouse, (void *)r2->attribs->next->next->type);
free_regionlist(route);
test_cleanup();
}
CuSuite *get_move_suite(void) CuSuite *get_move_suite(void)
{ {
CuSuite *suite = CuSuiteNew(); CuSuite *suite = CuSuiteNew();
SUITE_ADD_TEST(suite, test_walkingcapacity); SUITE_ADD_TEST(suite, test_walkingcapacity);
SUITE_ADD_TEST(suite, test_ship_not_allowed_in_coast); SUITE_ADD_TEST(suite, test_ship_not_allowed_in_coast);
SUITE_ADD_TEST(suite, test_ship_leave_trail);
SUITE_ADD_TEST(suite, test_ship_allowed_without_harbormaster); SUITE_ADD_TEST(suite, test_ship_allowed_without_harbormaster);
SUITE_ADD_TEST(suite, test_ship_blocked_by_harbormaster); SUITE_ADD_TEST(suite, test_ship_blocked_by_harbormaster);
SUITE_ADD_TEST(suite, test_ship_has_harbormaster_contact); SUITE_ADD_TEST(suite, test_ship_has_harbormaster_contact);