mapedcommands.cpp

Go to the documentation of this file.
00001 
00002 
00003 #include <iostream>
00004 
00005 #include "../ascstring.h"
00006 #include "../vehicle.h"
00007 #include "../gamemap.h"
00008 #include "../spfst.h"
00009 #include "../spfst-legacy.h"
00010                
00011 #include "../itemrepository.h"
00012 #include "../dlg_box.h"
00013 #include "mapedcommands.h"
00014 #include "../ed_mapcomponent.h"
00015 #include "../dialogs/fieldmarker.h"
00016 #include "../edglobal.h"
00017          
00018          
00019          
00020          
00021 void clearField( GameMap* map, const MapCoordinate& pos )
00022 {
00023    MapField* fld = map->getField(pos);
00024    if ( fld ) {
00025       if ( fld->building )
00026          delete fld->building;
00027       
00028       if ( fld->vehicle )
00029          delete fld->vehicle;
00030       
00031       while ( !fld->objects.empty() )
00032          fld->removeObject( fld->objects[0].typ );
00033                
00034    }  
00035 }
00036          
00037 Object* placeObject( GameMap* map, const MapCoordinate& pos, const ObjectType* obj, bool force )
00038 {
00039    MapField* fld = map->getField( pos );
00040    if ( fld ) {
00041       if ( !fld->addobject( obj, -1, force ))
00042          return NULL;
00043       else
00044          return fld->checkForObject(obj);
00045    } else
00046       return NULL;
00047 }
00048 
00049 Building* placeBuilding( GameMap* map, const MapCoordinate& pos, const BuildingType* bld, int owner )
00050 {
00051    if ( map && bld && owner >= 0 && owner <= 8 ) {
00052       MapField* fld = map->getField(pos);
00053       if ( fld ) {
00054          putbuilding( map, pos, owner*8, bld, bld->construction_steps );
00055          if ( fld->building->typ == bld )
00056             return fld->building;
00057       }
00058    }
00059    return NULL;
00060 }
00061 
00062 
00063 Vehicle* placeUnit( GameMap* map, const MapCoordinate& pos, const VehicleType* veh, int owner )
00064 {
00065    if ( map && veh && owner >= 0 && owner < 8 ) {
00066       MapField* fld = map->getField(pos);
00067       if ( fld ) {
00068          int r = VehicleItem::place( map, pos, veh, owner );
00069          if ( r < 0 )
00070             return NULL;
00071          else
00072             return fld->vehicle;
00073       }
00074    }
00075    return NULL;
00076 }
00077 
00078 
00079 bool placeTerrain( GameMap* map, const MapCoordinate& pos, const TerrainType* terrain, int weather )
00080 {
00081    if ( map && terrain ) {
00082       MapField* fld = map->getField(pos);
00083       fld->typ = terrain->weather[0]; 
00084       fld->setWeather( weather );
00085       fld->setparams( );
00086       for ( int d = 0; d < 6; ++d ) {
00087          MapCoordinate pos2 = getNeighbouringFieldCoordinate( pos, d );
00088          MapField* fld = map->getField( pos2 );
00089          if ( fld ) 
00090             for ( MapField::ObjectContainer::iterator i = fld->objects.begin(); i != fld->objects.end(); ++i )
00091                calculateobject( pos2, false, i->typ, map );
00092       }
00093       return true;
00094    } else
00095       return false;
00096 }
00097 
00098 int selectPlayer( GameMap* map )
00099 {
00100    vector<ASCString> buttons;
00101    buttons.push_back ( "~O~k" );
00102    buttons.push_back ( "~C~ancel" );
00103 
00104    vector<ASCString> player;
00105    for ( int i = 0; i < 8; ++i )
00106       player.push_back ( ASCString ( strrr(i)) + " " + map->player[i].getName());
00107 
00108    pair<int,int> playerRes = chooseString ( "Choose Player", player, buttons );
00109    if ( playerRes.first == 0 && playerRes.second >= 0) 
00110       return playerRes.second;
00111    else
00112       return -1;
00113 }
00114 
00115 FieldVector::FieldVector() 
00116 {
00117 }
00118       
00119 unsigned int FieldVector::size() {
00120   return vector<MapCoordinate>::size();
00121 }
00122 
00123 MapCoordinate FieldVector::getItem( int i ) {
00124    return at(i-1);  
00125 }
00126 
00127 
00128 
00129 class LuaFieldSearcher : public SearchFields {
00130    public:
00131       FieldVector fields;
00132       
00133       LuaFieldSearcher ( GameMap* _gamemap ) : SearchFields ( _gamemap ) {
00134            
00135       };
00136        
00137    protected:
00138       void testfield ( const MapCoordinate& pos ) {
00139          fields.push_back(pos); 
00140       };
00141       
00142 };
00143       
00144       
00145 FieldVector getFieldsInDistance( GameMap* map, const MapCoordinate& position, int distance )
00146 {
00147    LuaFieldSearcher lfs ( map );
00148    lfs.initsearch( position, distance, distance );
00149    lfs.startsearch();
00150    return lfs.fields;
00151 }
00152 
00153 MapCoordinate selectPosition()
00154 {
00155    SelectFromMap::CoordinateList list;
00156    SelectFromMap sfm( list, actmap, true );
00157    sfm.Show();
00158    sfm.RunModal();
00159    if ( list.size () )
00160       return *list.begin();
00161    else
00162       return MapCoordinate(-1,-1);
00163          
00164 }
00165 
00166 Resources putResources( ContainerBase* container, const Resources& resources )
00167 {
00168    return container->putResource( resources, false, 0, container->getOwner() );
00169 }
00170 
00171 void setReactionFire( Vehicle* vehicle, bool state )
00172 {
00173    if ( state )
00174       vehicle->reactionfire.enable();
00175    else
00176       vehicle->reactionfire.disable();
00177 }
00178 
00179 int EditingEnvironment :: getSelectedPlayerPosition() const
00180 {
00181    return selection.getPlayer();
00182 }
00183 
00184 int EditingEnvironment :: getBrushSize() const
00185 {
00186    return selection.brushSize;
00187 }
00188 
00189 
00190 EditingEnvironment getEditingEnvironment() 
00191 {
00192    return EditingEnvironment();
00193 }

Generated on Mon May 21 01:26:35 2012 for Advanced Strategic Command by  doxygen 1.5.1