Module: Hemi::Engine
- Defined in:
- lib/hemi/engine.rb
Overview
Entry-level module, meant to be prepended in the main class of the game using the hemi gem.
Prepending this module allows developers to write their custom +initialize+ and +run+ methods
without overriding any of the mandatory logic. Becasue of the prepend behavior,
Hemi::Engine will end up first in ancestors' list.
So, technically, if Game implements its own initialize / run methods, those will be
super-called from Hemi::Engine:
require "hemi"
class Game
prepend Hemi::Engine
end
Game.ancestors
=> [Hemi::Engine, Game, Singleton, Object, PP::ObjectMixin, Kernel, BasicObject]
Class Attribute Summary collapse
-
.debug ⇒ Boolean
readonly
Returns
trueif the engine is set to debugging mode. -
.stop ⇒ Boolean
readonly
Returns
trueif the engine is set to gracefully exit upon finishing this event loop.
Instance Attribute Summary collapse
- #window ⇒ SDL2::Window readonly private
Class Method Summary collapse
-
.debug_off! ⇒ Object
private
Sets
@debuginstance variable tofalse. -
.debug_on! ⇒ Object
private
Sets
@debuginstance variable totrue. -
.prepended(klass) ⇒ Object
Ran when a class calls to be prepended by this module.
-
.stop! ⇒ Object
private
Sets
@stopinstance variable totrue.
Instance Method Summary collapse
-
#initialize ⇒ Object
Initializes all required
SDLmodules and then proceeds to execute the constructor of the class it prepends. -
#run ⇒ Object
Starts the game engine.
Class Attribute Details
.debug ⇒ Boolean (readonly)
Returns true if the engine is set to debugging mode.
43 44 45 |
# File 'lib/hemi/engine.rb', line 43 def debug @debug end |
.stop ⇒ Boolean (readonly)
Returns true if the engine is set to gracefully exit upon finishing
this event loop.
46 47 48 |
# File 'lib/hemi/engine.rb', line 46 def stop @stop end |
Instance Attribute Details
#window ⇒ SDL2::Window (readonly)
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
39 40 41 |
# File 'lib/hemi/engine.rb', line 39 def window @window end |
Class Method Details
.debug_off! ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Ideally this method should NOT be called manually. It is called internally right after
LoopMachine handles binding.pry in #debug? method.
Sets @debug instance variable to false. This makes sure that after opening a pry
REPL session and ending it with calling exit from pry's REPL, the @debug flag is off
and the program can continue operating normally.
85 86 87 |
# File 'lib/hemi/engine.rb', line 85 def debug_off! @debug = false end |
.debug_on! ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Ideally this method should NOT be called manually, EventLoop
calls it when it receives an event resulting in a :debug! action.
Sets @debug instance variable to true. Doing this will trigger the current
LoopMachine's EventLoop to stop at
the nearest binding.pry (thus, halting the game and allowing game's current state to be
debugged).
73 74 75 |
# File 'lib/hemi/engine.rb', line 73 def debug_on! @debug = true end |
.prepended(klass) ⇒ Object
Ran when a class calls to be prepended by this module.
As mentioned - this module is meant to be prepended in the main game class. When
prepended, this method is automatically ran, making the class a Singleton and makes sure all
Hemi modules are loaded in required order.
55 56 57 58 59 60 61 62 |
# File 'lib/hemi/engine.rb', line 55 def prepended(klass) klass.include Singleton Loader.load_tree "helpers" Loader.load_tree "render" Loader.load_tree "input" Loader.load_tree "event" end |
.stop! ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Ideally this method should NOT be called manually, EventLoop
calls it when it receives an event resulting in a :stop! action.
Sets @stop instance variable to true. This triggers a graceful exit of the entire
LoopMachine's EventLoop - and,
by extension, exits the program upon the next complete loop.
97 98 99 |
# File 'lib/hemi/engine.rb', line 97 def stop! @stop = true end |
Instance Method Details
#initialize ⇒ Object
Initializes all required SDL modules and then proceeds to execute the constructor of the
class it prepends.
32 33 34 35 |
# File 'lib/hemi/engine.rb', line 32 def initialize sdl_init super end |
#run ⇒ Object
Starts the game engine. Takes care of all custom logic in prepended class' #run method, then
initializes a program window and calls LoopMachine to start running
its event loops.
105 106 107 108 109 |
# File 'lib/hemi/engine.rb', line 105 def run super if defined?(super) init_window start_loop end |