(local state (require :lib.state)) (local font (require :lib.font)) (local translation (require :lib.translation)) (fn draw [self] (local (width height) (love.graphics.getDimensions)) (state.draw self.present-state) ;; TODO: translation (love.graphics.reset) (love.graphics.translate (/ width 2) (/ height 2)) ;; TODO: this scaling is pretty limited and should probably get bigger! (local scale (if (> height 600) 2 1)) (love.graphics.setColor 0.8 0.8 0.8 (/ (math.max 0 (- self.age 30)) 10)) (love.graphics.setFont (. font (* 48 scale))) (love.graphics.printf (string.format (. translation.text self.type 1) (and self.level (translation.text.number self.level))) (* scale -500) (* scale -64) (* scale 1000) :center) (love.graphics.setFont (. font (* 12 scale))) (love.graphics.printf (string.format (. translation.text self.type 2) (and self.level (translation.text.number self.level))) (* scale -500) 0 (* scale 1000) :center)) (fn update [self] ;; TODO: actually update in case it returns something else (when (not= self.type :pause) (state.update self.present-state)) (set self.age (math.min 40 (+ self.age 1))) (if self.transition self.future-state nil)) (fn keypressed [self key scancode repeat] (when (and (not repeat) (or (and (= self.type :pause) (= key :escape)) (= key :z))) (set self.transition true)) ) (fn init [self type present-state future-state level] (setmetatable {: type : present-state : level : future-state :age (if (or (= type :pause) (= type :menu)) 40 0)} self)) {state.draw draw state.init init state.update update state.keypressed keypressed}