switch from PLAYER.POS to PLAYER.MOVED

This commit is contained in:
Travis Shears 2026-05-09 19:45:41 +02:00
parent 83f747d96b
commit bd12a4d504
Signed by: travisshears
GPG key ID: CB9BF1910F3F7469
4 changed files with 32 additions and 40 deletions

View file

@ -30,10 +30,10 @@
(local width 19)
(local height 15)
(local player {
:x 50 :y 50 :w 25 :h 25 :speed 80 :battery 100 :rot 0
:x 50 :y 50 :speed 80 :battery 100 :rot 0
:vision-pts []
:hitbox [50 50 width height]
:init-move false ; nudge the player at start of game to trigger starting collisions
:ever-moved false ; useful for inital update
})
@ -42,13 +42,13 @@
(when col.other.on-hit (col.other:on-hit))
(beholder.trigger "PLAYER.HIT" col.other)))
(lambda origin-pt [x y]
(values (+ x (/ width 2)) (+ y (/ height 2))))
; TODO: make this internal
(lambda player.origin-pt [self]
(values (+ self.x (/ width 2)) (+ self.y (/ height 2))))
(lambda player.cal-vision-points [self]
(let [
(ox oy) (origin-pt self.x self.y)
(ox oy) (self:origin-pt)
pts []]
(lambda add-pt [x y] (table.insert pts [x y]))
(for [i 1 5]
@ -72,7 +72,7 @@
(lambda player.cal-vision-poly [self]
(let [pts (self:cal-vision-points)
(ox oy) (origin-pt self.x self.y)
(ox oy) (self:origin-pt)
poly-pts [ox oy]
]
(each [_ pt (ipairs pts)]
@ -91,10 +91,6 @@
(fn player.update [self dt]
(when (= self.init-move false)
(set self.init-move true)
(let [(x y cols len) (bump-world:move self self.x self.y bump-filter)]
(handle-collisions cols)))
(let [
d-key (love.keyboard.isDown :d)
a-key (love.keyboard.isDown :a)
@ -106,7 +102,10 @@
{:d-key false :a-key false :e-key true :q-key false} (set self.rot (- self.rot (* dt 2)))
{:d-key false :a-key false :e-key false :q-key true} (set self.rot (+ self.rot (* dt 2)))
)
(when (and (> self.battery 0) (or d-key a-key e-key q-key))
(when (or
(= self.ever-moved false)
(and (> self.battery 0) (or d-key a-key e-key q-key)))
(set self.ever-moved true)
(let [
dir-fn (if (or d-key a-key) #(+ $1 $2) #(- $1 $2))
new-x (dir-fn self.x (* self.speed dt (math.cos self.rot)))
@ -116,10 +115,10 @@
(set self.x x)
(set self.y y)
(self:cal-vision-poly))
(if (> self.battery 0)
(set self.battery (- self.battery (* dt 2))))))
(beholder.trigger "PLAYER.POS" self.x self.y)
(beholder.trigger "PLAYER.VISION" self.vision-pts)
(when (> self.battery 0) (set self.battery (- self.battery (* dt 2))))
(beholder.trigger "PLAYER.MOVED" self)))
; (beholder.trigger "PLAYER.POS" self.x self.y)
; (beholder.trigger "PLAYER.VISION" self.vision-pts)
(beholder.trigger "PLAYER.BATTERY" self.battery))
(fn player.load [self]

View file

@ -11,10 +11,11 @@
(fn camera.load [self]
(let [screen self.pool.data.screen]
(beholder.observe "PLAYER.POS" (lambda [x y]
;; Update camera to follow player (keep player centered on screen)
(set self.x (- x (/ screen.canvas-w 2)))
(set self.y (- y (/ screen.canvas-h 2)))))))
(beholder.observe "PLAYER.MOVED" (lambda [player]
(let [(ox oy) (player:origin-pt)]
;; Update camera to follow player (keep player centered on screen)
(set self.x (- ox (/ screen.canvas-w 2)))
(set self.y (- oy (/ screen.canvas-h 2))))))))
(fn camera.draw89 [self]
(love.graphics.origin)) ; reset camera translation

View file

@ -8,19 +8,15 @@
{
:player-vision-pts []
:player-pos [0 0]
:player-quad nil
:font nil
:canvas nil })
(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.canvas (love.graphics.newCanvas 1000 1000))
(beholder.observe "PLAYER.VISION" (lambda [pts]
(set self.player-vision-pts pts)))
(beholder.observe "PLAYER.POS" (lambda [x y]
(set self.player-pos [x y])))
(beholder.observe "PLAYER.MOVED" (lambda [player]
(set self.player-pos [player.x player.y])
(set self.player-vision-pts player.vision-pts)))
(let [previousCanvas (love.graphics.getCanvas)]
(love.graphics.setCanvas self.canvas)
(color.set-color :dark-purple)
@ -39,7 +35,6 @@
(love.graphics.rectangle "fill" 0 0 1000 1000)
(love.graphics.setBlendMode "replace")
(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)

View file

@ -5,32 +5,29 @@
(local assets (require "src/assets.fnl"))
(local radar
{ :player-pos [0 0]
{ :x 0
:y 0
:rot 0
:speed 4 })
(lambda radar.load [self]
(beholder.observe "PLAYER.POS" (lambda [x y]
(set self.player-pos [x y]))))
(beholder.observe "PLAYER.MOVED" (lambda [player]
(let [(x y) (player:origin-pt)]
(set self.x x)
(set self.y y)))))
(lambda radar.update [self dt]
(set self.rot (+ self.rot (* (/ dt self.speed)))))
(lambda radar.draw81 [self]
(let [
w 19 h 15
[x y] self.player-pos
ox (+ x (/ w 2))
oy (+ y (/ h 2))
]
(color.set-color :dark-pink)
(love.graphics.push)
(love.graphics.translate ox oy)
(love.graphics.translate self.x self.y)
(love.graphics.rotate self.rot)
(love.graphics.setPointSize 2)
(love.graphics.points 0 0)
(love.graphics.circle "line" 0 0 150)
(love.graphics.line 0 0 0 150)
(love.graphics.pop)))
(love.graphics.pop))
radar