control fix and improvements

master
Alexsandro Percy 2022-05-11 18:48:08 -03:00
parent 2e17721146
commit 104ac4426c
3 changed files with 29 additions and 30 deletions

View File

@ -155,7 +155,9 @@ function demoiselle.control(self, dtime, hull_direction, longit_speed, longit_dr
else
demoiselle.rudder_auto_correction(self, longit_speed, dtime)
end
demoiselle.elevator_auto_correction(self, longit_speed, dtime)
if airutils.elevator_auto_correction then
self._elevator_angle = airutils.elevator_auto_correction(self, longit_speed, self.dtime, demoiselle.max_speed, self._elevator_angle, demoiselle.elevator_limit, demoiselle.ideal_step, 30)
end
end
return retval_accel, stop
@ -219,20 +221,6 @@ function demoiselle.rudder_auto_correction(self, longit_speed, dtime)
end
end
function demoiselle.elevator_auto_correction(self, longit_speed, dtime)
local factor = 1
--if self._elevator_angle > -1.5 then factor = -1 end --here is the "compensator" adjusto to keep it stable
if self._elevator_angle > 0 then factor = -1 end
local correction = (demoiselle.elevator_limit*(longit_speed/3000)) * factor * (dtime/demoiselle.ideal_step)
local before_correction = self._elevator_angle
local new_elevator_angle = self._elevator_angle + correction
if math.sign(before_correction) ~= math.sign(new_elevator_angle) then
self._elevator_angle = 0
else
self._elevator_angle = new_elevator_angle
end
end
function demoiselle.engineSoundPlay(self)
--sound
if self.sound_handle then minetest.sound_stop(self.sound_handle) end

View File

@ -261,7 +261,9 @@ function demoiselle.flightstep(self)
local node_bellow = mobkit.nodeatpos(mobkit.pos_shift(curr_pos,{y=-0.1}))
local is_flying = true
if node_bellow and node_bellow.drawtype ~= 'airlike' then is_flying = false end
if self.colinfo then
is_flying = not self.colinfo.touching_ground
end
--if is_flying then minetest.chat_send_all('is flying') end
local is_attached = demoiselle.checkAttach(self, player)
@ -276,24 +278,32 @@ function demoiselle.flightstep(self)
end
--ajustar angulo de ataque
local percentage = math.abs(((longit_speed * 100)/(demoiselle.min_speed + 5))/100)
if percentage > 1.5 then percentage = 1.5 end
self._angle_of_attack = self._angle_of_attack - ((self._elevator_angle / 20)*percentage)
if self._angle_of_attack < -0.5 then
self._angle_of_attack = -0.1
self._elevator_angle = self._elevator_angle - 0.1
end --limiting the negative angle]]--
if self._angle_of_attack > 20 then
self._angle_of_attack = 20
self._elevator_angle = self._elevator_angle + 0.1
end --limiting the very high climb angle due to strange behavior]]--
if longit_speed then
local percentage = math.abs(((longit_speed * 100)/(demoiselle.min_speed + 5))/100)
if percentage > 1.5 then percentage = 1.5 end
self._angle_of_attack = self._angle_of_attack - ((self._elevator_angle / 20)*percentage)
if self._angle_of_attack < -0.5 then
self._angle_of_attack = -0.1
self._elevator_angle = self._elevator_angle - 0.1
end --limiting the negative angle]]--
if self._angle_of_attack > 20 then
self._angle_of_attack = 20
self._elevator_angle = self._elevator_angle + 0.1
end --limiting the very high climb angle due to strange behavior]]--
--set the plane on level
if airutils.adjust_attack_angle_by_speed then
self._angle_of_attack = airutils.adjust_attack_angle_by_speed(self._angle_of_attack, 2.7, 5, 30, longit_speed, demoiselle.ideal_step, self.dtime)
end
end
--minetest.chat_send_all(self._angle_of_attack)
-- pitch
local speed_factor = 0
if longit_speed > demoiselle.min_speed + 1 then speed_factor = (velocity.y * math.rad(2)) end
local newpitch = math.rad(self._angle_of_attack) + speed_factor
local newpitch = math.rad(0)
if airutils.get_plane_pitch then
newpitch = airutils.get_plane_pitch(velocity, longit_speed, demoiselle.min_speed, self._angle_of_attack)
end
-- adjust pitch at ground
if is_flying == false then --isn't flying?

View File

@ -3,6 +3,7 @@ demoiselle={}
demoiselle.gravity = tonumber(minetest.settings:get("movement_gravity")) or 9.8
demoiselle.wing_angle_of_attack = 2
demoiselle.min_speed = 3
demoiselle.max_speed = 6
demoiselle.max_engine_acc = 5
demoiselle.lift = 16 --12