Simple deco: Allow setting param2 value on placement
Schematics can already be placed with a param2 value, but not simple 1-node plant decorations of the simple type. This adds a `param2` field to the simple deco type that is checked to be between 0 and 255, and put to the placed node at mapgen. This can be used to put a degrotate value in, or e.g. a fill value for leveltype nodes, or a place_param2 value at mapgen placement, or vary the shape of meshoptions plantlike drawtype.master
parent
075833e393
commit
2e69711613
|
@ -4042,6 +4042,8 @@ The Biome API is still in an experimental phase and subject to change.
|
||||||
height_max = 0,
|
height_max = 0,
|
||||||
-- ^ Number of nodes the decoration can be at maximum.
|
-- ^ Number of nodes the decoration can be at maximum.
|
||||||
-- ^ If absent, the parameter 'height' is used as a constant.
|
-- ^ If absent, the parameter 'height' is used as a constant.
|
||||||
|
param2 = 0,
|
||||||
|
-- ^ Param2 value of placed decoration node.
|
||||||
|
|
||||||
----- Schematic-type parameters
|
----- Schematic-type parameters
|
||||||
schematic = "foobar.mts",
|
schematic = "foobar.mts",
|
||||||
|
|
|
@ -315,7 +315,7 @@ size_t DecoSimple::generate(MMVManip *vm, PcgRandom *pr, v3s16 p)
|
||||||
!force_placement)
|
!force_placement)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
vm->m_data[vi] = MapNode(c_place);
|
vm->m_data[vi] = MapNode(c_place, 0, deco_param2);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
|
|
|
@ -100,6 +100,7 @@ public:
|
||||||
std::vector<content_t> c_decos;
|
std::vector<content_t> c_decos;
|
||||||
s16 deco_height;
|
s16 deco_height;
|
||||||
s16 deco_height_max;
|
s16 deco_height_max;
|
||||||
|
u8 deco_param2;
|
||||||
};
|
};
|
||||||
|
|
||||||
class DecoSchematic : public Decoration {
|
class DecoSchematic : public Decoration {
|
||||||
|
|
|
@ -975,6 +975,7 @@ bool read_deco_simple(lua_State *L, DecoSimple *deco)
|
||||||
|
|
||||||
deco->deco_height = getintfield_default(L, index, "height", 1);
|
deco->deco_height = getintfield_default(L, index, "height", 1);
|
||||||
deco->deco_height_max = getintfield_default(L, index, "height_max", 0);
|
deco->deco_height_max = getintfield_default(L, index, "height_max", 0);
|
||||||
|
deco->deco_param2 = getintfield_default(L, index, "param2", 0);
|
||||||
|
|
||||||
if (deco->deco_height <= 0) {
|
if (deco->deco_height <= 0) {
|
||||||
errorstream << "register_decoration: simple decoration height"
|
errorstream << "register_decoration: simple decoration height"
|
||||||
|
@ -990,6 +991,12 @@ bool read_deco_simple(lua_State *L, DecoSimple *deco)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ((deco->deco_param2 < 0) || (deco->deco_param2 > 255)) {
|
||||||
|
errorstream << "register_decoration: param2 out of bounds (0-255)"
|
||||||
|
<< std::endl;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue