diff options
author | Wuzzy <almikes@aol.com> | 2014-07-14 17:28:51 +0200 |
---|---|---|
committer | Wuzzy <almikes@aol.com> | 2014-07-14 17:28:51 +0200 |
commit | 21f053270f0015438e28b347a87ba9a151c59aff (patch) | |
tree | 3dd7f777d06c6c3c4ef08a6c4485825c26ac84fb | |
parent | a91e4c79ce2db34f8bfcfd0717b02b54e10b9363 (diff) |
Add effect metadata
Effect metadata is a means to store additional user-defined data for the effect,
which can be reused when the cancel function of the effect is called.
This commit also adds a new example (blind) to demonstrate usage of that.
-rw-r--r-- | examples.lua | 25 | ||||
-rw-r--r-- | init.lua | 9 | ||||
-rw-r--r-- | textures/playereffects_example_black.png | bin | 0 -> 69 bytes |
3 files changed, 30 insertions, 4 deletions
diff --git a/examples.lua b/examples.lua index 69950fe..ce3fbcd 100644 --- a/examples.lua +++ b/examples.lua @@ -1,4 +1,20 @@ ----- EXAMPLE EFFECT TYPES ----- +-- Makes the player screen black for 5 seconds (very experimental!) +playereffects.register_effect_type("blind", "Blind", nil, {}, + function(player) + local hudid = player:hud_add({ + hud_elem_type = "image", + position = { x=0.5, y=0.5 }, + scale = { x=-100, y=-100 }, + text = "playereffects_example_black.png", + }) + return { hudid = hudid } + end, + function(effect) + local player = minetest.get_player_by_name(effect.playername) + player:hud_remove(effect.metadata.hudid) + end +) -- Makes the user faster playereffects.register_effect_type("high_speed", "High speed", nil, {"speed"}, @@ -75,7 +91,14 @@ playereffects.register_effect_type("stress", "Stress Test Effect", nil, {}, ------ Chat commands for the example effects ------ - +minetest.register_chatcommand("blind", { + params = "", + description = "Makes your screen black for a short time.", + privs = {}, + func = function(name, param) + playereffects.apply_effect_type("blind", 5, minetest.get_player_by_name(name)) + end, +}) minetest.register_chatcommand("fast", { params = "", description = "Makes you fast for a short time.", @@ -105,6 +105,8 @@ function playereffects.apply_effect_type(effect_type_id, duration, player) hudids = {text_id=nil, icon_id=nil} end + local metadata = playereffects.effect_types[effect_type_id].apply(player) + local effect = { playername = playername, effect_id = effect_id, @@ -113,11 +115,11 @@ function playereffects.apply_effect_type(effect_type_id, duration, player) time_left = duration, hudids = hudids, hudpos = free_hudpos, - } + metadata = metadata, + } playereffects.effects[effect_id] = effect - - playereffects.effect_types[effect_type_id].apply(player) + minetest.log("action", "[playereffects] Effect type "..effect_type_id.." applied to player "..playername.."!") minetest.after(duration, function(effect_id) playereffects.cancel_effect(effect_id) end, effect_id) end @@ -202,6 +204,7 @@ function playereffects.save_to_file() time_left = new_duration, start_time = effect.start_time, playername = effect.playername, + metadata = effect.metadata } if(inactive_effects[effect.playername] == nil) then inactive_effects[effect.playername] = {} diff --git a/textures/playereffects_example_black.png b/textures/playereffects_example_black.png Binary files differnew file mode 100644 index 0000000..cf671d1 --- /dev/null +++ b/textures/playereffects_example_black.png |