Overview:
- Created a new UObject: USoundConcurrency
- Defines concurrency behaviors and allows for different USoundBase assets (e.g. SoundWave's, SoundCues) to be a part of the same concurrency group.
- This feature will allow a number of powerful techniques to limit and control the number of sound assets which can play concurrently
Details and Additional Related Features:
- USoundBase's not specifying an override or a USoundConcurrency ref will result in no concurrency limits.
- Added support to existing static gameplay functions to provide an optional argument to override the USoundConcurrency of a sound at the point of playing
- Added a few new concurrency resolution rules: Resolve based on priority and Resolve based on volume
- Volume based concurrency resolution is implemented slightly different than the others due to the fact that it's complex/expensive to compute an active sound's volume before it plays due to SoundCue graph traversal. Thus, this step is made after a sound is already made it through one update of the SoundCue graph.
- It's now possible to limit max concurrency (both in groups and per-sound-instance) to the "owner" of a sound. This way different characters/actors can use the same USoundConcurrency ref but have different max-concurrency counts. With this technique, you can, for example, limit dialogue lines per actor without needing to make a USoundConcurrency object for each actor.
- A new optional concurrency behavior was also added at a suggestion from the Epic audio team: the ability to attenuate a sound based on the instance count of a sound in its concurrency group. I.e. as more sounds play in a concurrency group, the sound instances get quieter.
Backwards Compat:
- The old way limited sounds per USoundBase instance (and not different ones). You can recover this behavior by specifying an "Override" settings structure on the USoundBase. When you do this, the feature will only limit sound concurrency per instance and not per group. All existing assets with MaxConcurrency settings will fallback to this behavior.
- The default USoundBase behavior for new USoundBase objects is the same as the old behavior - i.e. max limit of 16 and non-grouped (i.e. will be an override)
#codereview marc.audy
[CL 2706947 by Aaron McLeran in Main branch]
- FAssetImportInfo is now marked as USTRUCT and is stored as a member value on UAssetImportData rather than using inheritance. This makes customization writing much easier and better affords UObject interoperability.
- Removed UAssetImportData::bDirty as it was only every used to enable/disable a button on the static mesh editor, and its presence caused confusion and inconsistency.
- Fixed issue where timestamps did not get updated correctly
- Fixed various reimport paths that were not updating their source file information correctly.
This addresses UETOOL-466 and UE-16406.
[CL 2646395 by Andrew Rodham in Main branch]
All changes regarding e-mail discussion titled "Asset registry shenanigans".
Changes:
1. Engine now actively is getting rid of short asset paths in FStringAssetReference during saving (for all packages) and loading (only for older packages).
2. Deprecated direct access to FStringAssetReference.AssetLongPathname and exposed it via ToString and SetPath -- SetPath is making sure the path is in correct format. If the path can't be found on disk, the path is cleared.
3. Also access to FStringAssetReference.AssetLongPathnam via Blueprints is guarded using custom Make node function that uses SetPath instead of simple assign.
4. StringAssetReferenceMap will now contain only paths to packages (not objects) and ini references
5. GetDependencies now has additional parameter that lets you chose if it should resolve ini references or not. It was left not as default to keep old behaviour.
[CL 2630589 by Jaroslaw Palczynski in Main branch]
Fixes for lots of existing modules by removing all dynamically loaded duplicates (this is probably not the correct solution, but is the safest).
#codereview robert.manuszewski
[CL 2610845 by Steve Robb in Main branch]
Data Tables can now import from JSON, and this was taking priority over the Paper2D importers. There were a few issues here:
1) FAssetTools::ImportAssets wasn't respecting the priority of the import factories, and was just testing them in the order they were found.
a) UCSVImportFactory needed to be given a lower than normal priority so it gets tested last as it will perform a catch-all match.
2) FAssetTools::ImportAssets will default to the first factory it finds, and then use FactoryCanImport to try and find a better match, however FactoryCanImport returns false by default, so...
a) UPaperSpriteSheetImportFactory needed to implement FactoryCanImport to avoid sprite sheets being imported as Data Tables.
b) UCSVImportFactory needed to implement a catch-all FactoryCanImport so it can be used when no other factory is a better match.
#codereview Andrew.Rodham, Michael.Noland
[CL 2608928 by Jamie Dale in Main branch]
#jira UE-17417 - User must run FixUp Redirector two times to complete operation
Added referencing assets' paths into the list in FAssetFixUpRedirectors::UpdateAssetReferencers so that the asset references lists are updated correctly.
Also fixed a problem leading to duplicate entries in the PendingDeletes list in FAssetDeleteModel.
[CL 2605630 by Richard TalbotWatkin in Main branch]
UETOOL-332 - Collections 2.0
UETOOL-373 - Check robustness of Collections 2.0
The collection manager will now fix-up any references to redirectors within its collections once the asset registry has finished discovering all the available assets. It also adds a watcher so it can pick up any moves or deletes as they happen.
All of this fix-up is applied to the in-memory copy of the collection, and doesn't get persisted to disk until it needs to be (because referenced redirectors are being deleted). This helps to minimize issues with source control availability and shared/private collections.
This change also makes sure that objects that are being referenced by a collection will leave a redirector behind, and also adds some extra context (such as the collection name) to some of the source control errors that may be reported when saving a collection.
[CL 2602519 by Jamie Dale in Main branch]
base for a change to replace all PostProcessSettings with Blendables. See new documentation on blendables.
[CL 2596231 by Martin Mittring in Main branch]
If you import a mesh that adds bones to a skeleton, but don't save the skeleton, it could cause a crash.
Added the ability to recover these bones in the editor.
#codereview lina.halper, martin.wilson
--------
Integrated using branch Ue4-To-UE4-Fortnite-Simple (reversed) of change#2583044 by Laurent.Delayen on 2015/06/10 14:22:26.
[CL 2583061 by Laurent Delayen in Main branch]
The majority of asset reimport machinery is now held within UAssetImportData and FAssetImportInfo. This change allows us to remove the CachedAssetsBySourceFileName map from FAssetRegistry that was previously added to support auto reimport for 4.7.
The functionality of CachedAssetsBySourceFileName has been wrapped up in FAssetSourceFilenameCache, which sits on top of the asset registry in the editor.
This unification allows us to also consistently store the file timestamps and MD5 hashes of imported files. This subsequently allows auto-reimports to be ignored where a source content file has not actually changed (its MD5 is the same).
This addresses UETOOL-365 - Rework AssetRegistry changes to support auto-reimport
[CL 2567286 by Andrew Rodham in Main branch]
#jira UE-15787 - Creating a child blueprint of an anim blueprint does not result in an anim blueprint
#reviewedby Benn.Gallagher
[CL 2558443 by Richard TalbotWatkin in Main branch]