io.extendreality.zinnia.unity
Advanced tools
Changelog
1.17.1 (2020-05-22)
The Source property from the ValueExtractor is of a generic type and if the Cleared attribute is used then Malimbe will always weave an auto generated Clear method that attempts to set the property to null and this will cause issues in IL2CPP when attempting to clear non nullable types such as RaycastHit.
As there is a manual ClearSource method already that sets Source to
default
then thisCleared
attribute can simply be removed.
Changelog
1.17.0 (2020-05-22)
The PlatformDeviceAssociation component allows the determining of the hardware based on matching patterns of the current platform, the SDK loaded by Unity and the model type.
As all of these are patterns, then they can be used to search for anything or specific types of setup.
The LoadedXrDeviceAssociation has now been deprecated as it offers a subset of this new functionality but isn't as powerful.
The FloatToNormalizedFloat allows a float value to be converted into a normalized float (between 0f and 1f) and the NormalizedFloatToFloat allows for a normalized float to be converted to a float value based within the range provided.
The FloatToBoolean has also had the min/max limit removed so any float value can be used to check to see if it should be within the positive bounds.
The Vector2ToAngle component now has the option of converting to a signed angle in either degrees or radians.
This allows an angle range of -180 degrees to 180 degrees instead of 0 to 360 degrees and this will feed in better to the FloatToBoolean when wanting to know if the angle is between a given range as it is possible to do -20/20 as a range whereas it's not possible to do 340/20 as a range.
There is an issue with using the Malimbe generated ClearSource method when using it with a generic type property as the actual type may not be a nullable type and the MemberCleared weaved code always tries to set it to
null
.In this regard, it is better to simply override the method and set the property to
default
. This is not done in Malimbe as providing default as the weaved code is extremely tricky.
Changelog
1.16.0 (2020-04-21)
The Pointer origin was previously always the Transform that the ObjectPointer component was on, but this new field allows an alternative origin to be provided if required.
The SurfaceLocator would always not consider a valid location if the previous location was the same as the current location. This new option allows that equality check to be ignored.
Also, the equality threshold is no longer a constant and instead a value that can be changed via the public property.
The TransformPropertyApplier now has an option to still apply properties even if the properties are equal.
This fix will calculate properties correctly if IsTransitionDestinationDynamic is true. Before the fix, it does not honor the ApplyTransformations settings.
This fix is by Ethan Cheung ethan@fight4dream.com
Co-authored-by: Ethan Cheung ethan@fight4dream.com
Changelog
1.15.0 (2020-04-14)
The Cache operation allows a data type value to be stored in a cache and then an appropriate event is raised when the value is updated.
If the value is considered equal then the Unmodified event is emitted. However, if the values are not equal then the Modified event is emitted.
A collection of extractors that firstly extract the RaycastHit data from a SurfaceData and then a collection of extractors that can extract specific data from the RaycastHit.
This new collection means the existing SurfaceDataCollisionPointExtractor becomes obsolete as it is too specific for the extractor pattern and can be achieved by first extracting the RaycastHit from the SurfaceData and then extracting the RaycastHit.point from the RaycastHit output.
(Nearly) all of the extractors now all inherit from a single ValueExtractor class which contains most of the logic ensuring extractors all have a standard API.
There are a couple of extractors that have multiple events for extraction and these don't fit into this model yet so have been left out. These are:
- ObjectDistanceComparatorEventDataExtractor * TransformPropertyApplierEventDataExtractor
These will be updated in the future to provide individual extrators that can then follow the standard Extractor pattern.
All Extractors now also implement
iProcessable
so can all be used with aMomentProcessor
.All Extractors also invoke a
Failed
event which is raised when the extractor has failed to extract the value. This is to ensure thePlayAreaDimensionExtractor
still has the relevant events required and can fit in the standard Extractor pattern. Plus, having aFailed
event is useful to know when an Extractor has failed.The
TransformPropertyExtractor
has been renamed toTransformVector3PropertyExtractor
which originally existed within the same file but now it can simply extend theVector3Extrator
but the old extractor had a separate property for storing the result of the extraction calledLastExtractedValue
. This property is still available but it has been deprecated and theResult
field should now be used to get the extracted value.
The
Zinnia.Data.Type.Transformation.Conversion.Vector2ToFloat
component does the same job as theVector2ComponentExtractor
so there is no need to have both.
The main
Extract()
method should do a check to see if the component is active and enabled and if its not then it should force set theResult
tonull
across all Extractors.Also, the
RequiresBehaviourState
attribute has been added to theExtract
methods that allow the data to be passed in via a parameter as they were allowing mutation to the source even when the component was inactive.Finally, any extractors that didn't have the
Extract
methods that allowed a parameter have been updated to include these methods too.
The TransformPropertyExtractor worked in the opposite way from other extrators where the
Extract
method does all the work and theDoExtract
method just calls theExtract
method without any return.This has now been updated so it follows this standard logic.
The TransformDirectionExtractor had the
UseLocal
logic the wrong way round. It was returning the globalVector3.<direction>
ifUseLocal
was true and returning the direction of theSource
ifUseLocal
was false.This doesn't make sense because
Vector3.<direction>
is the global direction whereas the direction of theSource
is technically local to theSource
.This is also technically a change that can cause breaks because the logic is now flipped. But rather than do a clever deprecation or anything, it's probably just better to handle complaints as its just fixed by checking (or unchecking) the
UseLocal
property.
The coding conventions in regards to namespace order has now been applied so the default VisualStudio namespace order is applied to all scripts.
Any missing code comments have also been added to any non-test related script.
The ValueExtractor now has a way of dealing with the differences between the TResultElement and TEventElement when the InvokeResult method is called by piping the actual logic into a generic InvokeEvent method meaning each of the concrete classes don't have to repeat the logic.
Changelog
1.14.1 (2020-04-01)
Having the ValueUnchanged event in the Sources chain does not make sense as it causes the
any
concept of the Sources to fail because the logic goes:Has SourceA changed? no, then don't call Target.Receive but SourceA is unchanged so call Target.Receive Has SourceB changed? no, then don't call Target.Receive but SourceB is unchanged so call Target.Receive
The above scenario would mean Target is still false, however:
Has SourceA changed? Yes, then call Target.Receive(true) SourceA is changed so the second receive won't be called Has SourceB changed? No, then don't call Target.Receive SourceB is unchanged so call Target.Receive(false)
Now Target has gone from true to false causing it to reset its own state.
Really, the Sources should only be used for actual change proxying and not try to do an
any
on unchanged values.
Changelog
1.14.0 (2020-03-04)
The LinkedAliasAssociationCollection now has an additional parameter that can store a list of other cameras that may have relevance to the tracked alias.
This aids when a HMD is using multiple cameras per eye for example.
The LinkedAliasAssociationCollection now has a reference for the left and right controller haptic processes so any CameraRig configuration can provide the default haptic process required for the appropriate SDK.
Changelog
1.13.0 (2020-03-02)
A ValueUnchanged event has been added to compliment the ValueChanged Action. The new ValueUnchanged event will raise when the Action receives the same value as it is currently holding.
This event can then be used to call EmitActivationState to re-raise the relevant events.
The Vector3 Action raises a Vector3 value in the same way as the Vector2 Action.
The TimeComponentExtractor will extract a specified value from the UnityEngine.Time object and emit the result.
The Vector2 and Vector3 events can now be proxied via the new EventProxyEmitters.
Changelog
1.12.0 (2020-02-24)
The KeyNotFound event is raised whenever the GetValue method on the GameObjectRelations component is called but no key can be matched because either the key is not in the dictionary or the index given is out of bounds of the collection.
This fix will cache velocity tracker for this component to work when the ProxySource is set up in editor time.
Changelog
1.11.0 (2019-12-31)
The new
ReceiveDefaultValue
method is a shortcut for theReceive
method but it simply makes the Action receive its own default value.This can be used to programmatically get an Action to call its own deactivation event if the Action is already activated without needing to know the type of the concrete action. This is useful when dealing with Actions in their generic abstract form but wanting them to emit their deactivated state for whatever reason, such as a linked GameObject becoming disabled.
Changelog
1.10.4 (2019-12-21)
Bumps io.extendreality.malimbe from 9.6.4 to 9.6.5. - Release notes - Changelog - Commits
Signed-off-by: dependabot-preview[bot] support@dependabot.com