Commit Graph

49 Commits (5244ca106b0c28ba32950c4eb117a21041ab44a7)

Author SHA1 Message Date
Myk Taylor 100b374af7 generalize buildingplan for all building types
but restrict to only the currently supported set so we can still assume only one filter is required for each building.

changes:
- update buildingplan plugin version to 2.0
- new serialization format for planned buildings
- old persistent data is automatically migrated to new format on load
- algorithm now respects job_item filters; items must match job_item filter and buildingplan ItemFilter
- more invalid items are now filtered out, like items encased in ice. are there any others we should be checking (see BadFlags struct)
- items are sorted before job is unsuspended so final item ordering is correct regardless of what order the items were matched and attached
- item counts in filters are kept up to date so if buildingplan is disabled before all filters are matched and the building is completed by DF itself, the item counts will come out correct (though the item ordering and building "roughness" may be incorrect)
- fixes two memory leaks in building finalization code
- allows artifacts to be matched (ItemFilter defaults now top out at Masterful -- Artifact is selectable but must be manually specified)
- add gui to switch between items for buildings that require multiple item types
2020-10-16 14:08:52 -07:00
Myk Taylor 1368fb4003 buildingplan: construct buildings from lua
Replace C++ building construction code with lua constructBuilding so we can get the proper job_item filters set. these filters will be used when we replace the core buildingplan algorithm in the next PR.
2020-10-16 14:03:05 -07:00
Myk Taylor 82013c0c5e prep buildingplan for core algorithm changes
Lots of refactoring and reorganizing, with only cosmetic player-visible changes.

- show quickfort mode hotlkey label regardless of whether the current building type has buildingplan enabled. before, it was only shown after the user enabled buildingplan for the current building. this eliminates the extra step when enabling quickfort mode, which force-enables all building types.
- changed signature of lua-exported isPlannableBuilding to take subtype
  and custom type in addition to building type. this is only used by
  quickfort, and it already sends all three params in preparation for
  this change
- added lua-exported scheduleCycle(), which is like doCycle(), but only
  takes effect on the next non-paused frame. this lets quickfort
  run only one buildingplan cycle regardless of how many #build
  blueprints were run
- declared a few dfhack library methods and params const so buildingplan
  could call them from const methods
- converted buildingplan internal debug logging fn to have a printf api
- reshaped buildingplan-planner API and refactored implementation in
  preparation for upcoming core algorithm changes for supporing all
  building types (no externally-visible functionality changes)
  - changed df::building_type params to type, subtype, custom tuple keys
  - introduced capability to return multiple filters per building type
    (though the current buildings all only have one filter per)
- split monolith hook functions in buildingplan.cpp into one per scope.
  this significantly cleans up the code and preps the hooks to handle
  iterating through multiple item filters.
- got rid of send_key function and replaced with better reporting of
  whether keys have been handled
2020-10-16 13:52:23 -07:00
Myk Taylor 1c2761f903 enable all in quickfort mode
and simplify logic since new bool map values are already initialized to
false
2020-09-23 20:00:04 -07:00
Myk Taylor 3b362294b9 move quickfort logic from Planner to buildingplan
where all the other gui-related logic is.
2020-09-08 17:34:11 -07:00
Myk Taylor f3da131db7 reorganize buildingplan code - no logic changes
- no API or logic changes, just moving code around
- split buildingplan-lib into planner and rooms files
- move business logic from .h files to .cpp files
2020-09-08 00:17:56 -07:00
Myk Taylor 42108a64b9 expose basic buildingplan functionality to Lua 2020-08-12 15:24:32 -07:00
Pauli 9c59b7ff48 Fix unlikely memory leaks if Screen::show fails
The Screen::show takes ownership of the screen pointer. I decided to
switch the parameter to std::unique_ptr to make the pointer ownership
explicit. The unique_ptr then provides automatic screen destruction in
Screen::show unless pointer is inserted or is already in the linked list
that is managed by df.
2018-06-19 16:41:31 +03:00
lethosor 7e57450e78 Change buildingplan quality adjustment keys per #1284 comment, for consistency 2018-06-08 22:25:56 -04:00
lethosor c4692b1c8d Merge remote-tracking branch 'TotallyGatsby/buildingplanmax' into develop 2018-06-08 22:07:54 -04:00
lethosor f57327e7c8 Fix periodic events in several plugins
Also stop running buildingplan/fortplan while loading a world, and stop running
autogems while paused

