@benev/tact 0.1.0-1 → 0.1.0-3
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 +265 -140
- package/package.json +5 -3
- package/s/{station/parts → core/bindings}/action.ts +3 -9
- package/s/core/bindings/parts/defaults.ts +29 -0
- package/s/{station/parts/routines/lensing_algorithm.ts → core/bindings/parts/lens-algo.ts} +15 -14
- package/s/core/bindings/resolver.ts +96 -0
- package/s/core/bindings/types.ts +57 -0
- package/s/core/controllers/controller.ts +7 -0
- package/s/core/controllers/infra/group.ts +17 -0
- package/s/{station/devices → core/controllers}/infra/sampler.ts +3 -3
- package/s/{station/devices → core/controllers/standard}/gamepad.ts +5 -9
- package/s/core/controllers/standard/index.ts +7 -0
- package/s/{station/devices → core/controllers/standard}/keyboard.ts +3 -6
- package/s/{station/devices → core/controllers/standard}/pointer.ts +31 -37
- package/s/{nubs/stick/device.ts → core/controllers/standard/stick.ts} +3 -3
- package/s/{nubs/virtual-gamepad/device.ts → core/controllers/standard/virtual-gamepad.ts} +5 -5
- package/s/core/controllers/types.ts +4 -0
- package/s/core/core.test.ts +90 -0
- package/s/core/deck/deck.ts +40 -0
- package/s/core/deck/parts/bindings-depot.ts +24 -0
- package/s/core/deck/parts/local-storage-kv.ts +7 -0
- package/s/core/hub/auto-gamepads.ts +8 -0
- package/s/core/hub/bindings.ts +18 -0
- package/s/core/hub/hub.ts +102 -0
- package/s/core/hub/types.ts +14 -0
- package/s/core/index.ts +21 -0
- package/s/core/port/port.ts +34 -0
- package/s/core/port/utils/aggregate_samples_into_map.ts +20 -0
- package/s/core/port/utils/wipe_samples_map.ts +8 -0
- package/s/core/testing/testing.ts +50 -0
- package/s/demo/main.bundle.ts +2 -2
- package/s/index.ts +1 -11
- package/s/nubs/stick/view.ts +2 -2
- package/s/nubs/virtual-gamepad/view.ts +6 -6
- package/s/tests.test.ts +2 -4
- package/s/{station/utils/tmin.ts → utils/quick-math.ts} +6 -0
- package/x/{station/parts → core/bindings}/action.d.ts +1 -3
- package/x/{station/parts → core/bindings}/action.js +3 -10
- package/x/core/bindings/action.js.map +1 -0
- package/x/core/bindings/parts/defaults.d.ts +3 -0
- package/x/core/bindings/parts/defaults.js +23 -0
- package/x/core/bindings/parts/defaults.js.map +1 -0
- package/x/core/bindings/parts/is-pressed.js.map +1 -0
- package/x/core/bindings/parts/lens-algo.d.ts +2 -0
- package/x/{station/parts/routines/lensing_algorithm.js → core/bindings/parts/lens-algo.js} +12 -11
- package/x/core/bindings/parts/lens-algo.js.map +1 -0
- package/x/core/bindings/resolver.d.ts +8 -0
- package/x/core/bindings/resolver.js +87 -0
- package/x/core/bindings/resolver.js.map +1 -0
- package/x/core/bindings/types.d.ts +38 -0
- package/x/core/bindings/types.js +4 -0
- package/x/core/bindings/types.js.map +1 -0
- package/x/core/controllers/controller.d.ts +4 -0
- package/x/core/controllers/controller.js +3 -0
- package/x/core/controllers/controller.js.map +1 -0
- package/x/core/controllers/infra/group.d.ts +7 -0
- package/x/core/controllers/infra/group.js +13 -0
- package/x/core/controllers/infra/group.js.map +1 -0
- package/x/core/controllers/infra/sampler.d.ts +8 -0
- package/x/{station/devices → core/controllers}/infra/sampler.js +2 -2
- package/x/core/controllers/infra/sampler.js.map +1 -0
- package/x/core/controllers/standard/gamepad.d.ts +9 -0
- package/x/{station/devices → core/controllers/standard}/gamepad.js +4 -8
- package/x/core/controllers/standard/gamepad.js.map +1 -0
- package/x/core/controllers/standard/index.d.ts +5 -0
- package/x/core/controllers/standard/index.js +6 -0
- package/x/core/controllers/standard/index.js.map +1 -0
- package/x/{station/devices → core/controllers/standard}/keyboard.d.ts +3 -3
- package/x/{station/devices → core/controllers/standard}/keyboard.js +3 -6
- package/x/core/controllers/standard/keyboard.js.map +1 -0
- package/x/{station/devices → core/controllers/standard}/pointer.d.ts +3 -3
- package/x/{station/devices → core/controllers/standard}/pointer.js +26 -31
- package/x/core/controllers/standard/pointer.js.map +1 -0
- package/x/{nubs/stick/device.d.ts → core/controllers/standard/stick.d.ts} +2 -2
- package/x/{nubs/stick/device.js → core/controllers/standard/stick.js} +4 -4
- package/x/core/controllers/standard/stick.js.map +1 -0
- package/x/core/controllers/standard/virtual-gamepad.d.ts +7 -0
- package/x/{nubs/virtual-gamepad/device.js → core/controllers/standard/virtual-gamepad.js} +6 -6
- package/x/core/controllers/standard/virtual-gamepad.js.map +1 -0
- package/x/core/controllers/types.d.ts +2 -0
- package/x/core/controllers/types.js +2 -0
- package/x/core/controllers/types.js.map +1 -0
- package/x/core/core.test.d.ts +11 -0
- package/x/core/core.test.js +84 -0
- package/x/core/core.test.js.map +1 -0
- package/x/core/deck/deck.d.ts +16 -0
- package/x/core/deck/deck.js +31 -0
- package/x/core/deck/deck.js.map +1 -0
- package/x/core/deck/parts/bindings-depot.d.ts +9 -0
- package/x/core/deck/parts/bindings-depot.js +19 -0
- package/x/core/deck/parts/bindings-depot.js.map +1 -0
- package/x/core/deck/parts/local-storage-kv.d.ts +2 -0
- package/x/core/deck/parts/local-storage-kv.js +5 -0
- package/x/core/deck/parts/local-storage-kv.js.map +1 -0
- package/x/core/hub/auto-gamepads.d.ts +2 -0
- package/x/core/hub/auto-gamepads.js +6 -0
- package/x/core/hub/auto-gamepads.js.map +1 -0
- package/x/core/hub/bindings.d.ts +2 -0
- package/x/core/hub/bindings.js +16 -0
- package/x/core/hub/bindings.js.map +1 -0
- package/x/core/hub/hub.d.ts +28 -0
- package/x/core/hub/hub.js +91 -0
- package/x/core/hub/hub.js.map +1 -0
- package/x/core/hub/types.d.ts +9 -0
- package/x/core/hub/types.js +2 -0
- package/x/core/hub/types.js.map +1 -0
- package/x/core/index.d.ts +15 -0
- package/x/core/index.js +16 -0
- package/x/core/index.js.map +1 -0
- package/x/core/port/port.d.ts +12 -0
- package/x/core/port/port.js +25 -0
- package/x/core/port/port.js.map +1 -0
- package/x/core/port/utils/aggregate_samples_into_map.d.ts +3 -0
- package/x/core/port/utils/aggregate_samples_into_map.js +11 -0
- package/x/core/port/utils/aggregate_samples_into_map.js.map +1 -0
- package/x/core/port/utils/wipe_samples_map.d.ts +2 -0
- package/x/core/port/utils/wipe_samples_map.js +5 -0
- package/x/core/port/utils/wipe_samples_map.js.map +1 -0
- package/x/core/testing/testing.d.ts +38 -0
- package/x/core/testing/testing.js +42 -0
- package/x/core/testing/testing.js.map +1 -0
- package/x/demo/main.bundle.js +2 -2
- package/x/demo/main.bundle.js.map +1 -1
- package/x/demo/main.bundle.min.js +1 -1
- package/x/demo/main.bundle.min.js.map +4 -4
- package/x/index.d.ts +1 -11
- package/x/index.html +3 -3
- package/x/index.js +1 -11
- package/x/index.js.map +1 -1
- package/x/nubs/stick/view.d.ts +2 -2
- package/x/nubs/stick/view.js.map +1 -1
- package/x/nubs/virtual-gamepad/view.d.ts +2 -2
- package/x/nubs/virtual-gamepad/view.js +5 -5
- package/x/nubs/virtual-gamepad/view.js.map +1 -1
- package/x/tests.test.js +2 -4
- package/x/tests.test.js.map +1 -1
- package/x/{station/utils/tmax.d.ts → utils/quick-math.d.ts} +1 -0
- package/x/utils/quick-math.js +11 -0
- package/x/utils/quick-math.js.map +1 -0
- package/s/station/devices/infra/device.ts +0 -7
- package/s/station/devices/infra/group.ts +0 -17
- package/s/station/parts/defaults.ts +0 -28
- package/s/station/parts/resolver.ts +0 -73
- package/s/station/parts/routines/aggregate_samples_into_map.ts +0 -20
- package/s/station/parts/routines/build_updatable_actions_structure.ts +0 -29
- package/s/station/parts/switchboard-bindings.ts +0 -21
- package/s/station/station.test.ts +0 -86
- package/s/station/station.ts +0 -47
- package/s/station/switchboard.ts +0 -107
- package/s/station/testing/testing.ts +0 -47
- package/s/station/types.ts +0 -72
- package/s/station/utils/modprefix.ts +0 -16
- package/s/station/utils/tmax.ts +0 -7
- package/x/nubs/stick/device.js.map +0 -1
- package/x/nubs/virtual-gamepad/device.d.ts +0 -7
- package/x/nubs/virtual-gamepad/device.js.map +0 -1
- package/x/station/devices/gamepad.d.ts +0 -10
- package/x/station/devices/gamepad.js.map +0 -1
- package/x/station/devices/infra/device.d.ts +0 -4
- package/x/station/devices/infra/device.js +0 -3
- package/x/station/devices/infra/device.js.map +0 -1
- package/x/station/devices/infra/group.d.ts +0 -7
- package/x/station/devices/infra/group.js +0 -13
- package/x/station/devices/infra/group.js.map +0 -1
- package/x/station/devices/infra/sampler.d.ts +0 -8
- package/x/station/devices/infra/sampler.js.map +0 -1
- package/x/station/devices/keyboard.js.map +0 -1
- package/x/station/devices/pointer.js.map +0 -1
- package/x/station/parts/action.js.map +0 -1
- package/x/station/parts/defaults.d.ts +0 -5
- package/x/station/parts/defaults.js +0 -22
- package/x/station/parts/defaults.js.map +0 -1
- package/x/station/parts/resolver.d.ts +0 -10
- package/x/station/parts/resolver.js +0 -63
- package/x/station/parts/resolver.js.map +0 -1
- package/x/station/parts/routines/aggregate_samples_into_map.d.ts +0 -3
- package/x/station/parts/routines/aggregate_samples_into_map.js +0 -11
- package/x/station/parts/routines/aggregate_samples_into_map.js.map +0 -1
- package/x/station/parts/routines/build_updatable_actions_structure.d.ts +0 -5
- package/x/station/parts/routines/build_updatable_actions_structure.js +0 -18
- package/x/station/parts/routines/build_updatable_actions_structure.js.map +0 -1
- package/x/station/parts/routines/lensing_algorithm.d.ts +0 -2
- package/x/station/parts/routines/lensing_algorithm.js.map +0 -1
- package/x/station/parts/switchboard-bindings.d.ts +0 -2
- package/x/station/parts/switchboard-bindings.js +0 -19
- package/x/station/parts/switchboard-bindings.js.map +0 -1
- package/x/station/station.d.ts +0 -15
- package/x/station/station.js +0 -35
- package/x/station/station.js.map +0 -1
- package/x/station/station.test.d.ts +0 -11
- package/x/station/station.test.js +0 -80
- package/x/station/station.test.js.map +0 -1
- package/x/station/switchboard.d.ts +0 -30
- package/x/station/switchboard.js +0 -90
- package/x/station/switchboard.js.map +0 -1
- package/x/station/testing/testing.d.ts +0 -58
- package/x/station/testing/testing.js +0 -39
- package/x/station/testing/testing.js.map +0 -1
- package/x/station/types.d.ts +0 -56
- package/x/station/types.js +0 -5
- package/x/station/types.js.map +0 -1
- package/x/station/utils/is-pressed.js.map +0 -1
- package/x/station/utils/modprefix.d.ts +0 -1
- package/x/station/utils/modprefix.js +0 -16
- package/x/station/utils/modprefix.js.map +0 -1
- package/x/station/utils/tmax.js +0 -6
- package/x/station/utils/tmax.js.map +0 -1
- package/x/station/utils/tmin.d.ts +0 -1
- package/x/station/utils/tmin.js +0 -6
- package/x/station/utils/tmin.js.map +0 -1
- /package/s/{station/utils → core/bindings/parts}/is-pressed.ts +0 -0
- /package/x/{station/utils → core/bindings/parts}/is-pressed.d.ts +0 -0
- /package/x/{station/utils → core/bindings/parts}/is-pressed.js +0 -0
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { SetG } from "@e280/stz";
|
|
2
|
+
import { Port } from "../port/port.js";
|
|
3
|
+
import { Controller } from "../controllers/controller.js";
|
|
4
|
+
import { HubFriendlyBindings } from "./types.js";
|
|
5
|
+
export declare class Hub<B extends HubFriendlyBindings> {
|
|
6
|
+
readonly ports: Port<B>[];
|
|
7
|
+
static readonly mode: "hub";
|
|
8
|
+
static readonly bindings: () => import("./types.js").HubBindings;
|
|
9
|
+
readonly controllers: SetG<Controller>;
|
|
10
|
+
constructor(ports: Port<B>[]);
|
|
11
|
+
[Symbol.iterator](): Generator<Port<B>, void, unknown>;
|
|
12
|
+
entries(): Generator<[number, Port<B>], void, unknown>;
|
|
13
|
+
/** poll all the ports, and actuate hub bindings for shimmying */
|
|
14
|
+
poll(now?: number): import("../index.js").Actions<B>[];
|
|
15
|
+
/** check if a port has a known switchboard controller assigned */
|
|
16
|
+
isPlugged(port: Port<B>): boolean;
|
|
17
|
+
portByIndex(index: number): Port<B>;
|
|
18
|
+
portByController(controller: Controller): Port<B> | undefined;
|
|
19
|
+
controllerByPort(port: Port<B>): Controller | undefined;
|
|
20
|
+
/** move a player's controller to the next or previous port */
|
|
21
|
+
shimmy(controller: Controller, indexDelta: 1 | -1): Port<B>;
|
|
22
|
+
/** plug a controller into a port */
|
|
23
|
+
plug: (controller: Controller, port?: Port<B>) => () => void;
|
|
24
|
+
/** unplug a controller */
|
|
25
|
+
unplug(controller: Controller): void;
|
|
26
|
+
/** returns an unplugged port (otherwise the last one) */
|
|
27
|
+
getLonelyPort(): Port<B>;
|
|
28
|
+
}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { SetG } from "@e280/stz";
|
|
2
|
+
import { Scalar } from "@benev/math";
|
|
3
|
+
import { hubBindings } from "./bindings.js";
|
|
4
|
+
import { hubMode } from "./types.js";
|
|
5
|
+
export class Hub {
|
|
6
|
+
ports;
|
|
7
|
+
static mode = hubMode;
|
|
8
|
+
static bindings = hubBindings;
|
|
9
|
+
controllers = new SetG();
|
|
10
|
+
constructor(ports) {
|
|
11
|
+
this.ports = ports;
|
|
12
|
+
for (const port of ports) {
|
|
13
|
+
port.modes.add(Hub.mode);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
*[Symbol.iterator]() {
|
|
17
|
+
yield* this.ports.values();
|
|
18
|
+
}
|
|
19
|
+
*entries() {
|
|
20
|
+
yield* this.ports.entries();
|
|
21
|
+
}
|
|
22
|
+
/** poll all the ports, and actuate hub bindings for shimmying */
|
|
23
|
+
poll(now = Date.now()) {
|
|
24
|
+
return this.ports.map(port => {
|
|
25
|
+
const actions = port.poll(now);
|
|
26
|
+
const fn = (delta) => {
|
|
27
|
+
const controller = this.controllerByPort(port);
|
|
28
|
+
if (controller)
|
|
29
|
+
this.shimmy(controller, delta);
|
|
30
|
+
};
|
|
31
|
+
if (actions[hubMode].shimmyNext.down)
|
|
32
|
+
fn(1);
|
|
33
|
+
if (actions[hubMode].shimmyPrevious.down)
|
|
34
|
+
fn(-1);
|
|
35
|
+
return actions;
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
/** check if a port has a known switchboard controller assigned */
|
|
39
|
+
isPlugged(port) {
|
|
40
|
+
return !!this.controllerByPort(port);
|
|
41
|
+
}
|
|
42
|
+
portByIndex(index) {
|
|
43
|
+
const port = this.ports.at(index);
|
|
44
|
+
if (!port)
|
|
45
|
+
throw new Error(`port ${index} not found`);
|
|
46
|
+
return port;
|
|
47
|
+
}
|
|
48
|
+
portByController(controller) {
|
|
49
|
+
for (const port of this.ports) {
|
|
50
|
+
if (port.controllers.has(controller))
|
|
51
|
+
return port;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
controllerByPort(port) {
|
|
55
|
+
for (const controller of this.controllers) {
|
|
56
|
+
if (port.controllers.has(controller))
|
|
57
|
+
return controller;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
/** move a player's controller to the next or previous port */
|
|
61
|
+
shimmy(controller, indexDelta) {
|
|
62
|
+
const oldIndex = this.ports.findIndex(port => port.controllers.has(controller));
|
|
63
|
+
const maxIndex = Math.max(0, this.ports.length - 1);
|
|
64
|
+
const newIndex = Scalar.clamp(oldIndex + indexDelta, 0, maxIndex);
|
|
65
|
+
const port = this.portByIndex(newIndex);
|
|
66
|
+
this.plug(controller, port);
|
|
67
|
+
return port;
|
|
68
|
+
}
|
|
69
|
+
/** plug a controller into a port */
|
|
70
|
+
plug = (controller, port = this.getLonelyPort()) => {
|
|
71
|
+
this.unplug(controller);
|
|
72
|
+
this.controllers.add(controller);
|
|
73
|
+
port.controllers.add(controller);
|
|
74
|
+
return () => this.unplug(controller);
|
|
75
|
+
};
|
|
76
|
+
/** unplug a controller */
|
|
77
|
+
unplug(controller) {
|
|
78
|
+
this.ports.forEach(port => port.controllers.delete(controller));
|
|
79
|
+
this.controllers.delete(controller);
|
|
80
|
+
}
|
|
81
|
+
/** returns an unplugged port (otherwise the last one) */
|
|
82
|
+
getLonelyPort() {
|
|
83
|
+
for (const port of this.ports) {
|
|
84
|
+
if (!this.controllerByPort(port))
|
|
85
|
+
return port;
|
|
86
|
+
}
|
|
87
|
+
const index = Math.max(0, this.ports.length - 1);
|
|
88
|
+
return this.portByIndex(index);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=hub.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hub.js","sourceRoot":"","sources":["../../../s/core/hub/hub.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { AsBindings, Atom, Bindings } from "../bindings/types.js";
|
|
2
|
+
export declare const hubMode: "hub";
|
|
3
|
+
export type HubBindings = AsBindings<{
|
|
4
|
+
[hubMode]: {
|
|
5
|
+
shimmyNext: Atom;
|
|
6
|
+
shimmyPrevious: Atom;
|
|
7
|
+
};
|
|
8
|
+
}>;
|
|
9
|
+
export type HubFriendlyBindings = Bindings & HubBindings;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../s/core/hub/types.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,OAAO,GAAG,KAAc,CAAA"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export * from "./bindings/action.js";
|
|
2
|
+
export * from "./bindings/types.js";
|
|
3
|
+
export * as controllers from "./controllers/standard/index.js";
|
|
4
|
+
export * from "./controllers/infra/group.js";
|
|
5
|
+
export * from "./controllers/infra/sampler.js";
|
|
6
|
+
export * from "./controllers/standard/index.js";
|
|
7
|
+
export * from "./controllers/controller.js";
|
|
8
|
+
export * from "./controllers/types.js";
|
|
9
|
+
export * from "./deck/parts/bindings-depot.js";
|
|
10
|
+
export * from "./deck/parts/local-storage-kv.js";
|
|
11
|
+
export * from "./deck/deck.js";
|
|
12
|
+
export * from "./hub/auto-gamepads.js";
|
|
13
|
+
export * from "./hub/bindings.js";
|
|
14
|
+
export * from "./hub/hub.js";
|
|
15
|
+
export * from "./port/port.js";
|
package/x/core/index.js
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export * from "./bindings/action.js";
|
|
2
|
+
export * from "./bindings/types.js";
|
|
3
|
+
export * as controllers from "./controllers/standard/index.js";
|
|
4
|
+
export * from "./controllers/infra/group.js";
|
|
5
|
+
export * from "./controllers/infra/sampler.js";
|
|
6
|
+
export * from "./controllers/standard/index.js";
|
|
7
|
+
export * from "./controllers/controller.js";
|
|
8
|
+
export * from "./controllers/types.js";
|
|
9
|
+
export * from "./deck/parts/bindings-depot.js";
|
|
10
|
+
export * from "./deck/parts/local-storage-kv.js";
|
|
11
|
+
export * from "./deck/deck.js";
|
|
12
|
+
export * from "./hub/auto-gamepads.js";
|
|
13
|
+
export * from "./hub/bindings.js";
|
|
14
|
+
export * from "./hub/hub.js";
|
|
15
|
+
export * from "./port/port.js";
|
|
16
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../s/core/index.ts"],"names":[],"mappings":"AACA,cAAc,sBAAsB,CAAA;AACpC,cAAc,qBAAqB,CAAA;AAEnC,OAAO,KAAK,WAAW,MAAM,iCAAiC,CAAA;AAC9D,cAAc,8BAA8B,CAAA;AAC5C,cAAc,gCAAgC,CAAA;AAC9C,cAAc,iCAAiC,CAAA;AAC/C,cAAc,6BAA6B,CAAA;AAC3C,cAAc,wBAAwB,CAAA;AAEtC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,kCAAkC,CAAA;AAChD,cAAc,gBAAgB,CAAA;AAE9B,cAAc,wBAAwB,CAAA;AACtC,cAAc,mBAAmB,CAAA;AACjC,cAAc,cAAc,CAAA;AAE5B,cAAc,gBAAgB,CAAA"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { SetG } from "@e280/stz";
|
|
2
|
+
import { Bindings } from "../bindings/types.js";
|
|
3
|
+
import { Controller } from "../controllers/controller.js";
|
|
4
|
+
export declare class Port<B extends Bindings> {
|
|
5
|
+
#private;
|
|
6
|
+
readonly modes: SetG<keyof B>;
|
|
7
|
+
readonly controllers: SetG<Controller>;
|
|
8
|
+
constructor(bindings: B);
|
|
9
|
+
get bindings(): B;
|
|
10
|
+
set bindings(b: B);
|
|
11
|
+
poll(now?: number): import("../bindings/types.js").Actions<B>;
|
|
12
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { SetG } from "@e280/stz";
|
|
2
|
+
import { Resolver } from "../bindings/resolver.js";
|
|
3
|
+
import { wipe_samples_map } from "./utils/wipe_samples_map.js";
|
|
4
|
+
import { aggregate_samples_into_map } from "./utils/aggregate_samples_into_map.js";
|
|
5
|
+
export class Port {
|
|
6
|
+
modes = new SetG();
|
|
7
|
+
controllers = new SetG();
|
|
8
|
+
#resolver;
|
|
9
|
+
#samples = new Map();
|
|
10
|
+
constructor(bindings) {
|
|
11
|
+
this.#resolver = new Resolver(bindings, this.modes);
|
|
12
|
+
}
|
|
13
|
+
get bindings() {
|
|
14
|
+
return this.#resolver.bindings;
|
|
15
|
+
}
|
|
16
|
+
set bindings(b) {
|
|
17
|
+
this.#resolver = new Resolver(b, this.modes);
|
|
18
|
+
}
|
|
19
|
+
poll(now = Date.now()) {
|
|
20
|
+
wipe_samples_map(this.#samples);
|
|
21
|
+
aggregate_samples_into_map(this.controllers, this.#samples);
|
|
22
|
+
return this.#resolver.poll(now, this.#samples);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=port.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"port.js","sourceRoot":"","sources":["../../../s/core/port/port.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,IAAI,EAAC,MAAM,WAAW,CAAA;AAE9B,OAAO,EAAC,QAAQ,EAAC,MAAM,yBAAyB,CAAA;AAGhD,OAAO,EAAC,gBAAgB,EAAC,MAAM,6BAA6B,CAAA;AAC5D,OAAO,EAAC,0BAA0B,EAAC,MAAM,uCAAuC,CAAA;AAEhF,MAAM,OAAO,IAAI;IACP,KAAK,GAAG,IAAI,IAAI,EAAW,CAAA;IAC3B,WAAW,GAAG,IAAI,IAAI,EAAc,CAAA;IAC7C,SAAS,CAAa;IACtB,QAAQ,GAAc,IAAI,GAAG,EAAE,CAAA;IAE/B,YAAY,QAAW;QACtB,IAAI,CAAC,SAAS,GAAG,IAAI,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;IACpD,CAAC;IAED,IAAI,QAAQ;QACX,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAA;IAC/B,CAAC;IAED,IAAI,QAAQ,CAAC,CAAI;QAChB,IAAI,CAAC,SAAS,GAAG,IAAI,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;IAC7C,CAAC;IAED,IAAI,CAAC,MAAc,IAAI,CAAC,GAAG,EAAE;QAC5B,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QAC/B,0BAA0B,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAA;QAC3D,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAA;IAC/C,CAAC;CACD"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export function aggregate_samples_into_map(controllers, map) {
|
|
2
|
+
for (const controller of controllers) {
|
|
3
|
+
for (const [code, value] of controller.takeSamples()) {
|
|
4
|
+
const previous = map.get(code) ?? 0;
|
|
5
|
+
if (value > previous)
|
|
6
|
+
map.set(code, value);
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
return map;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=aggregate_samples_into_map.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aggregate_samples_into_map.js","sourceRoot":"","sources":["../../../../s/core/port/utils/aggregate_samples_into_map.ts"],"names":[],"mappings":"AAIA,MAAM,UAAU,0BAA0B,CACxC,WAA4B,EAC5B,GAAc;IAGf,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;QACtC,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,UAAU,CAAC,WAAW,EAAE,EAAE,CAAC;YACtD,MAAM,QAAQ,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACnC,IAAI,KAAK,GAAG,QAAQ;gBACnB,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;QACtB,CAAC;IACF,CAAC;IAED,OAAO,GAAG,CAAA;AACX,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wipe_samples_map.js","sourceRoot":"","sources":["../../../../s/core/port/utils/wipe_samples_map.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,gBAAgB,CAAC,OAAkB;IAClD,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,IAAI,EAAE;QAChC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;AACtB,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { Hub } from "../hub/hub.js";
|
|
2
|
+
import { Port } from "../port/port.js";
|
|
3
|
+
import { Controller } from "../controllers/controller.js";
|
|
4
|
+
import { SamplerController } from "../controllers/infra/sampler.js";
|
|
5
|
+
export declare class TestTime {
|
|
6
|
+
frame: number;
|
|
7
|
+
get now(): number;
|
|
8
|
+
}
|
|
9
|
+
export declare function testBindings(): {
|
|
10
|
+
basic: {
|
|
11
|
+
jump: string;
|
|
12
|
+
shoot: string;
|
|
13
|
+
};
|
|
14
|
+
};
|
|
15
|
+
export declare function testConnect<C extends Controller>(switchboard: Hub<any>, controller: C): C;
|
|
16
|
+
export declare function testSetupAlpha(): {
|
|
17
|
+
controller: SamplerController;
|
|
18
|
+
port: Port<{
|
|
19
|
+
basic: {
|
|
20
|
+
jump: string;
|
|
21
|
+
shoot: string;
|
|
22
|
+
};
|
|
23
|
+
}>;
|
|
24
|
+
time: TestTime;
|
|
25
|
+
};
|
|
26
|
+
export declare function testSetupBravo(): {
|
|
27
|
+
hub: Hub<{
|
|
28
|
+
hub: {
|
|
29
|
+
shimmyNext: import("../bindings/types.js").Atom;
|
|
30
|
+
shimmyPrevious: import("../bindings/types.js").Atom;
|
|
31
|
+
};
|
|
32
|
+
basic: {
|
|
33
|
+
jump: string;
|
|
34
|
+
shoot: string;
|
|
35
|
+
};
|
|
36
|
+
}>;
|
|
37
|
+
time: TestTime;
|
|
38
|
+
};
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { Hub } from "../hub/hub.js";
|
|
2
|
+
import { Port } from "../port/port.js";
|
|
3
|
+
import { asBindings } from "../bindings/types.js";
|
|
4
|
+
import { SamplerController } from "../controllers/infra/sampler.js";
|
|
5
|
+
import { hubBindings } from "../hub/bindings.js";
|
|
6
|
+
export class TestTime {
|
|
7
|
+
frame = 0;
|
|
8
|
+
get now() {
|
|
9
|
+
return (this.frame++) * (1000 / 60);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
export function testBindings() {
|
|
13
|
+
return asBindings({
|
|
14
|
+
basic: {
|
|
15
|
+
jump: "Space",
|
|
16
|
+
shoot: "pointer.button.left",
|
|
17
|
+
},
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
export function testConnect(switchboard, controller) {
|
|
21
|
+
switchboard.plug(controller);
|
|
22
|
+
return controller;
|
|
23
|
+
}
|
|
24
|
+
export function testSetupAlpha() {
|
|
25
|
+
const time = new TestTime();
|
|
26
|
+
const controller = new SamplerController();
|
|
27
|
+
const port = new Port(testBindings());
|
|
28
|
+
port.modes.add("basic");
|
|
29
|
+
port.controllers.add(controller);
|
|
30
|
+
return { controller, port, time };
|
|
31
|
+
}
|
|
32
|
+
export function testSetupBravo() {
|
|
33
|
+
const time = new TestTime();
|
|
34
|
+
const port = () => {
|
|
35
|
+
const port = new Port({ ...testBindings(), ...hubBindings() });
|
|
36
|
+
port.modes.adds(Hub.mode, "basic");
|
|
37
|
+
return port;
|
|
38
|
+
};
|
|
39
|
+
const hub = new Hub([port(), port(), port(), port()]);
|
|
40
|
+
return { hub, time };
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=testing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"testing.js","sourceRoot":"","sources":["../../../s/core/testing/testing.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,GAAG,EAAC,MAAM,eAAe,CAAA;AACjC,OAAO,EAAC,IAAI,EAAC,MAAM,iBAAiB,CAAA;AACpC,OAAO,EAAC,UAAU,EAAC,MAAM,sBAAsB,CAAA;AAE/C,OAAO,EAAC,iBAAiB,EAAC,MAAM,iCAAiC,CAAA;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAEhD,MAAM,OAAO,QAAQ;IACpB,KAAK,GAAG,CAAC,CAAA;IAET,IAAI,GAAG;QACN,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC,CAAA;IACpC,CAAC;CACD;AAED,MAAM,UAAU,YAAY;IAC3B,OAAO,UAAU,CAAC;QACjB,KAAK,EAAE;YACN,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,qBAAqB;SAC5B;KACD,CAAC,CAAA;AACH,CAAC;AAED,MAAM,UAAU,WAAW,CAAuB,WAAqB,EAAE,UAAa;IACrF,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;IAC5B,OAAO,UAAU,CAAA;AAClB,CAAC;AAED,MAAM,UAAU,cAAc;IAC7B,MAAM,IAAI,GAAG,IAAI,QAAQ,EAAE,CAAA;IAC3B,MAAM,UAAU,GAAG,IAAI,iBAAiB,EAAE,CAAA;IAC1C,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC,CAAA;IACrC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;IACvB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;IAChC,OAAO,EAAC,UAAU,EAAE,IAAI,EAAE,IAAI,EAAC,CAAA;AAChC,CAAC;AAED,MAAM,UAAU,cAAc;IAC7B,MAAM,IAAI,GAAG,IAAI,QAAQ,EAAE,CAAA;IAC3B,MAAM,IAAI,GAAG,GAAG,EAAE;QACjB,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,EAAC,GAAG,YAAY,EAAE,EAAE,GAAG,WAAW,EAAE,EAAC,CAAC,CAAA;QAC5D,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;QAClC,OAAO,IAAI,CAAA;IACZ,CAAC,CAAA;IACD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;IACrD,OAAO,EAAC,GAAG,EAAE,IAAI,EAAC,CAAA;AACnB,CAAC"}
|
package/x/demo/main.bundle.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { $, view } from "@e280/sly";
|
|
2
2
|
import { NubStick } from "../nubs/stick/view.js";
|
|
3
|
-
import {
|
|
3
|
+
import { StickController } from "../core/controllers/standard/stick.js";
|
|
4
4
|
$.register({
|
|
5
5
|
TactDemo: view.component(use => {
|
|
6
|
-
const stick = use.once(() => new
|
|
6
|
+
const stick = use.once(() => new StickController());
|
|
7
7
|
return NubStick(stick);
|
|
8
8
|
}),
|
|
9
9
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.bundle.js","sourceRoot":"","sources":["../../s/demo/main.bundle.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,CAAC,EAAE,IAAI,EAAC,MAAM,WAAW,CAAA;AACjC,OAAO,EAAC,QAAQ,EAAC,MAAM,uBAAuB,CAAA;AAC9C,OAAO,EAAC,
|
|
1
|
+
{"version":3,"file":"main.bundle.js","sourceRoot":"","sources":["../../s/demo/main.bundle.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,CAAC,EAAE,IAAI,EAAC,MAAM,WAAW,CAAA;AACjC,OAAO,EAAC,QAAQ,EAAC,MAAM,uBAAuB,CAAA;AAC9C,OAAO,EAAC,eAAe,EAAC,MAAM,uCAAuC,CAAA;AAErE,CAAC,CAAC,QAAQ,CAAC;IACV,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE;QAC9B,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,eAAe,EAAE,CAAC,CAAA;QACnD,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAA;IACvB,CAAC,CAAC;CACF,CAAC,CAAA;AAEF,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA"}
|
|
@@ -101,7 +101,7 @@ function ne(r){return r.replace(/([a-zA-Z])(?=[A-Z])/g,"$1-").toLowerCase()}var
|
|
|
101
101
|
>
|
|
102
102
|
${Ke.attr("part","graphic").props(t.vector.get(),s)}
|
|
103
103
|
</div>
|
|
104
|
-
`});
|
|
104
|
+
`});var Mt=class{};var Ct=class extends Mt{on=Me();#t=new Map;setSample(t,e){return this.#t.set(t,e),this.on.pub(t,e),this}takeSamples(){let t=[...this.#t];return this.#t.clear(),t}};function oe(r){return r>=0?[0,r]:[Math.abs(r),0]}var Pt=class extends Ct{channel;vector=$(d.zero());dispose;constructor(t="stick"){super(),this.channel=t,this.dispose=this.vector.on(()=>{let{up:e,down:s,left:o,right:n}=this.breakdown();this.setSample(`${t}.up`,e),this.setSample(`${t}.down`,s),this.setSample(`${t}.left`,o),this.setSample(`${t}.right`,n)})}breakdown(){let{x:t,y:e}=this.vector.get(),[s,o]=oe(e),[n,i]=oe(t);return{up:o,down:s,left:n,right:i}}};q.register({TactDemo:_.component(r=>{let t=r.once(()=>new Pt);return tr(t)})});console.log("tact");
|
|
105
105
|
/*! Bundled license information:
|
|
106
106
|
|
|
107
107
|
@lit/reactive-element/css-tag.js:
|