Jump to content

How to create rebindable keys input with Lua?


hislittlecuzin
 Share

Recommended Posts

I have been using my own Input manager for several years now. From time to time a project would require some custom tweaking, so I made a new clean version which should suit your requirements.

  • keyboard and mouse hit and down 
  • key can be queried multiple times per frame
  • Virtual keys with primary and secondary function (W and Up for instance)
  • Other userfull functions

Here you can find the source code: 

1. Download the script and put it somewhere in your scripts folder. My example uses Scripts/Input/input.lua

I use main.lua to import it. Add this to your main lua: 

import "Scripts/Input/input.lua"

Before the main loop add the following:

input = Input:Create() -- I like input as a global variable, since you use it in many places
input:SetVirtualKey("RocketBoost", "Tab", "R") -- Add custom virtual key
input:DebugVirtualKeys() --prints all existing virtual keys to the screen

In your main loop you can now do these things:

if input:VirtualKeyHit("RocketBoost") then System:Print("ROCKETBOOOSTING using Tab or ALt") end
if input:KeyHit("E") then System:Print("E hit") end
if input:KeyHit("E") then System:Print("E hit second time") end
if input:KeyDown("Q") then System:Print("Q down") end
if input:MouseHit("LButton") then System:Print("Left mouse button click") end
if input:MouseDown("MButton") then System:Print("Middle mouse down") end
if input:VirtualKeyHit("Jump") then System:Print("jump hit") end
if input:VirtualKeyDown("Forward") then System:Print("moving forward using W or Up arrow") end

By default there are a couple of Virtual keys (just like you were used in Unity). You can either change the input.lua script or add/overwrite with the SetVirtualKeyCommand()

obj.virtualKeys["Forward"] =        { primaryKey = "W",         secondaryKey = "Up" }
obj.virtualKeys["Backward"] =       { primaryKey = "S",         secondaryKey = "Down" }
obj.virtualKeys["Left"] =           { primaryKey = "A",         secondaryKey = "Left" }
obj.virtualKeys["Right"] =          { primaryKey = "D",         secondaryKey = "Right" }
obj.virtualKeys["Jump"] =           { primaryKey = "Space" }
obj.virtualKeys["Use"] =            { primaryKey = "E" }
obj.virtualKeys["Fire"] =           { primaryKey = "Lbutton" }
obj.virtualKeys["SecondaryFire"] =  { primaryKey = "Rbutton" }
obj.virtualKeys["SpecialFire"] =    { primaryKey = "Mbutton" }

Some other usefull functions for in your game loop:

if input:Any() then System:Print("Any input detected. So keyboard or mouse.") end
if input:AnyKey() then System:Print("Any keyboard input.") end
if input:AnyMouse() then System:Print("Any mouse input detected (besides movement)") end

 

 

  • Like 1
  • Upvote 2
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...