class FMOD::Core::FileSystem
Public Class Methods
new(system)
click to toggle source
TODO: Upsets the stack, causing a segfault with STD_CALL.
# File lib/fmod/core/file_system.rb, line 10 def initialize(system) @callbacks = [] @cbs = [open_cb, close_cb, seek_cb, close_cb] FMOD.invoke(:System_AttachFileSystem, system, *@cbs) end
Public Instance Methods
on_close(proc = nil, &block)
click to toggle source
# File lib/fmod/core/file_system.rb, line 20 def on_close(proc = nil, &block) set_callback(1, &(block_given? ? block : proc)) end
on_open(proc = nil, &block)
click to toggle source
# File lib/fmod/core/file_system.rb, line 16 def on_open(proc = nil, &block) set_callback(0, &(block_given? ? block : proc)) end
on_read(proc = nil, &block)
click to toggle source
# File lib/fmod/core/file_system.rb, line 24 def on_read(proc = nil, &block) set_callback(2, &(block_given? ? block : proc)) end
on_seek(proc = nil, &block)
click to toggle source
# File lib/fmod/core/file_system.rb, line 28 def on_seek(proc = nil, &block) set_callback(3, &(block_given? ? block : proc)) end
Private Instance Methods
close_cb()
click to toggle source
# File lib/fmod/core/file_system.rb, line 51 def close_cb sig = [TYPE_VOIDP, TYPE_VOIDP] abi = FMOD::ABI Closure::BlockCaller.new(TYPE_INT, sig, abi) do |handle, user_data| @callbacks[1].call(handle, user_data) if @callbacks[1] Result::OK end end
open_cb()
click to toggle source
# File lib/fmod/core/file_system.rb, line 39 def open_cb sig = Array.new(4, TYPE_VOIDP) abi = FMOD::ABI Closure::BlockCaller.new(TYPE_INT, sig, abi) do |name, size, ptr, user| if @callbacks[0] size = size.to_s(SIZEOF_INT).unpack1('L') @callbacks[0].call(name, size, ptr, user) end Result::OK end end
read_cb()
click to toggle source
# File lib/fmod/core/file_system.rb, line 60 def read_cb sig = Array.new(5, TYPE_VOIDP) abi = FMOD::ABI Closure::BlockCaller.new(TYPE_INT, sig, abi) do |handle, buffer, size, read, user| if @callbacks[2] @callbacks[2].call(handle, buffer, size, read, user) end Result::OK end end
seek_cb()
click to toggle source
# File lib/fmod/core/file_system.rb, line 71 def seek_cb sig = Array.new(3, TYPE_VOIDP) abi = FMOD::ABI Closure::BlockCaller.new(TYPE_INT, sig, abi) do |handle, position, user| if @callbacks[3] @callbacks[3].call(handle, position, user) end Result::OK end end
set_callback(index, &block)
click to toggle source
# File lib/fmod/core/file_system.rb, line 34 def set_callback(index, &block) raise LocalJumpError, "No block given." unless block_given? @callbacks[index] = block end