All notable changes to this package are documented in this file.
The format is based on Keep a Changelog and this project adheres to Semantic Versioning.
- Rewrote internal code that used C# 9.0 features, which was preventing package use in Unity 2020.3.
- Declared Unity 2020.3 as the minimum required Unity version for this packaged. Earlier Unity releases are not supported by this package.
- Fixed internal exception that would sometimes occur when getting joystick glyphs with null controller
- Added new constructors to
Glyph
that utilize aControllerType
parameter⚠️ Marked the constructors that don't have this parameter as obsolete. They will not be removed until the next major release at earliest.
- Fallback glyphs now have a
ControllerType
value for the device they were intended to represent- Previously was always
null
- Previously was always
- Fixed
hideKBM
functionality not behaving as expected for fallback glyphs
- Fixed an issue where incorrect glyphs may have been shown if there were multiple controllers of different types plugged in
- Example: If a first controller 'A' is an
Xbox One
controller and a controller 'B' is aDualSense
controller, controller B would sometimes show incorrect glyphs.
- Example: If a first controller 'A' is an
This release includes major breaking changes which will require your attention in order to upgrade to this version from any 1.x
release
GlyphCollection
has been overhauled. For eachGlyphCollection
in your project you must reassign the hardware maps to the newly designated 'Controller Maps'- If you are using one of the
GlyphCollection
samples you are encouraged to reimport the updated2.x
sample instead.
- If you are using one of the
- If referenced
HardwareDefinition
in any of your scripts, they must be replaced/removed- Use
Controller
orControllerType, Guid
instead. - This affects
GetNativeGlyphFromGuidMap
method calls in particular
- Use
Hardware Definition
has been completely removed for more accurate glyph queries and an improved user experience when creatingGlyphCollection
- Most methods that were directly associated with
HardwareDefinition
have been removed entirely. - Methods that used
HardwareDefinition
to target a specific controller now useController
orControllerType, Guid
instead.- The signature for some query methods have changed as a result such as
GetNativeGlyphFromGuidMap
- The signature for some query methods have changed as a result such as
⚠️ You will have to update your1.x
GlyphCollection
when updating to v2.0.0 by reassigning your controller glyph maps to the collection!- If you used any methods that used
HardwareDefinition
your code will not compile when upgrading to this version and will require changes.
- Added official
Documentation~
which can also be found online at https://orange-panda.github.io/Rewired-Glyphs/- This is an ongoing project, so you are encouraged to make article requests in the Issues or Discussions if you are unable to find documentation for your use case.
- Added an overhauled
GlyphCollection
editor user experience - Added
ControllerType
property toGlyph
to inform components about the device the glyph intends to represent.- All Template maps represent
Joystick
glyphs - Controller maps use the value defined in its entry on the
GlyphCollection
- All Template maps represent
- Added optional feature for hiding non-input glyphs (null, uninitialized, etc.) on built-in components (default does not hide)
- Enable in
GlyphRichTextFormatter
usinghideInvalid
option in glyph tag (Example:<glyph Jump hideInvalid>
)
- Enable in
- Added optional feature for hiding keyboard and mouse glyphs in built-in components (default does not hide)
- Enable in
GlyphRichTextFormatter
usinghideKBM
option in glyph tag (Example:<glyph Jump hideKBM>
)
- Enable in
- Added
ShouldHideGlyph(Glyph)
protected method toGlyphDisplay
which can be used by inheritors to inform if they should hide the output glyph (due to the above rules)- If you don't implement this check in your
SetGlyph
component it will behave identically to before, but will not support these optional settings.
- If you don't implement this check in your
- Added
GetGlyphSet
method toInputGlyphs
for getting all glyphs for an action across all controller types, including multiple bindings on a single controller. - Added
collectionKey
string field toGlyphCollection
for distinctly identifying and referencing collections at runtime ⚠️ [Breaking] - AddedcollectionKey
optional parameter to allInputGlyphs
methods for referencing secondary (non-default) collections- Added
additionalCollections
field toRewiredGlyphManager
for additively loading additional collection for reference by theircollectionKey
- This field also supports generating TMP sprite sheets (generates for default collection and collections included in additional collections)
- Note: Make sure the names of the sprite sheets containing glyphs are unique since they are referenced by name in TextMeshPro. An error message has been added to notify about such collisions.
- Added optional specifier
set=collectionname
forGlyphRichTextFormatter
to target secondary glyph collections- Example:
<glyph Jump set=dark>
where 'dark' is thecollectionKey
on someGlyphCollection
that is loaded into InputGlyphs
- Example:
- Added
Generate Keyboard
andGenerate Mouse
functionality toGlyph Map
for generating default Glyph Map actions- Requires the application running due to technical limitations
- Added component icons to all major components and scriptable objects of the package
- Icons sourced from Google Icons
- Added confirmation dialogue before generating TMP sprite sheet on Rewired Glyph Manager
- Added custom property drawer for
Glyph
, improving the editor experience - Added new glyphs sample to package: Xelu Prompts
- Changed order of sprites in Glyph editor (now ordered Full, Positive, Negative to match description order)
- Rewrote the way glyph collections are loaded into memory internally
- Switching the active glyph collection is now much more performant
- Loading a glyph collection now only dispatches a glyph update if it may have changed the output of glyph queries
GlyphCollection
now initializes non-input glyph values with default values when created.- Remove set access to
TemplateEntry
andGuidEntry
- Updated
Kenney
sample glyphs to newGlyphCollection
format
⚠️ [Breaking] - FixedGetSpecificCurrentGlyph
andGetCurrentGlyph
not utilizing the value of its 'forceAxis' parameter.- If you were utilizing a value of
true
you may notice different output of this method. - This method was being used by
GlyphRichTextFormatter
therefore tags such as<glyph "MoveH" pole=FullAxis>
will output differently.
- If you were utilizing a value of
- Fixed Glyph
Positive
andNegative
description sometimes not returning the expected value - Fixed description validation error in
GlyphMapEditor
- Fixed
Kenney
glyph maps having some inaccurate/missing actions
- Added
Specific
methods toInputGlyphs
that enable getting joystick symbols of a specific type regardless of the value ofInputGlyphs.PreferredSymbols
- These methods are generally not recommended unless you need to explicitly show that symbol while
InputGlyphs.PreferredSymbols
has a differing value
- These methods are generally not recommended unless you need to explicitly show that symbol while
GlyphRichTextFormatter
now supports specifier syntax for additional arguments such aspole=Positive
,player=2
, ortype=Joystick
GlyphRichTextFormatter
now supports specifying the controller type for the glyph such astype=Keyboard
,type=Mouse
, ortype=Joystick
- Caution: Specifying controller type is more prone to showing
UNBOUND
glyph since it will not fall back to any other type if there is no glyph for that controller
- Caution: Specifying controller type is more prone to showing
GlyphRichTextFormatter
now supports specifying the symbol for the glyph such assymbol=Auto
,symbol=Xbox
,symbol=PS
, orsymbol=Switch
⚠️ [Breaking] - Editor scripts have been moved from theLMirman.RewiredGlyphs
namespace toLMirman.RewiredGlyphs.Editor
namespace.- Despite not being backward compatible, this change won't be incrementing the major version since the affected types don't have any practical public API functionality.
- Added
GlyphType
,IsFallbackGlyph
andIsInputGlyph
properties toGlyph
- Allows for checking if a Glyph is intended to represent a
Null
,Unbound
, orUninitialized
glyph through code.
- Allows for checking if a Glyph is intended to represent a
- Added
forceAxis
parameter toInputGlyphs
GetGlyph methods- When true, will get the glyph for the entire axis such as "Move Horizontal" instead of "Move Left" and "Move Right"
- Defaults to false, providing a similar behavior to before
GlyphRichTextFormatter
can output the full axis with the "Full Axis" parameter. Example:<glyph "Move Horizontal" Full>
- Added improved documentation to
InputGlyphs
GetGlyph methods - Added
GetGlyph
method toInputGlyphs
which uses a ControllerType parameter to map to the other specific GetGlyph methods
- Getting glyphs for button or split elements for an axis action is now significantly more reliable
- Previously getting positive/negative actions such as "Move Horizontal" for joysticks would return the unbound glyph despite a full axis map to the entire horizontal joystick
- Now InputGlyph will infer the Joystick Left and Joystick Right from the full axis map.
- Fixed
Glyph.GetDescription()
returning a null string in rare cases - Fixed exception in
GlyphRichTextFormatter
when providing a null string toSetFormattedText(string)
method - Fixed no controller being recognized until it inputs at least once
- Now defaults to the first joystick if the player has not yet input using a controller yet, ensuring there is some glyph shown initially
- Added
useSpritesWhenAvailable
field toGlyphRichTextFormatter
.- When
true
will replace glyph rich text with a TMP inline sprite if there is a Sprite available for the found glyph. - When
false
will always use the Glyph's description even if it has a sprite. - Defaults to
true
which matches the behaviour of previous implementation
- When
- Added
descriptionFormat
field toGlyphRichTextFormatter
which controls the way descriptions are output.- Defaults to
[{0}]
which matches the behaviour of previous implementation
- Defaults to
- Added
formatTextOnStart
field toGlyphRichTextFormatter
- Defaults to
true
which matches the behaviour of previous implementation
- Defaults to
- Fixed
GlyphRichTextFormatter
not having up to date glyphs if component was not enabled during glyph rebuild.
- Added descriptions for
Positive
andNegative
axis range on Glyph- If you have created custom components you are encouraged to use
GetDescription()
instead of the now obsoleteDescription
- If you have created custom components you are encouraged to use
- Added a brand new
Glyph Map
Editor- Quickly generate a glyph map based on your project's Rewired controller maps
- Validate glyph values against the expected definitions from your project's
Controller Data Files
asset
- Added
GetKeyboardGlyph
andGetMouseGlyph
functions to theInputGlyphs
class - Exposed previously private methods
GetNativeGlyphFromGuidMap
,GetNativeGlyphFromHardwareMap
, andGetNativeGlyphFromTemplateMap
inInputGlyphs
class- These methods are not recommended in most cases, but may be useful if you need tight control over glyph output.
- Added support for inserting new glyph definitions to glyph map in editor
- Fixed incorrect Dualsense and Dualshock 4 glyph map in package sample
- Requires reimporting sample to fix
- Fixed some calls being made to Rewired when it is not active
- Fixed glyph system cache referencing null players when input manager is quit or restarted
- Fixed glyph display never initializing action id if Reinput system was not ready on Awake
- Fixed rebuilds not sometimes not occuring on later glyph displays if an exception occured in an earlier glyph display
- Fixed
Rewired Glyph Manager
not marking glyph maps and collection dirty when generating TextMeshPro sprite sheets
- Added support for inline input glyphs using
GlyphRichTextFormatter
- Added support for entering a glyph map into a collection via hardware Guid
- Added sample glyphs and glyph mappings to improve onboarding experience
- Fallback glyphs now use the null glyph's sprite. If you do not wish to show this sprite evaluate the
Glyph.PreferDescription
value.
- Input glyphs can now be retrieved on a per player basis.
GlyphDisplay
can now use action ids instead of names.
GenericEntry
onInputGlyphCollection
has been renamed toTemplateEntry
GenericMaps
onInputGlyphCollection
has been renamed toTemplateMaps
Entry
onInputGlyphCollection
has been renamed toHardwareEntry
Maps
onInputGlyphCollection
has been renamed toHardwareMaps
- Enums that were previously nested within
InputGlyphs
have been moved to outer scope - Everything in the package is now within the
LMirman.RewiredGlyphs
namespace - InputGlyphs now uses an integer parameter for actions instead of string
- Most class names containing
InputGlyph
have been simplified to justGlyph
InputGlyphs
will not be renamed.
InputGlyphObserver
is nowRewiredGlyphManager
and is required to be added to the RewiredInput Manager
for Input Glyph system to function.
- The glyph collection is no longer referenced through the
Resources
folder.
- Package created.