From 98cb4c419389fc567f160b5c625a58648c6f01a4 Mon Sep 17 00:00:00 2001 From: Andrey2470T Date: Fri, 9 Aug 2019 22:09:55 +0300 Subject: [PATCH] Fix an error causing jerks backwards on going forward --- api.lua | 69 ++++++++++++++++++++++++++++++++++++++++++++------------ init.lua | 27 ++++++++++++++++------ 2 files changed, 74 insertions(+), 22 deletions(-) diff --git a/api.lua b/api.lua index 126da2c..c4ea245 100644 --- a/api.lua +++ b/api.lua @@ -50,7 +50,7 @@ adv_vehicles.attach_player_to_veh = function(player, vehicle, seated, model, ani meta:set_string("is_sit", minetest.serialize({veh_name, seated})) local new_player_rot = {x=math.deg(veh_rot.x), y=veh_rot.y+180, z=math.deg(veh_rot.z)} local p=vehicle.object:get_pos() - --player:set_pos({x=p.x+vehicle.seats_list[seated].pos.x, y=p.y, z=p.z+vehicle.seats_list[seated].pos.z}) + --player:set_pos({x=p.x+new_seat_pos.x, y=p.y, z=p.z+new_seat_pos.z}) local eye_offset_fi, eye_offset_th = player:get_eye_offset() if vehicle.seats_list[seated].eye_offset then local eye_off = vehicle.seats_list[seated].eye_offset @@ -186,6 +186,8 @@ adv_vehicles.vehicle_braking = function (vehicle, vector_l) local acc_x = -(vel.x*vector_l/vel_l) local acc_z = -(vel.z*vector_l/vel_l) local acc_y = obj:get_acceleration().y + --minetest.debug(dump(obj:get_acceleration())) + --minetest.debug(dump({x=acc_x, y=acc_y, z=acc_z})) obj:set_acceleration({x=acc_x, y=acc_y, z=acc_z}) local new_acc = obj:get_acceleration() @@ -220,7 +222,23 @@ adv_vehicles.vehicle_handle = function (vehicle, controls, yaw) end local acc = vehicle.object:get_acceleration() - if controls.up then + local up_and_down_vals = {controls.up, controls.down} + local t = {1, -1} + local s + for i, v in pairs(up_and_down_vals) do + if v then + s = t[i] + end + end + + if (controls.up and s) or (controls.down and s) then + is_car_driven=true + vehicle.object:set_acceleration({x=vehicle.acc_vector_pos.x*s, y=acc.y, z=vehicle.acc_vector_pos.z*s}) + else + is_car_driven=nil + end + + --[[if controls.up then is_car_driven=true vehicle.object:set_acceleration({x=vehicle.acc_vector_pos.x, y=acc.y, z=vehicle.acc_vector_pos.z}) else @@ -232,7 +250,7 @@ adv_vehicles.vehicle_handle = function (vehicle, controls, yaw) vehicle.object:set_acceleration({x=vehicle.acc_vector_pos.x*-1, y=acc.y, z=vehicle.acc_vector_pos.z*-1}) else is_car_driven=nil - end + end ]] return math.rad(new_yaw) end @@ -247,7 +265,6 @@ end local nearby_nodes = minetest.find_node_near(pos, z_face, global_nodenames_list)]] -- Registers a vehicle to the world and creates a spawner item for it with a crafting recipe. -local is_origin_yaw_set adv_vehicles.register_vehicle = function (vehname, veh_properties, veh_item) minetest.register_entity("adv_vehicles:"..vehname, { visual = "mesh", @@ -274,7 +291,8 @@ adv_vehicles.register_vehicle = function (vehname, veh_properties, veh_item) self.seats_list[seated].pos.y = 0 end self.veh_vel = 0 - + self.smoke_emit = veh_properties.smoke_emit + minetest.debug(dump(self.smoke_emit)) local acc = self.object:get_acceleration() local gravity_strength = veh_properties.mass * -9.8 self.object:set_acceleration({x=acc.x, y=gravity_strength, z=acc.z}) @@ -299,16 +317,10 @@ adv_vehicles.register_vehicle = function (vehname, veh_properties, veh_item) -- Further it will get new position for the acceleration vector dependently on fixed rotation angle and fix new rotation angles. entity.acc_vector_pos, entity.fixed_veh_rotate_angle = adv_vehicles.pave_vector(entity, entity.acc_vector_pos, entity.fixed_veh_rotate_angle) - for seat, d in pairs(entity.seats_list) do - if d.busy_by then - local player = minetest.get_player_by_name(d.busy_by) - local is_sit = minetest.deserialize(player:get_meta():get_string("is_sit")) - if is_sit[2] == "driver" then - yaw = entity.on_handle(entity, player:get_player_control(), yaw) - end - end + if entity.seats_list["driver"].busy_by then + local player = minetest.get_player_by_name(entity.seats_list["driver"].busy_by) + yaw = entity.on_handle(entity, player:get_player_control(), yaw) end - --entity.fixed_veh_rotate_angle = obj:get_yaw() -- If a length of the velocity vector exceeds a 'max_vel' value, sets to zero the acceleration vector. local vel_length = vector.length(vel) @@ -353,12 +365,40 @@ adv_vehicles.register_vehicle = function (vehname, veh_properties, veh_item) if seated == "driver" then adv_vehicles.attach_player_to_veh(clicker, self, seated, "driver.b3d") self.is_veh_stopping=nil + --minetest.debug(dump(self.smoke_emit)) + if self.smoke_emit then + minetest.debug("TRUE") + local sm_emit = self.smoke_emit + self.smoke_spawner_id = minetest.add_particlespawner({ + amount = sm_emit.amount, + time = 0, + minpos = sm_emit.min_pos, + maxpos = sm_emit.max_pos, + minvel = sm_emit.min_vel, + maxvel = sm_emit.max_vel, + minacc = sm_emit.min_acc, + maxacc = sm_emit.max_acc, + minexptime = sm_emit.min_exp_time, + maxexptime = sm_emit.max_exp_time, + minsize = sm_emit.min_size, + maxsize = sm_emit.max_size, + collisiondetection = true, + collision_removal = true, + object_collision = true, + attached = self.object, + texture = sm_emit.texture or "default_item_smoke.png" + }) + end else adv_vehicles.attach_player_to_veh(clicker, self, seated, nil, {x=81, y=81}) end break elseif data.busy_by == clicker:get_player_name() then if seated == "driver" then adv_vehicles.detach_player_from_veh(clicker, self, seated, "character.b3d") self.is_veh_stopping=true + if self.smoke_spawner_id then + minetest.delete_particlespawner(self.smoke_spawner_id) + self.smoke_spawner_id=nil + end else adv_vehicles.detach_player_from_veh(clicker, self, seated, nil, {x=1, y=80}) end break end @@ -375,7 +415,6 @@ adv_vehicles.register_vehicle = function (vehname, veh_properties, veh_item) local object = minetest.add_entity(pointed_thing.above, "adv_vehicles:"..vehname) local yaw = math.deg(placer:get_look_horizontal()) object:set_yaw(math.rad(yaw+180)) - --is_origin_yaw_set=true end end }) diff --git a/init.lua b/init.lua index 3f4e4de..7f671fb 100644 --- a/init.lua +++ b/init.lua @@ -368,11 +368,24 @@ minetest.register_craft({ adv_vehicles.register_vehicle("bmw_118_two_seats", { hp_max = 60, mass = 1.3, - acc_vector_length = 10.0, - max_vel = 10, + acc_vector_length = 15.0, + max_vel = 35.0, cbox = {-1.2, -0.5, -3.0, 1.2, 1.5, 3.0}, model = "bmw_118_two_seats_redone.b3d", textures = {"bmw_118_two_seats_new_tex.png"}, + smoke_emit = { + amount = 6, + min_pos = {x=-0.6, y=-0.2, z=-3.2}, + max_pos = {x=-0.5, y=-0.2, z=-3.2}, + min_vel = {x=0, y=0, z=-1.0}, + max_vel = {x=0, y=0, z=-1.3}, + min_acc = {x=0, y=0, z=0.25}, + max_acc = {x=0, y=0, z=0.35}, + min_exp_time = 0.8, + max_exp_time = 2.0, + min_size = 2, + max_size = 4 + }, seats = {["driver"]={busy_by=nil, pos={x=4.0, z=-3.5}, eye_offset={x=-3.0, z=5.0}}, ["passenger"]={busy_by=nil, pos={x=-8.0, z=-3.5}, eye_offset={x=3.0, z=5.0}}} }, { @@ -402,8 +415,8 @@ end adv_vehicles.register_vehicle("volvo", { hp_max = 130, mass = 25, - acc_vector_length = 6.5, - max_vel = 3, + acc_vector_length = 12.0, + max_vel = 20.0, cbox = {-1.2, -0.5, -4.5, 1.2, 2.0, 4.5}, model = "volvo.b3d", textures = {"volvo.png"}, @@ -430,12 +443,12 @@ adv_vehicles.register_vehicle("volvo", { adv_vehicles.register_vehicle("kamaz", { hp_max = 160, mass = 40, - acc_vector_length = 6.0, - max_vel = 1.5, + acc_vector_length = 10.5, + max_vel = 16.0, cbox = {-1.5, -0.5, -3.5, 1.5, 2.5, 3.5}, model = "kamaz.b3d", textures = {"kamaz.png"}, - seats = {["driver"]={busy_by=nil, pos={x=0, z=-18.0}}, + seats = {["driver"]={busy_by=nil, pos={x=0, z=-18.0}, eye_offset={x=0, z=28}}, }, player_eye_offset = {x=0, y=0, z=-18.0} }, {