132 lines
5.4 KiB
Fennel
132 lines
5.4 KiB
Fennel
; Draw the overlay
|
|
; Relies on information about the player and the display
|
|
(local player (require :state))
|
|
(var (screen-width screen-height) (love.window.getMode))
|
|
|
|
; This draws the oxygen ui
|
|
; Sequential blocks, up to 10; each block 10%
|
|
(fn oxygen-ui [x y]
|
|
(local (bx by bb o) (values 10 10 15 (player.getO)))
|
|
(local bn (math.floor (/ o 10)))
|
|
(var (dx dy) (values 0 50))
|
|
(local bp (* 5 (% o 10)))
|
|
(love.graphics.setColor 0 1 0 0.25)
|
|
(for [i 1 10]
|
|
(love.graphics.polygon "line" (+ x dx 1) (+ y by 1)
|
|
(+ x dx bx 1) (+ y by 1)
|
|
(+ x dx bx 1) (+ y by dy 1)
|
|
(+ x dx 1) (+ y by dy 1))
|
|
(if (<= i bn)
|
|
(love.graphics.polygon "fill" (+ x dx) (+ y by)
|
|
(+ x dx bx) (+ y by)
|
|
(+ x dx bx) (+ y by dy)
|
|
(+ x dx) (+ y by dy)))
|
|
(if (= i (+ bn 1))
|
|
(love.graphics.polygon "fill" (+ x dx) (+ y (- (+ dy by) bp))
|
|
(+ x dx bx) (+ y (- (+ dy by) bp))
|
|
(+ x dx bx) (+ y by dy)
|
|
(+ x dx) (+ y by dy)))
|
|
(set dx (+ dx bb))))
|
|
|
|
; This draws the power ui
|
|
; Inverse-sequential blocks, up to 10; each block 10%
|
|
(fn power-ui [x y]
|
|
(local (bx by bb p) (values 10 10 15 (player.getP)))
|
|
(local bn (math.floor (/ p 10)))
|
|
(var (dx dy) (values 0 50))
|
|
(local bp (* 5 (% p 10)))
|
|
(love.graphics.setColor 1 1 0 0.25)
|
|
(for [i 1 10]
|
|
(love.graphics.polygon "line" (- x dx 1) (+ y by 1)
|
|
(- x dx bx 1) (+ y by 1)
|
|
(- x dx bx 1) (+ y by dy 1)
|
|
(- x dx 1) (+ y by dy 1))
|
|
(if (<= i bn)
|
|
(love.graphics.polygon "fill" (- x dx) (+ y by)
|
|
(- x dx bx) (+ y by)
|
|
(- x dx bx) (+ y by dy)
|
|
(- x dx) (+ y by dy)))
|
|
(if (= i (+ bn 1))
|
|
(love.graphics.polygon "fill" (- x dx) (+ y (- (+ dy by) bp))
|
|
(- x dx bx) (+ y (- (+ dy by) bp))
|
|
(- x dx bx) (+ y by dy)
|
|
(- x dx) (+ y by dy)))
|
|
(set dx (+ dx bb))))
|
|
|
|
; This draws barriers around the screen
|
|
; Eventually to be improved into a helmet
|
|
(fn helmet-hud []
|
|
(love.graphics.setColor 0 1 1 0.25)
|
|
(love.graphics.line 0 0
|
|
(+ (/ screen-width 6) 0) 35
|
|
(+ (/ screen-width 3) 0) 30
|
|
(- screen-width (/ screen-width 3)) 30
|
|
(- screen-width (/ screen-width 6)) 35
|
|
screen-width 0)
|
|
; (love.graphics.polygon "fill" (- screen-width 20) 0
|
|
; screen-width 0
|
|
; screen-width (- screen-height 20)
|
|
; (- screen-width 20) (- screen-height 20))
|
|
; (love.graphics.polygon "fill" 0 0
|
|
; 20 0
|
|
; 20 screen-height
|
|
; 0 screen-height)
|
|
; (love.graphics.polygon "fill" 0 (- screen-height 50)
|
|
; (/ screen-width 6) (- screen-height 35)
|
|
; (/ screen-width 3) (- screen-height 30)
|
|
; 0 screen-height)
|
|
; (love.graphics.polygon "fill" screen-width (- screen-height 50)
|
|
; (- screen-width (/ screen-width 6)) (- screen-height 35)
|
|
; (- screen-width (/ screen-width 3)) (- screen-height 30)
|
|
; screen-width screen-height)
|
|
)
|
|
|
|
; This draws a compass bar at the top of the HUD
|
|
(var compass-font (love.graphics.newFont 20))
|
|
(var hc-bar-east ["-" "-" "|" "N" "|"
|
|
"-" "-" "|" "NE" "|"
|
|
"-" "-" "|" "E" "|"
|
|
"-" "-" "|" "SE" "|"
|
|
"-" "|" "S" "|" "-" ])
|
|
(var hc-bar-west ["-" "-" "|" "N" "|"
|
|
"-" "-" "|" "NW" "|"
|
|
"-" "-" "|" "W" "|"
|
|
"-" "-" "|" "SW" "|"
|
|
"-" "|" "S" "|" "-" ])
|
|
(var hc-bar-limit 6)
|
|
(fn circular-compass [l c n]
|
|
(if (< (+ c n) 1) (length l)
|
|
(> (+ c n) (length l)) 1
|
|
(+ c n)))
|
|
(fn compass-bar []
|
|
(love.graphics.setColor 0 1 1 0.25)
|
|
(var (hc-output hc-padding) (values "" " "))
|
|
(var hc-idx (math.floor (+ 10 (* 10 (player.getDirX)))))
|
|
(var hc-idx-mod 1)
|
|
(for [i 1 (+ 1 hc-bar-limit)]
|
|
(if (> (player.getDirY) 0)
|
|
(do
|
|
(set hc-idx-mod 1)
|
|
(set hc-idx (circular-compass hc-bar-east hc-idx hc-idx-mod))
|
|
(set hc-output (.. hc-output (. hc-bar-east hc-idx) hc-padding)))
|
|
(do
|
|
(set hc-idx-mod 1)
|
|
(set hc-idx (circular-compass hc-bar-west hc-idx hc-idx-mod))
|
|
(set hc-output (.. (. hc-bar-west hc-idx) hc-padding hc-output)))))
|
|
hc-output)
|
|
|
|
(fn hud-compass []
|
|
(love.graphics.setColor 0.5 1 1 0.5)
|
|
(var compass-bar-output (compass-bar))
|
|
(love.graphics.printf compass-bar-output compass-font 0 50 screen-width :center))
|
|
|
|
(fn overlay [dx dy pos-x]
|
|
(love.graphics.translate dx (- dy))
|
|
(oxygen-ui (+ (/ screen-width 2) 100) (- screen-height 100))
|
|
; (power-ui (- (/ screen-width 2) 100) (- screen-height 100))
|
|
(helmet-hud)
|
|
(hud-compass)
|
|
(love.graphics.setColor 1 1 1)
|
|
)
|
|
|
|
{: overlay}
|