#pragma once using namespace std; #include "LevelSource.h" #include "Mob.h" #include "WeighedRandom.h" class Feature; class MobCategory; class BiomeDecorator; class TreeFeature; class BasicTree; class BirchFeature; class SwampTreeFeature; class ChunkRebuildData; class Biome { friend class ChunkRebuildData; public: static Biome* ocean; static Biome* plains; static Biome* desert; static Biome* extremeHills; static Biome* forest; static Biome* birchForest; static Biome* rainForest; static Biome* taiga; static Biome* taigaSnowed; static Biome* swampland; static Biome* river; static Biome* hell; static Biome* sky; static Biome* frozenOcean; static Biome* frozenRiver; static Biome* iceFlats; static Biome* iceMountains; static Biome* mushroomIsland; static Biome* mushroomIslandShore; static Biome* beaches; static Biome* desertHills; static Biome* forestHills; static Biome* taigaHills; static Biome* smallerExtremeHills; static Biome* jungle; static Biome* jungleHills; static void staticCtor(); static std::vector biomes; // Геттер для доступа по ID static Biome* getBiome(int id); // Сеттер (регистрация) — вызывается автоматически в конструкторе static void registerBiome(int id, Biome* biome); // Получить текущее количество зарегистрированных биомов static int getBiomeCount(); // Опционально: получить ссылку на весь вектор (для итерации) static const std::vector& getAllBiomes() { return biomes; } static const int BIOME_COUNT = 26; public: wstring m_name; int color; byte topMaterial; byte material; int leafColor; float depth; float scale; float temperature; float downfall; //int waterColor; // 4J Stu removed BiomeDecorator *decorator; const int id; class MobSpawnerData : public WeighedRandomItem { public: eINSTANCEOF mobClass; int minCount; int maxCount; MobSpawnerData(eINSTANCEOF mobClass, int probabilityWeight, int minCount, int maxCount) : WeighedRandomItem(probabilityWeight) { this->mobClass = mobClass; this->minCount = minCount; this->maxCount = maxCount; } }; protected: vector enemies; vector friendlies; vector waterFriendlies; vector friendlies_chicken; vector friendlies_wolf; vector friendlies_mushroomcow; vector ambientFriendlies; Biome(int id); ~Biome(); BiomeDecorator *createDecorator(); private: Biome *setTemperatureAndDownfall(float temp, float downfall); Biome *setDepthAndScale(float depth, float scale); bool snowCovered; bool _hasRain; // 4J Added eMinecraftColour m_grassColor; eMinecraftColour m_foliageColor; eMinecraftColour m_waterColor; eMinecraftColour m_skyColor; Biome *setNoRain(); protected: /* removing these so that we can consistently return newly created trees via getTreeFeature, and let the calling function be resposible for deleting the returned tree TreeFeature *normalTree; BasicTree *fancyTree; BirchFeature *birchTree; SwampTreeFeature *swampTree; */ public: virtual Feature *getTreeFeature(Random *random); virtual Feature *getGrassFeature(Random *random); protected: Biome *setSnowCovered(); Biome *setName(const wstring &name); Biome *setLeafColor(int leafColor); Biome *setColor(int color); // 4J Added Biome *setLeafFoliageWaterSkyColor(eMinecraftColour grassColor, eMinecraftColour foliageColor, eMinecraftColour waterColour, eMinecraftColour skyColour); public: virtual int getSkyColor(float temp); vector *getMobs(MobCategory *category); virtual bool hasSnow(); virtual bool hasRain(); virtual bool isHumid(); virtual float getCreatureProbability(); virtual int getDownfallInt(); virtual int getTemperatureInt(); virtual float getDownfall(); // 4J - brought forward from 1.2.3 virtual float getTemperature(); // 4J - brought forward from 1.2.3 virtual void decorate(Level *level, Random *random, int xo, int zo); virtual int getGrassColor(); virtual int getFolageColor(); virtual int getWaterColor(); // 4J Added };