Main Page | Class Hierarchy | Class List | Directories | File List | Class Members | Related Pages

structure.cpp

00001 /***************************************************************************
00002                         structure.cpp  -  description
00003                             -------------------
00004     begin                : june 16th, 2003
00005     copyright            : (C) 2003-2006 by Duong-Khang NGUYEN
00006     email                : neoneurone @ users sourceforge net
00007     
00008     $Id: structure.cpp 63 2006-10-17 20:45:12Z neoneurone $
00009  ***************************************************************************/
00010 
00011 /***************************************************************************
00012  *                                                                         *
00013  *   This program is free software; you can redistribute it and/or modify  *
00014  *   it under the terms of the GNU General Public License as published by  *
00015  *   the Free Software Foundation; either version 2 of the License, or     *
00016  *   any later version.                                                    *
00017  *                                                                         *
00018  ***************************************************************************/
00019 
00020 #include "structure.h"
00021 
00022 #include "globalvar.h"
00023 extern GlobalVar gVars;
00024 
00025 
00026 uint Structure::uiNumberStructure = 0;      
00027 
00028 
00029    /*======================================================================*/
00030 const uint &
00031 Structure::GetNumber()
00032 {
00033     return Structure::uiNumberStructure;
00034 }
00035 
00036 
00037    /*======================================================================*/
00038 void
00039 Structure::SetNumber( const uint & rcuiNb )
00040 {
00041     Structure::uiNumberStructure = rcuiNb;
00042 }
00043 
00044 
00045    /*======================================================================*/
00046 Structure::Structure():
00047 _eGC( OC_EMPTY ),
00048 _eSC( OC_STRUCTURE_UNDEFINED ),
00049 _eType( OC_TYPE_UNUSED ),
00050 _uiStatus( 0 ),
00051 _uiLevel( OC_STRUCTURE_LEVEL_START ),
00052 _pstructureMain( NULL )
00053 {
00054     OPENCITY_DEBUG( "ctor 0" );
00055     uiNumberStructure++;
00056 }
00057 
00058 
00059    /*======================================================================*/
00060 Structure::Structure
00061 (
00062     const OPENCITY_STRUCTURE_CODE enumStructCode
00063 ):
00064 _eGC( OC_EMPTY ),
00065 _eSC( enumStructCode ),
00066 _uiStatus( 0 ),
00067 _uiLevel( OC_STRUCTURE_LEVEL_START ),
00068 _pstructureMain( NULL )
00069 {
00070     OPENCITY_DEBUG( "ctor 1" );
00071 
00072     _eType = gVars.gpPropertyMgr->GetST( enumStructCode );
00073     uiNumberStructure++;
00074 }
00075 
00076 
00077    /*======================================================================*/
00078 Structure::Structure
00079 (
00080     const OPENCITY_STRUCTURE_CODE enumStructCode,
00081     Structure* pMain
00082 ):
00083 _eGC( OC_EMPTY ),
00084 _eSC( enumStructCode ),
00085 _uiStatus( 0 ),
00086 _uiLevel( OC_STRUCTURE_LEVEL_START ),
00087 _pstructureMain( pMain )
00088 {
00089     OPENCITY_DEBUG( "ctor 2" );
00090 
00091     _eType = gVars.gpPropertyMgr->GetST( enumStructCode );
00092     uiNumberStructure++;
00093 }
00094 
00095 
00096    /*======================================================================*/
00097  Structure::~Structure(  )
00098 {
00099     OPENCITY_DEBUG( "Structure dtor" );
00100 
00101     uiNumberStructure--;
00102 }
00103 
00104 
00105    /*=====================================================================*/
00106 void
00107 Structure::SaveTo( std::fstream& rfs )
00108 {
00109     OPENCITY_DEBUG( __PRETTY_FUNCTION__ << "saving" );
00110 
00111     rfs << _eGC << std::ends;
00112     rfs << _eSC << std::ends;
00113     rfs << _eType << std::ends;
00114     rfs << _uiStatus << std::ends;
00115     rfs << _uiLevel << std::ends;
00116 }
00117 
00118 
00119    /*=====================================================================*/
00120 void
00121 Structure::LoadFrom( std::fstream& rfs )
00122 {
00123     OPENCITY_DEBUG( __PRETTY_FUNCTION__ << "loading" );
00124     uint t = 0;
00125 
00126     rfs >> t; rfs.ignore(); _eGC = (OPENCITY_GRAPHIC_CODE)t;
00127     rfs >> t; rfs.ignore(); _eSC = (OPENCITY_STRUCTURE_CODE)t;
00128     rfs >> t; rfs.ignore(); _eType= (OPENCITY_STRUCTURE_TYPE)t;
00129     rfs >> _uiStatus; rfs.ignore();
00130     rfs >> _uiLevel; rfs.ignore();
00131 }
00132 
00133 
00134    /*======================================================================*/
00135 void
00136 Structure::Set(
00137     const uint wegBit )
00138 {
00139     _uiStatus |= wegBit;
00140 }
00141 
00142 
00143    /*======================================================================*/
00144 void
00145 Structure::Unset(
00146     const uint wegBit )
00147 {
00148     _uiStatus &= ~wegBit;
00149 }
00150 
00151 
00152    /*======================================================================*/
00153 const bool
00154 Structure::IsSet(
00155     const uint wegBit ) const
00156 {
00157     if ((_uiStatus & wegBit) == wegBit)
00158         return true;
00159     else
00160         return false;
00161 }
00162 
00163 
00164    /*======================================================================*/
00165 const OPENCITY_GRAPHIC_CODE
00166 Structure::GetGraphicCode() const
00167 {
00168     return _eGC;
00169 }
00170 
00171 
00172    /*======================================================================*/
00173 const OPENCITY_GRAPHIC_CODE
00174 Structure::GetBaseGraphicCode() const
00175 {
00176     OPENCITY_GRAPHIC_CODE tempGC;
00177 
00178     switch (_eSC) {
00179         case OC_STRUCTURE_RES:
00180             tempGC = OC_RES_ZONE0;
00181             break;
00182 
00183         case OC_STRUCTURE_COM:
00184             tempGC = OC_COM_ZONE0;
00185             break;
00186 
00187         case OC_STRUCTURE_IND:
00188             tempGC = OC_IND_ZONE0;
00189             break;
00190 
00191         default:
00192             OPENCITY_DEBUG("Not implemented yet");
00193             assert(0);
00194             break;
00195     }
00196 
00197     return tempGC;
00198 }
00199 
00200 
00201    /*======================================================================*/
00202 const OPENCITY_GRAPHIC_CODE
00203 Structure::GetNextLevelGraphicCode() const
00204 {
00205 //  OPENCITY_DEBUG("WARNING: Inside Structure");
00206 // WARNING: we don't have such information in a general structure
00207     return _eGC;
00208 }
00209 
00210 
00211    /*======================================================================*/
00212 const OPENCITY_GRAPHIC_CODE
00213 Structure::GetPreviousLevelGraphicCode() const
00214 {
00215 // WARNING: we don't have such information in a general structure
00216     return _eGC;
00217 }
00218 
00219 
00220    /*======================================================================*/
00221 const OPENCITY_STRUCTURE_CODE
00222 Structure::GetCode() const
00223 {
00224     return _eSC;
00225 }
00226 
00227 
00228    /*======================================================================*/
00229 Structure*
00230 Structure::GetMain() const
00231 {
00232     return _pstructureMain;
00233 }
00234 
00235 
00236    /*======================================================================*/
00237 void
00238 Structure::SetMain( Structure* const pstruct )
00239 {
00240     _pstructureMain = pstruct;
00241 }
00242 
00243 
00244    /*======================================================================*/
00245 const bool
00246 Structure::LevelUp(  )
00247 {
00248 //  OPENCITY_DEBUG("WARNING: Inside Structure");
00249     if (_uiLevel < OC_STRUCTURE_LEVEL_MAX) {
00250         _uiLevel++;
00251         return true;
00252     }
00253 
00254     return false;
00255 }
00256 
00257 
00258    /*======================================================================*/
00259 const bool
00260 Structure::LevelDown(  )
00261 {
00262     if (_uiLevel > OC_STRUCTURE_LEVEL_MIN) {
00263         _uiLevel--;
00264         return true;
00265     }
00266 
00267     return false;
00268 }
00269 
00270 
00271    /*======================================================================*/
00272 const uint
00273 Structure::GetLevel() const
00274 {
00275     return _uiLevel;
00276 }
00277 
00278 
00279    /*======================================================================*/
00280 void
00281 Structure::SetLevel(
00282     const uint uiLevel )
00283 {
00284     _uiLevel = uiLevel;
00285 }
00286 
00287 
00288    /*======================================================================*/
00289 const OPENCITY_STRUCTURE_TYPE
00290 Structure::GetType() const
00291 {
00292     return _eType;
00293 }
00294 
00295 
00296 
00297 
00298 
00299 
00300 
00301 
00302 
00303 
00304 
00305 
00306 
00307 
00308 
00309 
00310 
00311 
00312 
00313 
00314 
00315 
00316 
00317 
00318 
00319 
00320 

Generated on Sat Nov 11 10:21:10 2006 for OpenCity by  doxygen 1.4.2