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 }