make fog_of_war everywhere outside of vision cone

This commit is contained in:
Travis Shears 2026-05-08 20:30:47 +02:00
parent 1e7b0d6812
commit 6c895c8842
Signed by: travisshears
GPG key ID: CB9BF1910F3F7469

View file

@ -2,18 +2,25 @@
(local utils (require "src/utils.fnl")) (local utils (require "src/utils.fnl"))
(local beholder (require "libs/beholder")) (local beholder (require "libs/beholder"))
(local levels (require "levels.fnl")) (local levels (require "levels.fnl"))
(local assets (require "src/assets.fnl"))
(local fow (local fow
{ {
:player-vision-pts [] :player-vision-pts []
:player-pos [0 0]
:player-quad nil
:font nil :font nil
:canvas nil }) :canvas nil })
(lambda fow.load [self] (lambda fow.load [self]
(let [(w h) (assets.player-sprite:getDimensions)]
(set self.player-quad (love.graphics.newQuad 0 0 25 25 w h)))
(set self.font (love.graphics.newFont 10)) (set self.font (love.graphics.newFont 10))
(set self.canvas (love.graphics.newCanvas 1000 1000)) (set self.canvas (love.graphics.newCanvas 1000 1000))
(beholder.observe "PLAYER.VISION" (lambda [pts] (beholder.observe "PLAYER.VISION" (lambda [pts]
(set self.player-vision-pts pts))) (set self.player-vision-pts pts)))
(beholder.observe "PLAYER.POS" (lambda [x y]
(set self.player-pos [x y])))
(let [previousCanvas (love.graphics.getCanvas)] (let [previousCanvas (love.graphics.getCanvas)]
(love.graphics.setCanvas self.canvas) (love.graphics.setCanvas self.canvas)
(color.set-color :dark-purple) (color.set-color :dark-purple)
@ -25,16 +32,23 @@
(let [ (let [
previousCanvas (love.graphics.getCanvas) previousCanvas (love.graphics.getCanvas)
previousBlendMode (love.graphics.getBlendMode) previousBlendMode (love.graphics.getBlendMode)
x self.player-x [x y] self.player-pos]
y self.player-y]
(love.graphics.setCanvas self.canvas) (love.graphics.setCanvas self.canvas)
(love.graphics.clear)
(color.set-color :dark-purple)
(love.graphics.rectangle "fill" 0 0 1000 1000)
(love.graphics.setBlendMode "replace") (love.graphics.setBlendMode "replace")
(love.graphics.setColor 0 0 0 0) ; transparent (love.graphics.setColor 0 0 0 0) ; transparent
; draw player quad to uncover the player
(love.graphics.push)
(love.graphics.translate (- x 3) (- y 7))
(love.graphics.polygon "fill" 3 11 3 17 7 21 17 21 21 17 21 11 17 7 7 7)
(love.graphics.pop)
; draw the vision cone
(when (> (length self.player-vision-pts) 2) (when (> (length self.player-vision-pts) 2)
(love.graphics.polygon "fill" self.player-vision-pts)) (love.graphics.polygon "fill" self.player-vision-pts))
(love.graphics.setBlendMode previousBlendMode) (love.graphics.setBlendMode previousBlendMode)
(love.graphics.setCanvas previousCanvas) (love.graphics.setCanvas previousCanvas)))
))
(lambda fow.draw80 [self] (lambda fow.draw80 [self]
(color.reset-color) (color.reset-color)