forked from VoxeLibre/VoxeLibre
If mob is in daylight and ignites_in_daylight = true, make mob burn
This commit is contained in:
parent
49b01dca4f
commit
7e8e63b0e3
|
@ -355,6 +355,10 @@ function mobs:register_mob(name, def)
|
||||||
backup_visual_size = def.visual_size,
|
backup_visual_size = def.visual_size,
|
||||||
backup_collisionbox = collisionbox,
|
backup_collisionbox = collisionbox,
|
||||||
backup_selectionbox = def.selectionbox or def.collisionbox,
|
backup_selectionbox = def.selectionbox or def.collisionbox,
|
||||||
|
|
||||||
|
|
||||||
|
--fire timer
|
||||||
|
burn_timer = 0,
|
||||||
--end j4i stuff
|
--end j4i stuff
|
||||||
|
|
||||||
-- MCL2 extensions
|
-- MCL2 extensions
|
||||||
|
|
|
@ -12,6 +12,7 @@ local minetest_yaw_to_dir = minetest.yaw_to_dir
|
||||||
local minetest_get_item_group = minetest.get_item_group
|
local minetest_get_item_group = minetest.get_item_group
|
||||||
local minetest_get_node = minetest.get_node
|
local minetest_get_node = minetest.get_node
|
||||||
local minetest_line_of_sight = minetest.line_of_sight
|
local minetest_line_of_sight = minetest.line_of_sight
|
||||||
|
local minetest_get_node_light = minetest.get_node_light
|
||||||
|
|
||||||
local DOUBLE_PI = math.pi * 2
|
local DOUBLE_PI = math.pi * 2
|
||||||
local THIRTY_SECONDTH_PI = DOUBLE_PI * 0.03125
|
local THIRTY_SECONDTH_PI = DOUBLE_PI * 0.03125
|
||||||
|
@ -828,10 +829,31 @@ mobs.mob_step = function(self, dtime)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
--set mobs on fire when burned by sunlight
|
||||||
|
if self.ignited_by_sunlight then
|
||||||
|
local pos = self.object:get_pos()
|
||||||
|
pos.y = pos.y + 0.1
|
||||||
|
|
||||||
|
if self.burn_timer > 0 then
|
||||||
|
self.burn_timer = self.burn_timer - dtime
|
||||||
|
|
||||||
|
if self.burn_timer <= 0 then
|
||||||
|
self.health = self.health - 4
|
||||||
|
self.burn_timer = 0
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if self.burn_timer == 0 and minetest_get_node_light(pos) > 12 and minetest_get_node_light(pos, 0.5) == 15 then
|
||||||
|
mcl_burning.set_on_fire(self.object, 1)
|
||||||
|
self.burn_timer = 1 --1.7 seconds
|
||||||
|
self.pause_timer = 0.4
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
--color modifier which coincides with the pause_timer
|
--color modifier which coincides with the pause_timer
|
||||||
if self.old_health and self.health < self.old_health then
|
if self.old_health and self.health < self.old_health then
|
||||||
self.object:set_texture_mod("^[colorize:red:120")
|
self.object:set_texture_mod("^[colorize:red:120")
|
||||||
end
|
end
|
||||||
self.old_health = self.health
|
self.old_health = self.health
|
||||||
|
|
||||||
--do death logic (animation, poof, explosion, etc)
|
--do death logic (animation, poof, explosion, etc)
|
||||||
|
|
|
@ -124,14 +124,14 @@ mobs.punch_attack_walk = function(self,dtime)
|
||||||
|
|
||||||
if distance_from_attacking >= self.minimum_follow_distance then
|
if distance_from_attacking >= self.minimum_follow_distance then
|
||||||
mobs.set_velocity(self, self.run_velocity)
|
mobs.set_velocity(self, self.run_velocity)
|
||||||
|
mobs.set_mob_animation(self, "run")
|
||||||
else
|
else
|
||||||
mobs.set_velocity(self, 0)
|
mobs.set_velocity(self, 0)
|
||||||
|
mobs.set_mob_animation(self, "stand")
|
||||||
end
|
end
|
||||||
|
|
||||||
mobs.set_yaw_while_attacking(self)
|
mobs.set_yaw_while_attacking(self)
|
||||||
|
|
||||||
mobs.set_mob_animation(self, "run")
|
|
||||||
|
|
||||||
--make punchy mobs jump
|
--make punchy mobs jump
|
||||||
--check for nodes to jump over
|
--check for nodes to jump over
|
||||||
--explosive mobs will just ride against walls for now
|
--explosive mobs will just ride against walls for now
|
||||||
|
|
Loading…
Reference in New Issue