/** ******************************************************************************* @file /gui/model/TerrainEntity.h @brief Predek/reprezentace tereniho prvku(strom, kamen, ..) @author Vajicek+Pavel @version 0.1 ******************************************************************************/ #ifndef TERRAINENTITY_H #define TERRAINENTITY_H #include "gui/common/mymath.h" // #include "gui/engine/Scene.h" #include "gui/engine/Effects.h" // #include "gui/model/ModelRep.h" #include "gui/model/hexy.h" // #include "gui/common/Defs.h" // #include "common/rm/rminit.h" // #include namespace gui{ #define POSITIONING_LAY_ON_SURFACE 1 #define POSITIONING_STAND_STRAIGHT 2 #define POSITIONING_ALIGN_TO_CENTER 4 #define POSITIONING_ALIGN_TO_MINIMUM 8 //FWD class TTerrainEntity; /** Model tereniho objektu. */ class TSceneTerreainObject: public TModelSceneObject, public TSimpleShadow{ public: TTerrainEntity* terrain; ///< Teren do ktereho objekt patri. int iPositioning; ///< Jakym zpusobem se ma usadit na povrch terenu float fScale; ///< Zvetseni napr pro stromy. float fRotation; ///< Otoceni. /** Vykresli objekt se stinem. @see TModelSceneObject */ virtual void drawObject(); /** Vykresli objekt se stinem. @see TModelSceneObject */ TSceneTerreainObject(TModel *mid, TTerrainEntity* t, int positioning); }; /** Struktura pro reprezentaci tridy objektu na terenu. */ struct TGUITerrainObjectInfo{ TModel* mod; ///< model objektu float pvd; ///< kumulovana pvd vyskytu int positioning; ///< pozice }; /** Popis terenu. Soubor trid, ktere se na danem terenu vyskytuji. */ struct TGUITerrainEntityInfo{ TGUITerrainObjectInfo* tobjs; int tobjs_c; ///< pocet tpyu objektu ktery se muzou vyskytnout int terrobj_count; ///< pocet objektu na jednom hexu terenu }; #define PLACE_ITERATIONS 10 /** Proxyobjekt terenu. */ class TTerrainEntity : public TProxyObject { public: /// tereni objekty Tsceneobjs objs; /** Umisti teren do sceny. */ TTerrainEntity(TguiMap* m); /** Zrus modely. */ ~TTerrainEntity(); /** Nahodne vybere tridu objektu. */ int chooseRandom(TGUITerrainObjectInfo* tobjs, int tobjs_c); /** Krome standartniho pridani, to jeste upravi pozici vsech objektu. */ virtual int addToHex(int newindex); /** Nastavi oslabeni objektu. */ virtual void setFade(int newfade); /** Umisti objekt ve scene na nejlepsi volne misto. */ virtual void placeToHex(TSceneTerreainObject *obj, int newindex); /** Najde volnou polohu pro objekt */ virtual int findClosestFreePosition(TSceneObject* scene_obj, P3F* orig_pos, P3F* free_pos); /** Ladici vypis. */ virtual void dump2D(FILE* f); //@{ /** Inicializuje databazi sablon popisujicich tereny. */ static void initTerrains(); /** Rusi sablony pro tereny. */ static void freeTerrains(); //@} }; /** Les. */ class TTerrainForest : public TTerrainEntity { public: TTerrainForest(TguiMap* m, int hx, int hy); // static TGUITerrainEntityInfo terrain_info; static void initForest(rm::TRM_model_i* mrm); }; /** Hvozd. */ class TTerrainDeepForest : public TTerrainEntity { public: TTerrainDeepForest(TguiMap* m, int hx, int hy); // static TGUITerrainEntityInfo terrain_info; static void initDeepForest(rm::TRM_model_i* mrm); }; /** Skaly. */ class TTerrainRocks : public TTerrainEntity { public: TTerrainRocks(TguiMap* m, int hx, int hy); // static TGUITerrainEntityInfo terrain_info; static void initRocks(rm::TRM_model_i* mrm); }; /** Bazina. */ class TTerrainSwamp : public TTerrainEntity { public: TTerrainSwamp(TguiMap* m, int hx, int hy); // static TGUITerrainEntityInfo terrain_info; static void initSwamp(rm::TRM_model_i* mrm); }; /** Model mestskych objektu. */ class TTownObject: public TSceneTerreainObject { public: virtual void drawObject(); TTownObject(TModel *mid, TTerrainEntity* t, int positioning); }; /** Mesto. */ class TTerrainTown : public TTerrainEntity { public: int iOwner; ///< Hrac vlastnici mesto. // TTerrainTown(TguiMap* m, int hx, int hy); // static TGUITerrainEntityInfo terrain_info; static void initTown(rm::TRM_model_i* mrm); }; }//namespace #endif /*****************************************************************************/