hemi 0.0.2

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 3840aa088a24e90ff6a1e10d139624c38ecced3a7676aa2f4f11fb46fc433854
4
+ data.tar.gz: 3c36fcc6e2eb00cdee1fad4c188c4c3ee3c1ea685ff35a6143daa2d2a565d00c
5
+ SHA512:
6
+ metadata.gz: 6c67aee68830d5607901848659891a56330b6dbecc8c2a5ed06ac83bf911359735635b3e7a9aed1a260898ff0a654e0bbc45ee3d3c5c228cc49c34d982c25494
7
+ data.tar.gz: 4c2687fb05a4d4ac2f22c3378fb991494c36ad5fb64b46f6d769ac22dc0683bd62efac113d07cf8bb8e65dec0f0a0810eea542f2b8dedd8ee5a4469ce700083c
data/.gitignore ADDED
@@ -0,0 +1,8 @@
1
+ *.gem
2
+ .DS_store
3
+ .bundle/
4
+ .yardoc/
5
+
6
+ vendor/bundle/
7
+ examples/
8
+
data/.rspec ADDED
@@ -0,0 +1,3 @@
1
+ --require spec_helper --format doc -I src
2
+ --color
3
+ --order random
data/.rubocop.yml ADDED
@@ -0,0 +1,50 @@
1
+ require:
2
+ - rubocop-performance
3
+ - rubocop-rspec
4
+
5
+ # METRICS
6
+ MethodLength:
7
+ CountComments: false
8
+ Max: 15
9
+ Exclude:
10
+ - 'spec/**/*'
11
+ Metrics/LineLength:
12
+ Enabled: false
13
+ Metrics/AbcSize:
14
+ Max: 25
15
+ Exclude:
16
+ - 'spec/**/*'
17
+ Metrics/BlockLength:
18
+ Exclude:
19
+ - 'spec/**/*'
20
+
21
+ # LAYOUT
22
+ Layout/DotPosition:
23
+ EnforcedStyle: leading
24
+ Enabled: true
25
+ Layout/ExtraSpacing:
26
+ Enabled: false
27
+ Layout/SpaceAroundOperators:
28
+ Enabled: false
29
+ Layout/EmptyLinesAroundClassBody:
30
+ Enabled: false
31
+ Layout/AccessModifierIndentation:
32
+ EnforcedStyle: outdent
33
+
34
+ # STYLE
35
+ Style/StringLiterals:
36
+ EnforcedStyle: double_quotes
37
+ Style/FrozenStringLiteralComment:
38
+ Enabled: false
39
+ Style/ClassAndModuleChildren:
40
+ Enabled: false
41
+ Style/Documentation:
42
+ Enabled: false
43
+
44
+ # RSPEC
45
+ RSpec/ContextWording:
46
+ Enabled: false
47
+ RSpec/NamedSubject:
48
+ Enabled: false
49
+ RSpec/NestedGroups:
50
+ Max: 5
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 2.6.6
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source "https://rubygems.org"
2
+
3
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,62 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ hemi (0.0.1)
5
+ ruby-sdl2 (= 0.3.5)
6
+
7
+ GEM
8
+ remote: https://rubygems.org/
9
+ specs:
10
+ ast (2.4.0)
11
+ coderay (1.1.2)
12
+ diff-lcs (1.3)
13
+ jaro_winkler (1.5.4)
14
+ method_source (0.9.2)
15
+ parallel (1.19.1)
16
+ parser (2.6.5.0)
17
+ ast (~> 2.4.0)
18
+ pry (0.12.2)
19
+ coderay (~> 1.1.0)
20
+ method_source (~> 0.9.0)
21
+ rainbow (3.0.0)
22
+ rspec (3.9.0)
23
+ rspec-core (~> 3.9.0)
24
+ rspec-expectations (~> 3.9.0)
25
+ rspec-mocks (~> 3.9.0)
26
+ rspec-core (3.9.0)
27
+ rspec-support (~> 3.9.0)
28
+ rspec-expectations (3.9.0)
29
+ diff-lcs (>= 1.2.0, < 2.0)
30
+ rspec-support (~> 3.9.0)
31
+ rspec-mocks (3.9.0)
32
+ diff-lcs (>= 1.2.0, < 2.0)
33
+ rspec-support (~> 3.9.0)
34
+ rspec-support (3.9.0)
35
+ rubocop (0.77.0)
36
+ jaro_winkler (~> 1.5.1)
37
+ parallel (~> 1.10)
38
+ parser (>= 2.6)
39
+ rainbow (>= 2.2.2, < 4.0)
40
+ ruby-progressbar (~> 1.7)
41
+ unicode-display_width (>= 1.4.0, < 1.7)
42
+ rubocop-performance (1.5.1)
43
+ rubocop (>= 0.71.0)
44
+ rubocop-rspec (1.37.0)
45
+ rubocop (>= 0.68.1)
46
+ ruby-progressbar (1.10.1)
47
+ ruby-sdl2 (0.3.5)
48
+ unicode-display_width (1.6.0)
49
+
50
+ PLATFORMS
51
+ ruby
52
+
53
+ DEPENDENCIES
54
+ hemi!
55
+ pry (~> 0.12)
56
+ rspec (~> 3.9)
57
+ rubocop (~> 0.77)
58
+ rubocop-performance (~> 1.5)
59
+ rubocop-rspec (~> 1.37)
60
+
61
+ BUNDLED WITH
62
+ 2.1.4
data/README.md ADDED
@@ -0,0 +1,20 @@
1
+ # Hemi
2
+
3
+ ## Whatshisface
4
+ This is a _Work In Progress_ simplistic game engine based on SDL2.
5
+
6
+ Made for self-educational purposes.
7
+
8
+ ## Setup
9
+
10
+ #### 1. Required libraries
11
+
12
+ Install `sdl2`, `sdl2_image`, `sdl2_mixer` and `sdl2_ttf` libraries. For MacOS you can simply `brew install` all of them.
13
+
14
+ #### 2. Install Ruby and gems
15
+
16
+ Install specific ruby version using Rbenv (`rbenv install`) or RVM (yuck)
17
+
18
+ Make sure you have Bundler gem installed for this revsion (`gem install bundler -v=1.17.3`)
19
+
20
+ And `bundle install` away.
data/hemi.gemspec ADDED
@@ -0,0 +1,33 @@
1
+ lib = File.expand_path("lib", __dir__)
2
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
+ require "hemi/version"
4
+
5
+ ERR_RG_2_REQUIRED = "RubyGems 2.0 or newer is required to protect against public gem pushes.".freeze
6
+
7
+ Gem::Specification.new do |spec|
8
+ # RubyGems < 2.0 does not allow to specify metadata. We do not want to use RubyGems < 2.0
9
+ raise ERR_RG_2_REQUIRED unless spec.respond_to?(:metadata)
10
+
11
+ spec.name = "hemi"
12
+ spec.version = Hemi::VERSION.dup
13
+ spec.date = "2020-12-21"
14
+ spec.summary = "A simplistic game engine based on SDL2. Because I can."
15
+ spec.authors = ["Jakub Żuchowski"]
16
+ spec.email = "ellmo@ellmo.net"
17
+ spec.homepage = "https://github.com/ellmo/hemi"
18
+ spec.license = "MIT"
19
+ # Fetch all git-versioned files, excluding all vendor, test, demo and example locations.
20
+ spec.files = `git ls-files -z`.split("\x0").reject do |f|
21
+ f.match(%r{^(.bundle|demo|examples|spec|features|vendor|assets)/})
22
+ end
23
+
24
+ spec.required_ruby_version = ">= 2.6.0"
25
+
26
+ spec.add_dependency "pry", "~> 0.12"
27
+ spec.add_dependency "ruby-sdl2", "0.3.5"
28
+
29
+ spec.add_development_dependency "rspec", "~> 3.9"
30
+ spec.add_development_dependency "rubocop", "~> 0.77"
31
+ spec.add_development_dependency "rubocop-performance", "~> 1.5"
32
+ spec.add_development_dependency "rubocop-rspec", "~> 1.37"
33
+ end
@@ -0,0 +1,58 @@
1
+ require "singleton"
2
+ require "sdl2"
3
+
4
+ require_relative "loader"
5
+
6
+ module Hemi
7
+ module Engine
8
+ @debug = false
9
+
10
+ def initialize
11
+ sdl_init
12
+ super
13
+ end
14
+
15
+ attr_reader :window
16
+
17
+ def sdl_init
18
+ SDL2.init(SDL2::INIT_EVERYTHING)
19
+ end
20
+
21
+ class << self
22
+ attr_reader :debug
23
+
24
+ def prepended(klass)
25
+ klass.include Singleton
26
+
27
+ Loader.load_tree "helpers"
28
+ Loader.load_tree "render"
29
+ Loader.load_tree "input"
30
+ Loader.load_tree "event"
31
+ end
32
+
33
+ def debug_on!
34
+ @debug = true
35
+ end
36
+
37
+ def debug_off!
38
+ @debug = false
39
+ end
40
+ end
41
+
42
+ def run
43
+ super if defined?(super)
44
+ init_window
45
+ start_loop
46
+ end
47
+
48
+ private
49
+
50
+ def init_window
51
+ @window = Hemi::Render::Window.instance
52
+ end
53
+
54
+ def start_loop
55
+ Hemi::Event::LoopMachine.instance.call
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,52 @@
1
+ module Hemi::Event
2
+ class EventLoop
3
+
4
+ def initialize(logic, events)
5
+ @logic = logic
6
+ @events = events.each_with_object({}) do |(key, action), hsh|
7
+ hsh[SDL2::Key::Scan.const_get(key.upcase)] = action
8
+ end
9
+ end
10
+
11
+ attr_reader :logic, :events, :event
12
+
13
+ def handle(event)
14
+ @event = event
15
+
16
+ case event
17
+ when SDL2::Event::KeyDown
18
+ handle_key
19
+ end
20
+
21
+ @event = nil
22
+ end
23
+
24
+ def process
25
+ logic.call
26
+ end
27
+
28
+ private
29
+
30
+ def handle_key
31
+ if (action = events[event.scancode]).is_a? Symbol
32
+ instance_eval action.to_s
33
+ else
34
+ action.call
35
+ end
36
+ end
37
+
38
+ def key_event?
39
+ event.is_a?
40
+ end
41
+
42
+ def key_down
43
+ return unless key_event?
44
+
45
+ SDL2::Key::Scan.const_get(event.scancode).downcase
46
+ end
47
+
48
+ def debug!
49
+ Hemi::Engine.debug_on!
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,62 @@
1
+ module Hemi::Event
2
+ class LoopMachine
3
+ include Singleton
4
+
5
+ @loops = {}
6
+ @current = nil
7
+
8
+ attr_reader :event
9
+
10
+ def call
11
+ loop do
12
+ Hemi::Render::Window.wipe_screen
13
+
14
+ handle_events while poll_event
15
+ process_logic
16
+
17
+ Hemi::Render::Window.renderer.present
18
+ debug!
19
+ sleep 0.1
20
+ end
21
+ end
22
+
23
+ class << self
24
+ attr_reader :loops, :current
25
+
26
+ def register(name, logic, events)
27
+ event_loop = EventLoop.new(logic, events)
28
+ @current = event_loop if loops.empty?
29
+ @loops[name] = event_loop
30
+
31
+ event_loop
32
+ end
33
+
34
+ def [](name)
35
+ @loops[name]
36
+ end
37
+
38
+ def switch(name)
39
+ @current = LoopMachine[name]
40
+ end
41
+ end
42
+
43
+ private
44
+
45
+ def handle_events
46
+ LoopMachine.current.handle event
47
+ end
48
+
49
+ def process_logic
50
+ LoopMachine.current.process
51
+ end
52
+
53
+ def poll_event
54
+ @event = SDL2::Event.poll
55
+ end
56
+
57
+ def debug!
58
+ binding.pry if Hemi::Engine.debug # rubocop:disable Lint/Debugger
59
+ Hemi::Engine.debug_off!
60
+ end
61
+ end
62
+ end
File without changes
@@ -0,0 +1,2 @@
1
+ Size = Struct.new(:width, :height, keyword_init: true)
2
+ Position = Struct.new(:x, :y, keyword_init: true)
@@ -0,0 +1,13 @@
1
+ module Hemi
2
+ module Loader
3
+ def self.load_tree(tree_dir)
4
+ if File.exist?(manifest_file = File.join(__dir__, tree_dir, "_manifest.rb"))
5
+ require manifest_file
6
+ else
7
+ Dir[File.join(__dir__, tree_dir, "**", "*.rb")].sort.each do |file|
8
+ require file
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,4 @@
1
+ require_relative "window"
2
+ require_relative "texture"
3
+ require_relative "sprite"
4
+ require_relative "font"
@@ -0,0 +1,55 @@
1
+ module Hemi::Render
2
+ class Font < Texture
3
+ SDL2::TTF.init
4
+
5
+ ALLOWED_MODES = %i[solid blended shaded].freeze
6
+ FONT_FILE_PATTERN = /([\w-]*)_([\d]*)/.freeze
7
+
8
+ # ERR__INVALID_FONT_NAME = "Invalid font name format. :font_name_size expected".freeze
9
+ # ERR__INVALID_TEXTURE_SIZE = "Invalid texture size.".freeze
10
+ # ERR__INVALID_POSITION = "Ivalid position.".freeze
11
+
12
+ @fonts = {}
13
+
14
+ def initialize(name_size)
15
+ name, size = *name_size.to_s.scan(FONT_FILE_PATTERN).flatten
16
+ @font_path = "assets/fonts/#{name}.ttf"
17
+ @font = SDL2::TTF.open(font_path, size.to_i)
18
+
19
+ Font.register(name_size, self)
20
+ rescue SDL2::Error => _e
21
+ raise ArgumentError, format(ERR__FONT_NOT_FOUND, font_path)
22
+ end
23
+
24
+ attr_reader :font_path, :size, :font
25
+
26
+ def render(text, position: nil, mode: :blended)
27
+ @texture = Hemi::Render::Window
28
+ .renderer
29
+ .create_texture_from(surface(text, mode: mode))
30
+ Hemi::Render::Window.renderer.copy(texture, nil, rectangle(position: position))
31
+ end
32
+
33
+ class << self
34
+ attr_reader :fonts
35
+
36
+ def bucket
37
+ :fonts
38
+ end
39
+ end
40
+
41
+ private
42
+
43
+ def surface(text, color: [255, 255, 255], mode: :blended, shade: [0, 0, 0])
44
+ raise(ERR__INVALID_MODE) unless ALLOWED_MODES.include? mode
45
+
46
+ case mode
47
+ when :blended, :solid
48
+ font.send("render_#{mode}", text, color)
49
+ when :shaded
50
+ font.render_shaded(text, color, shade)
51
+ end
52
+ end
53
+
54
+ end
55
+ end
@@ -0,0 +1,26 @@
1
+ module Hemi::Render
2
+ class Sprite < Texture
3
+ ERR__IMAGE_NOT_FOUND = "Image %s not found.".freeze
4
+
5
+ @sprites = {}
6
+
7
+ def initialize(name)
8
+ @texture = Hemi::Render::Window.renderer.load_texture("assets/img/#{name}.bmp")
9
+ Sprite.register(name, self)
10
+ rescue SDL2::Error => _e
11
+ raise ArgumentError, format(ERR__IMAGE_NOT_FOUND, font_path)
12
+ end
13
+
14
+ def render(position: nil, size: nil)
15
+ Hemi::Render::Window.renderer.copy(texture, nil, rectangle(position: position, size: size))
16
+ end
17
+
18
+ class << self
19
+ attr_reader :sprites
20
+
21
+ def bucket
22
+ :sprites
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,75 @@
1
+ module Hemi::Render
2
+ class Texture
3
+ ERR__INVALID_POSITION = "Ivalid position.".freeze
4
+
5
+ def initialize(name)
6
+ raise NotImplementedError
7
+ end
8
+
9
+ attr_reader :texture
10
+
11
+ def render
12
+ raise NotImplementedError
13
+ end
14
+
15
+ class << self
16
+ def register(name, texture)
17
+ public_send(bucket)[name] ||= texture
18
+ end
19
+
20
+ def [](name)
21
+ public_send(bucket)[name] || new(name)
22
+ end
23
+
24
+ def purge!
25
+ instance_variable_set "@#{bucket}", {}
26
+ end
27
+
28
+ def bucket
29
+ raise NotImplementedError
30
+ end
31
+ end
32
+
33
+ private
34
+
35
+ def rectangle(size: nil, position: nil)
36
+ SDL2::Rect.new(*calculate_position(position), *calculate_size(size))
37
+ end
38
+
39
+ def calculate_size(size = nil)
40
+ size_obj = Size.new(height: nil, width: nil)
41
+
42
+ if size.is_a? Array
43
+ size_obj.height = size[0]
44
+ size_obj.width = size[1]
45
+ elsif size.is_a? Hash
46
+ size_obj.height = size[:height]
47
+ size_obj.width = size[:width]
48
+ else
49
+ size_obj.height = texture.h
50
+ size_obj.width = texture.w
51
+ end
52
+
53
+ size_obj
54
+ end
55
+
56
+ def calculate_position(position = nil)
57
+ position_obj = Position.new(x: nil, y: nil)
58
+
59
+ if position.nil?
60
+ position_obj.x = 0
61
+ position_obj.y = 0
62
+ elsif position.is_a? Array
63
+ position_obj.x = position[0]
64
+ position_obj.y = position[1]
65
+ elsif position.is_a? Hash
66
+ position_obj.x = position[:x]
67
+ position_obj.y = position[:y]
68
+ else
69
+ raise ArgumentError(ERR__INVALID_POSITION)
70
+ end
71
+
72
+ position_obj
73
+ end
74
+ end
75
+ end
@@ -0,0 +1,37 @@
1
+ module Hemi::Render
2
+ class Window
3
+ include Singleton
4
+
5
+ DEFAULT_WINDOW_WIDTH = 640
6
+ DEFAULT_WINDOW_HEIGHT = 480
7
+
8
+ def initialize(width = DEFAULT_WINDOW_WIDTH, height = DEFAULT_WINDOW_HEIGHT)
9
+ @size = Size.new(width: width, height: height)
10
+ end
11
+
12
+ attr_reader :size
13
+
14
+ def renderer
15
+ @renderer ||= sdl_window.create_renderer(-1, 0)
16
+ end
17
+
18
+ def sdl_window
19
+ @sdl_window ||= SDL2::Window.create(
20
+ "Hemi",
21
+ SDL2::Window::POS_CENTERED,
22
+ SDL2::Window::POS_CENTERED,
23
+ *size,
24
+ 0
25
+ )
26
+ end
27
+
28
+ def self.wipe_screen
29
+ instance.renderer.draw_color = [0, 0, 0]
30
+ instance.renderer.fill_rect(SDL2::Rect.new(0, 0, *instance.size))
31
+ end
32
+
33
+ def self.renderer
34
+ instance.renderer
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,3 @@
1
+ module Hemi
2
+ VERSION = "0.0.2".freeze
3
+ end
data/lib/hemi.rb ADDED
@@ -0,0 +1,4 @@
1
+ require "sdl2"
2
+ require "pry"
3
+ require "hemi/version"
4
+ require "hemi/engine"
metadata ADDED
@@ -0,0 +1,147 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: hemi
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ platform: ruby
6
+ authors:
7
+ - Jakub Żuchowski
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2020-12-21 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: pry
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '0.12'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '0.12'
27
+ - !ruby/object:Gem::Dependency
28
+ name: ruby-sdl2
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '='
32
+ - !ruby/object:Gem::Version
33
+ version: 0.3.5
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '='
39
+ - !ruby/object:Gem::Version
40
+ version: 0.3.5
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '3.9'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '3.9'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rubocop
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '0.77'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '0.77'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rubocop-performance
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '1.5'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '1.5'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rubocop-rspec
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '1.37'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '1.37'
97
+ description:
98
+ email: ellmo@ellmo.net
99
+ executables: []
100
+ extensions: []
101
+ extra_rdoc_files: []
102
+ files:
103
+ - ".gitignore"
104
+ - ".rspec"
105
+ - ".rubocop.yml"
106
+ - ".ruby-version"
107
+ - Gemfile
108
+ - Gemfile.lock
109
+ - README.md
110
+ - hemi.gemspec
111
+ - lib/hemi.rb
112
+ - lib/hemi/engine.rb
113
+ - lib/hemi/event/event_loop.rb
114
+ - lib/hemi/event/loop_machine.rb
115
+ - lib/hemi/helpers/self_manager.rb
116
+ - lib/hemi/helpers/simple.rb
117
+ - lib/hemi/loader.rb
118
+ - lib/hemi/render/_manifest.rb
119
+ - lib/hemi/render/font.rb
120
+ - lib/hemi/render/sprite.rb
121
+ - lib/hemi/render/texture.rb
122
+ - lib/hemi/render/window.rb
123
+ - lib/hemi/version.rb
124
+ homepage: https://github.com/ellmo/hemi
125
+ licenses:
126
+ - MIT
127
+ metadata: {}
128
+ post_install_message:
129
+ rdoc_options: []
130
+ require_paths:
131
+ - lib
132
+ required_ruby_version: !ruby/object:Gem::Requirement
133
+ requirements:
134
+ - - ">="
135
+ - !ruby/object:Gem::Version
136
+ version: 2.6.0
137
+ required_rubygems_version: !ruby/object:Gem::Requirement
138
+ requirements:
139
+ - - ">="
140
+ - !ruby/object:Gem::Version
141
+ version: '0'
142
+ requirements: []
143
+ rubygems_version: 3.0.3
144
+ signing_key:
145
+ specification_version: 4
146
+ summary: A simplistic game engine based on SDL2. Because I can.
147
+ test_files: []