forked from Mirrorlandia_minetest/minetest
Biome API: Enable decorations placed on water
Add schematic decoration force placement flag
This commit is contained in:
parent
b65c7ab4a4
commit
c7454d4732
@ -792,11 +792,13 @@ Schematic attributes
|
||||
--------------------
|
||||
See section "Flag Specifier Format".
|
||||
|
||||
Currently supported flags: `place_center_x`, `place_center_y`, `place_center_z`.
|
||||
Currently supported flags: `place_center_x`, `place_center_y`,
|
||||
`place_center_z`, `force_placement`.
|
||||
|
||||
* `place_center_x`: Placement of this decoration is centered along the X axis.
|
||||
* `place_center_y`: Placement of this decoration is centered along the Y axis.
|
||||
* `place_center_z`: Placement of this decoration is centered along the Z axis.
|
||||
* `force_placement`: Schematic nodes other than "ignore" will replace existing nodes.
|
||||
|
||||
|
||||
HUD element types
|
||||
@ -3191,8 +3193,10 @@ Definition tables
|
||||
schematic = {
|
||||
size = {x=4, y=6, z=4},
|
||||
data = {
|
||||
{name="cobble", param1=255, param2=0},
|
||||
{name="dirt_with_grass", param1=255, param2=0},
|
||||
{name="default:cobble", param1=255, param2=0},
|
||||
{name="default:dirt_with_grass", param1=255, param2=0},
|
||||
{name="ignore", param1=255, param2=0},
|
||||
{name="air", param1=255, param2=0},
|
||||
...
|
||||
},
|
||||
yslice_prob = {
|
||||
@ -3203,7 +3207,7 @@ Definition tables
|
||||
},
|
||||
-- ^ See 'Schematic specifier' for details.
|
||||
replacements = {["oldname"] = "convert_to", ...},
|
||||
flags = "place_center_x, place_center_z",
|
||||
flags = "place_center_x, place_center_y, place_center_z, force_placement",
|
||||
-- ^ Flags for schematic decorations. See 'Schematic attributes'.
|
||||
rotation = "90" -- rotate schematic 90 degrees on placement
|
||||
-- ^ Rotation can be "0", "90", "180", "270", or "random".
|
||||
|
@ -31,6 +31,7 @@ FlagDesc flagdesc_deco[] = {
|
||||
{"place_center_x", DECO_PLACE_CENTER_X},
|
||||
{"place_center_y", DECO_PLACE_CENTER_Y},
|
||||
{"place_center_z", DECO_PLACE_CENTER_Z},
|
||||
{"force_placement", DECO_FORCE_PLACEMENT},
|
||||
{NULL, 0}
|
||||
};
|
||||
|
||||
@ -140,6 +141,7 @@ size_t Decoration::placeDeco(Mapgen *mg, u32 blockseed, v3s16 nmin, v3s16 nmax)
|
||||
s16 y = mg->heightmap ?
|
||||
mg->heightmap[mapindex] :
|
||||
mg->findGroundLevel(v2s16(x, z), nmin.Y, nmax.Y);
|
||||
y = MYMAX(y, mg->water_level);
|
||||
|
||||
if (y < nmin.Y || y > nmax.Y ||
|
||||
y < y_min || y > y_max)
|
||||
@ -333,6 +335,8 @@ size_t DecoSchematic::generate(MMVManip *vm, PseudoRandom *pr, s16 max_y, v3s16
|
||||
if (flags & DECO_PLACE_CENTER_Z)
|
||||
p.Z -= (schematic->size.Z + 1) / 2;
|
||||
|
||||
bool force_placement = (flags & DECO_FORCE_PLACEMENT);
|
||||
|
||||
if (!vm->m_area.contains(p))
|
||||
return 0;
|
||||
|
||||
@ -344,7 +348,7 @@ size_t DecoSchematic::generate(MMVManip *vm, PseudoRandom *pr, s16 max_y, v3s16
|
||||
Rotation rot = (rotation == ROTATE_RAND) ?
|
||||
(Rotation)pr->range(ROTATE_0, ROTATE_270) : rotation;
|
||||
|
||||
schematic->blitToVManip(p, vm, rot, false, m_ndef);
|
||||
schematic->blitToVManip(p, vm, rot, force_placement, m_ndef);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
@ -35,10 +35,11 @@ enum DecorationType {
|
||||
DECO_LSYSTEM
|
||||
};
|
||||
|
||||
#define DECO_PLACE_CENTER_X 0x01
|
||||
#define DECO_PLACE_CENTER_Y 0x02
|
||||
#define DECO_PLACE_CENTER_Z 0x04
|
||||
#define DECO_USE_NOISE 0x08
|
||||
#define DECO_PLACE_CENTER_X 0x01
|
||||
#define DECO_PLACE_CENTER_Y 0x02
|
||||
#define DECO_PLACE_CENTER_Z 0x04
|
||||
#define DECO_USE_NOISE 0x08
|
||||
#define DECO_FORCE_PLACEMENT 0x10
|
||||
|
||||
extern FlagDesc flagdesc_deco[];
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user