2
* Copyright (C) 2002-2004 by Widelands Development Team
4
* This program is free software; you can redistribute it and/or
5
* modify it under the terms of the GNU General Public License
6
* as published by the Free Software Foundation; either version 2
7
* of the License, or (at your option) any later version.
9
* This program is distributed in the hope that it will be useful,
10
* but WITHOUT ANY WARRANTY; without even the implied warranty of
11
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
* GNU General Public License for more details.
14
* You should have received a copy of the GNU General Public License
15
* along with this program; if not, write to the Free Software
16
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20
#include "editor_game_base.h"
26
#include "transport.h"
27
#include "warehouse.h"
28
#include "wexception.h"
32
static const int CARRIER_SPAWN_INTERVAL = 2500;
37
WarehouseSupply::WarehouseSupply
42
WarehouseSupply::WarehouseSupply(Warehouse* wh)
51
WarehouseSupply::~WarehouseSupply
56
WarehouseSupply::~WarehouseSupply()
61
"WarehouseSupply::~WarehouseSupply: "
62
"Warehouse %u still belongs to an economy",
63
m_warehouse->get_serial());
67
// We're removed from the Economy. Therefore, the wares can simply
68
// be cleared out. The global inventory will be okay.
74
* Inform this supply, how much wares
77
void WarehouseSupply::set_nrwares( int i ) {
78
assert(m_wares.get_nrwareids()==0);
80
m_wares.set_nrwares(i);
82
void WarehouseSupply::set_nrworkers( int i ) {
83
assert(m_workers.get_nrwareids()==0);
85
m_workers.set_nrwares(i);
92
WarehouseSupply::set_economy
94
Add and remove our wares and the Supply to the economies as necessary.
97
void WarehouseSupply::set_economy(Economy* e)
103
for(int i = 0; i < m_wares.get_nrwareids(); i++) {
104
if (m_wares.stock(i)) {
105
m_economy->remove_wares(i, m_wares.stock(i));
106
m_economy->remove_ware_supply(i, this);
109
for(int i = 0; i < m_workers.get_nrwareids(); i++) {
110
if (m_workers.stock(i)) {
111
m_economy->remove_workers(i, m_workers.stock(i));
112
m_economy->remove_worker_supply(i, this);
120
for(int i = 0; i < m_wares.get_nrwareids(); i++) {
121
if (m_wares.stock(i)) {
122
m_economy->add_wares(i, m_wares.stock(i));
123
m_economy->add_ware_supply(i, this);
126
for(int i = 0; i < m_workers.get_nrwareids(); i++) {
127
if (m_workers.stock(i)) {
128
m_economy->add_workers(i, m_workers.stock(i));
129
m_economy->add_worker_supply(i, this);
138
WarehouseSupply::add_wares
140
Add wares and update the economy.
143
void WarehouseSupply::add_wares(int id, int count)
148
if (!m_wares.stock(id))
149
m_economy->add_ware_supply(id, this);
151
m_economy->add_wares(id, count);
152
m_wares.add(id, count);
158
WarehouseSupply::remove_wares
160
Remove wares and update the economy.
163
void WarehouseSupply::remove_wares(int id, int count)
168
m_wares.remove(id, count);
169
m_economy->remove_wares(id, count);
171
if (!m_wares.stock(id))
172
m_economy->remove_ware_supply(id, this);
177
WarehouseSupply::add_workers
179
Add workers and update the economy.
183
void WarehouseSupply::add_workers(int id, int count)
188
if (!m_workers.stock(id))
189
m_economy->add_worker_supply(id, this);
191
m_economy->add_workers(id, count);
192
m_workers.add(id, count);
198
WarehouseSupply::remove_workers
200
Remove workers and update the economy.
202
Comments see add_workers
205
void WarehouseSupply::remove_workers(int id, int count)
210
m_workers.remove(id, count);
211
m_economy->remove_workers(id, count);
213
if (!m_workers.stock(id))
214
m_economy->remove_worker_supply(id, this);
219
WarehouseSupply::get_position
221
Return the position of the Supply, i.e. the owning Warehouse.
224
PlayerImmovable* WarehouseSupply::get_position(Game* g)
232
WarehouseSupply::get_amount
234
Return our stock of the given ware.
237
int WarehouseSupply::get_amount(Game* g, int ware)
239
return m_wares.stock(ware);
245
WarehouseSupply::is_active
247
Warehouse supplies are never active.
250
bool WarehouseSupply::is_active(Game* g)
258
WarehouseSupply::launch_item
260
Launch a ware as item.
263
WareInstance* WarehouseSupply::launch_item(Game* g, int ware)
265
assert(m_wares.stock(ware));
267
return m_warehouse->launch_item(g, ware);
273
WarehouseSupply::launch_worker
275
Launch a ware as worker.
278
Worker* WarehouseSupply::launch_worker(Game* g, int ware)
280
assert(m_workers.stock(ware));
282
return m_warehouse->launch_worker(g, ware);
288
WarehouseSupply::launch_soldier
290
Launch a ware as soldier.
293
Soldier* WarehouseSupply::launch_soldier(Game* g, int ware, Requeriments* req)
295
assert(m_workers.stock(ware));
297
return m_warehouse->launch_soldier(g, ware, req);
302
WarehouseSupply::get_passing_requeriments
304
Launch a ware as soldier.
307
int WarehouseSupply::get_passing_requeriments(Game* g, int ware, Requeriments* req)
309
assert(m_workers.stock(ware));
311
return m_warehouse->get_soldiers_passing (g, ware, req);
316
WarehouseSupply::mark_as_used
319
void WarehouseSupply::mark_as_used (Game* g, int ware, Requeriments* r)
321
m_warehouse->mark_as_used (g, ware, r);
327
==============================================================================
331
==============================================================================
336
Warehouse_Descr::Warehouse_Descr
338
Initialize with sane defaults
341
Warehouse_Descr::Warehouse_Descr(Tribe_Descr* tribe, const char* name)
342
: Building_Descr(tribe, name)
344
m_subtype = Subtype_Normal;
350
Warehouse_Descr::parse
352
Parse the additional warehouse settings from the given profile and directory
355
void Warehouse_Descr::parse(const char* directory, Profile* prof,
356
const EncodeData* encdata)
358
add_attribute(Map_Object::WAREHOUSE);
360
Building_Descr::parse(directory, prof, encdata);
362
Section* global = prof->get_safe_section("global");
365
string = global->get_safe_string("subtype");
366
if (!strcasecmp(string, "HQ")) {
367
m_subtype = Subtype_HQ;
368
} else if (!strcasecmp(string, "port")) {
369
m_subtype = Subtype_Port;
370
} else if (!strcasecmp(string, "none")) {
374
"Unsupported warehouse subtype '%s'. Possible values: none, HQ, port",
377
if (m_subtype == Subtype_HQ)
378
m_conquers = global->get_int("conquers");
383
==============================
387
==============================
394
Initialize a warehouse (zero contents, etc...)
397
Warehouse::Warehouse(Warehouse_Descr* descr)
400
m_supply = new WarehouseSupply(this);
401
m_next_carrier_spawn = 0;
412
Warehouse::~Warehouse()
422
Conquer the land around the HQ on init.
425
void Warehouse::init(Editor_Game_Base* gg)
429
if (get_descr()->get_subtype() == Warehouse_Descr::Subtype_HQ)
430
gg->conquer_area(get_owner()->get_player_number(), m_position, get_descr());
432
m_supply->set_nrwares(get_owner()->get_tribe()->get_nrwares());
433
m_supply->set_nrworkers(get_owner()->get_tribe()->get_nrworkers());
436
for(int i = 0; i < get_owner()->get_tribe()->get_nrwares(); i++) {
437
Request* req = new Request(this, i, &Warehouse::idle_request_cb, this, Request::WARE);
441
m_requests.push_back(req);
443
for(int i = 0; i < get_owner()->get_tribe()->get_nrworkers(); i++) {
444
Request* req = new Request(this, i, &Warehouse::idle_request_cb, this, Request::WORKER);
448
m_requests.push_back(req);
452
Game* g=static_cast<Game*>(gg);
454
m_next_carrier_spawn = schedule_act(g, CARRIER_SPAWN_INTERVAL);
455
m_next_military_act = schedule_act(g, 1000);
464
Destroy the warehouse.
467
void Warehouse::cleanup(Editor_Game_Base* gg)
470
Game* g=static_cast<Game*>(gg);
472
while(m_requests.size()) {
473
Request* req = m_requests[m_requests.size()-1];
475
m_requests.pop_back();
480
// all cached workers are unbound and freed
481
while(m_incorporated_workers.size()) {
482
Worker* w=static_cast<Worker*>(m_incorporated_workers.begin()->get(gg));
483
// If the game ends and this worker has been created before this warehouse, it might
484
// already be deleted. So do not try and free him
487
m_incorporated_workers.erase(m_incorporated_workers.begin());
490
// TODO: un-conquer the area?
491
Building::cleanup(gg);
499
Act regularly to create carriers. According to intelligence, this is some
500
highly advanced technology. Not only do the settlers have no problems with
501
birth control, they don't even need anybody to procreate. They must have
502
built-in DNA samples in those warehouses. And what the hell are they doing,
503
killing useless tribesmen! The Borg? Or just like Soylent Green?
504
Or maybe I should just stop writing comments that late at night ;-)
507
void Warehouse::act(Game* g, uint data)
509
if (g->get_gametime() - m_next_carrier_spawn >= 0)
511
int id = get_owner()->get_tribe()->get_safe_worker_index("carrier");
512
int stock = m_supply->stock_workers(id);
513
int tdelta = CARRIER_SPAWN_INTERVAL;
516
tdelta -= 4*(100 - stock);
517
insert_workers(id, 1);
518
} else if (stock > 100) {
519
tdelta -= 4*(stock - 100);
522
remove_workers(id, 1);
525
m_next_carrier_spawn = schedule_act(g, tdelta);
528
// Military stuff: Kill the soldiers that are dead
529
if (g->get_gametime() - m_next_military_act >= 0)
531
int ware = get_owner()->get_tribe()->get_safe_worker_index("soldier");
533
Worker_Descr* workerdescr;
536
workerdescr = get_owner()->get_tribe()->get_worker_descr(ware);
537
// Look if we got one in stock of those
538
std::string name=workerdescr->get_name();
539
std::vector<Object_Ptr>::iterator i;
540
for(i=m_incorporated_workers.begin(); i!=m_incorporated_workers.end(); i++)
542
if(static_cast<Worker*>(i->get(g))->get_name()==name)
544
soldier = static_cast<Soldier*>(i->get(g));
547
if (!soldier || (soldier->get_current_hitpoints() == 0))
549
m_incorporated_workers.erase(i);
550
m_supply->remove_workers(ware, 1);
553
// If warehouse can heal, this is the place to put it
556
m_next_military_act = schedule_act (g, 1000);
558
Building::act(g, data);
564
Warehouse::set_economy
566
Transfer our registration to the new economy.
569
void Warehouse::set_economy(Economy* e)
571
Economy* old = get_economy();
577
old->remove_warehouse(this);
579
m_supply->set_economy(e);
580
Building::set_economy(e);
582
for(uint i = 0; i < m_requests.size(); i++)
583
m_requests[i]->set_economy(e);
586
e->add_warehouse(this);
595
const WareList& Warehouse::get_wares() const
597
return m_supply->get_wares();
602
Warehouse::get_workers
605
const WareList& Warehouse::get_workers() const
607
return m_supply->get_workers();
614
Warehouse::create_wares
616
Magically create wares in this warehouse. Updates the economy accordingly.
619
void Warehouse::insert_wares(int id, int count)
621
assert(get_economy());
623
m_supply->add_wares(id, count);
629
Warehouse::destroy_wares
631
Magically destroy wares.
634
void Warehouse::remove_wares(int id, int count)
636
assert(get_economy());
638
m_supply->remove_wares(id, count);
643
Warehouse::create_workers
645
Magically create workers in this warehouse. Updates the economy accordingly.
648
void Warehouse::insert_workers(int id, int count)
650
assert(get_economy());
652
m_supply->add_workers(id, count);
658
Warehouse::destroy_workers
660
Magically destroy workers.
663
void Warehouse::remove_workers(int id, int count)
665
assert(get_economy());
667
m_supply->remove_workers(id, count);
673
Warehouse::fetch_from_flag
675
Launch a carrier to fetch an item from our flag.
678
bool Warehouse::fetch_from_flag(Game* g)
683
carrierid = get_owner()->get_tribe()->get_safe_worker_index("carrier");
685
if (!m_supply->stock_workers(carrierid)) // XXX yep, let's cheat
686
insert_workers(carrierid, 1);
688
worker = launch_worker(g, carrierid);
689
worker->start_task_fetchfromflag(g);
697
Warehouse::launch_worker
699
Start a worker of a given type. The worker will be assigned a job by the caller.
702
Worker* Warehouse::launch_worker(Game* g, int ware)
704
assert(m_supply->stock_workers(ware));
706
Worker_Descr* workerdescr;
709
workerdescr = get_owner()->get_tribe()->get_worker_descr(ware);
711
// Look if we got one in stock of those
712
std::string name=workerdescr->get_name();
713
std::vector<Object_Ptr>::iterator i;
714
for(i=m_incorporated_workers.begin();
715
i!=m_incorporated_workers.end(); i++)
716
if(static_cast<Worker*>(i->get(g))->get_name()==name) break;
718
if(i==m_incorporated_workers.end()) {
719
// None found, create a new one (if available)
720
worker = workerdescr->create(g, get_owner(), this, m_position);
722
// one found, make him available
723
worker = static_cast<Worker*>(i->get(g));
724
worker->reset_tasks(g); // Forget everything you did
725
worker->set_location( this ); // Back in a economy
726
m_incorporated_workers.erase(i);
729
m_supply->remove_workers(ware, 1);
738
Warehouse::launch_soldier
740
Start a soldier or certain level. The soldier will be assigned a job by the caller.
743
Soldier* Warehouse::launch_soldier(Game* g, int ware, Requeriments* r)
745
assert(m_supply->stock_workers(ware));
747
Worker_Descr* workerdescr;
750
workerdescr = get_owner()->get_tribe()->get_worker_descr(ware);
751
// Look if we got one in stock of those
752
std::string name=workerdescr->get_name();
753
std::vector<Object_Ptr>::iterator i;
754
for(i=m_incorporated_workers.begin(); i!=m_incorporated_workers.end(); i++)
756
if(static_cast<Worker*>(i->get(g))->get_name()==name)
758
soldier = static_cast<Soldier*>(i->get(g));
759
if ((!r) || (r->check ( soldier->get_level(atrHP),
760
soldier->get_level(atrAttack),
761
soldier->get_level(atrDefense),
762
soldier->get_level(atrEvade))
771
if(i==m_incorporated_workers.end())
773
// None found, create a new one (if available)
774
soldier = (Soldier*)workerdescr->create(g, get_owner(), this, m_position);
778
// one found, make him available
779
soldier = static_cast<Soldier*>(i->get(g));
780
soldier->reset_tasks(g); // Forget everything you did
781
soldier->mark(false);
782
soldier->set_location( this );
783
m_incorporated_workers.erase(i);
786
m_supply->remove_workers(ware, 1);
795
Warehouse::mark_as_used
797
Mark a soldier as used by a request.
800
void Warehouse::mark_as_used(Game* g, int ware, Requeriments* r)
802
assert(m_supply->stock_workers(ware));
804
Worker_Descr* workerdescr;
807
workerdescr = get_owner()->get_tribe()->get_worker_descr(ware);
808
// Look if we got one in stock of those
809
std::string name=workerdescr->get_name();
810
std::vector<Object_Ptr>::iterator i;
811
for(i=m_incorporated_workers.begin(); i!=m_incorporated_workers.end(); i++)
813
if(static_cast<Worker*>(i->get(g))->get_name()==name)
815
soldier = static_cast<Soldier*>(i->get(g));
816
if (!soldier->is_marked())
818
if ((!r) || (r->check ( soldier->get_level(atrHP),
819
soldier->get_level(atrAttack),
820
soldier->get_level(atrDefense),
821
soldier->get_level(atrEvade)))
831
if(i==m_incorporated_workers.end())
837
soldier = static_cast<Soldier*>(i->get(g));
845
Warehouse::incorporate_worker
847
This is the opposite of launch_worker: destroy the worker and add the
848
appropriate ware to our warelist
851
void Warehouse::incorporate_worker(Game* g, Worker* w)
853
assert(w->get_owner() == get_owner());
855
int index = get_owner()->get_tribe()->get_worker_index(w->get_name().c_str());
856
WareInstance* item = w->fetch_carried_item(g); // rescue an item
858
// We remove carrier, but we keep other workers around
859
if(w->get_worker_type()==Worker_Descr::CARRIER)
866
// This is to prevent having soldiers that only are used one time and become allways 'marked'
867
if (w->get_worker_type() == Worker_Descr::SOLDIER)
868
((Soldier*)w)->mark(false);
870
sort_worker_in(g, w->get_name(), w);
871
w->set_location(0); // No more in a economy
872
w->start_task_idle(g, 0, -1); // bind the worker into this house, hide him on the map
875
m_supply->add_workers(index, 1);
878
incorporate_item(g, item);
882
* Sort the worker into the right position in m_incorporated_workers
884
void Warehouse::sort_worker_in(Editor_Game_Base* g, std::string name, Worker* w) {
885
// We insert this worker, but to keep some consistency in ordering, we tell him
888
std::vector<Object_Ptr>::iterator i=m_incorporated_workers.begin();
890
while(i!= m_incorporated_workers.end() && name <= static_cast<Worker*>(i->get(g))->get_name()) ++i;
891
if(i==m_incorporated_workers.end()) {
892
m_incorporated_workers.insert(i, w);
896
while(i!=m_incorporated_workers.end() && w->get_serial() <= static_cast<Worker*>(i->get(g))->get_serial()) ++i;
898
m_incorporated_workers.insert(i, w);
903
Warehouse::launch_item
905
Create an instance of a ware and make sure it gets carried out of the warehouse.
908
WareInstance* Warehouse::launch_item(Game* g, int ware)
913
Item_Ware_Descr* descr=get_owner()->get_tribe()->get_ware_descr(ware);
915
item = new WareInstance(ware, descr);
918
m_supply->remove_wares(ware, 1);
920
do_launch_item(g, item);
928
Warehouse::do_launch_item
930
Get a carrier to actually move this item out of the warehouse.
933
void Warehouse::do_launch_item(Game* g, WareInstance* item)
936
Worker_Descr* workerdescr;
940
carrierid = get_owner()->get_tribe()->get_worker_index("carrier");
941
workerdescr = get_owner()->get_tribe()->get_worker_descr(carrierid);
943
worker = workerdescr->create(g, get_owner(), this, m_position);
945
// Yup, this is cheating.
946
if (m_supply->stock_workers(carrierid))
947
m_supply->remove_workers(carrierid, 1);
950
worker->start_task_dropoff(g, item);
956
Warehouse::incorporate_item
958
Swallow the item, adding it to out inventory.
961
void Warehouse::incorporate_item(Game* g, WareInstance* item)
963
int ware = item->get_ware();
967
m_supply->add_wares(ware, 1);
973
Warehouse::idle_request_cb [static]
975
Called when a transfer for one of the idle Requests completes.
978
void Warehouse::idle_request_cb(Game* g, Request* rq, int ware, Worker* w,
981
Warehouse* wh = (Warehouse*)data;
984
w->schedule_incorporate(g);
986
wh->m_supply->add_wares(ware, 1);
992
Warehouse_Descr::create_object
995
Building* Warehouse_Descr::create_object()
997
return new Warehouse(this);
1002
Warehouse::get_soldiers_passing
1005
int Warehouse::get_soldiers_passing (Game* g, int w, Requeriments* r)
1009
log ("Warehouse::get_soldiers_passing :");
1011
assert(m_supply->stock_workers(w));
1013
Worker_Descr* workerdescr;
1016
workerdescr = get_owner()->get_tribe()->get_worker_descr(w);
1017
// Look if we got one in stock of those
1018
std::string name=workerdescr->get_name();
1019
std::vector<Object_Ptr>::iterator i;
1021
for(i=m_incorporated_workers.begin(); i!=m_incorporated_workers.end(); i++)
1023
if(static_cast<Worker*>(i->get(g))->get_name()==name)
1025
soldier = static_cast<Soldier*>(i->get(g));
1027
// Its a marked soldier, we cann't supply it !
1028
if (!soldier->is_marked())
1032
if (r->check ( soldier->get_level(atrHP),
1033
soldier->get_level(atrAttack),
1034
soldier->get_level(atrDefense),
1035
soldier->get_level(atrEvade)))
1058
Warehouse::can_create_worker
1061
bool Warehouse::can_create_worker(Game *g, int worker)
1063
Worker_Descr *w_desc = 0;
1065
if (worker >= m_supply->get_workers().get_nrwareids()) {
1066
throw wexception ("Worker type %d doesn't exists! (max is %d)", worker,
1067
m_supply->get_workers().get_nrwareids());
1070
w_desc=get_owner()->get_tribe()->get_worker_descr(worker);
1076
const Worker_Descr::BuildCost* bc = w_desc->get_buildcost();
1078
// First watch if we can build it
1079
if (!w_desc->get_buildable())
1081
enought_wares = true;
1083
// Now see if we have the resources
1084
for(i = 0; i < bc->size(); i++)
1089
id_w = get_owner()->get_tribe()->get_ware_index((*bc)[i].name.c_str());
1091
if (m_supply->stock_wares(id_w) < (*bc)[i].amount)
1093
molog (" %s: Need more %s for creation\n", w_desc->get_name(), (*bc)[i].name.c_str());
1094
enought_wares = false;
1097
id_w = get_owner()->get_tribe()->get_safe_worker_index((*bc)[i].name.c_str());
1098
if (m_supply->stock_workers(id_w) < (*bc)[i].amount) {
1099
molog (" %s: Need more %s for creation\n", w_desc->get_name(), (*bc)[i].name.c_str());
1100
enought_wares = false;
1104
return enought_wares;
1107
throw wexception("Can not create worker of desired type : %d", worker);
1112
Warehouse::create_worker
1115
void Warehouse::create_worker(Game *g, int worker)
1117
Worker_Descr *w_desc = 0;
1119
if (!can_create_worker (g, worker))
1120
throw wexception ("Warehouse::create_worker WE CANN'T CREATE A %d WORKER", worker);
1122
w_desc=get_owner()->get_tribe()->get_worker_descr(worker);
1127
const Worker_Descr::BuildCost* bc = w_desc->get_buildcost();
1129
for(i = 0; i < bc->size(); i++) {
1131
id_w = get_owner()->get_tribe()->get_ware_index((*bc)[i].name.c_str());
1133
remove_wares(id_w , (*bc)[i].amount);
1135
id_w = get_owner()->get_tribe()->get_safe_worker_index((*bc)[i].name.c_str());
1136
remove_workers(id_w , (*bc)[i].amount);
1140
// This is needed to have a 0 level soldiers
1143
w = w_desc->create(g, get_owner(), this, m_position);
1145
incorporate_worker(g, w);
1147
molog (" We have created a(n) %s\n", w_desc->get_name ());
1151
throw wexception("Can not create worker of desired type : %d", worker);
1156
/// Down here, only military methods !! ;)
1158
bool Warehouse::has_soldiers()
1160
Worker_Descr* workerdescr;
1163
workerdescr = get_owner()->get_tribe()->get_worker_descr (
1164
get_owner()->get_tribe()->get_safe_worker_index ("soldier"));
1166
// Look if we got one in stock of soldiers
1167
std::string name=workerdescr->get_name();
1168
std::vector<Object_Ptr>::iterator i;
1169
for(i=m_incorporated_workers.begin(); i!=m_incorporated_workers.end(); i++)
1171
if(static_cast<Worker*>(i->get(get_owner()->get_game()))->get_name()==name)
1173
soldier = static_cast<Soldier*>(i->get(get_owner()->get_game()));
1177
return (i!=m_incorporated_workers.end());
1180
void Warehouse::defend (Game* g, Soldier* s)
1183
molog ("[Warehouse] We are under attack of %d!\n", s->get_serial());
1185
Worker_Descr* workerdescr;
1188
workerdescr = get_owner()->get_tribe()->get_worker_descr (
1189
get_owner()->get_tribe()->get_safe_worker_index ("soldier"));
1191
// Look if we got one in stock of soldiers
1192
std::string name=workerdescr->get_name();
1193
std::vector<Object_Ptr>::iterator i;
1194
for(i=m_incorporated_workers.begin(); i!=m_incorporated_workers.end(); i++)
1196
if(static_cast<Worker*>(i->get(g))->get_name()==name)
1198
soldier = static_cast<Soldier*>(i->get(g));
1203
if (i != m_incorporated_workers.end())
1205
// TODO: Here may be extra checks
1206
for(i = m_incorporated_workers.begin(); i != m_incorporated_workers.end(); i++)
1208
if(static_cast<Worker*>(i->get(g))->get_name() == name)
1210
soldier = static_cast<Soldier*>(i->get(g));
1211
if (soldier->is_marked ())
1214
soldier->mark(true);
1215
soldier->reset_tasks (g);
1216
soldier->set_location (this);
1217
soldier->start_task_defendbuilding (g, this, s);
1221
if (i == m_incorporated_workers.end())
1222
s->send_signal(g, "fail");
1226
// A warhouse couldn't be conquered, this building is destroyed ...
1227
void Warehouse::conquered_by (Player* pl)
1229
molog ("Warehouse::conquered_by- ");
1231
molog ("destroying\n");
1232
cleanup(pl->get_game());