Project

hemi

0.0
No release in over 3 years
Low commit activity in last 3 years
A simplistic game engine based on SDL2. Because I can.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

~> 3.9
~> 0.77
~> 0.20
~> 0.9

Runtime

~> 0.12
= 0.3.5
 Project Readme

Hemi

Whatshisface

This is a Work In Progress simplistic game engine based on SDL2.

Made for self-educational purposes.

Usage

0. Required libraries

Install sdl2, sdl2_image, sdl2_mixer and sdl2_ttf libraries. For MacOS you can simply brew install all of them.

1. Using the gem

1.0 installation

Install the gem, either straight-up with gem install hemi or using Bundler:

# Gemfile
source "https://rubygems.org"

gem "hemi"

1.1 prepend your starting class

require "hemi"

class Game
  prepend Hemi::Engine
end

1.2 prepare a logic proc

This proc will contain logic to be performed during each rendered frame.

Font   = Hemi::Render::Font
Sprite = Hemi::Render::Sprite

def text_logic
  proc {
    Font[:jost_32].render("quick brown fox jumped over the lazy dog", position: [20, 20])
    Font[:jost_16].render("press [space] to change LoopState", position: [20, 400])
    Font[:jost_16].render("press [q] or [esc] to quit", position: [20, 420])
    Font[:jost_16].render("press [F12] to start debug", position: [20, 440])
  }
end

def sprite_logic
  proc {
    Sprite[:gem].render(position: { y: 220, x: 20 })
    Sprite[:gem].render(position: { y: 320, x: 220 }, size: { height: 64, width: 128 })
    Font[:jost_16].render("press [space] to change LoopState", position: [20, 400])
    Font[:jost_16].render("press [q] or [esc] to quit", position: [20, 420])
    Font[:jost_16].render("press [F12] to start debug", position: [20, 440])
  }
end

1.3 prepare an {event:action} hash

LM = Hemi::Event::LoopMachine

def text_events
  {
    space: -> { LM.switch(:image) },
    escape: :stop!,
    q:      :stop!,
    f12:    :debug!
  }
end

def sprite_events
  {
    space: -> { LM.switch(:text) },
    escape: :stop!,
    q:      :stop!,
    f12:    :debug!
  }
end

1.4 register Loop Machine states

def run
  LM.register(:text, text_logic, text_events)
  LM.register(:image, sprite_logic, sprite_events)
end

1.5 and run it

Game.instance.run