Josh Posted October 21, 2023 Author Share Posted October 21, 2023 Client build 24 is now available, same link as before: https://www.ultraengine.com/files/UltraClient.exe This will fix some small problems: Crash at start that requires deletion of ProgramData/Ultra Engine folder. Crash if no internet access is available. The build number appears at the bottom-left: 1 My job is to make tools you love, with the features you want, and performance you can't live without. Link to comment Share on other sites More sharing options...
Josh Posted October 21, 2023 Author Share Posted October 21, 2023 Fixed bug where selecting objects in the map browser tree would not correctly update their selection bounding box or mouse tool gizmo. 1 My job is to make tools you love, with the features you want, and performance you can't live without. Link to comment Share on other sites More sharing options...
Josh Posted October 22, 2023 Author Share Posted October 22, 2023 Added build numbers in the editor, will appear in the splash screen and about window next to the version. 1 1 My job is to make tools you love, with the features you want, and performance you can't live without. Link to comment Share on other sites More sharing options...
Josh Posted October 22, 2023 Author Share Posted October 22, 2023 Added a sort of abstract crate model to the default template and start map, courtesy of @reepblue FBX to glTF converter now save as .glb to prevent this issue. 2 1 My job is to make tools you love, with the features you want, and performance you can't live without. Link to comment Share on other sites More sharing options...
Josh Posted October 23, 2023 Author Share Posted October 23, 2023 Fixed bug where selection highlight in viewports would stop working if a model was opened in an asset window. Fixed bug where converting textures to optimized formats would not detect normal and displacement maps and choose the correct compression format. Fixed crash when loading Leadwerks maps with terrain. Fixed terrain layer constraints and scale not loading. Fixed typo in main menu file that was leaving out the shift modifier, which would cause you to accidentally switch mouse tools. 1 My job is to make tools you love, with the features you want, and performance you can't live without. Link to comment Share on other sites More sharing options...
Josh Posted October 24, 2023 Author Share Posted October 24, 2023 Terrain picking and collision now matches visible geometry. Requires a shader update (sync your project). Player sliding too much on walls fixed. 1 My job is to make tools you love, with the features you want, and performance you can't live without. Link to comment Share on other sites More sharing options...
Josh Posted October 25, 2023 Author Share Posted October 25, 2023 Copied current build on /dev to new default channel /1.0.0. 1 My job is to make tools you love, with the features you want, and performance you can't live without. Link to comment Share on other sites More sharing options...
Josh Posted October 26, 2023 Author Share Posted October 26, 2023 Default channel is renamed to 0.9.0. Client app is updated with change to EULA. $100K limit is removed and replaced with 20 person "total workforce" limit. I think this will be better for everyone and will not scare people. 2 1 4 My job is to make tools you love, with the features you want, and performance you can't live without. Link to comment Share on other sites More sharing options...
Josh Posted October 30, 2023 Author Share Posted October 30, 2023 First implementation of the flowgraph in Ultra is up on the /dev channel. Only the C++ static library is updated, Lua is not built or tested yet. (When it is, some of the things you have to do manually in C++ will be automated in Lua.) Zooming is not supported yet, but it will not be too hard to add with the DPI scaling feature we have. Method arguments are not yet supported. CollisionTrigger component has been added to the C++ template, seems to work well. To expose methods as either inputs or outputs, add them to the JSON file: "inputs": [ { "name": "Test1" }, { "name": "Test2" } ], "outputs": [ { "name": "Test1" }, { "name": "Test2" } ] In C++ you must manually call FireOutputs() in any methods that act as outputs: virtual void Test1() { Print("Test1"); FireOutputs("Test1"); } To receive flowgraph connections, you must add CallMethod() to your component: virtual std::any CallMethod(shared_ptr<Component> caller, const WString& name, const std::vector<std::any>& args) { if (name == "Test1") { Test1(); } else if (name == "Test2") { Test2(); } return false; } I will try to get some usable components that use this up soon. 3 1 1 My job is to make tools you love, with the features you want, and performance you can't live without. Link to comment Share on other sites More sharing options...
Josh Posted October 30, 2023 Author Share Posted October 30, 2023 Added first pass at the sliding door component. It works nicely. Editor now supports file path component properties. Create a string value and add settings for "filecategory" or "filepattern". category can be SOUND, MODEL, TEXTURE, or MATERIAL, and will get the file pattern for that asset type, including the types any import plugins include. { "name": "myfile", "label": "My file", "filecategory": "SOUND" }, { "name": "myfile2", "label": "My file 2", "filepattern": "Text Files (*.txt):txt" } 2 1 My job is to make tools you love, with the features you want, and performance you can't live without. Link to comment Share on other sites More sharing options...
Josh Posted October 30, 2023 Author Share Posted October 30, 2023 Starting map is updated to demonstrate a collision trigger and two sliding doors (C++ only). Now going to make it work with Lua... 2 1 My job is to make tools you love, with the features you want, and performance you can't live without. Link to comment Share on other sites More sharing options...
Josh Posted October 30, 2023 Author Share Posted October 30, 2023 Lua binaries are updated with support for flowgraph connections in maps. The starting map will work in Lua just like it does in C++. ChatGPT did a nice job of converting my C++ components into Lua code. This is very interesting because map files themselves are language-agnostic. The same map can run in a Lua or C++ game, with all the same behavior. You don't ever have to call FireOutputs() in Lua, as this will be handled automatically for you. 3 1 My job is to make tools you love, with the features you want, and performance you can't live without. Link to comment Share on other sites More sharing options...
Josh Posted October 31, 2023 Author Share Posted October 31, 2023 Added a simple third-person player controller component, for both C++ and Lua. 5 1 My job is to make tools you love, with the features you want, and performance you can't live without. Link to comment Share on other sites More sharing options...
Josh Posted October 31, 2023 Author Share Posted October 31, 2023 Fixed bug where a viewport mouse event would get triggered by double clicking on a file in the file requester dialog, and the underlying object would get selected. 1 1 My job is to make tools you love, with the features you want, and performance you can't live without. Link to comment Share on other sites More sharing options...
Josh Posted November 1, 2023 Author Share Posted November 1, 2023 Static library and Lua bins updated All recent bugs fixed Fixed it so at most only one trigger collision will occur per physics step, per object. Previously a lot of extra collisions were being created, and the door script was calling collectgarbage() so the Lua garbage collector would get run 500 times per second when the player was inside the collision trigger volume. Added Timer:Stop() Added Tags field in entity properties in editor. Separate tags by a comma. 1 My job is to make tools you love, with the features you want, and performance you can't live without. Link to comment Share on other sites More sharing options...
Josh Posted November 2, 2023 Author Share Posted November 2, 2023 Added right-click menu to remove nodes in flowgraph interface. 1 My job is to make tools you love, with the features you want, and performance you can't live without. Link to comment Share on other sites More sharing options...
Josh Posted November 13, 2023 Author Share Posted November 13, 2023 Added a non-blocking ASyncDownloadFile() function (in Lua, in the editor) Syntax ASyncDownloadFile(url, localpath) Returns a ASyncDownoadInfo object that has the following methods: GetStatus(): returns DOWNLOAD_FINISHED, DOWNLOAD_FAILED, or DOWNLOAD_INPROGRESS GetProgress(): returns the percentage progress complete. These commands can all be called from the main thread at any time. I suggest creating a timer that updates every 500 or 1000 milliseconds and calls GetProgress() to display the download's progress in a status bar. It's fine to have multiple downloads running at the same time. Each one will get its own thread. Also added some missing Lua bindings for Model:GetBase(), which returns a ModelBase object, which is derived from the Asset class. This object can be opened in the asset editor to display a model. 2 1 My job is to make tools you love, with the features you want, and performance you can't live without. Link to comment Share on other sites More sharing options...
Josh Posted November 14, 2023 Author Share Posted November 14, 2023 Editor API additions: program:BuildGI() program.assetbrowser:SelectFolder(path) program.assetbrowser:SelectFile(path) Example: program.assetbrowser:SelectFile("materials/developer/grid01.mat") local i = program.sidepanel:FindItem("Project") if i ~= 0 then program.sidepanel:SelectItem(i) EmitEvent(EVENT_WIDGETSELECT, program.sidepanel, i) end 1 1 My job is to make tools you love, with the features you want, and performance you can't live without. Link to comment Share on other sites More sharing options...
Josh Posted November 15, 2023 Author Share Posted November 15, 2023 Added the default player model with animations. 1 1 My job is to make tools you love, with the features you want, and performance you can't live without. Link to comment Share on other sites More sharing options...
Josh Posted November 17, 2023 Author Share Posted November 17, 2023 First build with support for VR is uploaded on the /dev channel. OpenVR is being implemented initially, with plans to switch over to the more complicated OpenXR library in the future. Add delayload:openvr_api.dll to your C++ projects in Solution Properties > C++ > Command line. This will allow non-VR apps to be distributed without the OpenVR DLL. Sky rendering method is changed, so you need to sync your project to get some files. Just HMD display and mirror-to-window is currently supported. No controls implemented yet. Don't create a camera, it will be created automatically. No access to HMD object or orientation yet. Also fixed black viewport on first frame bug (Nvidia only). Added ASyncDownloadFileInfo:Cancel() method. Example: #include "UltraEngine.h" using namespace UltraEngine; int main(int argc, const char* argv[]) { //Initialize engine in VR mode EngineSettings settings; settings.openvr = true; Initialize(settings); //Load the FreeImage texture plugin auto plugin = LoadPlugin("Plugins/FITextureLoader"); //Get the displays auto displays = GetDisplays(); //Create a window auto window = CreateWindow("Ultra Engine", 0, 0, 1280, 720, displays[0], WINDOW_CENTER | WINDOW_TITLEBAR); //Create a framebuffer auto framebuffer = CreateFramebuffer(window); //Create a world auto world = CreateWorld(); //Environment maps auto specmap = LoadTexture("https://github.com/UltraEngine/Assets/raw/main/Materials/Environment/footprint_court/specular.dds"); auto diffmap = LoadTexture("https://github.com/UltraEngine/Assets/raw/main/Materials/Environment/footprint_court/diffuse.dds"); world->SetEnvironmentMap(specmap, ENVIRONMENTMAP_BACKGROUND); world->SetEnvironmentMap(specmap, ENVIRONMENTMAP_SPECULAR); world->SetEnvironmentMap(diffmap, ENVIRONMENTMAP_DIFFUSE); //Create a light auto light = CreateBoxLight(world); light->SetRotation(55, 35, 0); light->SetRange(-10, 10); light->SetColor(2); //Load a model to display auto model = LoadModel(world, "https://github.com/UltraEngine/Documentation/raw/master/Assets/Models/Characters/cyber_samurai.glb"); model->Turn(0, 180, 0, true); model->SetPosition(0, 0.25, 0); model->SetScale(0.9); //Add a floor auto floor = CreateBox(world, 5, 1, 5); floor->SetPosition(0, -0.5, 0); auto mtl = CreateMaterial(); mtl->SetTexture(LoadTexture("https://github.com/UltraEngine/Documentation/raw/master/Assets/Materials/Developer/griid_gray.dds")); floor->SetMaterial(mtl); //Main loop while (window->Closed() == false and window->KeyDown(KEY_ESCAPE) == false) { world->Update(); world->Render(framebuffer); } return 0; } 1 My job is to make tools you love, with the features you want, and performance you can't live without. Link to comment Share on other sites More sharing options...
Josh Posted November 17, 2023 Author Share Posted November 17, 2023 LoadTable now returns an actual Lua table, not a C++ table. LoadTable can load a file from a path or from string info: t = LoadTable("{\"a\":1}") Print(t.a) 1 My job is to make tools you love, with the features you want, and performance you can't live without. Link to comment Share on other sites More sharing options...
Josh Posted November 18, 2023 Author Share Posted November 18, 2023 Fixed DPI scaling issues in flowgraph interface. 1 My job is to make tools you love, with the features you want, and performance you can't live without. Link to comment Share on other sites More sharing options...
Josh Posted November 19, 2023 Author Share Posted November 19, 2023 Editor will now set a system environment variable called ULTRAENGINE with the path to the install directory, and project templates now use that instead of explicitly indicating the path on the user's machine. This is good because if you download a project from someone else and your Ultra Engine install folder is different from theirs, it will still compile with no changes. The C++ component include / register stuff is moved into a separate file so main.cpp is simpler. 1 My job is to make tools you love, with the features you want, and performance you can't live without. Link to comment Share on other sites More sharing options...
Josh Posted November 19, 2023 Author Share Posted November 19, 2023 Exposed Program.project member. Project class has these properties: path: read-only string name: read-only string properties: C++ table with all the contents of Ultra.json. Save(): method to save Ultra.json file. You can use this to store any per-project settings. For example: if type(program.project.properties["addons"] ~= "userdata") then program.project.properties["addons"] = {} end if type(program.project.properties["addons"]["sketchfab"] ~= "userdata") then program.project.properties["addons"]["sketchfab"] = {} end table.insert(program.project.properties["addons"]["sketchfab"], itemid) program.project:Save() 1 My job is to make tools you love, with the features you want, and performance you can't live without. Link to comment Share on other sites More sharing options...
Josh Posted November 19, 2023 Author Share Posted November 19, 2023 Removed the grid background from the flowgraph editor window, as I found this is what was making it sluggish. Although the rendering was done as efficiently as possible, only drawing a few big images to tile across the window, it seems simple image drawing can be quite slow in GDI. Maybe some of these tips can be tried out in the future: https://www.codeproject.com/Tips/66909/Rendering-fast-with-GDI-What-to-do-and-what-not-to Also fixed it so flowgraph node positions are scaled when saved to and loaded from a map file, so their positions will be consistent at different DPIs. 1 My job is to make tools you love, with the features you want, and performance you can't live without. Link to comment Share on other sites More sharing options...
Recommended Posts