2013-02-21 21:07:31 -08:00
/*
2015-01-01 15:04:46 -08:00
* Copyright 2011 - 2015 Branimir Karadzic . All rights reserved .
2013-02-21 21:07:31 -08:00
* License : http : //www.opensource.org/licenses/BSD-2-Clause
*/
2013-11-14 19:10:10 -08:00
# ifndef ENTRY_H_HEADER_GUARD
# define ENTRY_H_HEADER_GUARD
2013-02-21 21:07:31 -08:00
2013-08-07 21:45:56 -07:00
# include "dbg.h"
2014-12-15 21:08:55 -08:00
# include <string.h> // memset
2013-08-07 21:45:56 -07:00
# include <bx/bx.h>
2015-01-07 22:36:36 -08:00
namespace bx { struct FileReaderI ; struct FileWriterI ; struct ReallocatorI ; }
2014-05-03 15:18:28 -07:00
2014-06-01 12:01:50 -07:00
extern " C " int _main_ ( int _argc , char * * _argv ) ;
2014-09-22 19:34:10 -07:00
# define ENTRY_WINDOW_FLAG_NONE UINT32_C(0x00000000)
# define ENTRY_WINDOW_FLAG_ASPECT_RATIO UINT32_C(0x00000001)
2014-10-11 20:42:42 -07:00
# define ENTRY_WINDOW_FLAG_FRAME UINT32_C(0x00000002)
2014-09-22 19:34:10 -07:00
2013-02-21 21:07:31 -08:00
namespace entry
{
2014-12-15 20:58:54 -08:00
struct WindowHandle { uint16_t idx ; } ;
inline bool isValid ( WindowHandle _handle ) { return UINT16_MAX ! = _handle . idx ; }
struct GamepadHandle { uint16_t idx ; } ;
inline bool isValid ( GamepadHandle _handle ) { return UINT16_MAX ! = _handle . idx ; }
2014-09-18 22:32:33 -07:00
2013-02-21 21:07:31 -08:00
struct MouseButton
{
enum Enum
{
None ,
Left ,
Middle ,
Right ,
Count
} ;
} ;
2014-12-15 20:58:54 -08:00
struct GamepadAxis
{
enum Enum
{
LeftX ,
LeftY ,
LeftZ ,
RightX ,
RightY ,
RightZ ,
Count
} ;
} ;
2013-02-21 21:07:31 -08:00
struct Modifier
{
enum Enum
{
None = 0 ,
LeftAlt = 0x01 ,
RightAlt = 0x02 ,
LeftCtrl = 0x04 ,
RightCtrl = 0x08 ,
LeftShift = 0x10 ,
RightShift = 0x20 ,
LeftMeta = 0x40 ,
RightMeta = 0x80 ,
} ;
} ;
struct Key
{
enum Enum
{
None = 0 ,
Esc ,
Return ,
Tab ,
Space ,
Backspace ,
Up ,
Down ,
Left ,
Right ,
PageUp ,
PageDown ,
Home ,
End ,
Print ,
Plus ,
Minus ,
F1 ,
F2 ,
F3 ,
F4 ,
F5 ,
F6 ,
F7 ,
F8 ,
F9 ,
F10 ,
F11 ,
F12 ,
NumPad0 ,
NumPad1 ,
NumPad2 ,
NumPad3 ,
NumPad4 ,
NumPad5 ,
NumPad6 ,
NumPad7 ,
NumPad8 ,
NumPad9 ,
Key0 ,
Key1 ,
Key2 ,
Key3 ,
Key4 ,
Key5 ,
Key6 ,
Key7 ,
Key8 ,
Key9 ,
KeyA ,
KeyB ,
KeyC ,
KeyD ,
KeyE ,
KeyF ,
KeyG ,
KeyH ,
KeyI ,
KeyJ ,
KeyK ,
KeyL ,
KeyM ,
KeyN ,
KeyO ,
KeyP ,
KeyQ ,
KeyR ,
KeyS ,
KeyT ,
KeyU ,
KeyV ,
KeyW ,
KeyX ,
KeyY ,
KeyZ ,
2014-08-06 01:49:21 +01:00
2014-12-15 20:58:54 -08:00
GamepadA ,
GamepadB ,
GamepadX ,
GamepadY ,
GamepadThumbL ,
GamepadThumbR ,
GamepadShoulderL ,
GamepadShoulderR ,
GamepadUp ,
GamepadDown ,
GamepadLeft ,
GamepadRight ,
GamepadBack ,
GamepadStart ,
2014-12-20 10:38:40 -08:00
GamepadGuide ,
2014-12-15 20:58:54 -08:00
Count
2013-02-21 21:07:31 -08:00
} ;
} ;
2013-08-07 21:45:56 -07:00
struct MouseState
2013-02-21 21:07:31 -08:00
{
2013-08-07 21:45:56 -07:00
MouseState ( )
: m_mx ( 0 )
, m_my ( 0 )
2014-08-05 21:13:50 -07:00
, m_mz ( 0 )
2013-02-21 21:07:31 -08:00
{
2013-08-07 21:45:56 -07:00
for ( uint32_t ii = 0 ; ii < entry : : MouseButton : : Count ; + + ii )
{
m_buttons [ ii ] = entry : : MouseButton : : None ;
}
}
2013-02-21 21:07:31 -08:00
2014-08-05 21:13:50 -07:00
int32_t m_mx ;
int32_t m_my ;
int32_t m_mz ;
2013-08-07 21:45:56 -07:00
uint8_t m_buttons [ entry : : MouseButton : : Count ] ;
2013-02-21 21:07:31 -08:00
} ;
2014-12-15 20:58:54 -08:00
struct GamepadState
{
GamepadState ( )
{
memset ( m_axis , 0 , sizeof ( m_axis ) ) ;
}
int32_t m_axis [ entry : : GamepadAxis : : Count ] ;
} ;
2014-09-22 19:34:10 -07:00
bool processEvents ( uint32_t & _width , uint32_t & _height , uint32_t & _debug , uint32_t & _reset , MouseState * _mouse = NULL ) ;
2013-02-21 21:07:31 -08:00
2014-08-06 01:49:34 +01:00
bx : : FileReaderI * getFileReader ( ) ;
bx : : FileWriterI * getFileWriter ( ) ;
2015-01-07 22:36:36 -08:00
bx : : ReallocatorI * getAllocator ( ) ;
2014-08-06 01:49:34 +01:00
2014-09-22 19:34:10 -07:00
WindowHandle createWindow ( int32_t _x , int32_t _y , uint32_t _width , uint32_t _height , uint32_t _flags = ENTRY_WINDOW_FLAG_NONE , const char * _title = " " ) ;
2014-09-18 22:32:33 -07:00
void destroyWindow ( WindowHandle _handle ) ;
2014-09-22 19:34:10 -07:00
void setWindowPos ( WindowHandle _handle , int32_t _x , int32_t _y ) ;
2014-09-18 22:32:33 -07:00
void setWindowSize ( WindowHandle _handle , uint32_t _width , uint32_t _height ) ;
void setWindowTitle ( WindowHandle _handle , const char * _title ) ;
void toggleWindowFrame ( WindowHandle _handle ) ;
2015-03-07 23:38:48 +01:00
void toggleFullscreen ( WindowHandle _handle ) ;
2014-09-18 22:32:33 -07:00
void setMouseLock ( WindowHandle _handle , bool _lock ) ;
2014-08-05 20:57:52 +01:00
2014-09-22 19:34:10 -07:00
struct WindowState
{
WindowState ( )
: m_nwh ( NULL )
{
m_handle . idx = UINT16_MAX ;
}
WindowHandle m_handle ;
uint32_t m_width ;
uint32_t m_height ;
MouseState m_mouse ;
void * m_nwh ;
} ;
bool processWindowEvents ( WindowState & _state , uint32_t & _debug , uint32_t & _reset ) ;
2013-02-21 21:07:31 -08:00
} // namespace entry
2013-11-14 19:10:10 -08:00
# endif // ENTRY_H_HEADER_GUARD