(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))) ))}