litecanvas 0.39.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/src/palette.js ADDED
@@ -0,0 +1,17 @@
1
+ // Default colors inspired by https://lospec.com/palette-list/trirampo
2
+ export default colors = [
3
+ '#18161c',
4
+ '#6a7799',
5
+ '#aec2c2',
6
+ '#f3eade',
7
+
8
+ '#f04f78',
9
+ '#fcf660',
10
+ '#2f328f',
11
+ '#4b80ca',
12
+
13
+ '#327345',
14
+ '#63c64d',
15
+ '#703075',
16
+ '#a56243',
17
+ ]
package/src/sounds.js ADDED
@@ -0,0 +1,11 @@
1
+ // prettier-ignore
2
+ export default sounds = [
3
+ // 0 - pickup
4
+ [0.8, 0, 2e3, 0.01, 0.05, , 1, 2, , , -600, 0.05, , , , , , 0.5, 0.05],
5
+ // 1 - hit
6
+ [0.5, 0, 375, 0.02, 0.01, 0.2, 1, , , , , , , 0.4, , 0.1, , 0.6, 0.1],
7
+ // 2 - jump
8
+ [, 0, 360, 0.01, , 0.08, 1, 1.7, 12, 32, , , , , , , , 0.63, 0.02, , 99],
9
+ // 3 - warning
10
+ [1.2, 0, 240, 0.02, 0.15, 0.15, 1, 4, , , , , 0.05, , , , , 0.6, 0.15],
11
+ ]
package/src/types.js ADDED
@@ -0,0 +1,62 @@
1
+ /**
2
+ * @typedef LitecanvasOptions
3
+ * @type {object}
4
+ * @property {number} [fps=60] - target FPS
5
+ * @property {boolean} [fullscreen=true]
6
+ * @property {number} [width]
7
+ * @property {number} [height]
8
+ * @property {boolean} [autoscale=true]
9
+ * @property {boolean} [pixelart=false]
10
+ * @property {number} [background]
11
+ * @property {boolean} [antialias=true]
12
+ * @property {string} [canvas]
13
+ * @property {boolean} [global=true]
14
+ * @property {boolean} [tapEvents=true]
15
+ * @property {boolean} [useMouse=false]
16
+ * @property {LitecanvasGameLoop} [loop]
17
+ */
18
+
19
+ /**
20
+ * @typedef LitecanvasInstance
21
+ * @type {object}
22
+ */
23
+
24
+ /**
25
+ * @typedef LitecanvasGameLoop
26
+ * @type {object}
27
+ * @property {() => void} [init]
28
+ * @property {(dt: number) => void} [update]
29
+ * @property {() => void} [draw]
30
+ * @property {() => void} [resized]
31
+ */
32
+
33
+ /**
34
+ * @typedef LitecanvasGameLoopListeners
35
+ * @type {object}
36
+ * @property {Function[]} init
37
+ * @property {Function[]} update
38
+ * @property {Function[]} draw
39
+ * @property {Function[]} resized
40
+ */
41
+
42
+ /**
43
+ * @callback drawCallback
44
+ * @param {OffscreenCanvas} offcanvas
45
+ * @param {CanvasRenderingContext2D} context
46
+ * @returns {void}
47
+ */
48
+
49
+ /**
50
+ * @typedef LitecanvasPluginHelpers
51
+ * @type {object}
52
+ * @property {string[]} colors - the instance color palette
53
+ * @property {number[][]} sounds - the instance ZzFX sounds
54
+ * @property {LitecanvasOptions} settings - an copy of this instance settings
55
+ */
56
+
57
+ /**
58
+ * @callback pluginCallback
59
+ * @param {LitecanvasInstance} instance - The litecanvas instance
60
+ * @param {LitecanvasPluginHelpers} helpers
61
+ * @returns
62
+ */
package/src/zzfx.js ADDED
@@ -0,0 +1,111 @@
1
+ // ZzFXMicro - Zuper Zmall Zound Zynth - v1.3.0 by Frank Force | https://github.com/KilledByAPixel/ZzFX
2
+ zzfxX = new AudioContext() // audio context
3
+ zzfxV = 0.3 // global volume
4
+ zzfx = (
5
+ p = 1,
6
+ k = 0.05,
7
+ b = 220,
8
+ e = 0,
9
+ r = 0,
10
+ t = 0.1,
11
+ q = 0,
12
+ D = 1,
13
+ u = 0,
14
+ y = 0,
15
+ v = 0,
16
+ z = 0,
17
+ l = 0,
18
+ E = 0,
19
+ A = 0,
20
+ F = 0,
21
+ c = 0,
22
+ w = 1,
23
+ m = 0,
24
+ B = 0,
25
+ N = 0,
26
+ ) => {
27
+ let M = Math,
28
+ d = 2 * M.PI,
29
+ R = 44100,
30
+ G = (u *= (500 * d) / R / R),
31
+ C = (b *= ((1 - k + 2 * k * M.random((k = []))) * d) / R),
32
+ g = 0,
33
+ H = 0,
34
+ a = 0,
35
+ n = 1,
36
+ I = 0,
37
+ J = 0,
38
+ f = 0,
39
+ h = N < 0 ? -1 : 1,
40
+ x = (d * h * N * 2) / R,
41
+ L = M.cos(x),
42
+ Z = M.sin,
43
+ K = Z(x) / 4,
44
+ O = 1 + K,
45
+ X = (-2 * L) / O,
46
+ Y = (1 - K) / O,
47
+ P = (1 + h * L) / 2 / O,
48
+ Q = -(h + L) / O,
49
+ S = P,
50
+ T = 0,
51
+ U = 0,
52
+ V = 0,
53
+ W = 0
54
+ e = R * e + 9
55
+ m *= R
56
+ r *= R
57
+ t *= R
58
+ c *= R
59
+ y *= (500 * d) / R ** 3
60
+ A *= d / R
61
+ v *= d / R
62
+ z *= R
63
+ l = (R * l) | 0
64
+ p *= zzfxV
65
+ for (h = (e + m + r + t + c) | 0; a < h; k[a++] = f * p)
66
+ ++J % ((100 * F) | 0) ||
67
+ ((f = q
68
+ ? 1 < q
69
+ ? 2 < q
70
+ ? 3 < q
71
+ ? Z(g * g)
72
+ : M.max(M.min(M.tan(g), 1), -1)
73
+ : 1 - (((((2 * g) / d) % 2) + 2) % 2)
74
+ : 1 - 4 * M.abs(M.round(g / d) - g / d)
75
+ : Z(g)),
76
+ (f =
77
+ (l ? 1 - B + B * Z((d * a) / l) : 1) *
78
+ (f < 0 ? -1 : 1) *
79
+ M.abs(f) ** D *
80
+ (a < e
81
+ ? a / e
82
+ : a < e + m
83
+ ? 1 - ((a - e) / m) * (1 - w)
84
+ : a < e + m + r
85
+ ? w
86
+ : a < h - c
87
+ ? ((h - a - c) / t) * w
88
+ : 0)),
89
+ (f = c
90
+ ? f / 2 +
91
+ (c > a
92
+ ? 0
93
+ : ((a < h - c ? 1 : (h - a) / c) * k[(a - c) | 0]) /
94
+ 2 /
95
+ p)
96
+ : f),
97
+ N
98
+ ? (f = W =
99
+ S * T + Q * (T = U) + P * (U = f) - Y * V - X * (V = W))
100
+ : 0),
101
+ (x = (b += u += y) * M.cos(A * H++)),
102
+ (g += x + x * E * Z(a ** 5)),
103
+ n && ++n > z && ((b += v), (C += v), (n = 0)),
104
+ !l || ++I % l || ((b = C), (u = G), (n = n || 1))
105
+ p = zzfxX.createBuffer(1, h, R)
106
+ p.getChannelData(0).set(k)
107
+ b = zzfxX.createBufferSource()
108
+ b.buffer = p
109
+ b.connect(zzfxX.destination)
110
+ b.start()
111
+ }