From 044bc4af994deb8a55cfc5a4660d6309058ae539 Mon Sep 17 00:00:00 2001 From: Sumyjkl Date: Wed, 11 Jan 2023 13:24:46 +1100 Subject: [PATCH] completely remove and re-add textures --- balloon.lua | 173 +++++++++++++++---- init.lua | 195 +++------------------- textures/sum_airship.png | Bin 0 -> 681 bytes textures/sum_airship_texture_oak_boat.png | Bin 17290 -> 3921 bytes 4 files changed, 169 insertions(+), 199 deletions(-) create mode 100644 textures/sum_airship.png diff --git a/balloon.lua b/balloon.lua index 8021cff..9a79036 100644 --- a/balloon.lua +++ b/balloon.lua @@ -9,10 +9,153 @@ me.vars = { fuel_time = 30, } +local ship = { + physical = true, + pointable = true, + collisionbox = {-0.6, -0.2, -0.6, 0.6, 0.3, 0.6}, + selectionbox = {-0.7, -0.35, -0.7, 0.7, 0.3, 0.7}, + hp_max = 3, + visual = "mesh", + backface_culling = false, + mesh = "sum_airship_boat.b3d", + textures = {"sum_airship_texture.png"}, + animations = { + idle = {x= 10, y= 90}, + fly = {x= 91, y= 170}, + boost = {x= 91, y= 170}, + }, + on_rightclick = me.on_rightclick, + on_activate = me.on_activate, + get_staticdata = me.get_staticdata, + on_death = me.on_death, + on_step = me.on_step, + _driver = nil, + _removed = false, + _flags = {}, + _itemstring = "sum_hot_air_balloon:balloon_item", +} + +local sounds = { + engine_idle = { + sound_name = "sum_airship_lip_trill", + gain = 1.4, + max_hear_distance = 10, + loop = false, + pitch = 0.75, + }, + engine_stop = { + sound_name = "sum_airship_lip_trill_end", + gain = 2.2, + max_hear_distance = 10, + loop = false, + pitch = 1, + }, + engine_boost = { + sound_name = "sum_airship_lip_trill", + gain = 40, + max_hear_distance = 10, + loop = false, + pitch = 1, + }, +} + +function ship.sound_play(self, sound_obj, sound_instance) + sound_instance.handle = minetest.sound_play(sound_obj.sound_name, { + gain = sound_obj.gain, + max_hear_distance = sound_obj.max_hear_distance, + loop = sound_obj.loop, + pitch = sound_obj.pitch or 1, + object = self.object, + }) + sound_instance.playing = true + sound_instance.time_elapsed = 0 +end + +function ship.sound_stop(sound_instance) + if sound_instance.handle then + minetest.sound_stop(sound_instance.handle) + end + sound_instance.playing = false + sound_instance.time_elapsed = 0 + sound_instance.handle = nil +end + +function ship.update_sound(self, dtime, forward) + local fuel = self._fuel + local is_thrust = forward ~= 0 and self._driver + if not fuel or not type(fuel) == "number" then self._fuel = 0 end + + if self._sounds.engine.time_elapsed > 2.1 + and self._sounds.engine.handle + and self._sounds.engine.playing then + ship.sound_stop(self._sounds.engine) + end + if not self._sounds.engine.playing then + if self._fuel > 1 then + ship.sound_play(self, sounds.engine_boost, self._sounds.engine) + elseif is_thrust then + ship.sound_play(self, sounds.engine_idle, self._sounds.engine) + end + if self._fuel > 1 and self._sounds.engine_stop.playing then + ship.sound_stop(self._sounds.engine_stop) + end + end + + if self._fuel <= 1 and self._sounds.engine.playing then + if self._fuel > 0 and not self._sounds.engine_stop.playing + and self._sounds.engine_stop.time_elapsed == 0 then + ship.sound_play(self, sounds.engine_stop, self._sounds.engine_stop) + end + if not is_thrust + or (self._sounds.engine_stop.time_elapsed == 0 + and self._sounds.engine_stop.playing) then + ship.sound_stop(self._sounds.engine) + end + end +end + +minetest.register_on_respawnplayer(detach_object) + +function ship.on_rightclick(self, clicker) + local item = clicker:get_wielded_item() + local item_name = item:get_name() + if clicker and (string.find(item_name, ":coal") + or string.find(item_name, ":charcoal")) then + if not minetest.is_creative_enabled(clicker:get_player_name()) then + item:take_item() + clicker:set_wielded_item(item) + end + self._fuel = self._fuel + sum_airship.fuel_time + ship.sound_stop(self._sounds.engine) + minetest.sound_play("sum_airship_fire", { + gain = 1, + object = self.object, + }) + else + attach_object(self, clicker) + end +end + +ship.chimney_dist = -1.0 +ship.chimney_yaw = 0.13 +ship.chimney_height = 0.9 +function ship.get_chimney_pos(self) + local p = self.object:get_pos() + local yaw = self.object:get_yaw() + local ret = { + x = p.x + (ship.chimney_dist * math.sin(-yaw + ship.chimney_yaw)), + y = p.y + ship.chimney_height, + z = p.z + (ship.chimney_dist * math.cos(-yaw + ship.chimney_yaw))} + return ret +end + function me.on_activate(self, staticdata, dtime_s) local data = minetest.deserialize(staticdata) if type(data) == "table" then + self._v = data.v + self._last_v = self._v self._itemstring = data.itemstring + self._fuel = data.fuel if data._driver then self._driver = minetest.get_player_by_name((data._driver:get_player_name())) else @@ -216,35 +359,7 @@ function me.on_step(self, dtime, moveresult) end -minetest.register_entity("sum_hot_air_balloon:balloon_ENTITY", { - physical = true, - pointable = true, - collisionbox = {-0.5, -0.5, -0.5, 0.5, 0.2, 0.5}, - selectionbox = {-0.5, -0.5, -0.5, 0.5, 0.2, 0.5}, - hp_max = 3, - visual = "mesh", - mesh = "sum_hot_air_balloon.b3d", - backface_culling = false, - textures = { - "sum_hot_air_balloon_canvas.png", -- balloon - "sum_wood_ash_planks.png", -- cradle - "sum_wood_oak_plank.png", -- lining - "sum_wood_oak_plank.png", -- strut - "sum_wood_oak_plank.png", -- strut - "sum_hot_air_balloon_canvas.png", -- burner - "sum_wood_oak_plank.png", -- small strut - "sum_wood_oak_plank.png", -- small strut - }, - on_rightclick = me.on_rightclick, - on_activate = me.on_activate, - get_staticdata = me.get_staticdata, - on_death = me.on_death, - on_step = me.on_step, - _driver = nil, - _removed = false, - _flags = {}, - _itemstring = "sum_hot_air_balloon:balloon_item", -}) +minetest.register_entity("sum_hot_air_balloon:balloon_ENTITY", ship) minetest.register_craftitem("sum_hot_air_balloon:balloon_item", { description = "Hot air balloon", diff --git a/init.lua b/init.lua index 6005bc8..7ec9d93 100644 --- a/init.lua +++ b/init.lua @@ -125,12 +125,10 @@ end -- Boat entity -- -local boat = { +local ship = { physical = true, pointable = true, -- collisionbox = {-0.5, -0.35, -0.5, 0.5, 0.3, 0.5}, - collisionbox = {-0.6, -0.2, -0.6, 0.6, 0.3, 0.6}, - selectionbox = {-0.7, -0.35, -0.7, 0.7, 0.3, 0.7}, visual = "mesh", mesh = "sum_airship_boat.b3d", textures = {"sum_airship_texture_oak_boat.png"}, @@ -169,121 +167,8 @@ local boat = { } } -local sounds = { - engine_idle = { - sound_name = "sum_airship_lip_trill", - gain = 1.4, - max_hear_distance = 10, - loop = false, - pitch = 0.75, - }, - engine_stop = { - sound_name = "sum_airship_lip_trill_end", - gain = 2.2, - max_hear_distance = 10, - loop = false, - pitch = 1, - }, - engine_boost = { - sound_name = "sum_airship_lip_trill", - gain = 40, - max_hear_distance = 10, - loop = false, - pitch = 1, - }, -} -function boat.sound_play(self, sound_obj, sound_instance) - sound_instance.handle = minetest.sound_play(sound_obj.sound_name, { - gain = sound_obj.gain, - max_hear_distance = sound_obj.max_hear_distance, - loop = sound_obj.loop, - pitch = sound_obj.pitch or 1, - object = self.object, - }) - sound_instance.playing = true - sound_instance.time_elapsed = 0 -end - -function boat.sound_stop(sound_instance) - if sound_instance.handle then - minetest.sound_stop(sound_instance.handle) - end - sound_instance.playing = false - sound_instance.time_elapsed = 0 - sound_instance.handle = nil -end - -function boat.update_sound(self, dtime, forward) - local fuel = self._fuel - local is_thrust = forward ~= 0 and self._driver - if not fuel or not type(fuel) == "number" then self._fuel = 0 end - - if self._sounds.engine.time_elapsed > 2.1 - and self._sounds.engine.handle - and self._sounds.engine.playing then - boat.sound_stop(self._sounds.engine) - end - if not self._sounds.engine.playing then - if self._fuel > 1 then - boat.sound_play(self, sounds.engine_boost, self._sounds.engine) - elseif is_thrust then - boat.sound_play(self, sounds.engine_idle, self._sounds.engine) - end - if self._fuel > 1 and self._sounds.engine_stop.playing then - boat.sound_stop(self._sounds.engine_stop) - end - end - - if self._fuel <= 1 and self._sounds.engine.playing then - if self._fuel > 0 and not self._sounds.engine_stop.playing - and self._sounds.engine_stop.time_elapsed == 0 then - boat.sound_play(self, sounds.engine_stop, self._sounds.engine_stop) - end - if not is_thrust - or (self._sounds.engine_stop.time_elapsed == 0 - and self._sounds.engine_stop.playing) then - boat.sound_stop(self._sounds.engine) - end - end -end - -minetest.register_on_respawnplayer(detach_object) - -function boat.on_rightclick(self, clicker) - local item = clicker:get_wielded_item() - local item_name = item:get_name() - if clicker and (string.find(item_name, ":coal") - or string.find(item_name, ":charcoal")) then - if not minetest.is_creative_enabled(clicker:get_player_name()) then - item:take_item() - clicker:set_wielded_item(item) - end - self._fuel = self._fuel + sum_airship.fuel_time - boat.sound_stop(self._sounds.engine) - minetest.sound_play("sum_airship_fire", { - gain = 1, - object = self.object, - }) - else - attach_object(self, clicker) - end -end - -boat.chimney_dist = -1.0 -boat.chimney_yaw = 0.13 -boat.chimney_height = 0.9 -function boat.get_chimney_pos(self) - local p = self.object:get_pos() - local yaw = self.object:get_yaw() - local ret = { - x = p.x + (boat.chimney_dist * math.sin(-yaw + boat.chimney_yaw)), - y = p.y + boat.chimney_height, - z = p.z + (boat.chimney_dist * math.cos(-yaw + boat.chimney_yaw))} - return ret -end - -function boat.on_activate(self, staticdata, dtime_s) +function ship.on_activate(self, staticdata, dtime_s) self.object:set_armor_groups({fleshy = 100}) self.object:set_animation(self.animations.idle, 25) local data = minetest.deserialize(staticdata) @@ -292,12 +177,6 @@ function boat.on_activate(self, staticdata, dtime_s) self._last_v = self._v self._itemstring = data.itemstring self._fuel = data.fuel - - while #data.textures < 5 do - table.insert(data.textures, data.textures[1]) - end - - self.object:set_properties({textures = data.textures}) end self._sounds = { -- workaround for copy vs reference issue engine = { @@ -315,7 +194,7 @@ function boat.on_activate(self, staticdata, dtime_s) } end -function boat.get_staticdata(self) +function ship.get_staticdata(self) return minetest.serialize({ v = self._v, itemstring = self._itemstring, @@ -324,10 +203,7 @@ function boat.get_staticdata(self) }) end -function boat.on_death(self, killer) - if minetest.get_modpath("mcl_burning") then - mcl_burning.extinguish(self.object) end - +function ship.on_death(self, killer) if killer and killer:is_player() and minetest.is_creative_enabled(killer:get_player_name()) then local inv = killer:get_inventory() if not inv:contains_item("main", self._itemstring) then @@ -345,26 +221,26 @@ function boat.on_death(self, killer) self._driver = nil self._passenger = nil --- stop sounds + -- stop sounds if self._sounds then if self._sounds.engine and self._sounds.engine.handle then - boat.sound_stop(self._sounds.engine) + ship.sound_stop(self._sounds.engine) end if self._sounds.engine_stop and self._sounds.engine_stop.handle then - boat.sound_stop(self._sounds.engine_stop) + ship.sound_stop(self._sounds.engine_stop) end end end -function boat.on_punch(self, puncher, time_from_last_punch, tool_capabilities, dir, damage) +function ship.on_punch(self, puncher, time_from_last_punch, tool_capabilities, dir, damage) if damage > 0 then self._regen_timer = 0 end end -function boat.sound_countdown(self, dtime) +function ship.sound_countdown(self, dtime) for _, sound in pairs(self._sounds) do if sound.playing then sound.time_elapsed = sound.time_elapsed + dtime @@ -411,18 +287,11 @@ balloon_nodes[8] = { p = vector.new(balloon.length*vdiag, balloon.offset, balloon.length*vdiag), dir = vector.new(-vdiag, 0, -vdiag),} -function boat.get_balloon_collide(self) +function ship.get_balloon_collide(self) local force = vector.new() local o = self.object:get_pos() for _, check in pairs(balloon_nodes) do local n = minetest.get_node(vector.add(check.p, o)) - -- minetest.add_particle({ - -- pos = vector.add(o, check.p), - -- velocity = vector.new(0, 1, 0), - -- expirationtime = math.random(0.5, 2), - -- size = math.random(0.1, 4), - -- texture = "sum_airship_smoke.png", - -- }) if n and minetest.registered_nodes[n.name] and minetest.registered_nodes[n.name].walkable then force = vector.add(force, check.dir) @@ -431,15 +300,11 @@ function boat.get_balloon_collide(self) return force end -function boat.on_step(self, dtime, moveresult) - boat.sound_countdown(self, dtime) - if minetest.get_modpath("mcl_burning") then - mcl_burning.tick(self.object, dtime, self) end - +function ship.on_step(self, dtime, moveresult) + ship.sound_countdown(self, dtime) self._v = get_v(self.object:get_velocity()) * get_sign(self._v) local v_factor = 1 - local v_slowdown = 0.1 - local v = self.object:get_velocity() + local v = self.object:get_velocity() local p = self.object:get_pos() local in_water = minetest.get_item_group(minetest.get_node(p).name, "liquid") ~= 0 local on_water = (minetest.get_item_group(minetest.get_node(vector.offset(p, 0, -0.2, 0)).name, "liquid") ~= 0 and not in_water) @@ -457,18 +322,8 @@ function boat.on_step(self, dtime, moveresult) end self._regen_timer = regen_timer - if moveresult and moveresult.collides then - for _, collision in pairs(moveresult.collisions) do - local pos = collision.node_pos - if collision.type == "node" and minetest.get_item_group(minetest.get_node(pos).name, "dig_by_boat") > 0 then - minetest.dig_node(pos) - end - end - end - - - local climb = 0 - local forward = 0 + local climb = 0 + local forward = 0 local had_passenger = self._passenger @@ -514,14 +369,14 @@ function boat.on_step(self, dtime, moveresult) if ctrl.up then -- Forwards forward = forward + 1 - elseif ctrl.down then - forward = forward - 1 - end + elseif ctrl.down then + forward = forward - 1 + end if ctrl.aux1 then climb = climb - 1 - elseif ctrl.jump then - climb = climb + 1 - end + elseif ctrl.jump then + climb = climb + 1 + end if ctrl.left then if self._v < 0 then @@ -589,7 +444,7 @@ function boat.on_step(self, dtime, moveresult) end if self._driver then - local collide_force = boat.get_balloon_collide(self) + local collide_force = ship.get_balloon_collide(self) -- collide_force = vector.normalize(collide_force) if collide_force ~= vector.new() then collide_force = vector.multiply(collide_force, 0.1) @@ -610,9 +465,9 @@ function boat.on_step(self, dtime, moveresult) self.object:set_acceleration(vel) - local chimney_pos = boat.get_chimney_pos(self) + local chimney_pos = ship.get_chimney_pos(self) - boat.update_sound(self, dtime, forward) + ship.update_sound(self, dtime, forward) local is_thrust = self._driver and forward ~= 0 @@ -639,7 +494,7 @@ function boat.on_step(self, dtime, moveresult) end -- Register one entity for all boat types -minetest.register_entity("sum_airship:boat", boat) +minetest.register_entity("sum_airship:boat", ship) local boat_ids = { "main" } local names = { S("Oak Airship") } diff --git a/textures/sum_airship.png b/textures/sum_airship.png new file mode 100644 index 0000000000000000000000000000000000000000..5b675d73dcf6e27c198d4dab2156c6e7ffb599c5 GIT binary patch literal 681 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