mirror of
https://git.minetest.land/VoxeLibre/VoxeLibre.git
synced 2024-11-22 10:31:06 +01:00
Add persistence to XP orbs, cleanup xp_to_size
This commit is contained in:
parent
177e8f4b9d
commit
7ae05d9c06
1 changed files with 18 additions and 9 deletions
|
@ -1,6 +1,7 @@
|
||||||
-- Constants
|
-- Constants
|
||||||
local size_min, size_max = 20, 59
|
local size_min = 20 / 100 -- minimum size, prescaled
|
||||||
local delta_size = size_max - size_min
|
local size_max = 59 / 100 -- maximum size, prescaled
|
||||||
|
local delta_size = (size_max - size_min) / 10 -- Size change for each XP size level
|
||||||
local max_orb_age = 300 -- seconds
|
local max_orb_age = 300 -- seconds
|
||||||
local gravity = vector.new(0, -((tonumber(minetest.settings:get("movement_gravity"))) or 9.81), 0)
|
local gravity = vector.new(0, -((tonumber(minetest.settings:get("movement_gravity"))) or 9.81), 0)
|
||||||
|
|
||||||
|
@ -20,13 +21,18 @@ local size_to_xp = {
|
||||||
}
|
}
|
||||||
|
|
||||||
local function xp_to_size(xp)
|
local function xp_to_size(xp)
|
||||||
local i, l = 1, #size_to_xp
|
xp = xp or 0
|
||||||
|
|
||||||
while xp > size_to_xp[i][1] and i < l do
|
-- Find the size for the xp amount
|
||||||
i = i + 1
|
for i=1,11 do
|
||||||
|
local bucket = size_to_xp[i]
|
||||||
|
if xp >= bucket[1] and xp <= bucket[2] then
|
||||||
|
return (i - 1) * delta_size + size_min
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
return ((i - 1) / (l - 1) * delta_size + size_min) / 100
|
-- Fallback is the minimum size
|
||||||
|
return size_min
|
||||||
end
|
end
|
||||||
|
|
||||||
local function xp_step(self, dtime)
|
local function xp_step(self, dtime)
|
||||||
|
@ -36,6 +42,7 @@ local function xp_step(self, dtime)
|
||||||
self.collected = false
|
self.collected = false
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
local collector = minetest.get_player_by_name(self.collector)
|
local collector = minetest.get_player_by_name(self.collector)
|
||||||
if collector and collector:get_hp() > 0 and vector.distance(self.object:get_pos(),collector:get_pos()) < 7.25 then
|
if collector and collector:get_hp() > 0 and vector.distance(self.object:get_pos(),collector:get_pos()) < 7.25 then
|
||||||
self.object:set_acceleration(vector.new(0,0,0))
|
self.object:set_acceleration(vector.new(0,0,0))
|
||||||
|
@ -70,11 +77,11 @@ local function xp_step(self, dtime)
|
||||||
return
|
return
|
||||||
else
|
else
|
||||||
self.collector = nil
|
self.collector = nil
|
||||||
self.enable_physics(self)
|
self:enable_physics()
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- Age orbs
|
||||||
self.age = self.age + dtime
|
self.age = self.age + dtime
|
||||||
if self.age > max_orb_age then
|
if self.age > max_orb_age then
|
||||||
self.object:remove()
|
self.object:remove()
|
||||||
|
@ -152,7 +159,6 @@ minetest.register_entity("mcl_experience:orb", {
|
||||||
initial_sprite_basepos = {x = 0, y = 0},
|
initial_sprite_basepos = {x = 0, y = 0},
|
||||||
is_visible = true,
|
is_visible = true,
|
||||||
pointable = false,
|
pointable = false,
|
||||||
static_save = false,
|
|
||||||
},
|
},
|
||||||
moving_state = true,
|
moving_state = true,
|
||||||
slippery_state = false,
|
slippery_state = false,
|
||||||
|
@ -191,6 +197,9 @@ minetest.register_entity("mcl_experience:orb", {
|
||||||
})
|
})
|
||||||
self.object:set_sprite({x=1,y=math.random(1,14)}, 14, 0.05, false)
|
self.object:set_sprite({x=1,y=math.random(1,14)}, 14, 0.05, false)
|
||||||
end,
|
end,
|
||||||
|
get_staticdata = function(self)
|
||||||
|
tostring(self._xp or 0)
|
||||||
|
end,
|
||||||
|
|
||||||
enable_physics = function(self)
|
enable_physics = function(self)
|
||||||
if not self.physical_state then
|
if not self.physical_state then
|
||||||
|
|
Loading…
Reference in a new issue