00001
00002
00003 #ifndef __LANDSCAPE_H
00004 #define __LANDSCAPE_H
00005
00006
00007 #include <iostream>
00008 #include <cmath>
00009
00010
00011 #include "mt19937.hpp"
00012
00013
00014 #include "irrlicht.h"
00015 using namespace irr;
00016
00017
00018 #include "entities.h"
00019
00020
00021 class cWorld {
00022 public:
00023 cWorld( IrrlichtDevice* device, int level, int size, int energy, double scalarStart, double hScalar );
00024 ~cWorld();
00025
00026 void print();
00027 void create();
00028 void showStartScreen();
00029 scene::ISceneNode* getNode() { return mNode; }
00030 cSoul* getSoul() { return mSoul; }
00031 void CheckSelection();
00032
00033 scene::IAnimatedMesh* getTreeMesh()
00034 { return mTreeMesh; }
00035 scene::IAnimatedMesh* getBoulderMesh()
00036 { return mBoulderMesh; }
00037 scene::IAnimatedMesh* getRobotMesh()
00038 { return mRobotMesh; }
00039 core::stringw GetName()
00040 { return mName; }
00041
00042 scene::ISceneManager* getSceneManager()
00043 { return mSmgr; }
00044
00045 cEntityBase* cWorld::findEntity();
00046 bool createEntity( eEntity entityType, cEntityBase* entityBelow );
00047 int absorbEntity( cEntityBase* entityBelow );
00048 void hyperjump();
00049 void doTransferSoul( cEntityBase* robot );
00050 bool transferSoul( cEntityBase* entityBelow );
00051
00052 inline double getRandomNumber()
00053 { return rng->genrand_real1(); }
00054
00055
00056 static bool checkLandscapeCode( unsigned int level, unsigned int code );
00057
00058 private:
00059 void init();
00060 double gaussian( double x0, double sigma );
00061 double gaussian_4( double sigma, double a1, double a2, double a3, double a4 );
00062 double gaussian_3( double sigma, double a1, double a2, double a3 );
00063
00064 private:
00065
00066 scene::IAnimatedMesh* mTreeMesh;
00067 scene::IAnimatedMesh* mBoulderMesh;
00068 scene::IAnimatedMesh* mRobotMesh;
00069
00070 IrrlichtDevice* mDevice;
00071 video::IVideoDriver* mDriver;
00072 scene::ISceneManager* mSmgr;
00073 gui::IGUIEnvironment* mEnv;
00074 ILogger *mLogger;
00075
00076 unsigned int mLevel;
00077 int mSize;
00078 int mEnergy;
00079 double mScalarStart;
00080 double mHScalar;
00081 scene::ISceneNode* mNode;
00082 scene::ICameraSceneNode* mCamera;
00083 cSoul *mSoul;
00084 core::stringw mName;
00085
00086 double** mPoints;
00087 cElement*** mElements;
00088 mt19937* rng;
00089 };
00090
00091 #endif