Initial commit (version 0.1-test)
This commit is contained in:
82
mods/sounds/override.lua
Normal file
82
mods/sounds/override.lua
Normal file
@@ -0,0 +1,82 @@
|
||||
|
||||
-- override built-in type function
|
||||
local otype = type
|
||||
type = function(obj)
|
||||
local base_type = otype(obj)
|
||||
if base_type == "table" then
|
||||
local meta_type = otype(obj.__type)
|
||||
if meta_type == "string" then
|
||||
return obj.__type
|
||||
elseif meta_type == "function" then
|
||||
return obj:__type()
|
||||
end
|
||||
end
|
||||
|
||||
return base_type
|
||||
end
|
||||
|
||||
-- override node registration
|
||||
local register_node_orig = core.register_node
|
||||
core.register_node = function(name, def)
|
||||
if type(def.sounds) == "table" then
|
||||
if type(def.sounds.dig) == "SoundGroup" then
|
||||
local on_punch_orig = def.on_punch
|
||||
local s_group = SoundGroup(def.sounds.dig)
|
||||
def.sounds.dig = "" -- override default sound
|
||||
def.on_punch = function(...)
|
||||
s_group() -- FIXME: should retrieve built-in sound spec
|
||||
|
||||
if type(on_punch_orig) == "function" then
|
||||
return on_punch_orig(...)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if type(def.sounds.dug) == "SoundGroup" then
|
||||
local on_dig_orig = def.on_dig
|
||||
local s_group = SoundGroup(def.sounds.dug)
|
||||
def.sounds.dug = nil
|
||||
def.on_dig = function(...)
|
||||
s_group()
|
||||
|
||||
if type(on_dig_orig) == "function" then
|
||||
return on_dig_orig(...)
|
||||
end
|
||||
|
||||
core.node_dig(...)
|
||||
end
|
||||
end
|
||||
|
||||
if type(def.sounds.footstep) == "SoundGroup" then
|
||||
|
||||
end
|
||||
|
||||
-- FIXME: should be overridden in register_craftitem
|
||||
if type(def.sounds.place) == "SoundGroup" then
|
||||
local on_place_orig = def.on_place
|
||||
local s_group = SoundGroup(def.sounds.place)
|
||||
def.sounds.place = nil
|
||||
def.on_place = function(stack, ...)
|
||||
s_group()
|
||||
|
||||
if type(on_place_orig) == "function" then
|
||||
return on_place_orig(stack, ...)
|
||||
end
|
||||
|
||||
return core.item_place(stack, ...)
|
||||
end
|
||||
end
|
||||
|
||||
if type(def.sounds.place_failed) == "SoundGroup" then
|
||||
-- FIXME: which callback to override
|
||||
def.sounds.place_failed = def.sounds.place_failed:get_random()
|
||||
end
|
||||
|
||||
if type(def.sounds.fall) == "SoundGroup" then
|
||||
-- FIXME: which callback to override
|
||||
def.sounds.fall = def.sounds.fall:get_random()
|
||||
end
|
||||
end
|
||||
|
||||
return register_node_orig(name, def)
|
||||
end
|
||||
Reference in New Issue
Block a user