require "RubySFML" include SFML require "gl" include Gl class TextTest < Text # Test overriding a virtual C++ method def render(win) self.color = Color.new(color.r+1, color.g+2, color.b+3, 255) super # Call base class's version of render (in C++) # Custom OpenGL calls rect = getRect() #win.beginOpenGL() glColor4f(1, 1, 1, 1) glLineWidth(5) glBegin(GL_LINES) glVertex2f(0, 0) glVertex2f(rect.width, rect.height) glVertex2f(rect.width, 0) glVertex2f(0, rect.height) glEnd() #win.endOpenGL() end end # Test Clock class clock = Clock.new 10.times { sleep 0.01; puts "Clock - #{clock}" } puts # Test VideoMode class puts "Current desktop mode - #{VideoMode::desktop}" puts "32-bit video modes:" VideoMode::each {|mode| puts mode.to_s if mode.bpp == 32 } puts # Test RenderWindow class mode = VideoMode.new(800, 600, 32) win = RenderWindow.new(mode, "RubySFML Test") win.useVerticalSync(false) win.showMouseCursor(false) win.setBackgroundColor(Color.Red) puts "Window - #{win}" puts "View Rect - #{win.view}" puts # Test Color, Image, and Sprite classes puts format("Red = 0x%X", Color.Red.toRGBA) puts format("Green = 0x%X", Color.Green.toRGBA) puts format("Blue = 0x%X", Color.Blue.toRGBA) puts format("Black = 0x%X", Color.Black.toRGBA) image = Image.new("media/cursor.png") sprite = Sprite.new(image) image.width.times {|x| puts "image[#{x},#{x}] = #{image[x,x]}" } image.createMaskFromColor(Color.Black) # Set black to transparent sprite.x = mode.w/2 - sprite.w/2 sprite.y = mode.h/2 - sprite.h/2 puts "Image - #{image}" puts "Sprite - #{sprite}" puts # Test Text (sfString) class text = TextTest.new("This is a test!") # Test Sound and SoundBuffer classes sb = SoundBuffer.new("media/cannon.wav") sound = Sound.new(sb) sound.volume = 100 puts "SoundBuffer - #{sound.buffer}" puts "Sound - #{sound}" # Simple game loop done = false while !done while e = win.getEvent() puts "Event - #{e.to_s}" # Dump events to stdout done = true if e.type == Event::Closed or (e.type == Event::KeyReleased and e.code == Key::Escape) sound.play if (e.type == Event::KeyPressed and e.code == Key::Space) or (e.type == Event::MouseButtonPressed and e.buttons == Mouse::Left) sprite.x, sprite.y = e.x-sprite.w/2, e.y-sprite.h/2 if e.type == Event::MouseMoved end text.left = 0 if (text.left += 1) >= 800 text.top = 0 if (text.top += 1) >= 600 win.draw(text) win.draw(sprite) win.display() end