@edv4h/usketch-plugin-character 0.3.1 → 0.4.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/README.md +63 -11
- package/dist/character-input.d.ts +11 -3
- package/dist/character-input.d.ts.map +1 -1
- package/dist/character-input.js +63 -18
- package/dist/character-input.js.map +1 -1
- package/dist/character-key-choices.d.ts +14 -0
- package/dist/character-key-choices.d.ts.map +1 -0
- package/dist/character-key-choices.js +23 -0
- package/dist/character-key-choices.js.map +1 -0
- package/dist/character-layer.d.ts +1 -1
- package/dist/character-layer.d.ts.map +1 -1
- package/dist/character-layer.js +45 -14
- package/dist/character-layer.js.map +1 -1
- package/dist/character-physics.d.ts +156 -2
- package/dist/character-physics.d.ts.map +1 -1
- package/dist/character-physics.js +270 -22
- package/dist/character-physics.js.map +1 -1
- package/dist/character-runtime.d.ts +8 -1
- package/dist/character-runtime.d.ts.map +1 -1
- package/dist/character-runtime.js +74 -8
- package/dist/character-runtime.js.map +1 -1
- package/dist/character-service.d.ts +23 -3
- package/dist/character-service.d.ts.map +1 -1
- package/dist/character-service.js +7 -0
- package/dist/character-service.js.map +1 -1
- package/dist/character-store.d.ts +34 -1
- package/dist/character-store.d.ts.map +1 -1
- package/dist/character-store.js +86 -4
- package/dist/character-store.js.map +1 -1
- package/dist/character-sync.d.ts +11 -1
- package/dist/character-sync.d.ts.map +1 -1
- package/dist/character-sync.js +23 -1
- package/dist/character-sync.js.map +1 -1
- package/dist/character-types.d.ts +31 -2
- package/dist/character-types.d.ts.map +1 -1
- package/dist/character-types.js +2 -1
- package/dist/character-types.js.map +1 -1
- package/dist/character-virtual-input.d.ts +20 -0
- package/dist/character-virtual-input.d.ts.map +1 -0
- package/dist/character-virtual-input.js +34 -0
- package/dist/character-virtual-input.js.map +1 -0
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/plugin.d.ts +13 -1
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +2 -0
- package/dist/plugin.js.map +1 -1
- package/dist/register-character-hud.d.ts.map +1 -1
- package/dist/register-character-hud.js +88 -1
- package/dist/register-character-hud.js.map +1 -1
- package/package.json +1 -1
package/dist/character-sync.js
CHANGED
|
@@ -4,7 +4,10 @@
|
|
|
4
4
|
// disconnects — which is exactly the "coexisting live characters" semantics.
|
|
5
5
|
// Typed structurally so the plugin doesn't depend on @edv4h/usketch-sync.
|
|
6
6
|
import { wrapDeg } from "@edv4h/usketch-shared";
|
|
7
|
+
import { hoverGaugeOf } from "./character-store.js";
|
|
7
8
|
export const AWARENESS_FIELD = "character";
|
|
9
|
+
/** Steps the hover gauge is published in, so a refilling gauge doesn't publish every frame. */
|
|
10
|
+
const WIRE_GAUGE_STEP = 0.05;
|
|
8
11
|
/** The largest slip accepted from the wire, degrees. */
|
|
9
12
|
const MAX_WIRE_SLIP = 90;
|
|
10
13
|
const clamp = (v, min, max) => Math.min(max, Math.max(min, v));
|
|
@@ -31,6 +34,11 @@ export function parseWireState(v) {
|
|
|
31
34
|
steering: clamp(num("steering") ?? 0, -1, 1),
|
|
32
35
|
slip: clamp(num("slip") ?? 0, -MAX_WIRE_SLIP, MAX_WIRE_SLIP),
|
|
33
36
|
drifting: o.drifting === true,
|
|
37
|
+
z: num("z"),
|
|
38
|
+
airborne: o.airborne === true,
|
|
39
|
+
vz: num("vz") ?? 0,
|
|
40
|
+
hovering: o.hovering === true,
|
|
41
|
+
hoverGauge: ((g) => (g === null ? null : clamp(g, 0, 1)))(num("hoverGauge")),
|
|
34
42
|
appearance,
|
|
35
43
|
name: typeof o.name === "string" ? o.name : undefined,
|
|
36
44
|
};
|
|
@@ -46,6 +54,7 @@ export function createCharacterSync(awareness, store, onTargetsChanged, now = ()
|
|
|
46
54
|
const t = now();
|
|
47
55
|
if (!force && t - lastSent < BROADCAST_INTERVAL_MS)
|
|
48
56
|
return;
|
|
57
|
+
const gauge = hoverGaugeOf(s);
|
|
49
58
|
const wire = s.enabled
|
|
50
59
|
? {
|
|
51
60
|
x: s.pose.x,
|
|
@@ -57,6 +66,11 @@ export function createCharacterSync(awareness, store, onTargetsChanged, now = ()
|
|
|
57
66
|
// Half-degree steps: a settling slip doesn't publish every frame forever.
|
|
58
67
|
slip: Math.round(s.pose.slip * 2) / 2,
|
|
59
68
|
drifting: s.pose.drift !== 0,
|
|
69
|
+
z: s.pose.z,
|
|
70
|
+
airborne: s.pose.airborne,
|
|
71
|
+
vz: s.pose.vz,
|
|
72
|
+
hovering: s.pose.hovering,
|
|
73
|
+
hoverGauge: gauge === null ? null : Math.round(gauge / WIRE_GAUGE_STEP) * WIRE_GAUGE_STEP,
|
|
60
74
|
appearance: s.appearance,
|
|
61
75
|
name: s.name,
|
|
62
76
|
}
|
|
@@ -111,7 +125,14 @@ export function easeRemotes(display, targets, alpha) {
|
|
|
111
125
|
const dy = t.y - d.y;
|
|
112
126
|
const dh = wrapDeg(t.heading - d.heading);
|
|
113
127
|
const ds = t.slip - d.slip;
|
|
114
|
-
|
|
128
|
+
// Height eases only between two known values (an older client sends none).
|
|
129
|
+
const known = typeof t.z === "number" && typeof d.z === "number";
|
|
130
|
+
const dz = known ? t.z - d.z : 0;
|
|
131
|
+
if (Math.abs(dx) < 0.05 &&
|
|
132
|
+
Math.abs(dy) < 0.05 &&
|
|
133
|
+
Math.abs(dh) < 0.05 &&
|
|
134
|
+
Math.abs(ds) < 0.05 &&
|
|
135
|
+
Math.abs(dz) < 0.05) {
|
|
115
136
|
next.set(id, t);
|
|
116
137
|
continue;
|
|
117
138
|
}
|
|
@@ -122,6 +143,7 @@ export function easeRemotes(display, targets, alpha) {
|
|
|
122
143
|
y: d.y + dy * alpha,
|
|
123
144
|
heading: wrapDeg(d.heading + dh * alpha),
|
|
124
145
|
slip: d.slip + ds * alpha,
|
|
146
|
+
z: known ? d.z + dz * alpha : t.z,
|
|
125
147
|
});
|
|
126
148
|
}
|
|
127
149
|
return { next, settling };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"character-sync.js","sourceRoot":"","sources":["../src/character-sync.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,8EAA8E;AAC9E,mFAAmF;AACnF,6EAA6E;AAC7E,0EAA0E;AAC1E,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"character-sync.js","sourceRoot":"","sources":["../src/character-sync.ts"],"names":[],"mappings":"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"}
|
|
@@ -30,8 +30,23 @@ export interface CharacterRenderProps {
|
|
|
30
30
|
appearance: CharacterAppearance;
|
|
31
31
|
/** The owner's display name, if any. */
|
|
32
32
|
name?: string;
|
|
33
|
-
/** Ground height the character
|
|
33
|
+
/** Ground height under the character, world units (0 = the flat board). Where the shadow goes. */
|
|
34
34
|
elevation: number;
|
|
35
|
+
/** Height of the feet, world units (absolute like `elevation`; above it while in the air). */
|
|
36
|
+
z: number;
|
|
37
|
+
/** How high the feet are above the ground under them (`z - elevation`, 0 = standing). */
|
|
38
|
+
altitude: number;
|
|
39
|
+
/** Whether the character is in the air (jumping or falling). */
|
|
40
|
+
airborne: boolean;
|
|
41
|
+
/** Vertical speed, world units / s (positive = rising), e.g. for a rise / fall pose. */
|
|
42
|
+
verticalSpeed: number;
|
|
43
|
+
/** Hovering (the jump key held in a fall), e.g. for flapping or a glow at the feet. */
|
|
44
|
+
hovering: boolean;
|
|
45
|
+
/**
|
|
46
|
+
* Hover gauge, 0 (empty) … 1 (full) — drains while hovering, refills on the ground — or
|
|
47
|
+
* `null` while hovering is off (also from clients that don't send it).
|
|
48
|
+
*/
|
|
49
|
+
hoverGauge: number | null;
|
|
35
50
|
}
|
|
36
51
|
/**
|
|
37
52
|
* Draws one character. The plugin places the returned node centered on the
|
|
@@ -49,6 +64,15 @@ export interface RemoteCharacter {
|
|
|
49
64
|
steering: number;
|
|
50
65
|
slip: number;
|
|
51
66
|
drifting: boolean;
|
|
67
|
+
/** Feet height (absolute), or `null` from a client that doesn't send it (= on the ground). */
|
|
68
|
+
z: number | null;
|
|
69
|
+
airborne: boolean;
|
|
70
|
+
/** Vertical speed as last sent (0 from older clients). */
|
|
71
|
+
vz: number;
|
|
72
|
+
/** Hovering as last sent (false from older clients). */
|
|
73
|
+
hovering: boolean;
|
|
74
|
+
/** Hover gauge 0 … 1, or `null` with hovering off / from older clients. */
|
|
75
|
+
hoverGauge: number | null;
|
|
52
76
|
appearance: CharacterAppearance;
|
|
53
77
|
name?: string;
|
|
54
78
|
}
|
|
@@ -58,8 +82,13 @@ export interface CharacterKeys {
|
|
|
58
82
|
down: string[];
|
|
59
83
|
left: string[];
|
|
60
84
|
right: string[];
|
|
61
|
-
/** Vehicle drift key. Only captured while the vehicle scheme has drift on. */
|
|
85
|
+
/** Vehicle drift key (default Shift). Only captured while the vehicle scheme has drift on. */
|
|
62
86
|
drift?: string[];
|
|
87
|
+
/**
|
|
88
|
+
* Jump key (default Space). Only captured while jumping is on. Where it shares a key
|
|
89
|
+
* with an active drift, the drift wins.
|
|
90
|
+
*/
|
|
91
|
+
jump?: string[];
|
|
63
92
|
}
|
|
64
93
|
export declare const DEFAULT_KEYS: CharacterKeys;
|
|
65
94
|
//# sourceMappingURL=character-types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"character-types.d.ts","sourceRoot":"","sources":["../src/character-types.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,yFAAyF;AACzF,MAAM,MAAM,mBAAmB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE1D,sFAAsF;AACtF,MAAM,WAAW,oBAAoB;IACpC,0EAA0E;IAC1E,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,OAAO,CAAC;IAChB,6DAA6D;IAC7D,OAAO,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,aAAa,EAAE,MAAM,CAAC;IACtB,0EAA0E;IAC1E,MAAM,EAAE,OAAO,CAAC;IAChB,uDAAuD;IACvD,KAAK,EAAE,MAAM,CAAC;IACd,qFAAqF;IACrF,QAAQ,EAAE,MAAM,CAAC;IACjB,kGAAkG;IAClG,IAAI,EAAE,MAAM,CAAC;IACb,oEAAoE;IACpE,QAAQ,EAAE,OAAO,CAAC;IAClB,uEAAuE;IACvE,IAAI,EAAE,MAAM,CAAC;IACb,wCAAwC;IACxC,UAAU,EAAE,mBAAmB,CAAC;IAChC,wCAAwC;IACxC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd
|
|
1
|
+
{"version":3,"file":"character-types.d.ts","sourceRoot":"","sources":["../src/character-types.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,yFAAyF;AACzF,MAAM,MAAM,mBAAmB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE1D,sFAAsF;AACtF,MAAM,WAAW,oBAAoB;IACpC,0EAA0E;IAC1E,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,OAAO,CAAC;IAChB,6DAA6D;IAC7D,OAAO,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,aAAa,EAAE,MAAM,CAAC;IACtB,0EAA0E;IAC1E,MAAM,EAAE,OAAO,CAAC;IAChB,uDAAuD;IACvD,KAAK,EAAE,MAAM,CAAC;IACd,qFAAqF;IACrF,QAAQ,EAAE,MAAM,CAAC;IACjB,kGAAkG;IAClG,IAAI,EAAE,MAAM,CAAC;IACb,oEAAoE;IACpE,QAAQ,EAAE,OAAO,CAAC;IAClB,uEAAuE;IACvE,IAAI,EAAE,MAAM,CAAC;IACb,wCAAwC;IACxC,UAAU,EAAE,mBAAmB,CAAC;IAChC,wCAAwC;IACxC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kGAAkG;IAClG,SAAS,EAAE,MAAM,CAAC;IAClB,8FAA8F;IAC9F,CAAC,EAAE,MAAM,CAAC;IACV,yFAAyF;IACzF,QAAQ,EAAE,MAAM,CAAC;IACjB,gEAAgE;IAChE,QAAQ,EAAE,OAAO,CAAC;IAClB,wFAAwF;IACxF,aAAa,EAAE,MAAM,CAAC;IACtB,uFAAuF;IACvF,QAAQ,EAAE,OAAO,CAAC;IAClB;;;OAGG;IACH,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,KAAK,EAAE,oBAAoB,KAAK,SAAS,CAAC;AAE3E,qFAAqF;AACrF,MAAM,WAAW,eAAe;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;IAClB,8FAA8F;IAC9F,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,0DAA0D;IAC1D,EAAE,EAAE,MAAM,CAAC;IACX,wDAAwD;IACxD,QAAQ,EAAE,OAAO,CAAC;IAClB,2EAA2E;IAC3E,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,UAAU,EAAE,mBAAmB,CAAC;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;CACd;AAED,4EAA4E;AAC5E,MAAM,WAAW,aAAa;IAC7B,EAAE,EAAE,MAAM,EAAE,CAAC;IACb,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,8FAA8F;IAC9F,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,eAAO,MAAM,YAAY,EAAE,aAO1B,CAAC"}
|
package/dist/character-types.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"character-types.js","sourceRoot":"","sources":["../src/character-types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"character-types.js","sourceRoot":"","sources":["../src/character-types.ts"],"names":[],"mappings":"AAoGA,MAAM,CAAC,MAAM,YAAY,GAAkB;IAC1C,EAAE,EAAE,CAAC,MAAM,CAAC;IACZ,IAAI,EAAE,CAAC,MAAM,CAAC;IACd,IAAI,EAAE,CAAC,MAAM,CAAC;IACd,KAAK,EAAE,CAAC,MAAM,CAAC;IACf,KAAK,EAAE,CAAC,WAAW,EAAE,YAAY,CAAC;IAClC,IAAI,EAAE,CAAC,OAAO,CAAC;CACf,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { type MoveInput } from "./character-physics.js";
|
|
2
|
+
/** Analog input from a host control. Missing fields count as released. */
|
|
3
|
+
export interface VirtualInput {
|
|
4
|
+
/** Forward / back, -1 (full reverse / screen down) … 1 (full throttle / screen up). */
|
|
5
|
+
throttle: number;
|
|
6
|
+
/** Left / right, -1 … 1. */
|
|
7
|
+
steer: number;
|
|
8
|
+
/** Vehicle: the drift button (only acts when drift is enabled). */
|
|
9
|
+
drift: boolean;
|
|
10
|
+
}
|
|
11
|
+
/** Clamp a host value into a `VirtualInput`; `null` (or all released) = no input. */
|
|
12
|
+
export declare function normalizeVirtualInput(input: Partial<VirtualInput> | null): VirtualInput | null;
|
|
13
|
+
/** Whether the virtual control is being touched (moves the stick or holds drift). */
|
|
14
|
+
export declare function isVirtualInputActive(v: VirtualInput | null): boolean;
|
|
15
|
+
/**
|
|
16
|
+
* The keys plus the virtual control: their axes add up (capped at ±1) and drift is
|
|
17
|
+
* held if either holds it. Without virtual input the key input passes through as is.
|
|
18
|
+
*/
|
|
19
|
+
export declare function combineInput(keys: MoveInput, virtual: VirtualInput | null): MoveInput;
|
|
20
|
+
//# sourceMappingURL=character-virtual-input.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"character-virtual-input.d.ts","sourceRoot":"","sources":["../src/character-virtual-input.ts"],"names":[],"mappings":"AAGA,OAAO,EAAwC,KAAK,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAE9F,0EAA0E;AAC1E,MAAM,WAAW,YAAY;IAC5B,uFAAuF;IACvF,QAAQ,EAAE,MAAM,CAAC;IACjB,4BAA4B;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,mEAAmE;IACnE,KAAK,EAAE,OAAO,CAAC;CACf;AAED,qFAAqF;AACrF,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,IAAI,GAAG,YAAY,GAAG,IAAI,CAQ9F;AAED,qFAAqF;AACrF,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,YAAY,GAAG,IAAI,GAAG,OAAO,CAEpE;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,YAAY,GAAG,IAAI,GAAG,SAAS,CAQrF"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
// Non-keyboard movement input (an on-screen touch stick, a gamepad …) that a host
|
|
2
|
+
// feeds through `CharacterApi.setVirtualInput`. It is analog and is combined with the
|
|
3
|
+
// held keys each frame, so a keyboard and a touch stick can drive at the same time.
|
|
4
|
+
import { clampUnit, inputSteer, inputThrottle } from "./character-physics.js";
|
|
5
|
+
/** Clamp a host value into a `VirtualInput`; `null` (or all released) = no input. */
|
|
6
|
+
export function normalizeVirtualInput(input) {
|
|
7
|
+
if (!input)
|
|
8
|
+
return null;
|
|
9
|
+
const v = {
|
|
10
|
+
throttle: clampUnit(input.throttle),
|
|
11
|
+
steer: clampUnit(input.steer),
|
|
12
|
+
drift: input.drift === true,
|
|
13
|
+
};
|
|
14
|
+
return isVirtualInputActive(v) ? v : null;
|
|
15
|
+
}
|
|
16
|
+
/** Whether the virtual control is being touched (moves the stick or holds drift). */
|
|
17
|
+
export function isVirtualInputActive(v) {
|
|
18
|
+
return v !== null && (v.throttle !== 0 || v.steer !== 0 || v.drift);
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* The keys plus the virtual control: their axes add up (capped at ±1) and drift is
|
|
22
|
+
* held if either holds it. Without virtual input the key input passes through as is.
|
|
23
|
+
*/
|
|
24
|
+
export function combineInput(keys, virtual) {
|
|
25
|
+
if (!virtual)
|
|
26
|
+
return keys;
|
|
27
|
+
return {
|
|
28
|
+
...keys,
|
|
29
|
+
throttle: clampUnit(inputThrottle(keys) + virtual.throttle),
|
|
30
|
+
steer: clampUnit(inputSteer(keys) + virtual.steer),
|
|
31
|
+
drift: keys.drift === true || virtual.drift,
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=character-virtual-input.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"character-virtual-input.js","sourceRoot":"","sources":["../src/character-virtual-input.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAClF,sFAAsF;AACtF,oFAAoF;AACpF,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,EAAkB,MAAM,wBAAwB,CAAC;AAY9F,qFAAqF;AACrF,MAAM,UAAU,qBAAqB,CAAC,KAAmC;IACxE,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,MAAM,CAAC,GAAiB;QACvB,QAAQ,EAAE,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC;QACnC,KAAK,EAAE,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC;QAC7B,KAAK,EAAE,KAAK,CAAC,KAAK,KAAK,IAAI;KAC3B,CAAC;IACF,OAAO,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC3C,CAAC;AAED,qFAAqF;AACrF,MAAM,UAAU,oBAAoB,CAAC,CAAsB;IAC1D,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,QAAQ,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC;AACrE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,IAAe,EAAE,OAA4B;IACzE,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAC1B,OAAO;QACN,GAAG,IAAI;QACP,QAAQ,EAAE,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC;QAC3D,KAAK,EAAE,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC;QAClD,KAAK,EAAE,IAAI,CAAC,KAAK,KAAK,IAAI,IAAI,OAAO,CAAC,KAAK;KAC3C,CAAC;AACH,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
export { anchorPx, type CameraFocus, type CameraMode, easeFocus, followViewport, smoothingAlpha, targetRotation, } from "./character-camera.js";
|
|
2
|
-
export {
|
|
2
|
+
export { KEY_CHOICES, type KeyChoice, keyChoiceOf, withKeyChoice, } from "./character-key-choices.js";
|
|
3
|
+
export { airJumpSpeed, type CharacterPose, type ControlScheme, DEFAULT_DRIFT, DEFAULT_HOVER, DEFAULT_JUMP, DEFAULT_MOTION, type DriftParams, drainHoverGauge, type HoverParams, headingVector, IDLE_JUMP, inputSteer, inputThrottle, type JumpParams, type JumpTimers, jumpArc, type MotionParams, type MoveInput, ORIGIN_POSE, rechargeHoverGauge, stepCharacter, stepVertical, turnToward, vectorHeading, } from "./character-physics.js";
|
|
3
4
|
export { CHARACTER_LAYER_ID, CHARACTER_VIEWPORT_PRIORITY } from "./character-runtime.js";
|
|
4
5
|
export { type CharacterApi, characterService, getCharacterApi, } from "./character-service.js";
|
|
6
|
+
export { effectiveJump, hoverGaugeOf, type JumpInit, MAX_AIR_JUMPS, sanitizeHover, sanitizeJump, } from "./character-store.js";
|
|
5
7
|
export { AWARENESS_FIELD, type CharacterAwareness, type CharacterWireState, parseWireState, } from "./character-sync.js";
|
|
6
8
|
export { type CharacterAppearance, type CharacterKeys, type CharacterRenderer, type CharacterRenderProps, DEFAULT_KEYS, type RemoteCharacter, } from "./character-types.js";
|
|
9
|
+
export { combineInput, isVirtualInputActive, normalizeVirtualInput, type VirtualInput, } from "./character-virtual-input.js";
|
|
7
10
|
export { type CharacterPluginOptions, createCharacterPlugin } from "./plugin.js";
|
|
8
11
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,QAAQ,EACR,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,SAAS,EACT,cAAc,EACd,cAAc,EACd,cAAc,GACd,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACN,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,aAAa,EACb,cAAc,EACd,KAAK,WAAW,EAChB,aAAa,EACb,KAAK,YAAY,EACjB,KAAK,SAAS,EACd,WAAW,EACX,aAAa,EACb,UAAU,EACV,aAAa,GACb,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,kBAAkB,EAAE,2BAA2B,EAAE,MAAM,wBAAwB,CAAC;AACzF,OAAO,EACN,KAAK,YAAY,EACjB,gBAAgB,EAChB,eAAe,GACf,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACN,eAAe,EACf,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,cAAc,GACd,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACN,KAAK,mBAAmB,EACxB,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,EACzB,YAAY,EACZ,KAAK,eAAe,GACpB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,KAAK,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,QAAQ,EACR,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,SAAS,EACT,cAAc,EACd,cAAc,EACd,cAAc,GACd,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACN,WAAW,EACX,KAAK,SAAS,EACd,WAAW,EACX,aAAa,GACb,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACN,YAAY,EACZ,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,aAAa,EACb,aAAa,EACb,YAAY,EACZ,cAAc,EACd,KAAK,WAAW,EAChB,eAAe,EACf,KAAK,WAAW,EAChB,aAAa,EACb,SAAS,EACT,UAAU,EACV,aAAa,EACb,KAAK,UAAU,EACf,KAAK,UAAU,EACf,OAAO,EACP,KAAK,YAAY,EACjB,KAAK,SAAS,EACd,WAAW,EACX,kBAAkB,EAClB,aAAa,EACb,YAAY,EACZ,UAAU,EACV,aAAa,GACb,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,kBAAkB,EAAE,2BAA2B,EAAE,MAAM,wBAAwB,CAAC;AACzF,OAAO,EACN,KAAK,YAAY,EACjB,gBAAgB,EAChB,eAAe,GACf,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACN,aAAa,EACb,YAAY,EACZ,KAAK,QAAQ,EACb,aAAa,EACb,aAAa,EACb,YAAY,GACZ,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACN,eAAe,EACf,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,cAAc,GACd,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACN,KAAK,mBAAmB,EACxB,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,EACzB,YAAY,EACZ,KAAK,eAAe,GACpB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACN,YAAY,EACZ,oBAAoB,EACpB,qBAAqB,EACrB,KAAK,YAAY,GACjB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,KAAK,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
export { anchorPx, easeFocus, followViewport, smoothingAlpha, targetRotation, } from "./character-camera.js";
|
|
2
|
-
export {
|
|
2
|
+
export { KEY_CHOICES, keyChoiceOf, withKeyChoice, } from "./character-key-choices.js";
|
|
3
|
+
export { airJumpSpeed, DEFAULT_DRIFT, DEFAULT_HOVER, DEFAULT_JUMP, DEFAULT_MOTION, drainHoverGauge, headingVector, IDLE_JUMP, inputSteer, inputThrottle, jumpArc, ORIGIN_POSE, rechargeHoverGauge, stepCharacter, stepVertical, turnToward, vectorHeading, } from "./character-physics.js";
|
|
3
4
|
export { CHARACTER_LAYER_ID, CHARACTER_VIEWPORT_PRIORITY } from "./character-runtime.js";
|
|
4
5
|
export { characterService, getCharacterApi, } from "./character-service.js";
|
|
6
|
+
export { effectiveJump, hoverGaugeOf, MAX_AIR_JUMPS, sanitizeHover, sanitizeJump, } from "./character-store.js";
|
|
5
7
|
export { AWARENESS_FIELD, parseWireState, } from "./character-sync.js";
|
|
6
8
|
export { DEFAULT_KEYS, } from "./character-types.js";
|
|
9
|
+
export { combineInput, isVirtualInputActive, normalizeVirtualInput, } from "./character-virtual-input.js";
|
|
7
10
|
export { createCharacterPlugin } from "./plugin.js";
|
|
8
11
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,QAAQ,EAGR,SAAS,EACT,cAAc,EACd,cAAc,EACd,cAAc,GACd,MAAM,uBAAuB,CAAC;AAC/B,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,QAAQ,EAGR,SAAS,EACT,cAAc,EACd,cAAc,EACd,cAAc,GACd,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACN,WAAW,EAEX,WAAW,EACX,aAAa,GACb,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACN,YAAY,EAGZ,aAAa,EACb,aAAa,EACb,YAAY,EACZ,cAAc,EAEd,eAAe,EAEf,aAAa,EACb,SAAS,EACT,UAAU,EACV,aAAa,EAGb,OAAO,EAGP,WAAW,EACX,kBAAkB,EAClB,aAAa,EACb,YAAY,EACZ,UAAU,EACV,aAAa,GACb,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,kBAAkB,EAAE,2BAA2B,EAAE,MAAM,wBAAwB,CAAC;AACzF,OAAO,EAEN,gBAAgB,EAChB,eAAe,GACf,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACN,aAAa,EACb,YAAY,EAEZ,aAAa,EACb,aAAa,EACb,YAAY,GACZ,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACN,eAAe,EAGf,cAAc,GACd,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAKN,YAAY,GAEZ,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACN,YAAY,EACZ,oBAAoB,EACpB,qBAAqB,GAErB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAA+B,qBAAqB,EAAE,MAAM,aAAa,CAAC"}
|
package/dist/plugin.d.ts
CHANGED
|
@@ -1,11 +1,17 @@
|
|
|
1
1
|
import type { UsketchPlugin } from "@edv4h/usketch-shared";
|
|
2
2
|
import type { CameraMode } from "./character-camera.js";
|
|
3
3
|
import type { ControlScheme, DriftParams, MotionParams } from "./character-physics.js";
|
|
4
|
+
import { type JumpInit } from "./character-store.js";
|
|
4
5
|
import type { CharacterAwareness } from "./character-sync.js";
|
|
5
6
|
import { type CharacterAppearance, type CharacterKeys, type CharacterRenderer } from "./character-types.js";
|
|
6
7
|
export interface CharacterPluginOptions {
|
|
7
8
|
/** Draws a character (self and others). Omitted = headless (nothing drawn). */
|
|
8
9
|
renderCharacter?: CharacterRenderer;
|
|
10
|
+
/**
|
|
11
|
+
* Draws a character's shadow, placed on the ground under it (the body stands at its
|
|
12
|
+
* feet height, so a jump lifts it off the shadow in 3D). Omitted = no shadow.
|
|
13
|
+
*/
|
|
14
|
+
renderShadow?: CharacterRenderer;
|
|
9
15
|
/** Broadcast look data for your character (e.g. `{ color: "#e44" }`). */
|
|
10
16
|
appearance?: CharacterAppearance;
|
|
11
17
|
/** Multiplayer: share characters through this provider's awareness. Omitted = solo. */
|
|
@@ -14,7 +20,7 @@ export interface CharacterPluginOptions {
|
|
|
14
20
|
};
|
|
15
21
|
/** Display name sent with your character. */
|
|
16
22
|
userName?: string;
|
|
17
|
-
/**
|
|
23
|
+
/** Keys as `KeyboardEvent.code` lists (default WASD, drift and jump Space). */
|
|
18
24
|
keys?: Partial<CharacterKeys>;
|
|
19
25
|
/** Start with the character on (default `false`). */
|
|
20
26
|
enabledInitially?: boolean;
|
|
@@ -29,6 +35,12 @@ export interface CharacterPluginOptions {
|
|
|
29
35
|
* tuning, an object = overrides. Default off.
|
|
30
36
|
*/
|
|
31
37
|
drift?: boolean | Partial<DriftParams>;
|
|
38
|
+
/**
|
|
39
|
+
* Press the jump key (Space) to jump: hop over cliffs taller than `motion.maxStep`.
|
|
40
|
+
* `true` = default tuning, an object = overrides (`airJumps` for multi-jumps, `hover:
|
|
41
|
+
* true` / a partial to hover while the key is held in a fall). Default off.
|
|
42
|
+
*/
|
|
43
|
+
jump?: boolean | JumpInit;
|
|
32
44
|
/** Where the character sits on screen, as canvas fractions (default center). */
|
|
33
45
|
screenAnchor?: {
|
|
34
46
|
x?: number;
|
package/dist/plugin.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAiB,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC1E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAiB,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC1E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAGvF,OAAO,EAAwB,KAAK,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAC3E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EACN,KAAK,mBAAmB,EACxB,KAAK,aAAa,EAClB,KAAK,iBAAiB,EAEtB,MAAM,sBAAsB,CAAC;AAG9B,MAAM,WAAW,sBAAsB;IACtC,+EAA+E;IAC/E,eAAe,CAAC,EAAE,iBAAiB,CAAC;IACpC;;;OAGG;IACH,YAAY,CAAC,EAAE,iBAAiB,CAAC;IACjC,yEAAyE;IACzE,UAAU,CAAC,EAAE,mBAAmB,CAAC;IACjC,uFAAuF;IACvF,UAAU,CAAC,EAAE;QAAE,SAAS,EAAE,kBAAkB,CAAA;KAAE,CAAC;IAC/C,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,+EAA+E;IAC/E,IAAI,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IAC9B,qDAAqD;IACrD,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,yBAAyB;IACzB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,+BAA+B;IAC/B,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,wCAAwC;IACxC,MAAM,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;IAC/B;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IACvC;;;;OAIG;IACH,IAAI,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC;IAC1B,gFAAgF;IAChF,YAAY,CAAC,EAAE;QAAE,CAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1C,6DAA6D;IAC7D,eAAe,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,wBAAgB,qBAAqB,CAAC,OAAO,GAAE,sBAA2B,GAAG,aAAa,CAmCzF"}
|
package/dist/plugin.js
CHANGED
|
@@ -14,11 +14,13 @@ export function createCharacterPlugin(options = {}) {
|
|
|
14
14
|
controlScheme: options.controlScheme,
|
|
15
15
|
motion: options.motion,
|
|
16
16
|
drift: options.drift,
|
|
17
|
+
jump: options.jump,
|
|
17
18
|
anchor: options.screenAnchor,
|
|
18
19
|
followSmoothing: options.followSmoothing,
|
|
19
20
|
appearance: options.appearance,
|
|
20
21
|
name: options.userName,
|
|
21
22
|
renderer: options.renderCharacter,
|
|
23
|
+
shadowRenderer: options.renderShadow,
|
|
22
24
|
});
|
|
23
25
|
const runtime = setupCharacterRuntime(ctx, store, {
|
|
24
26
|
keys: { ...DEFAULT_KEYS, ...options.keys },
|
package/dist/plugin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC9E,OAAO,EAAE,oBAAoB,
|
|
1
|
+
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC9E,OAAO,EAAE,oBAAoB,EAAiB,MAAM,sBAAsB,CAAC;AAE3E,OAAO,EAIN,YAAY,GACZ,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AA2CnE,MAAM,UAAU,qBAAqB,CAAC,OAAO,GAA2B,EAAE;IACzE,OAAO;QACN,EAAE,EAAE,0BAA0B;QAC9B,IAAI,EAAE,QAAQ;QACd,KAAK,CAAC,GAAkB;YACvB,MAAM,KAAK,GAAG,oBAAoB,CAAC;gBAClC,OAAO,EAAE,OAAO,CAAC,gBAAgB;gBACjC,UAAU,EAAE,OAAO,CAAC,UAAU;gBAC9B,aAAa,EAAE,OAAO,CAAC,aAAa;gBACpC,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,MAAM,EAAE,OAAO,CAAC,YAAY;gBAC5B,eAAe,EAAE,OAAO,CAAC,eAAe;gBACxC,UAAU,EAAE,OAAO,CAAC,UAAU;gBAC9B,IAAI,EAAE,OAAO,CAAC,QAAQ;gBACtB,QAAQ,EAAE,OAAO,CAAC,eAAe;gBACjC,cAAc,EAAE,OAAO,CAAC,YAAY;aACpC,CAAC,CAAC;YACH,MAAM,OAAO,GAAG,qBAAqB,CAAC,GAAG,EAAE,KAAK,EAAE;gBACjD,IAAI,EAAE,EAAE,GAAG,YAAY,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE;gBAC1C,SAAS,EAAE,OAAO,CAAC,UAAU,EAAE,SAAS;aACxC,CAAC,CAAC;YACH,MAAM,GAAG,GAAG,kBAAkB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;YAC/C,MAAM,OAAO,GAAG,oBAAoB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAC/C,mEAAmE;YACnE,MAAM,SAAS,GAAG,gBAAgB,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;YAE9D,OAAO,GAAG,EAAE;gBACX,SAAS,EAAE,CAAC;gBACZ,OAAO,EAAE,CAAC;gBACV,OAAO,CAAC,OAAO,EAAE,CAAC;YACnB,CAAC,CAAC;QACH,CAAC;KACD,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register-character-hud.d.ts","sourceRoot":"","sources":["../src/register-character-hud.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"register-character-hud.d.ts","sourceRoot":"","sources":["../src/register-character-hud.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAI3D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAQ3D,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,aAAa,EAAE,GAAG,EAAE,YAAY,GAAG,MAAM,IAAI,CAgNtF"}
|
|
@@ -1,6 +1,9 @@
|
|
|
1
|
+
import { KEY_CHOICES, keyChoiceOf, withKeyChoice } from "./character-key-choices.js";
|
|
2
|
+
import { DEFAULT_HOVER, DEFAULT_JUMP } from "./character-physics.js";
|
|
1
3
|
const CAMERA_MODES = ["fixed", "rotate", "free"];
|
|
2
4
|
const SCHEMES = ["directional", "vehicle"];
|
|
3
5
|
const truthy = (v) => v === true || v === "true";
|
|
6
|
+
const KEY_OPTIONS = KEY_CHOICES.map((c) => ({ value: c.value, label: c.label }));
|
|
4
7
|
export function registerCharacterHud(ctx, api) {
|
|
5
8
|
const offSettings = ctx.hud.registerSettings({
|
|
6
9
|
id: "usketch-plugin-character:settings",
|
|
@@ -27,7 +30,30 @@ export function registerCharacterHud(ctx, api) {
|
|
|
27
30
|
{ value: "vehicle", label: "車(前進+旋回)" },
|
|
28
31
|
],
|
|
29
32
|
},
|
|
30
|
-
{ name: "drift", label: "
|
|
33
|
+
{ name: "drift", label: "ドリフト(車)", type: "boolean" },
|
|
34
|
+
{ name: "driftKey", label: "ドリフトのキー", type: "enum", options: KEY_OPTIONS },
|
|
35
|
+
{ name: "driftHop", label: "ドリフトでホップ", type: "boolean" },
|
|
36
|
+
{ name: "jump", label: "ジャンプ", type: "boolean" },
|
|
37
|
+
{ name: "jumpKey", label: "ジャンプのキー", type: "enum", options: KEY_OPTIONS },
|
|
38
|
+
{ name: "jumpHeight", label: "ジャンプの高さ", type: "number", min: 8, max: 200, step: 4 },
|
|
39
|
+
{ name: "airJumps", label: "空中ジャンプ回数", type: "number", min: 0, max: 5, step: 1 },
|
|
40
|
+
{ name: "hover", label: "ホバー", type: "boolean" },
|
|
41
|
+
{
|
|
42
|
+
name: "hoverDuration",
|
|
43
|
+
label: "ホバー時間(秒)",
|
|
44
|
+
type: "number",
|
|
45
|
+
min: 0.2,
|
|
46
|
+
max: 5,
|
|
47
|
+
step: 0.1,
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
name: "hoverThrust",
|
|
51
|
+
label: "ホバーの推力(重力比)",
|
|
52
|
+
type: "number",
|
|
53
|
+
min: 0,
|
|
54
|
+
max: 3,
|
|
55
|
+
step: 0.1,
|
|
56
|
+
},
|
|
31
57
|
{ name: "moveSpeed", label: "速度", type: "number", min: 50, max: 3000, step: 50 },
|
|
32
58
|
{ name: "turnRate", label: "旋回(°/秒)", type: "number", min: 30, max: 1080, step: 30 },
|
|
33
59
|
{ name: "maxStep", label: "登れる段差", type: "number", min: 0, max: 400, step: 4 },
|
|
@@ -47,6 +73,24 @@ export function registerCharacterHud(ctx, api) {
|
|
|
47
73
|
return api.getControlScheme();
|
|
48
74
|
case "drift":
|
|
49
75
|
return api.getDrift() !== null;
|
|
76
|
+
case "driftKey":
|
|
77
|
+
return keyChoiceOf(api.getKeys().drift)?.value;
|
|
78
|
+
case "driftHop":
|
|
79
|
+
return api.getDrift()?.hop ?? false;
|
|
80
|
+
case "jumpKey":
|
|
81
|
+
return keyChoiceOf(api.getKeys().jump)?.value;
|
|
82
|
+
case "jump":
|
|
83
|
+
return api.getJump() !== null;
|
|
84
|
+
case "jumpHeight":
|
|
85
|
+
return (api.getJump() ?? DEFAULT_JUMP).height;
|
|
86
|
+
case "airJumps":
|
|
87
|
+
return (api.getJump() ?? DEFAULT_JUMP).airJumps;
|
|
88
|
+
case "hover":
|
|
89
|
+
return (api.getJump()?.hover ?? null) !== null;
|
|
90
|
+
case "hoverDuration":
|
|
91
|
+
return (api.getJump()?.hover ?? DEFAULT_HOVER).duration;
|
|
92
|
+
case "hoverThrust":
|
|
93
|
+
return (api.getJump()?.hover ?? DEFAULT_HOVER).thrust;
|
|
50
94
|
case "moveSpeed":
|
|
51
95
|
return motion.moveSpeed;
|
|
52
96
|
case "turnRate":
|
|
@@ -82,6 +126,23 @@ export function registerCharacterHud(ctx, api) {
|
|
|
82
126
|
case "drift":
|
|
83
127
|
api.setDrift(truthy(value));
|
|
84
128
|
return;
|
|
129
|
+
case "driftKey":
|
|
130
|
+
case "jumpKey":
|
|
131
|
+
api.setKeys(withKeyChoice(api.getKeys(), name === "driftKey" ? "drift" : "jump", String(value)));
|
|
132
|
+
return;
|
|
133
|
+
case "driftHop":
|
|
134
|
+
// Like the other drift tuning: only while drifting is on.
|
|
135
|
+
if (api.getDrift())
|
|
136
|
+
api.setDrift({ hop: truthy(value) });
|
|
137
|
+
return;
|
|
138
|
+
case "jump":
|
|
139
|
+
api.setJump(truthy(value));
|
|
140
|
+
return;
|
|
141
|
+
case "hover":
|
|
142
|
+
// Like the other jump tuning: only while jumping is on.
|
|
143
|
+
if (api.getJump())
|
|
144
|
+
api.setJump({ hover: truthy(value) });
|
|
145
|
+
return;
|
|
85
146
|
}
|
|
86
147
|
const n = Number(value);
|
|
87
148
|
if (!Number.isFinite(n))
|
|
@@ -96,6 +157,23 @@ export function registerCharacterHud(ctx, api) {
|
|
|
96
157
|
case "maxStep":
|
|
97
158
|
api.setMotion({ maxStep: n });
|
|
98
159
|
break;
|
|
160
|
+
case "jumpHeight":
|
|
161
|
+
// Tuning while off keeps it off (applied when jumping is turned on).
|
|
162
|
+
if (api.getJump())
|
|
163
|
+
api.setJump({ height: n });
|
|
164
|
+
break;
|
|
165
|
+
case "airJumps":
|
|
166
|
+
if (api.getJump())
|
|
167
|
+
api.setJump({ airJumps: n });
|
|
168
|
+
break;
|
|
169
|
+
case "hoverDuration":
|
|
170
|
+
if (api.getJump()?.hover)
|
|
171
|
+
api.setJump({ hover: { duration: n } });
|
|
172
|
+
break;
|
|
173
|
+
case "hoverThrust":
|
|
174
|
+
if (api.getJump()?.hover)
|
|
175
|
+
api.setJump({ hover: { thrust: n } });
|
|
176
|
+
break;
|
|
99
177
|
case "anchorX":
|
|
100
178
|
api.setAnchor({ x: n / 100 });
|
|
101
179
|
break;
|
|
@@ -125,7 +203,16 @@ export function registerCharacterHud(ctx, api) {
|
|
|
125
203
|
run: () => api.placeAtAnchor(),
|
|
126
204
|
isEnabled: () => api.isEnabled(),
|
|
127
205
|
});
|
|
206
|
+
const offJump = ctx.actions.register({
|
|
207
|
+
id: "character:jump",
|
|
208
|
+
label: "ジャンプ",
|
|
209
|
+
group: "キャラクター",
|
|
210
|
+
order: 3,
|
|
211
|
+
run: () => api.jump(),
|
|
212
|
+
isEnabled: () => api.isEnabled() && api.getJump() !== null,
|
|
213
|
+
});
|
|
128
214
|
return () => {
|
|
215
|
+
offJump();
|
|
129
216
|
offPlace();
|
|
130
217
|
offToggle();
|
|
131
218
|
offSettings();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register-character-hud.js","sourceRoot":"","sources":["../src/register-character-hud.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"register-character-hud.js","sourceRoot":"","sources":["../src/register-character-hud.ts"],"names":[],"mappings":"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"}
|