@@ -38,22 +38,27 @@ NoiseParams nparams_dungeon_density(0.0, 1.0, v3f(2.5, 2.5, 2.5), 0, 2, 1.4, 2.0
38
38
// /////////////////////////////////////////////////////////////////////////////
39
39
40
40
41
- DungeonGen::DungeonGen (Mapgen *mapgen, DungeonParams *dparams)
41
+ DungeonGen::DungeonGen (INodeDefManager *ndef,
42
+ GenerateNotifier *gennotify, DungeonParams *dparams)
42
43
{
43
- this ->mg = mapgen;
44
- this ->vm = mapgen->vm ;
44
+ assert (ndef);
45
+
46
+ this ->ndef = ndef;
47
+ this ->gennotify = gennotify;
45
48
46
49
#ifdef DGEN_USE_TORCHES
47
- c_torch = mg-> ndef ->getId (" default:torch" );
50
+ c_torch = ndef->getId (" default:torch" );
48
51
#endif
49
52
50
53
if (dparams) {
51
54
memcpy (&dp, dparams, sizeof (dp));
52
55
} else {
53
- dp.c_water = mg->ndef ->getId (" mapgen_water_source" );
54
- dp.c_cobble = mg->ndef ->getId (" mapgen_cobble" );
55
- dp.c_moss = mg->ndef ->getId (" mapgen_mossycobble" );
56
- dp.c_stair = mg->ndef ->getId (" mapgen_stair_cobble" );
56
+ dp.seed = 0 ;
57
+
58
+ dp.c_water = ndef->getId (" mapgen_water_source" );
59
+ dp.c_cobble = ndef->getId (" mapgen_cobble" );
60
+ dp.c_moss = ndef->getId (" mapgen_mossycobble" );
61
+ dp.c_stair = ndef->getId (" mapgen_stair_cobble" );
57
62
58
63
dp.diagonal_dirs = false ;
59
64
dp.mossratio = 3.0 ;
@@ -67,18 +72,21 @@ DungeonGen::DungeonGen(Mapgen *mapgen, DungeonParams *dparams)
67
72
}
68
73
69
74
// For mapgens using river water
70
- dp.c_river_water = mg-> ndef ->getId (" mapgen_river_water_source" );
75
+ dp.c_river_water = ndef->getId (" mapgen_river_water_source" );
71
76
if (dp.c_river_water == CONTENT_IGNORE)
72
- dp.c_river_water = mg-> ndef ->getId (" mapgen_water_source" );
77
+ dp.c_river_water = ndef->getId (" mapgen_water_source" );
73
78
}
74
79
75
80
76
- void DungeonGen::generate (u32 bseed, v3s16 nmin, v3s16 nmax)
81
+ void DungeonGen::generate (MMVManip *vm, u32 bseed, v3s16 nmin, v3s16 nmax)
77
82
{
83
+ assert (vm);
84
+
78
85
// TimeTaker t("gen dungeons");
79
- if (NoisePerlin3D (&dp.np_rarity , nmin.X , nmin.Y , nmin.Z , mg-> seed ) < 0.2 )
86
+ if (NoisePerlin3D (&dp.np_rarity , nmin.X , nmin.Y , nmin.Z , dp. seed ) < 0.2 )
80
87
return ;
81
88
89
+ this ->vm = vm;
82
90
this ->blockseed = bseed;
83
91
random .seed (bseed + 2 );
84
92
@@ -109,7 +117,7 @@ void DungeonGen::generate(u32 bseed, v3s16 nmin, v3s16 nmax)
109
117
u32 i = vm->m_area .index (nmin.X , y, z);
110
118
for (s16 x = nmin.X ; x <= nmax.X ; x++) {
111
119
if (vm->m_data [i].getContent () == dp.c_cobble ) {
112
- float wetness = NoisePerlin3D (&dp.np_wetness , x, y, z, mg-> seed );
120
+ float wetness = NoisePerlin3D (&dp.np_wetness , x, y, z, dp. seed );
113
121
float density = NoisePerlin3D (&dp.np_density , x, y, z, blockseed);
114
122
if (density < wetness / dp.mossratio )
115
123
vm->m_data [i].setContent (dp.c_moss );
@@ -187,7 +195,8 @@ void DungeonGen::makeDungeon(v3s16 start_padding)
187
195
makeRoom (roomsize, roomplace);
188
196
189
197
v3s16 room_center = roomplace + v3s16 (roomsize.X / 2 , 1 , roomsize.Z / 2 );
190
- mg->gennotify .addEvent (dp.notifytype , room_center);
198
+ if (gennotify)
199
+ gennotify->addEvent (dp.notifytype , room_center);
191
200
192
201
#ifdef DGEN_USE_TORCHES
193
202
// Place torch at room center (for testing)
0 commit comments