handle joystick input
use rotation from joystick
This commit is contained in:
parent
a210317ab4
commit
e55ba81d94
3
conf.lua
3
conf.lua
|
@ -1,10 +1,11 @@
|
||||||
love.conf = function(t)
|
love.conf = function(t)
|
||||||
t.gammacorrect = true
|
t.gammacorrect = true
|
||||||
t.title, t.identity = "change-me", "Minimal"
|
t.title, t.identity = "change-me", "Minimal"
|
||||||
t.modules.joystick = false
|
t.modules.joystick = true
|
||||||
t.modules.physics = false
|
t.modules.physics = false
|
||||||
t.window.width = 720
|
t.window.width = 720
|
||||||
t.window.height = 450
|
t.window.height = 450
|
||||||
t.window.vsync = false
|
t.window.vsync = false
|
||||||
|
t.console = true
|
||||||
t.version = "11.4"
|
t.version = "11.4"
|
||||||
end
|
end
|
||||||
|
|
|
@ -7,41 +7,64 @@
|
||||||
(local sheet (love.graphics.newImage "images/MRMOTEXT.png"))
|
(local sheet (love.graphics.newImage "images/MRMOTEXT.png"))
|
||||||
|
|
||||||
(fn split-images [sheet height width]
|
(fn split-images [sheet height width]
|
||||||
(var images {})
|
(var images [])
|
||||||
(var count 0)
|
|
||||||
(for [y 0 (- (sheet:getHeight) height) height]
|
(for [y 0 (- (sheet:getHeight) height) height]
|
||||||
(for [x 0 (- (sheet:getWidth) width) width]
|
(for [x 0 (- (sheet:getWidth) width) width]
|
||||||
(tset images count (love.graphics.newQuad x y width height (sheet:getDimensions)))
|
(table.insert images (love.graphics.newQuad x y width height (sheet:getDimensions)))
|
||||||
(set count (+ count 1))
|
|
||||||
))
|
))
|
||||||
images)
|
images)
|
||||||
|
|
||||||
(local sprites (split-images sheet 8 8))
|
(local sprites (split-images sheet 8 8))
|
||||||
(fn get-image [sprites row column]
|
(fn get-image [sprites row column]
|
||||||
(. sprites (+ (* 32 row) column)))
|
(. sprites (+ (* 32 row) (+ column 1))))
|
||||||
|
|
||||||
(local player (get-image sprites 13 1))
|
|
||||||
(var player-data {:x 100
|
(var player-data {:x 100
|
||||||
:y 100})
|
:y 100
|
||||||
|
:rotation 0
|
||||||
|
:image (get-image sprites 13 1)})
|
||||||
|
|
||||||
(fn get-player-x []
|
(fn get-player-x []
|
||||||
(. player-data :x))
|
(. player-data :x))
|
||||||
(fn get-player-y []
|
(fn get-player-y []
|
||||||
(. player-data :y))
|
(. player-data :y))
|
||||||
|
(fn get-player-rotation []
|
||||||
|
(. player-data :rotation))
|
||||||
|
|
||||||
|
(fn move-player [x1 y1]
|
||||||
|
(tset player-data :x (+ (. player-data :x) x1))
|
||||||
|
(tset player-data :y (+ (. player-data :y) y1)))
|
||||||
|
|
||||||
|
(fn rotate-player [rx ry]
|
||||||
|
(tset player-data :rotation (math.atan2 rx ry)))
|
||||||
|
|
||||||
|
(fn handle-input [joystick]
|
||||||
|
(local x (joystick.obj:getAxis 1))
|
||||||
|
(local y (joystick.obj:getAxis 2))
|
||||||
|
(local rx (joystick.obj:getAxis 4))
|
||||||
|
(local ry (joystick.obj:getAxis 5))
|
||||||
|
(move-player x y)
|
||||||
|
(rotate-player rx ry))
|
||||||
|
|
||||||
|
(fn draw-player []
|
||||||
|
(love.graphics.setColor 0.12 0.78 0.55)
|
||||||
|
(love.graphics.draw sheet (. player-data :image) (get-player-x) (get-player-y) (get-player-rotation) 2 2 4 4))
|
||||||
|
|
||||||
{:draw (fn draw [message]
|
{:draw (fn draw [message]
|
||||||
(local (w h _flags) (love.window.getMode))
|
(local (w h _flags) (love.window.getMode))
|
||||||
(love.graphics.draw sheet player (get-player-x) (get-player-y) 0 2 2)
|
(draw-player)
|
||||||
)
|
)
|
||||||
:update (fn update [dt set-mode]
|
:update (fn update [dt joystick set-mode]
|
||||||
|
(handle-input joystick)
|
||||||
(incf time dt))
|
(incf time dt))
|
||||||
|
|
||||||
:keypressed (fn keypressed [key set-mode]
|
:keypressed (fn keypressed [key set-mode]
|
||||||
|
(let [step 16]
|
||||||
(if (love.keyboard.isDown ".")
|
(if (love.keyboard.isDown ".")
|
||||||
(tset player-data :y (- (. player-data :y) 8)))
|
(tset player-data :y (- (. player-data :y) step)))
|
||||||
(if (love.keyboard.isDown "e")
|
(if (love.keyboard.isDown "e")
|
||||||
(tset player-data :y (+ (. player-data :y) 8)))
|
(tset player-data :y (+ (. player-data :y) step)))
|
||||||
(if (love.keyboard.isDown "u")
|
(if (love.keyboard.isDown "u")
|
||||||
(tset player-data :x (+ (. player-data :x) 8)))
|
(tset player-data :x (+ (. player-data :x) step)))
|
||||||
(if (love.keyboard.isDown "o")
|
(if (love.keyboard.isDown "o")
|
||||||
(tset player-data :x (- (. player-data :x) 8)))
|
(tset player-data :x (- (. player-data :x) step)))
|
||||||
)}
|
))}
|
||||||
|
|
13
wrap.fnl
13
wrap.fnl
|
@ -4,6 +4,7 @@
|
||||||
(love.graphics.newCanvas w h)))
|
(love.graphics.newCanvas w h)))
|
||||||
|
|
||||||
(var scale 1)
|
(var scale 1)
|
||||||
|
(var Joystick {})
|
||||||
|
|
||||||
;; set the first mode
|
;; set the first mode
|
||||||
(var (mode mode-name) nil)
|
(var (mode mode-name) nil)
|
||||||
|
@ -14,6 +15,16 @@
|
||||||
(match (pcall mode.activate ...)
|
(match (pcall mode.activate ...)
|
||||||
(false msg) (print mode-name "activate error" msg))))
|
(false msg) (print mode-name "activate error" msg))))
|
||||||
|
|
||||||
|
(fn love.joystickadded [joystick]
|
||||||
|
(tset Joystick :name (joystick:getName))
|
||||||
|
(tset Joystick :axesNum (joystick:getAxisCount))
|
||||||
|
(tset Joystick :buttonsNum (joystick:getButtonCount))
|
||||||
|
(tset Joystick :hatsNum (joystick:getHatCount))
|
||||||
|
(tset Joystick :guid (joystick:getGUID))
|
||||||
|
(tset Joystick :id (joystick:getID))
|
||||||
|
(print (. Joystick :id))
|
||||||
|
(tset Joystick :obj joystick))
|
||||||
|
|
||||||
(fn love.load [args]
|
(fn love.load [args]
|
||||||
(set-mode :mode-intro)
|
(set-mode :mode-intro)
|
||||||
(canvas:setFilter "nearest" "nearest")
|
(canvas:setFilter "nearest" "nearest")
|
||||||
|
@ -35,7 +46,7 @@
|
||||||
|
|
||||||
(fn love.update [dt]
|
(fn love.update [dt]
|
||||||
(when mode.update
|
(when mode.update
|
||||||
(safely #(mode.update dt set-mode))))
|
(safely #(mode.update dt Joystick set-mode))))
|
||||||
|
|
||||||
(fn love.keypressed [key]
|
(fn love.keypressed [key]
|
||||||
(if (and (love.keyboard.isDown "lctrl" "rctrl" "capslock") (= key "q"))
|
(if (and (love.keyboard.isDown "lctrl" "rctrl" "capslock") (= key "q"))
|
||||||
|
|
Loading…
Reference in a new issue