wads 0.2.0 → 0.2.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a1cf7ab7c4229f57f2bb4691819c5a4282a3fd0f7703e5caa6c93e49aeb35053
4
- data.tar.gz: a1f0e971db1ea5064e44fef39c31767125f844b8ab3ef87eeaf09e3e92f27ad1
3
+ metadata.gz: d4dcddbd32da59c1cd1a89fc9abb27b69314b63fcb413753d874140d34db6d5d
4
+ data.tar.gz: ab05677ab411b91457d17e3acdfa7b6547268af9e42d7364573fed177b989316
5
5
  SHA512:
6
- metadata.gz: 315790b3c8fe99525c3ad78eaa90eecd17fadd09a2a3e16a13ba82cb61ea5279472c57ada6e88021e9c6649236bb598aad0a46a1954928a1c37dc8dbf8b45b5e
7
- data.tar.gz: 89de4f997dcef2e1b9e25062af443d6994d7ee4070d89dab21f06cb492ed3d106f837a9c3bdf85d7ba7e6522d30a039694982d939d49dd41b7da30c2637299ea
6
+ metadata.gz: 67fb8ee6765014d4704d22cdb251595839f7b22593723204c198a85d943c59a80d37823eaec65aee58bb81177feb03c7fd92e831ada1c08e0cdb1d804a1e69e4
7
+ data.tar.gz: 3290687b9372191b80690d42f9ef825716898b3e2c123b0bee9ee8e72b630680320279a1a302d06b27f8aaf696dd2b406d13621e2b9a44f835eb230c12460bda
data/CHANGELOG.md CHANGED
@@ -17,3 +17,12 @@
17
17
  ## [0.2.0] - 2021-10-05
18
18
 
19
19
  - Breaking change in order to refactor, including standardizing order of widget constructor args
20
+
21
+ ## [0.2.3] - 2021-10-21
22
+
23
+ - Upgrade dependency versions
24
+
25
+ ## [0.2.4] - 2021-10-21
26
+
27
+ - Add a callback for key up
28
+
data/lib/wads/app.rb CHANGED
@@ -16,6 +16,7 @@ module Wads
16
16
  WadsConfig.instance.set_window(self)
17
17
  set_display(widget)
18
18
  WadsConfig.instance.set_log_level("info")
19
+ @registered_hold_down_buttons = []
19
20
  end
20
21
 
21
22
  #
@@ -30,8 +31,23 @@ module Wads
30
31
  @main_widget
31
32
  end
32
33
 
34
+ # Register a key (identified by the Gosu id) to check if it is being held down.
35
+ # If so, the handle_key_held_down callback will be invoked on widgets
36
+ # For example, register_hold_down_key(Gosu::KbLeft)
37
+ def register_hold_down_key(id)
38
+ @registered_hold_down_buttons << id
39
+ end
40
+
33
41
  def update
34
42
  @main_widget.update(@update_count, mouse_x, mouse_y)
43
+
44
+ # Look for keys that are held down and delegate those events
45
+ @registered_hold_down_buttons.each do |id|
46
+ if button_down?(id)
47
+ @main_widget.handle_key_held_down id, mouse_x, mouse_y
48
+ end
49
+ end
50
+
35
51
  @update_count = @update_count + 1
36
52
  end
37
53
 
data/lib/wads/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Wads
2
- VERSION = "0.2.0"
2
+ VERSION = "0.2.4"
3
3
  end
data/lib/wads/widgets.rb CHANGED
@@ -805,26 +805,6 @@ module Wads
805
805
  end
806
806
  container.get_coordinates(element_type, args)
807
807
  end
808
-
809
- #
810
- # This is a convenience method that creates a panel divided into a left and right,
811
- # or east and west section. It will take up the entire space of the specified
812
- # ARG_SECTION in the args map.
813
- #
814
- def add_east_west_panel(args)
815
- section = args[ARG_SECTION]
816
- if section.nil?
817
- raise "East west panels require the arg '#{ARG_SECTION}' with value #{@container_map.keys.join(', ')}"
818
- end
819
- container = @container_map[section]
820
- new_panel = Panel.new(container.start_x, container.start_y,
821
- container.max_width, container.max_height)
822
- new_panel.set_layout(LAYOUT_EAST_WEST, args)
823
- new_panel.base_z = @parent_widget.base_z
824
- new_panel.disable_border
825
- @parent_widget.add_child(new_panel)
826
- new_panel
827
- end
828
808
  end
829
809
 
830
810
  # The layout sections are as follows:
@@ -841,9 +821,13 @@ module Wads
841
821
  super
842
822
  # Divide the height into 100, 100, and the middle gets everything else
843
823
  # Right now we are using 100 pixels rather than a percentage for the borders
844
- middle_section_y_start = y + 100
845
- height_middle_section = height - 100
846
- @container_map[SECTION_NORTH] = GuiContainer.new(x, y, width, 100)
824
+ header_section_height = 100
825
+ if args[ARG_DESIRED_HEIGHT]
826
+ header_section_height = args[ARG_DESIRED_HEIGHT]
827
+ end
828
+ middle_section_y_start = y + header_section_height
829
+ height_middle_section = height - header_section_height
830
+ @container_map[SECTION_NORTH] = GuiContainer.new(x, y, width, header_section_height)
847
831
  @container_map[SECTION_CENTER] = GuiContainer.new(x, middle_section_y_start, width, height_middle_section, FILL_VERTICAL_STACK)
848
832
  end
849
833
  end
@@ -1035,6 +1019,14 @@ module Wads
1035
1019
  @text_input_fields = []
1036
1020
  end
1037
1021
 
1022
+ def pad(str, size, left_align = false)
1023
+ str = str.to_s
1024
+ if left_align
1025
+ str[0, size].ljust(size, ' ')
1026
+ else
1027
+ str[0, size].rjust(size, ' ')
1028
+ end
1029
+ end
1038
1030
  def debug(message)
1039
1031
  WadsConfig.instance.get_logger.debug message
1040
1032
  end
@@ -1077,8 +1069,10 @@ module Wads
1077
1069
  end
1078
1070
 
1079
1071
  def add_panel(section, args = {})
1080
- get_layout.add_max_panel({ ARG_SECTION => section,
1081
- ARG_THEME => @gui_theme}.merge(args))
1072
+ new_panel = get_layout.add_max_panel({ ARG_SECTION => section,
1073
+ ARG_THEME => @gui_theme}.merge(args))
1074
+ new_panel.disable_border
1075
+ new_panel
1082
1076
  end
1083
1077
 
1084
1078
  def get_theme
@@ -1406,9 +1400,11 @@ module Wads
1406
1400
  if id == Gosu::MsLeft
1407
1401
  # Special handling for text input fields
1408
1402
  # Mouse click: Select text field based on mouse position.
1409
- WadsConfig.instance.get_window.text_input = @text_input_fields.find { |tf| tf.under_point?(mouse_x, mouse_y) }
1410
- # Advanced: Move caret to clicked position
1411
- WadsConfig.instance.get_window.text_input.move_caret(mouse_x) unless WadsConfig.instance.get_window.text_input.nil?
1403
+ if not @text_input_fields.empty?
1404
+ WadsConfig.instance.get_window.text_input = @text_input_fields.find { |tf| tf.under_point?(mouse_x, mouse_y) }
1405
+ # Advanced: Move caret to clicked position
1406
+ WadsConfig.instance.get_window.text_input.move_caret(mouse_x) unless WadsConfig.instance.get_window.text_input.nil?
1407
+ end
1412
1408
 
1413
1409
  result = handle_mouse_down mouse_x, mouse_y
1414
1410
  elsif id == Gosu::MsRight
@@ -1458,6 +1454,11 @@ module Wads
1458
1454
  if not result.nil? and result.is_a? WidgetResult
1459
1455
  return result
1460
1456
  end
1457
+ else
1458
+ result = handle_key_up id, mouse_x, mouse_y
1459
+ if not result.nil? and result.is_a? WidgetResult
1460
+ return result
1461
+ end
1461
1462
  end
1462
1463
 
1463
1464
  @children.each do |child|
@@ -1468,6 +1469,11 @@ module Wads
1468
1469
  return result
1469
1470
  end
1470
1471
  end
1472
+ else
1473
+ result = handle_key_up id, mouse_x, mouse_y
1474
+ if not result.nil? and result.is_a? WidgetResult
1475
+ return result
1476
+ end
1471
1477
  end
1472
1478
  end
1473
1479
  end
@@ -1702,6 +1708,25 @@ module Wads
1702
1708
  # empty base implementation
1703
1709
  end
1704
1710
 
1711
+ #
1712
+ # This callback is invoked for any key registered by the
1713
+ # register_hold_down_key(id) method.
1714
+ #
1715
+ def handle_key_held_down id, mouse_x, mouse_y
1716
+ # empty base implementation
1717
+ end
1718
+
1719
+ #
1720
+ # Override this method in your subclass to process when a key is released.
1721
+ # The base implementation is empty.
1722
+ # Note that the mouse was not necessarily positioned over this widget.
1723
+ # You can check this using the contains_click(mouse_x, mouse_y) method
1724
+ # and decide if you want to process the event based on that, if desired.
1725
+ #
1726
+ def handle_key_up id, mouse_x, mouse_y
1727
+ # empty base implementation
1728
+ end
1729
+
1705
1730
  #
1706
1731
  # Override this method in your subclass to perform any logic needed
1707
1732
  # as part of the main Gosu update loop. In most cases, this method is
@@ -1762,6 +1787,9 @@ module Wads
1762
1787
  @img = Gosu::Image.new(image)
1763
1788
  elsif image.is_a? Gosu::Image
1764
1789
  @img = image
1790
+ elsif image.is_a? Gosu::Color
1791
+ @img = nil
1792
+ @override_color = image
1765
1793
  else
1766
1794
  raise "ImageWidget requires either a filename or a Gosu::Image object"
1767
1795
  end
@@ -1771,11 +1799,16 @@ module Wads
1771
1799
  @scale = 1
1772
1800
  disable_border
1773
1801
  disable_background
1774
- set_dimensions(@img.width, @img.height)
1802
+ set_dimensions(@img.width, @img.height) if @img
1775
1803
  end
1776
1804
 
1777
1805
  def render
1778
- @img.draw @x, @y, z_order, @scale, @scale
1806
+ if @img.nil?
1807
+ # TODO draw a box
1808
+ Gosu::draw_rect(@x, @y, @width - 1, @height - 1, @override_color, relative_z_order(Z_ORDER_GRAPHIC_ELEMENTS))
1809
+ else
1810
+ @img.draw @x, @y, z_order, @scale, @scale
1811
+ end
1779
1812
  end
1780
1813
 
1781
1814
  def widget_z
Binary file
Binary file
Binary file
@@ -0,0 +1,34 @@
1
+ require 'gosu'
2
+
3
+ class AppWindow < Gosu::Window
4
+ def initialize
5
+ super(800, 600)
6
+ self.caption = 'Bouncing Ball'
7
+ @img = Gosu::Image.new("media/CircleYellow.png")
8
+ @x = 400
9
+ @y = 300
10
+ @delta_x = 2
11
+ @delta_y = 2
12
+ end
13
+
14
+ def update
15
+ @x = @x + @delta_x
16
+ @y = @y + @delta_y
17
+ if @x < 0
18
+ @delta_x = 2
19
+ elsif @x > 800 - @img.width
20
+ @delta_x = -2
21
+ end
22
+ if @y < 0
23
+ @delta_y = 2
24
+ elsif @y > 600 - @img.height
25
+ @delta_y = -2
26
+ end
27
+ end
28
+
29
+ def draw
30
+ @img.draw @x, @y, 1
31
+ end
32
+ end
33
+
34
+ AppWindow.new.show
@@ -0,0 +1,16 @@
1
+ require 'gosu'
2
+
3
+ class GameWindow < Gosu::Window
4
+ def initialize
5
+ super(400, 300)
6
+ self.caption = 'Hello World App'
7
+ @font = Gosu::Font.new(24)
8
+ end
9
+
10
+ def draw
11
+ @font.draw_text("Hello World", 144, 120, 1)
12
+ end
13
+ end
14
+
15
+ window = GameWindow.new
16
+ window.show
@@ -0,0 +1,121 @@
1
+ require 'gosu'
2
+
3
+ AVERAGE_RESPONSE_TIME = 284.to_f # Per humanbenchmark.com, in milliseconds
4
+ GAME_STATE_PROMPT_TO_START = 0
5
+ GAME_STATE_RED = 1
6
+ GAME_STATE_YELLOW = 2
7
+ GAME_STATE_GREEN = 3
8
+ GAME_STATE_OVER = 4
9
+
10
+ class AppWindow < Gosu::Window
11
+ def initialize
12
+ super(600, 300)
13
+ self.caption = 'Reaction Time Game'
14
+ @update_count = 0
15
+ @next_light_count = 0
16
+ @messages = []
17
+ @font = Gosu::Font.new(32)
18
+ @red_light = Gosu::Image.new("media/CircleRed.png")
19
+ @yellow_light = Gosu::Image.new("media/CircleYellow.png")
20
+ @green_light = Gosu::Image.new("media/CircleGreen.png")
21
+ # game state 0 1 2 3 4
22
+ # state Prompt Red Yellow Green Game over
23
+ @traffic_light_images = [@red_light, @red_light, @yellow_light, @green_light, @green_light]
24
+ @traffic_light_color = GAME_STATE_PROMPT_TO_START
25
+ end
26
+
27
+ def update
28
+ @update_count = @update_count + 1
29
+ @traffic_light_image = @traffic_light_images[@traffic_light_color]
30
+
31
+ # Once the game is started, the lights progress automatically until green
32
+ if @traffic_light_color > GAME_STATE_PROMPT_TO_START
33
+ next_traffic_light unless @update_count < @next_light_count
34
+ @button_text = "Click when the light turns green" unless @traffic_light_color > GAME_STATE_GREEN
35
+ end
36
+ end
37
+
38
+ def draw
39
+ @font.draw_text("Reaction Time Game", 180, 10, 1)
40
+ @traffic_light_image.draw(248, 60, 1)
41
+
42
+ if @traffic_light_color == GAME_STATE_PROMPT_TO_START
43
+ @font.draw_text("Press 'p' to play", 200, 200, 1)
44
+ elsif @traffic_light_color == GAME_STATE_OVER
45
+ @font.draw_text("Press 'p' to play again", 50, 200, 1)
46
+ else
47
+ draw_button(@button_text) unless @button_text.nil?
48
+ end
49
+
50
+ y = 232
51
+ @messages.each do |msg|
52
+ @font.draw_text(msg, 50, y, 1)
53
+ y = y + 32
54
+ end
55
+ end
56
+
57
+ def button_down id
58
+ close if id == Gosu::KbEscape
59
+
60
+ if @traffic_light_color == GAME_STATE_PROMPT_TO_START or @traffic_light_color == GAME_STATE_OVER
61
+ if id == Gosu::KbP
62
+ next_traffic_light
63
+ end
64
+ return
65
+ end
66
+
67
+ if id == Gosu::MsLeft and button_contains_click
68
+ if @traffic_light_color < GAME_STATE_YELLOW
69
+ next_traffic_light
70
+ elsif @traffic_light_color == GAME_STATE_YELLOW
71
+ @traffic_light_color = GAME_STATE_OVER
72
+ @messages = ["Sorry, you were too early"]
73
+ @button_text = "Click to play again"
74
+ elsif @traffic_light_color == GAME_STATE_GREEN
75
+ @button_text = nil
76
+ time_since_green = ((Time.now - @mark_time) * 1000.to_f).round(3)
77
+ @messages = ["Response time: #{time_since_green} ms"]
78
+ diff_from_average = (((time_since_green - AVERAGE_RESPONSE_TIME) / AVERAGE_RESPONSE_TIME) * 100).round
79
+ if diff_from_average > 0
80
+ @messages << "#{diff_from_average}% slower than the average human"
81
+ elsif diff_from_average < 0
82
+ @messages << "#{-diff_from_average}% faster than the average human"
83
+ else
84
+ @messages << "Wow, that is exactly the human average."
85
+ end
86
+ @button_text = "Click to play again"
87
+ @traffic_light_color = GAME_STATE_OVER
88
+ else
89
+ @traffic_light_color = GAME_STATE_PROMPT_TO_START
90
+ @messages = []
91
+ end
92
+ end
93
+ end
94
+
95
+ def next_traffic_light
96
+ return unless @traffic_light_color < GAME_STATE_GREEN
97
+ @traffic_light_color = @traffic_light_color + 1
98
+ @mark_time = Time.now
99
+ @next_light_count = @update_count + 60 + rand(100)
100
+ end
101
+
102
+ def button_contains_click
103
+ mouse_x > 100 and mouse_x < 500 and mouse_y > 198 and mouse_y < 232
104
+ end
105
+
106
+ def draw_button(text)
107
+ text_width = @font.text_width(text)
108
+ draw_box(100, 198, 500, 232)
109
+ text_x = (600 - text_width) / 2
110
+ @font.draw_text(@button_text, text_x, 200, 1)
111
+ end
112
+
113
+ def draw_box(x1, y1, x2, y2, color = Gosu::Color::WHITE)
114
+ Gosu::draw_line x1, y1, color, x2, y1, color, 1
115
+ Gosu::draw_line x1, y1, color, x1, y2, color, 1
116
+ Gosu::draw_line x1, y2, color, x2, y2, color, 1
117
+ Gosu::draw_line x2, y1, color, x2, y2, color, 1
118
+ end
119
+ end
120
+
121
+ AppWindow.new.show
data/samples/stocks.rb CHANGED
@@ -122,5 +122,5 @@ class StocksDisplay < Widget
122
122
  end
123
123
  end
124
124
 
125
- WadsConfig.instance.set_current_theme(WadsBrightTheme.new)
125
+ WadsConfig.instance.set_current_theme(WadsAquaTheme.new)
126
126
  SampleStocksApp.new.show
@@ -0,0 +1,117 @@
1
+ require 'gosu'
2
+ require_relative '../lib/wads'
3
+
4
+ include Wads
5
+
6
+ AVERAGE_RESPONSE_TIME = 284.to_f # Per humanbenchmark.com, in milliseconds
7
+ GAME_STATE_PROMPT_TO_START = 0
8
+ GAME_STATE_RED = 1
9
+ GAME_STATE_YELLOW = 2
10
+ GAME_STATE_GREEN = 3
11
+ GAME_STATE_OVER = 4
12
+
13
+
14
+ class ReactionTimeApp < WadsApp
15
+ def initialize
16
+ super(600, 400, "Reaction Time Game", ReactionTimeDisplay.new)
17
+ end
18
+ end
19
+
20
+ class ReactionTimeDisplay < Widget
21
+ def initialize
22
+ super(0, 0, 600, 400)
23
+ set_layout(LAYOUT_HEADER_CONTENT)
24
+ set_theme(WadsAquaTheme.new)
25
+ disable_border
26
+ @next_light_count = 0
27
+ @messages = []
28
+ @font = Gosu::Font.new(22)
29
+ @red_light = Gosu::Image.new("media/RedLight.png")
30
+ @yellow_light = Gosu::Image.new("media/YellowLight.png")
31
+ @green_light = Gosu::Image.new("media/GreenLight.png")
32
+ # game state 0 1 2 3 4
33
+ # state Prompt Red Yellow Green Game over
34
+ @traffic_light_images = [@red_light, @red_light, @yellow_light, @green_light, @green_light]
35
+ @traffic_light_color = GAME_STATE_PROMPT_TO_START
36
+
37
+ add_panel(SECTION_NORTH).get_layout.add_text("Reaction Time Game",
38
+ { ARG_TEXT_ALIGN => TEXT_ALIGN_CENTER,
39
+ ARG_USE_LARGE_FONT => true})
40
+
41
+ content_panel = get_layout.add_max_panel({ARG_SECTION => SECTION_CENTER,
42
+ ARG_LAYOUT => LAYOUT_EAST_WEST,
43
+ ARG_THEME => WadsAquaTheme.new,
44
+ ARG_PANEL_WIDTH => 140})
45
+ @traffic_light_image = content_panel.get_layout.add_image(@red_light,
46
+ {ARG_SECTION => SECTION_WEST})
47
+
48
+ left_side_panel = content_panel.add_panel(SECTION_EAST)
49
+ left_side_panel.disable_border
50
+ @start_button = left_side_panel.get_layout.add_button("Click to play") do
51
+ handle_button_click
52
+ end
53
+ @messages = left_side_panel.get_layout.add_document("")
54
+ end
55
+
56
+ def handle_update update_count, mouse_x, mouse_y
57
+ @traffic_light_image.img = @traffic_light_images[@traffic_light_color]
58
+
59
+ if @traffic_light_color == GAME_STATE_PROMPT_TO_START or @traffic_light_color == GAME_STATE_OVER
60
+ @start_button.visible = true
61
+
62
+ elsif @traffic_light_color == GAME_STATE_RED or
63
+ @traffic_light_color == GAME_STATE_YELLOW or
64
+ @traffic_light_color == GAME_STATE_GREEN
65
+ @messages.lines = ["Hit the space bar when the light turns green"]
66
+ @start_button.visible = false
67
+ if @mark_time.nil?
68
+ @mark_time = Time.now
69
+ @next_light_count = update_count + 60 + rand(100)
70
+ end
71
+ next_traffic_light unless update_count < @next_light_count
72
+ end
73
+ end
74
+
75
+ def handle_button_click
76
+ if @traffic_light_color == GAME_STATE_PROMPT_TO_START or @traffic_light_color == GAME_STATE_OVER
77
+ @messages.lines = []
78
+ next_traffic_light
79
+ end
80
+ end
81
+
82
+ def handle_key_press id, mouse_x, mouse_y
83
+ return WidgetResult.new(true) if id == Gosu::KbEscape
84
+
85
+ if id == Gosu::KbSpace
86
+ if @traffic_light_color < GAME_STATE_YELLOW
87
+ next_traffic_light
88
+ elsif @traffic_light_color == GAME_STATE_YELLOW
89
+ @traffic_light_color = GAME_STATE_OVER
90
+ @messages.lines = ["Sorry, you were too early"]
91
+ elsif @traffic_light_color == GAME_STATE_GREEN
92
+ time_since_green = ((Time.now - @mark_time) * 1000.to_f).round(3)
93
+ @messages.lines = ["Response time: #{time_since_green} ms"]
94
+ diff_from_average = (((time_since_green - AVERAGE_RESPONSE_TIME) / AVERAGE_RESPONSE_TIME) * 100).round
95
+ if diff_from_average > 0
96
+ @messages.lines << "#{diff_from_average}% slower than the average human"
97
+ elsif diff_from_average < 0
98
+ @messages.lines << "#{-diff_from_average}% faster than the average human"
99
+ else
100
+ @messages.lines << "Wow, that is exactly the human average."
101
+ end
102
+ @traffic_light_color = GAME_STATE_OVER
103
+ end
104
+ end
105
+ end
106
+
107
+ def next_traffic_light
108
+ if @traffic_light_color == GAME_STATE_OVER
109
+ @traffic_light_color = GAME_STATE_RED
110
+ elsif @traffic_light_color < GAME_STATE_OVER
111
+ @traffic_light_color = @traffic_light_color + 1
112
+ end
113
+ @mark_time = nil
114
+ end
115
+ end
116
+
117
+ ReactionTimeApp.new.show
data/wads.gemspec CHANGED
@@ -28,7 +28,7 @@ Gem::Specification.new do |spec|
28
28
  spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
29
29
  spec.require_paths = ["lib"]
30
30
 
31
- spec.add_dependency "gosu", "~> 1.1.0"
31
+ spec.add_dependency "gosu", ">= 1.1.0"
32
32
  spec.add_dependency "minigl", "~> 2.3.5"
33
33
  spec.add_dependency "tty-option"
34
34
 
metadata CHANGED
@@ -1,27 +1,27 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wads
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - dbroemme
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-10-09 00:00:00.000000000 Z
11
+ date: 2021-10-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: gosu
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: 1.1.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: 1.1.0
27
27
  - !ruby/object:Gem::Dependency
@@ -87,18 +87,25 @@ files:
87
87
  - media/CircleRed.png
88
88
  - media/CircleWhite.png
89
89
  - media/CircleYellow.png
90
+ - media/GreenLight.png
91
+ - media/RedLight.png
90
92
  - media/SampleGraph.png
91
93
  - media/StocksSample.png
92
94
  - media/WadsScreenshot.png
95
+ - media/YellowLight.png
93
96
  - run-graph
94
97
  - run-star-wars
95
98
  - run-stocks
96
99
  - run-theme-test
97
100
  - samples/basic_gosu_with_graph_widget.rb
101
+ - samples/gosu_bouncing_ball.rb
102
+ - samples/gosu_hello_world.rb
103
+ - samples/gosu_reaction_time.rb
98
104
  - samples/graph.rb
99
105
  - samples/star_wars.rb
100
106
  - samples/stocks.rb
101
107
  - samples/theme_test.rb
108
+ - samples/wads_reaction_time.rb
102
109
  - wads.gemspec
103
110
  homepage: https://github.com/dbroemme/ruby-wads
104
111
  licenses: []
@@ -121,7 +128,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
121
128
  - !ruby/object:Gem::Version
122
129
  version: '0'
123
130
  requirements: []
124
- rubygems_version: 3.2.22
131
+ rubygems_version: 3.0.3.1
125
132
  signing_key:
126
133
  specification_version: 4
127
134
  summary: Simple, easy to use data structure classes and Gosu widgets