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

simulator.h

00001 /***************************************************************************
00002                         simulator.h  -  description
00003                             -------------------
00004     begin                : dim sep 21 2003
00005     copyright            : (C) 2003-2006 by Duong-Khang NGUYEN
00006     email                : neoneurone @ users sourceforge net
00007     
00008     $Id: simulator.h 51 2006-09-27 22:15:47Z 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 #ifndef _OPENCITY_SIMULATOR_H_
00021 #define _OPENCITY_SIMULATOR_H_ 1
00022 
00023 #include "main.h"
00024 
00025 #include "persistence.h"
00026 
00027 // the maximum range of other structures
00028 #define OC_R_C_RANGE 4
00029 #define OC_R_I_RANGE 7
00030 #define OC_R_P_RANGE 3
00031 
00032 #define OC_C_R_RANGE 4
00033 #define OC_C_I_RANGE 8
00034 #define OC_C_P_RANGE 2
00035 
00036 #define OC_I_R_RANGE 7
00037 #define OC_I_C_RANGE 8
00038 #define OC_I_P_RANGE 4
00039 
00040 #define OC_E_E_RANGE   1    // for electricity simulation
00041 #define OC_E_RCI_RANGE 2
00042 
00043 #define OC_P_RCIP_RANGE 2   // for traffic simulation
00044 
00045 // simulators' defines.
00046 // bad values can block your system, don't change them !
00047 #define OC_SIMULATOR_UP   70            
00048 #define OC_SIMULATOR_DOWN 40            
00049 
00050 #define OC_EPLANT_COAL_POWER 100000     
00051 #define OC_EPLANT_COAL_RANGE 2          
00052 
00053 #define OC_DEPT_POWER_CONSUMPTION   50  
00054 
00055 
00056 enum OPENCITY_STRUCTURE_CODE;
00057 class BuildingLayer;
00058 class Map;
00059 class Structure;
00060 
00061 //========================================================================
00065 class Simulator : public Persistence {
00066 public:
00067     enum SIMULATOR_STATE {
00068         SIMULATOR_RUNNING,
00069         SIMULATOR_STOPED,
00070         SIMULATOR_RETURN
00071     };
00072 
00073     Simulator();        
00074     Simulator(
00075         SDL_mutex* mutex,
00076         BuildingLayer* pblayer,
00077         Map* pmap );
00078     virtual ~Simulator();
00079 
00080 
00081 //========================================================================
00085     void
00086     SaveTo( std::fstream& rfs );
00087 
00088 
00089 //========================================================================
00093     void
00094     LoadFrom( std::fstream& rfs );
00095 
00096 
00097     virtual int
00098     Main() = 0;
00099 
00100 
00101     virtual void
00102     AddStructure(
00103         const uint & w1,
00104         const uint & h1,
00105         const uint & w2,
00106         const uint & h2 ) {};
00107 
00108     virtual void
00109     RemoveStructure(
00110         const uint & w1,
00111         const uint & h1,
00112         const uint & w2,
00113         const uint & h2 ) {};
00114 
00115 
00116     void
00117     Run();
00118 
00119     void
00120     Stop();
00121 
00122     void
00123     Return();
00124 
00125 
00126 //========================================================================
00131     const bool
00132     CheckRange(
00133         const uint & w,
00134         const uint & l,
00135         const uint & range,
00136         const OPENCITY_STRUCTURE_CODE & enumStructCode ) const;
00137 
00138 
00139 //========================================================================
00143     const bool
00144     CheckLevelUp(
00145         const uint w,
00146         const uint l,
00147         const Structure* pStruct ) const;
00148 
00149 
00150 //========================================================================
00154     const bool
00155     CheckLevelDown(
00156         const uint w,
00157         const uint l,
00158         const Structure* pStruct ) const;
00159 
00160 
00161 //========================================================================
00162 /* not used
00163 Given the surface (w, l, w2, l2) this method checks if it contains
00164     only the specified structure or nothing.
00165 \sa Layer::ContainStructureOnly()
00166 \sa BuildingLayer::ContainStructureOnly();
00167 
00168     const bool
00169     ContainStructureOnly(
00170         const uint & w,
00171         const uint & l,
00172         const uint & w2,
00173         const uint & l2,
00174         const OPENCITY_STRUCTURE_CODE & enumStructCode ) const;
00175 */
00176 
00177     const int &
00178     GetVariation() const;
00179 
00180 
00181 //========================================================================
00184     const int
00185     GetValue() const;
00186 
00187     
00188     void
00189     SetVariation(
00190         const int rcVariation );
00191 
00192         
00193     void
00194     SetValue(
00195         const int rcValue );
00196 
00197 
00198    /*=====================================================================*/
00199    /*                        STATIC      METHODS                          */
00200    /*=====================================================================*/
00201     static int
00202     ThreadWrapper(
00203         void* pSim );
00204 
00205         
00206 //========================================================================
00211     static void
00212     RCIDelay( void );
00213 
00214 
00215 protected:
00216     int _iVariation;    
00217     int _iValue;        
00218 
00219     SIMULATOR_STATE     enumSimState;           
00220     SDL_mutex*          mutexMain;              
00221     BuildingLayer*      pbuildlayer;
00222     Map*                pmapOfCity;
00223 };
00224 
00225 #endif
00226 
00227 
00228 
00229 
00230 
00231 
00232 
00233 
00234 
00235 
00236 
00237 
00238 
00239 
00240 
00241 
00242 
00243 
00244 
00245 
00246 
00247 
00248 
00249 
00250 
00251 
00252 
00253 
00254 
00255 
00256 
00257 
00258 
00259 
00260 

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