jacius / rebirth

High-level game framework, built on Rubygame & OpenGL. (On hold)

This URL has Read+Write access

jacius (author)
Wed Feb 25 22:56:58 -0800 2009
commit  5aaeedc86182aecbff26ed71178805826127bd08
tree    8c79ccecc4ecf93d65e5af486064880b084de9a8
parent  ef6da6925979b82eaf4cd3f7095ec16f5ec7b20a
rebirth / demos / 03_box_demo.rb
100755 106 lines (83 sloc) 2.356 kb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
#!/usr/bin/env ruby
 
#
#
# DEMO: Box
#
# DESC: Displays a solid white box. Quits when Q key pressed.
#
# DATE: 2008-06-08
#
#
#--
#
# This file is one part of:
#
# Rebirth - Game development library for Ruby
# Copyright (C) 2008, 2009 John Croisant
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License, version 2.1, as published by the Free Software Foundation.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
#++
 
# Prefer local library over installed version.
$:.unshift( File.join( File.dirname(__FILE__), "..", "lib" ) )
 
require 'rebirth'
include Rebirth
include Rubygame::EventTriggers
include Rubygame::EventActions
 
 
# A temp class until the real camera is implemented.
class BasicCamera
  def initialize
    setup_gl
    setup_projection
  end
 
  def pre_draw
    glClear(GL_COLOR_BUFFER_BIT)
    glLoadIdentity()
  end
 
  def post_draw
    glFlush()
    Rubygame::GL.swap_buffers
  end
 
  def setup_gl
    glClearColor(0.2,0,0.2,1)
    glClearDepth(100)
  end
 
  def setup_projection
glMatrixMode( GL_PROJECTION )
glLoadIdentity()
glOrtho(0, 640, 0, 480, -100, 100)
    glMatrixMode( GL_MODELVIEW )
  end
 
end
 
View.open([640,480])
 
evm = EventManager.instance
evm.make_magic_hooks( :q => Proc.new { throw :quit } )
 
puts "Press Q to exit."
 
 
# Create Camera and register to receive DrawEvents
camera = BasicCamera.new
evm.make_magic_hooks_for( camera, { DrawEvent => :pre_draw } )
 
 
# Create Box and register to receive DrawEvents
box = Box.new( :pos => [320,240],
               :rot => 15,
               :scale => [128,64] )
evm.make_magic_hooks_for( box, { DrawEvent => :draw } )
 
 
# Another hook, this time for after everything is drawn
evm.make_magic_hooks_for( camera, { DrawEvent => :post_draw } )
 
 
draw_event = DrawEvent.new
 
catch :quit do
  loop do
    evm.push( draw_event )
    evm.update
  end
end