A flexible input system for Roblox TypeScript inspired by Godot's input handling, providing action mapping, context switching, and advanced input utilities.
npm install @rbxts/input-actionsbash
npm install @rbxts/input-actions
`
Basic Usage
`typescript
import { ActionsController, InputActionsInitializationHelper } from "@rbxts/input-actions";
import { RunService } from "@rbxts/services";
// Initialize the system
InputActionsInitializationHelper.InitAll();
// Create an action and bind keys to it
ActionsController.Add("Jump");
ActionsController.AddKeyCode("Jump", Enum.KeyCode.Space);
ActionsController.AddKeyCode("Jump", Enum.KeyCode.ButtonA); // For gamepad
// Use the action in your game code
RunService.Heartbeat.Connect(() => {
if (ActionsController.IsJustPressed("Jump")) {
character.Jump();
}
});
`
Using Input Contexts
`typescript
import { InputContextController } from "@rbxts/input-actions";
// Create contexts for different game states
const gameplayContext = InputContextController.CreateContext("gameplay");
const menuContext = InputContextController.CreateContext("menu");
// Add input mappings to contexts
gameplayContext.Add("Jump", {
KeyboardAndMouse: Enum.KeyCode.Space,
Gamepad: Enum.KeyCode.ButtonA,
});
gameplayContext.Add("Fire", {
KeyboardAndMouse: Enum.UserInputType.MouseButton1,
Gamepad: Enum.KeyCode.ButtonR2,
});
// Activate contexts based on game state
function EnterGameplay() {
menuContext.Unassign();
gameplayContext.Assign();
}
function OpenMenu() {
gameplayContext.Unassign();
menuContext.Assign();
}
`
Advanced Example: Character Movement
`typescript
import { RawInputHandler, InputActionsInitializationHelper } from "@rbxts/input-actions";
import { RunService } from "@rbxts/services";
// Initialize needed controllers
InputActionsInitializationHelper.InitAll();
RunService.RenderStepped.Connect((deltaTime) => {
// Get movement vector relative to camera
const moveVector = RawInputHandler.GetMoveVector(true, true);
if (humanoid) {
// Apply movement
const walkSpeed = 16; // Standard walk speed
humanoid.Move(moveVector.mul(walkSpeed));
}
// Get camera rotation input
const rotationDelta = RawInputHandler.GetRotation();
UpdateCameraAngle(rotationDelta.X, rotationDelta.Y);
});
``