Wow you’re doing great, many thanks! keep it up please
I always thought that it looks kinda unpolished, it does it’s job good, but when you wan’t something a bit more different you end up rewriting the engine UI code just for this particular case. And of course you have to maintain it yourself when new engine version comes out. That’s why I started looking at other solutions. I looked at couple GUI libraries and ended up with Nuklear just because it was very easy to set up, thanks to rokups repo: https://github.com/rokups/Urho3D-nuklear-ui
Nuklear is not faster than Urho’s built in UI system, but it is much more powerful since it contains a lot of components already. Main difference in the architecture is that Urho uses event system to deal with UI interaction, Nuklear is not. At first I thought that it’s a bad thing but in the end I ended up writing less code and it was more readable.
Had second thought in the past months regarding the Nuklear implementation. Stumbled upon a problem with Nuklear and CI which kinda broke the MinGW build process. I was feeling lazy and couldn’t figure out how to fix it and decided to move back to Urho3D UI system.
Besides moving back to Urho3D UI I’ve added a lot of small improvements like -
- in-game settings menu,
- control mapping updates,
- config file saving structure,
- multiline achievement texts,
- additional video settings added.
- LUA script mods are now supported
All the things that are planned for future are available here: https://github.com/ArnisLielturks/Urho3D-Empty-Project/wiki
Let me know if there is something else that you’d like to see in this repo.
Whoa! Huge wave of amazing updates. Glad to know you opted for Urho’s UI instead! It makes for a perfect project, specially if in the future people consider adding this to the main repo.
Thanks a lot for your effort, dude. This is pure awesome.
Not sure if this will ever be merged in the main repo since the sample is quite large but the good thing about this is that it gives me ideas how to further improve the engine. Also I’m happy if others might find this useful.
I myself will probably take this sample app for a spin for the upcomming game jam - GGJ.
It’s been a while since the last update, here’s what I’ve got so far:
- Achievements can now be registered via events
- Achievement progress is now automatically tracked/saved/loaded and there are option in the settings menu to clear achievement progress
- Achievement window was updated to reflect all registered events and their progress
- Joystick key mapping is updated to support multiple joystick types
- Camera FOV can now be changed via settings menu
- Background scene loading via SceneManager, Loading screen reflects the status of the scene manager - https://github.com/ArnisLielturks/Urho3D-Project-Template/blob/master/Source/Levels/Loading.cpp#L35
- Audio manager was updated for easier scene node sound management
- Splash screen now supports multiple images, each of them will be showed in seperate Splash screen https://github.com/ArnisLielturks/Urho3D-Project-Template/blob/master/Source/Levels/Splash.cpp#L69-L72
- Translations are now supported - at the moment there are LV and EN translations, it can be changed via settings window
- Sample gamemode added via help of mods, it supports splitscreen mode, just plug in up to 4 joysticks and test it out - https://github.com/ArnisLielturks/Urho3D-Project-Template/blob/master/bin/Data/Mods/GameMode.as
- Scoreboard window updated, it now reflect player scores with the help of global events and variables which are easily accessible via mods
- DebugHud now displays additional values about the current game state - active level, achievement count, controller count, mod count etc.
What I’m planning to do next:
- Mod library application - web app with the list of all available mods, don’t want to bloat this repository with too many mods + I just wanted to do that and there is no one who can forbid me to do that
- Compile this sample for the Android devices
- Seperate control mapping for each controller
- Maybe add networking sample? This will require additional stuff for the engine itself - multiple control sending to server for 1 client connection.
- Does anyone know how I could achieve the brightness, gamma changing for the video? Do I need to create shaders to achieve that? I wan’t to add these options in the settings window.
There is gamma and color correction post-processing render paths included with the engine in
Holy crap that’s a lot of stuff. This is one of the most exciting community projects I’ve ever seen. You should definitely setup a patreon so we can buy you a few beers.
Oh, right! Totally forgot about that.
Thanks! I have big plans for it in the future but at the moment I’m just doing it because it’s fun and interesting.
Spent few days creating automated builds using TravisCI and CircleCI
Created project site to test out the build mechanisms and artifact upload - https://mods.frameskippers.com/view_mod/3 . The archives which are uploaded there contain both - Linux and Windows executables with all the assets. Grab the latest build and test it out. You can easily map these builds with the Github to follow up with the progress.
added Gamma settings in the video tab - probably will add the PR to the master branch with the changes to allow dynamic gamma changing at runtime.
Got the Android builds fully working with the sample, check the http://mods.frameskippers.com/ there are windows, linux and Android binaries available.
It still have to do some tweaking with the CI how the Android app actually gets built, for now it’s a bit chaotic but at least the app ir runnable on the Android devices.
Also I haven’t yet finished the control management for Android devices, but it’s one of the next things in my to-do list. I’m planning to use this: https://github.com/Lumak/Urho3D-Joystick
Hope that it will result in the PR in the end since the default engine UI controls are horrible.
I implemented so called “Loading Steps” which allows to hook up your own methods when the loading screen appears, it will move forward only if all of the loading steps have finished. It uses simple ACK mechanism to check for “inactive” loading steps and move forward with the next step if no ACK message was received for a certain amount of time. For the full example see the mod: https://github.com/ArnisLielturks/Urho3D-Project-Template/blob/master/bin/Data/Mods/LoadStepImitator.as
Pardon my ignorance, but what would be the point of those steps? So I can multithread loading of assets? Load levels in one thread, textures in another, sounds in another?
Pretty much everything you want. It’s main idea is to indicate in the GUI what exactly is happening and to indicate how much there is left to load to start the actual game.
I love your idea, thank you for sharing your work. Adding my thoughts on the UI, you can ignore my comments if you disagree.
The integrated UI from Urho3D seems flexible enough to do everything a game needs, it just needs some work on top. I just made this “Options subsystem” using Urho3D UI:
Controls are navigatable (using arrow keys) and can be customized using the Urho3D editor. There are
bunch of controls on top of the standard UI controls like UIBoolOption, UIMultiOption, UISliderOption, UIEditOption. With some trivial work, more controls and dialogs could be added.
I can share the code when I’m done with it.
Looks really good. I would like to try it out and maybe implement it in this sample.
This is my WIP version without code from my project. It only needs the 2 cpp files added to the project and registering object factories at engine start:
UITemplateElement::RegisterObject(context_); UIOption::RegisterObject(context_); UIBoolOption::RegisterObject(context_); UIMultiOption::RegisterObject(context_);
I’m still working on it, trying to make controls as simple as possible and still usable on any device - PC/Tablet/Phone
I’m thinking it would be cool (and even more N00B-friendly) if this were to be implemented as wizards like:
I’ve created a GraphicsSettings sample dialog here:
The components are in ui_option.h/cpp files. There is BoolOption, MultiOption, SliderOption and TabsPanel. These are usable from C++ code and the editor. The demo looks like this:
Feel free to modify and use as you like.
Very useful sample. Dealing with monitor/resolution stuff sucks.