Force 0.4.0-Q2
Last updated
Last updated
Second half of big 0.4.0 update. Actually its took a lot of more time that i originally planned. What about overall update, it closer to release? Can i say yes, but there left hole bunch stuff to complete, so maybe this update will have not expected Q4 part after Q3, because since Q1 release over 549 commits was made and in total 721 commit since beginning of 0.4.0. To compare with all engine development is like totally a new engine, because at moment of 0.3.10 update it was about 653 commits and now has 1374 commits.
So as usual a little preview of editor:
Write new UI library for Force. (It still based on ImGui). By this i mean that all panels, widgets , buttons now have new UI. Style now is very minimalistic as for this days its good. So it last updates with UI, in future i will not touch UI and styling. All examples of it demonstrated in this post below.
Assets in browser now can support multiple selection by pressing CTRL+A. It was done on Q1 but now it fully functional.
Start working on multi selection of game objects and redo-system of handling multiple scenes. Add Ctrl+A to select all objects. At this moment explorer is broken.
The big part of this update is new Commands API, which is completed and over 1000 editor raw code commands turns into 200 easy to use commands. Main reason to do this was to not duplicate code twice or more times. Force can execute commands a few different ways specific for that command. Basically now three ways of execute commands: Normal, Queue and Global.
Normal executes immediately after was called like normal function.
Queue (or commands in queue) can be execute on end of current frame, or on next frame, or even skip few frames and then call.
Global its commands that executes once every frame, but process only if specific request for that command is enabled and no other waiting state are block it.
Add the Global Search panel that allows to find available commands in Force. Very usefull feature.
Add the Assets Database panel to searching assets from Global Assets Database, as non-tree view.
Improve the UI of the console and and few functionality to it like selection text in small view via text box.
Completely redo and redesign the default color picker and make color editor.
Now almost all dialog can be hided and restored from hidden dialogs up-bar.
Completely rework standard toolbar and system for toolbars, Now Force has three main toolbars:
Standard Toolbar
Gameplay Toolbar
Objects Toolbar
Toolbars now have save state and each buttons in toolbar user can remove or add, and this toolbar can be moved to left or right. Each command attached to toolbar button has a its own keyboard shortcut.
Inspector all it is. Rework UI and most widgets for it, add much more functionality to component tree nodes.
When drag files for PC to Force browser, it now displays as:
Red (when asset is not supported)
Orange (when some assets is supported and some not)
Blue (when asset/s is supported)
Status bar now prints 'Ready' every 20 seconds after last sended message to status bar.
For this update Force first starts working with multithreading. Not gonna lie its a pain. So in general:
Rework Asset Importer system and importer thread.
Rework the Asset Preview thread. And dialogs displays always it setted amount of time.
Create a Asset Commands Thread that will show dialog when some operation of GlobalAssets take to much time.
Now preferences is not dialog is a regular panel. Completely rework UI for it. Separate Project and Editor Settings.
Editor Settings
Project Settings
Force now has a new concept of importers, witch is basically asset extension files with additional import description. Now Force assets has a few importers:
Default Importer
Audio Importer
Prefab Importer
Preset Importer
Texture Importer
TrueTypeFont Importer
Model Importer
Simple example of Importer:
... and its physical asset .ext description:
Now Force support streaming audios. This is critically important for games, because when user loads audio that playing at background like some in game track without streaming it will take a lot of RAM. But with streaming all audio data streams piece by piece around 2048-8096 Kb or 2-8 Mb or even smaller. Plus this process happens on the other Audio thread witch not affect on Force performance.
Expanded the possibilities of layouts, now they can be deleted, saved, deleted, and so on.
During the creation of a multi-view of the scene from different angles, I updated the toolbar of the scene. The scene commands were shuffled from the standard toolbar to the scene view toolbar. The toolbar can now be displayed from any of the four sides. Added scene toolbar settings and updated the pop-up window design.
Added a new mini script editor right inside Force. So that if you need to change a variable quickly, do not open the IDE or notepad.
Now errors about compiling the script are now passed to the console.
Expanded the capabilities of the panels now they can display content from different views (copies of the same panel).
Before 0.4.0 user can create projects with russian symbols but it lead to crash. Also script engine not even runs Force Build Manager. Now it fixed, not on 100%, but al least it works for me. Since Force is initially russian Game Engine it should support that kinda of stuff, but with Windows it really hard to implement because Windows Console and Power Shell not executing properly commands when passing paths that contains not Unicode characters.
This was implemented in 0.4.0-Q1, but at 0.4.0-Q2 is 100% done with new algorithm.
First stable release of Force Nave (A launcher for Force Engine) arrived.
Feel free to test and use. Actually Nave should have be released during 0.3.9 release, but its appears here only now.
Nave will be create projects on upcoming 0.4.0 version of Force, that is not released yet. When 0.4.0 will be released this is fixed automatically, so do not try create projects using Nave on latest 0.3.10 release (it may work or may not, only for testing).
Nave has it own repository so check this out.
Force now supports Console Applications. Technically, there were console applications before, from the very beginning, but the problem is that for a simple console application or, say, a server, we don't need a bunch of things that the application highlights: Windows, Input/Output Graphics Engine, Language Manager, Scene Manager, Asset Manager, Drag Drop, and so on.
Add Event::AddEvent function and collection system for events.
Event class now has a platform window handle to get window from witch event occurs.
Remove Force::BindEvent -> now its basically Event::AddEvent(this).
Add EventManager class, EventManagerSpecification struct, removed EventInvoker.
Extend the Input class add IsMouseClickedOn(), IsAnyMousePressed, IsAnyMouseClicked, IsAnyMouseReleased.
By using IsMouseClickedOn is allows us to show popup and other windows in panels witch initialize was click happen. (Major fix)
Rename alot of Input internal functions such: ProcessKey, ProcessButton, UpdateStates, ClearStates.
Redesign input system (i.e) now input initialize by first created application, and now no more attached to Force.Platform.Window, to access to Input use Input::GetIO() or Application::Get()->GetIO().
Fixed some input codes such as Key_Delete and Key/Mouse on Win32.
Add mouse/key events to ImGuiWin32 backend to allow input when ImGui make window platform (at the end fix a log of bugs described upper in Docking Bugs section.)
Fixed MouseClickedCount, it not it count clicks from initial click pos.
ApplicationHook API allows to enject code inside Force application loading, startup from self-instance up to main update loop. Elements API already has some On_ events but this is extended version with almost every state. This hooks should be used only to send some messages or track some early events that cannot be retrived using Elements API. For large logic application functions you should USE elements, other wise you can break Force if you dont know what your doing.
Add support for logging to Force console in Release builds, in-backend it just simply used std::cout with out color styling.
Now Force supports downloading files using Curl.
Now Force support zipping and unzipping zip type archives.
First of all now Force use VCPkg to builds some projects. And second of all rework all Premake files for each project and submodule. Most important from this that now we can completely cut-off some libraries linking and decrease side of executable and unnecessary dynamic libraries.
Force 0.4.0 Q2 is second big part of this update. Q3 will try to unite last couple of issues that need to be improved, restoring Runtime support, and maybe, maybe continue working on TextRendering, UI Rendering, and Image/Buttons UIs and complete 2D workflow of this engine.
Danil Dukhovenko (Kenny): Main problem that i only one person that working on engine right now, its not issue because i love working on Force in my own free time, but Force now is just tooo big, and it hard to handle all of this features myself.
This pre-release cannot be downloaded and tested, because i broke too much stuff, and for now Force is fairly not usable (better that Q1 but still).
(F/K) #0284: Fix bug that when user click on LogoScreen X button in title bar window is destroyed. Now Force immidiatly exit.
(F/C) #0283: Fixed unconsistency with Delete & Remove commands.
(F/S) #0282: Fixed bug that during creating scene via new project it title not shows.
(F/E) #0281: Fix bug that ProcessAssets was happen when user inside Force (i.e notify that some files was changed (opened/attributes) but not actualy writed).
(F/G) #0280: Fixed but that OpenFile was not opened file with default assisiated program.
(F/E) #0279: Fixed bug that project can be saved by Ctrl+Shift+S when is not opened.
(F/E) #0278: Fixed bug that modification files by OS casue ProcessAssets during drag so currupt drag icon.
(F/M) #0277: Fixed bug that when Audio asset create .ext file with writeExisting it sill load audio data, so slow down moving, pasing audio assets.
(F/M) #0276: Fixed bug that when new project opened, it not update Applications's startProjectPath from Asset::GetFullPath that cause to remove loaded assets from GAssets.
(F/K) #0275: Fix calling CallOnNextFrame when its was procesed already.
(F/C) #0274: Fix SaveSceneAs bug that SaveFileBox was unnessesary modify browser's filewatch.
(F/C) #0273: Fix some issue with SaveScene & SaveSceneAs commands.
(F/C) #0272: Fix bug that sometimes command that was not processed, then was ececuted multiple time from queue..
(F/E) #0271: Fix bug with text input and searching with russian letters.
(F/E) #0270: Fix bugs with some incurrect key short cuts.
(F/E) #0269: Fix bug that non-client area was too big for MaximizeRuntime mode.
(F/M) #0268: Fix importing assets throw AssetImporter.
(F/M) #0267: Fix bug that asset cannot be unassigned to zero if asset was not valid or missing.
(F/G) #0266: Fix glitch bug when minimize/maximize window from OS messages and that was unnessasary PresentFrame call.
(F/A) #0265: Fix bugs with applying parameters to audio when click to play.
(F/A) #0264: Fix bug that audio buffers want not added to audio clip. and bug that audio was not loading.
(F/W) #0263: (Prev was: #0126) As it was actually not Key Delete stuck bug at all, it just when message box shows up, ImGui now send WM_KEY_UP event to lead to stuck ANY key that was pressed before MessageBox in its owns backend. Stupid really, how ImGui handle Mouse/Key inputs every frame but not release buttons. In Force it already works perfectly but problem was that InputBox its a ImGui widget that recive all events throw ImGui Win32 backend not throw Force. Phuuuxxx. finally Fixed.
(F/E) #0262: Fixed bug that lead to crash just crash...
(F/E) #0261: Fixed bug with incurrent selected group of assets via Shift.
(F/G) #0260: Fixed bug that in runtime drag-drop was disabled.
(F/E) #0259: Fix toons of final bugs with browser, espesially with dragging.
(F/GE) #0258: Fixed bug that block drag when mouse outside window + create new one (lose focus) and popup dissapears.
(F/K) #0257: Fixed bug that from Application ImGui Popups closed, it should be here.
(F/G) #0256: Fixed bug that drag drop was not initialized because of Co and Ole differ threading model.
(F/G) #0255: Win32: Fix bugs with initializing COM library.
(F/K) #0254: Fix bug that in Debug build Scripting Backend was not be intialized because of missing left brachet.
(F/E) #0253: Fixed bug that when tooltip or popup opens in dialog outside main window it lose focus.
(F/G) #0252: Fix bug that CreateFile still use A instead W version to lead to crash.
(F/E) #0251: Fixed bug with hovering toolbars and window is lose focus and glitch the new UI thin-border.
(F/E) #0250: Fix couble bugs with go to play/simulate mode and implement auto selection for multiple objects.
(F/E) #0249: Fix couble bugs with selection, deselection, cutting, pasting objects.
(F/E) #0248: Fix bug that cause glitch when focus to main window from dialog, or custom ImGui parent window.
(F/E) #0247: Fix tooltip can be shows from panel when dialog opened, and fixed some colors.
(F/E) #0246: Fixed bug that gizmos renders on top of preview and UIToolbar buttons, and ability to use gizmos when click on them.
(F/K) #0245: Fix bug when during shutdown if scene modified it not allowed to return to editor and menu bar renders weird during message box.
(F/E) #0244: Fixed wrong thing, when select asset it deselect game object.
(F/E) #0243: Fix bug that elements in datbase and global search can be activated by Enter even if its panel not hovered.
(F/E) #0242: Fix incurrect recent projects.
(F/E) #0241: Fix bug that panel states was not reset if panel is hidden so lead to variaous bugs.
(F/E) #0240: Fix bug when setting Open Last Project, it was fails.
(F/E) #0239: Fix bug with uncurrect Edit Layout.
(F/EG) #0238: Fix bug that when draggind panel outside main window it stops to react on drag drop of windows or was glitched.
(F/E) #0237: Fix bug when panel is platform window i cannot be dragged.
(F/G) #0236: Sometimes then focus to main window from progress window its crashes in ntdll, or TextInputFramework.
(F/E) #0235: Fix a litter bug when drag panel resize border and use mouse it rotate and resize window.
(F/E) #0234: Fixed bug with lost focus to main window when progerss dialog is finished, and fix icon diplaying in status bar or error status.
(F/E) #0233: Fix bugs with creating folder and renaming assets, asset either not created or not refresh.
(F/W) #0232: Fix bug when restore from taskbar in not currectly fit the monitor, fix the exiting from fullscreen.
(A/S) #0231: Bug with clicking on Skip in AssetsImporter. Sometimes
(A/A) #0230: Crash with loading some .wav files in sndfile.c int free(psf->container_data).