summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTenPlus1 <kinsellaja@yahoo.com>2017-04-08 17:55:51 +0100
committerTenPlus1 <kinsellaja@yahoo.com>2017-04-08 17:55:51 +0100
commit13fcf681910541467b0df18fefb31d2dae9d5451 (patch)
tree2e6a2baec111b791143ff99508bf0777aff6aa15
parent6aead4ec5c3779821740c6911e7f1091e3fac2ef (diff)
sanitize yaw
-rw-r--r--api.lua73
1 files changed, 48 insertions, 25 deletions
diff --git a/api.lua b/api.lua
index 0dff054..69df469 100644
--- a/api.lua
+++ b/api.lua
@@ -1,5 +1,5 @@
--- Mobs Api (30th March 2017)
+-- Mobs Api (8th April 2017)
mobs = {}
mobs.mod = "redo"
@@ -41,7 +41,7 @@ local atann = math.atan
local random = math.random
local floor = math.floor
local atan = function(x)
- if x ~= x then
+ if not x or x ~= x then
--error("atan bassed NaN")
return 0
else
@@ -104,7 +104,7 @@ end
-- move mob in facing direction
set_velocity = function(self, v)
- local yaw = self.object:getyaw() + self.rotate
+ local yaw = (self.object:getyaw() or 0) + self.rotate
self.object:setvelocity({
x = sin(yaw) * -v,
@@ -123,6 +123,19 @@ get_velocity = function(self)
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_animation = function(self, anim)
@@ -146,7 +159,7 @@ set_animation = function(self, anim)
end
--- get distance
+-- 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
@@ -195,10 +208,19 @@ function line_of_sight(self, pos1, pos2, stepsize)
-- Moves the analyzed pos
local d = get_distance(pos1, pos2)
+
npos1.x = ((pos2.x - pos1.x) / d * stepsize) + pos1.x
npos1.y = ((pos2.y - pos1.y) / d * stepsize) + pos1.y
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
-- scan again
@@ -221,7 +243,7 @@ local function flight_check(self, pos_w)
local nod = self.standing_in
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
@@ -329,7 +351,7 @@ function check_for_death(self)
-- drop items when dead
local obj
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
@@ -609,15 +631,6 @@ do_jump = function(self)
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)
function entity_physics(pos, radius)
@@ -1242,7 +1255,8 @@ local follow_flop = function(self)
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
if dist > self.reach
@@ -1346,7 +1360,8 @@ local do_states = function(self, dtime)
yaw = (random(0, 360) - 180) / 180 * pi
end
- self.object:setyaw(yaw)
+-- self.object:setyaw(yaw)
+ yaw = set_yaw(self.object, yaw)
end
set_velocity(self, 0)
@@ -1419,7 +1434,8 @@ local do_states = function(self, dtime)
if lp.x > s.x then yaw = yaw + pi end
-- 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)
set_velocity(self, self.walk_velocity)
else
@@ -1438,14 +1454,16 @@ local do_states = function(self, dtime)
if lp.x > s.x then yaw = yaw + pi end
end
- self.object:setyaw(yaw)
+-- self.object:setyaw(yaw)
+ yaw = set_yaw(self.object, yaw)
-- otherwise randomly turn
elseif random(1, 100) <= 30 then
yaw = random() * 2 * pi
- self.object:setyaw(yaw)
+-- self.object:setyaw(yaw)
+ yaw = set_yaw(self.object, yaw)
end
-- 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
- self.object:setyaw(yaw)
+-- self.object:setyaw(yaw)
+ yaw = set_yaw(self.object, yaw)
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
- self.object:setyaw(yaw)
+-- self.object:setyaw(yaw)
+ yaw = set_yaw(self.object, yaw)
-- move towards enemy if beyond mob reach
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
- self.object:setyaw(yaw)
+-- self.object:setyaw(yaw)
+ yaw = set_yaw(self.object, yaw)
set_velocity(self, 0)
@@ -2060,7 +2081,8 @@ local mob_punch = function(self, hitter, tflp, tool_capabilities, dir)
yaw = yaw + pi
end
- self.object:setyaw(yaw)
+-- self.object:setyaw(yaw)
+ yaw = set_yaw(self.object, yaw)
self.state = "runaway"
self.runaway_timer = 0
self.following = nil
@@ -2241,7 +2263,8 @@ local mob_activate = function(self, staticdata, def)
-- set anything changed above
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)
end