widelands-dev team mailing list archive
-
widelands-dev team
-
Mailing list archive
-
Message #03900
Re: [Merge] lp:~widelands-dev/widelands/bug-1380287 into lp:widelands
Review: Needs Fixing
I found a couple more nits. Otherwise LGTM, please merge after fixing them.
Diff comments:
> === modified file 'src/ai/ai_help_structs.h'
> --- src/ai/ai_help_structs.h 2015-03-26 06:59:37 +0000
> +++ src/ai/ai_help_structs.h 2015-04-07 13:33:49 +0000
> @@ -438,7 +438,7 @@
>
> // a ship circumvents all islands in the same direction, the value
> // is assigned only once
> - Widelands::ScoutingDirection island_circ_direction = Widelands::ScoutingDirection::kClockwise;
> + Widelands::IslandExploreDirection island_circ_direction = Widelands::IslandExploreDirection::kClockwise;
> bool waiting_for_command_ = false;
> int32_t last_command_time = 0;
> };
>
> === modified file 'src/ai/defaultai.cc'
> --- src/ai/defaultai.cc 2015-03-26 20:35:19 +0000
> +++ src/ai/defaultai.cc 2015-04-07 13:33:49 +0000
> @@ -3795,9 +3795,9 @@
> allships.push_back(ShipObserver());
> allships.back().ship = &ship;
> if (game().get_gametime() % 2 == 0) {
> - allships.back().island_circ_direction = ScoutingDirection::kClockwise;
> + allships.back().island_circ_direction = IslandExploreDirection::kClockwise;
> } else {
> - allships.back().island_circ_direction = ScoutingDirection::kCounterClockwise;
> + allships.back().island_circ_direction = IslandExploreDirection::kCounterClockwise;
> }
> }
>
> @@ -4058,10 +4058,10 @@
> so.waiting_for_command_ = false;
> ;
> } else {
> - // 2.B Yes, pick one of avaiable directions
> + // 2.B Yes, pick one of avaliable directions
> const Direction final_direction =
> possible_directions.at(gametime % possible_directions.size());
> - game().send_player_ship_scout_direction(*so.ship, final_direction);
> + game().send_player_ship_scouting_direction(*so.ship, static_cast<WalkingDir>(final_direction));
> so.last_command_time = gametime;
> so.waiting_for_command_ = false;
> }
>
> === modified file 'src/economy/portdock.cc'
> --- src/economy/portdock.cc 2015-02-16 20:23:15 +0000
> +++ src/economy/portdock.cc 2015-04-07 13:33:49 +0000
> @@ -213,12 +213,11 @@
>
> PlayerImmovable::cleanup(egbase);
>
> - //now let attempt to recreate the portdock
> + // Now let's attempt to recreate the portdock.
> if (wh) {
> if (!wh->m_cleanup_in_progress){
> if (upcast(Game, game, &egbase)) {
> if (game->is_loaded()) { //do not attempt when shutting down
> - Player& player = owner();
> wh->restore_portdock_or_destroy(egbase);
> }
> }
>
> === modified file 'src/logic/game.cc'
> --- src/logic/game.cc 2015-02-08 19:08:36 +0000
> +++ src/logic/game.cc 2015-04-07 13:33:49 +0000
> @@ -874,7 +874,7 @@
> }
>
>
> -void Game::send_player_ship_scout_direction(Ship & ship, uint8_t direction)
> +void Game::send_player_ship_scouting_direction(Ship & ship, WalkingDir direction)
> {
> send_player_command
> (*new CmdShipScoutDirection
> @@ -888,7 +888,7 @@
> (get_gametime(), ship.get_owner()->player_number(), ship.serial(), coords));
> }
>
> -void Game::send_player_ship_explore_island(Ship & ship, ScoutingDirection direction)
> +void Game::send_player_ship_explore_island(Ship & ship, IslandExploreDirection direction)
> {
> send_player_command
> (*new CmdShipExploreIsland
>
> === modified file 'src/logic/game.h'
> --- src/logic/game.h 2015-02-08 19:08:36 +0000
> +++ src/logic/game.h 2015-04-07 13:33:49 +0000
> @@ -41,6 +41,7 @@
> struct Flag;
> struct Path;
> struct PlayerImmovable;
> +enum class IslandExploreDirection;
> enum class ScoutingDirection;
> struct Ship;
> struct PlayerEndStatus;
> @@ -181,9 +182,9 @@
> void send_player_enemyflagaction
> (const Flag &, PlayerNumber, uint32_t count);
>
> - void send_player_ship_scout_direction(Ship &, uint8_t);
> + void send_player_ship_scouting_direction(Ship &, WalkingDir);
> void send_player_ship_construct_port(Ship &, Coords);
> - void send_player_ship_explore_island(Ship &, ScoutingDirection);
> + void send_player_ship_explore_island(Ship &, IslandExploreDirection);
> void send_player_sink_ship(Ship &);
> void send_player_cancel_expedition_ship(Ship &);
>
>
> === modified file 'src/logic/playercommand.cc'
> --- src/logic/playercommand.cc 2015-02-19 19:37:09 +0000
> +++ src/logic/playercommand.cc 2015-04-07 13:33:49 +0000
> @@ -777,7 +777,7 @@
> PlayerCommand (0, des.unsigned_8())
> {
> serial = des.unsigned_32();
> - dir = des.unsigned_8();
> + dir = static_cast<WalkingDir>(des.unsigned_8());
> }
>
> void CmdShipScoutDirection::execute (Game & game)
> @@ -796,7 +796,7 @@
> (ship->state_is_expedition())?"Y":"N");
> return;
> }
> - ship->exp_scout_direction(game, dir);
> + ship->exp_scouting_direction(game, dir);
> }
> }
>
> @@ -805,7 +805,7 @@
> ser.unsigned_8 (PLCMD_SHIP_SCOUT);
> ser.unsigned_8 (sender());
> ser.unsigned_32(serial);
> - ser.unsigned_8 (dir);
> + ser.unsigned_8 (static_cast<uint8_t>(dir));
> }
>
> #define PLAYER_CMD_SHIP_SCOUT_DIRECTION_VERSION 1
> @@ -818,7 +818,7 @@
> PlayerCommand::read(fr, egbase, mol);
> serial = get_object_serial_or_zero<Ship>(fr.unsigned_32(), mol);
> // direction
> - dir = fr.unsigned_8();
> + dir = static_cast<WalkingDir>(fr.unsigned_8());
> } else
> throw GameDataError("unknown/unhandled version %u", packet_version);
> } catch (const WException & e) {
> @@ -837,7 +837,7 @@
> fw.unsigned_32(mos.get_object_file_index_or_zero(egbase.objects().get_object(serial)));
>
> // direction
> - fw.unsigned_8(dir);
> + fw.unsigned_8(static_cast<uint8_t>(dir));
> }
>
>
> @@ -912,7 +912,7 @@
> PlayerCommand (0, des.unsigned_8())
> {
> serial = des.unsigned_32();
> - scouting_direction = static_cast<ScoutingDirection>(des.unsigned_8());
> + island_explore_direction = static_cast<IslandExploreDirection>(des.unsigned_8());
> }
>
> void CmdShipExploreIsland::execute (Game & game)
> @@ -931,7 +931,7 @@
> (ship->state_is_expedition())?"Y":"N");
> return;
> }
> - ship->exp_explore_island(game, scouting_direction);
> + ship->exp_explore_island(game, island_explore_direction);
> }
> }
>
> @@ -940,7 +940,7 @@
> ser.unsigned_8 (PLCMD_SHIP_EXPLORE);
> ser.unsigned_8 (sender());
> ser.unsigned_32(serial);
> - ser.unsigned_8 (static_cast<uint8_t>(scouting_direction));
> + ser.unsigned_8 (static_cast<uint8_t>(island_explore_direction));
> }
>
> #define PLAYER_CMD_SHIP_EXPLORE_ISLAND_VERSION 1
> @@ -952,7 +952,7 @@
> if (packet_version == PLAYER_CMD_SHIP_EXPLORE_ISLAND_VERSION) {
> PlayerCommand::read(fr, egbase, mol);
> serial = get_object_serial_or_zero<Ship>(fr.unsigned_32(), mol);
> - scouting_direction = static_cast<ScoutingDirection>(fr.unsigned_8());
> + island_explore_direction = static_cast<IslandExploreDirection>(fr.unsigned_8());
> } else
> throw GameDataError("unknown/unhandled version %u", packet_version);
> } catch (const WException & e) {
> @@ -971,7 +971,7 @@
> fw.unsigned_32(mos.get_object_file_index_or_zero(egbase.objects().get_object(serial)));
>
> // Direction of exploration
> - fw.unsigned_8(static_cast<uint8_t>(scouting_direction));
> + fw.unsigned_8(static_cast<uint8_t>(island_explore_direction));
> }
>
>
>
> === modified file 'src/logic/playercommand.h'
> --- src/logic/playercommand.h 2015-02-05 12:11:20 +0000
> +++ src/logic/playercommand.h 2015-04-07 13:33:49 +0000
> @@ -313,7 +313,7 @@
> struct CmdShipScoutDirection : public PlayerCommand {
> CmdShipScoutDirection() : PlayerCommand(), serial(0) {} // For savegame loading
> CmdShipScoutDirection
> - (int32_t const t, PlayerNumber const p, Serial s, uint8_t direction)
> + (int32_t const t, PlayerNumber const p, Serial s, WalkingDir direction)
> : PlayerCommand(t, p), serial(s), dir(direction)
> {}
>
> @@ -329,7 +329,7 @@
>
> private:
> Serial serial;
> - uint8_t dir;
> + WalkingDir dir;
> };
>
> struct CmdShipConstructPort : public PlayerCommand {
> @@ -357,8 +357,8 @@
> struct CmdShipExploreIsland : public PlayerCommand {
> CmdShipExploreIsland() : PlayerCommand(), serial(0) {} // For savegame loading
> CmdShipExploreIsland
> - (int32_t const t, PlayerNumber const p, Serial s, ScoutingDirection direction)
> - : PlayerCommand(t, p), serial(s), scouting_direction(direction)
> + (int32_t const t, PlayerNumber const p, Serial s, IslandExploreDirection direction)
> + : PlayerCommand(t, p), serial(s), island_explore_direction(direction)
> {}
>
> void write(FileWrite &, EditorGameBase &, MapObjectSaver &) override;
> @@ -373,7 +373,7 @@
>
> private:
> Serial serial;
> - ScoutingDirection scouting_direction;
> + IslandExploreDirection island_explore_direction;
> };
>
> struct CmdShipSink : public PlayerCommand {
>
> === modified file 'src/logic/ship.cc'
> --- src/logic/ship.cc 2015-02-05 12:11:20 +0000
> +++ src/logic/ship.cc 2015-04-07 13:33:49 +0000
> @@ -550,15 +550,15 @@
> case EXP_SCOUTING: {
> if (m_expedition->island_exploration) { // Exploration of the island
> if (exp_close_to_coast()) {
> - if (m_expedition->direction == 0) {
> + if (m_expedition->scouting_direction == WalkingDir::IDLE) {
> // Make sure we know the location of the coast and use it as initial direction we
> // come from
> - m_expedition->direction = WALK_SE;
> - for (uint8_t secure = 0; exp_dir_swimable(m_expedition->direction); ++secure) {
> + m_expedition->scouting_direction = WALK_SE;
> + for (uint8_t secure = 0; exp_dir_swimable(m_expedition->scouting_direction); ++secure) {
> assert(secure < 6);
> - m_expedition->direction = get_cw_neighbour(m_expedition->direction);
> + m_expedition->scouting_direction = get_cw_neighbour(m_expedition->scouting_direction);
> }
> - m_expedition->direction = get_backward_dir(m_expedition->direction);
> + m_expedition->scouting_direction = get_backward_dir(m_expedition->scouting_direction);
> // Save the position - this is where we start
> m_expedition->exploration_start = get_position();
> } else {
> @@ -579,18 +579,18 @@
> // The ship is supposed to follow the coast as close as possible, therefore the check
> // for
> // a swimable field begins at the neighbour field of the direction we came from.
> - m_expedition->direction = get_backward_dir(m_expedition->direction);
> - if (m_expedition->scouting_direction == ScoutingDirection::kClockwise) {
> + m_expedition->scouting_direction = get_backward_dir(m_expedition->scouting_direction);
> + if (m_expedition->island_explore_direction == IslandExploreDirection::kClockwise) {
> do {
> - m_expedition->direction = get_ccw_neighbour(m_expedition->direction);
> - } while (!exp_dir_swimable(m_expedition->direction));
> + m_expedition->scouting_direction = get_ccw_neighbour(m_expedition->scouting_direction);
> + } while (!exp_dir_swimable(m_expedition->scouting_direction));
> } else {
> do {
> - m_expedition->direction = get_cw_neighbour(m_expedition->direction);
> - } while (!exp_dir_swimable(m_expedition->direction));
> + m_expedition->scouting_direction = get_cw_neighbour(m_expedition->scouting_direction);
> + } while (!exp_dir_swimable(m_expedition->scouting_direction));
> }
> state.ivar1 = 1;
> - return start_task_move(game, m_expedition->direction, descr().get_sail_anims(), false);
> + return start_task_move(game, m_expedition->scouting_direction, descr().get_sail_anims(), false);
> } else {
> // The ship got the command to scout around an island, but is not close to any island
> // Most likely the command was send as the ship was on an exploration and just leaving
> @@ -615,10 +615,10 @@
> return start_task_idle(game, descr().main_animation(), 1500);
> }
> } else { // scouting towards a specific direction
> - if (exp_dir_swimable(m_expedition->direction)) {
> + if (exp_dir_swimable(m_expedition->scouting_direction)) {
> // the scouting direction is still free to move
> state.ivar1 = 1;
> - start_task_move(game, m_expedition->direction, descr().get_sail_anims(), false);
> + start_task_move(game, m_expedition->scouting_direction, descr().get_sail_anims(), false);
> return;
> }
> // coast reached
> @@ -791,9 +791,9 @@
> m_expedition.reset(new Expedition());
> m_expedition->seen_port_buildspaces.reset(new std::list<Coords>());
> m_expedition->island_exploration = false;
> - m_expedition->direction = 0;
> + m_expedition->scouting_direction = WalkingDir::IDLE;
> m_expedition->exploration_start = Coords(0, 0);
> - m_expedition->scouting_direction = ScoutingDirection::kClockwise;
> + m_expedition->island_explore_direction = IslandExploreDirection::kClockwise;
> m_expedition->economy.reset(new Economy(*get_owner()));
>
> // We are no longer in any other economy, but instead are an economy of our
> @@ -824,13 +824,22 @@
>
> /// Initializes / changes the direction of scouting to @arg direction
> /// @note only called via player command
> -void Ship::exp_scout_direction(Game&, uint8_t direction) {
> +void Ship::exp_scouting_direction(Game&, WalkingDir scouting_direction) {
> assert(m_expedition);
> m_ship_state = EXP_SCOUTING;
> - m_expedition->direction = direction;
> + m_expedition->scouting_direction = scouting_direction;
> m_expedition->island_exploration = false;
> }
>
> +//Returns integer of direction, or WalkingDir::IDLE if query invalid
documentation should go into the header. also below
> +//Intended for LUA scripting
> +WalkingDir Ship::get_scouting_direction() {
> + if (m_expedition && m_ship_state == EXP_SCOUTING && !m_expedition->island_exploration) {
> + return m_expedition->scouting_direction;
> + }
> + return WalkingDir::IDLE;
> +}
> +
> /// Initializes the construction of a port at @arg c
> /// @note only called via player command
> void Ship::exp_construct_port(Game&, const Coords& c) {
> @@ -840,16 +849,26 @@
> m_ship_state = EXP_COLONIZING;
> }
>
> -/// Initializes / changes the direction the island exploration in @arg scouting_direction direction
> +/// Initializes / changes the direction the island exploration in @arg island_explore_direction direction
> /// @note only called via player command
> -void Ship::exp_explore_island(Game&, ScoutingDirection scouting_direction) {
> +void Ship::exp_explore_island(Game&, IslandExploreDirection island_explore_direction) {
> assert(m_expedition);
> m_ship_state = EXP_SCOUTING;
> - m_expedition->scouting_direction = scouting_direction;
> - m_expedition->direction = 0;
> + m_expedition->island_explore_direction = island_explore_direction;
> + m_expedition->scouting_direction = WalkingDir::IDLE;
> m_expedition->island_exploration = true;
> }
>
> +//Returns integer of direction, or 255 if query invalid
> +//Intended for LUA scripting
> +IslandExploreDirection Ship::get_island_explore_direction() {
> + if (m_expedition && m_ship_state == EXP_SCOUTING && m_expedition->island_exploration) {
> + return m_expedition->island_explore_direction;
> + }
> + return IslandExploreDirection::kNotSet;
> +}
> +
> +
> /// Cancels a currently running expedition
> /// @note only called via player command
> void Ship::exp_cancel(Game& game) {
> @@ -995,11 +1014,11 @@
> // whether scouting or exploring
> m_expedition->island_exploration = fr.unsigned_8() == 1;
> // current direction
> - m_expedition->direction = fr.unsigned_8();
> + m_expedition->scouting_direction = static_cast<WalkingDir>(fr.unsigned_8());
> // Start coordinates of an island exploration
> m_expedition->exploration_start = read_coords_32(&fr);
> // Whether the exploration is done clockwise or counter clockwise
> - m_expedition->scouting_direction = static_cast<ScoutingDirection>(fr.unsigned_8());
> + m_expedition->island_explore_direction = static_cast<IslandExploreDirection>(fr.unsigned_8());
> }
> } else
> m_ship_state = TRANSPORT;
> @@ -1114,11 +1133,11 @@
> // whether scouting or exploring
> fw.unsigned_8(m_expedition->island_exploration ? 1 : 0);
> // current direction
> - fw.unsigned_8(m_expedition->direction);
> + fw.unsigned_8(static_cast<uint8_t>(m_expedition->scouting_direction));
> // Start coordinates of an island exploration
> write_coords_32(&fw, m_expedition->exploration_start);
> // Whether the exploration is done clockwise or counter clockwise
> - fw.unsigned_8(static_cast<uint8_t>(m_expedition->scouting_direction));
> + fw.unsigned_8(static_cast<uint8_t>(m_expedition->island_explore_direction));
> }
>
> fw.unsigned_32(mos.get_object_file_index_or_zero(m_lastdock.get(egbase)));
>
> === modified file 'src/logic/ship.h'
> --- src/logic/ship.h 2015-02-05 12:11:20 +0000
> +++ src/logic/ship.h 2015-04-07 13:33:49 +0000
> @@ -38,9 +38,10 @@
> class PortDock;
>
> // This can't be part of the Ship class because of forward declaration in game.h
> -enum class ScoutingDirection {
> +enum class IslandExploreDirection {
> kCounterClockwise = 0, // This comes first for savegame compatibility (used to be = 0)
> - kClockwise = 1
> + kClockwise = 1,
> + kNotSet
> };
>
> struct NoteShipMessage {
> @@ -202,9 +203,11 @@
> return m_expedition->seen_port_buildspaces.get();
> }
>
> - void exp_scout_direction(Game &, uint8_t);
> + void exp_scouting_direction(Game &, WalkingDir);
> void exp_construct_port (Game &, const Coords&);
> - void exp_explore_island (Game &, ScoutingDirection);
> + void exp_explore_island (Game &, IslandExploreDirection);
> + WalkingDir get_scouting_direction();
> + IslandExploreDirection get_island_explore_direction();
>
> void exp_cancel (Game &);
> void sink_ship (Game &);
> @@ -242,9 +245,9 @@
> std::unique_ptr<std::list<Coords> > seen_port_buildspaces;
> bool swimable[LAST_DIRECTION];
> bool island_exploration;
> - uint8_t direction;
> + WalkingDir scouting_direction;
> Coords exploration_start;
> - ScoutingDirection scouting_direction;
> + IslandExploreDirection island_explore_direction;
> std::unique_ptr<Economy> economy;
> };
> std::unique_ptr<Expedition> m_expedition;
>
> === modified file 'src/logic/walkingdir.cc'
> --- src/logic/walkingdir.cc 2014-07-14 10:45:44 +0000
> +++ src/logic/walkingdir.cc 2015-04-07 13:33:49 +0000
> @@ -22,61 +22,61 @@
> namespace Widelands {
>
> /// \returns the neighbour direction in clockwise
> -uint8_t get_cw_neighbour(uint8_t dir) {
> +WalkingDir get_cw_neighbour(WalkingDir dir) {
> switch (dir) {
> - case WALK_NE:
> - return WALK_E;
> - case WALK_E:
> - return WALK_SE;
> - case WALK_SE:
> - return WALK_SW;
> - case WALK_SW:
> - return WALK_W;
> - case WALK_W:
> - return WALK_NW;
> - case WALK_NW:
> - return WALK_NE;
> + case WalkingDir::WALK_NE:
> + return WalkingDir::WALK_E;
> + case WalkingDir::WALK_E:
> + return WalkingDir::WALK_SE;
> + case WalkingDir::WALK_SE:
> + return WalkingDir::WALK_SW;
> + case WalkingDir::WALK_SW:
> + return WalkingDir::WALK_W;
> + case WalkingDir::WALK_W:
> + return WalkingDir::WALK_NW;
> + case WalkingDir::WALK_NW:
> + return WalkingDir::WALK_NE;
> default:
> - return 0;
> + return WalkingDir::IDLE;
> }
> }
>
> /// \returns the neighbour direction in counterclockwise
> -uint8_t get_ccw_neighbour(uint8_t dir) {
> +WalkingDir get_ccw_neighbour(WalkingDir dir) {
> switch (dir) {
> - case WALK_E:
> - return WALK_NE;
> - case WALK_NE:
> - return WALK_NW;
> - case WALK_NW:
> - return WALK_W;
> - case WALK_W:
> - return WALK_SW;
> - case WALK_SW:
> - return WALK_SE;
> - case WALK_SE:
> - return WALK_E;
> + case WalkingDir::WALK_E:
> + return WalkingDir::WALK_NE;
> + case WalkingDir::WALK_NE:
> + return WalkingDir::WALK_NW;
> + case WalkingDir::WALK_NW:
> + return WalkingDir::WALK_W;
> + case WalkingDir::WALK_W:
> + return WalkingDir::WALK_SW;
> + case WalkingDir::WALK_SW:
> + return WalkingDir::WALK_SE;
> + case WalkingDir::WALK_SE:
> + return WalkingDir::WALK_E;
> default:
> - return 0;
> + return WalkingDir::IDLE;
> }
> }
>
> -uint8_t get_backward_dir(uint8_t dir) {
> +WalkingDir get_backward_dir(WalkingDir dir) {
> switch (dir) {
> - case WALK_E:
> - return WALK_W;
> - case WALK_NE:
> - return WALK_SW;
> - case WALK_NW:
> - return WALK_SE;
> - case WALK_W:
> - return WALK_E;
> - case WALK_SW:
> - return WALK_NE;
> - case WALK_SE:
> - return WALK_NW;
> + case WalkingDir::WALK_E:
> + return WalkingDir::WALK_W;
> + case WalkingDir::WALK_NE:
> + return WalkingDir::WALK_SW;
> + case WalkingDir::WALK_NW:
> + return WalkingDir::WALK_SE;
> + case WalkingDir::WALK_W:
> + return WalkingDir::WALK_E;
> + case WalkingDir::WALK_SW:
> + return WalkingDir::WALK_NE;
> + case WalkingDir::WALK_SE:
> + return WalkingDir::WALK_NW;
> default:
> - return 0;
> + return WalkingDir::IDLE;
> }
> }
>
>
> === modified file 'src/logic/walkingdir.h'
> --- src/logic/walkingdir.h 2014-07-05 16:41:51 +0000
> +++ src/logic/walkingdir.h 2015-04-07 13:33:49 +0000
> @@ -37,9 +37,9 @@
> LAST_DIRECTION = 6,
> };
>
> -uint8_t get_cw_neighbour(uint8_t dir);
> -uint8_t get_ccw_neighbour(uint8_t dir);
> -uint8_t get_backward_dir(uint8_t dir);
> +WalkingDir get_cw_neighbour(WalkingDir dir);
> +WalkingDir get_ccw_neighbour(WalkingDir dir);
> +WalkingDir get_backward_dir(WalkingDir dir);
>
> }
>
>
> === modified file 'src/scripting/lua_game.cc'
> --- src/scripting/lua_game.cc 2015-01-31 16:03:59 +0000
> +++ src/scripting/lua_game.cc 2015-04-07 13:33:49 +0000
> @@ -97,6 +97,7 @@
> METHOD(LuaPlayer, hide_fields),
> METHOD(LuaPlayer, reveal_scenario),
> METHOD(LuaPlayer, reveal_campaign),
> + METHOD(LuaPlayer, get_ships),
> METHOD(LuaPlayer, get_buildings),
> METHOD(LuaPlayer, get_suitability),
> METHOD(LuaPlayer, allow_workers),
> @@ -628,6 +629,7 @@
> int LuaPlayer::reveal_campaign(lua_State * L) {
> if (get_game(L).get_ipl()->player_number() != player_number())
> report_error(L, "Can only be called for interactive player!");
> + report_error(L, "Can only be called for interactive player!");
>
> CampaignVisibilitySave cvs;
> cvs.set_campaign_visibility(luaL_checkstring(L, 2), true);
> @@ -635,6 +637,41 @@
> return 0;
> }
>
> +/* RST
> + .. method:: get_ships()
> +
> + :returns: array of player's ships
> + :rtype: :class:`array` or :class:`table`
> +*/
> +int LuaPlayer::get_ships(lua_State * L) {
> + EditorGameBase & egbase = get_egbase(L);
> + Map * map = egbase.get_map();
> + PlayerNumber p = (get(L, egbase)).player_number();
> + lua_newtable(L);
> + uint32_t cidx = 1;
> +
> + std::set<OPtr<Ship>> found_ships;
> + for (int16_t y = 0; y < map->get_height(); ++y) {
> + for (int16_t x = 0; x < map->get_width(); ++x) {
> + FCoords f = map->get_fcoords(Coords(x, y));
> + // there are too many bobs on the map so we investigate
> + // only bobs on water
> + if (f.field->nodecaps() & MOVECAPS_SWIM) {
> + for (Bob* bob = f.field->get_first_bob(); bob; bob = bob->get_next_on_field()) {
> + if (upcast(Ship, ship, bob)) {
> + if (ship->get_owner()->player_number() == p && !found_ships.count(ship)) {
> + found_ships.insert(ship);
> + lua_pushuint32(L, cidx++);
> + LuaMaps::upcasted_map_object_to_lua(L, ship);
> + lua_rawset(L, -3);
> + }
> + }
> + }
> + }
> + }
> + }
> + return 1;
> +}
>
> /* RST
> .. method:: get_buildings(which)
>
> === modified file 'src/scripting/lua_game.h'
> --- src/scripting/lua_game.h 2015-02-09 05:57:08 +0000
> +++ src/scripting/lua_game.h 2015-04-07 13:33:49 +0000
> @@ -83,6 +83,7 @@
> int hide_fields(lua_State * L);
> int reveal_scenario(lua_State * L);
> int reveal_campaign(lua_State * L);
> + int get_ships(lua_State * L);
> int get_buildings(lua_State * L);
> int get_suitability(lua_State * L);
> int allow_workers(lua_State * L);
>
> === modified file 'src/scripting/lua_map.cc'
> --- src/scripting/lua_map.cc 2015-02-12 21:03:20 +0000
> +++ src/scripting/lua_map.cc 2015-04-07 13:33:49 +0000
> @@ -32,6 +32,7 @@
> #include "logic/maphollowregion.h"
> #include "logic/mapregion.h"
> #include "logic/player.h"
> +#include "logic/ship.h"
> #include "logic/soldier.h"
> #include "logic/warelist.h"
> #include "logic/widelands_geometry.h"
> @@ -44,6 +45,10 @@
> #include "scripting/lua_game.h"
> #include "wui/mapviewpixelfunctions.h"
>
> +
> +//#include "scripting/luna_impl.h" //
commented out headers?
> +//#include "economy/portdock.h"
> +
> using namespace Widelands;
>
> namespace LuaMaps {
> @@ -2681,13 +2686,13 @@
> ==========================================================
> */
>
> +
> /*
> ==========================================================
> C METHODS
> ==========================================================
> */
>
> -
> /* RST
> Building
> --------
> @@ -2806,10 +2811,13 @@
> METHOD(LuaWarehouse, get_workers),
> METHOD(LuaWarehouse, set_soldiers),
> METHOD(LuaWarehouse, get_soldiers),
> + METHOD(LuaWarehouse, start_expedition),
> + METHOD(LuaWarehouse, cancel_expedition),
> {nullptr, nullptr},
> };
> const PropertyType<LuaWarehouse> LuaWarehouse::Properties[] = {
> PROP_RO(LuaWarehouse, portdock),
> + PROP_RO(LuaWarehouse, expedition_in_progress),
> {nullptr, nullptr, nullptr},
> };
>
> @@ -2829,6 +2837,26 @@
> return upcasted_map_object_to_lua(L, get(L, get_egbase(L))->get_portdock());
> }
>
> +/* RST
> + .. attribute:: expedition_in_progress
> +
> + (RO) If this Warehouse is a port, and an expedition is in
> + progress, returns true, otherwise nil
> +*/
> +int LuaWarehouse::get_expedition_in_progress(lua_State * L) {
> +
> + Warehouse* Wh = get(L, get_egbase(L));
variable names are lower_case in Widelands.
> +
> + if (upcast(Game, game, &get_egbase(L))) {
> + PortDock* pd = Wh->get_portdock();
> + if (pd) {
> + if (pd->expedition_started()){
> + return 1;
> + }
> + }
> + }
> + return 0;
> +}
>
> /*
> ==========================================================
> @@ -2895,13 +2923,72 @@
> return do_set_soldiers(L, wh->get_position(), wh, wh->get_owner());
> }
>
> +/* RST
> + .. method:: start_expedition(port)
> +
> + :arg port
> +
> + Starts preparation for expedition
> +
> +*/
> +int LuaWarehouse::start_expedition(lua_State* L) {
> +
> + Warehouse* Wh = get(L, get_egbase(L));
> +
> + if (!Wh) {
> + return 0;
> + }
> +
> + if (upcast(Game, game, &get_egbase(L))) {
> + PortDock* pd = Wh->get_portdock();
> + if (!pd) {
> + return 0;
> + }
> + if (!pd->expedition_started()){
> + game->send_player_start_or_cancel_expedition(*Wh);
> + return 1;
> + }
> + }
> +
> + return 0;
> +}
> +
> +/* RST
> + .. method:: cancel_expedition(port)
> +
> + :arg port
> +
> + Cancels an expedition if in progress
> +
> +*/
> +int LuaWarehouse::cancel_expedition(lua_State* L) {
> +
> + Warehouse* Wh = get(L, get_egbase(L));
> +
> + if (!Wh) {
> + return 0;
> + }
> +
> + if (upcast(Game, game, &get_egbase(L))) {
> + PortDock* pd = Wh->get_portdock();
> + if (!pd) {
> + return 0;
> + }
> + if (pd->expedition_started()){
> + game->send_player_start_or_cancel_expedition(*Wh);
> + return 1;
> + }
> + }
> +
> + return 0;
> +}
> +
> /*
> ==========================================================
> C METHODS
> ==========================================================
> */
>
> -
> /* RST
> ProductionSite
> --------------
> @@ -3179,6 +3266,7 @@
> {nullptr, nullptr},
> };
> const PropertyType<LuaBob> LuaBob::Properties[] = {
> + PROP_RO(LuaBob, field),
> {nullptr, nullptr, nullptr},
> };
>
> @@ -3189,6 +3277,27 @@
> */
>
> /* RST
> + .. attribute:: field //working here
> +
> + (RO) The field the bob is located on
> +*/
> +// UNTESTED
> +int LuaBob::get_field(lua_State * L) {
> +
> + EditorGameBase & egbase = get_egbase(L);
> +
> + Coords coords = get(L, egbase)->get_position();
> +
> + return to_lua<LuaMaps::LuaField>(L, new LuaMaps::LuaField(coords.x, coords.y));
> +}
> +
> +
> +/*
> + ==========================================================
> + LUA METHODS
> + ==========================================================
> + */
> +/* RST
> .. method:: has_caps(capname)
>
> Similar to :meth:`Field::has_caps`.
> @@ -3214,13 +3323,6 @@
> return 1;
> }
>
> -
> -/*
> - ==========================================================
> - LUA METHODS
> - ==========================================================
> - */
> -
> /*
> ==========================================================
> C METHODS
> @@ -3240,12 +3342,16 @@
> const MethodType<LuaShip> LuaShip::Methods[] = {
> METHOD(LuaShip, get_wares),
> METHOD(LuaShip, get_workers),
> + METHOD(LuaShip, build_colonization_port),
> {nullptr, nullptr},
> };
> const PropertyType<LuaShip> LuaShip::Properties[] = {
> PROP_RO(LuaShip, debug_economy),
> PROP_RO(LuaShip, last_portdock),
> PROP_RO(LuaShip, destination),
> + PROP_RO(LuaShip, state),
> + PROP_RW(LuaShip, scouting_direction),
> + PROP_RW(LuaShip, island_explore_direction),
> {nullptr, nullptr, nullptr},
> };
>
> @@ -3285,6 +3391,149 @@
> return upcasted_map_object_to_lua(L, get(L, egbase)->get_lastdock(egbase));
> }
>
> +/* RST
> + .. attribute:: state
> +
> + Query which state the ship is in:
> +
> + - transport,
> + - exp_waiting, exp_scouting, exp_found_port_space, exp_colonizing,
> + - sink_request, sink_animation
> +
> + (RW) returns the :class:`string` ship's state, or :const:`nil` if there is no valid state.
> +
> +
> +*/
> +// UNTESTED sink states
> +int LuaShip::get_state(lua_State* L) {
> + if (upcast(Game, game, &get_egbase(L))) {
> + switch (get(L, get_egbase(L))->get_ship_state()) {
> + case Ship::TRANSPORT:
> + lua_pushstring(L, "transport");
> + break;
> + case Ship::EXP_WAITING:
> + lua_pushstring(L, "exp_waiting");
> + break;
> + case Ship::EXP_SCOUTING:
> + lua_pushstring(L, "exp_scouting");
> + break;
> + case Ship::EXP_FOUNDPORTSPACE:
> + lua_pushstring(L, "exp_found_port_space");
> + break;
> + case Ship::EXP_COLONIZING:
> + lua_pushstring(L, "exp_colonizing");
> + break;
> + case Ship::SINK_REQUEST:
> + lua_pushstring(L, "sink_request");
> + break;
> + case Ship::SINK_ANIMATION:
> + lua_pushstring(L, "sink_animation");
> + break;
> + default:
> + lua_pushnil(L);
> + return 0;
> + }
> + return 1;
> + }
> + return 0;
> +}
> +
> +int LuaShip::get_scouting_direction(lua_State* L) {
> + if (upcast(Game, game, &get_egbase(L))) {
> + switch (get(L, get_egbase(L))->get_scouting_direction()) {
> + case WalkingDir::WALK_NE:
> + lua_pushstring(L, "ne");
> + break;
> + case WalkingDir::WALK_E:
> + lua_pushstring(L, "e");
> + break;
> + case WalkingDir::WALK_SE:
> + lua_pushstring(L, "se");
> + break;
> + case WalkingDir::WALK_SW:
> + lua_pushstring(L, "sw");
> + break;
> + case WalkingDir::WALK_W:
> + lua_pushstring(L, "w");
> + break;
> + case WalkingDir::WALK_NW:
> + lua_pushstring(L, "nw");
> + break;
> + default:
> + return 0;
> + }
> + return 1;
> + }
> + return 0;
> +}
> +
> +int LuaShip::set_scouting_direction(lua_State* L) {
> + if (upcast(Game, game, &get_egbase(L))) {
> + std::string dirname = luaL_checkstring(L, 3);
> + WalkingDir dir = WalkingDir::IDLE;
> +
> + if (dirname == "ne") {
> + dir = WalkingDir::WALK_NE;
> + } else if (dirname == "e") {
> + dir = WalkingDir::WALK_E;
> + } else if (dirname == "se") {
> + dir = WalkingDir::WALK_SE;
> + } else if (dirname == "sw") {
> + dir = WalkingDir::WALK_SW;
> + } else if (dirname == "w") {
> + dir = WalkingDir::WALK_W;
> + } else if (dirname == "nw") {
> + dir = WalkingDir::WALK_NW;
> + } else {
> + return 0;
> + }
> + game->send_player_ship_scouting_direction(*get(L, get_egbase(L)), dir);
> + return 1;
> + }
> + return 0;
> +
> +}
> +
> +/* RST
> + .. attribute:: island_explore_direction
> +
> + (RW) actual direction if the ship sails around an island.
> + Sets/returns cw, ccw or nil
> +
> +*/
> +int LuaShip::get_island_explore_direction(lua_State* L) {
> + if (upcast(Game, game, &get_egbase(L))) {
> + switch (get(L, get_egbase(L))->get_island_explore_direction()) {
> + case IslandExploreDirection::kCounterClockwise:
> + lua_pushstring(L, "ccw");
> + break;
> + case IslandExploreDirection::kClockwise:
> + lua_pushstring(L, "cw");
> + break;
> + default:
> + return 0;
> + }
> + return 1;
> + }
> + return 0;
> +}
> +
> +int LuaShip::set_island_explore_direction(lua_State* L) {
> + if (upcast(Game, game, &get_egbase(L))) {
> + Ship* ship = get(L, get_egbase(L));
> + std::string dir = luaL_checkstring(L, 3);
> + if (dir == "ccw"){
> + game->send_player_ship_explore_island(*ship, IslandExploreDirection::kCounterClockwise);
> + } else if (dir == "cw") {
> + game->send_player_ship_explore_island(*ship, IslandExploreDirection::kClockwise);
> + } else {
> + return 0;
> + }
> + return 1;
> + }
> + return 0;
> +}
> +
> /*
> ==========================================================
> LUA METHODS
> @@ -3341,6 +3590,25 @@
> return 1;
> }
>
> +/* RST
> + .. method:: build_colonization_port()
> +
> + Returns true if port space construction was started (ship was in adequate
> + status and a found portspace was nearby)
> +
> + :returns: true/false
> +*/
> +int LuaShip::build_colonization_port(lua_State* L) {
> + Ship* ship = get(L, get_egbase(L));
> + if (ship->get_ship_state() == Widelands::Ship::EXP_FOUNDPORTSPACE) {
> + if (upcast(Game, game, &get_egbase(L))) {
> + game->send_player_ship_construct_port(*ship, ship->exp_port_spaces()->front());
> + return 1;
> + }
> + }
> + return 0;
> +}
> +
> /*
> ==========================================================
> C METHODS
>
> === modified file 'src/scripting/lua_map.h'
> --- src/scripting/lua_map.h 2015-02-12 21:03:20 +0000
> +++ src/scripting/lua_map.h 2015-04-07 13:33:49 +0000
> @@ -688,6 +688,7 @@
> * Properties
> */
> int get_portdock(lua_State* L);
> + int get_expedition_in_progress(lua_State* L);
>
> /*
> * Lua Methods
> @@ -698,6 +699,8 @@
> int set_workers(lua_State*);
> int set_soldiers(lua_State*);
> int get_soldiers(lua_State*);
> + int start_expedition(lua_State*);
> + int cancel_expedition(lua_State*);
>
> /*
> * C Methods
> @@ -806,6 +809,7 @@
> /*
> * Properties
> */
> + int get_field(lua_State *);
> int has_caps(lua_State *);
>
> /*
> @@ -885,12 +889,17 @@
> int get_debug_economy(lua_State * L);
> int get_last_portdock(lua_State* L);
> int get_destination(lua_State* L);
> -
> + int get_state(lua_State* L);
> + int get_scouting_direction(lua_State* L);
> + int set_scouting_direction(lua_State* L);
> + int get_island_explore_direction(lua_State* L);
> + int set_island_explore_direction(lua_State* L);
> /*
> * Lua methods
> */
> int get_wares(lua_State* L);
> int get_workers(lua_State* L);
> + int build_colonization_port(lua_State* L);
>
> /*
> * C methods
>
> === modified file 'src/wui/shipwindow.cc'
> --- src/wui/shipwindow.cc 2015-02-05 12:11:20 +0000
> +++ src/wui/shipwindow.cc 2015-04-07 13:33:49 +0000
> @@ -68,9 +68,9 @@
> void act_destination();
> void act_sink();
> void act_cancel_expedition();
> - void act_scout_towards(uint8_t);
> + void act_scout_towards(WalkingDir);
> void act_construct_port();
> - void act_explore_island(ScoutingDirection);
> + void act_explore_island(IslandExploreDirection);
>
> private:
> InteractiveGameBase & m_igbase;
> @@ -120,7 +120,7 @@
> m_btn_explore_island_cw =
> make_button
> (exp_top, "expcw", _("Explore the island’s coast clockwise"), pic_explore_cw,
> - boost::bind(&ShipWindow::act_explore_island, this, ScoutingDirection::kClockwise));
> + boost::bind(&ShipWindow::act_explore_island, this, IslandExploreDirection::kClockwise));
> exp_top->add(m_btn_explore_island_cw, 0, false);
>
> m_btn_scout[WALK_NE - 1] =
> @@ -156,7 +156,7 @@
> m_btn_explore_island_ccw =
> make_button
> (exp_bot, "expccw", _("Explore the island’s coast counter clockwise"), pic_explore_ccw,
> - boost::bind(&ShipWindow::act_explore_island, this, ScoutingDirection::kCounterClockwise));
> + boost::bind(&ShipWindow::act_explore_island, this, IslandExploreDirection::kCounterClockwise));
> exp_bot->add(m_btn_explore_island_ccw, 0, false);
>
> m_btn_scout[WALK_SE - 1] =
> @@ -312,11 +312,11 @@
> }
>
> /// Sends a player command to the ship to scout towards a specific direction
> -void ShipWindow::act_scout_towards(uint8_t direction) {
> +void ShipWindow::act_scout_towards(WalkingDir direction) {
> // ignore request if the direction is not swimable at all
> - if (!m_ship.exp_dir_swimable(direction))
> + if (!m_ship.exp_dir_swimable(static_cast<Direction>(direction)))
> return;
> - m_igbase.game().send_player_ship_scout_direction(m_ship, direction);
> + m_igbase.game().send_player_ship_scouting_direction(m_ship, direction);
> }
>
> /// Constructs a port at the port build space in vision range
> @@ -327,7 +327,7 @@
> }
>
> /// Explores the island cw or ccw
> -void ShipWindow::act_explore_island(ScoutingDirection direction) {
> +void ShipWindow::act_explore_island(IslandExploreDirection direction) {
> bool coast_nearby = false;
> bool moveable = false;
> for (Direction dir = 1; (dir <= LAST_DIRECTION) && (!coast_nearby || !moveable); ++dir) {
>
> === modified file 'test/maps/expedition.wmf/scripting/init.lua'
> --- test/maps/expedition.wmf/scripting/init.lua 2014-08-01 15:30:12 +0000
> +++ test/maps/expedition.wmf/scripting/init.lua 2015-04-07 13:33:49 +0000
> @@ -93,24 +93,6 @@
> assert_equal(1, port:get_workers("builder"))
> end
>
> -function start_expedition()
> - assert_true(click_building(p1, "port"))
> - sleep(100)
> - assert_true(click_button("start_expedition"))
> - sleep(100)
> - close_windows()
> - sleep(100)
> -end
> -
> -function cancel_expedition_in_port()
> - assert_true(click_building(p1, "port"))
> - sleep(100)
> - assert_true(click_button("cancel_expedition"))
> - sleep(100)
> - close_windows()
> - sleep(100)
> -end
> -
> function cancel_expedition_in_shipwindow(which_ship)
> click_on_ship(which_ship or first_ship)
> assert_true(click_button("cancel_expedition"))
> @@ -174,7 +156,7 @@
> game.desired_speed = 10 * 1000
>
> -- Start a new expedition.
> - start_expedition()
> + port:start_expedition()
> wait_for_message("Expedition Ready")
> game.desired_speed = 10 * 1000
> sleep(10000)
> @@ -205,14 +187,15 @@
> game.desired_speed = 10 * 1000
>
> -- Start a new expedition.
> - start_expedition()
> + port:start_expedition()
> wait_for_message("Expedition Ready")
> game.desired_speed = 10 * 1000
> sleep(10000)
>
> - click_on_ship(first_ship)
> - assert_true(click_button("expccw"))
> - sleep(8000)
> + first_ship.island_explore_direction="ccw"
> + sleep(2000)
> + assert_equal("ccw",first_ship.island_explore_direction)
> + sleep(6000)
>
> stable_save("sailing")
> assert_equal(1, p1:get_workers("builder"))
> @@ -235,13 +218,14 @@
> game.desired_speed = 10 * 1000
>
> -- Send expedition to port space.
> - start_expedition()
> + port:start_expedition()
> wait_for_message("Expedition Ready")
> assert_equal(1, p1:get_workers("builder"))
> sleep(500)
>
> - click_on_ship(first_ship)
> - assert_true(click_button("expccw"))
> + first_ship.island_explore_direction="ccw"
> + sleep(2000)
> + assert_equal("ccw",first_ship.island_explore_direction)
> wait_for_message("Port Space Found")
> sleep(500)
> assert_equal(1, p1:get_workers("builder"))
> @@ -272,12 +256,13 @@
> port:set_wares("blackwood", 100)
>
>
> - start_expedition()
> + port:start_expedition()
> wait_for_message("Expedition Ready")
> - click_on_ship(first_ship)
> - assert_true(click_button("expccw"))
> + first_ship.island_explore_direction="ccw"
> + sleep(2000)
> + assert_equal("ccw",first_ship.island_explore_direction)
> wait_for_message("Port Space Found")
> - assert_true(click_button("buildport"))
> + first_ship:build_colonization_port()
> sleep(500)
> assert_equal(1, p1:get_workers("builder"))
> wait_for_message("Port")
>
> === added file 'test/maps/expedition.wmf/scripting/test_ship_movement_controls.lua'
> --- test/maps/expedition.wmf/scripting/test_ship_movement_controls.lua 1970-01-01 00:00:00 +0000
> +++ test/maps/expedition.wmf/scripting/test_ship_movement_controls.lua 2015-04-07 13:33:49 +0000
> @@ -0,0 +1,115 @@
> +run(function()
Awesome test!
> + game.desired_speed = 30 * 1000
> + p1:place_bob("ship", map:get_field(10, 10))
> +
> + port = map:get_field(16, 16).immovable
> + port:set_wares("log", 10) -- no sense to wait
> + port:set_wares("blackwood", 10)
> +
> + --getting table with all our ships (single one only)
> + ships = p1:get_ships()
> +
> + --veryfing that ship is indeed placed where should be :)
> + assert_equal(10,ships[1].field.x)
> + assert_equal(10,ships[1].field.y)
> +
> + --ships table should contain 1 item (1 ship)
> + assert_equal(1, #ships)
> +
> + --ship has no wares on it
> + assert_equal(0,ships[1]:get_wares())
> +
> + --no destination is set
> + assert(not ships[1].destination)
> +
> + --ships in transport state
> + assert_equal("transport", ships[1].state)
> +
> + --the warehouse is probably not in expedition state :)
> + assert(not map:get_field(8, 18).immovable.expedition_in_progress)
> +
> + --starting prepartion for expedition
> + assert(not port.expedition_in_progress)
> + port:start_expedition()
> + sleep (300)
> + assert(port.expedition_in_progress)
> +
> + --ships changes state when exp ready
> + while ships[1].state == "transport" do sleep(2000) end
> + assert_equal("exp_waiting", ships[1].state)
> +
> + --sending NW and verifying
> + ships[1].scouting_direction="nw"
> + sleep(6000)
> + assert_equal("nw", ships[1].scouting_direction)
> + assert_equal("exp_scouting", ships[1].state)
> +
> + while ships[1].scouting_direction == "nw" do
> + sleep (2000)
> + end
> +
> + --now ships stops nearby NW coast, so sending it back
> + ships[1].scouting_direction="se"
> + sleep(4000)
> + assert_equal("se", ships[1].scouting_direction)
> +
> + --testing remaining directions
> + ships[1].scouting_direction="e"
> + sleep(2000)
> + assert_equal("e", ships[1].scouting_direction)
> +
> + ships[1].scouting_direction="w"
> + sleep(2000)
> + assert_equal("w", ships[1].scouting_direction)
> +
> + ships[1].scouting_direction="sw"
> + sleep(2000)
> + assert_equal("sw", ships[1].scouting_direction)
> +
> + ships[1].scouting_direction="ne"
> + sleep(2000)
> + assert_equal("ne", ships[1].scouting_direction)
> +
> + --back to original course
> + ships[1].scouting_direction="se"
> + sleep(2000)
> + assert_equal("se", ships[1].scouting_direction)
> +
> + --waiting till it stops (no direction/nil is returned)
> + while ships[1].scouting_direction do sleep(2000) end
> +
> + --sending to scout the island
> + ships[1].island_explore_direction="ccw";
> + sleep(3000)
> + assert_equal("ccw", ships[1].island_explore_direction)
> + assert_equal("exp_scouting", ships[1].state)
> +
> + --fine, now change the direction
> + ships[1].island_explore_direction="cw";
> + sleep(3000)
> + assert_equal("cw", ships[1].island_explore_direction)
> +
> + -- wait till it finds a port
> + wait_for_message("Port Space Found")
> + sleep(500)
> + assert_equal("exp_found_port_space", ships[1].state)
> +
> + --starting colonization port here
> + assert(ships[1]:build_colonization_port())
> + sleep(500)
> + assert_equal("exp_colonizing", ships[1].state)
> + sleep(15000)
> + stable_save("port_in_constr")
> +
> + -- while unfinished yet, removing it
> + new_port=map:get_field(16,2).immovable
> + assert(new_port)
> + new_port:remove()
> + sleep(3000)
> +
> + --yes, the ships is back in transport mode
> + assert_equal("transport", ships[1].state)
> +
> + print("# All Tests passed.")
> + wl.ui.MapView():close()
> +end)
>
> === modified file 'test/maps/expedition.wmf/scripting/test_starting_and_immediately_canceling.lua'
> --- test/maps/expedition.wmf/scripting/test_starting_and_immediately_canceling.lua 2013-10-29 20:22:08 +0000
> +++ test/maps/expedition.wmf/scripting/test_starting_and_immediately_canceling.lua 2015-04-07 13:33:49 +0000
> @@ -5,8 +5,12 @@
>
> -- Start and immediately cancel an expedition.
> print("---- 1 -----")
> - start_expedition()
> - cancel_expedition_in_port()
> + port:start_expedition()
> + sleep(500)
> + assert(port.expedition_in_progress)
> + port:cancel_expedition()
> + sleep(500)
> + assert(not port.expedition_in_progress)
> sleep(500)
> assert_equal(1, p1:get_workers("builder"))
>
>
> === modified file 'test/maps/expedition.wmf/scripting/test_starting_wait_a_while_cancel.lua'
> --- test/maps/expedition.wmf/scripting/test_starting_wait_a_while_cancel.lua 2013-10-29 20:22:08 +0000
> +++ test/maps/expedition.wmf/scripting/test_starting_wait_a_while_cancel.lua 2015-04-07 13:33:49 +0000
> @@ -4,12 +4,12 @@
>
> -- Start an expedition, but let them carry some wares into it. This also
> -- gives the builder enough time to walk over.
> - start_expedition()
> + port:start_expedition()
> sleep(50000)
> stable_save("cancel_in_port")
> assert_equal(1, p1:get_workers("builder"))
>
> - cancel_expedition_in_port()
> + port:cancel_expedition()
> sleep(500)
> assert_equal(1, p1:get_workers("builder"))
>
>
> === modified file 'test/maps/ship_transportation.wmf/scripting/init.lua'
> --- test/maps/ship_transportation.wmf/scripting/init.lua 2015-02-10 21:25:14 +0000
> +++ test/maps/ship_transportation.wmf/scripting/init.lua 2015-04-07 13:33:49 +0000
> @@ -37,23 +37,6 @@
> return nil
> end
>
> -function portdock2()
> - local portdock = map:get_field(15, 4).immovable
> - if portdock then
> - return portdock
> - end
> - local portdock = map:get_field(14, 5).immovable
> - if portdock then
> - return portdock
> - end
> - local portdock = map:get_field(14, 4).immovable
> - if portdock then
> - return portdock
> - end
> - print ("portdock not found")
> - return nill
> -end
> -
> function start_building_farm()
> p1:place_building("farm", map:get_field(18, 4), true, true)
> connected_road(p1, map:get_field(18,5).immovable, "l,l|tl,tr|", true)
>
> === modified file 'test/maps/ship_transportation.wmf/scripting/test_rip_portdock_with_worker_and_ware_in_transit.lua'
> --- test/maps/ship_transportation.wmf/scripting/test_rip_portdock_with_worker_and_ware_in_transit.lua 2015-02-10 21:25:14 +0000
> +++ test/maps/ship_transportation.wmf/scripting/test_rip_portdock_with_worker_and_ware_in_transit.lua 2015-04-07 13:33:49 +0000
> @@ -32,7 +32,9 @@
> stable_save("restored_port")
>
> -- remove the portdock while the blackwood is in transit.
> - portdock2():remove()
> + port2_portdock=port2().portdock
> + assert(port2_portdock)
> + port2_portdock:remove()
>
> sleep(5000)
>
>
> === modified file 'test/maps/ship_transportation.wmf/scripting/test_rip_second_port_with_worker_in_portdock.lua'
> --- test/maps/ship_transportation.wmf/scripting/test_rip_second_port_with_worker_in_portdock.lua 2014-01-18 12:40:08 +0000
> +++ test/maps/ship_transportation.wmf/scripting/test_rip_second_port_with_worker_in_portdock.lua 2015-04-07 13:33:49 +0000
> @@ -5,6 +5,13 @@
> create_first_port()
> create_second_port()
>
> + --removing portdock first
> + portdock_fields=port2().portdock.fields
> + portdock_fields[1].immovable:remove()
> + sleep(100)
> + --portdock should be back, as port is still there
> + assert (portdock_fields[1].immovable)
> +
> start_building_farm()
> port1():set_workers{
> builder = 1,
> @@ -16,8 +23,13 @@
> assert_equal(p1:get_workers("builder"), 1)
> assert_equal(port1():get_workers("builder"), 0)
>
> + portdock_fields=port2().portdock.fields
> port2():remove()
> sleep(100)
> + --verify that also portdock was removed
> + assert (not portdock_fields[1].immovable)
> +
> + sleep(100)
>
> stable_save("worker_in_portdock")
>
>
--
https://code.launchpad.net/~widelands-dev/widelands/bug-1380287/+merge/252507
Your team Widelands Developers is subscribed to branch lp:~widelands-dev/widelands/bug-1380287.
References