Fixes #1286
2018-05-29 23:24:02 -04:00
Phillip Spiess 3e54a136fd Use two keys for min/max 2018-05-20 20:50:42 -07:00
Phillip Spiess 385ac3f9f5 Add 'Max Quality' setting to buildingplan 2018-05-20 14:36:50 -07:00
lethosor 2a52582c1f Add Gui::inRenameBuilding 2018-05-09 10:23:05 -04:00
Ben Lubar a7dfacd1c5
Fix warnings in supported plugins. 2018-04-06 01:25:21 -05:00
lethosor ae809afde7 Add Gui::refreshSidebar()
This handles feeding CURSOR_DOWN_Z and CURSOR_UP_Z properly, avoiding issues
when on the lowest z-level.
2017-06-23 00:02:21 -04:00
lethosor b2f05834d9 buildingplan: fix an issue preventing some numbers from being used in names 2017-06-03 18:25:49 -04:00
lethosor d0c28d3f50 Prevent plugins with active viewscreens from being unloaded
This requires plugins to pass plugin_self to Screen::show(), but
avoids the need to implement special checks in plugin_onstatechange
for the SC_BEGIN_UNLOAD event.
2016-01-01 11:15:29 -05:00
lethosor dd7c20c848 Add safer helpers to get STRING_X keys from interface_key sets
A few plugins were using input->rbegin() previously, which crashes
if input is empty and isn't strictly guaranteed to return a
STRING_X key.
2015-07-28 18:34:29 -04:00
lethosor 10cfef0553 Fix whitespace issues 2015-02-14 22:53:06 -05:00
expwnent 448404a465 Fix buildingplan stuff on Windows. 2015-01-05 20:02:54 -05:00
lethosor 0c768796e2 Merge remote-tracking branch 'danaris/fortplan'
Conflicts:
	plugins/buildingplan.cpp
2015-01-05 16:47:35 -05:00
Timothy Collett 5547722414 Initial work on fortplan plugin, including separating out code that needs to be shared with buildingplan 2014-12-23 16:56:15 -05:00
lethosor cac2245438 Update some plugins to use REQUIRE_GLOBAL 2014-12-03 23:26:54 -05:00
lethosor f7fcb342ed Fix buildingplan compiling with GCC 2014-11-15 16:21:47 -05:00
Anuradha Dissanayake befab343a1 Add ability to auto allocate rooms to noble positions. 2014-06-15 16:19:15 +12:00
Anuradha Dissanayake 5a3065fa80 Use shifted keys for buildingplan so as not to interfere with QuickFort. 2014-05-04 22:23:10 +12:00
Quietust 463bb8d498 Update plugins to use CR_WRONG_USAGE where appropriate 2013-10-30 15:58:14 -05:00
Alexander Gavrilov f3be0ee187 Remove the use of lambdas in buildingplan. 2013-10-02 19:55:48 +04:00
Alexander Gavrilov d7e35c2d23 Add built-in enable and disable commands. 2013-09-30 13:19:51 +04:00
Anuradha Dissanayake 1070eec016 Make planned doors pet passable 2013-04-01 19:52:34 +13:00
Anuradha Dissanayake a5b9848271 Clean up 2013-03-30 16:38:21 +13:00
Anuradha Dissanayake 59ec9bfc57 Update versions 2013-03-16 22:13:01 +13:00
Anuradha Dissanayake c16bd3d71a Apply r3 name changes 2013-03-16 18:25:02 +13:00
Anuradha Dissanayake 215a2e78af Fix crash when persistent data refers to missing buildings. Can only happen if planned buildings are removed with the plugin removed, then the game is reloaded after the plugin is put back. 2013-03-13 21:44:33 +13:00
falconne bc0c493b7c Workaround for strange crash in accelerated mod 2013-03-12 21:18:29 +13:00
falconne 8e9fc235a9 Adding a debug mode to track down an elusive bug. 2013-03-10 16:14:00 +13:00
Anuradha Dissanayake 63707471f4 WIP - More logical categories and variable windows 2013-03-07 22:27:06 +13:00
Anuradha Dissanayake 701b7b7d9b Multiple data averaging windows and gcc fixes. 2013-03-02 15:14:56 +13:00
Anuradha Dissanayake 4afe74efa6 Add DwarfMonitor plugin to monitor activities and happiness levels in a fort. 2013-02-28 23:39:22 +13:00
Anuradha Dissanayake a5c21745eb Enable all plan modes when entering quickfort mode 2013-02-09 16:49:36 +13:00
Anuradha Dissanayake 2f4979d3fa Add Quickfort mode 2013-02-08 00:04:52 +13:00
Anuradha Dissanayake 1956f8b92d Lock selection mode toggle 2013-02-07 22:57:07 +13:00
Anuradha Dissanayake dff16c3c1d Define nullptr for gcc < 4.6 2013-02-02 02:24:05 +13:00
Anuradha Dissanayake 056bde451a Remove some leftover code 2013-01-29 21:22:17 +13:00
Anuradha Dissanayake ae8bb7c9f8 Fix for gcc errors. 2013-01-29 20:44:56 +13:00
Anuradha Dissanayake 6546af94ee Clear persistent data after item assigned. Fix some material selection screen functionality. 2013-01-24 20:16:18 +13:00
Anuradha Dissanayake f036360688 Add filters for quality, material and decorations. 2013-01-23 23:25:38 +13:00
Anuradha Dissanayake 192baa5638 Building plan plugin: place furniture before it's built. Initial checkin. 2013-01-18 23:28:45 +13:00