File: autotraining.cpp

package info (click to toggle)
asc 2.4.0.0-1
  • links: PTS, VCS
  • area: main
  • in suites: squeeze
  • size: 75,080 kB
  • ctags: 24,943
  • sloc: cpp: 155,023; sh: 8,829; ansic: 6,890; makefile: 650; perl: 138
file content (70 lines) | stat: -rw-r--r-- 2,853 bytes parent folder | download | duplicates (7)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
/***************************************************************************
                          autotraining.cpp  -  description
                             -------------------
    copyright            : (C) 2009 by Martin Bickel
    email                : bickel@asc-hq.org
 ***************************************************************************/

/*! \file autotraining.cpp
    \brief Trains units in training centers automatically at each turn's end
 */

/***************************************************************************
 *                                                                         *
 *   This program is free software; you can redistribute it and/or modify  *
 *   it under the terms of the GNU General Public License as published by  *
 *   the Free Software Foundation; either version 2 of the License, or     *
 *   (at your option) any later version.                                   *
 *                                                                         *
 ***************************************************************************/


#include "player.h"
#include "gamemap.h"

#include "actions/trainunitcommand.h"
#include "actions/servicecommand.h"

static void autoTrainer( ContainerBase* container )
{
   for ( ContainerBase::Cargo::const_iterator i = container->getCargo().begin(); i != container->getCargo().end(); ++i ) {
      if ( TrainUnitCommand::avail( container, *i )) {
         Context context;
         context.gamemap = container->getMap();
         context.actingPlayer = & (container->getMap()->getPlayer( container ));
         context.parentAction = NULL;
         context.display = NULL;
         context.viewingPlayer = container->getOwner(); 
         context.actionContainer = &container->getMap()->actions;
                  
         auto_ptr<TrainUnitCommand> tuc ( new TrainUnitCommand( container ));
         tuc->setUnit( *i );
         ActionResult res = tuc->execute( context );
                  
         if ( res.successful())
            tuc.release();
                  
                  
         if ( ServiceCommand::avail( container, *i )) {
            auto_ptr<ServiceCommand> sc ( new ServiceCommand( container ));
            sc->setDestination( *i );
            TransferHandler& tc = sc->getTransferHandler();
            tc.fillDestAmmo();
            sc->saveTransfers();
            res = sc->execute( context );
            if ( res.successful())
               sc.release();
         }
      }
   }
}

void automaticTrainig( GameMap* gamemap, Player& player )
{
   for ( Player::BuildingList::iterator b = player.buildingList.begin(); b != player.buildingList.end(); ++b ) 
      autoTrainer( *b );
      
   for ( Player::VehicleList::iterator v= player.vehicleList.begin(); v != player.vehicleList.end(); ++v ) 
      autoTrainer( *v );
   
}