mirror of
https://github.com/APercy/airutils.git
synced 2025-03-21 18:41:21 +00:00
fix ground detection position
This commit is contained in:
parent
d0b8ba9ea8
commit
415cdd9797
1 changed files with 25 additions and 17 deletions
42
init.lua
42
init.lua
|
@ -169,31 +169,39 @@ end
|
||||||
|
|
||||||
function airutils.get_ground_effect_lift(self, curr_pos, lift, wingspan)
|
function airutils.get_ground_effect_lift(self, curr_pos, lift, wingspan)
|
||||||
local half_wingspan = wingspan/2
|
local half_wingspan = wingspan/2
|
||||||
local initial_pos = {x=curr_pos.x, y=curr_pos.y, z=curr_pos.z} --lets make my own table to avoid interferences
|
local lower_collision = self.initial_properties.collisionbox[2]
|
||||||
|
local initial_pos = {x=curr_pos.x, y=curr_pos.y + lower_collision, z=curr_pos.z} --lets make my own table to avoid interferences
|
||||||
|
|
||||||
|
if self._extra_lift == nil then self._extra_lift = 0 end
|
||||||
if self._last_ground_effect_eval == nil then self._last_ground_effect_eval = 0 end
|
if self._last_ground_effect_eval == nil then self._last_ground_effect_eval = 0 end
|
||||||
|
|
||||||
self._last_ground_effect_eval = self._last_ground_effect_eval + self.dtime --dtime cames from mobkit
|
self._last_ground_effect_eval = self._last_ground_effect_eval + self.dtime --dtime cames from mobkit
|
||||||
|
|
||||||
local ground_distance = wingspan
|
local ground_distance = wingspan
|
||||||
if self._last_ground_effect_eval >= 0.4 then
|
if self._last_ground_effect_eval >= 0.25 then
|
||||||
--self._last_ground_effect_eval = 0
|
self._last_ground_effect_eval = 0
|
||||||
|
self._last_ground_distance = ground_distance
|
||||||
local ground_y = airutils.eval_vertical_interception(initial_pos, {x=initial_pos.x, y=initial_pos.y - half_wingspan, z=initial_pos.z})
|
local ground_y = airutils.eval_vertical_interception(initial_pos, {x=initial_pos.x, y=initial_pos.y - half_wingspan, z=initial_pos.z})
|
||||||
if ground_y then
|
if ground_y then
|
||||||
ground_distance = curr_pos.y - ground_y
|
ground_distance = initial_pos.y - ground_y
|
||||||
end
|
end
|
||||||
end
|
--minetest.chat_send_all(dump(ground_distance))
|
||||||
|
|
||||||
--smooth the curve
|
--smooth the curve
|
||||||
local distance_factor = ((ground_distance) * 1) / (wingspan)
|
local distance_factor = ((ground_distance) * 1) / (wingspan)
|
||||||
local effect_factor = quadBezier(distance_factor, 0, wingspan, 0)
|
local effect_factor = quadBezier(distance_factor, 0, wingspan, 0)
|
||||||
if effect_factor < 0 then effect_factor = 0 end
|
if effect_factor < 0 then effect_factor = 0 end
|
||||||
if effect_factor > 0 then
|
if effect_factor > 0 then
|
||||||
effect_factor = math.abs( half_wingspan - effect_factor )
|
effect_factor = math.abs( half_wingspan - effect_factor )
|
||||||
|
end
|
||||||
|
|
||||||
|
local lift_factor = ((effect_factor) * 1) / (half_wingspan) --agora isso é um percentual
|
||||||
|
local max_extra_lift_percent = 0.5 * lift --e aqui o maximo extra de sustentação
|
||||||
|
local extra_lift = max_extra_lift_percent * lift_factor
|
||||||
|
self._extra_lift = extra_lift
|
||||||
end
|
end
|
||||||
|
|
||||||
local lift_factor = ((effect_factor) * 1) / (half_wingspan) --agora isso é um percentual
|
return self._extra_lift --return the value stored
|
||||||
local max_extra_lift_percent = 0.5 * lift --e aqui o maximo extra de sustentação
|
|
||||||
local extra_lift = max_extra_lift_percent * lift_factor
|
|
||||||
|
|
||||||
return extra_lift
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue