Merge lp:~widelands-dev/widelands/bug-1236538-minimalfix into lp:widelands

Proposed by Teppo Mäenpää
Status: Merged
Merged at revision: 6793
Proposed branch: lp:~widelands-dev/widelands/bug-1236538-minimalfix
Merge into: lp:widelands
Diff against target: 117 lines (+39/-2)
3 files modified
src/economy/economy.cc (+33/-2)
src/economy/economy.h (+5/-0)
src/logic/soldier.h (+1/-0)
To merge this branch: bzr merge lp:~widelands-dev/widelands/bug-1236538-minimalfix
Reviewer Review Type Date Requested Status
Widelands Developers Pending
Review via email: mp+189864@code.launchpad.net

Description of the change

minimal invasive fix to bug 1236538

To post a comment you must log in.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'src/economy/economy.cc'
2--- src/economy/economy.cc 2013-07-26 20:19:36 +0000
3+++ src/economy/economy.cc 2013-10-08 14:22:45 +0000
4@@ -30,6 +30,7 @@
5 #include "economy/warehousesupply.h"
6 #include "logic/game.h"
7 #include "logic/player.h"
8+#include "logic/soldier.h"
9 #include "logic/tribe.h"
10 #include "logic/warehouse.h"
11 #include "upcast.h"
12@@ -794,6 +795,9 @@
13 _start_request_timer(rsps.nexttimer);
14 }
15
16+
17+std::unique_ptr<Soldier> Economy::m_soldier_prototype = nullptr; // minimal invasive fix of bug 1236538
18+
19 /**
20 * Check whether there is a supply for the given request. If the request is a
21 * worker request without supply, attempt to create a new worker in a warehouse.
22@@ -802,6 +806,26 @@
23 {
24 unsigned demand = 0;
25
26+ bool soldier_level_check;
27+ const Tribe_Descr & tribe = owner().tribe();
28+ const Worker_Descr & w_desc = *tribe.get_worker_descr(index);
29+
30+ // Make a dummy soldier, which should never be assigned to any economy
31+ // Minimal invasive fix of bug 1236538
32+ if (is_a(Soldier_Descr, &w_desc))
33+ {
34+ if (nullptr == m_soldier_prototype)
35+ {
36+ upcast(Soldier_Descr const, s_desc, &w_desc);
37+ Soldier* test_rookie = static_cast<Soldier*> (&(s_desc->create_object()));
38+ m_soldier_prototype = static_cast<std::unique_ptr<Widelands::Soldier>> (test_rookie);
39+ }
40+ soldier_level_check = true;
41+ }
42+ else
43+ soldier_level_check = false;
44+
45+
46 container_iterate_const(RequestList, m_requests, j) {
47 const Request & req = **j.current;
48
49@@ -813,17 +837,24 @@
50 if (m_supplies.have_supplies(game, req))
51 continue;
52
53+ // Requests for heroes should not trigger the creation of more rookies
54+ if (soldier_level_check)
55+ {
56+ if (not (req.get_requirements().check(*m_soldier_prototype)))
57+ continue;
58+ }
59+
60+
61 demand += req.get_open_count();
62 }
63
64 if (!demand)
65 return;
66
67+
68 // We have worker demand that is not fulfilled by supplies
69 // Find warehouses where we can create the required workers,
70 // and collect stats about existing build prerequisites
71- const Tribe_Descr & tribe = owner().tribe();
72- const Worker_Descr & w_desc = *tribe.get_worker_descr(index);
73 const Worker_Descr::Buildcost & cost = w_desc.buildcost();
74 std::vector<uint32_t> total_available;
75 uint32_t total_planned = 0;
76
77=== modified file 'src/economy/economy.h'
78--- src/economy/economy.h 2013-07-26 20:19:36 +0000
79+++ src/economy/economy.h 2013-10-08 14:22:45 +0000
80@@ -20,6 +20,7 @@
81 #ifndef ECONOMY_H
82 #define ECONOMY_H
83
84+#include <memory>
85 #include <set>
86 #include <vector>
87
88@@ -27,6 +28,7 @@
89 #include <boost/utility.hpp>
90
91 #include "logic/instances.h"
92+#include "logic/soldier.h"
93 #include "logic/warelist.h"
94 #include "logic/wareworker.h"
95 #include "economy/supply_list.h"
96@@ -225,6 +227,9 @@
97 * excessive calls to the request/supply balancing logic.
98 */
99 uint32_t m_request_timerid;
100+
101+ static std::unique_ptr<Soldier> m_soldier_prototype;
102+
103 };
104
105 }
106
107=== modified file 'src/logic/soldier.h'
108--- src/logic/soldier.h 2013-09-14 14:52:25 +0000
109+++ src/logic/soldier.h 2013-10-08 14:22:45 +0000
110@@ -39,6 +39,7 @@
111 #define HP_FRAMECOLOR RGBColor(255, 255, 255)
112
113 struct Soldier_Descr : public Worker_Descr {
114+ friend class Economy;
115 Soldier_Descr
116 (char const * const _name, char const * const _descname,
117 const std::string & directory, Profile &, Section & global_s,

Subscribers

People subscribed via source and target branches

to status/vote changes: