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 +7 -0
- data/.gitignore +8 -0
- data/.rspec +3 -0
- data/.rubocop.yml +50 -0
- data/.ruby-version +1 -0
- data/Gemfile +3 -0
- data/Gemfile.lock +62 -0
- data/README.md +20 -0
- data/hemi.gemspec +33 -0
- data/lib/hemi/engine.rb +58 -0
- data/lib/hemi/event/event_loop.rb +52 -0
- data/lib/hemi/event/loop_machine.rb +62 -0
- data/lib/hemi/helpers/self_manager.rb +0 -0
- data/lib/hemi/helpers/simple.rb +2 -0
- data/lib/hemi/loader.rb +13 -0
- data/lib/hemi/render/_manifest.rb +4 -0
- data/lib/hemi/render/font.rb +55 -0
- data/lib/hemi/render/sprite.rb +26 -0
- data/lib/hemi/render/texture.rb +75 -0
- data/lib/hemi/render/window.rb +37 -0
- data/lib/hemi/version.rb +3 -0
- data/lib/hemi.rb +4 -0
- metadata +147 -0
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
data/.rspec
ADDED
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
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
|
data/lib/hemi/engine.rb
ADDED
@@ -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
|
data/lib/hemi/loader.rb
ADDED
@@ -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,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
|
data/lib/hemi/version.rb
ADDED
data/lib/hemi.rb
ADDED
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: []
|