Skip to content

Commit 61ac672

Browse files
committed
minor fixes
1 parent a0e6be9 commit 61ac672

File tree

9 files changed

+179
-77
lines changed

9 files changed

+179
-77
lines changed

bun.lock

Lines changed: 95 additions & 41 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "litecanvas",
3-
"version": "0.102.2",
3+
"version": "0.102.3",
44
"description": "Lightweight HTML5 canvas 2D game engine suitable for small projects and creative coding. Inspired by PICO-8 and p5.js/Processing.",
55
"license": "MIT",
66
"author": "Luiz Bills <luizbills@pm.me>",
@@ -31,11 +31,11 @@
3131
"creative coding"
3232
],
3333
"devDependencies": {
34-
"@happy-dom/global-registrator": "^20.4.0",
34+
"@happy-dom/global-registrator": "^20.7.0",
3535
"@size-limit/preset-small-lib": "^12.0.0",
36-
"@swc/core": "^1.15.11",
36+
"@swc/core": "^1.15.13",
3737
"ava": "^6.4.1",
38-
"esbuild": "^0.27.2",
38+
"esbuild": "^0.27.3",
3939
"genversion": "^3.2.0",
4040
"gzip-size": "^7.0.0",
4141
"prettier": "^3.8.1",

samples/custom-event/custom-event.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ function init() {
88
x: 0,
99
y: H / 2,
1010
size: 64,
11-
color: 4,
11+
color: 3,
1212
}
1313
finishLineX = W * 0.7
1414
victory = false
@@ -21,7 +21,7 @@ function init() {
2121
if (x > finishLineX) {
2222
victory = true
2323
time = T
24-
player.color = 5
24+
player.color = 2
2525
// run until collision happens
2626
unlistenThisEvent()
2727
}

samples/keyboard/keyboard.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ function init() {
1010

1111
function update() {
1212
if (iskeypressed('space')) {
13-
color = randi(0, 11)
13+
color = randi(0, 3)
1414
}
1515
if (iskeydown('ArrowLeft')) {
1616
x -= 5
@@ -30,5 +30,5 @@ function draw() {
3030
cls(color)
3131
text(0, 0, 'Press arrow keys to move', color + 2)
3232
text(0, 32, 'Hit spacebar to change the colors', color + 2)
33-
circfill(x, y, 64, color + 4)
33+
circfill(x, y, 64, color + 1)
3434
}

samples/shapes/shapes.js

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,20 @@
11
litecanvas()
22

33
function init() {
4-
size = W / 6
4+
size = W / 12
55
angle = 0
66
gap = 40
77
lineDashPattern = [30, 15]
88
lineDashOffset = 0
9-
lineWidth = 2
9+
lineWidth = 3
10+
types = [
11+
() => rectfill(0, 0, size, size, 2),
12+
() => rect(0, 0, size, size, 1),
13+
() => circfill(0, 0, size / 2, 3),
14+
() => circ(0, 0, size / 2, 1),
15+
() => ovalfill(0, 0, size * 1.5, size / 2, 2),
16+
() => oval(0, 0, size * 1.5, size / 2, 1),
17+
]
1018
}
1119

1220
function update(dt) {
@@ -19,16 +27,14 @@ function draw() {
1927
cls(0)
2028
linewidth(11 - wave(-10, 10, T * 10))
2129

22-
rectfill(gap, H / 2 - size / 2, size, size, 2)
30+
for (let i = 0; i < 100; i++) {
31+
push()
32+
const x = rand() * W
33+
const y = rand() * H * 0.9
34+
translate(x, y)
35+
types[randi(0, types.length - 1)]()
36+
pop()
37+
}
2338

24-
// rotate the second rect only
25-
push()
26-
translate(gap * 2 + size + 10 + size / 2, H / 2 - size / 2 + size / 2)
27-
rotate(angle)
28-
linedash(lineDashPattern, -lineDashOffset)
29-
rect(-size / 2, -size / 2, size, size, 1)
30-
pop()
31-
32-
circfill(size * 3, H / 2, size / 2, 2)
33-
circ(gap + size * 4, H / 2, size / 2, 1)
39+
pause()
3440
}

samples/snake/snake.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ function draw() {
9494
rectfill(pos[0] * tileSize, pos[1] * tileSize, tileSize - 1, tileSize - 1, i > 0 ? 2 : 3)
9595
}
9696

97-
rectfill(food[0] * tileSize, food[1] * tileSize, tileSize - 1, tileSize - 1, 4)
97+
rectfill(food[0] * tileSize, food[1] * tileSize, tileSize - 1, tileSize - 1, 1)
9898

9999
textfont('sans-serif')
100100
textalign('right', 'hanging')

src/index.js

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ export default function litecanvas(settings = {}) {
5353
/** @type {HTMLCanvasElement} _canvas */
5454
_canvas,
5555
/** @type {number} */
56-
_scale = 1,
56+
_canvasScale = 1,
5757
/** @type {CanvasRenderingContext2D|OffscreenCanvasRenderingContext2D} */
5858
_ctx,
5959
/** @type {number} */
@@ -145,7 +145,7 @@ export default function litecanvas(settings = {}) {
145145
DEV: assert(isNumber(end), '[litecanvas] lerp() 2nd param must be a number')
146146
DEV: assert(isNumber(t), '[litecanvas] lerp() 3rd param must be a number')
147147

148-
return t * (end - start) + start
148+
return start + t * (end - start)
149149
},
150150

151151
/**
@@ -187,6 +187,7 @@ export default function litecanvas(settings = {}) {
187187
isNumber(precision) && precision >= 0,
188188
'[litecanvas] round() 2nd param must be a positive number or zero'
189189
)
190+
190191
if (!precision) {
191192
return math.round(n)
192193
}
@@ -341,7 +342,7 @@ export default function litecanvas(settings = {}) {
341342
DEV: assert(isNumber(min), '[litecanvas] randi() 1st param must be a number')
342343
DEV: assert(isNumber(max), '[litecanvas] randi() 2nd param must be a number')
343344
DEV: assert(
344-
max > min,
345+
min <= max,
345346
'[litecanvas] randi() the 1st param must be less than the 2nd param'
346347
)
347348

@@ -360,6 +361,7 @@ export default function litecanvas(settings = {}) {
360361
isNumber(value) && value >= 0,
361362
'[litecanvas] rseed() 1st param must be a positive integer or zero'
362363
)
364+
363365
_rngSeed = ~~value
364366
},
365367

@@ -1084,7 +1086,7 @@ export default function litecanvas(settings = {}) {
10841086
_eventListeners[eventName].add(callback)
10851087

10861088
// return a function to remove this event listener
1087-
return () => _eventListeners && _eventListeners[eventName].delete(callback)
1089+
return () => _eventListeners[eventName]?.delete(callback)
10881090
},
10891091

10901092
/**
@@ -1229,7 +1231,7 @@ export default function litecanvas(settings = {}) {
12291231
// 2
12301232
_fpsInterval / 1000,
12311233
// 3
1232-
_scale,
1234+
_canvasScale,
12331235
// 4
12341236
_eventListeners,
12351237
// 5
@@ -1345,8 +1347,8 @@ export default function litecanvas(settings = {}) {
13451347
* @param {MouseEvent | Touch} ev
13461348
*/
13471349
(ev) => [
1348-
(ev.pageX - _canvas.offsetLeft) / _scale,
1349-
(ev.pageY - _canvas.offsetTop) / _scale,
1350+
(ev.pageX - _canvas.offsetLeft) / _canvasScale,
1351+
(ev.pageY - _canvas.offsetTop) / _canvasScale,
13501352
],
13511353
_taps = new Map(),
13521354
_registerTap =
@@ -1595,8 +1597,8 @@ export default function litecanvas(settings = {}) {
15951597

15961598
// start the engine
15971599
_initialized = true
1598-
instance.emit('init', instance)
15991600
instance.resume()
1601+
instance.emit('init', instance)
16001602
}
16011603

16021604
function drawFrame() {
@@ -1695,11 +1697,11 @@ export default function litecanvas(settings = {}) {
16951697
_canvas.style.margin = 'auto'
16961698
}
16971699

1698-
_scale = math.min(innerWidth / width, innerHeight / height)
1699-
_scale = maxScale > 1 && _scale > maxScale ? maxScale : _scale
1700+
_canvasScale = math.min(innerWidth / width, innerHeight / height)
1701+
_canvasScale = maxScale > 1 && _canvasScale > maxScale ? maxScale : _canvasScale
17001702

1701-
_canvas.style.width = width * _scale + 'px'
1702-
_canvas.style.height = height * _scale + 'px'
1703+
_canvas.style.width = width * _canvasScale + 'px'
1704+
_canvas.style.height = height * _canvasScale + 'px'
17031705
}
17041706

17051707
// set canvas image rendering properties
@@ -1710,7 +1712,7 @@ export default function litecanvas(settings = {}) {
17101712

17111713
// trigger "resized" event
17121714
// note: not triggered before the "init" event
1713-
instance.emit('resized', _scale)
1715+
instance.emit('resized', _canvasScale)
17141716
}
17151717

17161718
/**

src/version.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

tests/settings/autoscale.js

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
import test from 'ava'
2+
import litecanvas from '../../src/index.js'
3+
import * as sinon from 'sinon'
4+
5+
test.before(() => {
6+
sinon.stub(console) // silent console
7+
})
8+
9+
test('autoscale on', async (t) => {
10+
const local = litecanvas({
11+
width: innerWidth / 2,
12+
height: innerHeight / 2,
13+
autoscale: true,
14+
global: false,
15+
})
16+
17+
await onLitecanvas(local, 'init', () => {
18+
t.is(+local.canvas().style.width.replace('px', ''), innerWidth)
19+
t.is(local.W, innerWidth / 2)
20+
local.pause()
21+
})
22+
23+
local.quit()
24+
})
25+
26+
test('autoscale off', async (t) => {
27+
const local = litecanvas({
28+
width: innerWidth / 2,
29+
height: innerHeight / 2,
30+
autoscale: false,
31+
global: false,
32+
})
33+
34+
await onLitecanvas(local, 'init', () => {
35+
t.not(+local.canvas().style.width.replace('px', ''), innerWidth)
36+
t.is(local.W, innerWidth / 2)
37+
local.pause()
38+
})
39+
local.quit()
40+
})

0 commit comments

Comments
 (0)