e55ba81d94
use rotation from joystick
71 lines
2.1 KiB
Fennel
71 lines
2.1 KiB
Fennel
(import-macros {: incf} :sample-macros)
|
|
|
|
(var counter 0)
|
|
(var time 0)
|
|
|
|
(love.graphics.setNewFont 30)
|
|
(local sheet (love.graphics.newImage "images/MRMOTEXT.png"))
|
|
|
|
(fn split-images [sheet height width]
|
|
(var images [])
|
|
(for [y 0 (- (sheet:getHeight) height) height]
|
|
(for [x 0 (- (sheet:getWidth) width) width]
|
|
(table.insert images (love.graphics.newQuad x y width height (sheet:getDimensions)))
|
|
))
|
|
images)
|
|
|
|
(local sprites (split-images sheet 8 8))
|
|
(fn get-image [sprites row column]
|
|
(. sprites (+ (* 32 row) (+ column 1))))
|
|
|
|
(var player-data {:x 100
|
|
:y 100
|
|
:rotation 0
|
|
:image (get-image sprites 13 1)})
|
|
|
|
(fn get-player-x []
|
|
(. player-data :x))
|
|
(fn get-player-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]
|
|
(local (w h _flags) (love.window.getMode))
|
|
(draw-player)
|
|
)
|
|
:update (fn update [dt joystick set-mode]
|
|
(handle-input joystick)
|
|
(incf time dt))
|
|
|
|
:keypressed (fn keypressed [key set-mode]
|
|
(let [step 16]
|
|
(if (love.keyboard.isDown ".")
|
|
(tset player-data :y (- (. player-data :y) step)))
|
|
(if (love.keyboard.isDown "e")
|
|
(tset player-data :y (+ (. player-data :y) step)))
|
|
(if (love.keyboard.isDown "u")
|
|
(tset player-data :x (+ (. player-data :x) step)))
|
|
(if (love.keyboard.isDown "o")
|
|
(tset player-data :x (- (. player-data :x) step)))
|
|
))}
|