From ffac2f179589cd32fdef9a2c41c608ad0b3d8c80 Mon Sep 17 00:00:00 2001 From: lethosor Date: Thu, 1 Jan 2015 13:47:47 -0500 Subject: [PATCH] New tweak: "eggs-fertile" --- Readme.html | 5 ++- Readme.rst | 1 + plugins/tweak/tweak.cpp | 5 +++ plugins/tweak/tweaks/eggs-fertile.h | 66 +++++++++++++++++++++++++++++ 4 files changed, 76 insertions(+), 1 deletion(-) create mode 100644 plugins/tweak/tweaks/eggs-fertile.h diff --git a/Readme.html b/Readme.html index a4ef98057..6ec8651c2 100644 --- a/Readme.html +++ b/Readme.html @@ -2049,7 +2049,10 @@ category when discussing an import agreement with the liaison

 

Fixes overlapping text on the "view agreement" screen

-nestbox-color:

Fixes the color of built nestboxes

+nestbox-color:

Fixes the color of built nestboxes

+ + +eggs-fertile:

Displays a fertility indicator on nestboxes

diff --git a/Readme.rst b/Readme.rst index 15933e0f6..f6ff47c7b 100644 --- a/Readme.rst +++ b/Readme.rst @@ -1329,6 +1329,7 @@ Subcommands that persist until disabled or DF quit: :manager-quantity: Removes the limit of 30 jobs per manager order :civ-view-agreement: Fixes overlapping text on the "view agreement" screen :nestbox-color: Fixes the color of built nestboxes +:eggs-fertile: Displays a fertility indicator on nestboxes fix-armory ---------- diff --git a/plugins/tweak/tweak.cpp b/plugins/tweak/tweak.cpp index d49fbe2da..709a1f484 100644 --- a/plugins/tweak/tweak.cpp +++ b/plugins/tweak/tweak.cpp @@ -76,6 +76,7 @@ #include "tweaks/advmode-contained.h" #include "tweaks/civ-agreement-ui.h" #include "tweaks/craft-age-wear.h" +#include "tweaks/eggs-fertile.h" #include "tweaks/farm-plot-select.h" #include "tweaks/fast-heat.h" #include "tweaks/fast-trade.h" @@ -147,6 +148,8 @@ DFhackCExport command_result plugin_init (color_ostream &out, std::vector \n" @@ -186,6 +189,8 @@ DFhackCExport command_result plugin_init (color_ostream &out, std::vector main.mode != ui_sidebar_mode::QueryBuilding && + ui->main.mode != ui_sidebar_mode::BuildingItems) + return NULL; + return virtual_cast(world->selected_building); + } + + DEFINE_VMETHOD_INTERPOSE(void, render, ()) + { + INTERPOSE_NEXT(render)(); + df::building_nest_boxst* nest_box = getNestBox(); + if (nest_box) + { + auto dims = Gui::getDwarfmodeViewDims(); + bool has_eggs = false; + bool fertile = false; + int idx = 0; + for (auto iter = nest_box->contained_items.begin(); + iter != nest_box->contained_items.end(); ++iter) + { + df::item_eggst* egg = virtual_cast((*iter)->item); + if (egg) + { + has_eggs = true; + if (egg->egg_flags.bits.fertile) + fertile = true; + if (ui->main.mode == ui_sidebar_mode::BuildingItems) + { + Screen::paintString( + Screen::Pen(' ', fertile ? COLOR_LIGHTGREEN : COLOR_LIGHTRED), + dims.menu_x2 - (fertile ? 4 : 6), + dims.y1 + idx + 3, + fertile ? "Fert" : "N.Fert" + ); + } + } + ++idx; + } + if (has_eggs && ui->main.mode == ui_sidebar_mode::QueryBuilding) + { + Screen::paintString( + Screen::Pen(' ', fertile ? COLOR_LIGHTGREEN : COLOR_LIGHTRED), + dims.menu_x1 + 1, + dims.y1 + 5, + fertile ? "Eggs Fertile" : "Eggs infertile" + ); + } + } + } +}; + +IMPLEMENT_VMETHOD_INTERPOSE(egg_fertile_hook, render);