Make player body viewable in first person
This commit is contained in:
parent
474bd3a3e7
commit
08c1a1c4b6
@ -17,7 +17,7 @@ local dirs = { -- Lua files to include
|
|||||||
"hud_info.lua",
|
"hud_info.lua",
|
||||||
"gold.lua",
|
"gold.lua",
|
||||||
"regen.lua",
|
"regen.lua",
|
||||||
"model.lua"
|
"model.lua",
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, filename in ipairs(dirs) do
|
for _, filename in ipairs(dirs) do
|
||||||
|
@ -1,43 +1,88 @@
|
|||||||
local anims = {
|
local anims = {
|
||||||
stand = {range = {x = 0, y = 0}},
|
stand = {range = {x = 0 , y = 0 }, speed = 30},
|
||||||
sit = {range = {x = 1, y = 1}},
|
sit = {range = {x = 1 , y = 1 }, speed = 30},
|
||||||
lay = {range = {x = 2, y = 2}},
|
lay = {range = {x = 2 , y = 2 }, speed = 30},
|
||||||
walk = {range = {x = 3, y = 27}},
|
walk = {range = {x = 3 , y = 26 }, speed = 30},
|
||||||
walk_mine = {range = {x = 28, y = 52}},
|
walk_mine = {range = {x = 28 , y = 52 }, speed = 30},
|
||||||
mine = {range = {x = 53, y = 77}},
|
mine = {range = {x = 53 , y = 77 }, speed = 30},
|
||||||
swim_mine = {range = {x = 78, y = 108}, speed = 28},
|
swim_mine = {range = {x = 78 , y = 108}, speed = 28},
|
||||||
swim_up = {range = {x = 109, y = 133}, speed = 28},
|
swim_up = {range = {x = 109, y = 133}, speed = 28},
|
||||||
swim_down = {range = {x = 134, y = 158}, speed = 28},
|
swim_down = {range = {x = 134, y = 158}, speed = 28},
|
||||||
wave = {range = {x = 159, y = 171}, speed = 34}
|
wave = {range = {x = 159, y = 171}, speed = 34}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
local registered_on_wield = {}
|
||||||
|
local last_wielded_item = ItemStack()
|
||||||
|
|
||||||
|
function players.register_on_wield(func)
|
||||||
|
table.insert(registered_on_wield, func)
|
||||||
|
end
|
||||||
|
|
||||||
minetest.register_on_joinplayer(function(player)
|
minetest.register_on_joinplayer(function(player)
|
||||||
player:set_properties({
|
player:set_properties({
|
||||||
|
visual_size = vector.new(),
|
||||||
|
})
|
||||||
|
|
||||||
|
local obj = minetest.add_entity(player:get_pos(), "vk_player:model")
|
||||||
|
obj:get_luaentity().player = player:get_player_name()
|
||||||
|
|
||||||
|
obj:set_attach(player, "Chest", vector.new(0, -1, 0), vector.new(), true)
|
||||||
|
player:set_eye_offset({x=0, y=-1, z=2}, {x=0, y=0, z=0})
|
||||||
|
|
||||||
|
player:hud_set_flags({wielditem = false})
|
||||||
|
end)
|
||||||
|
|
||||||
|
minetest.register_entity("vk_player:model", {
|
||||||
|
initial_properties = {
|
||||||
visual = "mesh",
|
visual = "mesh",
|
||||||
visual_size = vector.new(0.9, 0.9, 0.9),
|
visual_size = vector.new(0.9, 0.9, 0.9),
|
||||||
mesh = "player.b3d",
|
mesh = "player.b3d",
|
||||||
textures = {"player.png"},
|
textures = {"player.png"},
|
||||||
})
|
pointable = false,
|
||||||
|
glow = 1,
|
||||||
|
},
|
||||||
|
on_step = function(self, dtime)
|
||||||
|
if not self.player then return self.object:remove() end
|
||||||
|
|
||||||
player:set_local_animation(anims.stand.range, anims.walk.range, anims.mine.range, anims.walk_mine.range, 40)
|
local player = minetest.get_player_by_name(self.player)
|
||||||
end)
|
if not player then return self.object:remove() end
|
||||||
|
|
||||||
minetest.register_globalstep(function()
|
-- Only run anim code every 0.1 seconds
|
||||||
local players = minetest.get_connected_players()
|
self.timer = (self.timer or 0) + dtime
|
||||||
|
if self.timer < 0.1 then return else self.timer = 0 end
|
||||||
|
|
||||||
for _, player in pairs(players) do
|
--
|
||||||
|
--- Player Model animations
|
||||||
local controls = player:get_player_control()
|
local controls = player:get_player_control()
|
||||||
|
|
||||||
if controls.right or controls.left or controls.down or controls.up then
|
if controls.right or controls.left or controls.down or controls.up then
|
||||||
if controls.lmb or controls.rmb then
|
if controls.lmb or controls.rmb then
|
||||||
player:set_animation(anims.walk_mine.range, anims.walk_mine.speed)
|
self.object:set_animation(anims.walk_mine.range, anims.walk_mine.speed * (player:get_physics_override().speed or 1))
|
||||||
else
|
else
|
||||||
player:set_animation(anims.walk.range, anims.walk.speed)
|
self.object:set_animation(anims.walk.range, anims.walk.speed * (player:get_physics_override().speed or 1))
|
||||||
end
|
end
|
||||||
elseif controls.lmb or controls.rmb then
|
elseif controls.lmb or controls.rmb then
|
||||||
player:set_animation(anims.mine.range, anims.mine.speed)
|
self.object:set_animation(anims.mine.range, anims.mine.speed * (player:get_physics_override().speed or 1))
|
||||||
else
|
else
|
||||||
player:set_animation(anims.stand.range, anims.stand.speed)
|
self.object:set_animation(anims.stand.range, anims.stand.speed * (player:get_physics_override().speed or 1))
|
||||||
end
|
end
|
||||||
|
--- End of Player Model animations
|
||||||
|
--
|
||||||
|
|
||||||
|
--
|
||||||
|
--- Start of wielditem code
|
||||||
|
local wielditem = player:get_wielded_item()
|
||||||
|
local wieldname = wielditem:get_name()
|
||||||
|
|
||||||
|
if wieldname ~= last_wielded_item:get_name() then
|
||||||
|
last_wielded_item = wielditem
|
||||||
|
for _, func in ipairs(registered_on_wield) do
|
||||||
|
if func(player, wielditem, last_wielded_item) then
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
--- End of wielditem code
|
||||||
|
--
|
||||||
end
|
end
|
||||||
end)
|
})
|
||||||
|
Loading…
x
Reference in New Issue
Block a user