You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
60 lines
2.6 KiB
60 lines
2.6 KiB
local ipairs, ItemStack, nodecore, include |
|
= ipairs, ItemStack, nodecore, include |
|
|
|
rawset(_G, "nc_extended_rotating", {}) |
|
nc_extended_rotating.hud = include("hud") |
|
nc_extended_rotating.rotate = include("rotate") |
|
nc_extended_rotating.utility = include("utility") -- Depends on `rotate`. |
|
nc_extended_rotating.entity = include("entity") -- Depends on `utility`. |
|
nc_extended_rotating.registry = include("registry") -- Depends on `rotate` and `state` (late). |
|
nc_extended_rotating.state = include("state") -- Depends on `registry`, `rotate` and `utility`. |
|
|
|
-- Do a quick check if we're using a compatible version of NodeCore. |
|
if not nodecore.param2_canonical then error("Requires NodeCore 24e2e7b7 or later") end |
|
|
|
------------------------------------- |
|
-- Register Player Update Function -- |
|
------------------------------------- |
|
|
|
local update_rotating_state = nc_extended_rotating.state.update_rotating_state |
|
local update_player_hud = nc_extended_rotating.hud.update_player_hud |
|
local update_entity_hint = nc_extended_rotating.entity.update_entity_hint |
|
|
|
nodecore.register_playerstep({ |
|
label = "nc_extended_rotating:update", |
|
action = function(player, data) |
|
local state = update_rotating_state(player, data) |
|
update_player_hud(player, state) |
|
update_entity_hint(player, state) |
|
end, |
|
}) |
|
|
|
--------------------------------------- |
|
-- Register Rotatable NodeCore Nodes -- |
|
--------------------------------------- |
|
|
|
local register_rotatable = nc_extended_rotating.registry.register_rotatable; |
|
|
|
-- Register lenses. |
|
for _, lens_state in ipairs({ "", "_on", "_glow", "_glow_start" }) do |
|
register_rotatable("nc_optics:lens" .. lens_state) end |
|
|
|
-- Register prisms. |
|
for _, prism_state in ipairs({ "", "_on", "_gated" }) do |
|
register_rotatable("nc_optics:prism" .. prism_state) end |
|
|
|
-- Register all existing and to-be-registered door panels. |
|
nodecore.register_on_register_item({ |
|
retroactive = true, |
|
func = function(name, def) |
|
-- This function is actually called BEFORE the item is registered with Minetest. |
|
-- Because of this, looking up the node definition by name does not work. |
|
-- Thankfully, the panel is registered before the door, and as such it already exists. |
|
if def.groups and def.groups.door then |
|
local panel = def.drop_in_place.name -- The panel version of the door. |
|
local pin = def.drop_non_silktouch or def.drop -- Dropped item is the door's pin. |
|
register_rotatable(panel, nil, function(_, _, _, item_stack) |
|
return ItemStack(item_stack):get_name() == pin end) |
|
end |
|
end, |
|
})
|
|
|