widelands-dev team mailing list archive
-
widelands-dev team
-
Mailing list archive
-
Message #03826
[Merge] lp:~widelands-dev/widelands/bug-1380287 into lp:widelands
TiborB has proposed merging lp:~widelands-dev/widelands/bug-1380287 into lp:widelands.
Requested reviews:
Widelands Developers (widelands-dev)
Related bugs:
Bug #1380287 in widelands: "Ships should be supported in Lua scripting"
https://bugs.launchpad.net/widelands/+bug/1380287
For more details, see:
https://code.launchpad.net/~widelands-dev/widelands/bug-1380287/+merge/252507
I implemented some LUA interface for ships, f.e.:
map:get_ships - to get list of player' ships on map
ships.field - to get a field where ship is located
ships.status - to get status of ship (what is it doing)
port:start_expedition(), port:cancel_expedition(), port.expedition_in_progress - selfexplanatory...
ship.scout_direction, ship.island_scout_direction - sets and get direction of ship if in expedition mode
ship:build_colonization_port()
Please review
--
Your team Widelands Developers is requested to review the proposed merge of lp:~widelands-dev/widelands/bug-1380287 into lp:widelands.
=== modified file 'src/logic/ship.cc'
--- src/logic/ship.cc 2015-02-05 12:11:20 +0000
+++ src/logic/ship.cc 2015-03-10 20:18:11 +0000
@@ -831,6 +831,22 @@
m_expedition->island_exploration = false;
}
+//Returns integer of direction, or 255 if query invalid
+//Intended for LUA scripting
+uint8_t Ship::get_scout_direction() {
+ if (!m_expedition) {
+ return std::numeric_limits<uint8_t>::max();
+ }
+ if (m_ship_state != EXP_SCOUTING) {
+ return std::numeric_limits<uint8_t>::max();
+ }
+ if (m_expedition->island_exploration) {
+ return std::numeric_limits<uint8_t>::max();
+ }
+
+ return static_cast<uint8_t>(m_expedition->direction);
+}
+
/// Initializes the construction of a port at @arg c
/// @note only called via player command
void Ship::exp_construct_port(Game&, const Coords& c) {
@@ -850,6 +866,23 @@
m_expedition->island_exploration = true;
}
+//Returns integer of direction, or 255 if query invalid
+//Intended for LUA scripting
+uint8_t Ship::get_island_explore_direction() {
+ if (!m_expedition) {
+ return std::numeric_limits<uint8_t>::max();
+ }
+ if (m_ship_state != EXP_SCOUTING) {
+ return std::numeric_limits<uint8_t>::max();
+ }
+ if (!m_expedition->island_exploration) {
+ return std::numeric_limits<uint8_t>::max();
+ }
+
+ return static_cast<uint8_t>(m_expedition->scouting_direction);
+}
+
+
/// Cancels a currently running expedition
/// @note only called via player command
void Ship::exp_cancel(Game& game) {
=== modified file 'src/logic/ship.h'
--- src/logic/ship.h 2015-02-05 12:11:20 +0000
+++ src/logic/ship.h 2015-03-10 20:18:11 +0000
@@ -205,6 +205,8 @@
void exp_scout_direction(Game &, uint8_t);
void exp_construct_port (Game &, const Coords&);
void exp_explore_island (Game &, ScoutingDirection);
+ uint8_t get_scout_direction();
+ uint8_t get_island_explore_direction();
void exp_cancel (Game &);
void sink_ship (Game &);
=== 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-03-10 20:18:11 +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,42 @@
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-03-10 20:18:11 +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-03-10 20:18:11 +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" //
+//#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));
+
+ 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, status),
+ PROP_RW(LuaShip, scout_direction),
+ PROP_RW(LuaShip, island_scout_direction),
{nullptr, nullptr, nullptr},
};
@@ -3285,6 +3391,74 @@
return upcasted_map_object_to_lua(L, get(L, egbase)->get_lastdock(egbase));
}
+/* RST //
+ .. attribute:: status
+
+ (RW) returns/sets one of statuses as defined in enum in ship.h
+ (integer)
+
+*/
+int LuaShip::get_status(lua_State* L) {
+ EditorGameBase & egbase = get_egbase(L);
+ lua_pushuint32(L, static_cast<uint32_t>(get(L, egbase)->get_ship_state()));
+ return 1;
+}
+
+int LuaShip::get_scout_direction(lua_State* L) {
+
+ Ship* ship = get(L, get_egbase(L));
+ if (upcast(Game, game, &get_egbase(L))) {
+ lua_pushuint32(L, static_cast<uint32_t>(ship->get_scout_direction()));
+ return 1;
+ }
+ return 0;
+}
+
+int LuaShip::set_scout_direction(lua_State* L) {
+
+ uint8_t dir = static_cast<uint8_t>(luaL_checkuint32(L, -1));
+ Ship* ship = get(L, get_egbase(L));
+
+ if (upcast(Game, game, &get_egbase(L))) {
+ game->send_player_ship_scout_direction(*ship, dir);
+ return 1;
+ }
+ return 0;
+
+}
+
+/* RST
+ .. attribute:: island_scout_direction
+
+ (RW) actual direction if the ship sails around an island.
+ Sets/returns int as defined in enum in logic/ship.h
+ now: CounterClockwise = 0, Clockwise = 1
+
+*/
+// UNTESTED
+int LuaShip::get_island_scout_direction(lua_State* L) {
+
+ Ship* ship = get(L, get_egbase(L));
+ if (upcast(Game, game, &get_egbase(L))) {
+ lua_pushuint32(L, static_cast<uint32_t>(ship->get_island_explore_direction()));
+ return 1;
+ }
+ return 0;
+}
+
+int LuaShip::set_island_scout_direction(lua_State* L) {
+
+ uint8_t dir = static_cast<uint8_t>(luaL_checkuint32(L, -1));
+ Ship* ship = get(L, get_egbase(L));
+
+ if (upcast(Game, game, &get_egbase(L))) {
+ game->send_player_ship_explore_island(*ship, static_cast<Widelands::ScoutingDirection>(dir));
+ return 1;
+ }
+ return 0;
+
+}
+
/*
==========================================================
LUA METHODS
@@ -3341,6 +3515,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() == 3) { // I would prefer here 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-03-10 20:18:11 +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_status(lua_State* L);
+ int get_scout_direction(lua_State* L);
+ int set_scout_direction(lua_State* L);
+ int get_island_scout_direction(lua_State* L);
+ int set_island_scout_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 '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-03-10 20:18:11 +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_scout_direction=0
+ sleep(2000)
+ assert_equal(0,first_ship.island_scout_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_scout_direction=0
+ sleep(2000)
+ assert_equal(0,first_ship.island_scout_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_scout_direction=0
+ sleep(2000)
+ assert_equal(0,first_ship.island_scout_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-03-10 20:18:11 +0000
@@ -0,0 +1,86 @@
+run(function()
+ 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 (=0)
+ assert_equal(0,ships[1].status)
+
+ --the warehouse is probably not in expedition status :)
+ 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 status when exp ready
+ while ships[1].status == 0 do sleep(2000) end
+
+ --sending NW and verifying
+ ships[1].scout_direction=6
+ sleep(3000)
+ assert_equal(6, ships[1].scout_direction)
+
+ while ships[1].scout_direction == 6 do
+ sleep (2000)
+ end
+
+ --now ships stops nearby NW coast, so sending it back
+ ships[1].scout_direction=3
+ sleep(3000)
+ assert_equal(3, ships[1].scout_direction)
+
+ --waiting till it stops (value=255)
+ while ships[1].scout_direction <255 do sleep(2000) end
+
+ --sending to scout the island
+ ships[1].island_scout_direction=1;
+ sleep(3000)
+ assert_equal(1, ships[1].island_scout_direction)
+
+ --fine, now change the direction
+ ships[1].island_scout_direction=0;
+ sleep(3000)
+ assert_equal(0, ships[1].island_scout_direction)
+
+ -- wait till it finds a port
+ wait_for_message("Port Space Found")
+ --starting colonization port here
+ assert(ships[1]:build_colonization_port())
+ 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(0,ships[1].status)
+
+ 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-03-10 20:18:11 +0000
@@ -5,8 +5,8 @@
-- Start and immediately cancel an expedition.
print("---- 1 -----")
- start_expedition()
- cancel_expedition_in_port()
+ port:start_expedition()
+ port:cancel_expedition()
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-03-10 20:18:11 +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-03-10 20:18:11 +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-03-10 20:18:11 +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-03-10 20:18:11 +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")
Follow ups
-
Re: [Merge] lp:~widelands-dev/widelands/bug-1380287 into lp:widelands
From: TiborB, 2015-04-07
-
[Merge] lp:~widelands-dev/widelands/bug-1380287 into lp:widelands
From: noreply, 2015-04-07
-
Re: [Merge] lp:~widelands-dev/widelands/bug-1380287 into lp:widelands
From: SirVer, 2015-04-07
-
Re: [Merge] lp:~widelands-dev/widelands/bug-1380287 into lp:widelands
From: GunChleoc, 2015-04-07
-
Re: [Merge] lp:~widelands-dev/widelands/bug-1380287 into lp:widelands
From: TiborB, 2015-03-13
-
Re: [Merge] lp:~widelands-dev/widelands/bug-1380287 into lp:widelands
From: GunChleoc, 2015-03-12
-
Re: [Merge] lp:~widelands-dev/widelands/bug-1380287 into lp:widelands
From: TiborB, 2015-03-12
-
Re: [Merge] lp:~widelands-dev/widelands/bug-1380287 into lp:widelands
From: GunChleoc, 2015-03-11
-
Re: [Merge] lp:~widelands-dev/widelands/bug-1380287 into lp:widelands
From: TiborB, 2015-03-11
-
Re: [Merge] lp:~widelands-dev/widelands/bug-1380287 into lp:widelands
From: GunChleoc, 2015-03-11