mirror of
https://git.minetest.land/VoxeLibre/VoxeLibre.git
synced 2024-11-26 04:21:07 +01:00
Merge pull request 'Clean up crash code and convert to new style vectors' (#3703) from cleanup_crash_code into master
Reviewed-on: https://git.minetest.land/MineClone2/MineClone2/pulls/3703
This commit is contained in:
commit
ede98cda80
3 changed files with 27 additions and 18 deletions
|
@ -830,16 +830,18 @@ local function clear_aggro(self)
|
||||||
end
|
end
|
||||||
|
|
||||||
function mob_class:do_states_attack (dtime)
|
function mob_class:do_states_attack (dtime)
|
||||||
local yaw = self.object:get_yaw() or 0
|
|
||||||
|
|
||||||
local s = self.object:get_pos()
|
|
||||||
local p = self.attack:get_pos() or s
|
|
||||||
|
|
||||||
self.timer = self.timer + dtime
|
self.timer = self.timer + dtime
|
||||||
if self.timer > 100 then
|
if self.timer > 100 then
|
||||||
self.timer = 1
|
self.timer = 1
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local s = self.object:get_pos()
|
||||||
|
if not s then return end
|
||||||
|
|
||||||
|
local p = self.attack:get_pos() or s
|
||||||
|
|
||||||
|
local yaw = self.object:get_yaw() or 0
|
||||||
|
|
||||||
-- stop attacking if player invisible or out of range
|
-- stop attacking if player invisible or out of range
|
||||||
if not self.attack
|
if not self.attack
|
||||||
or not self.attack:get_pos()
|
or not self.attack:get_pos()
|
||||||
|
@ -1141,7 +1143,13 @@ function mob_class:do_states_attack (dtime)
|
||||||
if math.random(40) == 1 then
|
if math.random(40) == 1 then
|
||||||
self.strafe_direction = self.strafe_direction*-1
|
self.strafe_direction = self.strafe_direction*-1
|
||||||
end
|
end
|
||||||
self.acc = vector.add(vector.multiply(vector.rotate_around_axis(vector.direction(s, p), vector.new(0,1,0), self.strafe_direction), 0.3*self.walk_velocity), stay_away_from_player)
|
|
||||||
|
local dir = vector.rotate_around_axis(vector.direction(s, p), vector.new(0,1,0), self.strafe_direction)
|
||||||
|
local dir2 = vector.multiply(dir, 0.3 * self.walk_velocity)
|
||||||
|
|
||||||
|
if dir2 and stay_away_from_player then
|
||||||
|
self.acc = vector.add(dir2, stay_away_from_player)
|
||||||
|
end
|
||||||
else
|
else
|
||||||
self:set_velocity( 0)
|
self:set_velocity( 0)
|
||||||
end
|
end
|
||||||
|
|
|
@ -219,8 +219,9 @@ function mob_class:is_at_cliff_or_danger(can_jump_cliff)
|
||||||
local ypos = pos.y + self.collisionbox[2] -- just above floor
|
local ypos = pos.y + self.collisionbox[2] -- just above floor
|
||||||
|
|
||||||
local free_fall, blocker = minetest.line_of_sight(
|
local free_fall, blocker = minetest.line_of_sight(
|
||||||
{x = pos.x + dir_x, y = ypos, z = pos.z + dir_z},
|
vector.new(pos.x + dir_x, ypos, pos.z + dir_z),
|
||||||
{x = pos.x + dir_x, y = ypos - self.fear_height, z = pos.z + dir_z})
|
vector.new(pos.x + dir_x, ypos - self.fear_height, pos.z + dir_z))
|
||||||
|
|
||||||
if free_fall then
|
if free_fall then
|
||||||
return true
|
return true
|
||||||
else
|
else
|
||||||
|
@ -262,8 +263,9 @@ function mob_class:is_at_water_danger(can_jump_cliff)
|
||||||
local ypos = pos.y + self.collisionbox[2] -- just above floor
|
local ypos = pos.y + self.collisionbox[2] -- just above floor
|
||||||
|
|
||||||
local free_fall, blocker = minetest.line_of_sight(
|
local free_fall, blocker = minetest.line_of_sight(
|
||||||
{x = pos.x + dir_x, y = ypos, z = pos.z + dir_z},
|
vector.new(pos.x + dir_x, ypos, pos.z + dir_z),
|
||||||
{x = pos.x + dir_x, y = ypos - 3, z = pos.z + dir_z})
|
vector.new(pos.x + dir_x, ypos - 3, pos.z + dir_z))
|
||||||
|
|
||||||
if free_fall then
|
if free_fall then
|
||||||
return true
|
return true
|
||||||
else
|
else
|
||||||
|
|
|
@ -198,6 +198,8 @@ end
|
||||||
|
|
||||||
-- move mob in facing direction
|
-- move mob in facing direction
|
||||||
function mob_class:set_velocity(v)
|
function mob_class:set_velocity(v)
|
||||||
|
if not v then return end
|
||||||
|
|
||||||
local c_x, c_y = 0, 0
|
local c_x, c_y = 0, 0
|
||||||
|
|
||||||
-- can mob be pushed, if so calculate direction
|
-- can mob be pushed, if so calculate direction
|
||||||
|
@ -207,18 +209,15 @@ function mob_class:set_velocity(v)
|
||||||
|
|
||||||
-- halt mob if it has been ordered to stay
|
-- halt mob if it has been ordered to stay
|
||||||
if self.order == "stand" or self.order == "sit" then
|
if self.order == "stand" or self.order == "sit" then
|
||||||
self.acc=vector.new(0,0,0)
|
self.acc = vector.zero()
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
local yaw = (self.object:get_yaw() or 0) + self.rotate
|
local yaw = (self.object:get_yaw() or 0) + self.rotate
|
||||||
local vv = self.object:get_velocity()
|
local vv = self.object:get_velocity()
|
||||||
if vv then
|
|
||||||
self.acc={
|
if vv and yaw then
|
||||||
x = ((math.sin(yaw) * -v) + c_x)*.27,
|
self.acc = vector.new(((math.sin(yaw) * -v) + c_x) * .27, 0, ((math.cos(yaw) * v) + c_y) * .27)
|
||||||
y = 0,
|
|
||||||
z = ((math.cos(yaw) * v) + c_y)*.27,
|
|
||||||
}
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue