From 9c0f7a63fa0f94e61009405f46be422f819b3074 Mon Sep 17 00:00:00 2001 From: Dmitry Stepanov Date: Mon, 20 Jan 2025 19:48:46 +0300 Subject: [PATCH] updated changelog - partially, because there's a lot of changes for 0.36 --- CHANGELOG.md | 722 ++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 513 insertions(+), 209 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 705a26d57..c0d7a3092 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,300 @@ +# 0.36 (WIP) + +This version unifies versions of sub-crates - now all sub-crates have the same version. This makes it easier to migrate +to future versions. + +f9cd957c2209cff3f9fae3f3536ee1d78259d1f0 + +## Added + +- Tile maps +- Project manager to manage multiple Fyrox projects at once. +- Dropdown list docs +- Implemented PartialEq for sprite sheet animation entities +- Property editor for SurfaceDataResource +- Surface data viewer for surface resource +- `BaseSceneGraph::remove_nodes` +- ability to add/remove interaction modes dynamically +- Shape editing for colliders +- shader for sprite-based gizmos ( allows to draw sprite-based gizmos on top of everything else) +- `math::get_arbitrary_line_perpendicular` +- Added ability to specify font-+its size for value indicator in scrollbar +- Ability to specify font size when building a button +- Added ability to specify font and font size when creating window title +- Added surface resource loader +- Built-in surfaces +- Added configurable throttle frame interval for `Executor` +- Added sanity check for brush operations to protect editor from being overloaded by huge brushes. +- Messages for `Grid` widget - ability to change rows/columns/draw border/border thickness. +- `Material::texture` helper method +- `Color::repeat_opaque` +- `DrawingContext::push_grid` +- `save + save_back` methods for resource +- added "refresh" button for asset browser +- `ResourceDataRef::as_loaded_ref/mut` +- ability to open assets using double click +- multiselection support for `ListVIew` widget +- `impl PartialEq for Ray` +- Add an ability to rotate the editor camera using scene gizmo +- `impl From<&String> for ImmutableString` +- improved material api - `Material::set_property` is now much less verbose +- better support for fbx materials from 3ds max +- validation for 2d colliders +- added folders into asset browser +- Ability to cut holes in terrain +- Experimental occlusion culling for light sources +- `read_pixels_of_type` to get typed pixels instead of raw bytes +- added `R32UI` texture format +- `get_image` for gpu texture +- pixel buffer for async framebuffer reads +- include cache sizes in rendering statistics (helps in catching uncontrollable GPU memory usage growth) +- ability to duplicate resources in asset browser +- added visible distance for particle systems + - automatically excludes distant particle systems from rendering to improve performance + - can be tweaked on per-system basis +- ability to enable/disable scissor test from custom shaders +- ability to specify depth func in custom shaders +- added uniform buffers +- added `UniformBufferCache` for easier handling of multiple UBOs +- added bind groups + mandatory texture binding via render resources +- ability to fetch graphics server capabilities +- experimental `UniformMemoryAllocator` +- frustum culling for light sources +- support a saving/restoring the maximized flag of the editor's window +- ability to save all opened scenes at once + hotkeys +- `AxisAlignedBoundingBox::project` +- `post_update` callback for `Plugin` +- editor plugins container - adds some useful methods for plugins search +- more dockable windows +- ability to copy/paste selection in the curve editor widget +- added a configurable limit for message log to prevent excessive bloat +- configurable coordinate system for particle systems - allows to select coordinate system for generated particles - + local or world +- lighting support for particle systems +- `ModelResource::instantiate_and_attach` +- ability to add keys on multiple curves at once +- hotkey for `zoom to fit` for curve editor widget +- useful macros for early return statements - while let-else exists, it still takes more lines of code than it should. + these macros are much more compact and easier to read +- `BaseControl::self_size` +- editor ui statistics plugin - allows to track total amount of widget used by the editor, which is useful to find if + there are "dangling" widgets +- `DockingManagerLayoutDescriptor::has_window` +- print total number of drawing commands of ui for current frame +- `remove_on_close` flag for `Window` widget +- ability to apply custom sorting for children widgets of a widget +- ability to sort menu items + +## Changed + +- Included project license in every source file. +- reset scene node transform to identity when making it root +- take z index into account when linking widgets +- split fyrox-template into lib + cli +- ability to specify project root dir for template-core +- optional app arguments - prevents crash when trying to parse program arguments +- change key bindings to make more intuitive up/down motion +- replaced `SurfaceSharedData` into `Resource` + - surface shared data was essentially a resource of some sort anyway + - allows to save meshes as resources externally + - allows to use standard resource pipeline for surface data +- simplified camera picking API in the editor +- Improved terrain brush system +- print surface resource kind in the property editor +- fixed new object placement + - children objects will stay at (0,0,0) + - when creating via "Create" menu a new object will be located in front of the camera + - when creating parent object whose parent is root, it will also be located in front of the camera +- ability to specify name column width of inspector widget +- save camera projection mode in editor settings +- refactored editor camera controller - allows to drag the camera using mmb in 2d mode +- sort items of built-in resources +- remove native collider when its shape cannot be created +- hijack control over animations from animations container in absm - now absm itself updates the animations it uses, + and only those that are currently used either by a state or states of active transition +- extracted rendering framework into a separate crate +- make fbx elements of mesh geometry optional + - prints warning message and continues reading + - this is needed to be able to load "malformed" fbx, that has no mesh geometry, such as animation-only fbx +- enable resource hot reloading by default in executor +- move `rotateVec2` to shared shader functions +- store initial data and file extension (if any) of built-in resources +- moved opengl initialization to rendering framework +- use uniform buffer for bone matrices instead of texture matrix storage +- use uniform buffer to pass object instance data to shaders +- moved camera properties into its own uniform block +- switched to uniform buffers across the renderer +- pass material properties using uniform buffers + - automatically generate uniform buffer description for material properties + - automatically define uniforms for samplers + - no more need to manually define material properties in shaders, just use `properies.your_property_name` +- isolated opengl-specific code of gpu program into its own module +- use uniform memory allocator to speed up uniform data upload to gpu + - splits rendering of render bundles in two steps: uniform data collection + upload and the actual rendering + - more efficient use of memory by utilizing all available space in uniform buffers (prevents having uniform + buffers with just 200-300 bytes of memory, where the actual memory block on gpu is 4kb) + - significantly reduces amount of individual data transfers and gapi calls in general + - improves performance by 12-15% +- removed redundant buffer binding/unbinding - saves some time on api calls (especially in WebGL, where everything is + proxied through JS) +- pass sceneDepth texture to shaders explicitly +- use explicit binding for textures - prevents dozens of `glUniform1i` calls when drawing stuff, thus improving + performance by 5-10% (more on WebAssembly, where each gl call is passed through JS) +- refactored shader structure to include resource bindings + - makes shader structure more rigid and removes implicit built-in variables + - makes binding points of resources explicit + - first pass, the editor is still broken an requires material editor refactoring as well +- turned `Matrix2Editor` into generic-over-size `MatrixEditor` +- use immutable string in shader property name +- reworked materials + - material now stores only changed shader properties + - moved validation from set_property/bind to the renderer where it simply prints an error message to the log + if something's wrong + - removed fallback value from texture resource binding, it makes no sense to duplicate this info since the correct + one is stored in the shader anyway + - removed `default` property from texture definition in shaders +- collect light info when constructing render bundle - removes redundant loop over scene graph nodes +- Refactor hot reload to allow custom dynamic plugins besides dylib-based +- improved gpu texture api +- checked borrow in node message processing to prevent crashes - crash could happen if a node is already deleted, but + its message was still in the queue +- replaced component querying from nodes with ComponentProvider trait +- turned editor inspector into a plugin +- Cloning physics when cloning Graph to persist Scene settings when saving Scene from the editor +- TabControl improvements. +- changed `traverse_iter` to return a pair of handle and ref - much more convenient when there's a need to handle a + handle with a reference at the same time, no need to do re-borrow which is double work anyway +- Added `AnimationResource` which decoupled animation tracks data into a shared resource + - significantly reduces memory consumption when cloning animations, since it does not need to clone the tracks + anymore. + - animation resource can be shared across multiple animations using the same tracks + - significantly speeds up instantiation of animation player scene node + - backward compatibility is preserved +- focus search bar's text box when focusing toolbar itself - toolbar focus makes no sense anyway, because it does not + interact with keyboard, but text box does +- node selector usability improvements + - focus search bar on open + - ability to confirm selection by enter key + - bring first selected item into view on open + - added tab navigation +- lazy z-index sorting instead of on-demand +- exclude samples buffer from a list of animatable properties +- improved property selector + - focus search bar on opening + - tab navigation + - highlight selected properties on rebinding + - ability to confirm selection by hitting enter key +- detached material-related parts of the editor into its own plugin - material editor is now non-existent by default and + created only when needed, which saves memory (both ram and vram) and cpu/gpu time +- detached ragdoll wizard into a separate plugin +- moved settings window into a separate plugin +- moved animation editor into its own plugin +- improved editor plugins api +- create animation editor on editor start if animation editor was docked before +- moved absm editor to a separate plugin +- create save file selector for prefabs on demand +- moved curve editor window into its own plugin +- moved path fixer into a plugin +- use builtin surfaces for meshes created in the editor +- Migrated to latest `tinyaudio`. +- removed hardcoded ui widgets constructors - replaced with user-defined constructors via `ConstructorProvider` trait. +- sort menu items in alphabetical order in creation menus + +## Fixed + +- Significantly improved editor performance. +- improved joint stability after migration to rapier 0.20 +- use z index from respective message +- fixed crash when trying to change window title using respective message +- fixed procedural meshes serialization +- fixed inspector syncing when replacing selected object with other type +- Fixing Rect tests in fyrox-math. +- `transmute_vec_as_bytes` potential fix +- fixed crash when trying to drag'n'drop non-texture in texture field +- refresh asset browser after asset deletion +- better validation for colliders +- support for chained texture nodes in fbx - fixes normal map import on FBX files made in latest 3ds max/Maya/etc. +- watch for changes in current directory and refresh asset browser content +- fixed potential crash when cloning ui nodes +- fixed tool installation check in project exporter + - do not try to install already installed tools + - prevents accessing network when there's no actual need +- fixed redundant texture binding if it is already bound to pipeline +- discard scaling from rotation matrix before passing it to bounding shape - fixes clipping issues of light sources +- do not skip light scatter rendering even if there's no fragments lit - fixes flashing of light scattering +- fixed shadow map lod selection condition +- speed up access to animation curve data +- use `ImmutableString` in `ValueBinding` to make it smaller results in faster copying (32 bytes vs 16 bytes) +- prevent render targets from registering multiple times in texture cache +- improved performance of render data collection +- drop inherited `RUSTFLAGS` for project exporter child processes +- fixed crash when rendering large bundles +- do not reallocate gpu buffer if there's enough space for data already +- ignore buffer write commands when the data is empty +- set glsl es precision to `highp` +- fixed an invalid editor window size on second startup at the hidpi display +- Ensure vector images have a set size +- fix crash on MacOS in notify crate when path is set first time +- reduced code bloat by isolating fallback textures into their own struct +- fix wasm tests fails due to using of the deprecated PanicInfo +- discard scaling part when calculating light source bounding box +- excluded some non-animatable properties from property selector +- detached perf of hierarchical properties propagation from graph size + - graph now updates hierarchical properties only for ones that actually changed + - significantly improves performance in static scenes +- prevent redundant global transform update for 2d rigid bodies +- fixed "teleportation" bug (when a scene node was located at world's origin for 1 frame and then teleports back + where it should be) +- prevent potential nan in `vector_to_quat` +- fixed convergence in reverb sound effect +- fixed root motion jitter on looping animations - - loop boundaries were handled incorrectly, thus leading to error + accumulation that led to annoying jitter after some iterations +- fixed visible borders around point lights +- reduced code bloat in the engine internals +- fixed transform syncing of colliders +- fixed `Inspector` widget syncing issues +- fixed crash when deleting multiple animation tracks at once +- Fix for UI layout, including Grid and Text. +- fixed crash when trying to fetch intersections from a deleted collider +- fixed crash when trying to collect animation events without a root state +- fixed crash when using `accurate_world_bounding_box` on some meshes - it would crash if a mesh has no position/bone + indices/bone weights attributes in its vertex buffer +- fixed name of ragdoll joint generated by ragdoll wizard +- improved overall editor performance and ui nodes linking in particular +- prevent redundant syncing of editor settings window - saves ~10% of time +- prevent the editor to load the same texture over and over again +- fixed keyboard navigation for tree root - fixes annoying issue which causes keyboard focus to stuck at tree root +- fixed camera preview panel size +- Fixed deletion of some widgets +- fixed arrow visibility of menu item when dynamically changing its items + +## Removed + +- removed redundant data hash calculation in textures +- removed redundant field from render data bundle - is_skinned flag makes no sense, because it could be derived + from bone matrix count anyway and it is always defined on per-instance basis, not per-bundle. +- removed redundant decal layer index from mesh/terrain/render data bundle - these are residuals from before + custom material era, it makes no sense now since decal layer index is defined in materials and these fields simply had + no effect +- removed depth offset + - it could be done with shaders + - removed because it adds unnecessary projection matrix juggling for each rendered instance +- removed implicit blend shapes storage passing to material shaders - - it is now controlled directly from `Mesh` node + and it creates temp material to pass blend shape storage explicitly +- removed `PersistentIdentifier` and `MatrixStorageCache` +- removed `cast_shadows` property from `BaseLight` - this property at some point started to be redundant, because `Base` + already has such property and the one in `BaseLight` must be deleted to prevent confusion +- removed incorrect error message in animation editor +- removed `Node::query_component_ref/mut` + - it duplicates existing functionality + - replaced with `SceneGraphNode::component_ref/mut` +- removed redundant boxing when applying animation values - makes animation of arbitrary numeric properies significantly + faster + +# 0.35 + +- Version skipped, because of sub-crates version unification. See 0.36 change log for more info. + # 0.34.1 Engine + 0.21.1 Editor - Fixed crash when trying to create parent for root in the editor @@ -109,7 +406,8 @@ - Optional ability to bring focused item into view in navigation layer. - Hotkey to run the game from the editor (default is `F5`). - Ability to increase/decrease `NumericUpDown` widget value by arrow keys. -- Configurable command stack max capacity (prevents the command stack to grow uncontrollably, which could eat a lot of memory if the editor is running for a long time). +- Configurable command stack max capacity (prevents the command stack to grow uncontrollably, which could eat a lot of + memory if the editor is running for a long time). - Auto-select text on focusing `TextBox` widget. - Ability to render scene manually. - Ability to set precision for `VecEditor` widget. @@ -131,13 +429,14 @@ - Major style improvements for the editor UI. - Migrated to Rapier 0.18. -- Refactored multiborrow context - removed static size constraint and made borrowing tracking dynamic and more efficient. +- Refactored multiborrow context - removed static size constraint and made borrowing tracking dynamic and more + efficient. - Use `Result` instead of `Option` for multiborrowing for better UX. - Added panic on `Ticket::drop` to prevent dangling pool records. - Moved generic graph handling code into `fyrox-graph` crate. - Do not call `Control::update` for every widget: - - in the editor on complex scenes it improves average performance by 13-20%. - - you have to set `need_update` flag when building the widget if you need `Control::update` to be called. + - in the editor on complex scenes it improves average performance by 13-20%. + - you have to set `need_update` flag when building the widget if you need `Control::update` to be called. - Mutable access to UI in `Control::update`. - Refactored `Selection` to use dynamic dispatch. - Refactored the entire editor command system to use dynamic dispatch. @@ -202,7 +501,8 @@ - Keep selected brush when hovering mouse over a `Decorator` widget. - Fixed `TabControl` widget headers style. - Improved SearchBar widget style. -- Fixed incorrect script task handling (it was passing task result to all scripts, instead the one that launched the task). +- Fixed incorrect script task handling (it was passing task result to all scripts, instead the one that launched the + task). - Prevent particle systems from over-spawn particles when spawn rates are high. - Fixed incorrect vertex buffer data layout. - Fixed crash if a selected node was deleted during asset hot reloading. @@ -221,7 +521,7 @@ - Fixed canvas background color leaking to the rendered image on WebAssembly. - Ignore `target` dir when doing search in the asset browser. - Fixed accidental enabling/disabling tracks when expanding them in the animation editor. -- Fixed editor layout saving and loading. +- Fixed editor layout saving and loading. - Prevent `Inspector` properties from disappearing when expander is closed. - Use context menus instead of plain popups in color gradient editor. - Fixed incorrect extension proposal for in the resource creator. @@ -243,7 +543,7 @@ - Removed `define_command_stack` macro - Removed redundant `old_selection` arg from change selection command -# 0.33.1 Engine + 0.20.1 Editor +# 0.33.1 Engine + 0.20.1 Editor ## Fixed @@ -268,11 +568,11 @@ - `RefCellPropertyEditorDefinition` for `RefCell` types. - Enable reflection + serialization for formatted text and its instances. - Built in font resource. -- Font resource property editor with font preview. +- Font resource property editor with font preview. - Ability to assign fonts from asset browser. - Reflection for resources. - UI graph manipulation methods. -- `Screen` widget automatically fits to the current screen size. +- `Screen` widget automatically fits to the current screen size. - Show type name in world viewer for widgets. - Ability to specify ignored types for `Reflect::apply_recursively`. - Preview for curve and hrir resources. @@ -282,11 +582,11 @@ - Smart positioning for contextual floating panels in the editor. - `WidgetMessage::Align` + `WindowMessage::OpenAndAlign` messages. - Ability to invalidate layout for all widgets at once. -- Ability to mark all fields of a struct/enum optional when deserializing: `#[visit(optional)]` can now be -added to a struct/enum directly, thus overriding all other such attributes on fields. +- Ability to mark all fields of a struct/enum optional when deserializing: `#[visit(optional)]` can now be + added to a struct/enum directly, thus overriding all other such attributes on fields. - Added access to user interface, task pool, graphics context, current scene handle for scripts. - `PluginsRefMut::get/get_mut/of_type_ref/of_type_mut` methods. -- Added a bunch of `#[inline]` attributes for `Pool` for slight performance improvements. +- Added a bunch of `#[inline]` attributes for `Pool` for slight performance improvements. - Added `AtomicHandle` that can be modified using interrior mutability. - Ability to pass pixel kind to the `Renderer::render_ui_to_texture` method. - Show material resource state in the material field editor. @@ -349,19 +649,21 @@ added to a struct/enum directly, thus overriding all other such attributes on fi - Turn font into resource + added `TextMessage::Height`. - Make standard built-in shaders non-procedural by default. - Refactored internal structure of resources. - - All resource related data is now stored in `ResourceHeader` instead of being scattered all around in `ResourceState` - variants and even in resource data itself. + - All resource related data is now stored in `ResourceHeader` instead of being scattered all around in + `ResourceState` + variants and even in resource data itself. - Backward compatibility is preserved. - `ResourceKind` instead of path+flag, refactored resource loader trait. -- Refactored interaction modes in the editor. +- Refactored interaction modes in the editor. - Switched to UntypedResource from SharedTexture in ui -- Simplified usage of `ResourceManager::request/try_request`. No need to write `rm.request`, just `rm.request`. +- Simplified usage of `ResourceManager::request/try_request`. No need to write `rm.request`, just + `rm.request`. - Registered Light Panel in floating panels, so it can be docked. - Made searching in the asset browser smarter. -- GPU resources cache refactoring. +- GPU resources cache refactoring. - Speed up access to textures. - Automatic implementation of `ScriptTrait::id()` method. This implementation now should be removed from your -scripts. + scripts. - Scroll to the end of build log in the editor. - Prevented build window from closing when a build has failed. - Tweaked node handle property editor to also work with ui widgets. @@ -371,7 +673,7 @@ scripts. - Increased scroll bar step for scroll viewer. - Added filter argument for `aabb_of_descendants`. - Use abstract EntityId instead of ErasedHandle in animation entities. -- Optimized internals of navigation mesh. +- Optimized internals of navigation mesh. - Prevented serialization of the data of external resources. - Pass screen size to `Control::update`. - Ability to clone user interface entirely. @@ -390,7 +692,7 @@ scripts. - Made world viewer to accept data provider instead of scene directly. - Replaced `Cow` with `&Path` in `ResourceData` trait - Allow to set materials by drag'n'drop on material editor field. -- Made material fields in the inspector more clickable. +- Made material fields in the inspector more clickable. - Improved navigation on navmesh using string pulling algorithm. - Improved performance of navigation mesh queries. - Improved text box widget performance. @@ -409,7 +711,8 @@ scripts. - Customizable time-to-live for geometry buffers (allows to create temporary buffers that lives one frame (ttl = 0)). - Allow to start multiple scenes at editor start up (kudos to [@dasimonde](https://github.com/dasimonde)). - `push_vertices` + `push_vertices_transform` method for vertex buffer. -- Ability to connect a state with every other state in the ABSM editor (kudos to [@Riddhiman007](https://github.com/Riddhiman007)) +- Ability to connect a state with every other state in the ABSM editor (kudos + to [@Riddhiman007](https://github.com/Riddhiman007)) - Added UUIDs for scene nodes. - Ability to set navmesh agent path recalculation threshold. - Reset `modified` flags of inheritable variables when fixing node type. @@ -423,7 +726,7 @@ scripts. - Support for touch events in the UI (kudos to [@Bocksdin](https://github.com/Bocksdin)). - A* pathfinding optimization (kudos to [@TiltedTeapot](https://github.com/TiltedTeapot)). -## Fixed +## Fixed - Fixed crash of the editor on Wayland. - Fixed font rendering API. @@ -463,8 +766,8 @@ scripts. - Removed `Option` wrapper in typed resource to flatten the internal structure of resources. - Removed a bunch of redundant clones in the renderer. - Removed lazy calculations in the navigational mesh. -- Removed unused `soft_boundary_sharpness_factor` param from particle systems (this property was moved to the -standard particle system material). +- Removed unused `soft_boundary_sharpness_factor` param from particle systems (this property was moved to the + standard particle system material). - Removed `InteractionModeKind` and replaced it with uuids. # 0.32 @@ -489,17 +792,17 @@ standard particle system material). - Improved visual style of node handle property editor. - Ability to set scene node handle via node selector. - `Sound::try_play` method that will only play the sound if it is not already playing. -- `Flip green channel` option for texture import options: this adds an ability to flip green channels for -normal maps made in OpenGL Y+ format. -- Resource manager improvements: added base trait with auto-implementation to reduce boilerplate code, mandatory -`ResourceLoader::data_type_uuid` method to fetch actual data type produced by resource loader, -`ResourceManager::try_request` - returns an optional resource handle, returns `None` if `T` does not match the -actual data id (`request` just panics in this case). +- `Flip green channel` option for texture import options: this adds an ability to flip green channels for + normal maps made in OpenGL Y+ format. +- Resource manager improvements: added base trait with auto-implementation to reduce boilerplate code, mandatory + `ResourceLoader::data_type_uuid` method to fetch actual data type produced by resource loader, + `ResourceManager::try_request` - returns an optional resource handle, returns `None` if `T` does not match the + actual data id (`request` just panics in this case). - Print an error message to the log when unable to load a resource. - Resource field property editor improvements: emit transparent geometry to improve mouse picking, -added margins for elements. + added margins for elements. - Exposed resource manager reference to plugin registration context to be able to register custom resource -loaders that will be used in both the game and the editor. + loaders that will be used in both the game and the editor. - `Material::sync_to_shader` method to sync material properties with its shader. - `parallaxCenter` + `parallaxScale` property for standard shaders. - Fixed TBN-basis visualization in mesh debug drawing. @@ -550,7 +853,7 @@ loaders that will be used in both the game and the editor. - Optimized light map data serialization (breaking change, regenerate your lightmaps). - `BinaryBlob` wrapper to serialize arbitrary sets of data as bytes. - Print an error to the log instead crashing when unable to generate a lightmap. -- Moved light map into `Graph` from `Scene`. +- Moved light map into `Graph` from `Scene`. - Fixed light map internal handles mapping when copying a graph. - `PathEditor` widget + property editor for `PathBuf` for Inspector. - Reduce default amount of texels per unit for lightmapper in the editor. @@ -567,20 +870,20 @@ loaders that will be used in both the game and the editor. - Improved mouse picking for node handle property editor. - Ragdoll wizard to create ragdolls with a few clicks. - Power-saving mode for the editor. Editor pauses its execution if its window is unfocused or there's no OS events -from the main window. This change reduces CPU/GPU resources consumption down to zero when the editor is non-active. -- Do not create a separate region for inheritable variables on serialization if non-modified. This saves quite a -lot of disk space in derived assets (including saved games). + from the main window. This change reduces CPU/GPU resources consumption down to zero when the editor is non-active. +- Do not create a separate region for inheritable variables on serialization if non-modified. This saves quite a + lot of disk space in derived assets (including saved games). - Property editors for inheritable vec collections of resources. - Clamp input time to the actual duration of the buffer when setting sound source's playback time. - Fixed inability to fetch stream length of ogg/vorbis. -- `GenericBuffer::duration` is now using integer arithmetics which does not suffer from precision -issues (unlike floating point numbers). +- `GenericBuffer::duration` is now using integer arithmetics which does not suffer from precision + issues (unlike floating point numbers). - Decoders now returns channel duration in samples, not in seconds. - Send text box message on changes only if its commit mode is immediate. - Fixed severity for messages from inability to load editor settings. - Added vec property editors for collections of resources. - Property editor for `Vec` will now use appropriate property editor for `T` instead of implicit usage -of `InspectablePropertyEditor`. + of `InspectablePropertyEditor`. - Fixed incorrect focusing of an asset in the asset browser. - Fixed emitted message direction for `TextBox` widget. - `Show in Asset Browser` button for resource fields in the inspector. @@ -593,15 +896,15 @@ of `InspectablePropertyEditor`. - Fixed property reversion: now it reverts only modified ones. - Ability to revert all inheritable properties at once of a scene node. - `Reflect::enumerate_fields_recursively` allows you to iterate over descendant fields of an object -while getting info about each field. + while getting info about each field. - Update only currently active scene in the editor. -- Navmesh path smoothing improvements and fixes. Prevent smoothing from cutting corners. +- Navmesh path smoothing improvements and fixes. Prevent smoothing from cutting corners. - `A*` path finder API improvements. - Debug drawing for NavMesh scene node. - Light scattering now takes light intensity into account. - Prevent loading the same scene multiple times. - Clear UI in the editor when changing scenes to prevent potential visual desync. -- Fixed potential panic when handling UI messages with invalid target widget handle. +- Fixed potential panic when handling UI messages with invalid target widget handle. - Fixed doubling of the text when printing text in `TextBox` widget on some platforms. - Ability to duplicate animation tracks in the animation editor. - Ability to set an ID of animation tracks. @@ -613,33 +916,33 @@ while getting info about each field. - Fixed `Rect::clip_by` method. - Removed `VecExtensions` trait, because its functionality was already added in the standard library. - `Popup` widget improvements: `Placement::target` method, ability to create popups without adding them -to the UI. + to the UI. - Fixed potential infinite loop in the `Menu` widget. - Added context menu to the file browser to be able to create folders and remove files. -- Significantly improved test coverage for `fyrox-core` and `fyrox-resource` crates (kudos to -[@san-smith](https://github.com/san-smith)) +- Significantly improved test coverage for `fyrox-core` and `fyrox-resource` crates (kudos to + [@san-smith](https://github.com/san-smith)) - Optional node deletion dialog to warn if a node is referenced somewhere in the graph. - Fixed potential double free issue in the vertex buffer. - Fixed unsoundness of type-erasure in the vertex buffer. - `Graph::find_references_to` to search for node references in the graph. -- `Reflect::apply_recursively` for recursive iteration over the descendant fields of an object. -- Added `try` reserved keyword for `fyrox-template`. +- `Reflect::apply_recursively` for recursive iteration over the descendant fields of an object. +- Added `try` reserved keyword for `fyrox-template`. - Built-in sky box for `Camera` scene node. - Improved search in the World Viewer. - Make `TriangleDefinition` trivially-copyable. - Major UI documentation improvements. - Docs for `VectorImage`, `ScrollPanel`, `RectEditor`, `RangeEditor`, `ProgressBar`, `ListView`, `Canvas`, -`SearchBar`, `ScrollViewer`, `Expander`, `KeyBindingEditor`, `HotKeyEditor`, `Tree`, widgets. + `SearchBar`, `ScrollViewer`, `Expander`, `KeyBindingEditor`, `HotKeyEditor`, `Tree`, widgets. - Major book improvements. -# 0.31 +# 0.31 - Multi-scene editing - Docs for `Window` widget - Fixed opengl es usage when opengl is not supported - Docs for `Decorator` widget - Added `crv` extension for `CurveLoader` -- Basic editor plugins support +- Basic editor plugins support - Updated deps - Expose all editor fields so they can be accessible outside - Docs for `UuidEditor` widget @@ -670,7 +973,7 @@ to the UI. - Fixed crash when exiting the editor - Fixed opening arbitrary files from asset browser - Ability to open scenes from asset browser -- User-defined data for tabs +- User-defined data for tabs - Ability to add and remove tabs in the `TabControl` widget via messages - Added a nine patch widget - Fixed tab control's content alignment @@ -735,8 +1038,8 @@ to the UI. - Helper methods to quickly check a resource state. - Helper methods to access script components faster. - Improved range property editor. -- `Enter State` for state menu in absm editor. Works the same as double click, removes confusion for ppl that does not -get used to double-click on things. +- `Enter State` for state menu in absm editor. Works the same as double click, removes confusion for ppl that does not + get used to double-click on things. - Leave preview mode when closing or changing scenes in the editor. - Prevent panic when trying to generate random number from an empty range. - Serialize delay line samples as POD array. @@ -758,8 +1061,8 @@ get used to double-click on things. - Added `IsAnimationEnded` condition for ABSM transitions. - ABSM state actions. Allows you to rewind/enable/disable specific animations when entering/leaving a state. - Fixed incorrect "state enter" event sent from source instead of dest. -- Added a collection of built-in resources for resource manager. This collection is used on resource deserialization -step to restore references to built-in resources. +- Added a collection of built-in resources for resource manager. This collection is used on resource deserialization + step to restore references to built-in resources. - Pre-compile built-in shaders on engine startup. - Ability to change camera zoom speed in the editor. - `Plugin::before_rendering` @@ -769,7 +1072,7 @@ step to restore references to built-in resources. - Use `fast_image_resize` crate to generate mip maps (which gave 5x performance boost). - Configurable filter for mip-map generation for textures. - Fixed tooltip position - it now does not go outside of screen bounds. -- "Immutable collection" reflection attribute for collection fields that prevent changing collection size. +- "Immutable collection" reflection attribute for collection fields that prevent changing collection size. - Ability to get typed data of specific mip level of a texture. - Ability to fetch specific mip level data of textures. - Ability to set height map of terrain chunks directly from an image. @@ -796,8 +1099,8 @@ step to restore references to built-in resources. - Ability to set polygon rasterization mode to select between solid and wireframe rendering. - Force `Framebuffer::draw_x` methods to accept element range to draw. - Proper culling for terrains. -- Refactored rendering: scene nodes can now supply renderer with data. `NodeTrait::collect_render_data` is now used to -supply renderer with data. +- Refactored rendering: scene nodes can now supply renderer with data. `NodeTrait::collect_render_data` is now used to + supply renderer with data. - Batch generation is now done on per-camera (which includes light sources for shadows) basis. - Added a method to link nodes while keeping child's global position and rotation. - LODs for terrains. @@ -808,7 +1111,7 @@ supply renderer with data. - Fixed half-float textures + fixed volume textures mip maps. - `RGB16F` texture format. - Use texture-based matrix storage for "unlimited" bone matrices. Raises matrix count per surface from 64 -to 255. + to 255. - Fixed texture alignment issues. - Use correct sampler index when changing texture data. - Set new mip count for texture when changing its data. @@ -834,8 +1137,8 @@ to 255. - Added support for min, max, step property attributes for vecN. - Ability to create/destroy audio output device on demand. - Migrate to `tinyaudio` as audio output backend -- Use `RcUiNodeHandle` for context menus. This ensures that context menu will be destroyed when it is -not used anymore. +- Use `RcUiNodeHandle` for context menus. This ensures that context menu will be destroyed when it is + not used anymore. - Fixed multiple lightmapping issues. - Fixed incorrect `sRGB` conversion for WASM. - Android support. @@ -860,7 +1163,7 @@ not used anymore. - Blend space support. - Added help menu (with `Open Book` and `Open API Reference` items) - Ability to create special (much faster) bindings to position/scale/rotation of nodes in the animation -editor. + editor. - Ability to reimport animations in the animation editor. - New example: render to texture. - Audio bus graph. @@ -873,8 +1176,9 @@ editor. - Validation for sound node - Audio preview panel - Do not play sounds in the editor automatically. Sounds can only be played from the audio preview panel -instead. fixes the issue when you have a scene with multiple sounds, but since they're playing, their playback position -changes and these changes sneak in the saved scene preventing from defining strict playback position + instead. fixes the issue when you have a scene with multiple sounds, but since they're playing, their playback + position + changes and these changes sneak in the saved scene preventing from defining strict playback position - Ability to partially update global properties of a hierachy of nodes. - Do not crash if a root node in the previewer died. - Fixed deadlock when selecting object's property in animation editor. @@ -903,18 +1207,18 @@ changes and these changes sneak in the saved scene preventing from defining stri - Fixed incorrect activation of transition/states during the preview mode in the ABSM editor. - Compound conditions for ABSM transitions - Fixed off-screen UI rendering compatibility with HDR pipeline. -- Refactored scene node lifetime management - this mainly fixes the bug when a node with `Some(lifetime)` would crash -the editor. The same is applied to play-once sounds. `Node::update` now does not manage node's lifetime anymore, instead -there's `Node::is_alive`. +- Refactored scene node lifetime management - this mainly fixes the bug when a node with `Some(lifetime)` would crash + the editor. The same is applied to play-once sounds. `Node::update` now does not manage node's lifetime anymore, + instead + there's `Node::is_alive`. - Fixed incorrect handling of user-defined forces of rigid bodies. A body was pushed continuously using -previously set force. + previously set force. - Configurable size for light pictograms in the editor - `ActiveStateChanged` event now contains both previous and new states. - Message passing for scripts with multiple routing strategies - `Graph::find_map/find_up_map/find_up_by_name` -- Improved `Graph::find_x` methods - returns `Option<(Handle, &Node)>` now, that removes another -borrow if there's a need to borrow it at a call site. - +- Improved `Graph::find_x` methods - returns `Option<(Handle, &Node)>` now, that removes another + borrow if there's a need to borrow it at a call site. # 0.29 @@ -932,8 +1236,8 @@ borrow if there's a need to borrow it at a call site. - Sprite sheet animation now has a texture associated with it. - Fixed reflection fallback in case of missing field setter. - Ability to set uv rect for Image widget -- Scene settings window for the editor - gives you an ability to edit scene settings: change -physics integration parameters, ambient lighting color, various flags, etc. +- Scene settings window for the editor - gives you an ability to edit scene settings: change + physics integration parameters, ambient lighting color, various flags, etc. - Prevent crash when adding a new surface to a Mesh node in the editor - Fixed directory/file duplicates in file browser widget when double-clicking on an item. - Show use count for materials in Inspector @@ -947,27 +1251,27 @@ physics integration parameters, ambient lighting color, various flags, etc. - Access to `procedural` flag for `SurfaceData` - Property editor for mesh's surface data. - Validation for scene nodes - - Helps to find invalid cases like: - - Missing joint bodies or invalid types of bodies (i.e. use 2d rigid body for 3d joint) - - Wrongly attached colliders (not being a child of a rigid body) - - Shows small exclamation mark if there's something wrong with a node + - Helps to find invalid cases like: + - Missing joint bodies or invalid types of bodies (i.e. use 2d rigid body for 3d joint) + - Wrongly attached colliders (not being a child of a rigid body) + - Shows small exclamation mark if there's something wrong with a node - Share tooltip across widgets on clone - Fixed color picker: brightness-saturation grid wasn't visible - Added support for Collider intersection check (kudos to [@Thomas Hauth](https://github.com/ThomasHauth)) - Animation system refactoring - - Use curves for numeric properties. - - Ability to animate arbitrary numeric properties via reflection. + - Use curves for numeric properties. + - Ability to animate arbitrary numeric properties via reflection. - Prevent crash in case of invalid node handle in animation - `Curve::value_at` optimization - 2x performance improvement of using binary search for spans. - `Curve::add_key` optimized insertion using binary search. - Node Selector widget - allows you to pick a node from a scene. - Merge `Inspect` trait functionality into `Reflect` trait - it is now possible to obtain fields metadata -while iterating over them. + while iterating over them. - Property Selector widget - allows you to pick a property path from an object that supports `Reflect` trait. - `Reflect` implementation for `Uuid` - `fyrox::gui::utils::make_cross` - small helper to create a vector image of a cross -- `FieldInfo::type_name` - allows to get type name of a field without using unstable -`std::any::type_name_of_val` +- `FieldInfo::type_name` - allows to get type name of a field without using unstable + `std::any::type_name_of_val` - `PathVertex::g_score` penalty for A* pathfinding (kudos to [@cordain](https://github.com/Cordain)) - Added `Default`, `Debug`,`Clone` impls for `RawMesh` - Name and uuid for `Curve` @@ -975,8 +1279,8 @@ while iterating over them. - Preserve curve and keys id in the curve editor widget - Correctly wrap `Audio Panel` in docking manager tile (kudos to [@iRaiko](https://github.com/iRaiko)) - `AsyncSceneLoader` - cross-platform (wasm included) asynchronous scene loader -- Added support for wasm in fyrox-template - now fyrox-template generates `executor-wasm` crate which is a special -version of executor for webassembly +- Added support for wasm in fyrox-template - now fyrox-template generates `executor-wasm` crate which is a special + version of executor for webassembly - Non-blocking resource waiting before processing scene scripts - Added missing property editor for sound status - Sync sound buffer first, then playback position @@ -984,10 +1288,10 @@ version of executor for webassembly - Rectangle+RectangleFilled primitives for `VectorImage` widget - Draw x values in curve editor widget at the top of the view - Ability to show/hide axes values in the curve editor widget -- Use messages to modify view position and zoom in the curve editor (helps to catch the moment when zoom or view -position changes) -- Fixed UI messages not being passed to plugins based on when they happened during frame (kudos to -[@bolshoytoster](https://github.com/bolshoytoster)) +- Use messages to modify view position and zoom in the curve editor (helps to catch the moment when zoom or view + position changes) +- Fixed UI messages not being passed to plugins based on when they happened during frame (kudos to + [@bolshoytoster](https://github.com/bolshoytoster)) - Ability to explicitly set animation time slice instead of length. - Cloning a node now produces exact clone. - Ability to set min, max values, step, precision for numericupdown widget @@ -998,10 +1302,10 @@ position changes) - Ability to add zones for highlighting in the `CurveEditor` - Ability to zoom non-uniformly via shift or ctrl pressed during zooming in the `CurveEditor` widget - Animation signals rework - - uuid instead of numeric identifier - - added name for signals - - removed getters/setters - - added more signal management methods + - uuid instead of numeric identifier + - added name for signals + - removed getters/setters + - added more signal management methods - `Animation::pop_signal` - Refactored animation blending state machine to support animation layers - `Visit` impl for `HashSet` @@ -1013,8 +1317,8 @@ position changes) - Use correct property editor for `PoseWeight` - Show handles of absm entities in the editor - Show more info on absm nodes - - PlayAnimation nodes shows name of the animation - - blend nodes shows the amount of animations blended + - PlayAnimation nodes shows name of the animation + - blend nodes shows the amount of animations blended - `AnimationContainer::find_by_name_ref/mut` - Ability to search various animation entities by their names - Add more information to panic messages in `fyrox-template` (kudos to [@lenscas](https://github.com/lenscas)) @@ -1031,8 +1335,8 @@ position changes) - Property editor for `Uuid` type. - Restrict `Reflect` trait on `Debug`. - Optional ability to `Copy Value as String` for properties in `Inspector` widget -- Pass animation signal name to animation event - makes much easier to respond to multiple animation events with the -same name +- Pass animation signal name to animation event - makes much easier to respond to multiple animation events with the + same name - Ability to maximize ui windows - `Animation::take_events` - `Reflect::type_name` @@ -1052,10 +1356,10 @@ same name - Drag preview nodes are now input-transparent. - Expand/collapse trees by double click. - Fixed move/rotate/scale gizmo behaviour for mouse events. -- Fixed fallback to defaults when editor's config is corrupted. +- Fixed fallback to defaults when editor's config is corrupted. - Save `Track Selection` option in the editor's config. - Clear breadcrumbs when changing scene in the editor. -- Fixed 1-frame delay issues in the editor. +- Fixed 1-frame delay issues in the editor. - Emit MouseUp message before Drop message. - Fixed UI "flashing" in the editor in some cases. - Do not silently discard UI messages from nodes that were already be deleted. @@ -1066,27 +1370,27 @@ same name - Discard "leftover" debug geometry when undoing actions in the editor. - Some menus in the editor now more intuitive now. - Fixed critical bug with incorrect unpack alignment for RGB textures - this causes hard crash in some -cases. + cases. - Do not try to reload a resource if it is already loading. - Ability to set desired frame rate for `Executor` (default is 60 FPS). - Ability to paste editor's clipboard content to selected node (paste-as-child functionality). - Ability to render into transparent window while keeping the transparency of untouched pixels (see -`transparent` example). + `transparent` example). - Ability to specify custom window builder in `Executor` + a way to disable vsync in `Executor`. - `MultiBorrowContext` for `Pool` and `Graph::begin_multi_borrow`, helps you to borrow multiple mutable -references to different items. + references to different items. - Speed up code generation in proc-macros. - Correctly map handles in instances after property inheritance (fixed weird bugs when handles to nodes -in your scripts mapped to incorrect ones) + in your scripts mapped to incorrect ones) - Refactored script processing: - - Added `ScriptTrait::on_start` - it is guaranteed to be called after all scripts in scene are initialized, useful - when a script depends on some other script - - Script processing is now centralized, not scattered as before. - - More deterministic update path (`on_init` -> `on_start` -> `on_update` -> `on_destroy`) + - Added `ScriptTrait::on_start` - it is guaranteed to be called after all scripts in scene are initialized, useful + when a script depends on some other script + - Script processing is now centralized, not scattered as before. + - More deterministic update path (`on_init` -> `on_start` -> `on_update` -> `on_destroy`) - Fixed crash when modifying text in a text box via message and then trying to type something. -- `ButtonBuilder::with_text_and_font` +- `ButtonBuilder::with_text_and_font` - Show node names in for fields of `Handle` fields of structs in the editor. -- Fixed crash in the editor when a script has resource field. +- Fixed crash in the editor when a script has resource field. - Ability to clone behaviour trees. - Automatic node handle mapping via reflection. - Removed `ScriptTrait::remap_handles` method. @@ -1097,7 +1401,7 @@ in your scripts mapped to incorrect ones) - `#[inline]` attributes for "hot" methods. - Fixed panic when rigid body is a root node of a scene. - `Base::has_script` + `Base::try_get_script` + `Base::try_get_script_mut` helper methods, it is now easier -to fetch scripts on scene nodes. + to fetch scripts on scene nodes. - Ability to change selected node type in the editor (useful to change scene root type). - Optimized script trait parameter passing, script context now passed by reference instead of value. - Script context now have access to all plugins, which makes possible create cross plugin interaction. @@ -1114,8 +1418,8 @@ to fetch scripts on scene nodes. - Make text box widget to accept text messages + special messages for text box widget. - Set 500 ms double click interval (previously it was 750 ms). - Fixed text selection in case of custom ui scaling. -- Fixed `TextBox::screen_pos_to_text_pos` - incorrect usage of `char_code` as index was leading to incorrect screen -position to text position mapping. +- Fixed `TextBox::screen_pos_to_text_pos` - incorrect usage of `char_code` as index was leading to incorrect screen + position to text position mapping. - Ability to scroll text in the text box widget. - `Rect::with_position` + `Rect::with_size` methods. - Fixed caret position when removing text from text box in specific cases. @@ -1144,7 +1448,7 @@ position to text position mapping. - Allow selecting build profile when running a game from the editor. - `NodeHandle` wrapper to bypass some limitations of `Inspector` widget. - Return result instead of unwrap and panic in `make_relative_path` - fixed some issues with symlinks in the -editor. + editor. - Added missing `Reflect` implementation for scripts made in `fyrox-template`. - Added dependencies optimization for projects generated in `fyrox-template`. - Provided access to some sound engine methods to plugins (`set_sound_gain` and `sound_gain`) @@ -1160,7 +1464,7 @@ editor. - Fixed potential infinite loops when performing some math operations. - Smoothing for cascaded shadow maps. - Fixed script property editor - no more weird bugs in the editor when setting/editing/removing scripts from -a node. + a node. - Fixed cascaded shadow maps for directional lights. - Added `Frustum::center` method. - Fixed list of panels in `View` menu in the editor. @@ -1169,16 +1473,16 @@ a node. - Added list of recent scenes to `File` menu in the editor - makes easier to switch between most used scenes. - Ability to add, remove, set items for `MenuItem` widget - Correctly highlight selected interaction mode button -- More hotkeys for the editor - - `[5]` - activate navmesh edit mode - - `[6]` - activate terrain edit mode +- More hotkeys for the editor + - `[5]` - activate navmesh edit mode + - `[6]` - activate terrain edit mode - Ability to set `Selected` flag to `Decorator` widget on build stage - Added `Invert drag` option for camera settings in the editor. - Fixed incorrect rendering of `Luminance` and `LuminanceAlpha` textures. - Fixed closing menus by clicking outside them. - Direct access to all fields in all widgets. - Force `TextBox` widget to consume all input messages, this fixes hot keys triggering in the editor while -typing something in text fields. + typing something in text fields. # 0.27.1 @@ -1194,11 +1498,11 @@ typing something in text fields. # 0.27 - Added compile-time reflection (huge thanks to [@toyboot4e](https://github.com/toyboot4e)) -- Most editor commands were removed and replaced by universal command based on reflection. +- Most editor commands were removed and replaced by universal command based on reflection. - Backward compatibility for native engine data formats was dropped - use FyroxEd 0.13 to convert your scenes to newer -version. + version. - Fixed panic when loading an FBX model with malformed animation curves (when there is only 1 or 2 components animated -instead of 3, X and Y, but not Z for example). + instead of 3, X and Y, but not Z for example). - ABSM editor now have smaller default size and fits on small screens. - Asset previewer now plays model animations - Fixed critical FBX importer bug, that caused malformed animations. @@ -1213,19 +1517,19 @@ instead of 3, X and Y, but not Z for example). - Prevent panic when deleting a node from script methods. - Dynamic type casting for plugin instances - Two-step ABSM instantiation - at first step you load all animations in parallel (async) and on second step you -create actual ABSM instance. + create actual ABSM instance. - Wait for all resources to load before initialize scripts - this prevents panicking when trying to access -not yet loaded resource in script methods. + not yet loaded resource in script methods. - Default instantiation scaling options for 3D models - allows you to scale 3D models automatically on instantiation. - Graph event broadcaster - allows you to receive `Added` and `Removed` events for nodes. - Correctly initialize scripts of nodes that created at runtime. - Component provider for scripts - allows you to provide access to inner script components via unified interface. - Disable automatic texture compression - having compression enabled for all kinds of textures is not good, because -there could be some textures with gradients, and they'll have significant distortion. + there could be some textures with gradients, and they'll have significant distortion. - `Pool::drain` - allows you to remove all objects from a pool while processing every object via closure. - `Script::on_deinit` - allows you to execute any code for cleanup. -- Added `NodeHandleMap` - a small wrapper over map that have some methods that makes node handle mapping much -shorter. +- Added `NodeHandleMap` - a small wrapper over map that have some methods that makes node handle mapping much + shorter. - Correctly handle missing properties in Inspector for various objects. - Provide access to main application window from plugins. - Allow chaining `ScriptConstructorContainer::add` calls @@ -1238,21 +1542,21 @@ shorter. - Provide access to control flow switch for plugins. - `Plugin::on_ui_message` - Two-step plugins initialization: - - `PluginConstructor` trait defines a method that creates an instance of `Plugin` trait, instance of plugin - constructor is used to create plugins on demand. It is needed because engine has deferred plugin initialization. + - `PluginConstructor` trait defines a method that creates an instance of `Plugin` trait, instance of plugin + constructor is used to create plugins on demand. It is needed because engine has deferred plugin initialization. - `Framework` is removed, its functionality was merged with plugins. - Simplified `ScriptConstructorContainer::add` definition, there were redundant generic parameters that just add -visual clutter. + visual clutter. - Implemented `Clone+Debug` traits for `NavmeshAgent` - Fixed spam in log in the editor when any file was changed. - High DPI screens support for the editor. - Newly created cameras in the editor are now enabled by default. - Added "Preview" option for cameras in world viewer. - Refactored joints: - - Joints binding now is fully automatic and it is based on world transform of the joint, no need to manually - set local frames. - - Rebinding happens when a joint changes its position - - Joints editing in the editor is now much more intuitive + - Joints binding now is fully automatic and it is based on world transform of the joint, no need to manually + set local frames. + - Rebinding happens when a joint changes its position + - Joints editing in the editor is now much more intuitive - Improved debug visualization for physics. - Read-only mode for NumericUpDown and Vec2/Vec3/Vec4 widgets - Show global coordinates of current selection in the scene previewer @@ -1261,8 +1565,8 @@ visual clutter. - NumericUpDown widget does not use word wrapping by default anymore - CheckBox widget can now be switched only by left mouse button - Ability to disable contacts between connected bodies of a joint -- `style` parameter for project template generator - it defines which scene will be used by default - either `2d` -or `3d` +- `style` parameter for project template generator - it defines which scene will be used by default - either `2d` + or `3d` - Ability to select portion of the texture to render in `Rectangle` nodes. - Ability to generate script skeleton for template generator - HSL color model @@ -1270,7 +1574,7 @@ or `3d` - `Log` API improvements - Visualize cameras in the editor - Context menu for asset items, it is now possible to open, delete, show-in-explorer items and also -to copy file name and full file path to the clipboard. + to copy file name and full file path to the clipboard. - Visualize point and spot lights in the editor. # 0.26 @@ -1288,10 +1592,10 @@ system. - Temporarily disable `Lifetime` property editing because it causes crashes - Do not show `dirty` flag of `Transform` in the `Inspector` - Provide access to property editors container for editor's `Inspector` - it is now possible -to register your own property editors + to register your own property editors - Fixed panic when syncing `Inspector` for an entity with `Option` field. -- Added `handle_object_property_changed` and `handle_collection_property_changed` macros to reduce -boilerplate code in script property handling. +- Added `handle_object_property_changed` and `handle_collection_property_changed` macros to reduce + boilerplate code in script property handling. - Added ability to restore resource handles for scripts - Fixed selection visualization in `Asset Browser` - Validation for sky box cube map generator @@ -1313,19 +1617,19 @@ There are no breaking changes in this release. - Prefab inheritance improvements - now most of the properties of scene nodes are inheritable. - Access to simulation properties of the physics. - Engine and Resource manager are nonserializable anymore, check migration guide to find how to create -save files in the correct way. -- `Node` enumeration was removed and replaced with dynamic dispatch. This allows you to define your own -types of scene nodes. + save files in the correct way. +- `Node` enumeration was removed and replaced with dynamic dispatch. This allows you to define your own + types of scene nodes. - `Base` is not a scene node anymore, it was replaced with `Pivot` node (see migration guide for more info) -- `Base` now has `cast_shadows` property, respective property setters/getters was removed from `Mesh` and -`Terrain` nodes. +- `Base` now has `cast_shadows` property, respective property setters/getters was removed from `Mesh` and + `Terrain` nodes. - Ability to bring ListView item into view. - Logger improvements: event subscriptions + collecting timestamps - Log panel improvements in the editor: severity filtering, color differentiation. - Scene nodes now have more or less correct local bounds (a bounding box that can fit the node). - Improved picking in the editor: now it is using precise hit test against node's geometry. - "Ignore back faces" option for picking in the editor: allows you to pick through "back" of polygon -faces, especially useful for closed environment. + faces, especially useful for closed environment. - Rotation ribbons were replaced with torus, it is much easier to select desired rotation mode. - New material for gizmos in the editor, that prevent depth issues. - New expander for TreeView widget, `V` and `>` arrows instead of `+` and `-` signs. @@ -1344,8 +1648,8 @@ faces, especially useful for closed environment. - NumericUpDown don't panic anymore on edges of numeric bounds (i.e when trying to do `i32::MAX_VALUE + 1`) - DoubleClick support for UI. - Update rate fix for editor, it fixes annoying issue with flickering in text boxes. -- `UserInterface::hit_test_unrestricted` which performs hit test that is not restricted to current -picking restriction stack. +- `UserInterface::hit_test_unrestricted` which performs hit test that is not restricted to current + picking restriction stack. - WASM renderer fixes. - `Pool::try_free` which returns `Option` on invalid handles, instead of panicking. - Light source for model previewer @@ -1359,12 +1663,12 @@ picking restriction stack. ## Migration guide -**WARNING:** This release **does not** provide legacy sound system conversion to new one, which means if +**WARNING:** This release **does not** provide legacy sound system conversion to new one, which means if any of your scene had any sound, they will be lost! -Now there is limited access to `fyrox_sound` entities, there is no way to create sound contexts, sounds, -effects manually. You have to use respective scene nodes (`Sound`, `Listener`) and `Effect` from -`fyrox::scene::sound` module (and children modules). +Now there is limited access to `fyrox_sound` entities, there is no way to create sound contexts, sounds, +effects manually. You have to use respective scene nodes (`Sound`, `Listener`) and `Effect` from +`fyrox::scene::sound` module (and children modules). ### Nodes @@ -1373,16 +1677,16 @@ Since `Node` enumeration was removed, there is a new way of managing nodes: - `Node` now is just `Box` wrapped in a new-type-struct. - Pattern matching was replaced with `cast` and `cast_mut` methods. - In addition to `cast/cast_mut` there are two more complex methods for polymorphism: `query_component_ref` and -`query_component_mut` which are able to extract references to internal parts of the nodes. This now has only one -usage - `Light` enumeration was removed and `PointLight`, `SpotLight`, `DirectionalLight` provides unified access -to `BaseLight` component via `query_component_ref/query_component_mut`. `query_component` could be a bit slower, -since it might involve additional branching while attempting to query component. -- `Base` node was replaced with `Pivot` node (and respective `PivotBuilder`), it happend due to problems with -`Deref/DerefMut` implementation, if `Base` is implementing `NodeTrait` then it must implement `Deref` -but implementing `Deref` for `Base` causes infinite deref coercion loop. + `query_component_mut` which are able to extract references to internal parts of the nodes. This now has only one + usage - `Light` enumeration was removed and `PointLight`, `SpotLight`, `DirectionalLight` provides unified access + to `BaseLight` component via `query_component_ref/query_component_mut`. `query_component` could be a bit slower, + since it might involve additional branching while attempting to query component. +- `Base` node was replaced with `Pivot` node (and respective `PivotBuilder`), it happend due to problems with + `Deref/DerefMut` implementation, if `Base` is implementing `NodeTrait` then it must implement `Deref` + but implementing `Deref` for `Base` causes infinite deref coercion loop. - To be able to create custom scene nodes and having the ability to serialize/deserialize scene graph with such -nodes, `NodeConstructorContainer` was added. It contains a simple map `UUID -> NodeConstructor` which allows to -pick the right node constructor based on type uuid at deserialization stage. + nodes, `NodeConstructorContainer` was added. It contains a simple map `UUID -> NodeConstructor` which allows to + pick the right node constructor based on type uuid at deserialization stage. #### Replacing `BaseBuilder` with `PivotBuilder` @@ -1391,7 +1695,7 @@ It is very simply, just wrap `BaseBuilder` with a `PivotBuilder` and call `build ```rust // Before fn create_pivot_node(graph: &mut Graph) -> Handle { - BaseBuilder::new().build(graph) + BaseBuilder::new().build(graph) } // After @@ -1427,8 +1731,8 @@ fn set_light_color(node: &mut Node, color: Color) { Now there is no need to manually sync position and orientation of the sound listener, all you need to do instead is to create `Listener` node and attach it to your primary camera (or other scene node). Keep -in mind that the engine supports only one listener, which means that only one listener can be active -at a time. The engine will not stop you from having multiple listeners active, however only first (the +in mind that the engine supports only one listener, which means that only one listener can be active +at a time. The engine will not stop you from having multiple listeners active, however only first (the order is undefined) will be used to output sound. ### Sound sources @@ -1438,11 +1742,11 @@ a scene node and can be created like so: ```rust let sound = SoundBuilder::new( - BaseBuilder::new().with_local_transform( - TransformBuilder::new() - .with_local_position(position) - .build(), - ), +BaseBuilder::new().with_local_transform( +TransformBuilder::new() +.with_local_position(position) +.build(), +), ) .with_buffer(buffer.into()) .with_status(Status::Playing) @@ -1462,23 +1766,23 @@ effect instance can be created like so: ```rust let reverb = ReverbEffectBuilder::new(BaseEffectBuilder::new().with_gain(0.7)) - .with_wet(0.5) - .with_dry(0.5) - .with_decay_time(3.0) - .build(&mut scene.graph.sound_context); +.with_wet(0.5) +.with_dry(0.5) +.with_decay_time(3.0) +.build( & mut scene.graph.sound_context); ``` A sound source can be attached to an effect like so: ```rust graph - .sound_context - .effect_mut(self.reverb) - .inputs_mut() - .push(EffectInput { - sound, - filter: None, - }); +.sound_context +.effect_mut( self .reverb) +.inputs_mut() +.push(EffectInput { +sound, +filter: None, +}); ``` ### Filters @@ -1487,7 +1791,7 @@ Effect input filters API remain unchanged. ### Engine initialization -`Engine::new` signature has changed to accept `EngineInitParams`, all previous argument were moved to the +`Engine::new` signature has changed to accept `EngineInitParams`, all previous argument were moved to the structure. However, there are some new engine initialization parameters, like `serialization_context` and `resource_manager`. Previously `resource_manager` was created implicitly, currently it has to be created outside and passed to `EngineInitParams`. This is because of new `SerializationContext` which contains @@ -1515,7 +1819,7 @@ fn init_engine() { events_loop: &evt, vsync: false, }) - .unwrap(); + .unwrap(); } ``` @@ -1532,7 +1836,7 @@ fn save(game: &mut Game) { game.engine.visit("Engine", visitor)?; // This no longer works game.game_scene.visit("GameScene", visitor)?; - + visitor.save_binary(Path::new(SAVE_FILE)).unwrap(); } @@ -1550,9 +1854,9 @@ fn load(game: &mut Game) { } ``` -However, on practice this approach could lead to some undesirable side effects. The main problem with the old +However, on practice this approach could lead to some undesirable side effects. The main problem with the old approach is that when you serialize the engine, it serializes all scenes you have. This fact is more or less -ok if you have only one scene, but if you have two and more scenes (for example one for menu and one for +ok if you have only one scene, but if you have two and more scenes (for example one for menu and one for game level) it writes/reads redundant data. The second problem is that you cannot load saved games asynchronously using the old approach, because it takes mutable access of the engine and prevents you from off-threading work. @@ -1604,7 +1908,7 @@ async fn load(game: &mut Game) { ``` As you can see in the new approach you save your scene and some level data, and on load - you load the scene, add -it to the engine as usual and load level's data. The new approach is a bit more verbose, but it is much more +it to the engine as usual and load level's data. The new approach is a bit more verbose, but it is much more flexible. # 0.24 @@ -1613,9 +1917,9 @@ flexible. - 2D games support (with 2D physics as well) - Three new scene nodes was added: RigidBody, Collider, Joint. Since rigid body, collider and joint are graph nodes -now, it is possible to have complex hierarchies built with them. + now, it is possible to have complex hierarchies built with them. - It is possible to attach rigid body to any node in scene graph, its position now will be correct in this case ( -previously it was possible to have rigid bodies attached only on root scene nodes). + previously it was possible to have rigid bodies attached only on root scene nodes). - New `Inspector` widget + tons of built-in property editors (with the ability to add custom editors) - `Inspect` trait + proc macro for lightweight reflection - UI now using dynamic dispatch allowing you to add custom nodes and messages easily @@ -1651,7 +1955,7 @@ previously it was possible to have rigid bodies attached only on root scene node - `Log::verify` to log errors of `Result<(), Error` - Custom scene node properties support - `Alt+Click` prevents selection in `Tree` widget -- Ability to change camera projection (Perspective or Orthographic) +- Ability to change camera projection (Perspective or Orthographic) - Smart position selection for popups (prevents them from appearing outside screen bounds) - High-quality mip-map generation using Lanczos filter. @@ -1701,10 +2005,10 @@ because 2D had rudimentary support, and I highly doubt that there is any project ## Resource management -Resource manager has changed its API and gained some useful features that should save you some time. +Resource manager has changed its API and gained some useful features that should save you some time. -`request_texture` now accepts only one argument - path to texture, second argument was used to pass -`TextureImportOptions`. Import options now should be located in a separate options file. For example, you have a +`request_texture` now accepts only one argument - path to texture, second argument was used to pass +`TextureImportOptions`. Import options now should be located in a separate options file. For example, you have a `foo.jpg` texture and you want to change its import options (compression, wrapping modes, mip maps, etc.). To do this you should create `foo.jpg.options` file in the same directory near your file with following content (each field is optional): @@ -1721,7 +2025,7 @@ optional): ``` The engine will read this file when you'll call `request_texture` and it will apply the options on the first load. -This file is not mandatory, you can always set global import defaults in resource manage by calling +This file is not mandatory, you can always set global import defaults in resource manage by calling `set_texture_import_options`. `request_model` have the same changes, there is only one argument and import options were moved to options file: @@ -1743,8 +2047,8 @@ do the conversion). Now there are two ways of adding a rigid body to a scene node: -- If you want your object to have a rigid body (for example a crate with box rigid body), your object must be -**child** object of a rigid body. Graphically it can be represented like this: +- If you want your object to have a rigid body (for example a crate with box rigid body), your object must be + **child** object of a rigid body. Graphically it can be represented like this: ```text - Rigid Body @@ -1752,10 +2056,10 @@ Now there are two ways of adding a rigid body to a scene node: - Cuboid Collider ``` -- If you want your object to have a rigid body that should move together with your object (to simulate hit boxes for -example), then rigid body must be child object of your object. Additionally it should be marked as `Kinematic`, -otherwise it will be affected by simulation (simply speaking it will fall on ground). Graphically it can be -represented like this: +- If you want your object to have a rigid body that should move together with your object (to simulate hit boxes for + example), then rigid body must be child object of your object. Additionally it should be marked as `Kinematic`, + otherwise it will be affected by simulation (simply speaking it will fall on ground). Graphically it can be + represented like this: ```text - Limb @@ -1804,19 +2108,19 @@ fn create_capsule_rigid_body(scene: &mut Scene) -> Handle { .build(), ), ) - // Rest of properties can be set almost as before. - .with_friction(0.2) - .with_restitution(0.1) - .with_shape(ColliderShape::capsule_y(0.5, 0.2)) - .build(&mut scene.graph), + // Rest of properties can be set almost as before. + .with_friction(0.2) + .with_restitution(0.1) + .with_shape(ColliderShape::capsule_y(0.5, 0.2)) + .build(&mut scene.graph), ]), ) - // Rest of properties can be set almost as before. - .with_mass(2.0) - .with_ang_damping(0.1) - .with_lin_vel(Vector3::new(2.0, 1.0, 3.0)) - .with_ang_vel(Vector3::new(0.1, 0.1, 0.1)) - .build(&mut scene.graph) + // Rest of properties can be set almost as before. + .with_mass(2.0) + .with_ang_damping(0.1) + .with_lin_vel(Vector3::new(2.0, 1.0, 3.0)) + .with_ang_vel(Vector3::new(0.1, 0.1, 0.1)) + .build(&mut scene.graph) } ``` @@ -1851,7 +2155,7 @@ scene nodes instead of raw collider handles. Contact info can now be queried from the collider node itself, via `contacts()` method. ```rust -fn query_contacts(collider: Handle, graph: &Graph) -> impl Iterator { +fn query_contacts(collider: Handle, graph: &Graph) -> impl Iterator { graph[collider].as_collider().contacts(&graph.physics) } ``` \ No newline at end of file