summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWuzzy <almikes@aol.com>2014-07-14 17:28:51 +0200
committerWuzzy <almikes@aol.com>2014-07-14 17:28:51 +0200
commit21f053270f0015438e28b347a87ba9a151c59aff (patch)
tree3dd7f777d06c6c3c4ef08a6c4485825c26ac84fb
parenta91e4c79ce2db34f8bfcfd0717b02b54e10b9363 (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.lua25
-rw-r--r--init.lua9
-rw-r--r--textures/playereffects_example_black.pngbin0 -> 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.",
diff --git a/init.lua b/init.lua
index 421098b..a7b7b88 100644
--- a/init.lua
+++ b/init.lua
@@ -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
new file mode 100644
index 0000000..cf671d1
--- /dev/null
+++ b/textures/playereffects_example_black.png
Binary files differ