mirror of
https://github.com/luanti-org/luanti.git
synced 2025-08-01 17:38:41 +00:00
Allow managing object observers
----- Co-authored-by: sfan5 <sfan5@live.de> Co-authored-by: SmallJoker <SmallJoker@users.noreply.github.com>
This commit is contained in:
parent
cc8e7a569e
commit
6874c358ea
15 changed files with 284 additions and 22 deletions
|
@ -1,4 +1,5 @@
|
|||
dofile(minetest.get_modpath("testentities").."/visuals.lua")
|
||||
dofile(minetest.get_modpath("testentities").."/observers.lua")
|
||||
dofile(minetest.get_modpath("testentities").."/selectionbox.lua")
|
||||
dofile(minetest.get_modpath("testentities").."/armor.lua")
|
||||
dofile(minetest.get_modpath("testentities").."/pointable.lua")
|
||||
|
|
37
games/devtest/mods/testentities/observers.lua
Normal file
37
games/devtest/mods/testentities/observers.lua
Normal file
|
@ -0,0 +1,37 @@
|
|||
local function player_names_excluding(exclude_player_name)
|
||||
local player_names = {}
|
||||
for _, player in ipairs(minetest.get_connected_players()) do
|
||||
player_names[player:get_player_name()] = true
|
||||
end
|
||||
player_names[exclude_player_name] = nil
|
||||
return player_names
|
||||
end
|
||||
|
||||
minetest.register_entity("testentities:observable", {
|
||||
initial_properties = {
|
||||
visual = "sprite",
|
||||
textures = { "testentities_sprite.png" },
|
||||
static_save = false,
|
||||
infotext = "Punch to set observers to anyone but you"
|
||||
},
|
||||
on_activate = function(self)
|
||||
self.object:set_armor_groups({punch_operable = 1})
|
||||
assert(self.object:get_observers() == nil)
|
||||
-- Using a value of `false` in the table should error.
|
||||
assert(not pcall(self.object, self.object.set_observers, self.object, {test = false}))
|
||||
end,
|
||||
on_punch = function(self, puncher)
|
||||
local puncher_name = puncher:get_player_name()
|
||||
local observers = player_names_excluding(puncher_name)
|
||||
self.object:set_observers(observers)
|
||||
local got_observers = self.object:get_observers()
|
||||
for name in pairs(observers) do
|
||||
assert(got_observers[name])
|
||||
end
|
||||
for name in pairs(got_observers) do
|
||||
assert(observers[name])
|
||||
end
|
||||
self.object:set_properties({infotext = "Excluding " .. puncher_name})
|
||||
return true
|
||||
end
|
||||
})
|
Loading…
Add table
Add a link
Reference in a new issue