====== Creating your own Nuklear based project ======
Huge thanks go to the //ainvar// and //iarwain// for their work bringing the Nuklear User Interface Library to Orx.
You can easily generate a Nuklear project using ''init'' from the github version of Orx.
This article assumes that you have [[en:tutorials:orx:cloning_orx_from_github|downloaded the latest version of Orx from github]] and have built Orx.
===== How to Initialise a Nuklear project =====
There are two ways to create a Nuklear project. Firstly, using Interactive Mode:
init
Then follow all the prompts and choose ''yes'' when asked if you want to include Nuklear:
[Extension] nuklear: Nuklear support (https://github.com/immediate-mode-ui/nuklear)? (no)
The second way is to specify everything on the commandline:
init myGameFolder/MyGame +nuklear
===== Working with your project =====
Load your new Nuklear-based project using your favourite IDE. You'll find your build in the ''build'' folder.
Compile and run. You should get a nice screen with demo gui controls.
{{ :tutorials:nuklear.png?nolink |}}
And just for some extra flair, add a little up/down movement to the logo in your main config file:
[Object]
Graphic = @
Texture = logo.png
Pivot = center
AngularVelocity = 18
FXList = FadeIn # ColorCycle # MoveAround
[MoveAround]
SlotList = @
Type = position
StartTime = 0.0
EndTime = 4
Curve = sine
StartValue = (0,0)
EndValue = (0, -300)
Loop = true
===== Example Nuklear code =====
In the Run() function contains some demo code, for example:
if(nk_begin(&sstNuklear.stContext, "Demo", nk_rect(50, 50, 200, 200), NK_WINDOW_BORDER | NK_WINDOW_MOVABLE | NK_WINDOW_SCALABLE | NK_WINDOW_MINIMIZABLE | NK_WINDOW_TITLE))
{
enum {EASY, HARD};
static orxS32 Op = EASY;
static orxS32 Property = 20;
nk_layout_row_static(&sstNuklear.stContext, 30, 80, 1);
if (nk_button_label(&sstNuklear.stContext, "button"))
{
orxLOG("Nuklear button pressed.");
}
nk_layout_row_dynamic(&sstNuklear.stContext, 30, 2);
if(nk_option_label(&sstNuklear.stContext, "easy", Op == EASY))
{
Op = EASY;
}
if(nk_option_label(&sstNuklear.stContext, "hard", Op == HARD))
{
Op = HARD;
}
nk_layout_row_dynamic(&sstNuklear.stContext, 25, 1);
nk_property_int(&sstNuklear.stContext, "Compression:", 0, &Property, 100, 10, 1);
}
nk_end(&sstNuklear.stContext);
===== orx/Scroll based projects =====
You can also create an orx/Scroll-based Nuklear project. See: [[en:tutorials:orxscroll:creating_your_own_scroll_project_using_init|Creating your own orx/Scroll project using 'init']]
===== Learning Nuklear =====
To get started learning how to use the UI Library, check the official repo page: https://github.com/Immediate-Mode-UI/Nuklear
The documentation is available here: https://immediate-mode-ui.github.io/Nuklear/doc/nuklear.html
You can also find information in this previous guide for Orx and Nuklear here: https://www.danjodev.com/2020/01/nuklear-use-with-orx-engine.html (this was created before the final integration with Orx).
Some tutorials that could be helpful:
* https://www.thecodingfox.com/nuklear-usage-guide-lwjgl
* https://dexp.in/articles/nuklear-intro/