mirror of
https://git.minetest.land/VoxeLibre/VoxeLibre.git
synced 2024-11-28 05:21:05 +01:00
Change staticdata serialization (with migration from old data), disable debugging code used to investigate https://git.minetest.land/MineClone2/MineClone2/issues/2446
This commit is contained in:
parent
44514e0fad
commit
2a9aaa02af
1 changed files with 30 additions and 20 deletions
|
@ -207,15 +207,22 @@ local function register_entity(entity_id, mesh, textures, drop, on_rightclick, o
|
||||||
_old_pos = nil,
|
_old_pos = nil,
|
||||||
_old_vel = {x=0, y=0, z=0},
|
_old_vel = {x=0, y=0, z=0},
|
||||||
_old_switch = 0,
|
_old_switch = 0,
|
||||||
_railtype = nil,
|
_staticdata = {
|
||||||
|
railtype = nil,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
function cart:on_activate(staticdata, dtime_s)
|
function cart:on_activate(staticdata, dtime_s)
|
||||||
-- Initialize
|
-- Initialize
|
||||||
local data = minetest.deserialize(staticdata)
|
local data = minetest.deserialize(staticdata)
|
||||||
if type(data) == "table" then
|
if type(data) == "table" then
|
||||||
self._railtype = data._railtype
|
-- Migrate old data
|
||||||
self._passenger = data._passenger
|
if data._railtype then
|
||||||
|
data.railtype = data._railtype
|
||||||
|
data._railtype = nil
|
||||||
|
end
|
||||||
|
|
||||||
|
self._staticdata = data
|
||||||
end
|
end
|
||||||
self.object:set_armor_groups({immortal=1})
|
self.object:set_armor_groups({immortal=1})
|
||||||
|
|
||||||
|
@ -231,13 +238,13 @@ local function register_entity(entity_id, mesh, textures, drop, on_rightclick, o
|
||||||
|
|
||||||
function cart:on_punch(puncher, time_from_last_punch, tool_capabilities, direction)
|
function cart:on_punch(puncher, time_from_last_punch, tool_capabilities, direction)
|
||||||
local pos = self.object:get_pos()
|
local pos = self.object:get_pos()
|
||||||
if not self._railtype then
|
if not self._staticdata.railtype then
|
||||||
local node = minetest.get_node(vector.floor(pos)).name
|
local node = minetest.get_node(vector.floor(pos)).name
|
||||||
self._railtype = minetest.get_item_group(node, "connect_to_raillike")
|
self._staticdata.railtype = minetest.get_item_group(node, "connect_to_raillike")
|
||||||
end
|
end
|
||||||
|
|
||||||
if not puncher or not puncher:is_player() then
|
if not puncher or not puncher:is_player() then
|
||||||
local cart_dir = mcl_minecarts:get_rail_direction(pos, {x=1, y=0, z=0}, nil, nil, self._railtype)
|
local cart_dir = mcl_minecarts:get_rail_direction(pos, {x=1, y=0, z=0}, nil, nil, self._staticdata.railtype)
|
||||||
if vector.equals(cart_dir, {x=0, y=0, z=0}) then
|
if vector.equals(cart_dir, {x=0, y=0, z=0}) then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
@ -290,7 +297,7 @@ local function register_entity(entity_id, mesh, textures, drop, on_rightclick, o
|
||||||
|
|
||||||
local punch_dir = mcl_minecarts:velocity_to_dir(puncher:get_look_dir())
|
local punch_dir = mcl_minecarts:velocity_to_dir(puncher:get_look_dir())
|
||||||
punch_dir.y = 0
|
punch_dir.y = 0
|
||||||
local cart_dir = mcl_minecarts:get_rail_direction(pos, punch_dir, nil, nil, self._railtype)
|
local cart_dir = mcl_minecarts:get_rail_direction(pos, punch_dir, nil, nil, self._staticdata.railtype)
|
||||||
if vector.equals(cart_dir, {x=0, y=0, z=0}) then
|
if vector.equals(cart_dir, {x=0, y=0, z=0}) then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
@ -364,7 +371,7 @@ local function register_entity(entity_id, mesh, textures, drop, on_rightclick, o
|
||||||
for _,v in ipairs({"x","y","z"}) do
|
for _,v in ipairs({"x","y","z"}) do
|
||||||
if math.abs(diff[v]) > 1.1 then
|
if math.abs(diff[v]) > 1.1 then
|
||||||
local expected_pos = vector.add(self._old_pos, self._old_dir)
|
local expected_pos = vector.add(self._old_pos, self._old_dir)
|
||||||
dir, last_switch = mcl_minecarts:get_rail_direction(pos, self._old_dir, ctrl, self._old_switch, self._railtype)
|
dir, last_switch = mcl_minecarts:get_rail_direction(pos, self._old_dir, ctrl, self._old_switch, self._staticdata.railtype)
|
||||||
|
|
||||||
if vector.equals(dir, {x=0, y=0, z=0}) then
|
if vector.equals(dir, {x=0, y=0, z=0}) then
|
||||||
dir = false
|
dir = false
|
||||||
|
@ -388,7 +395,7 @@ local function register_entity(entity_id, mesh, textures, drop, on_rightclick, o
|
||||||
local cart_dir = mcl_minecarts:velocity_to_dir(vel)
|
local cart_dir = mcl_minecarts:velocity_to_dir(vel)
|
||||||
local max_vel = mcl_minecarts.speed_max
|
local max_vel = mcl_minecarts.speed_max
|
||||||
if not dir then
|
if not dir then
|
||||||
dir, last_switch = mcl_minecarts:get_rail_direction(pos, cart_dir, ctrl, self._old_switch, self._railtype)
|
dir, last_switch = mcl_minecarts:get_rail_direction(pos, cart_dir, ctrl, self._old_switch, self._staticdata.railtype)
|
||||||
end
|
end
|
||||||
|
|
||||||
local new_acc = {x=0, y=0, z=0}
|
local new_acc = {x=0, y=0, z=0}
|
||||||
|
@ -533,15 +540,18 @@ local function register_entity(entity_id, mesh, textures, drop, on_rightclick, o
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Debug
|
-- Debug
|
||||||
local node = minetest.get_node(pos).name
|
if false then
|
||||||
local dist = 0
|
local node = minetest.get_node(pos).name
|
||||||
if pos and self._old_pos then
|
local dist = 0
|
||||||
dist = vector.distance(pos,self._old_pos)
|
if pos and self._old_pos then
|
||||||
|
dist = vector.distance(pos,self._old_pos)
|
||||||
|
end
|
||||||
|
if dist > 1.5 then
|
||||||
|
print("pos="..tostring(pos)..",dist="..tostring(dist)..",node="..tostring(node)..",old_pos="..
|
||||||
|
tostring(self._old_pos)..",vel="..tostring(vel))
|
||||||
|
end
|
||||||
|
-- Rail jumps can occur when dist > 1.5, because the cart can skip over a gap in track
|
||||||
end
|
end
|
||||||
if dist > 1.5 then
|
|
||||||
print("pos="..tostring(pos)..",dist="..tostring(dist)..",node="..tostring(node)..",old_pos="..tostring(self._old_pos)..",vel="..tostring(vel))
|
|
||||||
end
|
|
||||||
-- Rail jumps can occur when dist > 1.5, because the cart can skip over a gap in track
|
|
||||||
|
|
||||||
-- Grab mob
|
-- Grab mob
|
||||||
if math.random(1,20) > 15 and not self._passenger then
|
if math.random(1,20) > 15 and not self._passenger then
|
||||||
|
@ -577,7 +587,7 @@ local function register_entity(entity_id, mesh, textures, drop, on_rightclick, o
|
||||||
rou_pos = vector.round(pos)
|
rou_pos = vector.round(pos)
|
||||||
node = minetest.get_node(rou_pos)
|
node = minetest.get_node(rou_pos)
|
||||||
local g = minetest.get_item_group(node.name, "connect_to_raillike")
|
local g = minetest.get_item_group(node.name, "connect_to_raillike")
|
||||||
if g ~= self._railtype and self._railtype then
|
if g ~= self._staticdata.railtype and self._staticdata.railtype then
|
||||||
-- Detach driver
|
-- Detach driver
|
||||||
if player then
|
if player then
|
||||||
if self._old_pos then
|
if self._old_pos then
|
||||||
|
@ -668,7 +678,7 @@ local function register_entity(entity_id, mesh, textures, drop, on_rightclick, o
|
||||||
end
|
end
|
||||||
|
|
||||||
function cart:get_staticdata()
|
function cart:get_staticdata()
|
||||||
return minetest.serialize({_railtype = self._railtype})
|
return minetest.serialize(self._staticdata)
|
||||||
end
|
end
|
||||||
|
|
||||||
minetest.register_entity(entity_id, cart)
|
minetest.register_entity(entity_id, cart)
|
||||||
|
@ -703,7 +713,7 @@ function mcl_minecarts.place_minecart(itemstack, pointed_thing, placer)
|
||||||
local railtype = minetest.get_item_group(node.name, "connect_to_raillike")
|
local railtype = minetest.get_item_group(node.name, "connect_to_raillike")
|
||||||
local le = cart:get_luaentity()
|
local le = cart:get_luaentity()
|
||||||
if le then
|
if le then
|
||||||
le._railtype = railtype
|
le._staticdata.railtype = railtype
|
||||||
end
|
end
|
||||||
local cart_dir
|
local cart_dir
|
||||||
if node.name == "mcl_minecarts:golden_rail_on" then
|
if node.name == "mcl_minecarts:golden_rail_on" then
|
||||||
|
|
Loading…
Reference in a new issue