mirror of
https://codeberg.org/tenplus1/mobs_redo.git
synced 2025-01-11 18:30:21 +01:00
sanitize yaw
This commit is contained in:
parent
6aead4ec5c
commit
13fcf68191
73
api.lua
73
api.lua
@ -1,5 +1,5 @@
|
|||||||
|
|
||||||
-- Mobs Api (30th March 2017)
|
-- Mobs Api (8th April 2017)
|
||||||
|
|
||||||
mobs = {}
|
mobs = {}
|
||||||
mobs.mod = "redo"
|
mobs.mod = "redo"
|
||||||
@ -41,7 +41,7 @@ local atann = math.atan
|
|||||||
local random = math.random
|
local random = math.random
|
||||||
local floor = math.floor
|
local floor = math.floor
|
||||||
local atan = function(x)
|
local atan = function(x)
|
||||||
if x ~= x then
|
if not x or x ~= x then
|
||||||
--error("atan bassed NaN")
|
--error("atan bassed NaN")
|
||||||
return 0
|
return 0
|
||||||
else
|
else
|
||||||
@ -104,7 +104,7 @@ end
|
|||||||
-- move mob in facing direction
|
-- move mob in facing direction
|
||||||
set_velocity = function(self, v)
|
set_velocity = function(self, v)
|
||||||
|
|
||||||
local yaw = self.object:getyaw() + self.rotate
|
local yaw = (self.object:getyaw() or 0) + self.rotate
|
||||||
|
|
||||||
self.object:setvelocity({
|
self.object:setvelocity({
|
||||||
x = sin(yaw) * -v,
|
x = sin(yaw) * -v,
|
||||||
@ -123,6 +123,19 @@ get_velocity = function(self)
|
|||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
-- set yaw
|
||||||
|
set_yaw = function(self, yaw)
|
||||||
|
|
||||||
|
if not yaw or yaw ~= yaw then
|
||||||
|
yaw = 0
|
||||||
|
end
|
||||||
|
|
||||||
|
self:setyaw(yaw)
|
||||||
|
|
||||||
|
return yaw
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
-- set defined animation
|
-- set defined animation
|
||||||
set_animation = function(self, anim)
|
set_animation = function(self, anim)
|
||||||
|
|
||||||
@ -146,7 +159,7 @@ set_animation = function(self, anim)
|
|||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
-- get distance
|
-- this is a faster way to calculate distance
|
||||||
local get_distance = function(a, b)
|
local get_distance = function(a, b)
|
||||||
|
|
||||||
local x, y, z = a.x - b.x, a.y - b.y, a.z - b.z
|
local x, y, z = a.x - b.x, a.y - b.y, a.z - b.z
|
||||||
@ -195,10 +208,19 @@ function line_of_sight(self, pos1, pos2, stepsize)
|
|||||||
|
|
||||||
-- Moves the analyzed pos
|
-- Moves the analyzed pos
|
||||||
local d = get_distance(pos1, pos2)
|
local d = get_distance(pos1, pos2)
|
||||||
|
|
||||||
npos1.x = ((pos2.x - pos1.x) / d * stepsize) + pos1.x
|
npos1.x = ((pos2.x - pos1.x) / d * stepsize) + pos1.x
|
||||||
npos1.y = ((pos2.y - pos1.y) / d * stepsize) + pos1.y
|
npos1.y = ((pos2.y - pos1.y) / d * stepsize) + pos1.y
|
||||||
npos1.z = ((pos2.z - pos1.z) / d * stepsize) + pos1.z
|
npos1.z = ((pos2.z - pos1.z) / d * stepsize) + pos1.z
|
||||||
|
|
||||||
|
-- NaN checks
|
||||||
|
if d == 0
|
||||||
|
or npos.x ~= npos.x
|
||||||
|
or npos.y ~= npos.y
|
||||||
|
or npos.z ~= npos.z then
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
ad = ad + stepsize
|
ad = ad + stepsize
|
||||||
|
|
||||||
-- scan again
|
-- scan again
|
||||||
@ -221,7 +243,7 @@ local function flight_check(self, pos_w)
|
|||||||
local nod = self.standing_in
|
local nod = self.standing_in
|
||||||
|
|
||||||
if type(self.fly_in) == "string"
|
if type(self.fly_in) == "string"
|
||||||
and ( nod == self.fly_in or nod == self.fly_in:gsub("_source", "_flowing") ) then
|
and (nod == self.fly_in or nod == self.fly_in:gsub("_source", "_flowing")) then
|
||||||
|
|
||||||
return true
|
return true
|
||||||
|
|
||||||
@ -329,7 +351,7 @@ function check_for_death(self)
|
|||||||
-- drop items when dead
|
-- drop items when dead
|
||||||
local obj
|
local obj
|
||||||
local pos = self.object:getpos()
|
local pos = self.object:getpos()
|
||||||
self.drops = self.drops or {} -- error check
|
self.drops = self.drops or {} -- nil check
|
||||||
|
|
||||||
for n = 1, #self.drops do
|
for n = 1, #self.drops do
|
||||||
|
|
||||||
@ -609,15 +631,6 @@ do_jump = function(self)
|
|||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
-- this is a faster way to calculate distance
|
|
||||||
local get_distance = function(a, b)
|
|
||||||
|
|
||||||
local x, y, z = a.x - b.x, a.y - b.y, a.z - b.z
|
|
||||||
|
|
||||||
return square(x * x + y * y + z * z)
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
-- blast damage to entities nearby (modified from TNT mod)
|
-- blast damage to entities nearby (modified from TNT mod)
|
||||||
function entity_physics(pos, radius)
|
function entity_physics(pos, radius)
|
||||||
|
|
||||||
@ -1242,7 +1255,8 @@ local follow_flop = function(self)
|
|||||||
|
|
||||||
if p.x > s.x then yaw = yaw + pi end
|
if p.x > s.x then yaw = yaw + pi end
|
||||||
|
|
||||||
self.object:setyaw(yaw)
|
-- self.object:setyaw(yaw)
|
||||||
|
yaw = set_yaw(self.object, yaw)
|
||||||
|
|
||||||
-- anyone but standing npc's can move along
|
-- anyone but standing npc's can move along
|
||||||
if dist > self.reach
|
if dist > self.reach
|
||||||
@ -1346,7 +1360,8 @@ local do_states = function(self, dtime)
|
|||||||
yaw = (random(0, 360) - 180) / 180 * pi
|
yaw = (random(0, 360) - 180) / 180 * pi
|
||||||
end
|
end
|
||||||
|
|
||||||
self.object:setyaw(yaw)
|
-- self.object:setyaw(yaw)
|
||||||
|
yaw = set_yaw(self.object, yaw)
|
||||||
end
|
end
|
||||||
|
|
||||||
set_velocity(self, 0)
|
set_velocity(self, 0)
|
||||||
@ -1419,7 +1434,8 @@ local do_states = function(self, dtime)
|
|||||||
if lp.x > s.x then yaw = yaw + pi end
|
if lp.x > s.x then yaw = yaw + pi end
|
||||||
|
|
||||||
-- look towards land and jump/move in that direction
|
-- look towards land and jump/move in that direction
|
||||||
self.object:setyaw(yaw)
|
-- self.object:setyaw(yaw)
|
||||||
|
yaw = set_yaw(self.object, yaw)
|
||||||
do_jump(self)
|
do_jump(self)
|
||||||
set_velocity(self, self.walk_velocity)
|
set_velocity(self, self.walk_velocity)
|
||||||
else
|
else
|
||||||
@ -1438,14 +1454,16 @@ local do_states = function(self, dtime)
|
|||||||
if lp.x > s.x then yaw = yaw + pi end
|
if lp.x > s.x then yaw = yaw + pi end
|
||||||
end
|
end
|
||||||
|
|
||||||
self.object:setyaw(yaw)
|
-- self.object:setyaw(yaw)
|
||||||
|
yaw = set_yaw(self.object, yaw)
|
||||||
|
|
||||||
-- otherwise randomly turn
|
-- otherwise randomly turn
|
||||||
elseif random(1, 100) <= 30 then
|
elseif random(1, 100) <= 30 then
|
||||||
|
|
||||||
yaw = random() * 2 * pi
|
yaw = random() * 2 * pi
|
||||||
|
|
||||||
self.object:setyaw(yaw)
|
-- self.object:setyaw(yaw)
|
||||||
|
yaw = set_yaw(self.object, yaw)
|
||||||
end
|
end
|
||||||
|
|
||||||
-- stand for great fall in front
|
-- stand for great fall in front
|
||||||
@ -1525,7 +1543,8 @@ local do_states = function(self, dtime)
|
|||||||
|
|
||||||
if p.x > s.x then yaw = yaw + pi end
|
if p.x > s.x then yaw = yaw + pi end
|
||||||
|
|
||||||
self.object:setyaw(yaw)
|
-- self.object:setyaw(yaw)
|
||||||
|
yaw = set_yaw(self.object, yaw)
|
||||||
|
|
||||||
if dist > self.reach then
|
if dist > self.reach then
|
||||||
|
|
||||||
@ -1685,7 +1704,8 @@ local do_states = function(self, dtime)
|
|||||||
|
|
||||||
if p.x > s.x then yaw = yaw + pi end
|
if p.x > s.x then yaw = yaw + pi end
|
||||||
|
|
||||||
self.object:setyaw(yaw)
|
-- self.object:setyaw(yaw)
|
||||||
|
yaw = set_yaw(self.object, yaw)
|
||||||
|
|
||||||
-- move towards enemy if beyond mob reach
|
-- move towards enemy if beyond mob reach
|
||||||
if dist > self.reach then
|
if dist > self.reach then
|
||||||
@ -1784,7 +1804,8 @@ local do_states = function(self, dtime)
|
|||||||
|
|
||||||
if p.x > s.x then yaw = yaw + pi end
|
if p.x > s.x then yaw = yaw + pi end
|
||||||
|
|
||||||
self.object:setyaw(yaw)
|
-- self.object:setyaw(yaw)
|
||||||
|
yaw = set_yaw(self.object, yaw)
|
||||||
|
|
||||||
set_velocity(self, 0)
|
set_velocity(self, 0)
|
||||||
|
|
||||||
@ -2060,7 +2081,8 @@ local mob_punch = function(self, hitter, tflp, tool_capabilities, dir)
|
|||||||
yaw = yaw + pi
|
yaw = yaw + pi
|
||||||
end
|
end
|
||||||
|
|
||||||
self.object:setyaw(yaw)
|
-- self.object:setyaw(yaw)
|
||||||
|
yaw = set_yaw(self.object, yaw)
|
||||||
self.state = "runaway"
|
self.state = "runaway"
|
||||||
self.runaway_timer = 0
|
self.runaway_timer = 0
|
||||||
self.following = nil
|
self.following = nil
|
||||||
@ -2241,7 +2263,8 @@ local mob_activate = function(self, staticdata, def)
|
|||||||
|
|
||||||
-- set anything changed above
|
-- set anything changed above
|
||||||
self.object:set_properties(self)
|
self.object:set_properties(self)
|
||||||
self.object:setyaw((random(0, 360) - 180) / 180 * pi)
|
-- self.object:setyaw((random(0, 360) - 180) / 180 * pi)
|
||||||
|
set_yaw(self.object, (random(0, 360) - 180) / 180 * pi)
|
||||||
update_tag(self)
|
update_tag(self)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user