Add cube wieldview and other minor fixes
parent
b757cdb6e2
commit
a9a97c905f
|
@ -556,7 +556,7 @@ core.registered_on_protection_violation, core.register_on_protection_violation =
|
||||||
core.registered_on_item_eats, core.register_on_item_eat = make_registration()
|
core.registered_on_item_eats, core.register_on_item_eat = make_registration()
|
||||||
core.registered_on_punchplayers, core.register_on_punchplayer = make_registration()
|
core.registered_on_punchplayers, core.register_on_punchplayer = make_registration()
|
||||||
|
|
||||||
-- Player step iterration
|
-- Player step iteration
|
||||||
|
|
||||||
players_per_step = core.settings:get("players_per_globalstep")
|
players_per_step = core.settings:get("players_per_globalstep")
|
||||||
players_per_step = players_per_step and tonumber(players_per_step) or 20
|
players_per_step = players_per_step and tonumber(players_per_step) or 20
|
||||||
|
|
|
@ -2372,7 +2372,7 @@ Call these functions only at load time!
|
||||||
* Note: This callback should not be rate limited or players may be missed!
|
* Note: This callback should not be rate limited or players may be missed!
|
||||||
* See the [fire] mod for an example of how this may be done reliably
|
* See the [fire] mod for an example of how this may be done reliably
|
||||||
* `minetest.get_player_iter()`
|
* `minetest.get_player_iter()`
|
||||||
* Returns a player name iterrator, as used by `minetest.register_playerstep`
|
* Returns a player name iterator, as used by `minetest.register_playerstep`
|
||||||
* See `builtin/game/register.lua` for example usage
|
* See `builtin/game/register.lua` for example usage
|
||||||
* `minetest.register_on_shutdown(func())`
|
* `minetest.register_on_shutdown(func())`
|
||||||
* Called before server shutdown
|
* Called before server shutdown
|
||||||
|
|
|
@ -60,6 +60,7 @@ armor.update_player_visuals = function(self, player)
|
||||||
self.textures[name].skin,
|
self.textures[name].skin,
|
||||||
self.textures[name].armor,
|
self.textures[name].armor,
|
||||||
self.textures[name].wielditem,
|
self.textures[name].wielditem,
|
||||||
|
self.textures[name].cube,
|
||||||
})
|
})
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -379,6 +380,7 @@ minetest.register_on_joinplayer(function(player)
|
||||||
skin = armor.default_skin..".png",
|
skin = armor.default_skin..".png",
|
||||||
armor = "blank.png",
|
armor = "blank.png",
|
||||||
wielditem = "blank.png",
|
wielditem = "blank.png",
|
||||||
|
cube = "blank.png",
|
||||||
preview = armor.default_skin.."_preview.png",
|
preview = armor.default_skin.."_preview.png",
|
||||||
}
|
}
|
||||||
if minetest.get_modpath("skins") then
|
if minetest.get_modpath("skins") then
|
||||||
|
|
Binary file not shown.
|
@ -102,16 +102,6 @@ local hunger_timer = 0
|
||||||
local health_timer = 0
|
local health_timer = 0
|
||||||
local action_timer = 0
|
local action_timer = 0
|
||||||
|
|
||||||
local function get_player_refs(playernames)
|
|
||||||
local refs = {}
|
|
||||||
for _, name in pairs(playernames) do
|
|
||||||
local player = minetest.get_player_by_name(name)
|
|
||||||
if player and player:is_player() then
|
|
||||||
refs[#refs + 1] = player
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
local function hunger_globaltimer(dtime, playernames)
|
local function hunger_globaltimer(dtime, playernames)
|
||||||
hunger_timer = hunger_timer + dtime
|
hunger_timer = hunger_timer + dtime
|
||||||
health_timer = health_timer + dtime
|
health_timer = health_timer + dtime
|
||||||
|
|
|
@ -9,7 +9,7 @@ end
|
||||||
-- Default player appearance
|
-- Default player appearance
|
||||||
player_api.register_model("character.b3d", {
|
player_api.register_model("character.b3d", {
|
||||||
animation_speed = 30,
|
animation_speed = 30,
|
||||||
textures = {"character.png", "blank.png", "blank.png"},
|
textures = {"character.png", "blank.png", "blank.png", "blank.png"},
|
||||||
animations = {
|
animations = {
|
||||||
-- Standard animations.
|
-- Standard animations.
|
||||||
stand = {x = 0, y = 0}, -- y = 79
|
stand = {x = 0, y = 0}, -- y = 79
|
||||||
|
|
Binary file not shown.
|
@ -5,44 +5,38 @@ if not update_time then
|
||||||
update_time = 2
|
update_time = 2
|
||||||
minetest.settings:set("wieldview_update_time", tostring(update_time))
|
minetest.settings:set("wieldview_update_time", tostring(update_time))
|
||||||
end
|
end
|
||||||
local node_tiles = minetest.settings:get_bool("wieldview_node_tiles")
|
|
||||||
if not node_tiles then
|
local wield_tiles = {}
|
||||||
node_tiles = false
|
local wield_cubes = {}
|
||||||
minetest.settings:set("wieldview_node_tiles", "false")
|
local wield_items = {}
|
||||||
end
|
local wield_cycle = {}
|
||||||
|
|
||||||
wieldview = {
|
wieldview = {
|
||||||
wielded_item = {},
|
|
||||||
transform = {},
|
transform = {},
|
||||||
}
|
}
|
||||||
|
|
||||||
dofile(minetest.get_modpath(minetest.get_current_modname()).."/transform.lua")
|
dofile(minetest.get_modpath(minetest.get_current_modname()).."/transform.lua")
|
||||||
|
|
||||||
local function update_player_visuals(player, wield_image)
|
local function init_wield_items()
|
||||||
local name = player:get_player_name()
|
for name, def in pairs(minetest.registered_items) do
|
||||||
if has_armor then
|
if def.inventory_image and def.inventory_image ~= "" then
|
||||||
armor.textures[name].wielditem = wield_image
|
wield_tiles[name] = def.inventory_image
|
||||||
armor:update_player_visuals(player)
|
elseif def.tiles and type(def.tiles[1]) == "string" and
|
||||||
return
|
def.tiles[1] ~= "" and def.drawtype and
|
||||||
|
(def.drawtype == "normal" or def.drawtype == "allfaces" or
|
||||||
|
def.drawtype == "glasslike" or def.drawtype == "liquid") then
|
||||||
|
wield_cubes[name] = def.tiles[1]
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local function update_player_visuals(player, item)
|
||||||
|
local name = player:get_player_name()
|
||||||
local animation = player_api.get_animation(player) or {}
|
local animation = player_api.get_animation(player) or {}
|
||||||
local textures = animation.textures or {}
|
local textures = animation.textures or {}
|
||||||
local skin = textures[1] and textures[1] or "character.png"
|
local skin = textures[1] and textures[1] or "character.png"
|
||||||
player_api.set_textures(player, {skin, "blank.png", wield_image})
|
local wield_tile = wield_tiles[item]
|
||||||
end
|
if wield_tile then
|
||||||
|
|
||||||
wieldview.get_item_texture = function(self, item)
|
|
||||||
local texture = "blank.png"
|
|
||||||
if item ~= "" then
|
|
||||||
if minetest.registered_items[item] then
|
|
||||||
if minetest.registered_items[item].inventory_image ~= "" then
|
|
||||||
texture = minetest.registered_items[item].inventory_image
|
|
||||||
elseif node_tiles == true and minetest.registered_items[item].tiles
|
|
||||||
and type(minetest.registered_items[item].tiles[1]) == "string"
|
|
||||||
and minetest.registered_items[item].tiles[1] ~= "" then
|
|
||||||
texture = minetest.inventorycube(minetest.registered_items[item].tiles[1])
|
|
||||||
end
|
|
||||||
end
|
|
||||||
-- Get item image transformation, first from group, then from transform.lua
|
-- Get item image transformation, first from group, then from transform.lua
|
||||||
local transform = minetest.get_item_group(item, "wieldview_transform")
|
local transform = minetest.get_item_group(item, "wieldview_transform")
|
||||||
if transform == 0 then
|
if transform == 0 then
|
||||||
|
@ -51,13 +45,27 @@ wieldview.get_item_texture = function(self, item)
|
||||||
if transform then
|
if transform then
|
||||||
-- This actually works with groups ratings because transform1, transform2, etc.
|
-- This actually works with groups ratings because transform1, transform2, etc.
|
||||||
-- have meaning and transform0 is used for identidy, so it can be ignored
|
-- have meaning and transform0 is used for identidy, so it can be ignored
|
||||||
texture = texture.."^[transform"..tostring(transform)
|
wield_tile = wield_tile.."^[transform"..tostring(transform)
|
||||||
end
|
end
|
||||||
|
else
|
||||||
|
wield_tile = "blank.png"
|
||||||
|
end
|
||||||
|
local wield_cube = wield_cubes[item] or "blank.png"
|
||||||
|
if has_armor then
|
||||||
|
armor.textures[name].wielditem = wield_tile
|
||||||
|
armor.textures[name].cube = wield_cube
|
||||||
|
armor:update_player_visuals(player)
|
||||||
|
else
|
||||||
|
player_api.set_textures(player, {skin, "blank.png", wield_tile, wield_cube})
|
||||||
end
|
end
|
||||||
return texture
|
|
||||||
end
|
end
|
||||||
|
|
||||||
wieldview.update_wielded_item = function(self, name)
|
local function update_wielded_item(dtime, name)
|
||||||
|
wield_cycle[name] = wield_cycle[name] or 0
|
||||||
|
wield_cycle[name] = wield_cycle[name] + dtime
|
||||||
|
if wield_cycle[name] < update_time then
|
||||||
|
return
|
||||||
|
end
|
||||||
local player = minetest.get_player_by_name(name)
|
local player = minetest.get_player_by_name(name)
|
||||||
if not player or not player:is_player() then
|
if not player or not player:is_player() then
|
||||||
return
|
return
|
||||||
|
@ -67,25 +75,37 @@ wieldview.update_wielded_item = function(self, name)
|
||||||
if not item then
|
if not item then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
if self.wielded_item[name] then
|
if wield_items[name] and wield_items[name] == item then
|
||||||
if self.wielded_item[name] == item then
|
return
|
||||||
return
|
else
|
||||||
end
|
update_player_visuals(player, item)
|
||||||
update_player_visuals(player, self:get_item_texture(item))
|
|
||||||
end
|
end
|
||||||
self.wielded_item[name] = item
|
wield_items[name] = item
|
||||||
|
wield_cycle[name] = 0
|
||||||
end
|
end
|
||||||
|
|
||||||
if not minetest.is_singleplayer() then
|
if not minetest.is_singleplayer() then
|
||||||
minetest.register_on_joinplayer(function(player)
|
minetest.register_on_joinplayer(function(player)
|
||||||
local name = player:get_player_name()
|
local name = player:get_player_name()
|
||||||
wieldview.wielded_item[name] = ""
|
if name then
|
||||||
minetest.after(0, function(player)
|
wield_items[name] = ""
|
||||||
wieldview:update_wielded_item(name)
|
wield_cycle[name] = 0
|
||||||
end, player)
|
minetest.after(0, function()
|
||||||
|
update_wielded_item(0, name)
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
minetest.register_on_leaveplayer(function(player)
|
||||||
|
local name = player:get_player_name()
|
||||||
|
if name then
|
||||||
|
wield_items[name] = ""
|
||||||
|
wield_cycle[name] = 0
|
||||||
|
end
|
||||||
end)
|
end)
|
||||||
minetest.register_playerstep(function(dtime, playernames)
|
minetest.register_playerstep(function(dtime, playernames)
|
||||||
for _, name in pairs(playernames) do
|
for _, name in pairs(playernames) do
|
||||||
wieldview:update_wielded_item(name)
|
update_wielded_item(dtime, name)
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
|
minetest.after(0, init_wield_items)
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue