@benev/tact 0.1.0-1 → 0.1.0-2

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.
Files changed (200) hide show
  1. package/README.md +176 -115
  2. package/package.json +3 -2
  3. package/s/{station → core/bindings}/types.ts +4 -20
  4. package/s/core/controllers/controller.ts +7 -0
  5. package/s/core/controllers/infra/group.ts +17 -0
  6. package/s/{station/devices → core/controllers}/infra/sampler.ts +3 -3
  7. package/s/{station/devices → core/controllers/standard}/gamepad.ts +6 -6
  8. package/s/core/controllers/standard/index.ts +7 -0
  9. package/s/{station/devices → core/controllers/standard}/keyboard.ts +3 -3
  10. package/s/{station/devices → core/controllers/standard}/pointer.ts +34 -34
  11. package/s/{nubs/stick/device.ts → core/controllers/standard/stick.ts} +3 -3
  12. package/s/{nubs/virtual-gamepad/device.ts → core/controllers/standard/virtual-gamepad.ts} +5 -5
  13. package/s/core/controllers/types.ts +4 -0
  14. package/s/core/core.test.ts +90 -0
  15. package/s/core/hub/auto-gamepads.ts +8 -0
  16. package/s/{station/parts/switchboard-bindings.ts → core/hub/bindings.ts} +4 -4
  17. package/s/core/hub/hub.ts +102 -0
  18. package/s/core/index.ts +19 -0
  19. package/s/{station/parts → core/port}/action.ts +3 -9
  20. package/s/core/port/port.ts +34 -0
  21. package/s/core/port/resolution/defaults.ts +30 -0
  22. package/s/{station/parts/routines/lensing_algorithm.ts → core/port/resolution/lens-algo.ts} +13 -11
  23. package/s/core/port/resolution/resolver.ts +77 -0
  24. package/s/core/port/resolution/types.ts +9 -0
  25. package/s/core/port/types.ts +10 -0
  26. package/s/core/port/utils/aggregate_samples_into_map.ts +20 -0
  27. package/s/core/port/utils/wipe_samples_map.ts +8 -0
  28. package/s/core/testing/testing.ts +50 -0
  29. package/s/demo/main.bundle.ts +2 -2
  30. package/s/index.ts +1 -11
  31. package/s/nubs/stick/view.ts +2 -2
  32. package/s/nubs/virtual-gamepad/view.ts +6 -6
  33. package/s/tests.test.ts +2 -4
  34. package/s/{station/utils/tmin.ts → utils/quick-math.ts} +6 -0
  35. package/x/{station → core/bindings}/types.d.ts +4 -16
  36. package/x/core/bindings/types.js +5 -0
  37. package/x/core/bindings/types.js.map +1 -0
  38. package/x/core/controllers/controller.d.ts +4 -0
  39. package/x/core/controllers/controller.js +3 -0
  40. package/x/core/controllers/controller.js.map +1 -0
  41. package/x/core/controllers/infra/group.d.ts +7 -0
  42. package/x/core/controllers/infra/group.js +13 -0
  43. package/x/core/controllers/infra/group.js.map +1 -0
  44. package/x/core/controllers/infra/sampler.d.ts +8 -0
  45. package/x/{station/devices → core/controllers}/infra/sampler.js +2 -2
  46. package/x/core/controllers/infra/sampler.js.map +1 -0
  47. package/x/core/controllers/standard/gamepad.d.ts +10 -0
  48. package/x/{station/devices → core/controllers/standard}/gamepad.js +5 -5
  49. package/x/core/controllers/standard/gamepad.js.map +1 -0
  50. package/x/core/controllers/standard/index.d.ts +5 -0
  51. package/x/core/controllers/standard/index.js +6 -0
  52. package/x/core/controllers/standard/index.js.map +1 -0
  53. package/x/{station/devices → core/controllers/standard}/keyboard.d.ts +3 -3
  54. package/x/{station/devices → core/controllers/standard}/keyboard.js +3 -3
  55. package/x/core/controllers/standard/keyboard.js.map +1 -0
  56. package/x/{station/devices → core/controllers/standard}/pointer.d.ts +3 -3
  57. package/x/{station/devices → core/controllers/standard}/pointer.js +29 -29
  58. package/x/core/controllers/standard/pointer.js.map +1 -0
  59. package/x/{nubs/stick/device.d.ts → core/controllers/standard/stick.d.ts} +2 -2
  60. package/x/{nubs/stick/device.js → core/controllers/standard/stick.js} +4 -4
  61. package/x/core/controllers/standard/stick.js.map +1 -0
  62. package/x/core/controllers/standard/virtual-gamepad.d.ts +7 -0
  63. package/x/{nubs/virtual-gamepad/device.js → core/controllers/standard/virtual-gamepad.js} +6 -6
  64. package/x/core/controllers/standard/virtual-gamepad.js.map +1 -0
  65. package/x/core/controllers/types.d.ts +2 -0
  66. package/x/core/controllers/types.js +2 -0
  67. package/x/core/controllers/types.js.map +1 -0
  68. package/x/core/controllers/utils/modprefix.js.map +1 -0
  69. package/x/core/core.test.d.ts +11 -0
  70. package/x/core/core.test.js +84 -0
  71. package/x/core/core.test.js.map +1 -0
  72. package/x/core/hub/auto-gamepads.d.ts +2 -0
  73. package/x/core/hub/auto-gamepads.js +6 -0
  74. package/x/core/hub/auto-gamepads.js.map +1 -0
  75. package/x/core/hub/bindings.d.ts +2 -0
  76. package/x/{station/parts/switchboard-bindings.js → core/hub/bindings.js} +4 -4
  77. package/x/core/hub/bindings.js.map +1 -0
  78. package/x/core/hub/hub.d.ts +29 -0
  79. package/x/core/hub/hub.js +91 -0
  80. package/x/core/hub/hub.js.map +1 -0
  81. package/x/core/index.d.ts +14 -0
  82. package/x/core/index.js +15 -0
  83. package/x/core/index.js.map +1 -0
  84. package/x/{station/parts → core/port}/action.d.ts +1 -3
  85. package/x/{station/parts → core/port}/action.js +3 -10
  86. package/x/core/port/action.js.map +1 -0
  87. package/x/core/port/port.d.ts +12 -0
  88. package/x/core/port/port.js +25 -0
  89. package/x/core/port/port.js.map +1 -0
  90. package/x/core/port/resolution/defaults.d.ts +4 -0
  91. package/x/{station/parts → core/port/resolution}/defaults.js +4 -3
  92. package/x/core/port/resolution/defaults.js.map +1 -0
  93. package/x/core/port/resolution/lens-algo.d.ts +2 -0
  94. package/x/{station/parts/routines/lensing_algorithm.js → core/port/resolution/lens-algo.js} +9 -8
  95. package/x/core/port/resolution/lens-algo.js.map +1 -0
  96. package/x/core/port/resolution/resolver.d.ts +9 -0
  97. package/x/core/port/resolution/resolver.js +64 -0
  98. package/x/core/port/resolution/resolver.js.map +1 -0
  99. package/x/core/port/resolution/types.d.ts +6 -0
  100. package/x/core/port/resolution/types.js +2 -0
  101. package/x/core/port/resolution/types.js.map +1 -0
  102. package/x/core/port/types.d.ts +7 -0
  103. package/x/core/port/types.js +2 -0
  104. package/x/core/port/types.js.map +1 -0
  105. package/x/core/port/utils/aggregate_samples_into_map.d.ts +3 -0
  106. package/x/core/port/utils/aggregate_samples_into_map.js +11 -0
  107. package/x/core/port/utils/aggregate_samples_into_map.js.map +1 -0
  108. package/x/core/port/utils/is-pressed.js.map +1 -0
  109. package/x/core/port/utils/wipe_samples_map.d.ts +2 -0
  110. package/x/core/port/utils/wipe_samples_map.js +5 -0
  111. package/x/core/port/utils/wipe_samples_map.js.map +1 -0
  112. package/x/{station → core}/testing/testing.d.ts +8 -8
  113. package/x/core/testing/testing.js +42 -0
  114. package/x/core/testing/testing.js.map +1 -0
  115. package/x/demo/main.bundle.js +2 -2
  116. package/x/demo/main.bundle.js.map +1 -1
  117. package/x/demo/main.bundle.min.js +1 -1
  118. package/x/demo/main.bundle.min.js.map +4 -4
  119. package/x/index.d.ts +1 -11
  120. package/x/index.html +3 -3
  121. package/x/index.js +1 -11
  122. package/x/index.js.map +1 -1
  123. package/x/nubs/stick/view.d.ts +2 -2
  124. package/x/nubs/stick/view.js.map +1 -1
  125. package/x/nubs/virtual-gamepad/view.d.ts +2 -2
  126. package/x/nubs/virtual-gamepad/view.js +5 -5
  127. package/x/nubs/virtual-gamepad/view.js.map +1 -1
  128. package/x/tests.test.js +2 -4
  129. package/x/tests.test.js.map +1 -1
  130. package/x/{station/utils/tmax.d.ts → utils/quick-math.d.ts} +1 -0
  131. package/x/utils/quick-math.js +11 -0
  132. package/x/utils/quick-math.js.map +1 -0
  133. package/s/station/devices/infra/device.ts +0 -7
  134. package/s/station/devices/infra/group.ts +0 -17
  135. package/s/station/parts/defaults.ts +0 -28
  136. package/s/station/parts/resolver.ts +0 -73
  137. package/s/station/parts/routines/aggregate_samples_into_map.ts +0 -20
  138. package/s/station/parts/routines/build_updatable_actions_structure.ts +0 -29
  139. package/s/station/station.test.ts +0 -86
  140. package/s/station/station.ts +0 -47
  141. package/s/station/switchboard.ts +0 -107
  142. package/s/station/testing/testing.ts +0 -47
  143. package/s/station/utils/tmax.ts +0 -7
  144. package/x/nubs/stick/device.js.map +0 -1
  145. package/x/nubs/virtual-gamepad/device.d.ts +0 -7
  146. package/x/nubs/virtual-gamepad/device.js.map +0 -1
  147. package/x/station/devices/gamepad.d.ts +0 -10
  148. package/x/station/devices/gamepad.js.map +0 -1
  149. package/x/station/devices/infra/device.d.ts +0 -4
  150. package/x/station/devices/infra/device.js +0 -3
  151. package/x/station/devices/infra/device.js.map +0 -1
  152. package/x/station/devices/infra/group.d.ts +0 -7
  153. package/x/station/devices/infra/group.js +0 -13
  154. package/x/station/devices/infra/group.js.map +0 -1
  155. package/x/station/devices/infra/sampler.d.ts +0 -8
  156. package/x/station/devices/infra/sampler.js.map +0 -1
  157. package/x/station/devices/keyboard.js.map +0 -1
  158. package/x/station/devices/pointer.js.map +0 -1
  159. package/x/station/parts/action.js.map +0 -1
  160. package/x/station/parts/defaults.d.ts +0 -5
  161. package/x/station/parts/defaults.js.map +0 -1
  162. package/x/station/parts/resolver.d.ts +0 -10
  163. package/x/station/parts/resolver.js +0 -63
  164. package/x/station/parts/resolver.js.map +0 -1
  165. package/x/station/parts/routines/aggregate_samples_into_map.d.ts +0 -3
  166. package/x/station/parts/routines/aggregate_samples_into_map.js +0 -11
  167. package/x/station/parts/routines/aggregate_samples_into_map.js.map +0 -1
  168. package/x/station/parts/routines/build_updatable_actions_structure.d.ts +0 -5
  169. package/x/station/parts/routines/build_updatable_actions_structure.js +0 -18
  170. package/x/station/parts/routines/build_updatable_actions_structure.js.map +0 -1
  171. package/x/station/parts/routines/lensing_algorithm.d.ts +0 -2
  172. package/x/station/parts/routines/lensing_algorithm.js.map +0 -1
  173. package/x/station/parts/switchboard-bindings.d.ts +0 -2
  174. package/x/station/parts/switchboard-bindings.js.map +0 -1
  175. package/x/station/station.d.ts +0 -15
  176. package/x/station/station.js +0 -35
  177. package/x/station/station.js.map +0 -1
  178. package/x/station/station.test.d.ts +0 -11
  179. package/x/station/station.test.js +0 -80
  180. package/x/station/station.test.js.map +0 -1
  181. package/x/station/switchboard.d.ts +0 -30
  182. package/x/station/switchboard.js +0 -90
  183. package/x/station/switchboard.js.map +0 -1
  184. package/x/station/testing/testing.js +0 -39
  185. package/x/station/testing/testing.js.map +0 -1
  186. package/x/station/types.js +0 -5
  187. package/x/station/types.js.map +0 -1
  188. package/x/station/utils/is-pressed.js.map +0 -1
  189. package/x/station/utils/modprefix.js.map +0 -1
  190. package/x/station/utils/tmax.js +0 -6
  191. package/x/station/utils/tmax.js.map +0 -1
  192. package/x/station/utils/tmin.d.ts +0 -1
  193. package/x/station/utils/tmin.js +0 -6
  194. package/x/station/utils/tmin.js.map +0 -1
  195. /package/s/{station → core/controllers}/utils/modprefix.ts +0 -0
  196. /package/s/{station → core/port}/utils/is-pressed.ts +0 -0
  197. /package/x/{station → core/controllers}/utils/modprefix.d.ts +0 -0
  198. /package/x/{station → core/controllers}/utils/modprefix.js +0 -0
  199. /package/x/{station → core/port}/utils/is-pressed.d.ts +0 -0
  200. /package/x/{station → core/port}/utils/is-pressed.js +0 -0
@@ -0,0 +1,50 @@
1
+
2
+ import {Hub} from "../hub/hub.js"
3
+ import {Port} from "../port/port.js"
4
+ import {asBindings} from "../bindings/types.js"
5
+ import {hubBindings} from "../hub/bindings.js"
6
+ import {Controller} from "../controllers/controller.js"
7
+ import {SamplerController} from "../controllers/infra/sampler.js"
8
+
9
+ export class TestTime {
10
+ frame = 0
11
+
12
+ get now() {
13
+ return (this.frame++) * (1000 / 60)
14
+ }
15
+ }
16
+
17
+ export function testBindings() {
18
+ return asBindings({
19
+ basic: {
20
+ jump: [{lenses: [{code: "Space"}]}],
21
+ shoot: [{lenses: [{code: "pointer.button.left"}]}],
22
+ },
23
+ })
24
+ }
25
+
26
+ export function testConnect<C extends Controller>(switchboard: Hub<any>, controller: C) {
27
+ switchboard.plug(controller)
28
+ return controller
29
+ }
30
+
31
+ export function testSetupAlpha() {
32
+ const time = new TestTime()
33
+ const controller = new SamplerController()
34
+ const port = new Port(testBindings())
35
+ port.modes.add("basic")
36
+ port.controllers.add(controller)
37
+ return {controller, port, time}
38
+ }
39
+
40
+ export function testSetupBravo() {
41
+ const time = new TestTime()
42
+ const port = () => {
43
+ const port = new Port(hubBindings(testBindings()))
44
+ port.modes.adds(Hub.mode, "basic")
45
+ return port
46
+ }
47
+ const hub = new Hub([port(), port(), port(), port()])
48
+ return {hub: hub, time}
49
+ }
50
+
@@ -1,11 +1,11 @@
1
1
 
2
2
  import {$, view} from "@e280/sly"
3
3
  import {NubStick} from "../nubs/stick/view.js"
4
- import {StickDevice} from "../nubs/stick/device.js"
4
+ import {StickController} from "../core/controllers/standard/stick.js"
5
5
 
6
6
  $.register({
7
7
  TactDemo: view.component(use => {
8
- const stick = use.once(() => new StickDevice())
8
+ const stick = use.once(() => new StickController())
9
9
  return NubStick(stick)
10
10
  }),
11
11
  })
package/s/index.ts CHANGED
@@ -1,15 +1,5 @@
1
1
 
2
- export * from "./station/devices/infra/device.js"
3
- export * from "./station/devices/infra/group.js"
4
- export * from "./station/devices/infra/sampler.js"
5
- export * from "./station/devices/gamepad.js"
6
- export * from "./station/devices/keyboard.js"
7
- export * from "./station/devices/pointer.js"
8
- export * from "./station/parts/action.js"
9
- export * from "./station/utils/modprefix.js"
10
- export * from "./station/station.js"
11
- export * from "./station/switchboard.js"
12
- export * from "./station/types.js"
2
+ export * from "./core/index.js"
13
3
 
14
4
  export * from "./utils/gamepads.js"
15
5
  export * from "./utils/split-axis.js"
@@ -3,14 +3,14 @@ import {html} from "lit"
3
3
  import {view} from "@e280/sly"
4
4
  import {Vec2} from "@benev/math"
5
5
 
6
- import {StickDevice} from "./device.js"
7
6
  import {styles} from "./styles.js"
8
7
  import {Basis} from "../stick-graphic/types/basis.js"
9
8
  import {NubStickGraphic} from "../stick-graphic/view.js"
9
+ import {StickController} from "../../core/controllers/standard/stick.js"
10
10
  import {make_pointer_listeners} from "./utils/make_pointer_listeners.js"
11
11
  import {calculate_new_vector_from_pointer_position} from "./utils/calculate_new_vector_from_pointer_position.js"
12
12
 
13
- export const NubStick = view(use => (stick: StickDevice) => {
13
+ export const NubStick = view(use => (stick: StickController) => {
14
14
  use.name("nub-stick")
15
15
  use.styles(styles)
16
16
 
@@ -6,12 +6,12 @@ import {ev, MapG} from "@e280/stz"
6
6
  import stylesCss from "./styles.css.js"
7
7
 
8
8
  import {NubStick} from "../stick/view.js"
9
- import {VirtualGamepadDevice} from "./device.js"
10
9
  import {GamepadInputs} from "./utils/gamepad-inputs.js"
11
10
  import {touchTracking} from "./utils/touch-tracking.js"
11
+ import {VirtualGamepadController} from "../../core/controllers/standard/virtual-gamepad.js"
12
12
  import {preventDefaultTouchShenanigans} from "./utils/prevent-default-touch-shenanigans.js"
13
13
 
14
- export const VirtualGamepad = view(use => (device: VirtualGamepadDevice) => {
14
+ export const VirtualGamepad = view(use => (controller: VirtualGamepadController) => {
15
15
  use.name("virtual-gamepad")
16
16
  use.css(stylesCss)
17
17
 
@@ -38,11 +38,11 @@ export const VirtualGamepad = view(use => (device: VirtualGamepadDevice) => {
38
38
  buttons,
39
39
  touchdown: button => {
40
40
  const code = codes.require(button)
41
- device.setSample(code, 1)
41
+ controller.setSample(code, 1)
42
42
  },
43
43
  touchup: button => {
44
44
  const code = codes.require(button)
45
- device.setSample(code, 0)
45
+ controller.setSample(code, 0)
46
46
  },
47
47
  }))
48
48
 
@@ -123,7 +123,7 @@ export const VirtualGamepad = view(use => (device: VirtualGamepadDevice) => {
123
123
  ${renderDPad()}
124
124
  ${NubStick
125
125
  .attr("class", "stick")
126
- .props(device.stickLeft)}
126
+ .props(controller.stickLeft)}
127
127
  </div>
128
128
 
129
129
  <div class="right side">
@@ -131,7 +131,7 @@ export const VirtualGamepad = view(use => (device: VirtualGamepadDevice) => {
131
131
  ${renderButtonPad()}
132
132
  ${NubStick
133
133
  .attr("class", "stick")
134
- .props(device.stickRight)}
134
+ .props(controller.stickRight)}
135
135
  </div>
136
136
  </div>
137
137
  `
package/s/tests.test.ts CHANGED
@@ -1,8 +1,6 @@
1
1
 
2
2
  import {Science} from "@e280/science"
3
- import station from "./station/station.test.js"
3
+ import core from "./core/core.test.js"
4
4
 
5
- await Science.run({
6
- station,
7
- })
5
+ await Science.run({core})
8
6
 
@@ -1,4 +1,10 @@
1
1
 
2
+ export function tmax(values: number[]) {
3
+ return values.length > 0
4
+ ? Math.max(...values)
5
+ : 0
6
+ }
7
+
2
8
  export function tmin(values: number[]) {
3
9
  return values.length > 0
4
10
  ? Math.min(...values)
@@ -1,11 +1,3 @@
1
- import { Action } from "./parts/action.js";
2
- export type Actions<B extends Bindings> = {
3
- [Mode in keyof B]: {
4
- [K in keyof B[Mode]]: Action;
5
- };
6
- };
7
- export type Sample = [code: string, value: number];
8
- export type SampleMap = Map<string, number>;
9
1
  export type Timing = (DirectTiming | TapTiming | HoldTiming);
10
2
  export type DirectTiming = {
11
3
  style: "direct";
@@ -28,10 +20,6 @@ export type Lens = {
28
20
  code: string;
29
21
  settings?: Partial<LensSettings>;
30
22
  };
31
- export type LensState = {
32
- lastValue: number;
33
- holdStart: number;
34
- };
35
23
  export type Spoon = {
36
24
  lenses: Lens[];
37
25
  required?: Lens[];
@@ -46,11 +34,11 @@ export type Bindings = {
46
34
  };
47
35
  export type AsBindings<B extends Bindings> = B;
48
36
  export declare function asBindings<B extends Bindings>(bindings: B): B;
49
- export declare const switchboardMode: "switchboard";
50
- export type AsSwitchboardBindings<B extends Bindings> = {
51
- [switchboardMode]: {
37
+ export declare const hubMode: "hub";
38
+ export type AsHubBindings<B extends Bindings> = {
39
+ [hubMode]: {
52
40
  shimmyNext: Spoon[];
53
41
  shimmyPrevious: Spoon[];
54
42
  };
55
43
  } & B;
56
- export type SwitchboardBindings = AsSwitchboardBindings<Bindings>;
44
+ export type HubBindings = AsHubBindings<Bindings>;
@@ -0,0 +1,5 @@
1
+ export function asBindings(bindings) {
2
+ return bindings;
3
+ }
4
+ export const hubMode = "hub";
5
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../s/core/bindings/types.ts"],"names":[],"mappings":"AAyCA,MAAM,UAAU,UAAU,CAAqB,QAAW;IACzD,OAAO,QAAQ,CAAA;AAChB,CAAC;AAED,MAAM,CAAC,MAAM,OAAO,GAAG,KAAc,CAAA"}
@@ -0,0 +1,4 @@
1
+ import { Sample } from "./types.js";
2
+ export declare abstract class Controller {
3
+ abstract takeSamples(): Sample[];
4
+ }
@@ -0,0 +1,3 @@
1
+ export class Controller {
2
+ }
3
+ //# sourceMappingURL=controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"controller.js","sourceRoot":"","sources":["../../../s/core/controllers/controller.ts"],"names":[],"mappings":"AAGA,MAAM,OAAgB,UAAU;CAE/B"}
@@ -0,0 +1,7 @@
1
+ import { SetG } from "@e280/stz";
2
+ import { Controller } from "../controller.js";
3
+ export declare class GroupController extends Controller {
4
+ controllers: SetG<Controller>;
5
+ constructor(...controllers: Controller[]);
6
+ takeSamples(): import("../types.js").Sample[];
7
+ }
@@ -0,0 +1,13 @@
1
+ import { SetG } from "@e280/stz";
2
+ import { Controller } from "../controller.js";
3
+ export class GroupController extends Controller {
4
+ controllers = new SetG();
5
+ constructor(...controllers) {
6
+ super();
7
+ this.controllers.adds(...controllers);
8
+ }
9
+ takeSamples() {
10
+ return [...this.controllers].flatMap(controller => controller.takeSamples());
11
+ }
12
+ }
13
+ //# sourceMappingURL=group.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"group.js","sourceRoot":"","sources":["../../../../s/core/controllers/infra/group.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,IAAI,EAAC,MAAM,WAAW,CAAA;AAC9B,OAAO,EAAC,UAAU,EAAC,MAAM,kBAAkB,CAAA;AAE3C,MAAM,OAAO,eAAgB,SAAQ,UAAU;IAC9C,WAAW,GAAG,IAAI,IAAI,EAAc,CAAA;IAEpC,YAAY,GAAG,WAAyB;QACvC,KAAK,EAAE,CAAA;QACP,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAA;IACtC,CAAC;IAED,WAAW;QACV,OAAO,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAAA;IAC7E,CAAC;CACD"}
@@ -0,0 +1,8 @@
1
+ import { Controller } from "../controller.js";
2
+ import { Sample } from "../types.js";
3
+ export declare class SamplerController extends Controller {
4
+ #private;
5
+ on: import("@e280/stz").Sub<Sample>;
6
+ setSample(code: string, value: number): this;
7
+ takeSamples(): Sample[];
8
+ }
@@ -1,6 +1,6 @@
1
1
  import { sub } from "@e280/stz";
2
- import { Device } from "./device.js";
3
- export class SamplerDevice extends Device {
2
+ import { Controller } from "../controller.js";
3
+ export class SamplerController extends Controller {
4
4
  on = sub();
5
5
  #map = new Map();
6
6
  setSample(code, value) {
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sampler.js","sourceRoot":"","sources":["../../../../s/core/controllers/infra/sampler.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,GAAG,EAAC,MAAM,WAAW,CAAA;AAC7B,OAAO,EAAC,UAAU,EAAC,MAAM,kBAAkB,CAAA;AAG3C,MAAM,OAAO,iBAAkB,SAAQ,UAAU;IAChD,EAAE,GAAG,GAAG,EAAU,CAAA;IAClB,IAAI,GAAc,IAAI,GAAG,EAAE,CAAA;IAE3B,SAAS,CAAC,IAAY,EAAE,KAAa;QACpC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;QAC1B,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;QACxB,OAAO,IAAI,CAAA;IACZ,CAAC;IAED,WAAW;QACV,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAA;QAC9B,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAA;QACjB,OAAO,OAAO,CAAA;IACf,CAAC;CACD"}
@@ -0,0 +1,10 @@
1
+ import { SamplerController } from "../infra/sampler.js";
2
+ import { Pad } from "../../../utils/gamepads.js";
3
+ export declare class GamepadController extends SamplerController {
4
+ #private;
5
+ pad: Pad;
6
+ static on(fn: (controller: GamepadController) => () => void): () => void;
7
+ constructor(pad: Pad);
8
+ get gamepad(): Gamepad;
9
+ takeSamples(): import("../types.js").Sample[];
10
+ }
@@ -1,7 +1,7 @@
1
- import { tmax } from "../utils/tmax.js";
2
- import { SamplerDevice } from "./infra/sampler.js";
3
- import { splitAxis } from "../../utils/split-axis.js";
4
- import { gamepads } from "../../utils/gamepads.js";
1
+ import { tmax } from "../../../utils/quick-math.js";
2
+ import { splitAxis } from "../../../utils/split-axis.js";
3
+ import { SamplerController } from "../infra/sampler.js";
4
+ import { gamepads } from "../../../utils/gamepads.js";
5
5
  const gamepadButtonCodes = [
6
6
  "gamepad.a",
7
7
  "gamepad.b",
@@ -21,7 +21,7 @@ const gamepadButtonCodes = [
21
21
  "gamepad.right",
22
22
  "gamepad.gamma",
23
23
  ];
24
- export class GamepadDevice extends SamplerDevice {
24
+ export class GamepadController extends SamplerController {
25
25
  pad;
26
26
  static on(fn) {
27
27
  return gamepads(pad => fn(new this(pad)));
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gamepad.js","sourceRoot":"","sources":["../../../../s/core/controllers/standard/gamepad.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export * from "./gamepad.js";
2
+ export * from "./keyboard.js";
3
+ export * from "./pointer.js";
4
+ export * from "./stick.js";
5
+ export * from "./virtual-gamepad.js";
@@ -0,0 +1,6 @@
1
+ export * from "./gamepad.js";
2
+ export * from "./keyboard.js";
3
+ export * from "./pointer.js";
4
+ export * from "./stick.js";
5
+ export * from "./virtual-gamepad.js";
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../s/core/controllers/standard/index.ts"],"names":[],"mappings":"AACA,cAAc,cAAc,CAAA;AAC5B,cAAc,eAAe,CAAA;AAC7B,cAAc,cAAc,CAAA;AAC5B,cAAc,YAAY,CAAA;AAC1B,cAAc,sBAAsB,CAAA"}
@@ -1,9 +1,9 @@
1
1
  import { Sample } from "../types.js";
2
- import { Device } from "./infra/device.js";
3
- export declare class KeyboardDevice extends Device {
2
+ import { Controller } from "../controller.js";
3
+ export declare class KeyboardController extends Controller {
4
4
  #private;
5
5
  on: import("@e280/stz").Sub<Sample>;
6
6
  dispose: () => void;
7
- constructor(target: EventTarget);
7
+ constructor(target?: EventTarget);
8
8
  takeSamples(): Sample[];
9
9
  }
@@ -1,11 +1,11 @@
1
1
  import { coalesce, ev, sub } from "@e280/stz";
2
- import { Device } from "./infra/device.js";
2
+ import { Controller } from "../controller.js";
3
3
  import { modprefix } from "../utils/modprefix.js";
4
- export class KeyboardDevice extends Device {
4
+ export class KeyboardController extends Controller {
5
5
  on = sub();
6
6
  dispose;
7
7
  #held = new Set();
8
- constructor(target) {
8
+ constructor(target = window) {
9
9
  super();
10
10
  const down = (code) => {
11
11
  this.#held.add(code);
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keyboard.js","sourceRoot":"","sources":["../../../../s/core/controllers/standard/keyboard.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,QAAQ,EAAE,EAAE,EAAE,GAAG,EAAC,MAAM,WAAW,CAAA;AAE3C,OAAO,EAAC,UAAU,EAAC,MAAM,kBAAkB,CAAA;AAC3C,OAAO,EAAC,SAAS,EAAC,MAAM,uBAAuB,CAAA;AAE/C,MAAM,OAAO,kBAAmB,SAAQ,UAAU;IACjD,EAAE,GAAG,GAAG,EAAU,CAAA;IAClB,OAAO,CAAY;IACnB,KAAK,GAAG,IAAI,GAAG,EAAU,CAAA;IAEzB,YAAY,SAAsB,MAAM;QACvC,KAAK,EAAE,CAAA;QAEP,MAAM,IAAI,GAAG,CAAC,IAAY,EAAE,EAAE;YAC7B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;YACpB,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;QACrB,CAAC,CAAA;QAED,MAAM,EAAE,GAAG,CAAC,IAAY,EAAE,EAAE;YAC3B,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;YACvB,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;QACrB,CAAC,CAAA;QAED,IAAI,CAAC,OAAO,GAAG,QAAQ,CACtB,EAAE,CAAC,MAAM,EAAE;YACV,OAAO,EAAE,CAAC,KAAoB,EAAE,EAAE;gBACjC,IAAI,KAAK,CAAC,MAAM;oBAAE,OAAM;gBACxB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;gBAChB,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAA;YACnC,CAAC;YACD,KAAK,EAAE,CAAC,KAAoB,EAAE,EAAE;gBAC/B,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;gBACd,EAAE,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAA;YACjC,CAAC;SACD,CAAC,EAEF,EAAE,CAAC,MAAM,EAAE;YACV,IAAI,EAAE,GAAG,EAAE;gBACV,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK;oBAC5B,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;gBACrB,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAA;YACnB,CAAC;SACD,CAAC,CACF,CAAA;IACF,CAAC;IAED,WAAW;QACV,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;aACpB,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAW,CAAC,CAAA;IACnC,CAAC;CACD"}
@@ -1,11 +1,11 @@
1
1
  import { Vec2 } from "@benev/math";
2
- import { SamplerDevice } from "./infra/sampler.js";
3
- export declare class PointerDevice extends SamplerDevice {
2
+ import { SamplerController } from "../infra/sampler.js";
3
+ export declare class PointerController extends SamplerController {
4
4
  client: Vec2;
5
5
  movement: Vec2;
6
6
  dispose: () => void;
7
+ constructor(target?: EventTarget);
7
8
  static buttonCode(event: PointerEvent): string;
8
9
  static wheelCodes(event: WheelEvent): [string, number][];
9
- constructor(target: EventTarget);
10
10
  takeSamples(): import("../types.js").Sample[];
11
11
  }
@@ -1,35 +1,13 @@
1
1
  import { ev } from "@e280/stz";
2
2
  import { Vec2 } from "@benev/math";
3
3
  import { modprefix } from "../utils/modprefix.js";
4
- import { SamplerDevice } from "./infra/sampler.js";
5
- import { splitAxis } from "../../utils/split-axis.js";
6
- export class PointerDevice extends SamplerDevice {
4
+ import { splitAxis } from "../../../utils/split-axis.js";
5
+ import { SamplerController } from "../infra/sampler.js";
6
+ export class PointerController extends SamplerController {
7
7
  client = new Vec2(0, 0);
8
8
  movement = new Vec2(0, 0);
9
9
  dispose;
10
- static buttonCode(event) {
11
- switch (event.button) {
12
- case 0: return "pointer.button.left";
13
- case 1: return "pointer.button.middle";
14
- case 2: return "pointer.button.right";
15
- default: return `pointer.button.${event.button + 1}`;
16
- }
17
- }
18
- static wheelCodes(event) {
19
- const movements = [];
20
- if (event.deltaX)
21
- movements.push([
22
- event.deltaX > 0 ? "pointer.wheel.right" : "pointer.wheel.left",
23
- event.deltaX,
24
- ]);
25
- if (event.deltaY)
26
- movements.push([
27
- event.deltaY > 0 ? "pointer.wheel.down" : "pointer.wheel.up",
28
- event.deltaY,
29
- ]);
30
- return movements;
31
- }
32
- constructor(target) {
10
+ constructor(target = window) {
33
11
  super();
34
12
  const dispatch = (event, code, value) => {
35
13
  this.setSample(code, value);
@@ -37,11 +15,11 @@ export class PointerDevice extends SamplerDevice {
37
15
  };
38
16
  this.dispose = ev(target, {
39
17
  pointerdown: (event) => {
40
- const code = PointerDevice.buttonCode(event);
18
+ const code = PointerController.buttonCode(event);
41
19
  dispatch(event, code, 1);
42
20
  },
43
21
  pointerup: (event) => {
44
- const code = PointerDevice.buttonCode(event);
22
+ const code = PointerController.buttonCode(event);
45
23
  dispatch(event, code, 0);
46
24
  },
47
25
  pointermove: (event) => {
@@ -51,11 +29,33 @@ export class PointerDevice extends SamplerDevice {
51
29
  this.movement.y += event.movementY;
52
30
  },
53
31
  wheel: (event) => {
54
- for (const [code, value] of PointerDevice.wheelCodes(event))
32
+ for (const [code, value] of PointerController.wheelCodes(event))
55
33
  dispatch(event, code, value);
56
34
  },
57
35
  });
58
36
  }
37
+ static buttonCode(event) {
38
+ switch (event.button) {
39
+ case 0: return "pointer.button.left";
40
+ case 1: return "pointer.button.middle";
41
+ case 2: return "pointer.button.right";
42
+ default: return `pointer.button.${event.button + 1}`;
43
+ }
44
+ }
45
+ static wheelCodes(event) {
46
+ const movements = [];
47
+ if (event.deltaX)
48
+ movements.push([
49
+ event.deltaX > 0 ? "pointer.wheel.right" : "pointer.wheel.left",
50
+ event.deltaX,
51
+ ]);
52
+ if (event.deltaY)
53
+ movements.push([
54
+ event.deltaY > 0 ? "pointer.wheel.down" : "pointer.wheel.up",
55
+ event.deltaY,
56
+ ]);
57
+ return movements;
58
+ }
59
59
  takeSamples() {
60
60
  const [x, y] = this.movement;
61
61
  const [left, right] = splitAxis(x);
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pointer.js","sourceRoot":"","sources":["../../../../s/core/controllers/standard/pointer.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { Vec2 } from "@benev/math";
2
2
  import { Disposable } from "@e280/stz";
3
- import { SamplerDevice } from "../../station/devices/infra/sampler.js";
4
- export declare class StickDevice extends SamplerDevice implements Disposable {
3
+ import { SamplerController } from "../infra/sampler.js";
4
+ export declare class StickController extends SamplerController implements Disposable {
5
5
  channel: string;
6
6
  vector: import("@e280/strata").Signal<Vec2>;
7
7
  dispose: () => void;
@@ -1,8 +1,8 @@
1
1
  import { Vec2 } from "@benev/math";
2
2
  import { signal } from "@e280/strata";
3
- import { splitAxis } from "../../utils/split-axis.js";
4
- import { SamplerDevice } from "../../station/devices/infra/sampler.js";
5
- export class StickDevice extends SamplerDevice {
3
+ import { SamplerController } from "../infra/sampler.js";
4
+ import { splitAxis } from "../../../utils/split-axis.js";
5
+ export class StickController extends SamplerController {
6
6
  channel;
7
7
  vector = signal(Vec2.zero());
8
8
  dispose;
@@ -24,4 +24,4 @@ export class StickDevice extends SamplerDevice {
24
24
  return { up, down, left, right };
25
25
  }
26
26
  }
27
- //# sourceMappingURL=device.js.map
27
+ //# sourceMappingURL=stick.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stick.js","sourceRoot":"","sources":["../../../../s/core/controllers/standard/stick.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,IAAI,EAAC,MAAM,aAAa,CAAA;AAChC,OAAO,EAAC,MAAM,EAAC,MAAM,cAAc,CAAA;AAEnC,OAAO,EAAC,iBAAiB,EAAC,MAAM,qBAAqB,CAAA;AACrD,OAAO,EAAC,SAAS,EAAC,MAAM,8BAA8B,CAAA;AAEtD,MAAM,OAAO,eAAgB,SAAQ,iBAAiB;IAIlC;IAHnB,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAA;IAC5B,OAAO,CAAY;IAEnB,YAAmB,UAAU,OAAO;QACnC,KAAK,EAAE,CAAA;QADW,YAAO,GAAP,OAAO,CAAU;QAEnC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE;YAClC,MAAM,EAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAC,GAAG,IAAI,CAAC,SAAS,EAAE,CAAA;YAChD,IAAI,CAAC,SAAS,CAAC,GAAG,OAAO,KAAK,EAAE,EAAE,CAAC,CAAA;YACnC,IAAI,CAAC,SAAS,CAAC,GAAG,OAAO,OAAO,EAAE,IAAI,CAAC,CAAA;YACvC,IAAI,CAAC,SAAS,CAAC,GAAG,OAAO,OAAO,EAAE,IAAI,CAAC,CAAA;YACvC,IAAI,CAAC,SAAS,CAAC,GAAG,OAAO,QAAQ,EAAE,KAAK,CAAC,CAAA;QAC1C,CAAC,CAAC,CAAA;IACH,CAAC;IAED,SAAS;QACR,MAAM,EAAC,CAAC,EAAE,CAAC,EAAC,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAA;QAChC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAA;QAC/B,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAA;QAClC,OAAO,EAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAC,CAAA;IAC/B,CAAC;CACD"}
@@ -0,0 +1,7 @@
1
+ import { StickController } from "./stick.js";
2
+ import { SamplerController } from "../infra/sampler.js";
3
+ export declare class VirtualGamepadController extends SamplerController {
4
+ stickLeft: StickController;
5
+ stickRight: StickController;
6
+ takeSamples(): import("../types.js").Sample[];
7
+ }
@@ -1,8 +1,8 @@
1
- import { StickDevice } from "../stick/device.js";
2
- import { SamplerDevice } from "../../station/devices/infra/sampler.js";
3
- export class VirtualGamepadDevice extends SamplerDevice {
4
- stickLeft = new StickDevice();
5
- stickRight = new StickDevice();
1
+ import { StickController } from "./stick.js";
2
+ import { SamplerController } from "../infra/sampler.js";
3
+ export class VirtualGamepadController extends SamplerController {
4
+ stickLeft = new StickController();
5
+ stickRight = new StickController();
6
6
  takeSamples() {
7
7
  const left = this.stickLeft.breakdown();
8
8
  this.setSample("gamepad.stick.left.up", left.up);
@@ -17,4 +17,4 @@ export class VirtualGamepadDevice extends SamplerDevice {
17
17
  return super.takeSamples();
18
18
  }
19
19
  }
20
- //# sourceMappingURL=device.js.map
20
+ //# sourceMappingURL=virtual-gamepad.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"virtual-gamepad.js","sourceRoot":"","sources":["../../../../s/core/controllers/standard/virtual-gamepad.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,eAAe,EAAC,MAAM,YAAY,CAAA;AAC1C,OAAO,EAAC,iBAAiB,EAAC,MAAM,qBAAqB,CAAA;AAErD,MAAM,OAAO,wBAAyB,SAAQ,iBAAiB;IAC9D,SAAS,GAAG,IAAI,eAAe,EAAE,CAAA;IACjC,UAAU,GAAG,IAAI,eAAe,EAAE,CAAA;IAElC,WAAW;QACV,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,CAAA;QACvC,IAAI,CAAC,SAAS,CAAC,uBAAuB,EAAE,IAAI,CAAC,EAAE,CAAC,CAAA;QAChD,IAAI,CAAC,SAAS,CAAC,yBAAyB,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;QACpD,IAAI,CAAC,SAAS,CAAC,yBAAyB,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;QACpD,IAAI,CAAC,SAAS,CAAC,0BAA0B,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;QAEtD,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,CAAA;QACzC,IAAI,CAAC,SAAS,CAAC,wBAAwB,EAAE,KAAK,CAAC,EAAE,CAAC,CAAA;QAClD,IAAI,CAAC,SAAS,CAAC,0BAA0B,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;QACtD,IAAI,CAAC,SAAS,CAAC,0BAA0B,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;QACtD,IAAI,CAAC,SAAS,CAAC,2BAA2B,EAAE,KAAK,CAAC,KAAK,CAAC,CAAA;QAExD,OAAO,KAAK,CAAC,WAAW,EAAE,CAAA;IAC3B,CAAC;CACD"}
@@ -0,0 +1,2 @@
1
+ export type Sample = [code: string, value: number];
2
+ export type SampleMap = Map<string, number>;
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../s/core/controllers/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modprefix.js","sourceRoot":"","sources":["../../../../s/core/controllers/utils/modprefix.ts"],"names":[],"mappings":"AACA,MAAM,UAAU,SAAS,CAAC,KAAgD,EAAE,IAAY;IACvF,MAAM,SAAS,GAAa,EAAE,CAAA;IAE9B,IAAI,KAAK,CAAC,OAAO;QAAE,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IACzC,IAAI,KAAK,CAAC,MAAM;QAAE,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACvC,IAAI,KAAK,CAAC,OAAO;QAAE,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IACzC,IAAI,KAAK,CAAC,QAAQ;QAAE,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAE3C,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC;QAClC,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;QAC1B,CAAC,CAAC,GAAG,CAAA;IAEN,OAAO,GAAG,MAAM,IAAI,IAAI,EAAE,CAAA;AAC3B,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { Science } from "@e280/science";
2
+ declare const _default: {
3
+ "sample to action value": Science.Test;
4
+ hub: {
5
+ "controller inputs work": Science.Test;
6
+ "two controllers playing on separate ports": Science.Test;
7
+ "controller can shimmy": Science.Test;
8
+ "two controllers can share a port": Science.Test;
9
+ };
10
+ };
11
+ export default _default;