forked from MineClone5/MineClone5
[mapgen] Add `mcl_mapgen.priorities` table
This commit is contained in:
parent
3bd1a6f89e
commit
279b1b09cd
|
@ -1,54 +1,74 @@
|
||||||
# mcl_mapgen
|
# mcl_mapgen
|
||||||
============
|
============
|
||||||
This mod helps to avoid problems caused by Minetest's 'chunk-in-shell' feature of mapgen.cpp.
|
Helps to avoid problems caused by 'chunk-in-shell' feature of mapgen.cpp.
|
||||||
It also queues your generators to run them in proper order.
|
It also queues your generators to run them in proper order:
|
||||||
|
|
||||||
|
|
||||||
=========================================================================
|
|
||||||
## mcl_mapgen.register_chunk_generator(chunk_callback_function, priority)
|
## mcl_mapgen.register_chunk_generator(chunk_callback_function, priority)
|
||||||
=========================================================================
|
=========================================================================
|
||||||
UNSAFE! See below. Registers callback function to be called when current chunk generation is finished.
|
Registers callback function to be called when current chunk generation is finished.
|
||||||
`callback_function`: chunk callback function definition, see below;
|
`callback_function`: chunk callback function definition:
|
||||||
`priority`: order number - the less, the earlier.
|
|
||||||
### Chunk callback function definition:
|
|
||||||
`function(minp, maxp, seed)`:
|
`function(minp, maxp, seed)`:
|
||||||
`minp` & `maxp`: minimum and maximum chunk position;
|
`minp` & `maxp`: minimum and maximum chunk position;
|
||||||
`seed`: seed of this mapchunk.
|
`seed`: seed of this mapchunk;
|
||||||
|
`priority` (optional): order number - the less, the earlier,
|
||||||
|
e.g. `mcl_mapgen.priorities.BUILDINGS` or `mcl_mapgen.priorities.LARGE_BUILDINGS`
|
||||||
|
|
||||||
|
|
||||||
=======================================================================
|
|
||||||
## mcl_mapgen.register_chunk_generator_lvm(callback_function, priority)
|
|
||||||
=======================================================================
|
|
||||||
UNSAFE! See below. Registers callback function to be called when current chunk generation is finished.
|
|
||||||
`vm_context` passes into callback function and should be returned back.
|
|
||||||
`callback_function`: chunk callback LVM function definition, see below;
|
|
||||||
`priority`: order number - the less, the earlier.
|
|
||||||
### Chunk callback LVM function definition:
|
|
||||||
Function MUST RETURN `vm_context`. It passes into next callback function from the queue.
|
|
||||||
`function(vm_context)`:
|
|
||||||
`vm_context` is a table which already contains some LVM data and some of them can be added in callback function:
|
|
||||||
`minp` & `maxp`: minimum and maximum chunk position;
|
|
||||||
`seed`: seed of this mapchunk.
|
|
||||||
|
|
||||||
|
|
||||||
===================================================================
|
|
||||||
## mcl_mapgen.register_block_generator(callback_function, priority)
|
## mcl_mapgen.register_block_generator(callback_function, priority)
|
||||||
===================================================================
|
===================================================================
|
||||||
Registers callback function to be called when block (usually 16x16x16 nodes) generation is finished.
|
Registers callback function to be called when block (usually 16x16x16 nodes) generation is finished.
|
||||||
`callback_function`: block callback function definition, see below;
|
`callback_function`: block callback function definition, see below;
|
||||||
`priority`: order number - the less, the earlier.
|
`priority` (optional): order number - the less, the earlier,
|
||||||
|
e.g. `mcl_mapgen.priorities.BUILDINGS` or `mcl_mapgen.priorities.LARGE_BUILDINGS`
|
||||||
|
|
||||||
|
|
||||||
=======================================================================
|
|
||||||
## mcl_mapgen.register_block_generator_lvm(callback_function, priority)
|
## mcl_mapgen.register_block_generator_lvm(callback_function, priority)
|
||||||
=======================================================================
|
=======================================================================
|
||||||
Registers callback function to be called when block (usually 16x16x16 nodes) generation is finished.
|
Registers callback function to be called when block (usually 16x16x16 nodes) generation is finished.
|
||||||
`vm_context` passes into callback function and should be returned back.
|
`vm_context` passes into callback function and should be returned back.
|
||||||
`callback_function`: block callback LVM function definition, see below;
|
`callback_function`: block callback LVM function definition, see below;
|
||||||
`priority`: order number - the less, the earlier.
|
`priority` (optional): order number - the less, the earlier,
|
||||||
|
e.g. `mcl_mapgen.priorities.BUILDINGS` or `mcl_mapgen.priorities.LARGE_BUILDINGS`
|
||||||
|
|
||||||
|
## mcl_mapgen.register_chunk_generator_lvm(callback_function, priority)
|
||||||
|
=======================================================================
|
||||||
|
UNSAFE! See https://git.minetest.land/MineClone2/MineClone2/issues/1395
|
||||||
|
Registers callback function to be called when current chunk generation is finished.
|
||||||
|
IT IS UNSAFE! GROUND CONTENT YOU PLACE (INCLUDING WATER AND AIR) CAN BE OVERWRITTEN BY cavegen.
|
||||||
|
ALL OTHER API FUNCTIONS ARE SAFE! USE THEM PLEASE! BUT WE NEED THIS FUNCTION STILL SOMETIMES,
|
||||||
|
WHEN WE NEED TO ACCESS MAPGEN OBJECTS like `heightmap`, `biomemap`, ETC.
|
||||||
|
`callback_function`: chunk callback LVM function definition, see below;
|
||||||
|
`function(vm_context)`:
|
||||||
|
Function MUST RETURN `vm_context` back anyway! It will passed into next callback function from the queue.
|
||||||
|
`vm_context`: a table which already contains some LVM data if the fields, and some of them can be added right in callback function:
|
||||||
|
`vm`: curent voxel manipulator object itself;
|
||||||
|
`blockseed`: seed of this mapchunk;
|
||||||
|
`minp` & `maxp`: minimum and maximum chunk position;
|
||||||
|
`emin` & `emax`: minimum and maximum chunk position WITH SHELL AROUND IT;
|
||||||
|
`area`: voxel area, can be helpful to access data;
|
||||||
|
`data`: LVM buffer data array, data loads into it before the callbacks;
|
||||||
|
`write`: set it to true in yout callback functionm, if you changed `data` and want to write it;
|
||||||
|
`data2`: LVM buffer data array of `param2`, !NO ANY DATA LOADS INTO IT BEFORE THE CALLBACKS! - you load it yourfels:
|
||||||
|
`vm_context.data2 = vm_context.data2 or vm_context.vm.get_param2_data(vm_context.lvm_param2_buffer)`
|
||||||
|
`write_param2`: set it to true in yout callback functionm, if you used `data2` and want to write it;
|
||||||
|
`lvm_param2_buffer`: static `param2` buffer pointer, used to load `data2` array;
|
||||||
|
`shadow`: set it to false to disable shadow propagation;
|
||||||
|
`heightmap`: mapgen object contanting y coordinates of ground level,
|
||||||
|
!NO ANY DATA LOADS INTO IT BEFORE THE CALLBACKS! - you load it yourfels:
|
||||||
|
`vm_context.heightmap = vm_context.heightmap or minetest.get_mapgen_object('heightmap')`
|
||||||
|
`biomemap`: mapgen object contanting biome IDs of nodes,
|
||||||
|
!NO ANY DATA LOADS INTO IT BEFORE THE CALLBACKS! - you load it yourfels:
|
||||||
|
`vm_context.biomemap = vm_context.biomemap or minetest.get_mapgen_object('biomemap')`
|
||||||
|
`heatmap`: mapgen object contanting temperature values of nodes,
|
||||||
|
!NO ANY DATA LOADS INTO IT BEFORE THE CALLBACKS! - you load it yourfels:
|
||||||
|
`vm_context.heatmap = vm_context.heatmap or minetest.get_mapgen_object('heatmap')`
|
||||||
|
`humiditymap`: mapgen object contanting humidity values of nodes,
|
||||||
|
!NO ANY DATA LOADS INTO IT BEFORE THE CALLBACKS! - you load it yourfels:
|
||||||
|
`vm_context.humiditymap = vm_context.humiditymap or minetest.get_mapgen_object('humiditymap')`
|
||||||
|
`gennotify`: mapgen object contanting mapping table of structures, see Minetest Lua API for explanation,
|
||||||
|
!NO ANY DATA LOADS INTO IT BEFORE THE CALLBACKS! - you load it yourfels:
|
||||||
|
`vm_context.gennotify = vm_context.gennotify or minetest.get_mapgen_object('gennotify')`
|
||||||
|
`priority` (optional): order number - the less, the earlier,
|
||||||
|
e.g. `mcl_mapgen.priorities.BUILDINGS` or `mcl_mapgen.priorities.LARGE_BUILDINGS`
|
||||||
|
|
||||||
===============================
|
|
||||||
## mcl_mapgen.get_far_node(pos)
|
## mcl_mapgen.get_far_node(pos)
|
||||||
===============================
|
===============================
|
||||||
Returns node if it is generated. Otherwise returns `{name = "ignore"}`.
|
Returns node if it is generated. Otherwise returns `{name = "ignore"}`.
|
||||||
|
|
|
@ -1,7 +1,14 @@
|
||||||
mcl_mapgen = {}
|
mcl_mapgen = {}
|
||||||
|
|
||||||
local priority = {
|
local priorities = { -- mcl_mapgen.priorities...
|
||||||
OCEAN_MONUMENT = 1000000
|
DEFAULT = 5000,
|
||||||
|
CHORUS = 100000,
|
||||||
|
BUILDINGS = 200000,
|
||||||
|
VILLAGES = 900000,
|
||||||
|
DUNGEONS = 950000,
|
||||||
|
STRONGHOLDS = 999999,
|
||||||
|
OCEAN_MONUMENT = 1000000,
|
||||||
|
LARGE_BUILDINGS = 2000000,
|
||||||
}
|
}
|
||||||
|
|
||||||
local math_floor = math.floor
|
local math_floor = math.floor
|
||||||
|
@ -62,7 +69,7 @@ local CS_NODES = mcl_mapgen.CS_NODES -- 80
|
||||||
|
|
||||||
local CS_3D = CS * CS * CS
|
local CS_3D = CS * CS * CS
|
||||||
|
|
||||||
local DEFAULT_PRIORITY = 5000
|
local DEFAULT_PRIORITY = priorities.DEFAULT
|
||||||
|
|
||||||
function mcl_mapgen.register_chunk_generator(callback_function, priority)
|
function mcl_mapgen.register_chunk_generator(callback_function, priority)
|
||||||
nodes_chunk = nodes_chunk + 1
|
nodes_chunk = nodes_chunk + 1
|
||||||
|
@ -261,7 +268,7 @@ minetest.register_on_generated(function(minp, maxp, blockseed)
|
||||||
if vm_context.write_param2 then
|
if vm_context.write_param2 then
|
||||||
vm:set_param2_data(data2)
|
vm:set_param2_data(data2)
|
||||||
end
|
end
|
||||||
vm:calc_lighting(minp, maxp, vm_context.shadow) -- TODO: check boundaries
|
vm:calc_lighting(minp, maxp, vm_context.shadow or true) -- TODO: check boundaries
|
||||||
vm:write_to_map()
|
vm:write_to_map()
|
||||||
vm:update_liquids()
|
vm:update_liquids()
|
||||||
end
|
end
|
||||||
|
@ -403,4 +410,4 @@ mcl_mapgen.overworld = overworld
|
||||||
mcl_mapgen.end_ = end_
|
mcl_mapgen.end_ = end_
|
||||||
mcl_mapgen.nether = nether
|
mcl_mapgen.nether = nether
|
||||||
|
|
||||||
mcl_mapgen.priorities = priority
|
mcl_mapgen.priorities = priorities
|
||||||
|
|
|
@ -3979,7 +3979,7 @@ if not mcl_mapgen.singlenode then
|
||||||
minetest.after(1, mcl_end.grow_chorus_plant, realpos)
|
minetest.after(1, mcl_end.grow_chorus_plant, realpos)
|
||||||
end
|
end
|
||||||
return c
|
return c
|
||||||
end)
|
end, mcl_mapgen.priorities.CHORUS)
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -413,4 +413,4 @@ function mcl_dungeons.spawn_dungeon(p1, _, pr)
|
||||||
spawn_dungeon(p1, p2, dim, pr, true)
|
spawn_dungeon(p1, p2, dim, pr, true)
|
||||||
end
|
end
|
||||||
|
|
||||||
mcl_mapgen.register_chunk_generator(dungeons_nodes, 999999)
|
mcl_mapgen.register_chunk_generator(dungeons_nodes, mcl_mapgen.priorities.DUNGEONS)
|
||||||
|
|
|
@ -100,4 +100,4 @@ mcl_mapgen.register_chunk_generator(function(minp, maxp, blockseed)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end, 999999)
|
end, mcl_mapgen.priorities.STRONGHOLDS)
|
||||||
|
|
|
@ -103,7 +103,7 @@ if mg_name ~= "singlenode" then
|
||||||
if height_difference > max_height_difference then return end
|
if height_difference > max_height_difference then return end
|
||||||
|
|
||||||
build_a_settlement(minp, maxp, blockseed)
|
build_a_settlement(minp, maxp, blockseed)
|
||||||
end)
|
end, mcl_mapgen.priorities.VILLAGES)
|
||||||
end
|
end
|
||||||
-- manually place villages
|
-- manually place villages
|
||||||
if minetest.is_creative_enabled("") then
|
if minetest.is_creative_enabled("") then
|
||||||
|
|
Loading…
Reference in New Issue