From 0842ebe2d9144a99c337c6b796204725c33cac28 Mon Sep 17 00:00:00 2001 From: Alexsandro Percy Date: Tue, 3 May 2022 11:54:23 -0300 Subject: [PATCH] added autopilot button, autopilot adjusted --- custom_physics.lua | 5 ----- entities.lua | 2 -- forms.lua | 5 +++-- manual.lua | 15 +++++++++------ utilities.lua | 15 ++++++++++----- 5 files changed, 22 insertions(+), 20 deletions(-) diff --git a/custom_physics.lua b/custom_physics.lua index d8fa641..116f6bd 100755 --- a/custom_physics.lua +++ b/custom_physics.lua @@ -38,11 +38,6 @@ function pa28.physics(self) self.object:set_velocity(vnew) end - if pa28.mode == 1 then - local new_velocity = vector.add(vel, {x=0,y=mobkit.gravity * self.dtime,z=0}) - self.object:set_velocity(new_velocity) - end - if pa28.mode == 2 then self.object:set_acceleration({x=0,y=mobkit.gravity,z=0}) end diff --git a/entities.lua b/entities.lua index 00d1b37..f54b961 100755 --- a/entities.lua +++ b/entities.lua @@ -171,9 +171,7 @@ minetest.register_entity("pa28:pa28", { _energy = 0.001, _last_vel = {x=0,y=0,z=0}, _longit_speed = 0, - _land_retracted = true, _show_hud = false, - _instruction_mode = false, --flag to intruction mode _command_is_given = false, --flag to mark the "owner" of the commands now _autopilot = false, _auto_pilot_altitude = 0, diff --git a/forms.lua b/forms.lua index ef0ce48..23b6bd4 100755 --- a/forms.lua +++ b/forms.lua @@ -56,7 +56,7 @@ function pa28.pilot_formspec(name) local copilot_name = "test" basic_form = basic_form.."button[1,1.0;4,1;turn_on;Start/Stop Engines]" basic_form = basic_form.."button[1,2.0;4,1;hud;Show/Hide Gauges]" - --basic_form = basic_form.."button[1,3.0;4,1;turn_auto_pilot_on;Auto Pilot]" + basic_form = basic_form.."button[1,3.0;4,1;turn_auto_pilot_on;Auto Pilot]" basic_form = basic_form.."button[1,4.0;4,1;pass_control;Pass the Control]" basic_form = basic_form.."checkbox[1,5.8;flap_is_down;Flaps down;"..flap_is_down.."]" basic_form = basic_form.."checkbox[1,6.6;light;Landing Light;"..light.."]" @@ -125,7 +125,8 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) end end if fields.turn_auto_pilot_on then - -- + ent._autopilot = true + minetest.chat_send_player(ent.driver_name,core.colorize('#00ff00', " >>> Autopilot on")) end if fields.pass_control then if ent._command_is_given == true then diff --git a/manual.lua b/manual.lua index bdb3464..30421d1 100755 --- a/manual.lua +++ b/manual.lua @@ -37,9 +37,9 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) "* Forward: go down flying - nose down \n", "* Left/right: Turn to left/right, work on and out ground. \n", "* Left and Right together: center all commands \n", - "* Sneak and Jump together (normal): activates the autopilot \n", - "* Sneak and Jump together (instruction mode): give/take the \n", - " controls to/from pilot student \n", + "* Sneak and Jump together: activates the autopilot \n", + "* Aux1 (E) and Jump together: give/take the \n", + " controls to/from copilot \n", "* Up and Down together: enable/disable HUD \n", "* E and Right click: inventory (only external) \n" } @@ -58,8 +58,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) "In front of the pilot is the instrument panel. \n", "It's used to obtain important flight information. \n", "The climber is the instrument that indicates the rate \n", - " of climb and descent, it's on the left of the \n", - " panel, marked with the letter C in blue. \n", + " of climb or descent, marked with the letter C in blue. \n", "The speed indicator indicates the longitudinal speed of \n", " the airplane. Is marked with the letter S in white. \n", "The power gauge indicates the power applied to the \n", @@ -68,7 +67,11 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) " It's marked with the green F.\n", "The altimeter, with values multiplied by 100, \n", " indicates the current height. \n", - "At Panel center you see the compass, used for navigation." + "At Panel center you see the compass, used for navigation.\n", + " The compass have a second function as Automatic \n", + " direction finding (ADF). It can be activated through \n", + " the plane menu, checking it and setting the \n", + " destination coordinates." } local panel_form = table.concat({ "formspec_version[3]", diff --git a/utilities.lua b/utilities.lua index cf08498..61cd119 100755 --- a/utilities.lua +++ b/utilities.lua @@ -457,7 +457,7 @@ function pa28.flightstep(self) --------------------- -- change the driver --------------------- - if passenger and self._last_time_command >= 1 and self._instruction_mode == true then + if passenger and self._last_time_command >= 1 then if self._command_is_given == true then if ctrl.sneak or ctrl.jump or ctrl.up or ctrl.down or ctrl.right or ctrl.left then self._last_time_command = 0 @@ -465,7 +465,7 @@ function pa28.flightstep(self) airutils.transfer_control(self, false) end else - if ctrl.sneak == true and ctrl.jump == true then + if ctrl.aux1 == true and ctrl.jump == true then self._last_time_command = 0 --trasnfer the control to student airutils.transfer_control(self, true) @@ -475,7 +475,7 @@ function pa28.flightstep(self) ----------- --autopilot ----------- - if self._instruction_mode == false and self._last_time_command >= 1 then + if self._last_time_command >= 1 then if self._autopilot == true then if ctrl.sneak or ctrl.jump or ctrl.up or ctrl.down or ctrl.right or ctrl.left then self._last_time_command = 0 @@ -554,6 +554,7 @@ function pa28.flightstep(self) end if longit_speed == 0 and is_flying == false and is_attached == false and self._engine_running == false then + if pa28.mode == 1 then self.object:set_velocity(vector.add(velocity, {x=0,y=mobkit.gravity * self.dtime,z=0})) end return end @@ -678,13 +679,17 @@ function pa28.flightstep(self) if stop ~= true then --maybe == nil self._last_accell = new_accel self.object:move_to(curr_pos) - --self.object:set_velocity(velocity) + + --solution to avoid rubber band bug if player then - pa28.attach(self, player, self._instruction_mode) + pa28.attach(self, player, false) end if pa28.mode == 1 then + local gravity_velocity = {x=0,y=mobkit.gravity * self.dtime,z=0} + local new_velocity = vector.add(velocity, vector.multiply(new_accel, self.dtime)) + new_velocity = vector.add(gravity_velocity, new_velocity) --[[ new_velocity correction