3068 lines
154 KiB
Markdown
3068 lines
154 KiB
Markdown
# 1.0.1
|
||
|
||
- Fixed unaligned read in the renderer on WebAssembly, that in some cases led to black screen on startup (#906).
|
||
|
||
# 1.0.0
|
||
|
||
First stable release.
|
||
|
||
## Fixed
|
||
|
||
- Reduced vram consumption by replacing rgba16f with rgb10a2 textures
|
||
- Fixed crash when switching scenes after selecting an audio bus
|
||
- Fixed incorrect shape editing for cuboid shapes
|
||
- Fixed debug rendering in 2d
|
||
- Do not offset a collider when changing its size via shape editing
|
||
- Fixed position reset when moving multiple objects at once
|
||
- Fixed crash when attempting to bring a destroyed widget into view
|
||
- Fixed terrain multilayer rendering
|
||
- Fixed prefab hot reloading
|
||
- Fixed heightfield collider not working (fix for rapier3d regression)
|
||
- Fixed view jumping when selecting large tree view items in world viewer
|
||
- Fixed incorrect id for default animation tracks data container
|
||
- Fixed crash when undoing asset instantiation
|
||
- Fixed root field name
|
||
- Fixed inability to delete text in text box in some cases
|
||
- Fixed camera preview being cutoff from the bottom
|
||
- Fixed inability to copy built-in resources without a data source
|
||
- Fixed height for search bar in property selector
|
||
- Correctly leave preview mode when closing absm editor
|
||
- Correctly leave preview mode when closing animation editor
|
||
- Fixed asset selector style
|
||
- Fixed text trimming in check box
|
||
- Fixed warning from material field
|
||
- Fixed tab control style
|
||
- Fixed layout for bit field
|
||
- Fixed text alignment for infinite constraints
|
||
- Fixed incorrect descender calculation in case of infinite constraints
|
||
- Fixed checkbox style
|
||
- Fixed crash when loading a prefab with hierarchy modified in the base
|
||
- Fixed infinite message loop in quat property editor
|
||
- Fixed absm editor not working properly for game scenes
|
||
- Fix naming for inspector actions
|
||
- Fix naming some more
|
||
- Fixed `already borrowed` panic
|
||
- Fixed absm buttons
|
||
- Fixed bitfield style
|
||
- Fixed curve editor coordinate space
|
||
- Fixed incorrect behavior of `open recent scene`
|
||
- Fixed incorrect project name for `export-cli`
|
||
- Fixed incorrect resource path fetching in material field editor
|
||
- Fixed style for `add` and `remove` buttons for collections
|
||
- Include `core` module in `fyrox` docs
|
||
- Fix for macos fast scroll when pixel delta is received (#898)
|
||
- Style fixes for material editor
|
||
- Fixed resource registry not loading in time on wasm
|
||
- Prevent crash when moving a scene node
|
||
|
||
## Added
|
||
|
||
- CLI for project export
|
||
- Ability to trim text with ellipsis
|
||
- Input box widget
|
||
- Tooltip with track property name
|
||
- `UserInterface::try_send_response` helper
|
||
- Ability to disable background curves in the animation editor
|
||
- Ability to disable background curves for curve editor widget
|
||
- Add built-in light style resource
|
||
- Add exit confimation dialog for project manager
|
||
- Added `donate` button for project manager
|
||
- Added colors for scene item icons
|
||
- Added missing code for surface data resource saving
|
||
- Added more methods for `ImageButtonBuilder`
|
||
- Added shadow for the text in the asset item
|
||
- `BehaviorResult` alias + test fixes
|
||
- `Color::hex`
|
||
- `ImageButtonBuilder` helper + replaced `make_button_xxx`
|
||
- `PluginContext::load_scene_or_ui` + fixed project template
|
||
- `dispatch_behavior_variants` macro
|
||
- `locate` button for material field
|
||
- `locate` button for surface field
|
||
- `make_image_toggle_with_tooltip` helper
|
||
- Corner radius for text box
|
||
- Property editor for triangle buffer
|
||
- Property editor for vertex buffer
|
||
- Ability to add keys for any numeric properties in the animation editor
|
||
- Ability to add keys for selected nodes in the animation editor
|
||
- Ability to minimize all editor panels
|
||
- Ability to search for a loader for specific resource data type
|
||
|
||
## Changed
|
||
|
||
- Increased kernel size of pcs filtered shadows (makes shadows much smoother)
|
||
- Watch only registry root for changes
|
||
- Absm editor improvements
|
||
- Migrate to rapier 0.32
|
||
- Do not echo sync-only messages
|
||
- Improved validation for rigid bodies
|
||
- Increase ambient lighting for asset preview
|
||
- Update libloading dep
|
||
- Do not try to use hole mask if `holes enabled` flag is off
|
||
- Print info messages in automated tests only if `visual_debug == true`
|
||
- Prevent message spam when executing editor tests
|
||
- Do not reset camera state when doing any changes on it
|
||
- Wrap asset title by word, not by letter
|
||
- Improved log filtering in the editor
|
||
- Improved numericupdown widget style
|
||
- Improved style for docking anchor
|
||
- Improved surface data editor style
|
||
- Improved visual style for signals in animation editor
|
||
- Improvements for animation editor
|
||
- Improvements for audio preview panel
|
||
- Moved build targets list to editor settings
|
||
- Moved project build tools to `fyrox-build-tools` crate
|
||
- Refactor window dragging logic to use local coordinates and clamp size/position (#899)
|
||
- Refactored animation renaming + adding new animation
|
||
- Refactored export cli to be a part of the game workspace
|
||
- Refactored log filtering
|
||
- Refactored scene loading to use plugin tasks
|
||
- Print current version in the project manager window's title
|
||
- Print warning message if backtrace capture is enabled
|
||
- Disable info logging by default in project manager
|
||
- Disable layer-related buttons when no layer is selected
|
||
- Disable word wrap for node type
|
||
- Adjust "open docs" button style
|
||
- Adjust byte gap
|
||
- Adjust default height map size for terrains to prevent warning message
|
||
- Automatically enter preview mode when selecting a camera
|
||
- Automatically zoom in on the new animation
|
||
- Accept `NumpadEnter` on `Button` widget
|
||
- Use bitmap image for check box instead of vector
|
||
- Use correct resource for `locate` button in material field editor
|
||
- Use correct resource for `locate` button in surface field editor
|
||
- Use default style for new ui
|
||
- Use image for `locate` button in resource field editor
|
||
- Use toggle buttons for preview and loop options in animation editor
|
||
- Use ui style when drawing keyboard focused widget bounds
|
||
- Show animation player name in the window title
|
||
- Show currently selected absm name
|
||
- Send message box messages back
|
||
- Save triangle buffer as a binary blob
|
||
- Unify naming for built-in assets
|
||
- Editor style improvements
|
||
- The plugin initialization was moved to event queue and only when the registry is fully loaded
|
||
- Always show display name of the property if the doc is empty
|
||
- Build target for project export options
|
||
- Configurable constraint for dropdown list
|
||
- Convert project name to standard format
|
||
- Correctly handle dyn types on hot reloading
|
||
- Correctly mark property editors when loading a dynamic editor plugin
|
||
- Deactivate "add key" button if nothing is selected
|
||
- Default ui for project manager
|
||
- Defaults + docs for project exporter cli
|
||
- Diagnostic messages when adding keys
|
||
- Do not create a default user interface
|
||
- Do not rebuild formatted text when visual transform changed
|
||
- Draw keys on background curves
|
||
- Helper methods for `HotKey`
|
||
- Keep message flags when responding to changes in ScrollBar widget
|
||
- Keep track of an assembly from which a dyn type originates from
|
||
- Make keyboard shortcut text for menu item less bright
|
||
- More efficient render data copying
|
||
- More visual improvements for animation editor
|
||
- Offload vertex transform to gpu when drawing widgets
|
||
- Prevent highlighting rectangle of a focused widget to draw outside
|
||
- Prevent redundant memory allocations during widgets drawing
|
||
- Rename default name of the scene root to `SceneRoot` from `__ROOT__`
|
||
- Reorganized log and command stack panel buttons
|
||
- Save log filter state to the editor settings
|
||
- Shuffle icon for uuid property editor
|
||
- Simplified trait bounds for `load_ui`
|
||
- Split animation editor toolbar in a top and bottom parts
|
||
- Support `FrameworkError` in `GameError`
|
||
- Unified scene/ui loading + refactored async script/plugin tasks
|
||
|
||
## Removed
|
||
|
||
- Remove `Mobility` because it does nothing
|
||
- Removed context menu from texture field, replace with buttons
|
||
- Removed redundant tree traversal in widgets drawing
|
||
- Removed unused import
|
||
- Removed useless message when saving settings
|
||
|
||
# 1.0.0-rc.2
|
||
|
||
Second release-candidate version.
|
||
|
||
## Fixed
|
||
|
||
- Fixed combining lightmaps with emissive channel
|
||
- Fixed incorrect light mapping for shared materials
|
||
- Fixed incorrect filtering of material when generating a lightmap
|
||
- Fixed path filtering in case of empty filter
|
||
- Fixed editor hanging when closing a scene tab when more 3+ scenes open
|
||
- Fixed incorrect position syncing when modifying z coordinate of 2d body
|
||
- Fixed infinite recursion in trait bounds for Visit and Reflect procmacro
|
||
- Fixed infinite message loop in node selector
|
||
- Fixed crash in node selector when untyped handle was replaced with typed
|
||
- Fixed dyn type constructors container type passed on deserialization
|
||
- Fixed project template generator
|
||
- Fixed crash when trying to rebind a property prefab's animation
|
||
- Fixed `Bring into view` functionality for log panel
|
||
- Fixed enabled state for menu items of asset item
|
||
- Fixed folder deletion from asset browser
|
||
- Fixed crash when attempting to delete ui scene root
|
||
- Fixed incorrect "no items" visibility condition + fixed `Make Folder`
|
||
- Fixed incorrect tree root handling when processing fs events
|
||
- Fixed file system watcher for file browser widget
|
||
- Fixed crash in fs tree creation
|
||
- Fixed incorrect nan handling in numeric up down widget
|
||
- Fixed infinite message loop in numeric up down
|
||
- Fixed incorrect hdr adaptation
|
||
- Fixed hdr auto exposure
|
||
- Fixed defaults for automatic exposure for hdr
|
||
- Fixed incorrect frame luminance calculation for hdr
|
||
- Fixed luminance calculation glsl function
|
||
- Fixed misleading docs
|
||
- Fixed gltf loading
|
||
- Fixed panic from `TileCollider` load failure
|
||
- Deduplicate fs events to prevent duplication of fs tree items
|
||
- Correctly filter out editor nodes when generating a lightmap
|
||
- Update vertex buffer if its layout has changed
|
||
- Clip keyboard focus rectangle by widget's clip bounds
|
||
|
||
## Added
|
||
|
||
- `DynType` for user-defined serializable structures with full editor support
|
||
- Error handling for scripts and plugins with optional backtrace capture
|
||
- UI rendering optimization based on widget invalidation
|
||
- BBCode support
|
||
- Font fallbacks
|
||
- Experimental shader code editor
|
||
- Added ability to keep the editor active on every frame
|
||
- Added ability to disable bloom + configurable bloom threshold
|
||
- Automated testing mode for the editor
|
||
- Added hdr settings
|
||
- Added named scopes for renderer to improve debugging
|
||
- Added background for the editor content
|
||
- Added user data for `Graph`
|
||
- Added property editor for `TextureKind`
|
||
- Added `This folder is empty` message for file browser
|
||
- Added helper methods to graph to borrow nodes and do ray casting
|
||
- `impl Display` and `impl Error` for various engine errors
|
||
- `UserInterface::send_to` + `UserInterface::send_many_to` + `UserInterface::send_many_to_if` +
|
||
`UserInterface::send_sync_many` methods
|
||
- `UiMessage::is_for` + `UiMessage::data_for` + `UiMessage::for_widget` + `UiMessage::data_from` +
|
||
`UiMessage::comes_from` methods
|
||
- UI message delivery mode
|
||
- Helper methods for scene nodes: `set_position`, `set_position_xyz`, `set_rotation`, `set_rotation_angles`,
|
||
`set_rotation_x`, `set_rotation_y`, `set_rotation_z`, `set_scale`, `set_scale_xyz`, `set_uniform_scale`
|
||
- Add [useful instructions](https://github.com/FyroxEngine/Fyrox/blob/master/CONTRIBUTING.md#contributing-code) for
|
||
contributors
|
||
- Configurable exposure for editor's camera
|
||
- `impl Default for DrawingContext`
|
||
- Visual invalidation flag for widgets
|
||
- Headless mode for the editor
|
||
- Autotesting for the editor
|
||
- Resource io improvements
|
||
- Folder filter preset for file browser
|
||
- Path filtering in file selector
|
||
- Add `All Supported` filter option for file selector
|
||
- Ability to deselect currently selected path in file browser
|
||
- Standard `ok` + `cancel` styles for button background decorator
|
||
- Icons for editor's menu items
|
||
- Padding for text box and formatted text
|
||
- Overall style improvements
|
||
- Placeholder for textbox + searchbar widgets
|
||
- Add preview for shaders
|
||
- `control_trait_proxy_impls` macro + boilerplate code removal
|
||
- `BuildContext::add` method
|
||
- Ability to check if a path is a built-in resource path
|
||
- Property editor for `TexturePixelKind`
|
||
- Property editors for vec<matrix 2/3/4>
|
||
- Type uuid provider impl for matrix 2/3/4
|
||
- Property editors for shader entities
|
||
- Better error handling for `Pool`, `Graph`
|
||
- `NetStream::pop_message` method
|
||
- Arbitrary error support for visitor
|
||
- User data for `Graph` and `UserInterface` based on `DynType`
|
||
- Ability to edit ui scene settings
|
||
- `to_base`/`to_variant` methods for handle type conversion
|
||
- Better error handling in `Ragdoll::iterate_recursive`
|
||
- `HandlesArrayExtension` trait
|
||
- `to_base` for `Vec<T>` where T: ObjectOrVariant<B>
|
||
- Property editor for `Style`
|
||
- `Rectangle::apply_animation`/`Sprite::apply_animation` helper method for easier applying of sprite sheet animation
|
||
- Shortcuts for setting specific part of the linear velocity of rigid body
|
||
- `PluginContext::load_ui` helper method
|
||
- Ability to fetch scene nodes by uuid
|
||
- `Pool::next_free_handle` method
|
||
- `Plugin::on_game_error` - ability to handle game errors and disable standard logging
|
||
- Ability to add scene nodes at desired handles
|
||
- `Shader::find_texture_resource` + `Self::find_property_group_resource`
|
||
- Ability to check if shader has a texture/property group resource
|
||
- `impl Display for VertexAttribute`
|
||
- Ability to explicitly specify location of the second tex coord attribute
|
||
- Ability to clear lightmap
|
||
- Ability to specify environment lighting brightness
|
||
|
||
## Changed
|
||
|
||
- UI messages refactoring - removed message constructors and replaced with direct enum variant
|
||
creation.
|
||
- Migrated to typed handles
|
||
- Fill in the default path to lightmap texture as registry root
|
||
- Improved surface data viewer to show vertex layout
|
||
- Report non-supported nodes when generating a light map
|
||
- Make `instance_id_map` immutable in the editor
|
||
- Use `tinyaudio` version 2
|
||
- Refactored `TabControl` to use only uuids for tabs
|
||
- Removed lazy_static dependency
|
||
- Keep the nodes at their handles when saving a scene in the editor
|
||
- Use task pool instead of spawning a thread manually when loading a scene
|
||
- Refactor `Style` to use plain sorted vector
|
||
- Shortcuts for `ScrollViewerMessage` + `ListViewMessage`
|
||
- Allow fetching base type instances from compound objects
|
||
- Support typed handles in multiborrow context
|
||
- Allow comparison of base and derived handles
|
||
- Return result in behavior trees
|
||
- Shared property editors container
|
||
- Plugin docs improvements
|
||
- Improved `copy` functionality for log entries
|
||
- Show/hide apply+revert buttons in inspector correctly
|
||
- Wrap shader source code into newtype wrapper
|
||
- Make shader entities inspectable
|
||
- Keep asset preview enabled when inspecting built-in assets
|
||
- Show asset preview for built-in assets
|
||
- Show the content of built-in assets in inspector when selected
|
||
- Limit dropdown container min width instead of width
|
||
- Show registry root when clearing the search bar in the asset browser
|
||
- Ability to set text box's padding via respective message
|
||
- Do not allow deleting the root registry folder
|
||
- Refresh asset browser if a folder was added/removed
|
||
- Do not register unsupported paths in `ResourceManager::find`
|
||
- Check if a resource can be loaded before registering it
|
||
- Use `WrapPanel` in the animation editor for better toolbar layout
|
||
- Improved menu item with icons + helper for `MenuItemContent`
|
||
- Handle `Rescan` message correctly
|
||
- Check if a file already exist when selecting a file in file selector
|
||
- Use `ok` + `cancel` button style for file selector widget
|
||
- Take filter into account when checking if a folder is empty
|
||
- Disable ability to delete path root item
|
||
- Refactored path filter to support fixed set of file types
|
||
- Ability to show context menu by a click on file browser
|
||
- Ability to specify filter for path field editor
|
||
- Make path text non-editable
|
||
- Hide home/desktop dir buttons if a root is set for file browser widget
|
||
- Improved file selector to have configurable list of file types
|
||
- Moved FileSelectorField widget to its own module
|
||
- Moved mode out of file browser to file selector widget
|
||
- Focus selected path on project import in the project manager
|
||
- Refactored file selector + file browser some more
|
||
- Use resource registry folder for asset browser and file browser
|
||
- Do not generate redundant fs tree items if a root is set
|
||
- Refactored file browser tree building + added tests
|
||
- Refactored path setting + removed duplicated code
|
||
- Refactored path filter
|
||
- Simplified dir content fetching
|
||
- Replaced `OpenModal/OpenAt/OpenAndAlign` window messages with `Open`
|
||
- Register missing property editors
|
||
- Force save an empty resource registry and create a folder for it
|
||
- Post `Popup::Close` only if the dropdown's popup is open
|
||
- Send `modified` flag message as sync in inheritable prop editor
|
||
- `Widget::local_to_screen`
|
||
- Keep updating all UIs even if there's no graphics context
|
||
- Disable shadow casting for scene gizmo
|
||
- Ability to run the editor with graphics debugging turned on
|
||
- `GraphicsServer::begin_scope`
|
||
- Ability to specify debug groups for graphics commands
|
||
- Use default exposure for editor camera
|
||
- Introducing the null scene
|
||
- Color space conversion glsl functions
|
||
- Return the number of processed message from ui message queue polling
|
||
- Improving how selection changes are handled
|
||
- Improving UX of TextBox
|
||
- Putting space in FormattedText for tabs.
|
||
- Allow indexing `UserInterface` with derived widget handles
|
||
- Moved `perform_layout` flag to `MessageData` trait method
|
||
- Use gltf emission strength parameter correctly
|
||
- Register gltf standard shader
|
||
- Wake up rigid bodies when changing linear/angular velocity
|
||
- Made uv + normals optional when loading gltf
|
||
- Merge pull request #858 from b-guild/resource
|
||
- Ability to disable writing to stdout for `Log`
|
||
- Correctly kill child processes when starting a new export run
|
||
- Updated MSRV
|
||
- Ability to disable optimizations when exporting the project
|
||
- Show full project path in the project manager to reduce confusion
|
||
- Use home dir as default location for new projects
|
||
- Adjusted styles for "delete project" message box in the project manager
|
||
|
||
## Removed
|
||
|
||
- Removed backward compatibility for assets
|
||
- Removed `AbstractSceneGraph` + `BaseSceneGraph`, merged in `SceneGraph`
|
||
- Removed unused root dir title
|
||
- Removed fs events handling from public file browser message
|
||
- Removed optimization for `dev` profile
|
||
- Removed hardcoded values for lightmap generation
|
||
|
||
# 1.0.0-rc.1
|
||
|
||
First release-candidate version.
|
||
|
||
## Fixed
|
||
|
||
- Fixed performance issues when deleting an object in the editor
|
||
- Use ambient occlusion from material info in ambient lighting shader
|
||
- Fixed skybox editing in scene settings
|
||
- Fix build window (handle stderr and stdout in different threads)
|
||
- Fixed ssao rendering
|
||
- Exit build mode after successful build
|
||
- Prevent loss of piped data due to BufReader dropping
|
||
- Fixed cube texture to use only one size parameter instead width+height
|
||
- Fixed layout of resource property editor
|
||
- Fixed reflection probe rendering with fxaa enabled
|
||
- Add details to FieldTypeDoesNotMatch error to improve warnings
|
||
- Check if a property can be cloned/pasted in the inspector
|
||
- Fixed box selection in the editor
|
||
- Improved selection order in the editor
|
||
- Context menu handling for various inspectors
|
||
- Fixed smart placement for move interaction mode
|
||
- Fixed grid blending issues
|
||
- Fail-safe shader/material handling when rendering
|
||
- Fixed incorrect sampler params
|
||
- Prevent clamping for infinite available size in UI
|
||
- Fixed axes colors for grid shader
|
||
- Adjust grid cell size to match grid snapping options
|
||
- Support all three major plane orientations (oXZ,oXY,oYZ) in grid shader
|
||
- Improved selection in the editor
|
||
- Fixed incorrect viewport handling for camera render targets
|
||
- Do not crash if render data couldn't be created, return an error instead
|
||
- Filter out editor-specific scene nodes when using camera preview
|
||
- Remove render data for destroyed cameras
|
||
- Use separate render target for camera preview in the editor
|
||
- Added missing tab labels for 'Settings' and 'Navmesh' panels
|
||
- Added missing interaction modes shortcuts for terrain and navmesh
|
||
- Fixed terrain holes incorrect command name
|
||
- Making relative paths for loading and saving scenes
|
||
- Remove redundant BrushMacro method remove_cell
|
||
- Highlight allowed types better in the node selector
|
||
- Use typed_ref/mut methods in graph indexing impl
|
||
- Show/hide camera preview image
|
||
- Fixed interaction mode order in the toolbar to follow indices: 1..6
|
||
- Fixed distance sorting for meshes
|
||
- Collect only supported resources + ignore resources from excluded dirs
|
||
- Fixed render order to be back-to-front for correct blending
|
||
- Improved gizmo and exposed scale in editor settings
|
||
- Prevented the camera frustum in debug draw from being scaled
|
||
- Improved camera focus distance to be less close to the object
|
||
- Correcting make_relative_path and scene saving logic.
|
||
- Allowing make_relative_path to accept non-existing files
|
||
- Improving error reporting for missing InspectorEnvironment
|
||
- Fixed scene gizmo lighting
|
||
- Fixed crash when an invalid asset is drag-dropped onto a surface field
|
||
- Fixed crash when an empty string is used in the asset browser search
|
||
- Fixed crash when CSM near and far values are superimposed
|
||
- Fixed documentation for VisitError::NotSupportedFormat
|
||
- Made "Show in explorer" work on other OS's
|
||
- More concise naming for Reflect methods
|
||
- Handle UI scaling in Screen Widget
|
||
- Fixed potential crash in the editor
|
||
- Improved performance of dynamic drawing methods
|
||
- Fixed resource registration
|
||
- Fixed deadlock when loading a resource
|
||
- Preserve global transform when reparenting scene nodes
|
||
- Fixed misleading docs
|
||
- Fixing minimization for windows.
|
||
- Fixed distance sorting
|
||
- Reset editor camera rotation when in 2d mode
|
||
- Fixed matrix2 deserialization
|
||
- Fixing cut-off text in tooltips
|
||
- Protecting against resource deadlock
|
||
- Hold mutex locks as short as possible to prevent deadlocks
|
||
- Use blocking resource registry updating where possible
|
||
- Correcting terrain hole mask bug
|
||
- Fixed asset item context menu not showing on rmb click
|
||
- Do not try to reload unsupported resources.
|
||
- Moving plugin and script handling to before node handling, to fix teleportation glitch
|
||
- Print error message instead of silently writing an error to the resource
|
||
- Use trait upcasting and remove `as_any` for `ResourceData`
|
||
- Fixed usages of ResourceKind
|
||
- Fixed asset preview generation
|
||
- Fixed built-in resource handles deserialization
|
||
- Ability to create metadata files
|
||
- Proper headless mode
|
||
- Hide asset preview if there's no actual preview data for it
|
||
- Fixed gltf shader
|
||
- Fixed incorrect syncing of modified flag in property editor
|
||
- Prevent annoying message spam when import options is missing for asset
|
||
- Fixed ambient lighting in case of non-skybox lighting
|
||
- Render overlay icons only in the scene preview
|
||
- Hide "revert" button for inheritable properties when no parent object
|
||
- Improved performance of visual transform calculation in ui
|
||
- Improved ui performance
|
||
- Fixed blending issues when batching multiple rectangles
|
||
- Fixed fitting for asset preview
|
||
- Fixed visual glitch for scaling, rotation, movement gizmos
|
||
- Fixed update loop state in the editor
|
||
- Fixed deletion of gl vao/gpu programs/textures
|
||
- Fixed incorrect caching/binding of gl framebuffer
|
||
- Handle invalid aabb/division by zero when doing camera fitting
|
||
- Fixed menu item content alignment + `make_menu_splitter` helper
|
||
- Reset visual state of a selected option in the dropdown list on select
|
||
- Fixed asset preview update when a resource changes
|
||
- Significantly reduced annoying visual lag when generating asset previews
|
||
- Correctly detach content of control panels of various entities
|
||
- Fixed text alignment in various places in the editor
|
||
- Fixed asset preview
|
||
- Do not stop deserialization on invalid resource refs
|
||
- Fixed inability to add animation track for a node
|
||
- Better lighting for asset preview
|
||
- Fixed torus faces orientation
|
||
- Fixed deferred preview generation for assets in asset selector
|
||
- Fixed `Option::None` serialization
|
||
- Fixed camera picking issues
|
||
- Do not change resource uuid when moving it in the editor
|
||
- Log window improvements + fixes
|
||
- Fixed crash when trying to select text in the text box via double click
|
||
- Fixed resource movement in the asset browser
|
||
- Fixed incorrect position of dragndrop preview when dpi scaling is used
|
||
- Update asset preview if the asset changes
|
||
- Properly handle added/removed resources to/from the resource registry
|
||
- Use correct material in `MaterialFieldEditor`
|
||
- Fixed crash in case of invalid material resource used in ui renderer
|
||
- Fixed request of built-in resources in the resource manager
|
||
- Fixed incorrect color space in standard forward pass of standard shaders
|
||
- Fixed black screen bug when saving a scene with active camera preview
|
||
- Prevent deadlock when trying to get a debug name for gpu texture
|
||
- Fixed incorrect ambient lighting calculation
|
||
- Reduced memory usage when generating asset previews
|
||
- Clamp anisotropy in `[1.0; 16.0]` range to prevent video driver errors
|
||
- Fixed `uuid_provider` macro
|
||
- Correcting InheritableVariable::visit and physics integration parameters dt
|
||
- Fixed selection button being clipped on material property editor
|
||
- Fixed gimbal lock in GLTF animations
|
||
- Prevent crash on empty uniform blocks
|
||
- Update the material editor when hot-reloading a shader
|
||
- Fixed crash on material hot-reloading when a property was removed
|
||
|
||
## Added
|
||
|
||
- Added image-based lighting (IBL)
|
||
- Name for gpu buffers
|
||
- Named gpu textures
|
||
- Ability to specify mip level for frame buffer attachments
|
||
- `GraphicsServer::create_cube_render_target`
|
||
- Added runs to FormattedText
|
||
- `Texture::new_cube_render_target`
|
||
- Environment mapping
|
||
- Reflection probe node
|
||
- `fyrox_widgetData` built-in property group
|
||
- Ability to specify custom shaders for widgets
|
||
- Documentation and helper methods for colliders
|
||
- Implementing Debug and Display for BitMask.
|
||
- Brdf lut generator
|
||
- Ability to copy/paste values in the editor setting's inspector
|
||
- `UserInterface::has_descendant_or_equal`
|
||
- `Inspector::handle_context_menu_simple`
|
||
- `GpuShader` entity
|
||
- `Reflect::try_clone_box`
|
||
- Ability to copy/paste values in inspector
|
||
- Added `is_significant` method for editor commands
|
||
- Show grid in 2d mode in the editor
|
||
- Docking manager for asset browser
|
||
- Echo popup messages
|
||
- `Copy Value` + `Paste Value` options in context menu of `Inspector`
|
||
- Collect property paths in the inspector widget
|
||
- `UserInterface::send_messages` to send multiple messages at once
|
||
- Implemented `BorrowAs` trait for widget handles
|
||
- Enhanced tile set editing, copying pages
|
||
- Debug impl for NodeHandleMap
|
||
- Movable scene tabs
|
||
- `GraphicsServer::generate_mipmap`
|
||
- `RendererResources` with pre-loaded resources
|
||
- Ability to specify the face of the cube map in frame buffer attachment
|
||
- Environment cube map prefilter shader
|
||
- Blanket impl for ScriptMessagePayload replaced with derive macro
|
||
- Print allowed type name in the node selector + do type checking
|
||
- Ability to set derived handle types in the handle editor
|
||
- Dynamically typed script messages
|
||
- Added a setting to modify editor camera's mouse sensitivity
|
||
- `Reflect::fields_info_mut` + optimizations
|
||
- More methods for handles accessed via reflection
|
||
- Improvements to autotiling
|
||
- Multithreaded wave function collapse
|
||
- Adding empty tiles to tile map brush
|
||
- Render target for cameras
|
||
- Thread sleep in headless executor
|
||
- `ResourceLoader::convert` impl for native scenes
|
||
- Added `ResourceIo::copy_file` method
|
||
- Added visitor version number
|
||
- Added option to use %MANIFEST_DIR% to open IDE in project manager
|
||
- Add render mask to Base node
|
||
- Docs improvements for serialization
|
||
- Universal `Visitor::load_from_memory` with format autodetection
|
||
- Tests for `move_resource`
|
||
- Integration tests for fyrox-resource
|
||
- Adding support for kinematic physics
|
||
- `RG16F` texture format
|
||
- Allow user to change editor icon and customize window title
|
||
- Tooltip for material resources in the material editor
|
||
- Ability to fetch memory usage by the graphics server
|
||
- Ability to disable asset convertion when exporting a project
|
||
- Convert ui scenes to binary format when exporting a project
|
||
- Print warning messages in the log when setting terrain height map
|
||
- Resource registry `ResourceManager::register` + `ResourceManager::uuid_to_path` methods
|
||
- Introducing multi-window docking tiles
|
||
- Resource registry
|
||
- `ResourceIo::write_file` + rename `FileLoadError->FileError`
|
||
- `ResourceLoadersContainer::is_supported_resource`
|
||
- Show selected path in the main window of the asset browser
|
||
- Uuids for resources
|
||
- Ascii reader and writer for visitor
|
||
- Added `#[inline]` attributes for ui drawing methods
|
||
- Configurable fadeout margin for particle systems
|
||
- Fyrox-graphics documentation
|
||
- Ability to disable picking restriction for popup widget
|
||
- Ability to create gpu program from shaders
|
||
- Ability to reset widget's visual state via respective message
|
||
- Ability to reset editor layout
|
||
- Cell property editor
|
||
- Placeholder icon for resources without preview generator
|
||
- Added placeholder icon for asset items whose preview is being generated
|
||
- Loading scenes list window when loading scenes in the editor
|
||
- Async loading for game and ui scenes in the editor
|
||
- Ability to specify special title for root item in the filebrowser widget
|
||
- Ability to paste properties in resource inspector
|
||
- Ability to inspect and edit supported assets in inspector
|
||
- Footer attachment point for inspector plugin
|
||
- `AssetSelection` + inspect asset import options in standard Inspector
|
||
- Helper methods for selection downcasting
|
||
- Ability to move a folder with resource in the resource manager
|
||
- Configurable depth for `walk_directory` method
|
||
- Asset rename dialog improvements
|
||
- Ability to rename assets in the asset browser
|
||
- Add small margin for asset preview
|
||
- Skybox api improvements
|
||
- Added folder icon for file browser
|
||
- Ability to select environment light source for scenes
|
||
- `Brush` helper methods
|
||
- Better navigation in the asset browser
|
||
- Ability to enable or disable debug names for GPU objects
|
||
- Added confirmation dialog for asset deletion
|
||
- Use checkerboard background for asset preview tooltips
|
||
- Improved texture property editor
|
||
- Increased size of material preview
|
||
- Preview for surface data editor
|
||
- Preview for material property editor
|
||
- Magnified asset preview for resource property editor
|
||
- Show asset preview in resource field editor
|
||
- Texture property editor improvements
|
||
- `AssetSelectorWindowBuilder::build_for_type_and_open`
|
||
- Ability to disable size sync of `Image` widget with its texture
|
||
- Helper function `make_pick_button`
|
||
- Generate preview for items in asset selector
|
||
- Asset selector
|
||
- Helper methods for `ResourceState`
|
||
- Direct immutable access to underlying container for ResourceRegistry
|
||
- `ResourceManager::can_resource_be_moved`
|
||
- Highlight asset item when it accepts drop
|
||
- Check for drop content in the file browser to show correct cursor icon
|
||
- Custom `accepts_drop` for `AssetItem` that checks if drop is possible
|
||
- Allow to define custom drop response method on ui widgets
|
||
- Improved visual style of `AssetItem`
|
||
- Ability to move a folder when dropping it to some other folder
|
||
- Ability to move a resource by dropping it to a folder asset item
|
||
- Ability to move a resource by path without loading it
|
||
- `impl Display for FileError`
|
||
- `ResourceRegistry::remove_metadata`
|
||
- `ResourceIo::delete_file+delete_file_sync`
|
||
- `UntypedResource::type_uuid_non_blocking`
|
||
- Ability to specify pre and post visit method calls for visitor codegen
|
||
- Ability to try get resource manager state lock for the given time period
|
||
- Style api improvements
|
||
- Ability to re-bind styled properties of widgets in the editor
|
||
- Joint motors
|
||
- Show graphics server memory usage in the editor's rendering statistics
|
||
- Simplified interaction with keyboard and mouse.
|
||
- Added flake.nix for generated projects
|
||
- Simplified way of getting input state
|
||
- Ability to flip sprite/rectangle nodes
|
||
- Show id of materials/surfaces in the editor
|
||
- Added TypeUuidProvider impl for VectorN types
|
||
- Property editors for Run + RunSet
|
||
- Property editor for `char` + editors for mask char in formatted text
|
||
- Named constants for mouse buttons + helper methods for mouse input
|
||
- Ability to set runs via respective message
|
||
- Added srgba8/srgb8 texture formats
|
||
- Added pure color texture
|
||
- Added non-euler-angles-based rotation track
|
||
|
||
## Changed
|
||
|
||
- Preventing deadlocks by replacing `lock` with `safe_lock`
|
||
- Automatically destroy dead senders in resource event broadcasters
|
||
- Renamed pool method typed_ref to try_get
|
||
- Configurable render mode for ui
|
||
- UI rendering api improvements
|
||
- do not alter already loaded resource state when reloading it
|
||
- Use scene skybox if there's no specific environment map
|
||
- Do not prevent building without the opened scene
|
||
- Remove dependency on status code 101 (which is cargo specific, while built-tool has tool-agnostic design)
|
||
- Detached renderer from scene's `Camera`
|
||
- Moved sky box to scene from camera
|
||
- Enable seamless cube map filtering by default
|
||
- Include breadcrumb into VisitError:RegionDoesNotExist
|
||
- Moved all shaders into a centralized storage
|
||
- Moved opengl-specific code to `fyrox-graphics-gl`
|
||
- Build tool now streams both stdout and stderr
|
||
- Increased window size and inspector name column width in settings
|
||
- Smart selection of corner arc subdivision when drawing borders
|
||
- Recalculate clip bounds only for changed widgets
|
||
- Allow engine user control default editor settings
|
||
- Use `MaterialResource` in widgets instead of `UntypedResource`
|
||
- Refactored ui renderer to use materials
|
||
- Documented keyboard focus
|
||
- Separate brush for highlighting widgets with keyboard focus
|
||
- Prevent selection of asset items while holding alt
|
||
- Moved material/shaders to `fyrox-material` crate
|
||
- Use separate struct for args for `InspectorContext::from_object` func
|
||
- Include all nodes that produces render data in camera picking in editor
|
||
- Convert assets to their most efficient version when exporting a project
|
||
- Reducing dependencies of fyrox-autotile
|
||
- Use sampler+texture pair instead of old-fashioned combined texture
|
||
- Migrate to latest winit/glutin/rapier
|
||
- Disable texture lod bias for wasm builds
|
||
- Moved `set_panic_hook` to engine initialization for wasm builds
|
||
- Disable picking restriction for menus and context menus
|
||
- Change layout of command stack panel
|
||
- Save ui scenes in ascii mode by default
|
||
- Normalize paths before passing them to `ResourceManager::request`
|
||
- Close a menu by clicking on the menu item.
|
||
- Improved docs of `Resource::data_ref`
|
||
- Split `FieldInfo` into two parts `FieldInfo` + `FieldMetadata`
|
||
- Moving control panels to inspector head
|
||
- Merged `DerivedEntityListProvider` trait into `Reflect` trait
|
||
- Refactored node handle property editor to accept typed handles
|
||
- Register property editors for scene/ui node handles
|
||
- Refactored `NodeHandlePropertyEditorDefinition` to accept generic type
|
||
- Use typed handles in 2d joints
|
||
- Less bright icons for scene nodes
|
||
- Do not recreate render target for asset preview if preview is collapsed
|
||
- Explicitly disabled unsupported render passes in standard widget shader
|
||
- Reduced contrast of the text/images in the default dark theme
|
||
- Do not save `NEED_SYNC` flag when serializing an inheriable variable
|
||
- Correcting how ScriptPropertyEditorDefinition accesses environment
|
||
- Refactor resource manager to use hash map for resources
|
||
- Use stable ids when serializing rc/arc
|
||
- Isolated visitor's reader and writer into separate entities
|
||
- Reversing generate_free_handles to match spawn
|
||
- Refactored resource system to use uuids instead of path where possible
|
||
- Track vertex/fragment shader line location
|
||
- Tidy up menus in the editor
|
||
- Vector flattened structure for serialization
|
||
- Close dropdown lists on selection
|
||
- Open context menus on rmb-up event instead of rmb-down
|
||
- Beautifying bitfield widget
|
||
- Adding adjustable warning messages to autotile failures
|
||
- Select asset item by rmb click
|
||
- Expose instance id in the inspector
|
||
- Use doc comment for property description
|
||
- Expose more properties in the inspector
|
||
- Unhide node's global transform in the inspector
|
||
- Keep the editor active until it loads all the queued scenes
|
||
- Use special root title for project's root folder in the asset browser
|
||
- Override title for the root item in the asset browser
|
||
- Only show folders that in the registry in the asset browser's dir viewer
|
||
- Show only content from the resource registry in the asset browser
|
||
- Use command-based approach when editing resources in the inspector
|
||
- Use respective command to change selection in the asset browser
|
||
- Save the resource data on change in the inspector
|
||
- Hide asset previewer for assets without a preview
|
||
- Moved asset preview to the inspector
|
||
- Moved selection-specific code to selection itself
|
||
- Show pretty type name in resource creator
|
||
- Search in resource registry when searching in the asset browser
|
||
- Better validation for file name when doing move
|
||
- Do not allow to delete built-in resources
|
||
- Improved FormattedText
|
||
- Use flat gray color background for asset previews
|
||
- Green color for `add resource` button
|
||
- Disable `duplicate` and `dependencies` context menu items for folders
|
||
- Use calculated local instead of screen position when setting new desired position after toggling of a view
|
||
- Bring selected item into view in the list view when arrow navigating
|
||
- Use texture property editor for texture bindings in material editor
|
||
- Use helper methods in resource property editor
|
||
- Increased margin on `Stop` button in build window
|
||
- Improved validation when moving a resource
|
||
- Check if a resource can be moved when moving an asset in asset browser
|
||
- Moved tooltip from asset item to its text field
|
||
- Make paths os-independent and canonical when moving a resource
|
||
- Do not allow to create a resource outside of the data folder
|
||
- Allow to use build tool with executable that doesn't expect "--" as passthrough marker
|
||
- Build tools: delegate stderr to Log
|
||
- Removed redundant empty impls of InteractionMode trait
|
||
- Share fbx materials as much as possible
|
||
- Store a style handle in the widget
|
||
- Pass ui handle in `Plugin::on_ui_message`
|
||
|
||
## Removed
|
||
|
||
- Removed resource duplicates
|
||
- Removed invalid assertions
|
||
- Removed redundant `ResourceLoaderAsAny` trait
|
||
- Removed wasm-unsupported `set_border_color` of gpu texture
|
||
- Removed `get_image+read_pixels` methods from gpu texture
|
||
- Removed impls for `field/field_mut`
|
||
- Removed redundant codegen for field/field_mut methods
|
||
- Removed `Relfect::fields/fields_mut` methods
|
||
- Removed `owner_type_id` field from `FieldInfo`
|
||
- Removed redundant `type_name` field from `FieldInfo`
|
||
- Removed `Downcast` trait, replaced with `define_as_any_trait` macro
|
||
|
||
# 0.36.1
|
||
|
||
Minor release with fixes for some annoying bugs.
|
||
|
||
## Fixed
|
||
|
||
- Fixed frustum culling issues for meshes.
|
||
- Correctly mark inheritable properties as modified when animating them.
|
||
- Show selected item in the asset browser when clearing selection text.
|
||
- Fixed incorrect width of the node removal dialog.
|
||
- Fixed physics desynchronization issue.
|
||
- Fixed docking manager layout saving and loading.
|
||
- Improved project name validation (in both `fyrox-template` and the project manager).
|
||
- Fixed example shader in the documentation.
|
||
- Added names for floating panels in the editor—fixes incorrect layout after loading.
|
||
|
||
# 0.36
|
||
|
||
This version unifies versions of sub-crates - now all sub-crates have the same version. This makes it easier to migrate
|
||
to future versions.
|
||
|
||
## Added
|
||
|
||
- Tile maps.
|
||
- UI styling support.
|
||
- 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 a configurable throttle frame interval for `Executor`.
|
||
- Added sanity check for brush operations to protect the 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` method.
|
||
- `DrawingContext::push_grid` method.
|
||
- `save + save_back` methods for resource.
|
||
- Added "refresh" button for asset browser.
|
||
- `ResourceDataRef::as_loaded_ref/mut` methods.
|
||
- Ability to open assets using double click.
|
||
- Multi-selection 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 a 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` method.
|
||
- `post_update` callback for `Plugin`.
|
||
- Editor plugins container - adds some useful methods for plugin 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 selecting a coordinate system for generated particles—
|
||
local or world.
|
||
- Lighting support for particle systems.
|
||
- `ModelResource::instantiate_and_attach` method.
|
||
- 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` method.
|
||
- Editor ui statistics plugin. Allows tracking the total amount of widget used by the editor, which is useful to find if
|
||
there are "dangling" widgets.
|
||
- `DockingManagerLayoutDescriptor::has_window` method.
|
||
- Print the total number of drawing commands of ui for the 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.
|
||
- Track processed ui messages in the editor - helps to find message queue overload.
|
||
- `has_component` helper methods.
|
||
- `StyleResource` resource type.
|
||
- Configurable routing strategy for ui messages.
|
||
- Helper methods for easier setting window icon.
|
||
- Add a `Zed` editor option into editor settings.
|
||
- Added configurable delay for tooltips.
|
||
- Prevents tooltips from popping up instantly on mouse hover, instead there's a configurable (0.55 s by default)
|
||
delay.
|
||
- Removes annoying tooltip popping when moving mouse.
|
||
- Added more texture settings - base level, max level, min lod, max lod, lod bias.
|
||
- Added home/desktop directories shortcut buttons for file browser widget.
|
||
- Ability to focus the current path in the file browser widgets.
|
||
- Ability to specify graphics server constructor.
|
||
- Essentially gives an ability to change graphics servers at creation/runtime stages.
|
||
- By default still uses OpenGL graphics server.
|
||
- Added kerning support for fonts.
|
||
- `BuildContext::send_message` method.
|
||
- Added project manager CI.
|
||
- Backward compatibility for deserialization of `Untyped->Typed` resource.
|
||
- Ability to specify usage for element buffer.
|
||
- `info! + warn! + err!` log macros.
|
||
- Documentation improvements.
|
||
- `Downcast` trait to remove code bloat.
|
||
- Added tooltip for shader field in the material editor.
|
||
- Toggle button widget.
|
||
- Added tags for reflection.
|
||
- `WidgetBuilder::with_uniform_margin(..)`.
|
||
- Shortcuts for groups in editor settings: allows quickly jumping to a particular settings group.
|
||
- Searching functionality for editor settings.
|
||
- `impl TypeUuidProvider for Rect<T>`.
|
||
- Added property editors for `Option<Rect<T>>`.
|
||
- Nine patch widget improvements.
|
||
- Added ability to specify a texture region for atlas support.
|
||
- Remove explicit uv coordinates and calculate them on the fly.
|
||
- Ability to disable drawing of the center region of the nine-patch widget.
|
||
- Configurable tiling mode for nine-patch widget.
|
||
- Easier editing of texture slice using new texture slice editor.
|
||
- Thumb widget for draggable things.
|
||
- Messages to change vertical and horizontal scrolling of ScrollViewer widget.
|
||
|
||
## 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<SurfaceData>`
|
||
- Surface shared data was essentially a resource of some sort anyway.
|
||
- Allows saving meshes as resources externally.
|
||
- Allows using 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 a 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 dragging 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 animation 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.
|
||
- Extract the rendering framework into a separate crate.
|
||
- Make fbx elements of mesh geometry optional.
|
||
- Prints a 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 the 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 using 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 4 kb).
|
||
- It significantly reduces the number 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.
|
||
- Turned `Matrix2Editor` into generic-over-size `MatrixEditor`.
|
||
- Use immutable string in shader property name.
|
||
- Reworked materials.
|
||
- Material now stores only changed shader properties.
|
||
- Move 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 a render bundle. Removes redundant loop over scene graph nodes.
|
||
- Refactor hot reload to allow custom dynamic plugins besides dylib-based.
|
||
- Improved gpu texture api.
|
||
- Perform 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 the 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 the 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 the 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.
|
||
- Move the settings window into a separate plugin.
|
||
- Move the animation editor into its own plugin.
|
||
- Improved editor plugins api.
|
||
- Create animation editor on editor start if animation editor was docked before.
|
||
- Move the absm editor to a separate plugin.
|
||
- Create save file selector for prefabs on demand.
|
||
- Move the curve editor window into its own plugin.
|
||
- Move the path fixer into a plugin.
|
||
- Use builtin surfaces for meshes created in the editor.
|
||
- Migrated to latest `tinyaudio`.
|
||
- Removed hardcoded ui widgets constructors. It replaced with user-defined constructors via `ConstructorProvider` trait.
|
||
- Sort menu items in alphabetical order in creation menus.
|
||
- Replaced hardcoded ui style variables with configurable styles.
|
||
- Make tooltips invisible for hit test.
|
||
- Move the log panel to `fyrox-ui`.
|
||
- Keep the editor running until the active popup is fully shown.
|
||
- Change the default path of file browser to `./`.
|
||
- Disable log file by default. The log file could be undesirable in some cases, and now it is off by default and can be
|
||
enabled by `Log::set_file_name/set_file` in `fn main`.
|
||
- Explicit api to change the log file.
|
||
- Replaced proprietary Arial font with Roboto in the editor.
|
||
- Do not precompile built-in shaders on engine start.
|
||
- It is faster to compile them on-demand.
|
||
- On WebAssembly such compilation could take 10–15 seconds.
|
||
- Detached texture-related code to separate crate. It allows attaching it to `fyrox-ui` to use textures directly without
|
||
using hacky `UntypedResource`.
|
||
- Use TextureResource directly in ui code where possible - removes redundant juggling with untyped↔typed conversions.
|
||
- Force `Image` widget to use texture size on measurement stage - removes "surprising effect" with collapsed image, if
|
||
width/height is not set explicitly.
|
||
- Audio initialization errors non-fatal now. It allows running the engine in environments without proper audio output
|
||
support.
|
||
- Print editor version in the window title.
|
||
- Print editor version in the log on start.
|
||
- Replace the hardcoded version of the engine with the one from Cargo.toml. This is a semi-reliable solution, but much
|
||
better than having the hardcoded version.
|
||
- Close projection (2d/3d) selector on selection.
|
||
- Use toggle button for `track selection` in the world viewer.
|
||
- Put the search bar of the world viewer on the same row with other buttons.
|
||
- Moved `load_image` to `fyrox-ui` utils.
|
||
|
||
## Fixed
|
||
|
||
- Fixed blurry fonts.
|
||
- Significantly improved editor performance.
|
||
- Improved joint stability after migration to the latest Rapier physics.
|
||
- Use z index from the respective message.
|
||
- Fixed crash when trying to change window title using the respective message.
|
||
- Fixed procedural meshes serialization.
|
||
- Fixed inspector syncing when replacing the selected object with another type.
|
||
- Fixing Rect tests in fyrox-math.
|
||
- `transmute_vec_as_bytes` soundness 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 the 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 the 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. It 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 the 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 one 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 the editor settings window - saves ~10% of time.
|
||
- Prevent the editor from loading the same texture over and over again.
|
||
- Fixed keyboard navigation for tree root - fixes annoying issue which causes keyboard focus to stick at tree root.
|
||
- Fixed camera preview panel size.
|
||
- Fixed deletion of some widgets.
|
||
- Fixed arrow visibility of menu item when dynamically changing its items.
|
||
- Fixed `MenuItem` performance issues.
|
||
- Fixed syncing of material editor shader field.
|
||
- Added `fyrox-build-tools` crate which essentially contains build tools from the editor.
|
||
- Fixed incorrect texture bindings invalidation - caused weird bug with incorrect textures applied to some objects (very
|
||
noticeable in the ui after resizing the window).
|
||
- Use mip mapping for icons in the editor to smooth icons in the editor.
|
||
- Fixed background color "leaking" during `Border` widget rendering.
|
||
- Fixed syncing bug of R coordinates for volume textures.
|
||
- Fixed transform order in visual transform calculation.
|
||
- Fixed incorrect memory alignment when deserializing `BinaryBlob`.
|
||
- Fixed crash when using nine-patch widget without a texture.
|
||
- Fixed crash when dropping non-texture resource on texture field.
|
||
|
||
## 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 the per-instance basis, not per-bundle.
|
||
- Remove redundant decal layer index from mesh/terrain/render the 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.
|
||
- Remove an incorrect error message in the 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
|
||
- Dispatch script messages after everything is initialized and updated
|
||
- Prevent selection type name from disappearing in the inspector
|
||
- Fixed potential crash when undoing asset instantiation
|
||
- Fixed rendering issues in 2d projection mode in the editor
|
||
- Update visual transform of a widget when render transform changes
|
||
|
||
# 0.34 Engine + 0.21.0 Editor
|
||
|
||
## Added
|
||
|
||
- Code hot reloading for plugins.
|
||
- Ability to have multiple scripts on one scene node.
|
||
- Static and dynamic batching for meshes.
|
||
- Project exporter for automated deployment.
|
||
- Configurable build profiles for the editor.
|
||
- Ability to have multiple user interface instances.
|
||
- GLTF support (available via `gltf` feature).
|
||
- Keyboard navigation support in the UI.
|
||
- Preview generation for assets in the asset browser.
|
||
- Grid for the scene preview.
|
||
- `fyrox-template` improvements to generate projects, that supports code hot reloading.
|
||
- `AnimationPlayer` + `AnimationBlendingStateMachine` widgets.
|
||
- UI prefabs with ability to instantiate them.
|
||
- `Pool::try_get_component_of_type` + the same for `MultiBorrowContext`.
|
||
- `NodeTrait::on_unlink` method.
|
||
- Implemented `ComponentProvider` trait for `Node`.
|
||
- `MultiBorrowContext::get/get_mut` methods.
|
||
- Ability to remove objects from multiborrow context.
|
||
- `newtype_reflect` delegating macro.
|
||
- `SceneGraph::change_hierarchy_root` method.
|
||
- Ability to change UI scene root.
|
||
- Property inheritance for UI widgets.
|
||
- Ability to instantiate UI prefabs by dropping prefab into world viewer/scene previewer.
|
||
- Ability to open scripts from the editor's inspector.
|
||
- `Control::post_draw` method.
|
||
- Ability to reorder children of a scene node.
|
||
- `SceneGraph::relative_position` + `SceneGraphNode::child_position` methods.
|
||
- Ability to reorder nodes/widgets in the world viewer.
|
||
- Added more icons for widgets.
|
||
- Added support for UI animations in the animation editor.
|
||
- Configurable UI update switches.
|
||
- Ability to edit ui absm nodes in the absm editor.
|
||
- `AbsmEventProvider` widget.
|
||
- Ability to enable msaa when initializing graphics context.
|
||
- Ability to change corner radius in `Border` widget.
|
||
- Ability to draw rectangles with rounded corners in UI drawing context.
|
||
- Added layout rounding for `fyrox-ui` which significantly reduced blurring.
|
||
- Added support for embedded textures in FBX.
|
||
- `Selector` widget.
|
||
- Added project dir and scenes to open as cli args to editor.
|
||
- `utils::make_cross_primitive` helper method.
|
||
- Ability to draw wire circle in the UI drawing context.
|
||
- Ability to draw WireCircle primitives in VectorImage widget.
|
||
- More tests.
|
||
- Vertex buffer API improvements.
|
||
- Rendering statistics window for the editor.
|
||
- Added shape casting in physics.
|
||
- Ability to unassign textures in material editor.
|
||
- Allow to set negative playback speed for animations in animation editor.
|
||
- `Scene::clone_one_to_one` shortcut for easier scene cloning.
|
||
- `fyrox-dylib` crate to be able to link the engine dynamically.
|
||
- Ability to link the engine dynamically to the editor.
|
||
- Added property editor for untyped textures.
|
||
- Added `Plugin::on_loaded` method.
|
||
- `NetListener::local_address` method.
|
||
- `Model::new` method.
|
||
- Ability to disable space optimization of `InheritableVariable` on serialization.
|
||
- Added CI for project template for all supported platforms.
|
||
- Added diagnostics for degenerated triangles when calculating tangents.
|
||
- `Pool::first_ref/first_mut` methods.
|
||
- Added release keystore for android project templates.
|
||
- Collect rendering statistics on per-scene basis.
|
||
- `transmute_slice` helper function.
|
||
- Ability to read GPU texture data.
|
||
- Experimental histogram-based auto-exposure for HDR (disabled by default).
|
||
- Short-path angle interpolation mode for `Curve` - `Curve::angle_at`.
|
||
- Property editor for `RcUiNodeHandle` type.
|
||
- Adaptive scroll bar thumb.
|
||
- Ability to fetch current task pool from resource manager.
|
||
- Async icon generation for assets in the asset browser.
|
||
- Case-insensitive string comparison helper method `fyrox::core::cmp_strings_case_insensitive`.
|
||
- Major performance improvement for searching in the asset browser.
|
||
- Configurable interpolation mode for animations.
|
||
- Ability to close popups using `Esc` key.
|
||
- Added diagnostics for docking manager layout, that warns if a window has empty name.
|
||
- Keyboard navigation for tree widget.
|
||
- Ability to close windows by `Esc` key.
|
||
- Focus opened window automatically.
|
||
- Keyboard navigation for `Menu` widget.
|
||
- Added `ImmutableString` editor.
|
||
- Docs for inspector module.
|
||
- Ability to deactivate menus using `Esc` key.
|
||
- `PopupMessage::RelayedMessage` to re-cast messages from a popup to a widget.
|
||
- `NavigationLayer` widget that handles `Tab`/`Shift+Tab` navigation.
|
||
- Ability to switch check box state using space key.
|
||
- Ability to click button widget using `Space`/`Enter` keys.
|
||
- `accepts_input` for widgets that can be used for keyboard interaction.
|
||
- Added keyboard navigation for input fields in the inspector.
|
||
- Highlight a widget with keyboard focus.
|
||
- `Visitor` docs.
|
||
- Ability to open/close drop down list using arrow keys.
|
||
- Re-cast `Variant` message on enum property editor.
|
||
- Focus popup content (if any) on opening.
|
||
- Keyboard navigation for list view widget.
|
||
- Focus window content (if any) on opening.
|
||
- 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).
|
||
- Auto-select text on focusing `TextBox` widget.
|
||
- Ability to render scene manually.
|
||
- Ability to set precision for `VecEditor` widget.
|
||
- Ability to switch between shaded and wireframe mode in the scene preview.
|
||
- Multi-curve support for the curve editor widget.
|
||
- `Color::COLORS` array with pre-defined colors.
|
||
- Ability to set different brushes for every curve in the curve editor.
|
||
- Apply different colors to curves in the animation editor.
|
||
- Show multiple curves at once when selecting tracks in the animation editor.
|
||
- Dropdown menu widget.
|
||
- Quick-access menu for grid snapping.
|
||
- `Create Parent` context menu option for scene nodes.
|
||
- Add background curves concept to the curve editor widget.
|
||
- Smart placement for newly created objects.
|
||
- Added mesh control panel - allows to create physics entities (colliders, rigid bodies, etc) in a few clicks.
|
||
- `Reflect::assembly_name` to retrieve assembly name of a type.
|
||
|
||
## Changed
|
||
|
||
- 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.
|
||
- 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.
|
||
- Mutable access to UI in `Control::update`.
|
||
- Refactored `Selection` to use dynamic dispatch.
|
||
- Refactored the entire editor command system to use dynamic dispatch.
|
||
- Split `SceneGraph` trait into object-safe and object-non-safe parts.
|
||
- Run most of `Engine::pre_update` logic even if there's no graphics context.
|
||
- Moved color space transformation to vertex shader of particle system to increase performance.
|
||
- Recalculate world space bounding box of a mesh on `sync_transform` instead of `update`.
|
||
- Refactored rectpacker to use plain `Vec` instead of `Pool`.
|
||
- Moved rectangle-related code to `rectutils` crate.
|
||
- Automatically unregister faulty resources if registering ok one.
|
||
- Prevent uvgen to modifying the actual surface data.
|
||
- Extracted uvgen module to `uvgen` crate.
|
||
- Use simple vec instead of pool in octree.
|
||
- Moved `math` + `curve` + `octree` mods to `fyrox-math` crate.
|
||
- Moved lightmapper into a `lightmap` crate.
|
||
- Support for backwards movement (negative speed) for navmesh agent.
|
||
- Moved the engine implementation into `fyrox-impl` crate, `fyrox` crate now is a proxy to it.
|
||
- Moved interaction modes panel to the toolbar.
|
||
- Made shader methods public to be able to create them manually.
|
||
- Show unassigned handles in orange color to attract attention.
|
||
- Major refactoring of `TextBox` widget that makes it much more pleasant to work with.
|
||
- Major usability improvements for `DockingManager` tiles.
|
||
- `Window` widget content is now linked to `NavigationLayer` widget instance.
|
||
- Prevented `TextBox` and `NumericUpDown` widgets from sending change messages when they have not changed.
|
||
- Reduced width and precision for worldspace position of current selection.
|
||
- Use `ImmutableString` for scene nodes and widgets to reduce memory consumption on duplicated strings.
|
||
- Do not flush the renderer when changing scenes, to prevent various graphical issues.
|
||
- More informative names for curves in the animation editor.
|
||
- Change cursor icon when picking/dragging keys in curve editor.
|
||
- Major refactoring of coordinate system in the curve editor.
|
||
- Keep the animation player selected in the animation editor.
|
||
- Changed AABB validity to include zero-size dimensions to allow camera fitting to work with flat objects.
|
||
- Prefer prefab roots when selecting nodes in scene.
|
||
- `Reflect` trait bound for `Plugin` trait.
|
||
|
||
## Fixed
|
||
|
||
- Fixed cascade shadow maps (CSM) rendering.
|
||
- Fixed crash when setting particle spawn rate too high.
|
||
- Fixed UB when using MultiBorrowContext.
|
||
- Fixed visibility of cloned widget.
|
||
- Set unique id for widget copies.
|
||
- Fixed crash when closing scenes.
|
||
- Fixed `Default` impl for `Pool`.
|
||
- Fixed rare crash in `TextBox` widget when typing in something
|
||
- Fixing double pixel loop (it was looping over y twice) in terrain internals.
|
||
- Fixed creating a MenuItem in editor.
|
||
- Force ui widget to recalculate layout if it was animated
|
||
- Registered property editors for all UI properties.
|
||
- Fixed incorrect FBX cluster loading (fixes incorrect rendering of FBX models)
|
||
- Fixed crash when selection range is incorrect in the `TextBox` widget.
|
||
- Fixed crash in the animation editor when trying to rebind a track referencing deleted scene node.
|
||
- Properly expand tree items when building path in file browser widget.
|
||
- Fixed doubling of items under disks in file browser widget.
|
||
- Fixed track deletion in the animation editor.
|
||
- Fixed file browser behaviour on empty file path
|
||
- Select current dir in the asset browser.
|
||
- Automatically remove disconnected listeners from the log.
|
||
- Fixed support of custom layout panel of `ListView` widget.
|
||
- Fixed async tasks at WebAssembly target.
|
||
- Fixed property inheritance for types with interior mutability.
|
||
- 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).
|
||
- 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.
|
||
- Prevent moving a folder into its own subfolder in the asset browser.
|
||
- Fixed lightmap saving when corresponding lightmap textures were deleted.
|
||
- Sort rectangles back-to-front when rendering to prevent blending issues.
|
||
- Back-to-front sorting when rendering nodes with transparency.
|
||
- Fixed seams on skybox cubemap.
|
||
- Hide `should_be_deleted` field.
|
||
- Do not update scripts on disabled nodes.
|
||
- Fixed sound context serialization (this bug caused all sound buses to disappear on load)
|
||
- Fixed potential crash in audio bus editor.
|
||
- Fixed crash when closing the editor.
|
||
- Fixed crash `attempt to subtract with overflow` in particle systems.
|
||
- Fixed incorrect `Selection::is_empty` implementation.
|
||
- 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.
|
||
- 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.
|
||
- Fixed incorrect resource creation in resource creator.
|
||
- Fixed sluggish tiles resizing in the docking manager.
|
||
- Keep the order of interaction modes the same.
|
||
- Fixed bring-into-view for `ScrollPanel` widget - not it does not jump unpredictable.
|
||
- Do not pass keyboard input to invisible widgets.
|
||
- Handle edge cases properly when calculating curve bounds.
|
||
- Fixed "zoom to fit" functionality in the curve editor widget.
|
||
- Fixed sliding of the view in the curve editor widget on resizing.
|
||
- Fixed frustum culling flag usage.
|
||
- Fixed inspector syncing/context changing.
|
||
- Fixed crash when trying to get selected entity from empty selection.
|
||
- Fixed crash when closing scenes using `X` button on the tabs.
|
||
|
||
## Removed
|
||
|
||
- Removed `define_command_stack` macro
|
||
- Removed redundant `old_selection` arg from change selection command
|
||
|
||
# 0.33.1 Engine + 0.20.1 Editor
|
||
|
||
## Fixed
|
||
|
||
- Fixed deadlock when deep cloning a texture. Caused the editor to hang up on saving terrains (#598).
|
||
- Fixed occasional crash when undoing node creation
|
||
- Fixed highlighting for objects that were cloned
|
||
|
||
# 0.33 Engine + 0.20 Editor
|
||
|
||
## Added
|
||
|
||
- UI editor.
|
||
- Tasks system for scripts and plugins.
|
||
- Implemented dynamic font atlas.
|
||
- Batching for 2D graphics.
|
||
- Ability to move resources and folders in the Asset Browser.
|
||
- Edge highlighting for selection in the editor.
|
||
- Added an ability to create resources from asset browser.
|
||
- Added height parameter for `Text` and `TextBox` widgets.
|
||
- Ability to specify IO abstraction when loading user interface.
|
||
- `Utf32StringPropertyEditorDefinition` to edit `Vec<char>` UTF32 strings.
|
||
- `RefCellPropertyEditorDefinition` for `RefCell<T>` types.
|
||
- Enable reflection + serialization for formatted text and its instances.
|
||
- Built in font resource.
|
||
- 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.
|
||
- Show type name in world viewer for widgets.
|
||
- Ability to specify ignored types for `Reflect::apply_recursively`.
|
||
- Preview for curve and hrir resources.
|
||
- Ability to open a window at desired position.
|
||
- Ability to edit textures as UntypedResource in widgets.
|
||
- Implemented `Serialize + Deserialize + Display` traits for `ErasedHandle`.
|
||
- 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.
|
||
- 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 `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.
|
||
- Ability to scroll to the end of the content for `ScrollViewer` and `ScrollPanel` widgets.
|
||
- Ability to save and load light maps into/from a file.
|
||
- Ability to repeat clicks of a button while it is hold pressed.
|
||
- Ability to open materials for editing from the asset browser.
|
||
- Ability to filter a list of types when using reflection for fields iteration.
|
||
- Implemented `PartialOrd + Ord` traits for `Handle` type.
|
||
- Added icon in the asset browser for material resources.
|
||
- Ability to pass generics to `uuid_provider` macro.
|
||
- Ability to share navigational mesh across multiple threads.
|
||
- Implemented `Reflect` trait for `RwLock`.
|
||
- `UserInterface::find_by_name_down_from_root` method to search widgets by name.
|
||
- Implemented `Send` trait for UI entities.
|
||
- Added user interface resource.
|
||
- Collider control panel with ability to fit colliders to parent bounds.
|
||
- Property editor for vector image's primitives.
|
||
- Show warning in the log when there's script message with no subscribers.
|
||
- Implemented `TypeUuidProvider` trait for standard types.
|
||
- Ability to specify clear color in `Renderer::render_ui_to_texture`.
|
||
- Added icon in the asset browser for shader resources.
|
||
- Ability to copy widgets from UI to UI.
|
||
- Ability to create ragdolls from `Create` menu.
|
||
- Added an ability to rebind tracks in the animation editor.
|
||
- Added a set of standard materials, exposed them in the editor.
|
||
- Added placeholder texture.
|
||
- Ability to fetch resource import options from their respective loaders.
|
||
- Implemented `Visit` and `Reflect` traits for `char`.
|
||
- Ability to specify icons for assets in respective preview generators.
|
||
- `TypedResourceData` trait to be able to set correct default state of a resource.
|
||
- Implemented `ResourceData::save` for built-in engine resource types.
|
||
- Documentation for LODs.
|
||
- Color constants for the colors with names.
|
||
- Ability to save resources.
|
||
- `ResourceLoader::supports_extension` method.
|
||
- Implemented `Error` trait for `VisitError`.
|
||
- `Material::set_texture` shortcut.
|
||
- Implemented `From<&str>` trait for `ImmutableString`.
|
||
- Added normalization option for vertex attribute descriptor.
|
||
- Added experimental network abstraction layer.
|
||
- Added frustum culling for rectangle node.
|
||
- Added camera view pyramid visualization (kudos to [@dasimonde](https://github.com/dasimonde)).
|
||
- Added IO abstraction for resource system (kudos to [@jacobtread](https://github.com/jacobtread)).
|
||
- Added `Reflect`, `Debug`, `Visit` trait implementations for UI widgets.
|
||
- Added `Visit` trait implementation for `usize/isize`.
|
||
- Added `ResourceIo::move_file` method.
|
||
- Added `ResourceManager::move_resource` method with filtering.
|
||
- Added `Drop` message for `FileBrowser` with dropped path.
|
||
- Added `ResourceIo::canonicalize_path`.
|
||
- Added `Pool::generate_free_handles` methods.
|
||
- Added `InteractionMode::make_button` method that creates appropriate button for the mode.
|
||
|
||
## Changed
|
||
|
||
- Major editor refactoring to support new UI scenes.
|
||
- Moved low level animation modules into fyrox-animation crate.
|
||
- Type aliases for scene specific animation entities + preludes.
|
||
- Texture as generic parameter for sprite sheet animation.
|
||
- 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.
|
||
- Backward compatibility is preserved.
|
||
- `ResourceKind` instead of path+flag, refactored resource loader trait.
|
||
- 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<Type, _>`, just
|
||
`rm.request<Type>`.
|
||
- Registered Light Panel in floating panels, so it can be docked.
|
||
- Made searching in the asset browser smarter.
|
||
- GPU resources cache refactoring.
|
||
- Speed up access to textures.
|
||
- Automatic implementation of `ScriptTrait::id()` method. This implementation now should be removed from your
|
||
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.
|
||
- Filter out texture bytes in the property selector to improve performance.
|
||
- Enabled clicks repetition mode for scroll bar increase/decrease buttons.
|
||
- Keep the editor active if there's any captured ui element.
|
||
- 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.
|
||
- Prevented serialization of the data of external resources.
|
||
- Pass screen size to `Control::update`.
|
||
- Ability to clone user interface entirely.
|
||
- Refactored scene saving dialogs in the editor to make them more stable.
|
||
- Made `Limb::iterate_recursive` method public.
|
||
- Switch character rigid body to kinematic when a ragdoll is active.
|
||
- Keep menu items highlighted when opening a menu chain.
|
||
- Gizmo improvements for navmesh interaction mode.
|
||
- Open navmesh panel at the top right of the scene preview when selecting a navmesh scene node.
|
||
- Improved visualization in the dependency viewer.
|
||
- Made asset import options inspector generic.
|
||
- Provide access to material context in the renderer.
|
||
- Movement, scale, rotation gizmo improvements.
|
||
- Mutable access for ui nodes.
|
||
- Preload resources before generating preview for them.
|
||
- Made world viewer to accept data provider instead of scene directly.
|
||
- Replaced `Cow<Path>` 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.
|
||
- Improved navigation on navmesh using string pulling algorithm.
|
||
- Improved performance of navigation mesh queries.
|
||
- Improved text box widget performance.
|
||
- `Plane` API improvements.
|
||
- Made material editor wider a bit by default.
|
||
- Extend resource data constructor with type name.
|
||
- Turned material into resource, removed `SharedMaterial` struct.
|
||
- Serialize vertex buffer data as a bytes slab.
|
||
- Use `Window::pre_present_notify` as recommended in the `winit` docs.
|
||
- Refactored sprites rendering to use materials.
|
||
- Refactored particle system rendering to use forward renderer.
|
||
- More built-in shader variables for lighting.
|
||
- Triangle buffer API improvements.
|
||
- Use debug message callback instead of message queue for OpenGL errors.
|
||
- Enable OpenGL debugging in debug build profile.
|
||
- 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))
|
||
- Added UUIDs for scene nodes.
|
||
- Ability to set navmesh agent path recalculation threshold.
|
||
- Reset `modified` flags of inheritable variables when fixing node type.
|
||
- Check for node type mismatch on graph resolve and auto-fix this.
|
||
- Use type names instead of type ids when reporting inheritance errors.
|
||
- Remove orphaned nodes when restoring graph's integrity.
|
||
- Code example for `Inspector` widget.
|
||
- Pass node handle to surface instance data.
|
||
- Check for global `enabled` flag when filtering out cameras for rendering.
|
||
- Serialize joints binding local frames.
|
||
- 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 crash of the editor on Wayland.
|
||
- Fixed font rendering API.
|
||
- Fixed restoration of shallow resource handles of untyped resources.
|
||
- Prevent double saving of settings after modification.
|
||
- Keep aspect ratio when previewing a texture in the asset browser.
|
||
- Filter out non-savable resources in resource creation dialog.
|
||
- Fixed offscreen UI rendering in the UI editor.
|
||
- Fixed deep cloning of materials: make them embedded after cloning.
|
||
- Fixed path filters to correctly handle folders with "extensions".
|
||
- Save material when changing its shader property in the material editor.
|
||
- Fixed massive footgun with pointers to the graphics pipeline state scattered all around the renderer.
|
||
- Prevent creating of multiple thread pool across the engine.
|
||
- Fixed crash in the material editor if a material is failed to load.
|
||
- Prevent the editor from closing after saving a scene via Ctrl+S.
|
||
- Fixed position saving of maximized editor window.
|
||
- Fixed crash when assigning non-material resource in a material property.
|
||
- Fixed forward pass of standard shader for skinned meshes
|
||
- Fixed uuid formatting in visitor.
|
||
- Fixed resource extension comparison in the editor by making it case-insensitive.
|
||
- Fixed crash when drag'n'dropping assets in scene previewer.
|
||
- Fixed OpenGL error handling
|
||
- Fixed performance issues when modifying vertex/triangle buffers.
|
||
- Fixed crash when editing terrains (kudos to [@Riddhiman007](https://github.com/Riddhiman007))
|
||
- Fixed a bug when vertex attribute divisor was ignored.
|
||
- Fixed colors for log messages.
|
||
- Fixed scene loading in derived mode.
|
||
- Fixed text coloring when sending a `WidgetMessage::Foreground` to text.
|
||
- Fixed memory leaks on Linux (kudos to [@LordCocoNut](https://github.com/LordCocoNut))
|
||
- Fixed invalid GPU resource indexing bug, that caused crashes/quirks in graphics when switching scenes in the editor.
|
||
|
||
## Removed
|
||
|
||
- Removed implicit cloning when in `Reflect::into_any` impl for some types.
|
||
- Removed redundant memory allocation when fetching fields using reflection.
|
||
- Removed redundant memory allocation when iterating over fields.
|
||
- 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 `InteractionModeKind` and replaced it with uuids.
|
||
|
||
# 0.32
|
||
|
||
- Do not call `Script::on_os_event` if script is not started yet.
|
||
- Borrow instead of move in `Visitor::load_from_memory`.
|
||
- Ability to load scenes in two modes - derived and raw.
|
||
- Fixed selection issues in the animation editor.
|
||
- Fixed path fixer.
|
||
- Ability to set resource path.
|
||
- `ResourceManager::unregister` to unregister loaded resources.
|
||
- Refactored scene loading + plugin interface improvements.
|
||
- Bring currently selected node into view when clearing filter in the world viewer.
|
||
- Fixed searching in the property selector.
|
||
- Bring current selection into view in node selector when clearing filter text.
|
||
- Fixed `zoom to fit` in the curve editor when there's no keys.
|
||
- Fixed node name formatting in the animation editor's track list.
|
||
- Fixed tooltips in the inspector.
|
||
- `EditorPlugin::on_post_update` that invoked after any other update methods.
|
||
- Fixed selection syncing in node selector.
|
||
- `TreeRootMessage::ItemsChanged` to catch the moment when tree root items changes.
|
||
- 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).
|
||
- 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.
|
||
- 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.
|
||
- `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.
|
||
- Make all gizmo's X axis match the actual coordinate system's X axis.
|
||
- Fixed tooltip in asset browser to show full path without clipping.
|
||
- Fixed parallax mapping.
|
||
- Fixed binormal vector calculation.
|
||
- Added missing `tif` extension for texture loader.
|
||
- Fixed build window output in the editor.
|
||
- Added fade in/fade out for shadows, that prevents them from popping out of nowhere.
|
||
- Added scene gizmo.
|
||
- Keep frame alpha when applying lighting for transparent background rendering.
|
||
- Rewind sound sources before stopping them.
|
||
- Improved camera focusing on a scene object.
|
||
- Changed orbital camera controls: drag camera was moved to `Shift+RMB`, added configurable zoom range.
|
||
- Added orbital camera mode for editor camera (can be activated by middle mouse button).
|
||
- Use `f32` instead of `Duration` for scene sound source's playback time.
|
||
- Fixed terrain brush bounds visualization.
|
||
- Hotkeys for terrain editor.
|
||
- Use `workspace.dependencies` in the projects generated by `fyrox-template` to simplify dependency change.
|
||
- Improved editor settings handling.
|
||
- `Curve::bounds` + ability to `Zoom to fit` with delay for the curve editor.
|
||
- Property editor for `Curve` fields.
|
||
- New `fyrox-scripts` crate + flying camera controller script.
|
||
- Ability to map ui key back to winit + change key binding property editor.
|
||
- Fallback to root directory if `fyrox-template script` cant find `game/src`.
|
||
- Added debug impls for gpu texture.
|
||
- Fixed seams between terrain chunks.
|
||
- Removed obsolete examples and replaced them with [new examples](https://github.com/FyroxEngine/Fyrox-demo-projects).
|
||
- Fixed curve editor compatibility with scrolling regions.
|
||
- Fixed clipping issues in curve editor.
|
||
- Save expanded state of the scene items in the world viewer in the editor settings.
|
||
- Fixed invalid keys positioning in the curve editor when selecting them.
|
||
- Fixed box selection in the curve editor when mouse is outside.
|
||
- Focus currently selected entity when clearing filter text in animation editor.
|
||
- Fixed a bunch of potential crashes in the `CurveEditor` widget.
|
||
- Fixed HiDPI issues on WebAssembly.
|
||
- Removed hardcoded list of supported resource extensions from the editor and use ones from resource loaders.
|
||
- `Hrir` resource + async HRTF loading for HRTF sound renderer.
|
||
- Fixed texture compression.
|
||
- Do not use `glCheckError` in release builds since it has bad performance.
|
||
- Set nearest filtration for floating-point textures in the renderer (WebAssembly fix).
|
||
- Switch a resource without a loader into error state to prevent infinite loading in some cases.
|
||
- Fixed resource loading in WebAssembly.
|
||
- Do not render anything if screen size is collapsed into a point.
|
||
- Split light map generation in two steps + added async generation for the editor.
|
||
- Do not allow to create game projects with a number in beginning of its name.
|
||
- 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`.
|
||
- 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.
|
||
- Ability to specify vcs for a new project in `fyrox-template`
|
||
- Set `resolver = 2` for workspaces generated by `fyrox-template`
|
||
- Improved joints computational stability.
|
||
- `Make Unassigned` button for node handle property editor.
|
||
- Do not save invalid window attributes of the main editor window.
|
||
- Fixed joints binding.
|
||
- Joint rebinding is now optional.
|
||
- Fixed potential infinite loop when constructing quaternion from a matrix.
|
||
- Ability to set custom name to group command in the editor.
|
||
- `Ragdoll` scene node.
|
||
- 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).
|
||
- 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).
|
||
- 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<T>` will now use appropriate property editor for `T` instead of implicit usage
|
||
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.
|
||
- Take sound source gain into account when using HRTF renderer.
|
||
- Fixed visualization of bones list of a surface in the editor.
|
||
- Reduced HRTF sound renderer latency.
|
||
- Fixed animation events collection for blend-by-index ABSM nodes.
|
||
- Improved ABSM events collection API.
|
||
- Ability to fetch animation events from ABSM layers.
|
||
- 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.
|
||
- Update only currently active scene in the editor.
|
||
- 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 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.
|
||
- Fixed potential panic on invalid handles of `Rapier` entities when fetching contacts.
|
||
- Ability to close tabs in `TabControl` widget using middle mouse button.
|
||
- Visualize directional lights as arrows in the editor.
|
||
- Ability to draw arrows in scene debug drawing context.
|
||
- Migrated to `winit 0.29`.
|
||
- 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.
|
||
- 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))
|
||
- 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`.
|
||
- 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.
|
||
- Major book improvements.
|
||
|
||
# 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
|
||
- Updated deps
|
||
- Expose all editor fields so they can be accessible outside
|
||
- Docs for `UuidEditor` widget
|
||
- Use user_data field of physics entities to store handle to engine entity
|
||
- Ability to encode/decode handles to/from u128
|
||
- Ability to fetch all contact pairs from 2d/3d physics worlds
|
||
- Docs for `MessageBox` widget
|
||
- `Graph::aabb_of_descendants`
|
||
- Aabb api improvements
|
||
- Ability to open asset of a node from the world viewer
|
||
- Improved `impl_component_provider` macro to accept `field.foo.ab` chains
|
||
- Docs for navmesh node
|
||
- Useful shortcuts for behaviour trees
|
||
- Fixed standard materials for new serialization format
|
||
- Inverter node for behaviour trees
|
||
- Docs and examples for `VertexBuffer`
|
||
- Added `VertexTrait` to prevent using a vertex type with different layout
|
||
- Improved `surface` mod docs
|
||
- Added `elapsed_time` in `PluginContext`
|
||
- Use all texture channels in sprite fragment shader
|
||
- Load editor's docking manager layout on reconfiguration
|
||
- Open window of a tile when restoring docking manager layout
|
||
- Ability to save/load editor's docking manager layout
|
||
- Prevent panic in ui search methods
|
||
- Ability to apply saved docking manager layout + improved layout saving
|
||
- Ability to save docking manager layout
|
||
- Changed error to warning when unable to load missing options file
|
||
- 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
|
||
- Ability to add and remove tabs in the `TabControl` widget via messages
|
||
- Added a nine patch widget
|
||
- Fixed tab control's content alignment
|
||
- `can_be_closed` flag for `TabControl` tabs
|
||
- Ability to close tabs in `TabControl` widget
|
||
- Docs for `TabControl` widget
|
||
- Ability to catch the moment when the active tab of `TabControl` changed
|
||
- Docs for `ScrollBar` widget
|
||
- Docs for `Popup` widget
|
||
- Docs for `NumericUpDown` widget
|
||
- Ability to change `StackPanel`'s orientation via message
|
||
- Ability to change `WrapPanel`'s orientation via message
|
||
- Docs for `WrapPanel` widget
|
||
- Docs for `CheckBox` widget
|
||
- Docs for `Widget`
|
||
- Docs for `TextBox` widget
|
||
- Docs for `StackPanel` widget
|
||
- Docs for `Grid` widget
|
||
- Docs for `Image` widget
|
||
- Docs for `Text` widget
|
||
- Fyrox-ui docs
|
||
- Docs for `Button` widget
|
||
- Access to current transform of `TransformStack`
|
||
- Docs for `Border`
|
||
- Ability to pass doc comments in `define_constructor` macro
|
||
- Docs for `BuildContext`
|
||
- Docs for `UiNode`
|
||
- Iterative font atlas packing.
|
||
- Docs for `Thickness`
|
||
- Docs for widget alignments
|
||
- Docs for `BaseControl`
|
||
- Update hierarchical data when instantiating a prefab
|
||
- Docs for `trait Control`
|
||
- Hotkey to focus editor's camera on a selected object
|
||
- Helper methods for `Frustum`
|
||
- Ability to focus editor's camera on an object
|
||
- Helper methods for `TextureKind`
|
||
- Camera fitting functionality
|
||
- Aabb helper methods
|
||
- Save editor settings only if they were modified by user
|
||
- `Camera::frustum`
|
||
- Fixed camera preview + added camera preview control panel
|
||
- Automatically select newly created scene nodes in the editor
|
||
|
||
# 0.30
|
||
|
||
- Ability to change graph root to arbitrary graph node.
|
||
- Ability to change graph root in the editor.
|
||
- Optional checkerboard background for `Image` widget.
|
||
- Simplified animation blending.
|
||
- Mutable access to curve key's value.
|
||
- Added property validation for the animation editor.
|
||
- Track validation for the animation editor.
|
||
- Ability to set widget's tooltip via message.
|
||
- Correctly sync track names in the animation editor.
|
||
- Ability to change target nodes on animation tracks.
|
||
- Preserve parent when extracting a sub-graph from a graph.
|
||
- Refactored editor scene structure to allow modifying the root node.
|
||
- Play sound buffer resource when inspecting it in the asset browser.
|
||
- Show textured quad in resources previewer when inspecting a texture.
|
||
- Configurable scroll speed for `ScrollViewer` widget + speed up scrolling 2x.
|
||
- 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.
|
||
- 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.
|
||
- Optional ability to save current scene in text form for debugging.
|
||
- Do not render disabled sprite nodes.
|
||
- Fixed property inheritance subtle bugs.
|
||
- Do not allow revering a property value in the editor if there's no parent.
|
||
- Do not save content of non-modified inheritable variables.
|
||
- Fixed directional light docs.
|
||
- Fixed `Node::is_x,as_x,as_x_mut` methods.
|
||
- `Graph::try_get_script_of + try_get_script_of_mut` methods
|
||
- `Base::root_resource` - allows you to find root resource in dependency graph.
|
||
- Prevent deadlock on self-referencing model resources
|
||
- UUID for widgets.
|
||
- Save editor's window position and size into editor's settings.
|
||
- Apply local scaling of terrain to heightfield collider.
|
||
- `MachineLayer::is_all_animations_of_state_ended`
|
||
- Ability to fetch all animations of a state in ABSM layer.
|
||
- 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.
|
||
- Pre-compile built-in shaders on engine startup.
|
||
- Ability to change camera zoom speed in the editor.
|
||
- `Plugin::before_rendering`
|
||
- Matrix storage cache to prevent driver synchronization steps.
|
||
- Persistent identifiers for render entities.
|
||
- Improved deserialization performance.
|
||
- 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.
|
||
- 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.
|
||
- Dependency graph visualizer for asset browser.
|
||
- Resource dependency graph.
|
||
- Ability to flatten terrain slopes.
|
||
- Return local height value at intersection point in ray-terrain test.
|
||
- Cleaned editor's command API.
|
||
- Removed visibility cache.
|
||
- Ability to index graph with `Handle<T: NodeTrait>`
|
||
- `Handle::transmute`
|
||
- Doc comments support for reflection.
|
||
- Show doc comments for selected entity in a separate window.
|
||
- Moved logger to `fyrox_core`.
|
||
- Resource system refactoring to support user-defined resources.
|
||
- Blackboard for visitor to pass arbitrary data when serializing/deserializing.
|
||
- Added missing recalculation of terrain bounding box.
|
||
- `Texture::deep_clone`
|
||
- `Log::verify_message`
|
||
- `R32F` + `R16F` texture formats.
|
||
- `data_of_type` methods to reinterpret inner texture data storage to a particular type.
|
||
- Debug drawing for scene nodes.
|
||
- Configurable polygon rasterization mode for scenes (gbuffer only).
|
||
- 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.
|
||
- 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.
|
||
- Limits for collider shape values.
|
||
- Added doc example for `Graph::begin_multi_borrow`.
|
||
- Fixed samplers type collision when rendering with materials with different sampler types.
|
||
- Unbind texture from other samplers when setting it to a new one.
|
||
- 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.
|
||
- Fixed texture alignment issues.
|
||
- Use correct sampler index when changing texture data.
|
||
- Set new mip count for texture when changing its data.
|
||
- Fixed texture binding bug.
|
||
- Warning instead of panic when there's not enough space for bone matrices.
|
||
- Rename `visitor::Node` to `visitor::VisitorNode` to prevent confusing import in IDEs.
|
||
- `InheritableVariable::take`
|
||
- Ability to change size of terrain height map and layer masks.
|
||
- Ability to add chunks from any side of the terrain.
|
||
- Fixed crash when deleting a navmesh edge.
|
||
- Improved package description.
|
||
- Make navmesh panel floating by default + open it when a navmesh is selected.
|
||
- Navigational mesh refactoring.
|
||
- Navigational mesh scene node.
|
||
- Pass light intensity into lightmapper.
|
||
- "Headless" mode for `Executor` - suitable for server-side of multiplayer games.
|
||
- Added editor's window icon.
|
||
- Blend shape support.
|
||
- Changed sidebar to be inspector in the view dropdown menu.
|
||
- Tweaked step values for transform properties.
|
||
- Limits for vec editor.
|
||
- Generic `Vector<T,N>` property editor.
|
||
- 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.
|
||
- Fixed multiple lightmapping issues.
|
||
- Fixed incorrect `sRGB` conversion for WASM.
|
||
- Android support.
|
||
- Ability to run the engine without graphics/window/sound by making these parts optional.
|
||
- Update to latest `winit` + `glutin`.
|
||
- Ability to change value in `NumericUpDown` widget by dragging
|
||
- Removed "Scene Graph" item from world viewer + made breadcrumbs much more compact.
|
||
- Put interaction mode panel on top of scene previewer.
|
||
- Added ability to search assets in the asset browser.
|
||
- `SearchBar` widget.
|
||
- Ability to hide path text box in file browser widget.
|
||
- Hide path field in the asset browser.
|
||
- Tooltip for asset items in the asset browser that shows full asset path.
|
||
- Improved simple tooltip style.
|
||
- Optional ability to suppress closing menus by clicking on non-empty menu.
|
||
- Added `No Scene` reminder in the editor and how to create/load a scene.
|
||
- Editor UI style improvements.
|
||
- `DrawingContext::push_arc+push_rounded_rect`
|
||
- Ability to enable/disable debug geometry for camera/light sources.
|
||
- Show indices of input sockets of ABSM nodes.
|
||
- Keep animations enabled on import.
|
||
- 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.
|
||
- Ability to reimport animations in the animation editor.
|
||
- New example: render to texture.
|
||
- Audio bus graph.
|
||
- Root motion support.
|
||
- Audio panel rework to support audio bus graphs.
|
||
- Sound effect API improvements.
|
||
- Keep recent files list sorted and up-to-date.
|
||
- Fixed incorrect sound panning in HRTF mode.
|
||
- Ability to get unique material instances when cloning a surface.
|
||
- 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
|
||
- 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.
|
||
- Ability to set pre-generated particles in particle systems.
|
||
- Provided access to standard shader names.
|
||
- Print texture resource name when failed to create its GPU version.
|
||
- Rebuild terrain's geometry on deserialization.
|
||
- Automatic, reflection-based resource handle mapping.
|
||
- Ability to ignore some type when doing property inheritance.
|
||
- Support for hash maps in the property selector.
|
||
- Expose material fields via reflection.
|
||
- Keep flags of `ScrollBarMessage` when responding to value message.
|
||
- Delegating implementation of `Debug` trait for `ImmutableString`.
|
||
- Added reflection for hash maps.
|
||
- Reflection system refactoring to support types with interior mutability (`Mutex`, `RefCell`, etc.)
|
||
- Ability to rewind particle systems to a particular time.
|
||
- Determinism for particle systems.
|
||
- Fixed preview mode for particle systems.
|
||
- Ability to "rewind" particle systems in particle system control panel.
|
||
- Fixed `ParticleSystem::clear_particles` for emitters that does not resurrect their particles.
|
||
- Fixed potential panic in formatted text on missing glyphs.
|
||
- Supply `PluginContext` with performance statistics for the previous frame.
|
||
- Property editor for `ColorGradient`s.
|
||
- Simplified `color_over_lifetime` field in particle systems.
|
||
- Improved color gradient API.
|
||
- 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`.
|
||
- Fixed incorrect handling of user-defined forces of rigid bodies. A body was pushed continuously using
|
||
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>, &Node)>` now, that removes another
|
||
borrow if there's a need to borrow it at a call site.
|
||
|
||
# 0.29
|
||
|
||
- Animation system rework.
|
||
- Animation Editor.
|
||
- Animation Blending State Machine Editor.
|
||
- Fixed potential crash when joint was initialized earlier than connected rigid bodies.
|
||
- Model instantiation scaling now used for prefab preview.
|
||
- Fixed lots of potential sources of panic in perspective and ortho projections.
|
||
- Fixed editor's camera movement speed setting for 3D mode.
|
||
- Standard "two-side" shader - useful for foliage and grass.
|
||
- Sprite sheet editor
|
||
- Support for `Vector(2/3/4)<f32/f64/u8/i8/u16/i16/u32/i32/u64/i64>` types in serializer.
|
||
- Sprite sheet animation now uses frames coordinates instead of explicit uv rectangles for each frame.
|
||
- 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.
|
||
- 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
|
||
- Replace `Arc<Mutex<Material>>` with `SharedMaterial` new-type.
|
||
- Ability to assign a unique copy of a material to an object.
|
||
- Replace `Arc<Mutex<Material>>` with `SurfaceSharedData`
|
||
- Clear collections before deserialization
|
||
- Property inheritance for collections
|
||
- Fixed incorrect material replacement when loading a scene with an FBX with custom materials.
|
||
- Added Blender material slots names in FBX loader
|
||
- 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
|
||
- 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.
|
||
- 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.
|
||
- 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`
|
||
- `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`
|
||
- Send curve when adding new keys in the `CurveEditor` widget
|
||
- 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
|
||
- Non-blocking resource waiting before processing scene scripts
|
||
- Added missing property editor for sound status
|
||
- Sync sound buffer first, then playback position
|
||
- Property editor for `Machine` type.
|
||
- 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))
|
||
- 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
|
||
- Prevent panic when trying to iterate over pool items using reflection
|
||
- Split `Model::retarget_animations` in two separate methods
|
||
- Smart movement move for move gizmo (kudos to [@Zoltan Haindrich](https://github.com/kgyrtkirk))
|
||
- `Reflect::set_field_by_path`
|
||
- 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
|
||
- `Animation::pop_signal`
|
||
- Refactored animation blending state machine to support animation layers
|
||
- `Visit` impl for `HashSet`
|
||
- Ability to set layer mask in the absm editor
|
||
- Added animation system documentation.
|
||
- `Graph::try_get_of_type+try_get_mut_of_type`
|
||
- Rename `InheritableVariable` methods to remove ambiguity
|
||
- `Model::retarget_animations_to_player`
|
||
- 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
|
||
- `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))
|
||
- Check for reserved names in `fyrox-template` (kudos to [@TheEggShark](https://github.com/TheEggShark))
|
||
- Ability to enable/disable scene nodes
|
||
- Basic support for headless mode for server part of games (kudos to [@martin-t](https://github.com/martin-t))
|
||
- Removed `Scene::remove_node`
|
||
- Rename `NodeTrait::clean_up` -> `NodeTrait::on_removed_from_graph`
|
||
- Fixed colorization in the world viewer
|
||
- Ability to disable steps of update pipeline of the graph
|
||
- Preview mode for animation player, animation blending state machine, particle system nodes.
|
||
- Rename colliding `ParticleSystem::set_enabled` method to `play`
|
||
- Particle system preview control panel
|
||
- 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
|
||
- Ability to maximize ui windows
|
||
- `Animation::take_events`
|
||
- `Reflect::type_name`
|
||
- Show type name of selected object in the inspector
|
||
- Fixed multiple nodes parenting in the world viewer
|
||
- Apply grid snapping when instantiating a prefab
|
||
- Added range selection for tree widget (Shift + Click)
|
||
- Docking manager now collapses tiles when closing a docked window
|
||
- Improved search bar style in the world viewer
|
||
- Improved breadcrumbs in the world viewer
|
||
- `HotKey` + `KeyBinding` + respective property editors
|
||
- Ability to change editor controls.
|
||
|
||
# 0.28
|
||
|
||
- Preview for prefab instantiation.
|
||
- 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.
|
||
- 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.
|
||
- 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.
|
||
- Show node handle in breadcrumbs in the editor.
|
||
- Provide direct read-only access to current dragging context in UI.
|
||
- Fixed crash when trying to select a node by invalid handle in the editor.
|
||
- Highlight invalid handles in the Inspector.
|
||
- 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.
|
||
- 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).
|
||
- 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.
|
||
- 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)
|
||
- 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`)
|
||
- Fixed crash when modifying text in a text box via message and then trying to type something.
|
||
- `ButtonBuilder::with_text_and_font`
|
||
- Show node names in for fields of `Handle<Node>` fields of structs in the editor.
|
||
- 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.
|
||
- Pass elapsed time to scripts.
|
||
- Do not call `ScriptTrait::on_os_event` if scene is disabled.
|
||
- Make world viewer filtering case-insensitive.
|
||
- Correctly set self handle and sender for graph's root node.
|
||
- `#[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.
|
||
- 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.
|
||
- Removed requirement of scripts api to provide parent plugin's uuid.
|
||
- There is no more need to define uuid for plugins.
|
||
- Do not update scene scripts if it is disabled.
|
||
- `Graph::find_first_by_script` - helps you find a node by its script type.
|
||
- Added missing property editors for `Inspector` widget.
|
||
- Save editor's scene camera settings (position, orientation, zoom, etc.) per scene.
|
||
- Skip-chars list to be able to treat some chars like white space.
|
||
- Optional text shadow effect.
|
||
- Ctrl+Shift+Arrow to select text word-by-word in text box widget.
|
||
- Added navmesh settings to editor's settings panel.
|
||
- 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.
|
||
- 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.
|
||
- Fixed crash when typing spaces at the end of text box with word wrap.
|
||
- Fixed caret position when adding text to the multiline text box widget.
|
||
- Fixed new line addition in the text box widget.
|
||
- Ability to select words (or whitespace spans) in the text box by double click.
|
||
- Emit double click after mouse down event (not before).
|
||
- Fixed caret blinking in the text box widget for various scenarios.
|
||
- Ctrl+LeftArrow and Ctrl+RightArrow to skip words in the text box widget.
|
||
- Allow setting caret position in the text box widget by clicking outside of line bounds.
|
||
- `raycast2d` example.
|
||
- Fixed text deletion in text box by `Delete` key + selection fixes.
|
||
- Fixed selection by Ctrl+Home, Ctrl+End in the text box widget.
|
||
- Fixed selected text highlighting in the text box widget.
|
||
- Fixed panic when Ctrl+C in a text box when selection is right-to-left.
|
||
- Ability to focus/unfocus a widget by sending a message.
|
||
- Added `TextBox` example.
|
||
- Removed `is_modified` flag from `PropertyInfo`.
|
||
- Ability to revert inherited property to parent's prefab value.
|
||
- Replaced manual property inheritance with reflection.
|
||
- Added `fields` and `fields_mut` for `Reflect` trait.
|
||
- Property inheritance for scripts.
|
||
- Ability to extract selection as a prefab.
|
||
- Fixed tooltips for complex properties in `Inspector` widget.
|
||
- 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.
|
||
- 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`)
|
||
- Fixed style for ArrayPropertyEditor widget.
|
||
- Do not emit events for disabled animation signals.
|
||
- Sprite sheet animations with signals.
|
||
- Fixed terrain rendering - there's no more seams between layers with skybox content.
|
||
- Ability to set blending equation in draw parameters in the renderer.
|
||
- Ability to set blend function separately for RGB and Alpha in the renderer.
|
||
- Ignore invisible menus when closing menu chain by out-of-bounds click.
|
||
- Make some buttons in the editor smaller and less bright, add more tooltips.
|
||
- Use images for `Expand all`, `Collapse all`, `Locate Selection` buttons in world viewer.
|
||
- 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.
|
||
- Fixed cascaded shadow maps for directional lights.
|
||
- Added `Frustum::center` method.
|
||
- Fixed list of panels in `View` menu in the editor.
|
||
- Create tool tips for interaction modes hidden by default.
|
||
- Reload settings when reconfiguring the editor.
|
||
- 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
|
||
- 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.
|
||
|
||
# 0.27.1
|
||
|
||
- Fixed `Operation failed! Reason: Modify { value: dyn Reflect }` error.
|
||
- Fixed inability to edit properties of 2d collider shape
|
||
- Fixed inability to edit some properties of Joint2D.
|
||
- Added property editor for `Color Grading Lut` property of the Camera node.
|
||
- Fixed panic when editing cascades properties of directional light.
|
||
- Prevent panic when there's invalid bone handle.
|
||
- Hide `data` field from inspector for Surface, because it has no proper property editor.
|
||
- Fixed terrain layer deletion from the Inspector.
|
||
|
||
# 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.
|
||
- Backward compatibility for native engine data formats was dropped - use FyroxEd 0.13 to convert your scenes to newer
|
||
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).
|
||
- 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.
|
||
- Ability to define "playable" time slice for animations.
|
||
- Fixed editor update rate, previously it was very high and that caused some weird issues.
|
||
- Proper support for all resource types in Inspector
|
||
- Show ABSM resources in the asset browser
|
||
- Ability to edit sound import options in the asset browser
|
||
- Dynamic type casting for script instances
|
||
- Provide access to parameters in ABSM
|
||
- Fixed transition instantiation in ABSM - it incorrectly handled "invert rule" flag.
|
||
- 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.
|
||
- Wait for all resources to load before initialize scripts - this prevents panicking when trying to access
|
||
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.
|
||
- `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.
|
||
- Correctly handle missing properties in Inspector for various objects.
|
||
- Provide access to main application window from plugins.
|
||
- Allow chaining `ScriptConstructorContainer::add` calls
|
||
- Removed `screen_size` parameter from `UserInterface::new`
|
||
- Ability to remove render passes.
|
||
- Run the game in a separate process from the editor.
|
||
- Provide access to default engine's user interface instance for plugins.
|
||
- `--override-scene` parameter for Executor
|
||
- `ButtonContent` improvements - it is now possible to re-create button's text field using `ButtonMessage::Content`
|
||
- 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.
|
||
- `Framework` is removed, its functionality was merged with plugins.
|
||
- Simplified `ScriptConstructorContainer::add` definition, there were redundant generic parameters that just add
|
||
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
|
||
- 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
|
||
- BitField widget - it helps you to edit numbers as bit containers, allowing you to switch separate bits
|
||
- More compact editors for properties in Inspector
|
||
- 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`
|
||
- Ability to select portion of the texture to render in `Rectangle` nodes.
|
||
- Ability to generate script skeleton for template generator
|
||
- HSL color model
|
||
- Ability to copy log enties to the clipboard
|
||
- `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.
|
||
- Visualize point and spot lights in the editor.
|
||
|
||
# 0.26
|
||
|
||
This release is mostly to fix critical bugs of 0.25 and add missing functionality that stops you from using scripting
|
||
system.
|
||
|
||
- Added project template generator
|
||
- Fixed invisible selected item in drop-down list widget.
|
||
- Correctly sync node names in `World Viewer`
|
||
- Reset editor's camera projection mode switch when creating new scene
|
||
- Fixed doubling scene entities in `World Viewer` when loading scene via `StartupData`
|
||
- More logging for renderer
|
||
- Fixed shader cache - now the engine won't re-compile shaders each 20 seconds.
|
||
- 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
|
||
- Fixed panic when syncing `Inspector` for an entity with `Option<Texture>` field.
|
||
- 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
|
||
|
||
## Migration guide
|
||
|
||
There are no breaking changes in this release.
|
||
|
||
# 0.25
|
||
|
||
- Static plugin system
|
||
- User-defined scripts
|
||
- Play mode for the editor
|
||
- Animation Blending State Machine (ABSM) editor.
|
||
- Some of sound entities were integrated in the scene graph.
|
||
- New `Sound` and `Listener` scene nodes.
|
||
- Sound buffer import options.
|
||
- `ResourceManager::request_sound_buffer` now accepts only path to sound buffer.
|
||
- 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.
|
||
- `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.
|
||
- 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.
|
||
- 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.
|
||
- ScrollBar widget is much thinner by default.
|
||
- Editor settings window now based on Inspector widget, which provides uniform way of data visualization.
|
||
- `DEFAULT_FONT` singleton was removed, it is replaced with `default_font`
|
||
- Shortcuts improvements in the editor.
|
||
- Overall UI performance improvements.
|
||
- Ability to disable clipping of widget bounds to parent bounds.
|
||
- Layout and render transform support for widgets - allows you to scale/rotate/translate widgets.
|
||
- Ability to make widget lowermost in hierarchy.
|
||
- Animation blending state machine refactoring, optimizations and stability improvements.
|
||
- Animation blending state machines are now stored in special container which stored in the Scene.
|
||
- Docking manager now shows anchors only for its windows.
|
||
- Model previewer now has much more intuitive controls.
|
||
- 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.
|
||
- WASM renderer fixes.
|
||
- `Pool::try_free` which returns `Option<T>` on invalid handles, instead of panicking.
|
||
- Light source for model previewer
|
||
- Default skybox for editor and model previewer cameras
|
||
- `Color` API improvements.
|
||
- `#[reflect(expand)]` and `#[reflect(expand_subtree)]` were removed from `Inspect` proc-macro
|
||
- Correct field name generation for enum variants
|
||
- Ability to draw Bézier curves in the UI.
|
||
- Fix for navmesh agent navigation of multilayer navigational meshes.
|
||
- Improvements for serializer, now it allows you correctly recover from serialization errors.
|
||
|
||
## Migration guide
|
||
|
||
**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).
|
||
|
||
### Nodes
|
||
|
||
Since `Node` enumeration was removed, there is a new way of managing nodes:
|
||
|
||
- `Node` now is just `Box<dyn NodeTrait>` 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<Target = Base>/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.
|
||
|
||
#### Replacing `BaseBuilder` with `PivotBuilder`
|
||
|
||
It is very simply, just wrap `BaseBuilder` with a `PivotBuilder` and call `build` on `PivotBuilder` instance:
|
||
|
||
```rust
|
||
// Before
|
||
fn create_pivot_node(graph: &mut Graph) -> Handle<Node> {
|
||
BaseBuilder::new().build(graph)
|
||
}
|
||
|
||
// After
|
||
fn create_pivot_node(graph: &mut Graph) -> Handle<Node> {
|
||
PivotBuilder::new(BaseBuilder::new()).build(graph)
|
||
}
|
||
```
|
||
|
||
#### Pattern matching replacement
|
||
|
||
Pattern matching was replaced with 4 new methods `cast/cast_mut/query_component_ref/query_component_mut`:
|
||
|
||
```rust
|
||
fn set_sprite_color(node: &mut Node, color: Color) {
|
||
// Use `cast_mut` when you are sure about the real node type.
|
||
if let Some(sprite) = node.cast_mut::<Sprite>() {
|
||
sprite.set_color(color);
|
||
}
|
||
}
|
||
|
||
fn set_light_color(node: &mut Node, color: Color) {
|
||
// Use query_component_mut if you unsure what is the exact type of the node.
|
||
// In this example the `node` could be either PointLight, SpotLight, DirectionalLight,
|
||
// since they're all provide access to `BaseLight` via `query_component_x` the function
|
||
// will work with any of those types.
|
||
if let Some(base_light) = node.query_component_mut::<BaseLight>() {
|
||
base_light.set_color(color);
|
||
}
|
||
}
|
||
```
|
||
|
||
### Listener
|
||
|
||
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
|
||
order is undefined) will be used to output sound.
|
||
|
||
### Sound sources
|
||
|
||
There is no more 2D/3D separation between sounds, all sounds in 3D by default. Every sound source now is
|
||
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(),
|
||
),
|
||
)
|
||
.with_buffer(buffer.into())
|
||
.with_status(Status::Playing)
|
||
.with_play_once(true)
|
||
.with_gain(gain)
|
||
.with_radius(radius)
|
||
.with_rolloff_factor(rolloff_factor)
|
||
.build(graph);
|
||
```
|
||
|
||
Its API mimics `fyrox_sound` API so there should be now troubles in migration.
|
||
|
||
### Effects
|
||
|
||
Effects got a thin wrapper around `fyrox_sound` to make them compatible with `Sound` scene nodes, a reverb
|
||
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);
|
||
```
|
||
|
||
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,
|
||
});
|
||
```
|
||
|
||
### Filters
|
||
|
||
Effect input filters API remain unchanged.
|
||
|
||
### Engine initialization
|
||
|
||
`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
|
||
a set of constructors for various types that may be used in the engine and be added by external plugins.
|
||
Typical engine initialization could look something like this:
|
||
|
||
```rust
|
||
use fyrox::engine::{Engine, EngineInitParams};
|
||
use fyrox::window::WindowBuilder;
|
||
use fyrox::engine::resource_manager::ResourceManager;
|
||
use fyrox::event_loop::EventLoop;
|
||
use std::sync::Arc;
|
||
use fyrox::engine::SerializationContext;
|
||
|
||
fn init_engine() {
|
||
let evt = EventLoop::new();
|
||
let window_builder = WindowBuilder::new()
|
||
.with_title("Test")
|
||
.with_fullscreen(None);
|
||
let serialization_context = Arc::new(SerializationContext::new());
|
||
let mut engine = Engine::new(EngineInitParams {
|
||
window_builder,
|
||
resource_manager: ResourceManager::new(serialization_context.clone()),
|
||
serialization_context,
|
||
events_loop: &evt,
|
||
vsync: false,
|
||
})
|
||
.unwrap();
|
||
}
|
||
```
|
||
|
||
## Serialization
|
||
|
||
Engine and ResourceManager both are non-serializable anymore. It changes approach of creating save files in games.
|
||
Previously you used something like this (following code snippets are modified versions of `save_load` example):
|
||
|
||
```rust
|
||
const SAVE_FILE: &str = "save.bin";
|
||
|
||
fn save(game: &mut Game) {
|
||
let mut visitor = Visitor::new();
|
||
|
||
game.engine.visit("Engine", visitor)?; // This no longer works
|
||
game.game_scene.visit("GameScene", visitor)?;
|
||
|
||
visitor.save_binary(Path::new(SAVE_FILE)).unwrap();
|
||
}
|
||
|
||
fn load(game: &mut Game) {
|
||
if Path::new(SAVE_FILE).exists() {
|
||
if let Some(game_scene) = game.game_scene.take() {
|
||
game.engine.scenes.remove(game_scene.scene);
|
||
}
|
||
|
||
let mut visitor = block_on(Visitor::load_binary(SAVE_FILE)).unwrap();
|
||
|
||
game.engine.visit("Engine", visitor)?; // This no longer works
|
||
game.game_scene.visit("GameScene", visitor)?;
|
||
}
|
||
}
|
||
```
|
||
|
||
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
|
||
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.
|
||
|
||
The new approach is much more flexible and do not have such issues, instead of saving the entire state of the
|
||
engine, you just save and load only what you actually need:
|
||
|
||
```rust
|
||
const SAVE_FILE: &str = "save.bin";
|
||
|
||
fn save(game: &mut Game) {
|
||
if let Some(game_scene) = game.game_scene.as_mut() {
|
||
let mut visitor = Visitor::new();
|
||
|
||
// Serialize game scene first.
|
||
game.engine.scenes[game_scene.scene]
|
||
.save("Scene", &mut visitor)
|
||
.unwrap();
|
||
// Then serialize the game scene.
|
||
game_scene.visit("GameScene", &mut visitor).unwrap();
|
||
|
||
// And call save method to write everything to disk.
|
||
visitor.save_binary(Path::new(SAVE_FILE)).unwrap();
|
||
}
|
||
}
|
||
|
||
// Notice that load is now async.
|
||
async fn load(game: &mut Game) {
|
||
// Try to load saved game.
|
||
if Path::new(SAVE_FILE).exists() {
|
||
// Remove current scene first.
|
||
if let Some(game_scene) = game.game_scene.take() {
|
||
game.engine.scenes.remove(game_scene.scene);
|
||
}
|
||
|
||
let mut visitor = Visitor::load_binary(SAVE_FILE).await.unwrap();
|
||
|
||
let scene = SceneLoader::load("Scene", &mut visitor)
|
||
.unwrap()
|
||
.finish(game.engine.resource_manager.clone())
|
||
.await;
|
||
|
||
let mut game_scene = GameScene::default();
|
||
game_scene.visit("GameScene", &mut visitor).unwrap();
|
||
|
||
game_scene.scene = game.engine.scenes.add(scene);
|
||
game.game_scene = Some(game_scene);
|
||
}
|
||
}
|
||
```
|
||
|
||
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
|
||
flexible.
|
||
|
||
# 0.24
|
||
|
||
## Engine
|
||
|
||
- 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.
|
||
- 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).
|
||
- 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
|
||
- fyrox-sound optimizations (30% faster)
|
||
- Linear interpolation for sound samples when sampling rate != 1.0 (much better quality than before)
|
||
- Color fields in material editor now editable
|
||
- Window client area is now correctly filled by the renderer on every OS, not just Windows.
|
||
- NumericRange removal (replaced with standard Range + extension trait)
|
||
- Sort files and directories in FileBrowser/FileSelector widgets
|
||
- RawStreaming data source for sound
|
||
- Renderer performance improvements (2.5x times faster)
|
||
- UI layout performance improvements
|
||
- Prevent renderer from eating gigabytes of RAM
|
||
- Use `#[inline]` attribute to enable cross-crate inlining
|
||
- `ImmutableString` for faster hashing of static strings
|
||
- `SparseBuffer` as a lightweight analog for `Pool` (non-generational version)
|
||
- Support diffuse color in FBX materials
|
||
- Frustum culling fixes for terrain
|
||
- Shaders don't print empty lines when compiles successfully.
|
||
- `Pool` improvements
|
||
- Impl `IntoIterator` for references to `Pool`
|
||
- Cascaded shadow maps for directional light sources
|
||
- `spawn_at` + `spawn_at_handle` for `Pool`
|
||
- Preview for drag'n'drop
|
||
- `Grid` widget layout performance optimizations (**1000x** performance improvement - this is not a typo)
|
||
- `query_component` for UI widgets
|
||
- Curve resource
|
||
- Remove all associated widgets of a widget when deleting the widget (do not leave dangling objects)
|
||
- World bounding box calculation fix
|
||
- Heavy usage of invalidation in UI routines (prevents checking tons of widgets every frame)
|
||
- Migrate to `parking-lot` synchronization primitives
|
||
- Migrate to `FxHash` (faster hashing)
|
||
- `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)
|
||
- Smart position selection for popups (prevents them from appearing outside screen bounds)
|
||
- High-quality mip-map generation using Lanczos filter.
|
||
|
||
## Editor
|
||
|
||
- `Inspector` widget integration, which allowed to remove tons of boilerplate code
|
||
- Middle mouse button camera dragging
|
||
- Q/E + Space to move camera up/down
|
||
- Working directory message is much less confusing now
|
||
- Ability to edit sound sources in the editor
|
||
- Checkerboard colorization fix in the world viewer
|
||
- Search in the world viewer
|
||
- Floating brush panel for terrain editor
|
||
- Editor camera has manual exposure (not affected by auto-exposure)
|
||
- Curve editor
|
||
- Automatically select an newly created instance of a scene node
|
||
- Grid snapping fix
|
||
- Angle snapping
|
||
- Edit properties of multiple selected objects at once.
|
||
- Context menu for scene items in world viewer
|
||
- `Create child` for scene item context menu
|
||
- Import options editor for asset browser
|
||
- Hot reload for textures.
|
||
|
||
## Breaking changes and migration guide
|
||
|
||
There are lots of breaking changes in this version, however all of them mostly related to the code and scenes made in
|
||
previous version _should_ still be loadable.
|
||
|
||
### Convert old scenes to new format
|
||
|
||
At first, install the rusty-editor from crates.io and run it:
|
||
|
||
```shell
|
||
cargo install rusty-editor
|
||
rusty-editor
|
||
```
|
||
|
||
And then just re-save your scenes one-by-one. After this all your scenes will be converted to the newest version.
|
||
Keep in mind that the editor from GitHub repo (0.25+) is not longer have backward compatibility/conversion code!
|
||
|
||
### 2D scenes
|
||
|
||
2D scene were completely removed and almost every 2D node were removed, there is only one "2D" node left - Rectangle.
|
||
2D now implemented in 3D scenes, you have to use orthographic camera for that. There is no migration guide for 2D scenes
|
||
because 2D had rudimentary support, and I highly doubt that there is any project that uses 2D of the engine.
|
||
|
||
## Resource management
|
||
|
||
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
|
||
`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):
|
||
|
||
```text
|
||
(
|
||
minification_filter: LinearMipMapLinear,
|
||
magnification_filter: Linear,
|
||
s_wrap_mode: Repeat,
|
||
t_wrap_mode: Repeat,
|
||
anisotropy: 16,
|
||
compression: NoCompression,
|
||
)
|
||
```
|
||
|
||
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
|
||
`set_texture_import_options`.
|
||
|
||
`request_model` have the same changes, there is only one argument and import options were moved to options file:
|
||
|
||
```text
|
||
(
|
||
material_search_options: RecursiveUp
|
||
)
|
||
```
|
||
|
||
Again, all fields aren't mandatory and the entire file can be omitted, global import defaults can be set by calling
|
||
`set_model_import_options`.
|
||
|
||
### Physics
|
||
|
||
Old physics was replaced with new scene nodes: RigidBody, Collider, Joint. Old scenes will be automatically converted
|
||
on load, you should convert your scenes as soon as possible using the editor (open your scene and save it, that will
|
||
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:
|
||
|
||
```text
|
||
- Rigid Body
|
||
- Crate3DModel
|
||
- 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:
|
||
|
||
```text
|
||
- Limb
|
||
- Rigid Body
|
||
- Capsule Collider
|
||
```
|
||
|
||
#### Migration
|
||
|
||
This section will help you to migrate to new physics.
|
||
|
||
##### Rigid bodies
|
||
|
||
Rigid body and colliders now can be created like so:
|
||
|
||
```rust
|
||
use fyrox_impl::{
|
||
core::{algebra::Vector3, pool::Handle},
|
||
scene::{
|
||
base::BaseBuilder,
|
||
collider::{ColliderBuilder, ColliderShape},
|
||
node::Node,
|
||
rigidbody::RigidBodyBuilder,
|
||
transform::TransformBuilder,
|
||
Scene,
|
||
},
|
||
};
|
||
|
||
fn create_capsule_rigid_body(scene: &mut Scene) -> Handle<Node> {
|
||
RigidBodyBuilder::new(
|
||
BaseBuilder::new()
|
||
.with_local_transform(
|
||
// To position, rotate rigid body you should use engine's transform.
|
||
TransformBuilder::new()
|
||
.with_local_position(Vector3::new(1.0, 2.0, 3.0))
|
||
.build(),
|
||
)
|
||
.with_children(&[
|
||
// It is very important to add at least one child collider node, otherwise rigid
|
||
// body will not do collision response.
|
||
ColliderBuilder::new(
|
||
BaseBuilder::new().with_local_transform(
|
||
// Colliders can have relative position to their parent rigid bodies.
|
||
TransformBuilder::new()
|
||
.with_local_position(Vector3::new(0.0, 0.5, 0.0))
|
||
.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_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)
|
||
}
|
||
```
|
||
|
||
##### Joints
|
||
|
||
Joints can be created in a similar way:
|
||
|
||
```rust
|
||
fn create_ball_joint(scene: &mut Scene) -> Handle<Node> {
|
||
JointBuilder::new(BaseBuilder::new())
|
||
.with_params(JointParams::BallJoint(BallJoint {
|
||
local_anchor1: Vector3::new(1.0, 0.0, 0.0),
|
||
local_anchor2: Vector3::new(-1.0, 0.0, 0.0),
|
||
limits_local_axis1: Vector3::new(1.0, 0.0, 0.0),
|
||
limits_local_axis2: Vector3::new(1.0, 0.0, 0.0),
|
||
limits_enabled: true,
|
||
limits_angle: 45.0,
|
||
}))
|
||
.with_body1(create_capsule_rigid_body(scene))
|
||
.with_body2(create_capsule_rigid_body(scene))
|
||
.build(&mut scene.graph)
|
||
}
|
||
```
|
||
|
||
##### Raycasting
|
||
|
||
Raycasting located in `scene.graph.physics`, there were almost no changes to it, except now it returns handles to
|
||
scene nodes instead of raw collider handles.
|
||
|
||
##### Contact info
|
||
|
||
Contact info can now be queried from the collider node itself, via `contacts()` method.
|
||
|
||
```rust
|
||
fn query_contacts(collider: Handle<Node>, graph: &Graph) -> impl Iterator<Item=ContactPair> {
|
||
graph[collider].as_collider().contacts(&graph.physics)
|
||
}
|
||
``` |