1 | export class SpringSystem {
|
2 | listeners: Array<Listener>|null;
|
3 | looper: Looper;
|
4 |
|
5 | constructor(looper?: Looper);
|
6 |
|
7 | setLooper(looper: Looper): void;
|
8 |
|
9 | createSpring(tension?: number, friction?: number): Spring;
|
10 | createSpringWithBouncinessAndSpeed(bounciness?: number, speed?: number):
|
11 | Spring;
|
12 | createSpringWithConfig(kwargs: SpringConfigDict): Spring;
|
13 |
|
14 | getIsIdle(): boolean;
|
15 | getSpringById(id: number): Spring;
|
16 | getAllSprings(): Array<Spring>;
|
17 |
|
18 | registerSpring(value: Spring): void;
|
19 | deregisterSpring(value: Spring): void;
|
20 |
|
21 | advance(time: number, deltaTime: number): void;
|
22 | loop(currentTimeMillis: number): void;
|
23 |
|
24 | activateSpring(springId: number): void;
|
25 |
|
26 | addListener(listener: Listener): void;
|
27 | removeListener(listener: Listener): void;
|
28 | removeAllListeners(): void;
|
29 | }
|
30 |
|
31 | export class Spring {
|
32 | static MAX_DELTA_TIME_SEC: number;
|
33 | static SOLVER_TIMESTEP_SEC: number;
|
34 |
|
35 | listeners: Array<Listener>|null;
|
36 |
|
37 | constructor(system: SpringSystem);
|
38 |
|
39 | destroy(): void;
|
40 |
|
41 | getId(): number;
|
42 |
|
43 | getSpringConfig(): SpringConfigDict;
|
44 | setSpringConfig(value: SpringConfigDict): Spring;
|
45 |
|
46 | getCurrentValue(): number;
|
47 | setCurrentValue(currentValue: number, skipSetAtRest?: boolean): Spring;
|
48 |
|
49 | getStartValue(): number;
|
50 |
|
51 | getCurrentDisplacementDistance(): number;
|
52 | getCurrentDisplacementDistanceForState(state: PhysicsState): number;
|
53 |
|
54 | getEndValue(): number;
|
55 | setEndValue(value: number): Spring;
|
56 |
|
57 | getVelocity(): number;
|
58 | setVelocity(value: number): Spring;
|
59 |
|
60 | getRestSpeedThreshold(): number;
|
61 | setRestSpeedThreshold(value: number): Spring;
|
62 |
|
63 | getRestDisplacementThreshold(): number;
|
64 |
|
65 | isOvershootClampingEnabled(): boolean;
|
66 | setOvershootClampingEnabled(value: boolean): Spring;
|
67 |
|
68 | isOvershooting(): boolean;
|
69 |
|
70 | advance(time: number, realDeltaTime: number): void;
|
71 | systemShouldAdvance(): boolean;
|
72 |
|
73 | notifyPositionUpdated(notifyActivate?: boolean, notifyAtRest?: boolean): void;
|
74 |
|
75 | wasAtRest(): boolean;
|
76 | isAtRest(): boolean;
|
77 | setAtRest(): Spring;
|
78 |
|
79 | interpolate(value: number): void;
|
80 |
|
81 | getListeners(): Array<Listener>;
|
82 | addListener(value: Listener): Spring;
|
83 | removeListener(value: Listener): Spring;
|
84 | removeAllListeners(): Spring;
|
85 |
|
86 | currentValueIsApproximately(value: number): boolean;
|
87 | }
|
88 |
|
89 | export interface CompleteListener {
|
90 | onSpringEndStateChange(spring: Spring): void;
|
91 | onBeforeIntegrate(spring: Spring): void;
|
92 | onAfterIntegrate(spring: Spring): void;
|
93 | onSpringActivate(spring: Spring): void;
|
94 | onSpringUpdate(spring: Spring): void;
|
95 | onSpringAtRest(spring: Spring): void;
|
96 | }
|
97 |
|
98 | export type Listener = Partial<CompleteListener>;
|
99 |
|
100 | export type PhysicsState = {
|
101 | position: number,
|
102 | friction: number,
|
103 | };
|
104 |
|
105 |
|
106 |
|
107 |
|
108 |
|
109 | export type SpringConfigDict = {
|
110 | tension: number,
|
111 | friction: number,
|
112 | };
|
113 |
|
114 | export class SpringConfig {
|
115 | static DEFAULT_ORIGAMI_SPRING_CONFIG: SpringConfig;
|
116 |
|
117 | static fromOrigamiTensionAndFriction(tension: number, friction: number):
|
118 | SpringConfig;
|
119 | static fromBouncinessAndSpeed(bounciness: number, speed: number):
|
120 | SpringConfig;
|
121 | static coastingConfigWithOrigamiFriction(friction: number): SpringConfig;
|
122 |
|
123 | tension: number;
|
124 | friction: number;
|
125 |
|
126 | constructor(tension: number, friction: number);
|
127 | }
|
128 |
|
129 | export interface Looper {
|
130 | springSystem: SpringSystem;
|
131 |
|
132 | run(): void;
|
133 | }
|
134 |
|
135 | export class AnimationLooper implements Looper {
|
136 | springSystem: SpringSystem;
|
137 |
|
138 | constructor();
|
139 |
|
140 | run(): void;
|
141 | }
|
142 |
|
143 | export class SimulationLooper implements Looper {
|
144 | springSystem: SpringSystem;
|
145 |
|
146 | constructor(timestep?: number);
|
147 |
|
148 | run(): void;
|
149 | }
|
150 |
|
151 | export class SteppingSimulationLooper extends SimulationLooper {
|
152 | step(timestep: number): void;
|
153 | }
|
154 |
|
155 | export namespace OrigamiValueConverter {
|
156 | function tensionFromOrigamiValue(value: number): number;
|
157 | function origamiValueFromTension(value: number): number;
|
158 | function frictionFromOrigamiValue(value: number): number;
|
159 | function origamiFromFriction(value: number): number;
|
160 | }
|
161 |
|
162 | export class BouncyConversion {
|
163 | bounciness: number;
|
164 | speed: number;
|
165 |
|
166 | constructor(bounciness: number, speed: number);
|
167 |
|
168 | normalize(value: number, startValue: number, endValue: number): void;
|
169 | projectNormal(n: number, start: number, end: number): void;
|
170 | linearInterpolation(t: number, start: number, end: number): void;
|
171 | quadraticOutInterpolation(t: number, start: number, end: number): void;
|
172 | b3Friction1(x: number): void;
|
173 | b3Friction2(x: number): void;
|
174 | b3Friction3(x: number): void;
|
175 | b3Nobounce(tension: number): void;
|
176 | }
|
177 |
|
178 | export type RGB = {
|
179 | r: number,
|
180 | g: number,
|
181 | b: number,
|
182 | };
|
183 |
|
184 | export type RequestAnimationFrame = typeof requestAnimationFrame;
|
185 |
|
186 | export namespace util {
|
187 | function bind(func: Function, context: any): Function;
|
188 | function extend<T, U>(target: T, source: U): T&U;
|
189 |
|
190 | function hexToRGB(color: string): RGB;
|
191 | function rgbToHex(r: number, g: number, b: number): string;
|
192 |
|
193 | const onFrame: RequestAnimationFrame;
|
194 |
|
195 |
|
196 |
|
197 | function mapValueInRange(
|
198 | value: number, fromLow: number, fromHigh: number, toLow: number,
|
199 | toHigh: number): number;
|
200 | function interpolateColor(
|
201 | val: number, startColor: string, endColor: string, fromLow?: number,
|
202 | fromHigh?: number, asRGB?: boolean): string;
|
203 | function degreesToRadians(value: number): number;
|
204 | function radiansToDegrees(value: number): number;
|
205 | }
|