Unigine::CustomApp Class
Header: | #include <UnigineCustomApp.h> |
The CustomApp class contains functions to control the Unigine application graphic context, which includes:
- Update parameters
- Events of the controls (keyboard, mouse)
- FPS
- Window parameters (height, width, name, etc.)
The class is used when you need to integrate the Unigine engine into a custom application window, it also allows you getting and managing user input.
Usage Example#
The following examples perform:
- Changing parameters of the application window (such as title, icon). The specified changes are applied after application start-up. It means that the window with default settings will appear first. If you need the custom settings are applied before the application window is displayed, you should implement your own class inherited from the App class.
- Processing user inputs.
- Updating the application in background.
Changing Window Parameters#
AppSystemLogic.cpp
#include "AppSystemLogic.h"
#include <UnigineCustomApp.h>
#include <UnigineImage.h>
using namespace Unigine;
int AppSystemLogic::init() {
// set a custom icon for the application window
ImagePtr icon = Image::create("textures/window_icon.png");
CustomApp::setIcon(icon->getPixels2D(), icon->getWidth());
// set a custom title for the application window
CustomApp::setTitle("Custom Window Title");
return 1;
}
int AppSystemLogic::update() {
// get an image for the mouse pointer
ImagePtr mouse = Image::create();
mouse->load("textures/mouse_pointer.png");
// resize the image to make it square
mouse->resize(mouse->getWidth(),mouse->getWidth());
if (mouse->isLoaded() && mouse->getFormat() == Image::FORMAT_RGBA8)
{
// set the image for the OS mouse pointer
CustomApp::setMouseCursor(mouse->getPixels(), mouse->getWidth());
// show the OS mouse pointer
CustomApp::setMouseShow(1);
}
return 1;
}
Processing User Inputs#
AppWorldLogic.cpp
#include "AppWorldLogic.h"
#include <UnigineCustomApp.h>
#include <UnigineEditor.h>
#include <UnigineGame.h>
#include <UnigineGui.h>
#include <UnigineNode.h>
#include <UniginePlayers.h>
using namespace Unigine;
// declare a player pointer
PlayerPersecutorPtr player;
int AppWorldLogic::init() {
// update the application constantly
CustomApp::setUpdate(1);
// get a node
NodePtr node = World::getNodeByName("material_ball");
// create a new persecutor
player = PlayerPersecutor::create();
// set the obtainde node as the target one
player->setTarget(node);
// set player's settings
player->setAnchor(Math::vec3(0, 0, 0.45f));
player->setPhiAngle(-130.0f);
player->setMinDistance(0.3f);
player->setMaxDistance(20.0f);
player->setDistance(5.0f);
player->setFov(35.0f);
// set the player to the Game Camera viewport
Game::setPlayer(player);
return 1;
}
int AppWorldLogic::update() {
// change the distance between the player and the target node on mouse wheel scrolling
int scroll_delta = CustomApp::getMouseAxis(CustomApp::AXIS_Y);
if (scroll_delta != 0) {
float f_scroll_delta = scroll_delta / 30.0f;
player->setDistance(player->getDistance() - f_scroll_delta);
}
// zoom the camera in or out when the right mouse button is pressed and the mouse is moved backward/forward
if (CustomApp::getMouseButton() == CustomApp::BUTTON_RIGHT) {
float mouse_delta = (Gui::get()->getMouseDY() + Gui::get()->getMouseDX()) / 500.0f;
player->setDistance(player->getDistance() - mouse_delta);
}
return 1;
}
See Also#
A set of UnigineScript API samples located in the <UnigineSDK>/data/samples/systems/ folder:
- app_00
- icon_00
- mouse_00
App Class
Members
int isActive ( ) #
Returns the value indicating if the current application is active (i.e. in focus). The function will always return 1, if the window update mode is set to 1.The sounds will be automatically disabled, if the application is not active.
Return value
1 if application is active; otherwise, 0.void setClipboard ( const char * str ) #
Updates the contents of the system clipboard.Arguments
- const char * str - Contents to set.
const char * getClipboard ( ) #
Retrieves the contents of the system clipboard.Return value
Contents of the system clipboard.void * getD3D11Context ( ) #
Returns a pointer to the existing ID3D11DeviceContext interface.void * getD3D11Device ( ) #
Returns a pointer to the existing ID3D11Device interface.Return value
ID3D11Device interface pointer.int isD3D11Initialized ( ) #
Returns the status of the Direct3D11 render.Return value
1 if the render is initialized; otherwise, 0.int isDone ( ) #
Returns a value indicating if the application is closed.Return value
1 if the application is closed; otherwise, 0.void setFilter ( float filter ) #
Filters the FPS counter value. By the value of 0, filtering is disabled and the current FPS value is always shown. The default is 0.9f (10 percent of the current FPS is taken into account).Arguments
- float filter - Filter value in range [0;1). The default value is 0.9f (10 percent of the current FPS is taken into account).
int getFlags ( ) #
Returns the video mode flags set for the application.Return value
Video mode flags: DESTROY, RESIZABLE, FULLSCREEN, etc.float getFps ( ) #
Returns the application FPS counter value.Return value
Application FPS counter value.float getMinFps ( ) #
Returns the minimum FPS counter value for the last 600 frames.Return value
Minimum FPS counter value for the last 600 frames.float getMaxFps ( ) #
Returns the maximum FPS counter value for the last 600 frames.Return value
Maximum FPS counter value for the last 600 frames.float getMeanFps ( ) #
Returns the average FPS counter value for the last 600 frames.Return value
Average FPS counter value for the last 600 frames.float getFTime ( ) #
Returns time spent between the previous update and the current one.Return value
Application frame duration in seconds.int setGamma ( float gamma ) #
Sets the gamma correction value.Arguments
- float gamma - Gamma correction value. If the 1.0f value is provided, no gamma correction is applied.
Return value
1 if the gamma correction value is set successfully; otherwise, 0.int isGLInitialized ( ) #
Returns the status of the OpenGL renderer.Return value
1 if the OpenGL render is initialized; otherwise, 0.void * getHandle ( ) #
Returns a pointer to the application handle.Return value
Pointer to the application handle.void setHeight ( int value ) #
Sets the new height for the application window. The height is specified for the window inside and doesn't include the window borders.If the INDEPENDENT_SIZE_WINDOW flag is set, only render resolution will be changed, leaving the window size unaffected.
Arguments
- int value - Application window height, in pixels.
int getHeight ( ) #
Returns the current height of the application window. The returned value is the window inside height without borders.Return value
Current height of the application window, in pixels.int setIcon ( uchar[] data, int data_size ) #
Sets an icon for the application window. The image must be of the square size and RGBA8 format.// create an instance of the Image class
ImagePtr icon = Image::create("window_icon.png");
// set the image as an icon of the application window
App::setIcon(icon->getPixels2D(), icon->getWidth());
Arguments
- uchar[] data - Icon resource data.
- int data_size - Resourse size.
Return value
1 if the icon is set successfully; otherwise, 0.float getIFps ( ) #
Returns an inverse value of the application FPS counter.Return value
Inverse value of the application FPS counter (1/FPS).const char * getKeyName ( int key ) #
Returns a name of the given key.Log::message("getKeyName() returned: %s\n", App::getKeyName(App::KEY_ALT));
Log::message("getKeyName() returned: %s\n", App::getKeyName(97));
getKeyName() returned: ALT
getKeyName() returned: a
Arguments
- int key - Key in one of the following formats:
- Character format (for example, 'a')
- Standard ASCII key code (for example, 97)
- One of KEY_* variables
Return value
Key name.void setKeyState ( int key, int state ) #
Sets the keyboard key state (pressed or not pressed).// set the ALT button pressed
App::setKeyState(App::KEY_ALT, 1);
// set the 'a' button pressed
App::setKeyState(97, 1);
Arguments
- int key - Key ID. Possible values can be in range [0;255], which are standard ASCII code symbols, or in range [KEY_ESC;KEY_F12], which are used for control buttons. For full list of control buttons see KEY_* variables.
- int state - Key state: 1 to set the button pressed; 0 to set the button not pressed.
int getKeyState ( int key ) #
Returns the keyboard key state (pressed or not pressed).if (App::getKeyState(App::KEY_ALT)) Log::message("ALT has been pressed\n");
if (App::getKeyState(97)) Log::message("'a' has been pressed\n");
Arguments
- int key - Key ID. Possible values can be in range [0;255], which are standard ASCII code symbols, or in range [KEY_ESC;KEY_F12], which are used for control buttons. For full list of control button see KEY_* variables.
Return value
1 if the key is pressed; otherwise, 0.void setMouse ( int x, int y ) #
Sets a mouse pointer to the specified position in the coordinate system of the application window.// set a position of the mouse pointer
int mouse_x = App::getWidth() / 2;
int mouse_y = App::getHeight() / 2;
// set the mouse pointer to the position on pressing Esc
if (App::clearKeyState(App::KEY_ESC))
{
// check if the mouse pointer is bound to the application window
if (App::getMouseGrab())
// set the pointer to the position
App::setMouse(mouse_x, mouse_y);
}
Arguments
- int x - X coordinate of the mouse pointer.
- int y - Y coordinate of the mouse pointer.
void setMouseAxis ( int axis, int value ) #
Sets the mouse wheel delta along the specified axis. The delta value is changed when scrolling the mouse wheel horizontally (APP_AXIS_X) or vertically (APP_AXIS_Y).Arguments
int getMouseAxis ( int axis ) #
Returns the current mouse wheel delta along the specified axis. The delta value is changed when scrolling the mouse wheel horizontally (AXIS_X) or vertically (AXIS_Y).int axis_x = App::getMouseAxis(App::AXIS_X);
int axis_y = App::getMouseAxis(App::AXIS_Y);
if(axis_x > 0) Log::message("Mouse wheel has been scrolled right\n");
if(axis_x < 0) Log::message("Mouse wheel has been scrolled left\n");
if(axis_y > 0) Log::message("Mouse wheel has been scrolled up\n");
if(axis_y < 0) Log::message("Mouse wheel has been scrolled down\n");
Arguments
Return value
Mouse wheel delta regarding the last wheel position.void setMouseButton ( int button ) #
Simulates pressing of the specified mouse buttons.// set the right and middle mouse buttons pressed in addition to already pressed buttons
App::setMouseButton(App::getMouseButton() | App::BUTTON_RIGHT | App::BUTTON_MIDDLE);
Arguments
- int button - Mouse buttons to be pressed. Possible values are BUTTON_*.
int getMouseButton ( ) #
Returns the current states of all mouse buttons. Each bit of the returned bit mask will specify the state of the buttons in the following order:- BUTTON_LEFT = 1 << 0
- BUTTON_MIDDLE
- BUTTON_RIGHT
- BUTTON_DCLICK
- BUTTON_AUX_0
- BUTTON_AUX_1
- BUTTON_AUX_2
- BUTTON_AUX_3
Return value
A bit mask that stores current states of all mouse buttons (pressed or not pressed).const char * getMouseButtonName ( int button ) #
Returns a name of the given button.Arguments
- int button - One of BUTTON_* variables.
Return value
Button name.int getMouseButtonState ( int button ) #
Returns a state of the specified button (pressed or not pressed). If several buttons are specified, the function will return the state of the first pressed button (if any); if no buttons are pressed, the function will return 0.if (App::getMouseButtonState(App::BUTTON_LEFT | App::BUTTON_DCLICK)) Log::message("Left mouse button has been clicked\n");
if (App::getMouseButtonState(App::BUTTON_MIDDLE)) Log::message("Middle mouse button has been clicked\n");
Arguments
- int button - One of BUTTON_* variables
Return value
1 if al least one of the specified buttons is pressed; otherwise, 0.int setMouseCursor ( uchar[] data, int x = 0, int y = 0 ) #
Sets a custom image for the OS mouse cursor. The image must be of the square size and RGBA8 format.// create an instance of the Image class
ImagePtr cursor = Image::create("textures/my_cursor.png");
// set the image as the mouse cursor
App::setMouseCursor(icon->getPixels2D(), icon->getWidth());
// show the OS mouse pointer
App::setMouseShow(1);
Arguments
- uchar[] data - Cursor image data.
- int x - X coordinate of the cursor's hot spot.
- int y - Y coordinate of the cursor's hot spot.
Return value
1 if the image is set successfully; otherwise, 0.void setMouseGrab ( int grab ) #
Sets a value indicating if the mouse pointer is bound to the application window.Arguments
- int grab - 1 if the mouse cannot leave the application window; otherwise, 0.
int getMouseGrab ( ) #
Returns a value indicating if the mouse pointer is bound to the application window.Return value
1 if the mouse pointer cannot leave the application window; otherwise, 0.void setMouseShow ( int show ) #
Sets a value indicating if the OS mouse pointer should be displayed.Arguments
- int show - 1 if the OS mouse pointer should be displayed; 0 if the application cursor is used only.
int getMouseShow ( ) #
Returns a value indicating if the OS mouse pointer is displayed.Return value
1 if the OS mouse pointer is displayed; otherwise, 0.int getMouseX ( ) #
Returns the current X coordinate of the mouse pointer in the coordinate system of the application window.Return value
X coordinate of the mouse pointer.int getMouseY ( ) #
Returns the current Y coordinate of the mouse pointer in the coordinate system of the application window.Return value
Y coordinate of the mouse pointer.const char * getName ( ) #
Returns a name of the graphics API used for application rendering.Return value
One of the following values:- opengl for OpenGL
- direct3d11 for DirectX 11
- NULL if no graphics API is used for application rendering
int isNULLInitialized ( ) #
Returns a value indicating whether the NULL renderer is initialized.Return value
1 if the renderer is initialized; otherwise, 0.int getNumTouches ( ) #
Returns the number of touches. The maximum number of touches is 16.Return value
Number of touches.int setPosition ( int x, int y ) #
Sets the window position.Arguments
- int x - X coordinate of the upper-left corner of the window.
- int y - Y coordinate of the upper-left corner of the window.
Return value
1 if the position of the window is set successfully; otherwise, 0.int getPositionX ( ) #
Returns the X coordinate of the upper-left corner of the window.Return value
X coordinate of the upper-left corner of the window.int getPositionY ( ) #
Returns the Y coordinate of the upper-left corner of the window.Return value
Y coordinate of the upper-left corner of the window.int setTitle ( const char * title ) #
Sets a title for the application window.Arguments
- const char * title - Window title.
Return value
1 if the title is set successfully; otherwise, 0.int getTouchX ( int touch ) #
Returns the X coordinate of the touch in the coordinate system of the application window.Arguments
- int touch - The touch number.
Return value
X coordinate of the touch.int getTouchY ( int touch ) #
Returns the Y coordinate of the touch in the coordinate system of the application window.Arguments
- int touch - The toucn number.
Return value
Y coordinate of the touch.int setUpdate ( int update ) #
Sets the value indicating whether the application widow is updated when the window is hidden or out of focus (rendering frames in background). By default your UNIGINE application stops rendering frames and updating its main window, when it window goes out of focus (e.g. user switches to another window). Setting the update mode to 1 enables constant rendering regardless of whether the application window is focused or in the background.Arguments
- int update - Window update mode: 1 for constantly repeating update cycle (i.e. the application is updated if the window is hidden or out of focus); otherwise, 0.
Return value
1 if the window update mode is set successfully; otherwise, 0.int getUpdate ( ) #
Returns the current window update mode (the value indicating whether the application is updated when the window is hidden).Return value
1 if the update cycle is constantly repeated; otherwise, 0.int setVideoMode ( int width, int height, int flags = 0, int refresh = 0 ) #
Sets a video mode and initializes the application.Arguments
- int width - Video width in pixels.
- int height - Video height in pixels.
- int flags - Video mode flags: DESTROY, RESIZABLE, FULLSCREEN, FULLWINDOW, VSYNC, DEBUG_CONTEXT, BREAK_ON_ERROR.
- int refresh - Force the refresh rate in Hz; if 0 is provided, the default refresh rate is used.
Return value
1 if the video mode is set and the application is initialized successfully; otherwise, 0.const char * getVideoModeName ( ) #
Returns the name of the current video mode.Return value
Returns the name of the current video mode.void setWidth ( int value ) #
Sets the new width of the application window. The width is specified for the window inside part and doesn't include the window borders.If the INDEPENDENT_SIZE_WINDOW flag is set, only render resolution will be changed, leaving the window size unaffected.
Arguments
- int value - Window width, in pixels.
int getWidth ( ) #
Returns the current application window width. The returned value is the window inside part width without borders.Return value
Window width, in pixels.void buttonPress ( int button ) #
Application notifies the engine that the specified mouse button is pressed.Arguments
- int button - One of the BUTTON_* variables.
void buttonRelease ( int button ) #
Application notifies the engine that the specified mouse button is released.Arguments
- int button - One of the BUTTON_* variables.
int clearKeyState ( int key ) #
Returns the key state and clears it to 0 (not pressed). This function allows returning the key state only once even if it is kept pressed over several frames.Arguments
- int key - Key ID. Possible values can be in range [0;255], which are standard ASCII code symbols, or in range [KEY_ESC;KEY_F12], which are used for control buttons. For full list of control buttons see KEY_* variables.
Return value
1 if the key is pressed, and this function was not called previously in the current frame; otherwise, 0.int clearMouseAxis ( int axis ) #
Returns the current mouse wheel position delta and clears it to 0.Arguments
Return value
Mouse wheel delta regarding the last mouse wheel position.int clearMouseButtonState ( int button ) #
Returns the button state and clears it to 0 (not pressed). This function allows returning the button state only once even if it is kept pressed over several frames. The function will return 1 if at least one of the specified buttons is pressed.// the function will return 1 if one of the buttons is pressed;
// the button state will be set to 0
App::clearMouseButtonState(App::BUTTON_LEFT | App::BUTTON_RIGHT);
Arguments
- int button - Button. Possible values are BUTTON_*.
Return value
1 if at least one of the buttons is pressed, and this function was not called previously in the current frame; otherwise, 0.int dialogFile ( const char * title, char * name, int size, const char * filter = 0, const char * flags = 0 ) #
Creates a system modal file dialog. Since the dialog is modal, all other actions are stopped until this function returns a value.Arguments
- const char * title - Title of the dialog window.
- char * name - Current file name.
- int size - Size of the name buffer.
- const char * filter - File extension filter. Accepts dot-separated file extensions, for example: ".tga.jpg.png.tif.psd".
- const char * flags - File dialog flags. Accepts a string: "o" - open file dialog; "s" - save file dialog; "d" - directory dialog.
Return value
1 if the OK button is pressed; 0 if the Cancel button is pressed.int dialogMessage ( const char * title, const char * str, const char * flags = 0 ) #
Creates a system modal message dialog. Since the dialog is modal, all other actions are stopped until this function returns a value.If you don't specify flags, the Oc combination will be used by default.
Arguments
- const char * title - Title of the dialog window.
- const char * str - Content of the dialog window.
- const char * flags - Dialog window flags. The argument accepts a string with names of buttons. The following combinations are available:
- Oc or oC - OK, Cancel.
- Yn or yN - Yes, No
- ynC, yNc or Ync - Yes, No, Cancel
If you send any other combination, only the OK button will appear in the window.The uppercase letter indicates which button will be in focus.
Return value
The function returns one of the following values:- 1 if the OK button has been pressed.
- 2 if the Yes button has been pressed.
- -1 if the No button has been pressed.
- 0 if the Cancel button has been pressed.
void doRender ( ) #
The engine requests to call the render() function. The application can ignore this request if it handles the main loop by itself.void doSwap ( ) #
The engine requests to call the swap() function. The application can ignore this request if it handles the main loop by itself.void doUpdate ( ) #
The engine requests to call the update() function. Application can ignore this request if it handles the main loop by itself.void exit ( ) #
The engine requests to exit the application.int initD3D11 ( void * adapter, void * device, void * context, int debug = 0 ) #
Initializes the Direct3D11 render. This function should be called when the Direct3D11 device is ready for rendering.Arguments
- void * adapter - Pointer to the IDXGIAdapter interface.
- void * device - Pointer to the ID3D11Device interface.
- void * context - Pointer to ID3D11DeviceContext interface.
- int debug - Debug output flag. Use 1 to enable debug output, 0 to disable it.
Return value
1 if the Direct3D11 render is initialized successfully; otherwise, 0.int initGL ( void * context, int debug = 0 ) #
Initializes the OpenGL render. This function should be called when OpenGL context is created.Arguments
- void * context - Pointer to OpenGL Context interface.
- int debug - Debug output flag. Use 1 to enable debug output, 0 to disable it.
Return value
1 if the render is initialized successfully; otherwise, 0.int initNULL ( ) #
Initializes the NULL renderer: nothing is rendered onto the screen. This mode is used, for example, for servers in case of playing over the network.Return value
1 if the renderer is initialized successfully; otherwise, 0.void keyPress ( unsigned int key ) #
Application notifies the engine that the specified key on a keyboard is pressed.Arguments
- unsigned int key - Key ID. Possible values can be in range [0;255], which are standard ASCII code symbols, or in range [KEY_ESC;KEY_F12], which are used for control buttons. For full list of control buttons see KEY_* variables.
void keyPressUnicode ( unsigned int key ) #
Application notifies the engine that the specified key is pressed.Arguments
- unsigned int key - Unicode symbol.
void keyRelease ( unsigned int key ) #
Application notifies the engine that the specified key on a keyboard is released.Arguments
- unsigned int key - Key ID. Possible values can be in range [0;255], which are standard ASCII code symbols, or in range [KEY_ESC;KEY_F12], which are used for control buttons. For full list of control buttons see KEY_* variables.
void render ( ) #
Application requests the engine to render.int shutdownD3D11 ( ) #
Shuts down the Direct3D11 render. This function should be called when the Direct3D11 device is released.Return value
1 if the Direct3D11 render is shut down successfully; otherwise, 0.int shutdownGL ( ) #
Shuts down the OpenGL render. This function should be called when OpenGL context is destroyed.Return value
1 if the render is shut down successfully; otherwise, 0.int shutdownNULL ( ) #
Shuts down the NULL renderer.Return value
1 if the renderer is shut down successfully; otherwise, 0.void startFps ( ) #
Starts the FPS counter if it was stopped. All function calls are placed into a stack, so the number of calls to this function should correspond to the number of calls to the stopFps() function.void stopFps ( ) #
Stops the FPS counter. This function should be called if application window is hidden or some heavy non-rendering tasks are processing. All function calls are placed into a stack, so the number of calls to this function should correspond to the number of calls to the startFps() function.void swap ( ) #
Application requests the engine to swap.void update ( ) #
Application requests the engine to update.Ptr<RenderContext> createContext ( ) #
Creates a rendering context depending on the graphics API used for application rendering.Return value
RenderContext smart pointer.Ptr<RenderContext> initGLContext ( ) #
Initializes an OpenGL rendering context.Return value
RenderContext smart pointer.Ptr<RenderContext> initD3D11Context ( ) #
Initializes a D3D11 rendering context.Return value
RenderContext smart pointer.void * getGLContext ( ) #
Returns the pointer to the OpenGL context.Return value
OpenGL context pointer.int getGLVersionMajor ( ) #
Returns the major version number of the supported OpenGL API.Return value
OpenGL API major version number.int getGLVersionMinor ( ) #
Returns the minor version number of the supported OpenGL API.Return value
OpenGL API minor version number.Last update:
2020-04-10
Help improve this article
Was this article helpful?
(or select a word/phrase and press Ctrl+Enter)