Skip to content
/ hemi Public

Simplistic game engine using Ruby and SDL2

Notifications You must be signed in to change notification settings

ellmo/hemi

Folders and files

NameName
Last commit message
Last commit date

Latest commit

cbb9722 · Aug 24, 2022
Dec 21, 2020
Dec 27, 2020
Dec 17, 2020
Dec 4, 2021
Dec 4, 2021
Dec 31, 2020
Jan 1, 2021
Dec 21, 2020
Dec 30, 2020
May 2, 2020
Jan 1, 2021
Jan 2, 2021
Dec 21, 2020
Dec 4, 2021
Dec 4, 2021
Jan 1, 2021

Repository files navigation

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

About

Simplistic game engine using Ruby and SDL2

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages