-
Posts
720 -
Joined
-
Last visited
Content Type
Blogs
Forums
Store
Gallery
Videos
Posts posted by aiaf
-
-
Not running in a VM.
Im using Fedora.
But exactly the same problem can be seen on Ubuntu 21.10.
Its like this from the first release of uak and tried it with older versions of ubuntu at the time.
Doesnt look realted to distro.
-
Nothing happens when i click in the menus on Linux.
Can be reproduced with latest example from:
https://www.ultraengine.com/learn/CPP/AdvancedInterface
Seems to be just a problem with the menus, when i click the icons the same functionality works (open file, or open browser).
Another bug report should have added it here from the begining:
-
Yeah latest tools , version 143.
Guess you can keep 2017 to be sure will work on older windows also.
I just created a new blank project from leadwerks (windows11) , open it with visual studio 2022 to upgrade the project.
It works , only thing needed is to switch for x86 release of course.
-
Just for further reference
UAK works with no problems with visual studio 2022, just tested.
Also working on windows 11.
- 1
-
-
Guess any of that would do for intro.
What i recommend is to make sure it uses the Opengl 3 api , dont think is any point to learn opengl2 this days.
And then you can go for a book. like the Opengl Superbible ,
i think it always gets updated with the latest developments.
-
Seems 2022 was released 8 november.
It should work but better just test, microsoft usually take great care of backward compatibility.
-
No idea if can be used for your purpose but here are some links:
https://docs.unity3d.com/Manual/NativePlugins.html
- 1
-
Hmm i got my hands on a m1 mac , and built an arm64 binary for the Stacky Desktop Edition (it uses UAK).
Its runs just fine on the machine.
But if i try to run it from steam , it crashes with error steamloader lib no matching architecture.
I noticed your app has a libsteam_api.dylib, tried to include that but didnt work.Any idea ?
-
Works well
I went up and visited the mars base
-
Class with several widgets declared in it that are somehow related in the functionality.
So you can put that to a separate file.
class RocketControlWidgetGroup { std::shared_ptr<UltraEngine::Widget> ignitionButton; std::shared_ptr<UltraEngine::Widget> selfDestruct; std::shared_ptr<UltraEngine::Widget> selfTest; etc };
The usual object oriented example is a Car with different objects in it Engine,Wheels, Doors etc
-
Just a few ideas can be done in many ways
1.I just use functions in different files , like handlers for simple projects.
some_button_handle_action(button type, etc)
I pass the widget to the function and thats it.
You could also have an array of pointers to functions.
2.
Derive from the UAK widgets and add your own handling.
3.
Composition, you have a panel with several widgets and you create a class (file) that initialize all those widgets,
and handles the interaction.
4.
Some kind of finite state machine.
Have a look at this article:
https://gameprogrammingpatterns.com/state.html
-
Steam UAK libs on windows (Beta 1.1.) are old ... yesterday was ok , i created a new project and now i have the old bugs that were fixed for 1.1.
Also would like to have the latest UAK release when not using betas on steam.
Beta None should give the latest non beta version (1.1 at the moment) , at the moment it doesnt start the project launcher.
-
I tried with my original code.
Looking good, i think can be closed
-
Here is simplified code to reproduce the problem:
#include "UltraEngine.h" #include <time.h> using namespace UltraEngine; int main(int argc, const char* argv[]) { auto displays = GetDisplays(); auto window = CreateWindow("Test", 0, 0, 470, 600, displays[0], WINDOW_TITLEBAR | WINDOW_CENTER); auto ui = CreateInterface(window); vector<std::shared_ptr<UltraEngine::Widget>> left_stack_items; vector<std::shared_ptr<UltraEngine::Widget>> right_stack_items; auto sz = ui->root->GetSize(); auto tabber = CreateTabber(10, 10, sz.x - 20, sz.y - 20, ui->root); tabber->AddItem("Main", true); array<shared_ptr<Widget>, 4> panels; sz = tabber->ClientSize(); panels[0] = CreatePanel(0, 0, sz.x, sz.y, tabber); //Main panel //panels //left auto panel0 = CreatePanel(10, 40, sz.x / 2 - 15, sz.y - 150 - 10, panels[0]); panel0->SetColor(0.3, 0.3, 0.3, 1); panel0->SetLayout(1, 1, 1, 1); auto panel0sz = panel0->GetSize(); for (int i = 0; i < 10; i++) { left_stack_items.push_back(CreateLabel("0", 5, panel0sz.y - i * 30, 197, 25, panel0, LABEL_BORDER | LABEL_CENTER | LABEL_MIDDLE)); left_stack_items[i]->Hide(); } for (int i = 0; i < 10; i++) { left_stack_items[i]->SetText(i); left_stack_items[i]->Show(); } CreateLabel("Working", 0, 0, panel0sz.x, 25, panel0, LABEL_CENTER | LABEL_MIDDLE); //right auto panel1 = CreatePanel(sz.x / 2 + 5, 40, sz.x / 2 - 15, sz.y - 150 - 10, panels[0]); panel1->SetColor(0.3, 0.3, 0.3, 1); panel1->SetLayout(1, 1, 1, 1); auto panel1sz = panel1->GetSize(); CreateLabel("Target", 0, 0, panel1sz.x, 25, panel1, LABEL_CENTER | LABEL_MIDDLE); //1 op auto plus_btn = CreateButton("DUP", 5, sz.y - 110, 50, 50, panels[0]); plus_btn->SetLayout(1, 1, 1, 1); auto minus_btn = CreateButton("DROP", 60, sz.y - 110, 50, 50, panels[0]); minus_btn->SetLayout(1, 1, 1, 1); auto over_btn = CreateButton("OVER", 115, sz.y - 110, 50, 50, panels[0]); over_btn->SetLayout(1, 1, 1, 1); auto swap_btn = CreateButton("SWAP", 170, sz.y - 110, 50, 50, panels[0]); swap_btn->SetLayout(1, 1, 1, 1); auto nip_btn = CreateButton("NIP", 225, sz.y - 110, 50, 50, panels[0]); nip_btn->SetLayout(1, 1, 1, 1); auto tuck_btn = CreateButton("TUCK", 280, sz.y - 110, 50, 50, panels[0]); tuck_btn->SetLayout(1, 1, 1, 1); auto rot_btn = CreateButton("ROT", 335, sz.y - 110, 50, 50, panels[0]); rot_btn->SetLayout(1, 1, 1, 1); auto minusrot_btn = CreateButton("-ROT", 390, sz.y - 110, 50, 50, panels[0]); minusrot_btn->SetLayout(1, 1, 1, 1); //2 ops auto plus2_btn = CreateButton("2DUP", 5, sz.y - 55, 50, 50, panels[0]); plus2_btn->SetLayout(1, 0, 0, 1); auto minus2_btn = CreateButton("2DROP", 60, sz.y - 55, 50, 50, panels[0]); minus2_btn->SetLayout(1, 0, 0, 1); auto over2_btn = CreateButton("2OVER", 115, sz.y - 55, 50, 50, panels[0]); over2_btn->SetLayout(1, 0, 0, 1); auto swap2_btn = CreateButton("2SWAP", 170, sz.y - 55, 50, 50, panels[0]); swap2_btn->SetLayout(1, 0, 0, 1); auto nip2_btn = CreateButton("2NIP", 225, sz.y - 55, 50, 50, panels[0]); nip2_btn->SetLayout(1, 0, 0, 1); auto tuck2_btn = CreateButton("2TUCK", 280, sz.y - 55, 50, 50, panels[0]); tuck2_btn->SetLayout(1, 0, 0, 1); auto rot2_btn = CreateButton("2ROT", 335, sz.y - 55, 50, 50, panels[0]); rot2_btn->SetLayout(1, 0, 0, 1); auto minusrot2_btn = CreateButton("2-ROT", 390, sz.y - 55, 50, 50, panels[0]); minusrot2_btn->SetLayout(1, 0, 0, 1); float scale = displays[0]->scale; window->SetShape(0, 0, 470 * scale, 600 * scale); ui->SetScale(scale); while (true) { const Event ev = WaitEvent(); switch (ev.id) { case EVENT_WIDGETACTION: break; case EVENT_WIDGETSELECT: break; case EVENT_QUIT: case EVENT_WINDOWCLOSE: return 0; break; default: break; } } return 0; }
- 1
-
Same code has different results on windows and linux.
Can be seen , the last buttons (-ROT and 2-ROT) are not shown completely on windows.
On linux we can see the proper result with no issues.
Here windows is running in a VM , but i tested on native windows it looks the same.
Below just on windows with 150% scale, the issue can be seen clearer:
-
I created a fresh UAK project on windows.
And added some util i always use Configuration.h Configuration.cpp:
in main:
#include "UltraEngine.h" #include "Configuration.h" using namespace UltraEngine; int main(int argc, const char* argv[])
Configuration.h:
#pragma once #include <string> #include <iostream> #include <fstream> #include "Libraries/nlohmann_json/single_include/nlohmann/json.hpp" using json = nlohmann::json; class Configuration
I get this error, no matter how i include it, and can be seen the UltraEngine is included first in the main.
Severity Code Description Project File Line Suppression State
Error C1010 unexpected end of file while looking for precompiled header. Did you forget to add '#include "UltraEngine.h"' to your source? Mega C:\Users\alex\Documents\Ultra Engine\Projects\Mega\Source\Configuration.cpp 50I read about precompiled headers and what they are used for, i even tried to deactivate them but doesnt work.
For sure im missing something ... anyone can help ?
-
This is pretty bad from user experience point of view.
Really don't want to deal with this kind of things, the standard headers should work out of the box.
Having same problem with UAK.
-
button->SetText("updated");Notify("Button updated");
Button text only updates after you press ok, but its called first.
And in my original case i didnt see the last state of the game because of this.
I did my thing in another way using widgets
#include "UltraEngine.h" using namespace UltraEngine; int main(int argc, const char* argv[]) { //Get the displays auto displays = GetDisplays(); //Create a window auto window = CreateWindow("ZKonquest", 0, 0, 800, 600, displays[0]); //Create User Interface auto ui = CreateInterface(window); //Create widget auto sz = ui->root->ClientSize(); auto tabber = CreateTabber(10, 10, sz.x - 20, sz.y - 20, ui->root); tabber->AddItem("Main", true); tabber->AddItem("Item 2"); tabber->AddItem("Item 3"); array<shared_ptr<Widget>, 3> panels; sz = tabber->ClientSize(); panels[0] = CreatePanel(0, 0, sz.x, sz.y, tabber); panels[1] = CreatePanel(0, 0, sz.x, sz.y, tabber); panels[2] = CreatePanel(0, 0, sz.x, sz.y, tabber); panels[1]->Hide(); panels[2]->Hide(); auto button = CreateButton("Button", 0, 0, 120, 30, panels[0]); float scale = displays[0]->scale; window->SetShape(0,0,470 * scale, 600 * scale); ui->SetScale(scale); while (true) { const Event ev = WaitEvent(); switch (ev.id) { case EVENT_WIDGETACTION: if (ev.source == button) { button->SetText("updated"); Notify("Button updated"); } break; case EVENT_WIDGETSELECT: if (ev.source == tabber) { for (int n = 0; n < tabber->items.size(); ++n) { if (n == ev.data) { panels[n]->Show(); } else { panels[n]->Hide(); } } } break; case EVENT_WINDOWCLOSE: return 0; break; } } return 0; }
-
for(int i=sgen->GetInitial().size()-1; i<12; i++) { left_stack_items[i]->Hide(); } for(int i=0; i< sgen->GetInitial().size(); i++) { left_stack_items[i]->SetText(sgen->GetInitial()[i]); if(left_stack_items[i]->Hidden()) { left_stack_items[i]->Show(); } } Notify("Win!");
https://www.ultraengine.com/learn/CPP/Notify
I click a button i modify some widgets in gui then i call notify.
The gui does not get refreshed , there is a way to make my code above Notify to take effect ?
I notice when the Notify is open , the button that triggerd this is in selected mode with blue rectangle on it.
Im on ubuntu didnt try on windows.
-
2 suggestions here:
- to have tooltips for some of the widgets (buttons etc).
- example of string internationalization with UAK (some foreign alphabet + fonts)
- 1
-
@Erwin Saavedra just need to make it cross platform:
IF(UNIX)
ELSE (WIN32)
ENDIF (UNIX)set(CMAKE_BUILD_TYPE Debug)
@reepblue you have
cmake generator CodeLite - Unix Makefiles
For me im switched to Visual Code on linux, far better then anything else.
-
In Visual Code to be able to use Go To Definitions and intellisense
Ctrl Shift P
select C/C++ Edit configurations
Add to the includePath
"/home/your user here/.steam/debian-installation/steamapps/common/UltraAppKit/Include/**"
A json file (c_cpp_properties.json) will be created in your .vscode.
Think they have some bugs, i had to add the UltraEngine.h to forcedInclude and after all started to work.
https://code.visualstudio.com/docs/cpp/customize-default-settings-cpp
- 2
-
Coudnt find breaking behavior.
Just one small thing:
Your screen shot is a good example, you can see the last item being shown just in half.
If you hover it , will properly show it and make the top item of the combo box show in half.
This depends on position of screen, i can create case where a another item exist at end and not shown until you hover bottom side
I suppose its just detail, if is the same on windows should be ok.
When you need pointers?
in Programming
Posted
Short version when you need to allocate/access memory.
For the long story you need to read a couple of books and learn a bit how operating systems work.