From a66d5449f25fd01eed5d5beb19031077c6a07990 Mon Sep 17 00:00:00 2001 From: oilboi <47129783+oilboi@users.noreply.github.com> Date: Sun, 19 Apr 2020 08:06:27 -0400 Subject: [PATCH] Add in much better nether teleport effect --- nether.lua | 45 ++++++++++++++++++++++++++++++++++++++------- 1 file changed, 38 insertions(+), 7 deletions(-) diff --git a/nether.lua b/nether.lua index 43720f5..f5028f6 100644 --- a/nether.lua +++ b/nether.lua @@ -7,6 +7,8 @@ local nether_id = nil --the nether incoming local cool_off_timer = 0 --use this to stop players teleporting back and forth local init_sound = nil local teleport_sound = nil +local opacity = 0 + minetest.register_globalstep(function(dtime) if not minetest.localplayer or not minetest.camera then return @@ -25,31 +27,32 @@ minetest.register_globalstep(function(dtime) local node = minetest.get_node_or_nil(pos) if node and node.name == "nether:portal" and cool_off_timer == 0 then + if init_sound == nil then + init_sound = minetest.sound_play("portal_initialize",{gain=0,pitch=math.random(70,90)/100}) + minetest.sound_fade(init_sound, 0.34, 1) + end if hud_bg_id == nil then hud_bg_id = minetest.localplayer:hud_add({ hud_elem_type = "image", -- see HUD element types, default "text" position = {x=0.5, y=0.5}, name = "", -- default "" scale = {x=-100, y=-100}, -- default {x=0,y=0} - text = "darkness.png", -- default "" + text = "darkness.png^[opacity:"..opacity, -- default "" }) hud_id = minetest.localplayer:hud_add({ hud_elem_type = "image", -- see HUD element types, default "text" position = {x=0.5, y=0.5}, name = "", -- default "" scale = {x=-1, y=-1}, -- default {x=0,y=0} - text = "nether_portal_gui.png", -- default "" + text = "nether_portal_gui.png^[opacity:"..opacity, -- default "" }) nether_id = minetest.localplayer:hud_add({ hud_elem_type = "image", -- see HUD element types, default "text" position = {x=0.5, y=0.5}, name = "", -- default "" scale = {x=0, y=0}, -- default {x=0,y=0} - text = "darkness.png", -- default "" + text = "darkness.png^[opacity:"..opacity, -- default "" }) - init_sound = minetest.sound_play("portal_initialize",{gain=0,pitch=math.random(70,90)/100}) - minetest.sound_fade(init_sound, 0.34, 1) - else --make the hud zoom in local scale = minetest.localplayer:hud_get(hud_id).scale.x @@ -58,7 +61,13 @@ minetest.register_globalstep(function(dtime) elseif scale < -100 then scale = -100 end + opacity = -scale * 2.55 minetest.localplayer:hud_change(hud_id, "scale", {x=scale,y=scale}) + minetest.localplayer:hud_change(hud_id, "text", "nether_portal_gui.png^[opacity:"..opacity) + + minetest.localplayer:hud_change(hud_bg_id, "text", "darkness.png^[opacity:"..opacity) + + minetest.localplayer:hud_change(nether_id, "text", "darkness.png^[opacity:"..opacity) end elseif hud_bg_id and hud_id then --play spooky sounds @@ -78,8 +87,15 @@ minetest.register_globalstep(function(dtime) elseif scale > -1 then scale = -1 end + opacity = -scale * 2.55 minetest.localplayer:hud_change(hud_id, "scale", {x=scale,y=scale}) + minetest.localplayer:hud_change(hud_id, "text", "nether_portal_gui.png^[opacity:"..opacity) + + minetest.localplayer:hud_change(hud_bg_id, "text", "darkness.png^[opacity:"..opacity) + + minetest.localplayer:hud_change(nether_id, "text", "darkness.png^[opacity:"..opacity) + if scale == -1 then minetest.localplayer:hud_remove(hud_bg_id) minetest.localplayer:hud_remove(hud_id) @@ -87,9 +103,10 @@ minetest.register_globalstep(function(dtime) nether_id = nil hud_bg_id = nil hud_id = nil + opacity = 0 end --teleport complete animation - else + elseif cool_off_timer > 0 then local scale = minetest.localplayer:hud_get(nether_id).scale.x if scale == 0 then scale = -1 end if scale > -100 then @@ -97,7 +114,18 @@ minetest.register_globalstep(function(dtime) elseif scale < -100 then scale = -100 end + + opacity = (100+scale) * 2.55 minetest.localplayer:hud_change(nether_id, "scale", {x=scale,y=scale}) + + + minetest.localplayer:hud_change(hud_id, "text", "nether_portal_gui.png^[opacity:"..opacity) + + minetest.localplayer:hud_change(hud_bg_id, "text", "darkness.png^[opacity:"..opacity) + + minetest.localplayer:hud_change(nether_id, "text", "darkness.png^[opacity:"..opacity) + + if scale == -100 then minetest.localplayer:hud_remove(hud_bg_id) minetest.localplayer:hud_remove(hud_id) @@ -105,7 +133,10 @@ minetest.register_globalstep(function(dtime) nether_id = nil hud_bg_id = nil hud_id = nil + opacity = 0 end + else + init_sound = nil end elseif hud_bg_id and hud_id then minetest.localplayer:hud_remove(hud_bg_id) -- 2.44.0