X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Fdungeongen.h;h=4a0bfcefd85c2eb2552f9c2d6918cbba50ffffa9;hb=43bf4324d5f639f338f88a599fe862630f85f787;hp=4be3df4aa8f05455401cb247b54d3bf1366e948d;hpb=650e932ddf7352e50bba42acbc0ff4eda8aa40e2;p=dragonfireclient.git diff --git a/src/dungeongen.h b/src/dungeongen.h index 4be3df4aa..4a0bfcefd 100644 --- a/src/dungeongen.h +++ b/src/dungeongen.h @@ -30,40 +30,48 @@ with this program; if not, write to the Free Software Foundation, Inc., class ManualMapVoxelManipulator; class INodeDefManager; +class Mapgen; -v3s16 rand_ortho_dir(PseudoRandom &random); +v3s16 rand_ortho_dir(PseudoRandom &random, bool diagonal_dirs); v3s16 turn_xz(v3s16 olddir, int t); v3s16 random_turn(PseudoRandom &random, v3s16 olddir); int dir_to_facedir(v3s16 d); + +struct DungeonParams { + content_t c_water; + content_t c_cobble; + content_t c_moss; + content_t c_stair; + + int notifytype; + bool diagonal_dirs; + float mossratio; + v3s16 holesize; + v3s16 roomsize; + + NoiseParams np_rarity; + NoiseParams np_wetness; + NoiseParams np_density; +}; + class DungeonGen { public: + ManualMapVoxelManipulator *vm; + Mapgen *mg; u32 blockseed; - u64 mapseed; - ManualMapVoxelManipulator *vmanip; - INodeDefManager *ndef; PseudoRandom random; v3s16 csize; - s16 water_level; - - NoiseParams *np_rarity; - NoiseParams *np_wetness; - NoiseParams *np_density; - - content_t cid_water_source; - content_t cid_cobble; - content_t cid_mossycobble; - content_t cid_torch; - content_t cid_cobblestair; + + content_t c_torch; + DungeonParams dp; //RoomWalker v3s16 m_pos; v3s16 m_dir; - DungeonGen(INodeDefManager *ndef, u64 seed, s16 waterlevel); - void generate(ManualMapVoxelManipulator *vm, u32 bseed, - v3s16 full_node_min, v3s16 full_node_max); - //void generate(v3s16 full_node_min, v3s16 full_node_max, u32 bseed); + DungeonGen(Mapgen *mg, DungeonParams *dparams); + void generate(u32 bseed, v3s16 full_node_min, v3s16 full_node_max); void makeDungeon(v3s16 start_padding); void makeRoom(v3s16 roomsize, v3s16 roomplace); @@ -79,50 +87,12 @@ class DungeonGen { void randomizeDir() { - m_dir = rand_ortho_dir(random); - } -}; - -class RoomWalker -{ -public: - - RoomWalker(VoxelManipulator &vmanip_, v3s16 pos, PseudoRandom &random, - INodeDefManager *ndef): - vmanip(vmanip_), - m_pos(pos), - m_random(random), - m_ndef(ndef) - { - randomizeDir(); - } - - void randomizeDir() - { - m_dir = rand_ortho_dir(m_random); - } - - void setPos(v3s16 pos) - { - m_pos = pos; + m_dir = rand_ortho_dir(random, dp.diagonal_dirs); } - - void setDir(v3s16 dir) - { - m_dir = dir; - } - - //bool findPlaceForDoor(v3s16 &result_place, v3s16 &result_dir); - //bool findPlaceForRoomDoor(v3s16 roomsize, v3s16 &result_doorplace, - // v3s16 &result_doordir, v3s16 &result_roomplace); - -private: - VoxelManipulator &vmanip; - v3s16 m_pos; - v3s16 m_dir; - PseudoRandom &m_random; - INodeDefManager *m_ndef; }; +extern NoiseParams nparams_dungeon_rarity; +extern NoiseParams nparams_dungeon_wetness; +extern NoiseParams nparams_dungeon_density; #endif