Skip to content

Commit 677610f

Browse files
committed
Remove self:do_jump()
1 parent 57c7b88 commit 677610f

File tree

1 file changed

+44
-55
lines changed

1 file changed

+44
-55
lines changed

mods/mobs/api.lua

Lines changed: 44 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ function mobs:register_mob(name, def)
2828
follow = def.follow or "",
2929

3030
punch_timer = 0,
31-
env_damage_timer = 0, -- only if state = "attack"
31+
env_damage_timer = 0,
3232
state = "stand",
3333
v_start = false,
3434
to_player = nil,
@@ -45,31 +45,25 @@ function mobs:register_mob(name, def)
4545
self.object:setvelocity({x = x, y = self.object:getvelocity().y, z = z})
4646
end,
4747

48-
do_jump = function(self)
49-
local vel = self.object:getvelocity()
50-
if self:get_velocity() < 0.5 and vel.y == 0 then
51-
vel.y = 6
52-
self.object:setvelocity(vel)
53-
return true
54-
end
55-
end,
56-
5748
get_velocity = function(self)
5849
local v = self.object:getvelocity()
5950
return (v.x^2 + v.z^2) ^ (0.5)
6051
end,
6152

62-
set_animation = function(self, type)
53+
get_speed = function(self, type)
6354
local vel = 0
6455
if type == "walk" then
6556
vel = self.walk_velocity
6657
elseif type == "run" then
6758
vel = self.run_velocity
6859
end
69-
self:set_velocity(vel)
60+
return vel
61+
end,
62+
63+
set_animation = function(self, type)
64+
self:set_velocity(self:get_speed(type))
7065

7166
if not self.animation then return end
72-
7367
if self.animation.current == type then
7468
return
7569
end
@@ -112,9 +106,10 @@ function mobs:register_mob(name, def)
112106
end
113107
end
114108

109+
local vel = self.object:getvelocity()
115110
local node = minetest.get_node(my_pos).name
116111
local accel = {x = 0, y = 0, z = 0}
117-
if self.object:getvelocity().y > 0.1 then
112+
if vel.y > 0.1 then
118113
local yaw = self.object:getyaw()
119114
if self.drawtype == "side" then
120115
yaw = yaw + (math.pi/2)
@@ -135,35 +130,38 @@ function mobs:register_mob(name, def)
135130
end
136131
self.punch_timer = 0
137132

133+
local real_speed = self:get_speed(self.state)
134+
if self:get_velocity() < real_speed - 0.15 and vel.y == 0 then
135+
vel.y = 6
136+
self.object:setvelocity(vel)
137+
else
138+
self:set_velocity(real_speed)
139+
end
140+
138141
-- Env damage
139-
self.env_damage_timer = self.env_damage_timer + dtime
140-
if self.env_damage_timer >= 1 then
141-
self.env_damage_timer = 0
142-
143-
local light = minetest.get_node_light(my_pos) or 16
144-
local damage = 0
145-
146-
if self.light_damage ~= 0 and my_pos.y > -10 and light > 7 then
147-
damage = self.light_damage
148-
end
149-
if self.water_damage ~= 0 and minetest.get_item_group(node, "water") ~= 0 then
150-
damage = damage + self.water_damage
151-
end
152-
if self.lava_damage ~= 0 and minetest.get_item_group(node, "lava") ~= 0 then
153-
damage = damage + self.lava_damage
154-
end
155-
156-
if damage ~= 0 then
157-
self.object:set_hp(self.object:get_hp() - damage)
158-
end
159-
160-
if damage > 0 then
161-
minetest.sound_play("player_damage", {object = self.object, gain = 0.25})
162-
if self.object:get_hp() <= 0 then
163-
minetest.sound_play("player_death", {object = self.object, gain = 0.4})
164-
self.object:remove()
165-
return
166-
end
142+
local light = minetest.get_node_light(my_pos) or 16
143+
local damage = 0
144+
145+
if self.light_damage ~= 0 and my_pos.y > -10 and light > 7 then
146+
damage = self.light_damage
147+
end
148+
if self.water_damage ~= 0 and minetest.get_item_group(node, "water") ~= 0 then
149+
damage = damage + self.water_damage
150+
end
151+
if self.lava_damage ~= 0 and minetest.get_item_group(node, "lava") ~= 0 then
152+
damage = damage + self.lava_damage
153+
end
154+
155+
if damage ~= 0 then
156+
self.object:set_hp(self.object:get_hp() - damage)
157+
end
158+
159+
if damage > 0 then
160+
minetest.sound_play("player_damage", {object = self.object, gain = 0.25})
161+
if self.object:get_hp() <= 0 then
162+
minetest.sound_play("player_death", {object = self.object, gain = 0.4})
163+
self.object:remove()
164+
return
167165
end
168166
end
169167

@@ -175,7 +173,6 @@ function mobs:register_mob(name, def)
175173
dist = (vec.x^2 + vec.y^2 + vec.z^2) ^ 0.5
176174

177175
if dist < self.view_range and player:get_hp() > 0 then
178-
self.state = "attack"
179176
self.to_player = player
180177
break
181178
end
@@ -241,8 +238,6 @@ function mobs:register_mob(name, def)
241238

242239
if not self.v_start then
243240
self.v_start = true
244-
else
245-
self:do_jump()
246241
end
247242

248243
local yaw = math.atan(vec.z / vec.x) + math.pi/2
@@ -263,22 +258,16 @@ function mobs:register_mob(name, def)
263258
end
264259

265260
if self.state == "stand" or self.state == "walk" then
266-
local moving = (self.state == "walk")
267261
local other_state = "walk"
268-
269-
local r, r2 = math.random(15), 0
270-
if moving then
271-
if self:do_jump() == true then
272-
r2 = math.random(10)
273-
end
262+
if self.state == "walk" then
274263
other_state = "stand"
275264
end
276265

266+
local r = math.random(30)
277267
if r == 1 then
278268
self:set_animation(other_state)
279-
elseif r == 2 or r2 == 2 then
269+
elseif r == 2 or r == 3 then
280270
self.object:setyaw(self.object:getyaw() + (math.random(-90, 90) / 180 * math.pi))
281-
self:set_animation(self.state)
282271
end
283272
end
284273
end,
@@ -287,7 +276,7 @@ function mobs:register_mob(name, def)
287276
self.object:set_armor_groups({fleshy = self.armor})
288277
self.object:setacceleration({x = 0, y = -10, z = 0})
289278
self:set_animation("stand")
290-
self.object:setyaw(math.random(360) / 180 * math.pi)
279+
self.object:setyaw(math.random(360) / 180 * math.pi)
291280
self.lifetimer = self.lifetimer - dtime_s
292281
if staticdata then
293282
local tmp = minetest.deserialize(staticdata)

0 commit comments

Comments
 (0)