@benev/tact 0.1.0-5 → 0.1.1
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/README.md +0 -12
- package/package.json +9 -9
- package/s/core/bindings/parts/defaults.ts +2 -2
- package/s/core/bindings/parts/lens-algo.ts +2 -1
- package/s/core/bindings/resolver.ts +24 -17
- package/s/core/core.test.ts +69 -16
- package/s/core/testing/testing.ts +12 -10
- package/x/core/bindings/parts/defaults.d.ts +1 -1
- package/x/core/bindings/parts/defaults.js +2 -2
- package/x/core/bindings/parts/defaults.js.map +1 -1
- package/x/core/bindings/parts/lens-algo.js +1 -1
- package/x/core/bindings/parts/lens-algo.js.map +1 -1
- package/x/core/bindings/resolver.js +20 -16
- package/x/core/bindings/resolver.js.map +1 -1
- package/x/core/core.test.d.ts +1 -0
- package/x/core/core.test.js +59 -16
- package/x/core/core.test.js.map +1 -1
- package/x/core/devices/infra/group.d.ts +1 -2
- package/x/core/devices/standard/keyboard.d.ts +1 -4
- package/x/core/devices/standard/pointer.d.ts +1 -4
- package/x/core/hub/port.d.ts +2 -3
- package/x/core/testing/testing.d.ts +17 -5
- package/x/core/testing/testing.js +12 -10
- package/x/core/testing/testing.js.map +1 -1
- package/x/deck/deck.d.ts +1 -4
- package/x/deck/parts/catalog.d.ts +1 -2
- package/x/deck/parts/db.d.ts +1 -4
- package/x/deck/parts/overlay-visibility.d.ts +1 -4
- package/x/demo/game/game.d.ts +1 -4
- package/x/demo/main.bundle.min.js +45 -45
- package/x/demo/main.bundle.min.js.map +4 -4
- package/x/demo/ui/theater/view.d.ts +1 -1
- package/x/index.html +20 -20
- package/x/nubs/stick/component.d.ts +1 -1
- package/x/nubs/vpad/component.d.ts +1 -1
package/README.md
CHANGED
|
@@ -1,16 +1,4 @@
|
|
|
1
1
|
|
|
2
|
-
> [!CAUTION]
|
|
3
|
-
> ### 🚨🚨 TACT IS UNDER DEVELOPMENT!! 🚨🚨
|
|
4
|
-
> *everything is half-broken right now.. just gimmie a minute to finish coding this, will ya?*
|
|
5
|
-
|
|
6
|
-
<br></br>
|
|
7
|
-
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
---
|
|
11
|
-
|
|
12
|
-
<br></br>
|
|
13
|
-
|
|
14
2
|
# 🎮 @benev/tact
|
|
15
3
|
> *web game input library, from keypress to couch co-op*
|
|
16
4
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@benev/tact",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.1",
|
|
4
4
|
"description": "keybindings and gamepad support for web games",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Chase Moskal <chasemoskal@gmail.com>",
|
|
@@ -29,21 +29,21 @@
|
|
|
29
29
|
"count": "find s -path '*/_archive' -prune -o -name '*.ts' -exec wc -l {} +"
|
|
30
30
|
},
|
|
31
31
|
"peerDependencies": {
|
|
32
|
-
"lit": "^3.3.
|
|
32
|
+
"lit": "^3.3.2"
|
|
33
33
|
},
|
|
34
34
|
"dependencies": {
|
|
35
|
-
"@benev/math": "^0.2.0
|
|
35
|
+
"@benev/math": "^0.2.0",
|
|
36
36
|
"@e280/kv": "^0.1.0",
|
|
37
|
-
"@e280/sly": "^0.2.
|
|
38
|
-
"@e280/strata": "^0.2.
|
|
39
|
-
"@e280/stz": "^0.2.
|
|
37
|
+
"@e280/sly": "^0.2.5",
|
|
38
|
+
"@e280/strata": "^0.2.8",
|
|
39
|
+
"@e280/stz": "^0.2.24"
|
|
40
40
|
},
|
|
41
41
|
"devDependencies": {
|
|
42
|
-
"@e280/science": "^0.1.
|
|
43
|
-
"@e280/scute": "^0.1.
|
|
42
|
+
"@e280/science": "^0.1.8",
|
|
43
|
+
"@e280/scute": "^0.1.5",
|
|
44
44
|
"http-server": "^14.1.1",
|
|
45
45
|
"npm-run-all": "^4.1.5",
|
|
46
|
-
"typescript": "^5.9.
|
|
46
|
+
"typescript": "^5.9.3"
|
|
47
47
|
},
|
|
48
48
|
"repository": {
|
|
49
49
|
"type": "git",
|
|
@@ -3,10 +3,10 @@ import {Code, CodeSettings, CodeState} from "../types.js"
|
|
|
3
3
|
|
|
4
4
|
export const defaultHoldTime = 250
|
|
5
5
|
|
|
6
|
-
export function defaultCodeState([,,settings]: Code): CodeState {
|
|
6
|
+
export function defaultCodeState([,,settings]: Code, now: number): CodeState {
|
|
7
7
|
return {
|
|
8
8
|
lastValue: 0,
|
|
9
|
-
holdStart:
|
|
9
|
+
holdStart: now,
|
|
10
10
|
settings: defaultifyCodeSettings(settings),
|
|
11
11
|
}
|
|
12
12
|
}
|
|
@@ -54,11 +54,12 @@ export const lensAlgo = (
|
|
|
54
54
|
|
|
55
55
|
const isFreshlyPressed = !isPressed(state.lastValue) && isPressed(value)
|
|
56
56
|
const isFreshlyReleased = isPressed(state.lastValue) && !isPressed(value)
|
|
57
|
-
const isHolding = (now - state.holdStart) >= holdTime
|
|
58
57
|
|
|
59
58
|
if (isFreshlyPressed)
|
|
60
59
|
state.holdStart = now
|
|
61
60
|
|
|
61
|
+
const isHolding = (now - state.holdStart) >= holdTime
|
|
62
|
+
|
|
62
63
|
state.lastValue = value
|
|
63
64
|
|
|
64
65
|
switch (settings.timing[0]) {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
import {
|
|
2
|
+
import {pub, obMap, GMap} from "@e280/stz"
|
|
3
3
|
import {Action} from "./action.js"
|
|
4
4
|
import {SampleMap} from "./sample-map.js"
|
|
5
5
|
import {lensAlgo} from "./parts/lens-algo.js"
|
|
@@ -12,7 +12,7 @@ export class Resolver<B extends Bindings> {
|
|
|
12
12
|
#modes = new Set<keyof B>()
|
|
13
13
|
#sampleMap = new SampleMap()
|
|
14
14
|
#now = 0
|
|
15
|
-
#codeStates = new
|
|
15
|
+
#codeStates = new GMap<string, CodeState>()
|
|
16
16
|
#update = pub()
|
|
17
17
|
|
|
18
18
|
constructor(public bindings: B) {
|
|
@@ -20,7 +20,7 @@ export class Resolver<B extends Bindings> {
|
|
|
20
20
|
const action = new Action()
|
|
21
21
|
this.#update.subscribe(() => {
|
|
22
22
|
action.value = this.#modes.has(mode)
|
|
23
|
-
? this.#resolveAtom()(atom)
|
|
23
|
+
? this.#resolveAtom([])(atom, mode as string)
|
|
24
24
|
: 0
|
|
25
25
|
})
|
|
26
26
|
return action
|
|
@@ -35,24 +35,31 @@ export class Resolver<B extends Bindings> {
|
|
|
35
35
|
return this.actions
|
|
36
36
|
}
|
|
37
37
|
|
|
38
|
-
#resolveCode(
|
|
38
|
+
#resolveCode(path: string[], code: string, settings?: Partial<CodeSettings>) {
|
|
39
39
|
const state = this.#codeStates.guarantee(
|
|
40
|
-
|
|
41
|
-
() => defaultCodeState(["code", code, settings]),
|
|
40
|
+
path.join("/"),
|
|
41
|
+
() => defaultCodeState(["code", code, settings], this.#now),
|
|
42
42
|
)
|
|
43
43
|
const value = this.#sampleMap.get(code) ?? 0
|
|
44
44
|
return lensAlgo(this.#now, state, value)
|
|
45
45
|
}
|
|
46
46
|
|
|
47
|
-
#resolveAtom = (
|
|
48
|
-
const
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
47
|
+
#resolveAtom = (path: string[]) => (atom: Atom, zone: string | number): number => {
|
|
48
|
+
const nextPath = [
|
|
49
|
+
...path,
|
|
50
|
+
String(zone),
|
|
51
|
+
typeof atom === "string" ? atom : atom[0],
|
|
52
|
+
]
|
|
53
|
+
|
|
54
|
+
const resolveAtom = this.#resolveAtom(nextPath)
|
|
55
|
+
|
|
56
|
+
if (typeof atom === "string")
|
|
57
|
+
return this.#resolveCode(nextPath, atom)
|
|
58
|
+
|
|
52
59
|
else switch (atom[0]) {
|
|
53
60
|
case "code": {
|
|
54
61
|
const [, code, settings] = atom
|
|
55
|
-
return this.#resolveCode(
|
|
62
|
+
return this.#resolveCode(nextPath, code, settings)
|
|
56
63
|
}
|
|
57
64
|
case "and": {
|
|
58
65
|
const [,...atoms] = atom
|
|
@@ -66,13 +73,13 @@ export class Resolver<B extends Bindings> {
|
|
|
66
73
|
}
|
|
67
74
|
case "not": {
|
|
68
75
|
const [, subject] = atom
|
|
69
|
-
const value = resolveAtom(subject)
|
|
76
|
+
const value = resolveAtom(subject, "subject")
|
|
70
77
|
return (value > 0) ? 0 : 1
|
|
71
78
|
}
|
|
72
79
|
case "cond": {
|
|
73
80
|
const [, subject, guard] = atom
|
|
74
|
-
return (resolveAtom(guard) > 0)
|
|
75
|
-
? resolveAtom(subject)
|
|
81
|
+
return (resolveAtom(guard, "guard") > 0)
|
|
82
|
+
? resolveAtom(subject, "subject")
|
|
76
83
|
: 0
|
|
77
84
|
}
|
|
78
85
|
case "mods": {
|
|
@@ -85,9 +92,9 @@ export class Resolver<B extends Bindings> {
|
|
|
85
92
|
maybe(modifiers.alt ?? false, "AltLeft", "AltRight"),
|
|
86
93
|
maybe(modifiers.meta ?? false, "MetaLeft", "MetaRight"),
|
|
87
94
|
maybe(modifiers.shift ?? false, "ShiftLeft", "ShiftRight"),
|
|
88
|
-
]])
|
|
95
|
+
]], "guard")
|
|
89
96
|
return (guard > 0)
|
|
90
|
-
? resolveAtom(subject)
|
|
97
|
+
? resolveAtom(subject, "subject")
|
|
91
98
|
: 0
|
|
92
99
|
}
|
|
93
100
|
}
|
package/s/core/core.test.ts
CHANGED
|
@@ -6,16 +6,16 @@ import {testPlug, testSetupAlpha, testSetupBravo} from "./testing/testing.js"
|
|
|
6
6
|
|
|
7
7
|
export default Science.suite({
|
|
8
8
|
"sample to action value": test(async() => {
|
|
9
|
-
const {
|
|
9
|
+
const {clock, device, resolve} = testSetupAlpha()
|
|
10
10
|
{
|
|
11
|
-
|
|
11
|
+
clock.frame = 1
|
|
12
12
|
device.setSample("Space", 1)
|
|
13
13
|
const actions = resolve()
|
|
14
14
|
expect(actions.basic.jump.value).is(1)
|
|
15
15
|
expect(actions.basic.shoot.value).is(0)
|
|
16
16
|
}
|
|
17
17
|
{
|
|
18
|
-
|
|
18
|
+
clock.frame = 2
|
|
19
19
|
device.setSample("Space", 2)
|
|
20
20
|
device.setSample("pointer.button.left", 3)
|
|
21
21
|
const actions = resolve()
|
|
@@ -24,75 +24,128 @@ export default Science.suite({
|
|
|
24
24
|
}
|
|
25
25
|
}),
|
|
26
26
|
|
|
27
|
+
"hold timing and behavior": test(async() => {
|
|
28
|
+
const {clock, device, resolve, actions} = testSetupAlpha()
|
|
29
|
+
const proceed = (options: {time: number, value: number}) => {
|
|
30
|
+
clock.time = options.time
|
|
31
|
+
device.setSample("KeyG", options.value)
|
|
32
|
+
resolve()
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
let count = 0
|
|
36
|
+
actions.basic.grenade.onDown(() => { count++ })
|
|
37
|
+
const getValue = () => actions.basic.grenade.value
|
|
38
|
+
|
|
39
|
+
// start doing nothing
|
|
40
|
+
proceed({time: 0, value: 0})
|
|
41
|
+
expect(getValue()).is(0)
|
|
42
|
+
expect(count).is(0)
|
|
43
|
+
|
|
44
|
+
// start holding
|
|
45
|
+
proceed({time: 10, value: 1})
|
|
46
|
+
expect(getValue()).is(0)
|
|
47
|
+
expect(count).is(0)
|
|
48
|
+
|
|
49
|
+
// keep holding
|
|
50
|
+
proceed({time: 20, value: 1})
|
|
51
|
+
expect(getValue()).is(0)
|
|
52
|
+
expect(count).is(0)
|
|
53
|
+
|
|
54
|
+
// held long enough to trigger down
|
|
55
|
+
proceed({time: 210, value: 1})
|
|
56
|
+
expect(getValue()).is(1)
|
|
57
|
+
expect(count).is(1)
|
|
58
|
+
|
|
59
|
+
// release, shouldn't trigger new down
|
|
60
|
+
proceed({time: 220, value: 0})
|
|
61
|
+
expect(getValue()).is(0)
|
|
62
|
+
expect(count).is(1)
|
|
63
|
+
|
|
64
|
+
// start holding again
|
|
65
|
+
proceed({time: 230, value: 1})
|
|
66
|
+
expect(getValue()).is(0)
|
|
67
|
+
expect(count).is(1)
|
|
68
|
+
|
|
69
|
+
// keep holding again
|
|
70
|
+
proceed({time: 330, value: 1})
|
|
71
|
+
expect(getValue()).is(0)
|
|
72
|
+
expect(count).is(1)
|
|
73
|
+
|
|
74
|
+
// held long enough again to trigger down
|
|
75
|
+
proceed({time: 430, value: 1})
|
|
76
|
+
expect(getValue()).is(1)
|
|
77
|
+
expect(count).is(2)
|
|
78
|
+
}),
|
|
79
|
+
|
|
27
80
|
"hub": Science.suite({
|
|
28
81
|
"device inputs work": test(async() => {
|
|
29
|
-
const {hub,
|
|
82
|
+
const {hub, clock} = testSetupBravo()
|
|
30
83
|
const d1 = testPlug(hub, new SamplerDevice())
|
|
31
84
|
d1.setSample("Space", 1)
|
|
32
|
-
const [p1, p2] = hub.poll(time
|
|
85
|
+
const [p1, p2] = hub.poll(clock.time)
|
|
33
86
|
expect(p1.actions.basic.jump.value).is(1)
|
|
34
87
|
expect(p2.actions.basic.jump.value).is(0)
|
|
35
88
|
}),
|
|
36
89
|
|
|
37
90
|
"reveal overlay works": test(async() => {
|
|
38
|
-
const {hub,
|
|
91
|
+
const {hub, clock} = testSetupBravo()
|
|
39
92
|
const d1 = testPlug(hub, new SamplerDevice())
|
|
40
93
|
d1.setSample("Backslash", 1)
|
|
41
|
-
hub.poll(time
|
|
94
|
+
hub.poll(clock.time)
|
|
42
95
|
expect(hub.metaPort.actions[metaMode].revealOverlay.value)
|
|
43
96
|
.is(1)
|
|
44
97
|
}),
|
|
45
98
|
|
|
46
99
|
"two devices playing on separate ports": test(async() => {
|
|
47
|
-
const {hub,
|
|
100
|
+
const {hub, clock} = testSetupBravo()
|
|
48
101
|
const c1 = testPlug(hub, new SamplerDevice())
|
|
49
102
|
const c2 = testPlug(hub, new SamplerDevice())
|
|
50
103
|
c1.setSample("Space", 1)
|
|
51
104
|
c2.setSample("Space", 2)
|
|
52
|
-
const [p1, p2] = hub.poll(time
|
|
105
|
+
const [p1, p2] = hub.poll(clock.time)
|
|
53
106
|
expect(p1.actions.basic.jump.value).is(1)
|
|
54
107
|
expect(p2.actions.basic.jump.value).is(2)
|
|
55
108
|
}),
|
|
56
109
|
|
|
57
110
|
"device can shimmy": test(async() => {
|
|
58
|
-
const {hub,
|
|
111
|
+
const {hub, clock} = testSetupBravo()
|
|
59
112
|
const c1 = testPlug(hub, new SamplerDevice())
|
|
60
113
|
hub.shimmy(c1, 1)
|
|
61
114
|
c1.setSample("Space", 1)
|
|
62
|
-
const [p1, p2] = hub.poll(time
|
|
115
|
+
const [p1, p2] = hub.poll(clock.time)
|
|
63
116
|
expect(p1.actions.basic.jump.value).is(0)
|
|
64
117
|
expect(p2.actions.basic.jump.value).is(1)
|
|
65
118
|
}),
|
|
66
119
|
|
|
67
120
|
"two devices can share a port": test(async() => {
|
|
68
|
-
const {hub,
|
|
121
|
+
const {hub, clock} = testSetupBravo()
|
|
69
122
|
const c1 = testPlug(hub, new SamplerDevice())
|
|
70
123
|
const c2 = testPlug(hub, new SamplerDevice())
|
|
71
124
|
hub.shimmy(c2, -1)
|
|
72
125
|
expect(hub.portByDevice(c1)).is(hub.portByDevice(c2))
|
|
73
126
|
{
|
|
74
127
|
c1.setSample("Space", 1)
|
|
75
|
-
const [p1, p2] = hub.poll(time
|
|
128
|
+
const [p1, p2] = hub.poll(clock.time)
|
|
76
129
|
expect(p1.actions.basic.jump.value).is(1)
|
|
77
130
|
expect(p2.actions.basic.jump.value).is(0)
|
|
78
131
|
}
|
|
79
132
|
{
|
|
80
133
|
c2.setSample("Space", 1)
|
|
81
|
-
const [p1, p2] = hub.poll(time
|
|
134
|
+
const [p1, p2] = hub.poll(clock.time)
|
|
82
135
|
expect(p1.actions.basic.jump.value).is(1)
|
|
83
136
|
expect(p2.actions.basic.jump.value).is(0)
|
|
84
137
|
}
|
|
85
138
|
{
|
|
86
139
|
c1.setSample("Space", 1)
|
|
87
140
|
c2.setSample("Space", 2)
|
|
88
|
-
const [p1, p2] = hub.poll(time
|
|
141
|
+
const [p1, p2] = hub.poll(clock.time)
|
|
89
142
|
expect(p1.actions.basic.jump.value).is(2)
|
|
90
143
|
expect(p2.actions.basic.jump.value).is(0)
|
|
91
144
|
}
|
|
92
145
|
{
|
|
93
146
|
c1.setSample("Space", 2)
|
|
94
147
|
c2.setSample("Space", 1)
|
|
95
|
-
const [p1, p2] = hub.poll(time
|
|
148
|
+
const [p1, p2] = hub.poll(clock.time)
|
|
96
149
|
expect(p1.actions.basic.jump.value).is(2)
|
|
97
150
|
expect(p2.actions.basic.jump.value).is(0)
|
|
98
151
|
}
|
|
@@ -2,16 +2,16 @@
|
|
|
2
2
|
import {Hub} from "../hub/hub.js"
|
|
3
3
|
import {Port} from "../hub/port.js"
|
|
4
4
|
import {Device} from "../devices/device.js"
|
|
5
|
-
import {asBindings} from "../bindings/types.js"
|
|
6
5
|
import {Resolver} from "../bindings/resolver.js"
|
|
7
6
|
import {SampleMap} from "../bindings/sample-map.js"
|
|
7
|
+
import {asBindings, Code} from "../bindings/types.js"
|
|
8
8
|
import {SamplerDevice} from "../devices/infra/sampler.js"
|
|
9
9
|
|
|
10
|
-
export class
|
|
11
|
-
|
|
10
|
+
export class TestClock {
|
|
11
|
+
time = 0
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
|
|
13
|
+
set frame(frame: number) {
|
|
14
|
+
this.time = frame * (1000 / 60)
|
|
15
15
|
}
|
|
16
16
|
}
|
|
17
17
|
|
|
@@ -20,6 +20,7 @@ export function testBindings() {
|
|
|
20
20
|
basic: {
|
|
21
21
|
jump: "Space",
|
|
22
22
|
shoot: "pointer.button.left",
|
|
23
|
+
grenade: <Code>["code", "KeyG", {timing: ["hold", 200]}]
|
|
23
24
|
},
|
|
24
25
|
})
|
|
25
26
|
}
|
|
@@ -30,26 +31,27 @@ export function testPlug<C extends Device>(hub: Hub<any>, device: C) {
|
|
|
30
31
|
}
|
|
31
32
|
|
|
32
33
|
export function testSetupAlpha() {
|
|
33
|
-
const
|
|
34
|
+
const clock = new TestClock()
|
|
34
35
|
const device = new SamplerDevice()
|
|
35
36
|
const resolver = new Resolver(testBindings())
|
|
36
37
|
const modes = new Set(Object.keys(resolver.bindings))
|
|
38
|
+
const actions = resolver.actions
|
|
37
39
|
const resolve = () => resolver.resolve(
|
|
38
|
-
time
|
|
40
|
+
clock.time,
|
|
39
41
|
modes as any,
|
|
40
42
|
new SampleMap(device.samples())
|
|
41
43
|
)
|
|
42
|
-
return {device, resolver, resolve,
|
|
44
|
+
return {device, resolver, resolve, clock, actions}
|
|
43
45
|
}
|
|
44
46
|
|
|
45
47
|
export function testSetupBravo() {
|
|
46
|
-
const
|
|
48
|
+
const clock = new TestClock()
|
|
47
49
|
const port = () => {
|
|
48
50
|
const port = new Port(testBindings())
|
|
49
51
|
port.modes.adds("basic")
|
|
50
52
|
return port
|
|
51
53
|
}
|
|
52
54
|
const hub = new Hub([port(), port(), port(), port()])
|
|
53
|
-
return {hub,
|
|
55
|
+
return {hub, clock}
|
|
54
56
|
}
|
|
55
57
|
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
export const defaultHoldTime = 250;
|
|
2
|
-
export function defaultCodeState([, , settings]) {
|
|
2
|
+
export function defaultCodeState([, , settings], now) {
|
|
3
3
|
return {
|
|
4
4
|
lastValue: 0,
|
|
5
|
-
holdStart:
|
|
5
|
+
holdStart: now,
|
|
6
6
|
settings: defaultifyCodeSettings(settings),
|
|
7
7
|
};
|
|
8
8
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../../../s/core/bindings/parts/defaults.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,eAAe,GAAG,GAAG,CAAA;AAElC,MAAM,UAAU,gBAAgB,CAAC,CAAC,EAAC,EAAC,QAAQ,CAAO;
|
|
1
|
+
{"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../../../s/core/bindings/parts/defaults.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,eAAe,GAAG,GAAG,CAAA;AAElC,MAAM,UAAU,gBAAgB,CAAC,CAAC,EAAC,EAAC,QAAQ,CAAO,EAAE,GAAW;IAC/D,OAAO;QACN,SAAS,EAAE,CAAC;QACZ,SAAS,EAAE,GAAG;QACd,QAAQ,EAAE,sBAAsB,CAAC,QAAQ,CAAC;KAC1C,CAAA;AACF,CAAC;AAED,SAAS,mBAAmB;IAC3B,OAAO;QACN,KAAK,EAAE,CAAC;QACR,MAAM,EAAE,KAAK;QACb,KAAK,EAAE,IAAI;QACX,KAAK,EAAE,IAAI;QACX,MAAM,EAAE,IAAI;QACZ,GAAG,EAAE,IAAI;QACT,MAAM,EAAE,CAAC,QAAQ,CAAC;KAClB,CAAA;AACF,CAAC;AAED,SAAS,sBAAsB,CAAC,UAAiC,EAAE;IAClE,OAAO;QACN,GAAG,mBAAmB,EAAE;QACxB,GAAG,OAAO;KACV,CAAA;AACF,CAAC"}
|
|
@@ -32,9 +32,9 @@ export const lensAlgo = (now, state, v) => pipe(v).line(function clippings(value
|
|
|
32
32
|
: settings.timing[1]) ?? defaultHoldTime;
|
|
33
33
|
const isFreshlyPressed = !isPressed(state.lastValue) && isPressed(value);
|
|
34
34
|
const isFreshlyReleased = isPressed(state.lastValue) && !isPressed(value);
|
|
35
|
-
const isHolding = (now - state.holdStart) >= holdTime;
|
|
36
35
|
if (isFreshlyPressed)
|
|
37
36
|
state.holdStart = now;
|
|
37
|
+
const isHolding = (now - state.holdStart) >= holdTime;
|
|
38
38
|
state.lastValue = value;
|
|
39
39
|
switch (settings.timing[0]) {
|
|
40
40
|
case "direct":
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lens-algo.js","sourceRoot":"","sources":["../../../../s/core/bindings/parts/lens-algo.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,IAAI,EAAC,MAAM,WAAW,CAAA;AAC9B,OAAO,EAAC,MAAM,EAAC,MAAM,aAAa,CAAA;AAElC,OAAO,EAAC,SAAS,EAAC,MAAM,iBAAiB,CAAA;AACzC,OAAO,EAAC,eAAe,EAAC,MAAM,eAAe,CAAA;AAE7C,MAAM,CAAC,MAAM,QAAQ,GAAG,CACtB,GAAW,EACX,KAAgB,EAChB,CAAS,EACR,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAEjB,SAAS,SAAS,CAAC,KAAK;IACvB,MAAM,EAAC,QAAQ,EAAC,GAAG,KAAK,CAAA;IACxB,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;QACpB,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAA;QACpC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,CAAA;IACzC,CAAC;IACD,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;QACpB,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAA;QACpC,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC;YAC3C,CAAC,CAAC,MAAM,CAAC,KAAK,CACb,KAAK,EACL,MAAM,EAAE,GAAG,EACX,CAAC,EAAE,CAAC,EACJ,IAAI,CACJ;YACD,CAAC,CAAC,CAAC,CAAA;IACL,CAAC;IACD,IAAI,QAAQ,CAAC,MAAM;QAAE,KAAK,GAAG,CAAC,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;IAClE,IAAI,QAAQ,CAAC,GAAG;QAAE,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;IACvD,OAAO,KAAK,CAAA;AACb,CAAC,EAED,SAAS,SAAS,CAAC,KAAK;IACvB,OAAO,KAAK,CAAC,QAAQ,CAAC,MAAM;QAC3B,CAAC,CAAC,CAAC,GAAG,KAAK;QACX,CAAC,CAAC,KAAK,CAAA;AACT,CAAC,EAED,SAAS,OAAO,CAAC,KAAK;IACrB,OAAO,KAAK,CAAC,QAAQ,CAAC,KAAK,GAAG,KAAK,CAAA;AACpC,CAAC,EAED,SAAS,MAAM,CAAC,KAAK;IACpB,MAAM,EAAC,QAAQ,EAAC,GAAG,KAAK,CAAA;IAExB,MAAM,QAAQ,GAAG,CAChB,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,QAAQ;QAC9B,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CACrB,IAAI,eAAe,CAAA;IAEpB,MAAM,gBAAgB,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,KAAK,CAAC,CAAA;IACxE,MAAM,iBAAiB,GAAG,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"lens-algo.js","sourceRoot":"","sources":["../../../../s/core/bindings/parts/lens-algo.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { pub, obMap, GMap } from "@e280/stz";
|
|
2
2
|
import { Action } from "./action.js";
|
|
3
3
|
import { SampleMap } from "./sample-map.js";
|
|
4
4
|
import { lensAlgo } from "./parts/lens-algo.js";
|
|
@@ -10,7 +10,7 @@ export class Resolver {
|
|
|
10
10
|
#modes = new Set();
|
|
11
11
|
#sampleMap = new SampleMap();
|
|
12
12
|
#now = 0;
|
|
13
|
-
#codeStates = new
|
|
13
|
+
#codeStates = new GMap();
|
|
14
14
|
#update = pub();
|
|
15
15
|
constructor(bindings) {
|
|
16
16
|
this.bindings = bindings;
|
|
@@ -18,7 +18,7 @@ export class Resolver {
|
|
|
18
18
|
const action = new Action();
|
|
19
19
|
this.#update.subscribe(() => {
|
|
20
20
|
action.value = this.#modes.has(mode)
|
|
21
|
-
? this.#resolveAtom()(atom)
|
|
21
|
+
? this.#resolveAtom([])(atom, mode)
|
|
22
22
|
: 0;
|
|
23
23
|
});
|
|
24
24
|
return action;
|
|
@@ -31,21 +31,25 @@ export class Resolver {
|
|
|
31
31
|
this.#update();
|
|
32
32
|
return this.actions;
|
|
33
33
|
}
|
|
34
|
-
#resolveCode(
|
|
35
|
-
const state = this.#codeStates.guarantee(
|
|
34
|
+
#resolveCode(path, code, settings) {
|
|
35
|
+
const state = this.#codeStates.guarantee(path.join("/"), () => defaultCodeState(["code", code, settings], this.#now));
|
|
36
36
|
const value = this.#sampleMap.get(code) ?? 0;
|
|
37
37
|
return lensAlgo(this.#now, state, value);
|
|
38
38
|
}
|
|
39
|
-
#resolveAtom = (
|
|
40
|
-
const
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
39
|
+
#resolveAtom = (path) => (atom, zone) => {
|
|
40
|
+
const nextPath = [
|
|
41
|
+
...path,
|
|
42
|
+
String(zone),
|
|
43
|
+
typeof atom === "string" ? atom : atom[0],
|
|
44
|
+
];
|
|
45
|
+
const resolveAtom = this.#resolveAtom(nextPath);
|
|
46
|
+
if (typeof atom === "string")
|
|
47
|
+
return this.#resolveCode(nextPath, atom);
|
|
44
48
|
else
|
|
45
49
|
switch (atom[0]) {
|
|
46
50
|
case "code": {
|
|
47
51
|
const [, code, settings] = atom;
|
|
48
|
-
return this.#resolveCode(
|
|
52
|
+
return this.#resolveCode(nextPath, code, settings);
|
|
49
53
|
}
|
|
50
54
|
case "and": {
|
|
51
55
|
const [, ...atoms] = atom;
|
|
@@ -59,13 +63,13 @@ export class Resolver {
|
|
|
59
63
|
}
|
|
60
64
|
case "not": {
|
|
61
65
|
const [, subject] = atom;
|
|
62
|
-
const value = resolveAtom(subject);
|
|
66
|
+
const value = resolveAtom(subject, "subject");
|
|
63
67
|
return (value > 0) ? 0 : 1;
|
|
64
68
|
}
|
|
65
69
|
case "cond": {
|
|
66
70
|
const [, subject, guard] = atom;
|
|
67
|
-
return (resolveAtom(guard) > 0)
|
|
68
|
-
? resolveAtom(subject)
|
|
71
|
+
return (resolveAtom(guard, "guard") > 0)
|
|
72
|
+
? resolveAtom(subject, "subject")
|
|
69
73
|
: 0;
|
|
70
74
|
}
|
|
71
75
|
case "mods": {
|
|
@@ -78,9 +82,9 @@ export class Resolver {
|
|
|
78
82
|
maybe(modifiers.alt ?? false, "AltLeft", "AltRight"),
|
|
79
83
|
maybe(modifiers.meta ?? false, "MetaLeft", "MetaRight"),
|
|
80
84
|
maybe(modifiers.shift ?? false, "ShiftLeft", "ShiftRight"),
|
|
81
|
-
]]);
|
|
85
|
+
]], "guard");
|
|
82
86
|
return (guard > 0)
|
|
83
|
-
? resolveAtom(subject)
|
|
87
|
+
? resolveAtom(subject, "subject")
|
|
84
88
|
: 0;
|
|
85
89
|
}
|
|
86
90
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolver.js","sourceRoot":"","sources":["../../../s/core/bindings/resolver.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,
|
|
1
|
+
{"version":3,"file":"resolver.js","sourceRoot":"","sources":["../../../s/core/bindings/resolver.ts"],"names":[],"mappings":"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"}
|
package/x/core/core.test.d.ts
CHANGED