Skip to content

Releases: pandoraoyun/InputForge

v0.2.3

Choose a tag to compare

@KerimCETINBAS KerimCETINBAS released this 05 Jul 21:10
1c248ab
Add LICENSE.md inside addons/input_forge/ so the license ships with
the installed addon, matching the Asset Store listing type.
Rename demo folder to addons/input_forge_demo/ for naming consistency.
No functional/code changes to the addon.

v0.2.2 - InputFoge

Choose a tag to compare

@KerimCETINBAS KerimCETINBAS released this 01 Jul 17:04
15607c2

Fixed .gitattributes

v0.2.1 InputForge

Choose a tag to compare

@KerimCETINBAS KerimCETINBAS released this 01 Jul 00:31
c9456de

InputForge 0.2.1

Multiple callbacks can now bind to the same action — a drop-in,
backwards-compatible change with no public API differences.

Added

  • Multiple subscribers per action. InputMappingContext stores
    per-type subscriber lists (bool / float / Vector2 / Vector3 /
    ContextualInputEvent), keyed case-insensitively by action name.
    Several callbacks can BindAction to one action and all fire on
    dispatch; UnbindAction removes a single callback. Lists are
    allocated lazily on first bind of each type.

Internal

  • SubscriberListExtensions.Invoke<T> — null/empty-safe indexed-loop
    dispatch helper (no enumerator allocation, no per-event type switch).
    internal, not part of the public API.

Design note

The per-type split trades a recurring per-event cost (scanning one mixed
list + switching on each delegate's Action<> type + boxing the value)
for at most five one-time lazy list allocations, then dispatches each
typed list directly with the pre-computed value.

Compatibility

No public signature changes. Existing single-subscriber code behaves
identically. Requires Godot 4.7+ (.NET build).

Install

npx degit pandoraoyun/InputForge/addons/input_forge addons/input_forge

Full changelog: see CHANGELOG.md

InputForge 0.2.0

Choose a tag to compare

@KerimCETINBAS KerimCETINBAS released this 30 Jun 18:48
aa651d8

InputForge 0.2.0

Pointer input, two real bug fixes, and a test/CI foundation. Boolean input now picks its physical device explicitly, and InputKey can report the live mouse position straight from the viewport.

Highlights

Mouse position is now a first-class input. The new InputType.Pointer makes an InputKey report the absolute cursor position, read live from the active Viewport — not reconstructed from motion deltas. It's a different question from Delta ("where is the cursor" vs. "how much did it move"), so it's its own type. Falls back to the event's own position when used outside the normal dispatch path.
Boolean input got a DeviceType. Boolean InputKeys now explicitly select Keyboard, JoyButton, or MouseButton, so one binding model cleanly covers keys, gamepad buttons, and mouse buttons. The Inspector hides whatever doesn't apply to the current selection.
Added

InputType.Pointer — absolute mouse position from the live Viewport, with a graceful fallback when no EnhancedInputSystem instance is present.
DeviceType for Boolean keys (Keyboard / JoyButton / MouseButton).
Smarter Inspector — _ValidateProperty shows only the fields relevant to the selected InputType / DeviceType / AxisDimension.
~84% test coverage of the addon, running against a real headless Godot runtime via 2dog: modifiers (Invert, Scale, Swizzle, Normalize), triggers (TriggerOnKeyUp, TriggerContinuous), full InputKey (HandleInput routing, Equals/GetHashCode/== identity, _ValidateProperty matrix), plus InputAction and ContextualInputEvent.
CI — tests + coverage now run on every pull request to main.

Fixed

PriorityChanged(bool) could not be emitted. The bool was being marshalled as Nullable, throwing InvalidOperationException: type not supported for conversion to/from Variant. Now wrapped with Variant.From(...) so it marshals as a plain bool.
Dangling singleton reference. EnhancedInputSystem._instance was set in _Ready but never cleared, leaving a freed node referenced after teardown. Added _ExitTree cleanup, guarded against nulling a newer instance during a reload.

Notes

Coverage is measured with generated Godot marshalling code excluded (see InputForge.Tests/README.md) — an unfiltered run reports a misleadingly lower number because every partial class emits large amounts of auto-generated glue.
Full changelog: v0.1.1...v0.2.0

InputForge v0.1.1

Choose a tag to compare

@KerimCETINBAS KerimCETINBAS released this 30 Jun 08:40
c616124

InputForge v0.1.1

A quick follow-up release, one day after the initial Asset Library submission — a few real bugs were caught by the new unit tests, and some practical features came out of building a demo scene.

New

  • Context equality — compare contexts by name with ==/!=, so you can check EnhancedInputSystem.GetInstance().GetCurrentContext() == GameplayContext without holding a reference to the exact same resource.

  • PreventFallbackContext — when enabled, only the topmost context handles input; nothing falls through to lower contexts even if it doesn't match. Useful for modal states like a pause menu or mouse-look mode that should fully take over input.

  • DuplicateContextBehavior — controls what happens if you push a context that's already active. Defaults to Replace, which moves it to the top instead of leaving a stale duplicate behind.

  • Stack & context signals — EnhancedInputSystem now emits ActiveContextChanged, ContextPushed, ContextPopped. Each InputMappingContext also emits its own Pushed, Popped, and PriorityChanged.

  • Throughput benchmarks — added stability/throughput tests comparing InputForge's dispatch against N classes each overriding _Input() independently. InputForge comes out ~1.5x cheaper at 10 handlers and ~6.8x cheaper at 500 handlers. Full write-up in SMOKE_BENCH.md.

Fixed

  • DeadzoneModifier now correctly zeroes a value exactly equal to the deadzone threshold (was <, now <=) — caught by the new unit tests.
  • Fixed a signal bug where ActiveContextChanged could fire incorrectly when popping a non-topmost context, or when re-pushing an already-topmost one.

Other

  • Fixed .gitattributes so Asset Library installs only pull addons/input_forge, not any other locally-installed addons.

v0.1.0

Choose a tag to compare

@KerimCETINBAS KerimCETINBAS released this 29 Jun 09:19
eca3856
Add MIT License to the project