2010-11-03 18:24:14 +08:00
|
|
|
/* rbSFML - Copyright (c) 2010 Henrik Valter Vogelius Hansson - groogy@groogy.se
|
|
|
|
* This software is provided 'as-is', without any express or
|
|
|
|
* implied warranty. In no event will the authors be held
|
|
|
|
* liable for any damages arising from the use of this software.
|
|
|
|
*
|
|
|
|
* Permission is granted to anyone to use this software for any purpose,
|
|
|
|
* including commercial applications, and to alter it and redistribute
|
|
|
|
* it freely, subject to the following restrictions:
|
|
|
|
*
|
|
|
|
* 1. The origin of this software must not be misrepresented;
|
|
|
|
* you must not claim that you wrote the original software.
|
|
|
|
* If you use this software in a product, an acknowledgment
|
|
|
|
* in the product documentation would be appreciated but
|
|
|
|
* is not required.
|
|
|
|
*
|
|
|
|
* 2. Altered source versions must be plainly marked as such,
|
|
|
|
* and must not be misrepresented as being the original software.
|
|
|
|
*
|
|
|
|
* 3. This notice may not be removed or altered from any
|
|
|
|
* source distribution.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include "main.hpp"
|
2010-11-04 00:53:48 +08:00
|
|
|
#include "Context.hpp"
|
2010-11-04 04:01:20 +08:00
|
|
|
#include "ContextSettings.hpp"
|
2010-11-06 23:38:26 +08:00
|
|
|
#include "Event.hpp"
|
2010-11-07 08:08:50 +08:00
|
|
|
#include "Input.hpp"
|
2010-11-15 16:33:41 +08:00
|
|
|
#include "VideoMode.hpp"
|
|
|
|
#include "Window.hpp"
|
2010-11-03 18:24:14 +08:00
|
|
|
|
2010-11-12 04:43:18 +08:00
|
|
|
#include <SFML/Window.hpp>
|
|
|
|
|
2010-11-15 16:32:08 +08:00
|
|
|
#include <iostream>
|
|
|
|
|
2010-11-03 18:24:14 +08:00
|
|
|
VALUE globalSFMLNamespace;
|
2010-11-08 02:10:17 +08:00
|
|
|
VALUE globalKeyNamespace;
|
|
|
|
VALUE globalMouseNamespace;
|
|
|
|
VALUE globalJoyNamespace;
|
|
|
|
VALUE globalStyleNamespace;
|
2010-11-03 18:24:14 +08:00
|
|
|
|
2010-11-16 17:04:35 +08:00
|
|
|
/* External classes */
|
|
|
|
VALUE globalVector2Class;
|
|
|
|
|
2010-11-03 18:24:14 +08:00
|
|
|
VALUE GetNamespace( void )
|
|
|
|
{
|
|
|
|
return globalSFMLNamespace;
|
|
|
|
}
|
|
|
|
|
2010-11-08 02:10:17 +08:00
|
|
|
static const char * keyNamesLetters[] =
|
|
|
|
{
|
2010-11-15 16:32:08 +08:00
|
|
|
"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O",
|
2010-11-08 02:10:17 +08:00
|
|
|
"P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"
|
|
|
|
};
|
|
|
|
|
|
|
|
static const char * keyNamesNum[] =
|
|
|
|
{
|
2010-11-15 16:32:08 +08:00
|
|
|
"Num0", "Num1", "Num2", "Num3", "Num4", "Num5", "Num6", "Num7", "Num8", "Num9"
|
2010-11-08 02:10:17 +08:00
|
|
|
};
|
|
|
|
|
|
|
|
static const char * keyNamesMisc[] =
|
|
|
|
{
|
|
|
|
"Escape", "LControl", "LShift", "LAlt", "LSystem", "RControl", "RShift", "RAlt", "RSystem",
|
|
|
|
"Menu", "LBracket", "RBracket", "SemiColon", "Comma", "Period", "Quote", "Slash",
|
|
|
|
"BackSlash", "Tilde", "Equal", "Dash", "Space", "Return", "Back", "Tab", "PageUp",
|
|
|
|
"PageDown", "End", "Home", "Insert", "Delete", "Add", "Subtract", "Multiply",
|
|
|
|
"Divide", "Left", "Right", "Up", "Down", "Numpad0", "Numpad1", "Numpad2", "Numpad3",
|
|
|
|
"Numpad4", "Numpad5", "Numpad6", "Numpad7", "Numpad8", "Numpad9", "F1", "F2", "F3",
|
2010-11-15 16:32:08 +08:00
|
|
|
"F4", "F5", "F6", "F7", "F8", "F9", "F10", "F11", "F12", "F13", "F14", "F15", "Pause",
|
2010-11-08 02:10:17 +08:00
|
|
|
"Count"
|
|
|
|
};
|
|
|
|
|
|
|
|
static const char * mouseNames[] =
|
|
|
|
{
|
|
|
|
"Left", "Right", "Middle", "XButton1", "XButton2", "ButtonCount"
|
|
|
|
};
|
|
|
|
|
|
|
|
static const char * axisNames[] =
|
|
|
|
{
|
|
|
|
"AxisX", "AxisY", "AxisZ", "AxisR", "AxisU", "AxisV", "AxisPOV",
|
|
|
|
"AxisCount"
|
|
|
|
};
|
|
|
|
|
|
|
|
void CreateKeyEnum( void )
|
|
|
|
{
|
|
|
|
globalKeyNamespace = rb_define_module_under( globalSFMLNamespace, "Key" );
|
2010-11-12 04:43:18 +08:00
|
|
|
for( int index = static_cast< int >( sf::Key::A ); index <= sf::Key::Z; index++ )
|
2010-11-08 02:10:17 +08:00
|
|
|
{
|
|
|
|
rb_define_const( globalKeyNamespace, keyNamesLetters[ index - sf::Key::A ], INT2FIX( index ) );
|
|
|
|
}
|
|
|
|
|
2010-11-15 16:32:08 +08:00
|
|
|
for( int index = static_cast< int >( sf::Key::Num0 ); index <= sf::Key::Num9; index++ )
|
2010-11-08 02:10:17 +08:00
|
|
|
{
|
|
|
|
rb_define_const( globalKeyNamespace, keyNamesNum[ index - sf::Key::Num0 ], INT2FIX( index ) );
|
|
|
|
}
|
|
|
|
|
2010-11-12 04:43:18 +08:00
|
|
|
for( int index = static_cast< int >( sf::Key::Escape ); index <= sf::Key::Count; index++ )
|
2010-11-08 02:10:17 +08:00
|
|
|
{
|
|
|
|
rb_define_const( globalKeyNamespace, keyNamesMisc[ index - sf::Key::Escape ], INT2FIX( index ) );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void CreateMouseEnum( void )
|
|
|
|
{
|
|
|
|
globalMouseNamespace = rb_define_module_under( globalSFMLNamespace, "Mouse" );
|
2010-11-12 04:43:18 +08:00
|
|
|
for( int index = static_cast< int >( sf::Mouse::Left ); index <= sf::Mouse::ButtonCount; index++ )
|
2010-11-08 02:10:17 +08:00
|
|
|
{
|
|
|
|
rb_define_const( globalMouseNamespace, mouseNames[ index - sf::Mouse::Left ], INT2FIX( index ) );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void CreateJoyEnum( void )
|
|
|
|
{
|
|
|
|
globalJoyNamespace = rb_define_module_under( globalSFMLNamespace, "Joy" );
|
2010-11-12 04:43:18 +08:00
|
|
|
for( int index = static_cast< int >( sf::Joy::AxisX ); index <= sf::Joy::AxisCount; index++ )
|
2010-11-08 02:10:17 +08:00
|
|
|
{
|
|
|
|
rb_define_const( globalJoyNamespace, axisNames[ index - sf::Joy::AxisX ], INT2FIX( index ) );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void CreateStyleEnum( void )
|
|
|
|
{
|
|
|
|
globalStyleNamespace = rb_define_module_under( globalSFMLNamespace, "Style" );
|
|
|
|
rb_define_const( globalStyleNamespace, "None", sf::Style::None );
|
|
|
|
rb_define_const( globalStyleNamespace, "Titlebar", sf::Style::Titlebar );
|
|
|
|
rb_define_const( globalStyleNamespace, "Resize", sf::Style::Resize );
|
|
|
|
rb_define_const( globalStyleNamespace, "Close", sf::Style::Close );
|
|
|
|
rb_define_const( globalStyleNamespace, "Fullscreen", sf::Style::Fullscreen );
|
|
|
|
rb_define_const( globalStyleNamespace, "Default", sf::Style::Default );
|
|
|
|
}
|
|
|
|
|
2010-11-16 16:09:41 +08:00
|
|
|
bool CheckDependencies( void )
|
|
|
|
{
|
|
|
|
if( rb_cvar_defined( globalSFMLNamespace, rb_intern( "SystemLoaded" ) ) == Qtrue )
|
|
|
|
{
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
2010-11-16 17:04:35 +08:00
|
|
|
VALUE RetrieveSFMLClass( const char * aName )
|
|
|
|
{
|
|
|
|
ID name = rb_intern( aName );
|
|
|
|
if( rb_cvar_defined( globalSFMLNamespace, name ) == Qfalse )
|
|
|
|
{
|
|
|
|
rb_raise( rb_eRuntimeError, "This module depends on SFML::%s", aName );
|
|
|
|
}
|
|
|
|
|
|
|
|
return rb_cvar_get( globalSFMLNamespace, name );
|
|
|
|
}
|
|
|
|
|
|
|
|
void RetrieveVector2Class( void )
|
|
|
|
{
|
|
|
|
globalVector2Class = RetrieveSFMLClass( "Vector2" );
|
|
|
|
}
|
|
|
|
|
2010-11-03 18:24:14 +08:00
|
|
|
void Init_window( void )
|
|
|
|
{
|
|
|
|
globalSFMLNamespace = rb_define_module( "SFML" );
|
2010-11-16 16:09:41 +08:00
|
|
|
if( CheckDependencies() == false )
|
|
|
|
{
|
|
|
|
rb_raise( rb_eRuntimeError, "This module depends on sfml-system" );
|
|
|
|
}
|
|
|
|
|
2010-11-16 17:04:35 +08:00
|
|
|
RetrieveVector2Class();
|
|
|
|
|
2010-11-08 02:10:17 +08:00
|
|
|
rb_define_const( globalSFMLNamespace, "WindowLoaded", Qtrue );
|
|
|
|
|
|
|
|
CreateKeyEnum();
|
|
|
|
CreateMouseEnum();
|
|
|
|
CreateJoyEnum();
|
|
|
|
CreateStyleEnum();
|
|
|
|
|
2010-11-04 00:53:48 +08:00
|
|
|
Init_Context();
|
2010-11-04 04:01:20 +08:00
|
|
|
Init_ContextSettings();
|
2010-11-06 23:38:26 +08:00
|
|
|
Init_Event();
|
2010-11-07 08:08:50 +08:00
|
|
|
Init_Input();
|
2010-11-15 16:33:41 +08:00
|
|
|
Init_VideoMode();
|
|
|
|
Init_Window();
|
2010-11-03 18:24:14 +08:00
|
|
|
}
|