forked from github/server
Merge pull request #617 from ennorehling/hotfix/bug-2266-follow
BUG 2266 Fixing FOLLOW
This commit is contained in:
commit
f5c52a1ccd
|
@ -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 */
|
||||||
};
|
};
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
|
|
Loading…
Reference in New Issue