Remove self:do_jump()

master
SmallJoker 2014-11-09 20:56:49 +01:00
parent 57c7b886f7
commit 677610f152
1 changed files with 44 additions and 55 deletions

View File

@ -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)