widelands-dev team mailing list archive
-
widelands-dev team
-
Mailing list archive
-
Message #13990
[Merge] lp:~widelands-dev/widelands/no-hardcoded-resources into lp:widelands
Benedikt Straub has proposed merging lp:~widelands-dev/widelands/no-hardcoded-resources into lp:widelands.
Commit message:
Removed hardcoding for resources
Requested reviews:
Widelands Developers (widelands-dev)
Related bugs:
Bug #1713706 in widelands: "Remove hard-coding for resource types from the engine"
https://bugs.launchpad.net/widelands/+bug/1713706
For more details, see:
https://code.launchpad.net/~widelands-dev/widelands/no-hardcoded-resources/+merge/350750
No resources are hardcoded anymore. Geologists can discover any resource set as discoverable in Lua. Messages have been adjusted to handle the timeout in a different way.
As a side effect, resource timeout radius and duration can now be set via Lua.
--
Your team Widelands Developers is requested to review the proposed merge of lp:~widelands-dev/widelands/no-hardcoded-resources into lp:widelands.
=== modified file 'data/world/resources/init.lua'
--- data/world/resources/init.lua 2017-08-30 17:07:20 +0000
+++ data/world/resources/init.lua 2018-07-24 19:34:27 +0000
@@ -50,6 +50,18 @@
--
-- detectable = true,
--
+-- **timeout_millis**
+-- *Mandatory*. Defines the time for which geologists messages for this
+-- resource will be muted within this area after a find, e.g.::
+--
+-- timeout_millis = 30000,
+--
+-- **timeout_radius**
+-- *Mandatory*. Defines the radius within which geologists messages for this
+-- resource will be muted after a find, e.g.::
+--
+-- timeout_radius = 8,
+--
-- **representative_image**
-- *Mandatory*. Path to an image file that will represent the resource in menus
-- etc., e.g.::
@@ -72,6 +84,8 @@
descname = _ "Coal",
max_amount = 20,
detectable = true,
+ timeout_millis = 30000,
+ timeout_radius = 8,
representative_image = pics_dir .. "coal4.png",
editor_pictures = {
[5] = pics_dir .. "coal1.png",
@@ -86,6 +100,8 @@
descname = _ "Gold",
max_amount = 20,
detectable = true,
+ timeout_millis = 30000,
+ timeout_radius = 8,
representative_image = pics_dir .. "gold4.png",
editor_pictures = {
[5] = pics_dir .. "gold1.png",
@@ -100,6 +116,8 @@
descname = _ "Iron",
max_amount = 20,
detectable = true,
+ timeout_millis = 30000,
+ timeout_radius = 8,
representative_image = pics_dir .. "iron4.png",
editor_pictures = {
[5] = pics_dir .. "iron1.png",
@@ -114,6 +132,8 @@
descname = _ "Stones",
max_amount = 20,
detectable = true,
+ timeout_millis = 30000,
+ timeout_radius = 8,
representative_image = pics_dir .. "stones4.png",
editor_pictures = {
[5] = pics_dir .. "stones1.png",
@@ -128,6 +148,8 @@
descname = _ "Water",
max_amount = 50,
detectable = true,
+ timeout_millis = 30000,
+ timeout_radius = 8,
representative_image = pics_dir .. "water4.png",
editor_pictures = {
[10] = pics_dir .."water1.png",
@@ -142,6 +164,8 @@
descname = _ "Fish",
max_amount = 20,
detectable = false,
+ timeout_millis = 0,
+ timeout_radius = 0,
representative_image = pics_dir .. "fish.png",
editor_pictures = {
[5] = pics_dir .. "fish1.png",
=== modified file 'src/logic/map_objects/tribes/worker.cc'
--- src/logic/map_objects/tribes/worker.cc 2018-07-13 10:35:16 +0000
+++ src/logic/map_objects/tribes/worker.cc 2018-07-24 19:34:27 +0000
@@ -975,16 +975,6 @@
.str();
Message::Type message_type = Message::Type::kGeologists;
- if (rdescr->name() == "coal")
- message_type = Message::Type::kGeologistsCoal;
- else if (rdescr->name() == "gold")
- message_type = Message::Type::kGeologistsGold;
- else if (rdescr->name() == "stones")
- message_type = Message::Type::kGeologistsStones;
- else if (rdescr->name() == "iron")
- message_type = Message::Type::kGeologistsIron;
- else if (rdescr->name() == "water")
- message_type = Message::Type::kGeologistsWater;
// We should add a message to the player's message queue - but only,
// if there is not already a similar one in list.
@@ -992,8 +982,8 @@
game, std::unique_ptr<Message>(
new Message(message_type, game.get_gametime(), rdescr->descname(),
ri.descr().representative_image_filename(), rdescr->descname(),
- message, position, serial_)),
- 300000, 8);
+ message, position, serial_, rdescr->name().c_str())),
+ rdescr->timeout_millis(), rdescr->timeout_radius());
}
}
=== modified file 'src/logic/map_objects/world/resource_description.cc'
--- src/logic/map_objects/world/resource_description.cc 2018-04-07 16:59:00 +0000
+++ src/logic/map_objects/world/resource_description.cc 2018-07-24 19:34:27 +0000
@@ -31,6 +31,8 @@
: name_(table.get_string("name")),
descname_(table.get_string("descname")),
detectable_(table.get_bool("detectable")),
+ timeout_millis_(table.get_int("timeout_millis")),
+ timeout_radius_(table.get_int("timeout_radius")),
max_amount_(table.get_int("max_amount")),
representative_image_(table.get_string("representative_image")) {
@@ -76,6 +78,14 @@
return detectable_;
}
+uint32_t ResourceDescription::timeout_millis() const {
+ return timeout_millis_;
+}
+
+uint32_t ResourceDescription::timeout_radius() const {
+ return timeout_radius_;
+}
+
ResourceAmount ResourceDescription::max_amount() const {
return max_amount_;
}
=== modified file 'src/logic/map_objects/world/resource_description.h'
--- src/logic/map_objects/world/resource_description.h 2018-04-07 16:59:00 +0000
+++ src/logic/map_objects/world/resource_description.h 2018-07-24 19:34:27 +0000
@@ -48,6 +48,12 @@
/// Returns if this resource is detectable by a geologist.
bool detectable() const;
+ /// Returns the time for which nearby geologist messages for this resource are muted
+ uint32_t timeout_millis() const;
+
+ /// Returns the radius within which geologist messages for this resource are tenporarily muted
+ uint32_t timeout_radius() const;
+
/// Returns the maximum amount that can be in a field for this resource.
ResourceAmount max_amount() const;
@@ -64,6 +70,8 @@
const std::string name_;
const std::string descname_;
const bool detectable_;
+ const uint32_t timeout_millis_;
+ const uint32_t timeout_radius_;
const ResourceAmount max_amount_;
const std::string representative_image_;
std::vector<EditorPicture> editor_pictures_;
=== modified file 'src/logic/message.h'
--- src/logic/message.h 2018-04-07 16:59:00 +0000
+++ src/logic/message.h 2018-07-24 19:34:27 +0000
@@ -36,11 +36,6 @@
kAllMessages,
kGameLogic,
kGeologists,
- kGeologistsCoal,
- kGeologistsGold,
- kGeologistsStones,
- kGeologistsIron,
- kGeologistsWater,
kScenario,
kSeafaring,
kEconomy, // economy
@@ -63,6 +58,8 @@
* \param ser A MapObject serial. If non null, the message will be deleted once
* the object is removed from the game. Defaults to 0
* \param s The message status. Defaults to Status::New
+ * \param detail The extended message type, used for comparisons in
+ * Player::add_message_with_timeout(). Defaults to nullptr
*/
Message(Message::Type msgtype,
uint32_t sent_time,
@@ -72,8 +69,10 @@
const std::string& init_body,
const Widelands::Coords& c = Coords::null(),
Widelands::Serial ser = 0,
+ const char* detail = nullptr,
Status s = Status::kNew)
: type_(msgtype),
+ type_detail_(detail),
title_(init_title),
icon_filename_(init_icon_filename),
icon_(g_gr->images().get(init_icon_filename)),
@@ -88,6 +87,9 @@
Message::Type type() const {
return type_;
}
+ const char* type_detail() const {
+ return type_detail_;
+ }
uint32_t sent() const {
return sent_;
}
@@ -129,15 +131,13 @@
} else if (type_ >= Widelands::Message::Type::kEconomy &&
type_ <= Widelands::Message::Type::kEconomySiteOccupied) {
return Widelands::Message::Type::kEconomy;
- } else if (type_ >= Widelands::Message::Type::kGeologists &&
- type_ <= Widelands::Message::Type::kGeologistsWater) {
- return Widelands::Message::Type::kGeologists;
}
return type_;
}
private:
Message::Type type_;
+ const char* type_detail_;
const std::string title_;
const std::string icon_filename_;
const Image* icon_; // Pointer to icon into picture stack
=== modified file 'src/logic/player.cc'
--- src/logic/player.cc 2018-07-20 07:49:32 +0000
+++ src/logic/player.cc 2018-07-24 19:34:27 +0000
@@ -357,6 +357,7 @@
Coords const position = message->position();
for (const auto& tmp_message : messages()) {
if (tmp_message.second->type() == message->type() &&
+ tmp_message.second->type_detail() == message->type_detail() &&
gametime < tmp_message.second->sent() + timeout &&
map.calc_distance(tmp_message.second->position(), position) <= radius) {
return MessageId::null();
=== modified file 'src/map_io/map_players_messages_packet.cc'
--- src/map_io/map_players_messages_packet.cc 2018-04-07 16:59:00 +0000
+++ src/map_io/map_players_messages_packet.cc 2018-07-24 19:34:27 +0000
@@ -123,14 +123,14 @@
messages->add_message(std::unique_ptr<Message>(new Message(
static_cast<Message::Type>(s->get_natural("type")), sent, name,
"images/wui/fieldaction/menu_build_flag.png", name, s->get_safe_string("body"),
- get_coords("position", extent, Coords::null(), s), serial, status)));
+ get_coords("position", extent, Coords::null(), s), serial, nullptr, status)));
} else {
messages->add_message(std::unique_ptr<Message>(new Message(
static_cast<Message::Type>(s->get_natural("type")), sent, s->get_name(),
s->get_safe_string("icon"), s->get_safe_string("heading"),
s->get_safe_string("body"), get_coords("position", extent, Coords::null(), s),
- serial, status)));
+ serial, s->get_string("detail"), status)));
}
previous_message_sent = sent;
} catch (const WException& e) {
@@ -183,6 +183,9 @@
uint32_t fileindex = mos.get_object_file_index_or_zero(mo);
s.set_int("serial", fileindex);
}
+ if (message.type_detail()) {
+ s.set_string("detail", message.type_detail());
+ }
}
fs.ensure_directory_exists(
(boost::format(kPlayerDirnameTemplate) % static_cast<unsigned int>(p)).str());
=== modified file 'src/scripting/lua_game.cc'
--- src/scripting/lua_game.cc 2018-07-12 04:41:20 +0000
+++ src/scripting/lua_game.cc 2018-07-24 19:34:27 +0000
@@ -377,7 +377,7 @@
MessageId const message = plr.add_message(
game, std::unique_ptr<Message>(new Message(Message::Type::kScenario, game.get_gametime(),
- title, icon, heading, body, c, 0, st)),
+ title, icon, heading, body, c, 0, nullptr, st)),
popup);
return to_lua<LuaMessage>(L, new LuaMessage(player_number(), message));
=== modified file 'src/wui/game_message_menu.cc'
--- src/wui/game_message_menu.cc 2018-05-14 08:24:46 +0000
+++ src/wui/game_message_menu.cc 2018-07-24 19:34:27 +0000
@@ -498,11 +498,6 @@
case Widelands::Message::Type::kNoMessages:
case Widelands::Message::Type::kAllMessages:
case Widelands::Message::Type::kGameLogic:
- case Widelands::Message::Type::kGeologistsCoal:
- case Widelands::Message::Type::kGeologistsGold:
- case Widelands::Message::Type::kGeologistsStones:
- case Widelands::Message::Type::kGeologistsIron:
- case Widelands::Message::Type::kGeologistsWater:
case Widelands::Message::Type::kEconomySiteOccupied:
case Widelands::Message::Type::kWarfareSiteDefeated:
case Widelands::Message::Type::kWarfareSiteLost:
@@ -592,11 +587,6 @@
return "images/ui_basic/menu_help.png";
case Widelands::Message::Type::kNoMessages:
case Widelands::Message::Type::kAllMessages:
- case Widelands::Message::Type::kGeologistsCoal:
- case Widelands::Message::Type::kGeologistsGold:
- case Widelands::Message::Type::kGeologistsStones:
- case Widelands::Message::Type::kGeologistsIron:
- case Widelands::Message::Type::kGeologistsWater:
case Widelands::Message::Type::kEconomySiteOccupied:
case Widelands::Message::Type::kWarfareSiteDefeated:
case Widelands::Message::Type::kWarfareSiteLost:
Follow ups
-
[Merge] lp:~widelands-dev/widelands/no-hardcoded-resources into lp:widelands
From: noreply, 2018-07-29
-
Re: [Merge] lp:~widelands-dev/widelands/no-hardcoded-resources into lp:widelands
From: GunChleoc, 2018-07-29
-
[Merge] lp:~widelands-dev/widelands/no-hardcoded-resources into lp:widelands
From: bunnybot, 2018-07-29
-
[Merge] lp:~widelands-dev/widelands/no-hardcoded-resources into lp:widelands
From: bunnybot, 2018-07-28
-
Re: [Merge] lp:~widelands-dev/widelands/no-hardcoded-resources into lp:widelands
From: GunChleoc, 2018-07-28
-
Re: [Merge] lp:~widelands-dev/widelands/no-hardcoded-resources into lp:widelands
From: GunChleoc, 2018-07-28
-
[Merge] lp:~widelands-dev/widelands/no-hardcoded-resources into lp:widelands
From: bunnybot, 2018-07-26
-
[Merge] lp:~widelands-dev/widelands/no-hardcoded-resources into lp:widelands
From: bunnybot, 2018-07-25
-
[Merge] lp:~widelands-dev/widelands/no-hardcoded-resources into lp:widelands
From: bunnybot, 2018-07-25
-
Re: [Merge] lp:~widelands-dev/widelands/no-hardcoded-resources into lp:widelands
From: Benedikt Straub, 2018-07-25
-
Re: [Merge] lp:~widelands-dev/widelands/no-hardcoded-resources into lp:widelands
From: GunChleoc, 2018-07-25
-
[Merge] lp:~widelands-dev/widelands/no-hardcoded-resources into lp:widelands
From: bunnybot, 2018-07-25