summaryrefslogtreecommitdiffhomepage
path: root/dragon/inputs.rb
diff options
context:
space:
mode:
author_Tradam <[email protected]>2021-12-16 19:22:26 -0500
committerGitHub <[email protected]>2021-12-16 19:22:26 -0500
commit5954b9beb4d4a3b4f248d72d1851195f030558a8 (patch)
treefecd8aa840a25afdb502915b0fdb4d03b7ed339a /dragon/inputs.rb
parent2f845281f133849256b57bb08fd3e9ae57600784 (diff)
parenteaa29e72939f5edf61735ccbb73c36ee89369f65 (diff)
downloaddragonruby-game-toolkit-contrib-5954b9beb4d4a3b4f248d72d1851195f030558a8.tar.gz
dragonruby-game-toolkit-contrib-5954b9beb4d4a3b4f248d72d1851195f030558a8.zip
Merge branch 'DragonRuby:master' into masterHEADmaster
Diffstat (limited to 'dragon/inputs.rb')
-rw-r--r--dragon/inputs.rb63
1 files changed, 50 insertions, 13 deletions
diff --git a/dragon/inputs.rb b/dragon/inputs.rb
index 0ae4f86..8be97f9 100644
--- a/dragon/inputs.rb
+++ b/dragon/inputs.rb
@@ -191,6 +191,30 @@ module GTK
}
end
+ def self.method_to_key_hash
+ return @method_to_key_hash if @method_to_key_hash
+ @method_to_key_hash = {}
+ string_representation_overrides ||= {
+ backspace: '\b'
+ }
+ char_to_method_hash.each do |k, v|
+ v.each do |vi|
+ t = { char_or_raw_key: k }
+
+ if k.is_a? Numeric
+ t[:raw_key] = k
+ t[:string_representation] = "raw_key == #{k}"
+ else
+ t[:char] = k
+ t[:string_representation] = "\"#{k.strip}\""
+ end
+
+ @method_to_key_hash[vi] = t
+ end
+ end
+ @method_to_key_hash
+ end
+
def self.char_to_method char, int = nil
methods = char_to_method_hash[char] || char_to_method_hash[int]
methods ? methods.dup : [char.to_sym || int]
@@ -289,7 +313,8 @@ module GTK
value = Kernel.tick_count if value
collection.each do |m|
- self.instance_variable_set("@#{m.to_s}".to_sym, value)
+ m_to_s = m.to_s
+ self.instance_variable_set("@#{m_to_s}".to_sym, value) if m_to_s.strip.length > 0
rescue Exception => e
raise e, <<-S
* ERROR:
@@ -305,24 +330,32 @@ S
end
def method_missing m, *args
- begin
- define_singleton_method(m) do
- r = self.instance_variable_get("@#{m.without_ending_bang}".to_sym)
- clear_key m
- return r
+ if KeyboardKeys.method_to_key_hash[m.without_ending_bang]
+ begin
+ define_singleton_method(m) do
+ r = self.instance_variable_get("@#{m.without_ending_bang}".to_sym)
+ clear_key m
+ return r
+ end
+
+ return self.send m
+ rescue Exception => e
+ log_important "#{e}"
end
-
- return self.send m
- rescue Exception => e
- log_important "#{e}"
end
+ did_you_mean = KeyboardKeys.method_to_key_hash.find_all do |k, v|
+ k.to_s[0..1] == m.to_s[0..1]
+ end.map {|k, v| ":#{k} (#{v[:string_representation]})" }
+ did_you_mean_string = ""
+ did_you_mean_string = ". Did you mean #{did_you_mean.join ", "}?"
+
raise <<-S
* ERROR:
-There is no member on the keyboard called #{m}. Here is a to_s representation of what's available:
-
-#{KeyboardKeys.char_to_method_hash.map { |k, v| "[#{k} => #{v.join(",")}]" }.join(" ")}
+#{KeyboardKeys.method_to_key_hash.map { |k, v| "** :#{k} #{v.string_representation}" }.join("\n")}
+There is no key on the keyboard called :#{m}#{did_you_mean_string}.
+Full list of available keys =:points_up:=.
S
end
@@ -706,6 +739,10 @@ module GTK
(controller_one && controller_one.directional_vector)
end
+ def directional_angle
+ keyboard.directional_angle || (controller_one && controller_one.directional_angle)
+ end
+
# Returns a signal indicating right (`1`), left (`-1`), or neither ('0').
#
# @return [Integer]