From 39a0cb63c28061e30c57c9862ca7b9b19d190e08 Mon Sep 17 00:00:00 2001 From: Aleksander Waage Date: Tue, 28 Jul 2020 15:51:02 +0200 Subject: [PATCH 1/2] * added option to ignore if input is taken * fixed a bug where input would be added to registry even if it was taken --- OWML.Common/IModInputHandler.cs | 2 ++ OWML.ModHelper.Input/ModInputHandler.cs | 18 +++++++++++++----- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/OWML.Common/IModInputHandler.cs b/OWML.Common/IModInputHandler.cs index 9a33d9f6d..2961c65c3 100644 --- a/OWML.Common/IModInputHandler.cs +++ b/OWML.Common/IModInputHandler.cs @@ -7,6 +7,8 @@ public interface IModInputHandler IModInputTextures Textures { get; } IModInputCombination RegisterCombination(IModBehaviour mod, string name, string combination); + IModInputCombination RegisterCombination(IModBehaviour mod, string name, string combination, bool ignoreTaken); + void UnregisterCombination(IModInputCombination combo); bool IsPressedExact(IModInputCombination combo); bool IsNewlyPressedExact(IModInputCombination combo); diff --git a/OWML.ModHelper.Input/ModInputHandler.cs b/OWML.ModHelper.Input/ModInputHandler.cs index 3c5a70258..592671d59 100644 --- a/OWML.ModHelper.Input/ModInputHandler.cs +++ b/OWML.ModHelper.Input/ModInputHandler.cs @@ -245,7 +245,7 @@ public bool WasNewlyReleased(IModInputCombination combination) combination.IsFirst; } - private RegistrationCode SwapCombination(IModInputCombination combination, bool toUnregister) + private RegistrationCode SwapCombination(IModInputCombination combination, bool toUnregister, bool ignoreTaken) { var isTaken = false; if (combination.Hashes.Count == 0) @@ -275,9 +275,12 @@ private RegistrationCode SwapCombination(IModInputCombination combination, bool { _comboRegistry.Add(hash, new HashSet()); } - _comboRegistry[hash].Add(combination); + if (!isTaken || ignoreTaken) + { + _comboRegistry[hash].Add(combination); + } } - return isTaken ? RegistrationCode.CombinationTaken : RegistrationCode.AllNormal; + return isTaken && !ignoreTaken ? RegistrationCode.CombinationTaken : RegistrationCode.AllNormal; } private List GetCollisions(ReadOnlyCollection hashes) @@ -319,9 +322,14 @@ public List GetWarningMessages(string combinations) } public IModInputCombination RegisterCombination(IModBehaviour mod, string name, string combination) + { + return RegisterCombination(mod, name, combination, false); + } + + public IModInputCombination RegisterCombination(IModBehaviour mod, string name, string combination, bool ignoreTaken) { var combo = new ModInputCombination(mod.ModHelper.Manifest, _console, name, combination); - switch (SwapCombination(combo, false)) + switch (SwapCombination(combo, false, ignoreTaken)) { case RegistrationCode.InvalidCombination: _console.WriteLine($"Failed to register \"{combo.FullName}\": Invalid combination!", MessageType.Error); @@ -351,7 +359,7 @@ public void UnregisterCombination(IModInputCombination combination) _console.WriteLine("Failed to unregister: Null combination!", MessageType.Error); return; } - switch (SwapCombination(combination, true)) + switch (SwapCombination(combination, true, false)) { case RegistrationCode.InvalidCombination: _console.WriteLine($"Failed to unregister \"{combination.FullName}\": Invalid combination!", MessageType.Error); From d5f6efcb002dfff381de847e2fa436877bff6192 Mon Sep 17 00:00:00 2001 From: Aleksander Waage Date: Tue, 28 Jul 2020 16:03:24 +0200 Subject: [PATCH 2/2] fixed the fix --- OWML.Common/IModInputHandler.cs | 2 -- OWML.ModHelper.Input/ModInputHandler.cs | 24 ++++++++---------------- 2 files changed, 8 insertions(+), 18 deletions(-) diff --git a/OWML.Common/IModInputHandler.cs b/OWML.Common/IModInputHandler.cs index 2961c65c3..9a33d9f6d 100644 --- a/OWML.Common/IModInputHandler.cs +++ b/OWML.Common/IModInputHandler.cs @@ -7,8 +7,6 @@ public interface IModInputHandler IModInputTextures Textures { get; } IModInputCombination RegisterCombination(IModBehaviour mod, string name, string combination); - IModInputCombination RegisterCombination(IModBehaviour mod, string name, string combination, bool ignoreTaken); - void UnregisterCombination(IModInputCombination combo); bool IsPressedExact(IModInputCombination combo); bool IsNewlyPressedExact(IModInputCombination combo); diff --git a/OWML.ModHelper.Input/ModInputHandler.cs b/OWML.ModHelper.Input/ModInputHandler.cs index 592671d59..d18b0279f 100644 --- a/OWML.ModHelper.Input/ModInputHandler.cs +++ b/OWML.ModHelper.Input/ModInputHandler.cs @@ -245,7 +245,7 @@ public bool WasNewlyReleased(IModInputCombination combination) combination.IsFirst; } - private RegistrationCode SwapCombination(IModInputCombination combination, bool toUnregister, bool ignoreTaken) + private RegistrationCode SwapCombination(IModInputCombination combination, bool toUnregister) { var isTaken = false; if (combination.Hashes.Count == 0) @@ -275,12 +275,9 @@ private RegistrationCode SwapCombination(IModInputCombination combination, bool { _comboRegistry.Add(hash, new HashSet()); } - if (!isTaken || ignoreTaken) - { - _comboRegistry[hash].Add(combination); - } + _comboRegistry[hash].Add(combination); } - return isTaken && !ignoreTaken ? RegistrationCode.CombinationTaken : RegistrationCode.AllNormal; + return isTaken ? RegistrationCode.CombinationTaken : RegistrationCode.AllNormal; } private List GetCollisions(ReadOnlyCollection hashes) @@ -322,14 +319,9 @@ public List GetWarningMessages(string combinations) } public IModInputCombination RegisterCombination(IModBehaviour mod, string name, string combination) - { - return RegisterCombination(mod, name, combination, false); - } - - public IModInputCombination RegisterCombination(IModBehaviour mod, string name, string combination, bool ignoreTaken) { var combo = new ModInputCombination(mod.ModHelper.Manifest, _console, name, combination); - switch (SwapCombination(combo, false, ignoreTaken)) + switch (SwapCombination(combo, false)) { case RegistrationCode.InvalidCombination: _console.WriteLine($"Failed to register \"{combo.FullName}\": Invalid combination!", MessageType.Error); @@ -338,13 +330,13 @@ public IModInputCombination RegisterCombination(IModBehaviour mod, string name, _console.WriteLine($"Failed to register \"{combo.FullName}\": Too long!", MessageType.Error); return null; case RegistrationCode.CombinationTaken: - _console.WriteLine($"Failed to register \"{combo.FullName}\": Already in use by following mods:", MessageType.Error); + _console.WriteLine($"Warning - \"{combo.FullName}\" is already in use by the following mods:", MessageType.Warning); var collisions = GetCollisions(combo.Hashes); foreach (var collision in collisions) { - _console.WriteLine($"\"{collision}\"", MessageType.Error); + _console.WriteLine($" * \"{collision}\"", MessageType.Warning); } - return null; + return combo; case RegistrationCode.AllNormal: return combo; default: @@ -359,7 +351,7 @@ public void UnregisterCombination(IModInputCombination combination) _console.WriteLine("Failed to unregister: Null combination!", MessageType.Error); return; } - switch (SwapCombination(combination, true, false)) + switch (SwapCombination(combination, true)) { case RegistrationCode.InvalidCombination: _console.WriteLine($"Failed to unregister \"{combination.FullName}\": Invalid combination!", MessageType.Error);