summaryrefslogtreecommitdiff
path: root/api.lua
diff options
context:
space:
mode:
authorTenPlus1 <kinsellaja@yahoo.com>2016-12-20 18:17:56 +0000
committerTenPlus1 <kinsellaja@yahoo.com>2016-12-20 18:17:56 +0000
commit12503180f4116fd24414f394658bfa8c7157721f (patch)
tree4dbe03e750d77c48029f5d6de9ac597d3f997bce /api.lua
parentd7201144624bdd57540e8744552dd73b976b1293 (diff)
use atan2, added attached attack, added swim to shore
Diffstat (limited to 'api.lua')
-rw-r--r--api.lua97
1 files changed, 47 insertions, 50 deletions
diff --git a/api.lua b/api.lua
index c6493d9..334fa48 100644
--- a/api.lua
+++ b/api.lua
@@ -1,5 +1,5 @@
--- Mobs Api (6th December 2016)
+-- Mobs Api (16th December 2016)
mobs = {}
mobs.mod = "redo"
@@ -72,6 +72,7 @@ local atan = function(x)
return atann(x)
end
end
+local atan2 = math.atan2
do_attack = function(self, player)
@@ -362,7 +363,7 @@ function check_for_death(self)
obj:setvelocity({
x = random(-10, 10) / 9,
- y = 5,
+ y = 6,
z = random(-10, 10) / 9,
})
end
@@ -1211,16 +1212,10 @@ local follow_flop = function(self)
else
local vec = {
x = p.x - s.x,
- y = p.y - s.y,
z = p.z - s.z
}
- local yaw = (atan(vec.z / vec.x) + pi / 2) - self.rotate
-
- if p.x > s.x then
- yaw = yaw + pi
- end
-
+ local yaw = (atan2(vec.z, vec.x) - pi / 2) - self.rotate
self.object:setyaw(yaw)
-- anyone but standing npc's can move along
@@ -1320,17 +1315,12 @@ local do_states = function(self, dtime)
local vec = {
x = lp.x - s.x,
- y = lp.y - s.y,
z = lp.z - s.z
}
- yaw = (atan(vec.z / vec.x) + pi / 2) - self.rotate
-
- if lp.x > s.x then
- yaw = yaw + pi
- end
+ yaw = (atan2(vec.z, vec.x) - pi / 2) - self.rotate
else
- yaw = (random(0, 360) - 180) / 180 * pi
+ yaw = random() * 2 * pi
end
self.object:setyaw(yaw)
@@ -1373,19 +1363,36 @@ local do_states = function(self, dtime)
lp = minetest.find_node_near(s, 1, {"group:lava"})
end
- -- if something then avoid
if lp then
- local vec = {
- x = lp.x - s.x,
- y = lp.y - s.y,
- z = lp.z - s.z
- }
+ -- if mob in water or lava then look for land
+ if (self.lava_damage and minetest.registered_nodes[self.standing_in].groups.lava)
+ or (self.water_damage and minetest.registered_nodes[self.standing_in].groups.water) then
+
+ lp = minetest.find_node_near(s, 5, {"group:soil", "group:stone",
+ "group:sand", "default:ice", "default:snowblock"})
+
+ -- did we find land?
+ if lp then
+
+ local vec = {
+ x = lp.x - s.x,
+ z = lp.z - s.z
+ }
+
+ yaw = atan2(vec.z, vec.x) + pi / 2 - self.rotate
+ else
+ yaw = random() * 2 * pi
+ end
+
+ else
- yaw = atan(vec.z / vec.x) + 3 * pi / 2 - self.rotate
+ local vec = {
+ x = lp.x - s.x,
+ z = lp.z - s.z
+ }
- if lp.x > s.x then
- yaw = yaw + pi
+ yaw = atan2(vec.z, vec.x) + pi / 2 - self.rotate
end
self.object:setyaw(yaw)
@@ -1393,7 +1400,7 @@ local do_states = function(self, dtime)
-- otherwise randomly turn
elseif random(1, 100) <= 30 then
- local yaw = (random(0, 360) - 180) / 180 * pi
+ yaw = random() * 2 * pi
self.object:setyaw(yaw)
end
@@ -1477,15 +1484,10 @@ local do_states = function(self, dtime)
local vec = {
x = p.x - s.x,
- y = p.y - s.y,
z = p.z - s.z
}
- yaw = atan(vec.z / vec.x) + pi / 2 - self.rotate
-
- if p.x > s.x then
- yaw = yaw + pi
- end
+ yaw = atan2(vec.z, vec.x) - pi / 2 - self.rotate
self.object:setyaw(yaw)
@@ -1652,15 +1654,10 @@ local do_states = function(self, dtime)
local vec = {
x = p.x - s.x,
- y = p.y - s.y,
z = p.z - s.z
}
- yaw = (atan(vec.z / vec.x) + pi / 2) - self.rotate
-
- if p.x > s.x then
- yaw = yaw + pi
- end
+ yaw = (atan2(vec.z, vec.x) - pi / 2) - self.rotate
self.object:setyaw(yaw)
@@ -1737,7 +1734,11 @@ local do_states = function(self, dtime)
})
end
- -- punch player
+ -- punch player (or what player is attached to)
+ local attached = self.attack:get_attach()
+ if attached then
+ self.attack = attached
+ end
self.attack:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups = {fleshy = self.damage}
@@ -1769,11 +1770,7 @@ local do_states = function(self, dtime)
z = p.z - s.z
}
- yaw = (atan(vec.z / vec.x) + pi / 2) - self.rotate
-
- if p.x > s.x then
- yaw = yaw + pi
- end
+ yaw = (atan2(vec.z, vec.x) - pi / 2) - self.rotate
self.object:setyaw(yaw)
@@ -1887,12 +1884,12 @@ local mob_punch = function(self, hitter, tflp, tool_capabilities, dir)
return
end
--- is mob protected?
-if self.protected and hitter:is_player()
-and minetest.is_protected(self.object:getpos(), hitter:get_player_name()) then
- minetest.chat_send_player(hitter:get_player_name(), "Mob has been protected!")
- return
-end
+ -- is mob protected?
+ if self.protected and hitter:is_player()
+ and minetest.is_protected(self.object:getpos(), hitter:get_player_name()) then
+ minetest.chat_send_player(hitter:get_player_name(), "Mob has been protected!")
+ return
+ end
-- weapon wear