mirror of
https://github.com/cyberarm/i-mic-fps.git
synced 2025-12-16 08:02:36 +00:00
54 lines
1.2 KiB
Ruby
54 lines
1.2 KiB
Ruby
class IMICFPS
|
|
class InputMapper
|
|
@@keymap = {}
|
|
@@keys = Hash.new(false)
|
|
|
|
def self.keydown(id)
|
|
@@keys[id] = true
|
|
end
|
|
|
|
def self.keyup(id)
|
|
@@keys[id] = false
|
|
end
|
|
|
|
def self.get(category, action)
|
|
key = @@keymap.dig(category, action)
|
|
end
|
|
|
|
def self.set(category, action, key)
|
|
raise "category must be a symbol" unless category.is_a?(Symbol)
|
|
raise "action must be a symbol" unless action.is_a?(Symbol)
|
|
raise "key must be a whole number or Array of whole numbers, got #{key}" unless key.is_a?(Integer) || key.is_a?(Array)
|
|
|
|
@@keymap[category] ||= {}
|
|
|
|
warn "InputMapper.set(:#{category}, :#{action}) is already defined as #{@@keymap[category][action]}" if @@keymap[category][action]
|
|
|
|
@@keymap[category][action] = key
|
|
end
|
|
|
|
def self.down?(category, action)
|
|
keys = get(category, action)
|
|
|
|
if keys.is_a?(Array)
|
|
keys.detect do |key|
|
|
@@keys[key]
|
|
end
|
|
else
|
|
@@keys[keys]
|
|
end
|
|
end
|
|
|
|
def self.is?(category, action, query_key)
|
|
keys = get(category, action)
|
|
|
|
if keys.is_a?(Array)
|
|
keys.detect do |key|
|
|
query_key == key
|
|
end
|
|
else
|
|
query_key == keys
|
|
end
|
|
end
|
|
end
|
|
end |