23 lines
1.1 KiB
TypeScript
23 lines
1.1 KiB
TypeScript
|
|
module es {
|
||
|
|
export class Tire extends Composite {
|
||
|
|
constructor(origin: Vector2, radius: number, segments: number, spokeStiffness: number = 1, treadStiffness: number = 1) {
|
||
|
|
super();
|
||
|
|
|
||
|
|
const stride = 2 * Math.PI / segments;
|
||
|
|
for (let i = 0; i < segments; i ++) {
|
||
|
|
const theta = i * stride;
|
||
|
|
this.addParticle(new Particle(new Vector2(origin.x + Math.cos(theta) * radius,
|
||
|
|
origin.y + Math.sin(theta) * radius)));
|
||
|
|
}
|
||
|
|
|
||
|
|
const centerParticle = this.addParticle(new Particle(origin));
|
||
|
|
|
||
|
|
for (let i = 0; i < segments; i ++) {
|
||
|
|
this.addConstraint(new DistanceConstraint(this.particles[i], this.particles[(i + 1) % segments], treadStiffness));
|
||
|
|
this.addConstraint(new DistanceConstraint(this.particles[i], centerParticle, spokeStiffness))
|
||
|
|
.setCollidesWithColliders(false);
|
||
|
|
this.addConstraint(new DistanceConstraint(this.particles[i], this.particles[(i + 5) % segments], treadStiffness));
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|