Remove self:do_jump()
parent
57c7b886f7
commit
677610f152
|
@ -28,7 +28,7 @@ function mobs:register_mob(name, def)
|
|||
follow = def.follow or "",
|
||||
|
||||
punch_timer = 0,
|
||||
env_damage_timer = 0, -- only if state = "attack"
|
||||
env_damage_timer = 0,
|
||||
state = "stand",
|
||||
v_start = false,
|
||||
to_player = nil,
|
||||
|
@ -45,31 +45,25 @@ function mobs:register_mob(name, def)
|
|||
self.object:setvelocity({x = x, y = self.object:getvelocity().y, z = z})
|
||||
end,
|
||||
|
||||
do_jump = function(self)
|
||||
local vel = self.object:getvelocity()
|
||||
if self:get_velocity() < 0.5 and vel.y == 0 then
|
||||
vel.y = 6
|
||||
self.object:setvelocity(vel)
|
||||
return true
|
||||
end
|
||||
end,
|
||||
|
||||
get_velocity = function(self)
|
||||
local v = self.object:getvelocity()
|
||||
return (v.x^2 + v.z^2) ^ (0.5)
|
||||
end,
|
||||
|
||||
set_animation = function(self, type)
|
||||
get_speed = function(self, type)
|
||||
local vel = 0
|
||||
if type == "walk" then
|
||||
vel = self.walk_velocity
|
||||
elseif type == "run" then
|
||||
vel = self.run_velocity
|
||||
end
|
||||
self:set_velocity(vel)
|
||||
return vel
|
||||
end,
|
||||
|
||||
set_animation = function(self, type)
|
||||
self:set_velocity(self:get_speed(type))
|
||||
|
||||
if not self.animation then return end
|
||||
|
||||
if self.animation.current == type then
|
||||
return
|
||||
end
|
||||
|
@ -112,9 +106,10 @@ function mobs:register_mob(name, def)
|
|||
end
|
||||
end
|
||||
|
||||
local vel = self.object:getvelocity()
|
||||
local node = minetest.get_node(my_pos).name
|
||||
local accel = {x = 0, y = 0, z = 0}
|
||||
if self.object:getvelocity().y > 0.1 then
|
||||
if vel.y > 0.1 then
|
||||
local yaw = self.object:getyaw()
|
||||
if self.drawtype == "side" then
|
||||
yaw = yaw + (math.pi/2)
|
||||
|
@ -135,35 +130,38 @@ function mobs:register_mob(name, def)
|
|||
end
|
||||
self.punch_timer = 0
|
||||
|
||||
local real_speed = self:get_speed(self.state)
|
||||
if self:get_velocity() < real_speed - 0.15 and vel.y == 0 then
|
||||
vel.y = 6
|
||||
self.object:setvelocity(vel)
|
||||
else
|
||||
self:set_velocity(real_speed)
|
||||
end
|
||||
|
||||
-- Env damage
|
||||
self.env_damage_timer = self.env_damage_timer + dtime
|
||||
if self.env_damage_timer >= 1 then
|
||||
self.env_damage_timer = 0
|
||||
|
||||
local light = minetest.get_node_light(my_pos) or 16
|
||||
local damage = 0
|
||||
|
||||
if self.light_damage ~= 0 and my_pos.y > -10 and light > 7 then
|
||||
damage = self.light_damage
|
||||
end
|
||||
if self.water_damage ~= 0 and minetest.get_item_group(node, "water") ~= 0 then
|
||||
damage = damage + self.water_damage
|
||||
end
|
||||
if self.lava_damage ~= 0 and minetest.get_item_group(node, "lava") ~= 0 then
|
||||
damage = damage + self.lava_damage
|
||||
end
|
||||
|
||||
if damage ~= 0 then
|
||||
self.object:set_hp(self.object:get_hp() - damage)
|
||||
end
|
||||
|
||||
if damage > 0 then
|
||||
minetest.sound_play("player_damage", {object = self.object, gain = 0.25})
|
||||
if self.object:get_hp() <= 0 then
|
||||
minetest.sound_play("player_death", {object = self.object, gain = 0.4})
|
||||
self.object:remove()
|
||||
return
|
||||
end
|
||||
local light = minetest.get_node_light(my_pos) or 16
|
||||
local damage = 0
|
||||
|
||||
if self.light_damage ~= 0 and my_pos.y > -10 and light > 7 then
|
||||
damage = self.light_damage
|
||||
end
|
||||
if self.water_damage ~= 0 and minetest.get_item_group(node, "water") ~= 0 then
|
||||
damage = damage + self.water_damage
|
||||
end
|
||||
if self.lava_damage ~= 0 and minetest.get_item_group(node, "lava") ~= 0 then
|
||||
damage = damage + self.lava_damage
|
||||
end
|
||||
|
||||
if damage ~= 0 then
|
||||
self.object:set_hp(self.object:get_hp() - damage)
|
||||
end
|
||||
|
||||
if damage > 0 then
|
||||
minetest.sound_play("player_damage", {object = self.object, gain = 0.25})
|
||||
if self.object:get_hp() <= 0 then
|
||||
minetest.sound_play("player_death", {object = self.object, gain = 0.4})
|
||||
self.object:remove()
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -175,7 +173,6 @@ function mobs:register_mob(name, def)
|
|||
dist = (vec.x^2 + vec.y^2 + vec.z^2) ^ 0.5
|
||||
|
||||
if dist < self.view_range and player:get_hp() > 0 then
|
||||
self.state = "attack"
|
||||
self.to_player = player
|
||||
break
|
||||
end
|
||||
|
@ -241,8 +238,6 @@ function mobs:register_mob(name, def)
|
|||
|
||||
if not self.v_start then
|
||||
self.v_start = true
|
||||
else
|
||||
self:do_jump()
|
||||
end
|
||||
|
||||
local yaw = math.atan(vec.z / vec.x) + math.pi/2
|
||||
|
@ -263,22 +258,16 @@ function mobs:register_mob(name, def)
|
|||
end
|
||||
|
||||
if self.state == "stand" or self.state == "walk" then
|
||||
local moving = (self.state == "walk")
|
||||
local other_state = "walk"
|
||||
|
||||
local r, r2 = math.random(15), 0
|
||||
if moving then
|
||||
if self:do_jump() == true then
|
||||
r2 = math.random(10)
|
||||
end
|
||||
if self.state == "walk" then
|
||||
other_state = "stand"
|
||||
end
|
||||
|
||||
local r = math.random(30)
|
||||
if r == 1 then
|
||||
self:set_animation(other_state)
|
||||
elseif r == 2 or r2 == 2 then
|
||||
elseif r == 2 or r == 3 then
|
||||
self.object:setyaw(self.object:getyaw() + (math.random(-90, 90) / 180 * math.pi))
|
||||
self:set_animation(self.state)
|
||||
end
|
||||
end
|
||||
end,
|
||||
|
@ -287,7 +276,7 @@ function mobs:register_mob(name, def)
|
|||
self.object:set_armor_groups({fleshy = self.armor})
|
||||
self.object:setacceleration({x = 0, y = -10, z = 0})
|
||||
self:set_animation("stand")
|
||||
self.object:setyaw(math.random(360) / 180 * math.pi)
|
||||
self.object:setyaw(math.random(360) / 180 * math.pi)
|
||||
self.lifetimer = self.lifetimer - dtime_s
|
||||
if staticdata then
|
||||
local tmp = minetest.deserialize(staticdata)
|
||||
|
|
Loading…
Reference in New Issue