2
* Copyright (C) 2004, 2006-2009 by the Widelands Development Team
2
* Copyright (C) 2004, 2006-2010 by the Widelands Development Team
4
4
* This program is free software; you can redistribute it and/or
5
5
* modify it under the terms of the GNU General Public License
65
(SlotVector::iterator iter = m_carrier_slots.begin();
66
iter < m_carrier_slots.end(); ++iter)
68
delete iter->carrier_request;
64
container_iterate_const(SlotVector, m_carrier_slots, i)
65
delete i.current->carrier_request;
208
204
FCoords curf(m_path.get_start(), &map[m_path.get_start()]);
210
206
const Path::Step_Vector::size_type nr_steps = m_path.get_nsteps();
211
for (Path::Step_Vector::size_type steps = 0; steps < nr_steps + 1; ++steps) {
207
for (Path::Step_Vector::size_type steps = 0; steps < nr_steps + 1; ++steps)
212
209
if (steps > 0 && steps < m_path.get_nsteps())
213
210
unset_position(egbase, curf);
307
304
Game & game = ref_cast<Game, Editor_Game_Base>(egbase);
310
(SlotVector::iterator iter = m_carrier_slots.begin();
311
iter < m_carrier_slots.end(); ++iter)
313
delete iter->carrier_request;
314
iter->carrier_request = 0;
306
container_iterate(SlotVector, m_carrier_slots, i) {
307
delete i.current->carrier_request;
308
i.current->carrier_request = 0;
316
310
// carrier will be released via PlayerImmovable::cleanup
311
i.current->carrier = 0;
341
335
PlayerImmovable::set_economy(e);
344
(SlotVector::iterator iter = m_carrier_slots.begin();
345
iter < m_carrier_slots.end(); ++iter)
347
if (iter->carrier_request)
348
iter->carrier_request->set_economy(e);
337
container_iterate_const(SlotVector, m_carrier_slots, i)
338
if (i.current->carrier_request)
339
i.current->carrier_request->set_economy(e);
355
345
* Only call this if the road can handle a new carrier, and if no request has
358
void Road::_request_carrier
360
(Game & game, CarrierSlot & slot)
362
(Game &, CarrierSlot & slot)
348
void Road::_request_carrier(Game &, CarrierSlot & slot)
366
351
if (slot.carrier_type == 1 or owner().tribe().name() == "atlanteans") {
367
352
slot.carrier_request =
370
owner().tribe().safe_worker_index("carrier"),
371
Road::_request_carrier_callback,
355
owner().tribe().safe_worker_index("carrier"),
356
Road::_request_carrier_callback,
374
359
std::string donkey_name =
375
360
owner().tribe().name() == "empire" ? "donkey" : "wisent";
398
383
Road & road = ref_cast<Road, PlayerImmovable>(target);
399
384
Carrier & carrier = ref_cast<Carrier, Worker> (*w);
402
(SlotVector::iterator iter = road.m_carrier_slots.begin();
403
iter < road.m_carrier_slots.end(); ++ iter)
405
if (iter->carrier_request == &rq) {
406
iter->carrier_request = 0;
407
iter->carrier = &carrier;
386
container_iterate(SlotVector, road.m_carrier_slots, i)
387
if (i.current->carrier_request == &rq) {
388
i.current->carrier_request = 0;
389
i.current->carrier = &carrier;
409
391
carrier.start_task_road(game);
416
397
carrier.start_task_gowarehouse(game);
424
405
Game & game = ref_cast<Game, Editor_Game_Base>(owner().egbase());
427
(SlotVector::iterator iter = m_carrier_slots.begin();
428
iter < m_carrier_slots.end(); ++iter)
431
Carrier * carrier = iter->carrier.get(game);
434
iter->carrier = carrier = 0;
436
if (not carrier and not iter->carrier_request)
437
_request_carrier(game, *iter);
407
container_iterate(SlotVector, m_carrier_slots, i) {
408
Carrier const * carrier = i.current->carrier.get(game);
411
i.current->carrier = 0;
415
if (not carrier and not i.current->carrier_request)
416
_request_carrier(game, *i.current);
440
419
PlayerImmovable::remove_worker(w);
511
490
//SlotVector carrierslots = m_carrier_slots;
512
491
std::vector<Worker *> const workers = get_workers();
515
(SlotVector::iterator iter = m_carrier_slots.begin();
516
iter < m_carrier_slots.end(); ++iter)
518
delete iter->carrier_request;
519
iter->carrier_request = 0;
493
container_iterate(SlotVector, m_carrier_slots, i) {
494
delete i.current->carrier_request;
495
i.current->carrier_request = 0;
552
525
* The current worker is not on this road. Search him
553
526
* in this road and remove him. Than add him to the new road
556
(SlotVector::iterator iter = m_carrier_slots.begin();
557
iter < m_carrier_slots.end(); ++iter)
559
Carrier * carrier = iter->carrier.get(game);
528
container_iterate(SlotVector, m_carrier_slots, j) {
529
Carrier const * const carrier = j.current->carrier.get(game);
561
531
if (carrier == &w) {
564
(SlotVector::iterator iter2 =
565
newroad.m_carrier_slots.begin();
566
iter2 < newroad.m_carrier_slots.end();
532
j.current->carrier = 0;
533
container_iterate(SlotVector, newroad.m_carrier_slots, k)
570
(not iter2->carrier.get(game) and
571
not iter2->carrier_request)
535
(not k.current->carrier.get(game) and
536
not k.current->carrier_request)
574
&ref_cast<Carrier, Worker> (w);
538
k.current->carrier = &ref_cast<Carrier, Worker> (w);
582
if (w.serial() == 3755) {
584
("Split: sending signal 'road' to worker %u (at (%i, %i)):\n",
585
w.serial(), w.get_position().x, w.get_position().y);
586
w.log_general_info(game);
588
545
// Cause a worker update in any case
589
546
w.send_signal(game, "road");