~widelands-dev/widelands/trunk

« back to all changes in this revision

Viewing changes to src/logic/map_objects/tribes/warehouse.h

  • Committer: The Widelands Bunnybot
  • Date: 2025-06-16 08:27:43 UTC
  • Revision ID: bunnybot@widelands.org-20250616082743-ttc14q6ld62yjz42
Improve warehouse soldier preference handling (CB #4952 / GH #6592)

Co-authored-by: Tóth András <txa-dev@posteo.hu>
Co-authored-by: Widelands Bunnybot <bunnybot@widelands.org>
Co-committed-by: Tóth András <txa-dev@posteo.hu>

(by bunnybot)
d9fe63d85ec006edeef2f05b68401b542801b59b

Show diffs side-by-side

added added

removed removed

Lines of Context:
180
180
        bool fetch_from_flag(Game&) override;
181
181
 
182
182
        Quantity count_workers(const Game&, DescriptionIndex worker, const Requirements&, Match);
 
183
        Quantity count_soldiers(const Game&, const Requirements&);
 
184
        Quantity count_all_soldiers() {
 
185
                return incorporated_soldiers_.size();
 
186
        }
 
187
 
183
188
        Worker& launch_worker(Game&, DescriptionIndex worker, const Requirements&);
 
189
        Soldier& launch_soldier(Game&,
 
190
                                const Requirements&,
 
191
                                bool defender = false,
 
192
                                SoldierPreference pref = SoldierPreference::kAny);
184
193
 
185
194
        // Adds the worker to the inventory. Takes ownership and might delete
186
195
        // 'worker'.
237
246
 
238
247
        void set_soldier_preference(SoldierPreference);
239
248
        [[nodiscard]] SoldierPreference get_soldier_preference() const {
240
 
                return soldier_request_.get_preference();
 
249
                return soldier_request_manager_.get_preference();
241
250
        }
242
251
 
243
252
        void log_general_info(const EditorGameBase&) const override;
318
327
        Quantity desired_soldier_count_{0U};
319
328
        AttackTarget attack_target_;
320
329
        SoldierControl soldier_control_;
321
 
        SoldierRequest soldier_request_;
 
330
        SoldierRequestManager soldier_request_manager_;
322
331
        Time next_swap_soldiers_time_{0U};
323
332
 
324
333
        WarehouseSupply* supply_;
331
340
        using WorkerList = std::vector<OPtr<Worker>>;
332
341
        using IncorporatedWorkers = std::map<DescriptionIndex, WorkerList>;
333
342
        IncorporatedWorkers incorporated_workers_;
 
343
 
 
344
        // We keep soldiers separately, always sorted by level in decreasing order
 
345
        using SoldierList = std::vector<OPtr<Soldier>>;
 
346
        SoldierList incorporated_soldiers_;
 
347
 
 
348
        // Called by incorporate_worker() for soldiers. This handles keeping them sorted.
 
349
        void incorporate_soldier_inner(EditorGameBase& egbase, Soldier* soldier);
 
350
 
 
351
        // Flag for launch_soldier() whether it needs to sort them first.
 
352
        // Adding soldiers on game loading in map_io/map_buildingdata_packet.cc sets it to false.
 
353
        bool soldiers_are_sorted_{true};
 
354
 
334
355
        std::vector<Time> next_worker_without_cost_spawn_;
335
356
        Time next_military_act_{0U};
336
357
        Time next_stock_remove_act_{0U};