Leafdecay: Node timer based implementation, API
This implements a node-timer based leafdecay mechanism, and exposes an API to use it in mods. The API is documented in game_api.txt. `default.register_leafdecay(leafdecaydef)` `leafdecaydef` is a table, with following members: { trunks = { "default:tree"}, -- nodes considered trunks leaves = { "default:leaves", "default:apple"}, -- nodes considered leaves radius = 3, -- activates leafdecay this far from the trunk } The algorithm will drop `leaves` items in the area if no `trunks` are found in the `trunk_radius` sized area around the position of the leaf. If a node listed in `leaves` has a group `leafdecay_drop > 0`, then the item is dropped, otherwise the item is removed but not dropped. The algorithm also implements a value `default.leafdecay_speed` (default 15) which can be modified to increase or decrease of the leaf decay. The algorithm will vary the actual speed a bit to introduce randomness. Leaf decay is randomized by 0.1 seconds to reduce the chance that decay happens many times on the same second interval. This requires nodetimer_interval to be set to values lower than 1.0 to have an effect. The leaves will decay between 2 and 10 seconds after digging the trunk, and happen at non-integer second intervals. -- The API was added by sofar.
This commit is contained in:
parent
37dd910747
commit
60e5b299af
3 changed files with 132 additions and 45 deletions
36
game_api.txt
36
game_api.txt
|
@ -658,20 +658,36 @@ default.player_get_animation(player)
|
|||
Leafdecay
|
||||
---------
|
||||
|
||||
To enable leaf decay for a node, add it to the `leafdecay` group.
|
||||
To enable leaf decay for leaves when a tree is cut down by a player,
|
||||
register the tree with the default.register_leafdecay(leafdecaydef)
|
||||
function.
|
||||
|
||||
The rating of the group determines how far from a node in the group `tree`
|
||||
the node can be without decaying.
|
||||
If `param2` of any registered node is ~= 0, the node will always be
|
||||
preserved. Thus, if the player places a node of that kind, you will
|
||||
want to set `param2 = 1` or so.
|
||||
|
||||
If `param2` of the node is ~= 0, the node will always be preserved. Thus, if
|
||||
the player places a node of that kind, you will want to set `param2 = 1` or so.
|
||||
The function `default.after_place_leaves` can be set as
|
||||
`after_place_node of a node` to set param2 to 1 if the player places
|
||||
the node (should not be used for nodes that use param2 otherwise
|
||||
(e.g. facedir)).
|
||||
|
||||
The function `default.after_place_leaves` can be set as `after_place_node of a node`
|
||||
to set param2 to 1 if the player places the node (should not be used for nodes
|
||||
that use param2 otherwise (e.g. facedir)).
|
||||
If the node is in the `leafdecay_drop` group then it will always be
|
||||
dropped as an item.
|
||||
|
||||
`default.register_leafdecay(leafdecaydef)`
|
||||
|
||||
`leafdecaydef` is a table, with following members:
|
||||
{
|
||||
trunks = {"default:tree"}, -- nodes considered trunks
|
||||
leaves = {"default:leaves", "default:apple"},
|
||||
-- nodes considered for removal
|
||||
radius = 3, -- radius to consider for searching
|
||||
}
|
||||
|
||||
Note: all the listed nodes in `trunks` have their `on_after_destruct`
|
||||
callback overridden. All the nodes listed in `leaves` have their
|
||||
`on_timer` callback overridden.
|
||||
|
||||
If the node is in the `leafdecay_drop` group then it will always be dropped as an
|
||||
item.
|
||||
|
||||
Dyes
|
||||
----
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue