Review: Approve code

I still want to do some testing, but code LGTM - just a few minor nits :)
Diff comments:

> 
> === modified file 'src/logic/map_objects/tribes/ship.cc'
> --- src/logic/map_objects/tribes/ship.cc      2016-02-08 08:01:21 +0000
> +++ src/logic/map_objects/tribes/ship.cc      2016-02-08 21:01:32 +0000
> @@ -49,6 +49,59 @@
>  
>  namespace Widelands {
>  
> +namespace  {
> +
> +/// Returns true if 'coord' is not occupied or onwned by 'player_number' and

Typo: onwned => owned

> +/// nothing stands there.
> +bool can_support_port(const PlayerNumber player_number, const FCoords& 
> coord) {
> +     const PlayerNumber owner = coord.field->get_owned_by();
> +     if (owner != neutral() && owner != player_number) {
> +             return false;
> +     }
> +     BaseImmovable* baim = coord.field->get_immovable();
> +     if (baim != nullptr && baim->descr().type() >= MapObjectType::FLAG) {
> +             return false;
> +     }
> +     return true;
> +}
> +
> +/// Returns true if a ship owned by 'player_number' can land and errect a 
> port at 'coord'.

Typo: errect => erect

> +bool can_build_port_here(const PlayerNumber player_number, const Map& map, 
> const FCoords& coord) {

const PlayerNumber& player_number or PlayerNumber player_number?

PlayerNumber is an uint8_t really, so I guess both versions would be correct?.

> +     if (!can_support_port(player_number, coord)) {
> +             return false;
> +     }
> +
> +     // All fields of the port + their neighboring fields (for the border) 
> must
> +     // be conquerable without military influence.
> +     Widelands::FCoords c[4];  //  Big buildings occupy 4 locations.
> +     c[0] = coord;
> +     map.get_ln(coord, &c[1]);
> +     map.get_tln(coord, &c[2]);
> +     map.get_trn(coord, &c[3]);
> +     for (int i = 0; i < 4; ++i) {
> +             MapRegion<Area<FCoords>> area(map, Area<FCoords>(c[i], 1));
> +             do {
> +                     if (!can_support_port(player_number, area.location())) {
> +                             return false;
> +                     }
> +             } while (area.advance(map));
> +     }
> +
> +     // Also all areas around the flag must be conquerable and must not 
> contain
> +     // another flag already.
> +     FCoords flag_position;
> +     map.get_brn(coord, &flag_position);
> +     MapRegion<Area<FCoords>> area(map, Area<FCoords>(flag_position, 1));
> +     do {
> +             if (!can_support_port(player_number, area.location())) {
> +                     return false;
> +             }
> +     } while (area.advance(map));
> +     return true;
> +}
> +
> +}  // namespace
> +
>  ShipDescr::ShipDescr(const std::string& init_descname, const LuaTable& table)
>       :
>       BobDescr(init_descname, MapObjectType::SHIP, 
> MapObjectDescr::OwnerType::kTribe, table) {
> === added file 'test/maps/port_space.wmf/elemental'
> --- test/maps/port_space.wmf/elemental        1970-01-01 00:00:00 +0000
> +++ test/maps/port_space.wmf/elemental        2016-02-08 21:01:32 +0000
> @@ -0,0 +1,12 @@
> +# Automatically created by Widelands bzr7801[trunk] (Debug)
> +
> +[global]
> +packet_version="1"
> +map_w="64"
> +map_h="64"
> +nr_players="2"
> +name="port_space"
> +author="Unknown"
> +descr="No description defined"
> +hint=
> +tags="artifacts,seafaring"

The "artifacts" tag should probably go?



-- 
https://code.launchpad.net/~widelands-dev/widelands/ship_and_portspaces/+merge/285409
Your team Widelands Developers is subscribed to branch 
lp:~widelands-dev/widelands/ship_and_portspaces.

_______________________________________________
Mailing list: https://launchpad.net/~widelands-dev
Post to     : widelands-dev@lists.launchpad.net
Unsubscribe : https://launchpad.net/~widelands-dev
More help   : https://help.launchpad.net/ListHelp

Reply via email to