- From: Christoph Guttandin via GitHub <sysbot+gh@w3.org>
- Date: Sun, 12 Mar 2023 13:45:59 +0000
- To: public-webtiming@w3.org
Yes, you're right. It's probably a bit too powerful.
1. But at least for this use case the usage of arbitrary JavaScript could be an advantage. I think it's possible to dynamically change the value by using a closure. Something like the following should work.
```js
const createSkew = (timingObject, value) => [
new TimingObject(
timingObject,
{
query: ({ position, ...vector }) => ({ position: position + value, ...vector }),
update: ({ position, ...vector }) => ({ position: position - value, ...vector })
})
),
(newValue) => value = newValue
];
const [skew, changeSkew] = createSkew(to, 4);
// skew is a TimingObject with the applied change.
// changeSkew(2) can be used to change the value.
```
It could probably also be done in an object oriented style.
```js
class SkewedTimingObject extends TimingObject {
constructor(timingObject, skew) {
super(
timingObject,
{
query: (vector) => this.query(vector),
update: (vector) => this.update(vector)
}
);
this.skew = skew;
}
query(vector) {
return { position: position + this.skew, ...vector };
}
update(vector) {
return { position: position - this.skew, ...vector };
}
}
const skewedTimingObject = new SkewedTimingObject(to, 4);
skewedTimingObject.skew = 2;
```
2. The algorithm for [creating a new `TimingObject`](https://webtiming.github.io/timingobject/#create-a-new-timing-object) deals with range violations already. Maybe the same algorithm could be used here too.
> 8. If timing's [range](https://webtiming.github.io/timingobject/#dfn-range) does not [cover](https://webtiming.github.io/timingobject/#dfn-cover) the position of the [internal vector](https://webtiming.github.io/timingobject/#dfn-internal-vector):
> 1. Let timing's [internal vector](https://webtiming.github.io/timingobject/#dfn-internal-vector)'s position be [start position](https://webtiming.github.io/timingobject/#dfn-start-position) or [end position](https://webtiming.github.io/timingobject/#dfn-end-position), whichever is closest
> 2. Let timing's [internal vector](https://webtiming.github.io/timingobject/#dfn-internal-vector)'s velocity and acceleration be 0.0 if the direction of the motion would make the position leave the [range](https://webtiming.github.io/timingobject/#dfn-range) immediately.
> 3. [Set the internal timeout](https://webtiming.github.io/timingobject/#dfn-set-the-internal-timeout) of timing.
3. I'm not sure how that could be enforced. Maybe it's okay to allow people to do weird stuff.
--
GitHub Notification of comment by chrisguttandin
Please view or discuss this issue at https://github.com/webtiming/timingobject/issues/13#issuecomment-1465204347 using your GitHub account
--
Sent via github-notify-ml as configured in https://github.com/w3c/github-notify-ml-config
Received on Sunday, 12 March 2023 13:46:01 UTC