Skip to content

Commit 5cfcac3

Browse files
committed
REBASE
1 parent 0d3cc80 commit 5cfcac3

File tree

1 file changed

+49
-0
lines changed

1 file changed

+49
-0
lines changed

Packages/com.unity.inputsystem/InputSystem/InputManager.cs

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3699,6 +3699,55 @@ private unsafe void OnUpdate(InputUpdateType updateType, ref InputEventBuffer ev
36993699
m_CurrentUpdate = default;
37003700
}
37013701

3702+
/// <summary>
3703+
/// Determines if an event should be discarded based on timing or focus state.
3704+
/// </summary>
3705+
/// <param name="eventType">The type of the current event</param>
3706+
/// <param name="eventTime">The internal time of the current event</param>
3707+
/// <param name="updateType">The current update type</param>
3708+
/// <returns>True if the event should be discarded, false otherwise.</returns>
3709+
private bool ShouldDiscardEvent(FourCC eventType, double eventTime, InputUpdateType updateType)
3710+
{
3711+
// Check if this is an event that occurred during edit mode transition
3712+
if (ShouldDiscardEditModeTransitionEvent(eventType, eventTime, updateType))
3713+
return true;
3714+
3715+
// // Check if this is an out-of-focus event that should be discarded
3716+
if (ShouldDiscardOutOfFocusEvent(eventTime))
3717+
return true;
3718+
3719+
return false;
3720+
}
3721+
3722+
/// <summary>
3723+
/// In the editor, we discard all input events that occur in-between exiting edit mode and having
3724+
/// entered play mode as otherwise we'll spill a bunch of UI events that have occurred while the
3725+
/// UI was sort of neither in this mode nor in that mode. This would usually lead to the game receiving
3726+
/// an accumulation of spurious inputs right in one of its first updates.
3727+
///
3728+
/// NOTE: There's a chance the solution here will prove inadequate on the long run. We may do things
3729+
/// here such as throwing partial touches away and then letting the rest of a touch go through.
3730+
/// Could be that ultimately we need to issue a full reset of all devices at the beginning of
3731+
/// play mode in the editor.
3732+
/// </summary>
3733+
private bool ShouldDiscardEditModeTransitionEvent(FourCC eventType, double eventTime, InputUpdateType updateType)
3734+
{
3735+
return (eventType == StateEvent.Type || eventType == DeltaStateEvent.Type) &&
3736+
(updateType & InputUpdateType.Editor) == 0 &&
3737+
InputSystem.s_SystemObject.exitEditModeTime > 0 &&
3738+
eventTime >= InputSystem.s_SystemObject.exitEditModeTime &&
3739+
(eventTime < InputSystem.s_SystemObject.enterPlayModeTime ||
3740+
InputSystem.s_SystemObject.enterPlayModeTime == 0);
3741+
}
3742+
3743+
/// <summary>
3744+
/// Checks if an event should be discarded because it occurred while out of focus.
3745+
/// </summary>
3746+
private bool ShouldDiscardOutOfFocusEvent(double eventTime)
3747+
{
3748+
return m_DiscardOutOfFocusEvents && eventTime < m_FocusRegainedTime;
3749+
}
3750+
37023751
bool AreMaximumEventBytesPerUpdateExceeded(uint totalEventBytesProcessed)
37033752
{
37043753
if (m_Settings.maxEventBytesPerUpdate > 0 &&

0 commit comments

Comments
 (0)