late/integration.lua
2018-08-26 22:29:32 +02:00

66 lines
2.1 KiB
Lua

--[[
Late library for Minetest - Library adding temporary effects.
(c) Pierre-Yves Rollo
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
--]]
-- Integration with 3D armor
if minetest.global_exists("armor") then
print("[late] Integration with 3D Armors")
-- Item equipment. May trigger an effect
armor:register_on_equip(function(player, index, stack)
late.set_equip_effect(player, stack:get_name())
end)
-- Overload is_equiped function to include armor inventory
-- TODO: Overloading process could be more elegant
local is_equiped_old = late.is_equiped
late.is_equiped = function(target, item_name)
if is_equiped_old(target, item_name) then return true end
-- Check only for players
if target.is_player and target:is_player() then
local inv = minetest.get_inventory({ type="detached",
name= target:get_player_name().."_armor" })
if inv then
local list = inv:get_list("armor")
if list then
for _, stack in pairs(list) do
if stack:get_name() == item_name then
return true
end
end
end
end
end
return false
end
-- In case of armor update, inform texture impact that base texture has changed
armor:register_on_update(function(player)
local data = late.get_storage_for_target(player)
if data.impacts and data.impacts['texture'] then
local impact_type = late.get_impact_type('player', 'texture')
data.impacts['texture'].vars.initial_textures = nil
-- TODO: add impact_type as metatable of impacts?
impact_type.update(data.impacts['texture'])
end
end)
end