epidermis/skin.lua

77 lines
1.9 KiB
Lua

local player_api = rawget(_G, "player_api")
local nodecore = rawget(_G, "nodecore")
local function get_textures(player)
if player_api then
local anim = player_api.get_animation(player)
return anim.textures or player_api.registered_models[anim.model].textures
end
return player:get_properties().textures
end
local function get_texture(player, index)
return assert(get_textures(player)[index])
end
local function set_textures(player, textures)
if player_api then
player_api.set_textures(player, textures)
return
end
player:set_properties{textures = textures}
end
local function set_texture(player, index, texture)
local textures = modlib.table.copy(get_textures(player))
textures[index] = texture
set_textures(player, textures)
end
local skin_texture_index = 1
function epidermis.get_skin(player)
return get_texture(player, skin_texture_index)
end
local nc_skins = {}
if nodecore then
local player_skin = nodecore.player_skin
function nodecore.player_skin(player, ...)
return nc_skins[player:get_player_name()] or player_skin(player, ...)
end
end
function epidermis.set_skin(player, skin)
if nodecore then
nc_skins[player:get_player_name()] = skin
return
end
set_texture(player, skin_texture_index, skin)
end
function epidermis.get_model(player)
if player_api then
return player_api.get_animation(player).model
end
return player:get_properties().mesh
end
local nc_models = {}
if nodecore then
local player_visuals_base = nodecore.player_visuals_base
function nodecore.player_visuals_base(player)
local visuals = player_visuals_base(player)
visuals.mesh = nc_models[player:get_player_name()] or visuals.mesh
return visuals
end
end
function epidermis.set_model(player, model)
if player_api then
player_api.set_model(player, model)
return
end
if nodecore then
nc_models[player:get_player_name()] = model
return
end
player:set_properties{mesh = model}
end