forked from Mineclonia/Mineclonia
Make boats regenerate health and shake when damaged
This commit is contained in:
parent
86dc33c12f
commit
2d0612fa81
|
@ -52,6 +52,7 @@ local boat = {
|
||||||
textures = {"mcl_boats_texture_oak_boat.png"},
|
textures = {"mcl_boats_texture_oak_boat.png"},
|
||||||
visual_size = boat_visual_size,
|
visual_size = boat_visual_size,
|
||||||
hp_max = boat_max_hp,
|
hp_max = boat_max_hp,
|
||||||
|
damage_texture_modifier = "^[colorize:white:0",
|
||||||
|
|
||||||
_driver = nil, -- Attached driver (player) or nil if none
|
_driver = nil, -- Attached driver (player) or nil if none
|
||||||
_passenger = nil,
|
_passenger = nil,
|
||||||
|
@ -60,6 +61,8 @@ local boat = {
|
||||||
_removed = false, -- If true, boat entity is considered removed (e.g. after punch) and should be ignored
|
_removed = false, -- If true, boat entity is considered removed (e.g. after punch) and should be ignored
|
||||||
_itemstring = "mcl_boats:boat", -- Itemstring of the boat item (implies boat type)
|
_itemstring = "mcl_boats:boat", -- Itemstring of the boat item (implies boat type)
|
||||||
_animation = 0, -- 0: not animated; 1: paddling forwards; -1: paddling forwards
|
_animation = 0, -- 0: not animated; 1: paddling forwards; -1: paddling forwards
|
||||||
|
_regen_timer = 0,
|
||||||
|
_damage_anim = 0,
|
||||||
}
|
}
|
||||||
|
|
||||||
local function detach_player(player, change_pos)
|
local function detach_player(player, change_pos)
|
||||||
|
@ -130,13 +133,13 @@ end
|
||||||
|
|
||||||
|
|
||||||
function boat.on_activate(self, staticdata, dtime_s)
|
function boat.on_activate(self, staticdata, dtime_s)
|
||||||
--self.object:set_armor_groups({immortal = 1})
|
self.object:set_armor_groups({fleshy = 100})
|
||||||
local data = minetest.deserialize(staticdata)
|
local data = minetest.deserialize(staticdata)
|
||||||
if type(data) == "table" then
|
if type(data) == "table" then
|
||||||
self._v = data.v
|
self._v = data.v
|
||||||
self._last_v = self._v
|
self._last_v = self._v
|
||||||
self._itemstring = data.itemstring
|
self._itemstring = data.itemstring
|
||||||
self.object:set_properties({textures = data.textures, damage_texture_modifier = ""})
|
self.object:set_properties({textures = data.textures})
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -169,6 +172,12 @@ function boat.on_death(self, killer)
|
||||||
self._passenger = nil
|
self._passenger = nil
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function boat.on_punch(self, puncher, time_from_last_punch, tool_capabilities, dir, damage)
|
||||||
|
if damage > 0 then
|
||||||
|
self._regen_timer = 0
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
function boat.on_step(self, dtime, moveresult)
|
function boat.on_step(self, dtime, moveresult)
|
||||||
self._v = get_v(self.object:get_velocity()) * get_sign(self._v)
|
self._v = get_v(self.object:get_velocity()) * get_sign(self._v)
|
||||||
local on_water = true
|
local on_water = true
|
||||||
|
@ -187,11 +196,16 @@ function boat.on_step(self, dtime, moveresult)
|
||||||
v_slowdown = 0.05
|
v_slowdown = 0.05
|
||||||
end
|
end
|
||||||
|
|
||||||
--local yaw = self.object:get_yaw()
|
local hp = self.object:get_hp()
|
||||||
--local hp = math.min(self.object:get_hp() + 2 * dtime, boat_max_hp)
|
local regen_timer = self._regen_timer + dtime
|
||||||
--self.object:set_rotation(vector.new((boat_max_hp - hp) / boat_max_hp, 0, 0))
|
if hp >= boat_max_hp then
|
||||||
self.object:set_hp(self.object:get_hp() + 2 * dtime)
|
regen_timer = 0
|
||||||
--self.object:set_yaw(yaw)
|
elseif regen_timer >= 0.5 then
|
||||||
|
hp = hp + 1
|
||||||
|
self.object:set_hp(hp)
|
||||||
|
regen_timer = 0
|
||||||
|
end
|
||||||
|
self._regen_timer = regen_timer
|
||||||
|
|
||||||
if moveresult and moveresult.collides then
|
if moveresult and moveresult.collides then
|
||||||
for _, collision in ipairs(moveresult.collisions) do
|
for _, collision in ipairs(moveresult.collisions) do
|
||||||
|
@ -326,6 +340,10 @@ function boat.on_step(self, dtime, moveresult)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local yaw = self.object:get_yaw()
|
||||||
|
local anim = (boat_max_hp - hp - regen_timer * 2) / boat_max_hp * math.pi / 4
|
||||||
|
|
||||||
|
self.object:set_rotation(vector.new(anim, yaw, anim))
|
||||||
self.object:set_velocity(new_velo)
|
self.object:set_velocity(new_velo)
|
||||||
self.object:set_acceleration(new_acce)
|
self.object:set_acceleration(new_acce)
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue