wads 0.2.0 → 0.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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