It is generally considered poor form to have key bindings buried in the middle of a class.  This code will let you keep your key and mouse bindings separate from your Leadwerks Lua classes, and also let you bind multiple inputs to a single action.
Create a new script in your Scripts folder named ActionMap.lua.  Add the following code:
ActionMap = {}
ActionMap.forward = { "W" }
ActionMap.back = { "S" }
ActionMap.left = { "A" }
ActionMap.right = { "D" }
ActionMap.fire = { 1 }
ActionMap.jump = { "Space" }
ActionMap.reload = { "R" }
ActionMap.use = { "E", 2 }
ActionMap.debugPhysics = { "P" }
function ActionMap:IsHit(action)
    local i=1
    local window=Window:GetCurrent()
    while action[i]~=nil do
        if (type(action[i]) == "string") then
            if window:KeyHit(Key[action[i]]) then
                return true
            end
        end
        if (type(action[i]) == "number") then
            if window:MouseHit(action[i]) then
                return true
            end
        end
        i=i+1
    end
    return false
end
function ActionMap:IsDown(action)
    local i=1
    local window=Window:GetCurrent()
    while action[i]~=nil do
        if (type(action[i]) == "string") then
            if window:KeyDown(Key[action[i]]) then
                return true
            end
        end
        if (type(action[i]) == "number") then
            if window:MouseDown(action[i]) then
                return true
            end
        end
        i=i+1
    end
    return false
end
Now open your FPSPlayer.lua folder.  At the top, add:
import "Scripts/ActionMap.lua"
Now search for the following code:
if window:KeyHit(Key.E) then
Change it to the following code:
if ActionMap:IsHit(ActionMap.use) then
Now run your game.  You'll notice you can still use "E" to trigger the Use method, but you can also right-click to trigger the Use method.
When you populate your ActionMaps, a number is a mouse button, and a string is one of the constants from the Key object.  Adding saving/loading key bindings to a file and allowing your customers to rebind their keys is left as an exercise for the reader.
No comments:
Post a Comment