2d-physics-engine
Version:
A lightweight, flexible 2D physics engine with ECS architecture, built with TypeScript
71 lines • 2.21 kB
JavaScript
import { Vector2 } from '../math/Vector2';
import { Component } from './Component.abstract';
export class Transform extends Component {
constructor(position = new Vector2(), rotation = 0, // In radians
scale = new Vector2(1, 1)) {
super();
Object.defineProperty(this, "position", {
enumerable: true,
configurable: true,
writable: true,
value: position
});
Object.defineProperty(this, "rotation", {
enumerable: true,
configurable: true,
writable: true,
value: rotation
});
Object.defineProperty(this, "scale", {
enumerable: true,
configurable: true,
writable: true,
value: scale
});
Object.defineProperty(this, "componentId", {
enumerable: true,
configurable: true,
writable: true,
value: Symbol('Transform')
});
}
// Transform a point from local space to world space
transformPoint(point) {
// First scale
let transformed = new Vector2(point.x * this.scale.x, point.y * this.scale.y);
// Then rotate
transformed = transformed.rotate(this.rotation);
// Finally translate
return transformed.add(this.position);
}
// Transform a point from world space to local space
inverseTransformPoint(point) {
// Subtract position
let transformed = point.subtract(this.position);
// Inverse rotate
transformed = transformed.rotate(-this.rotation);
// Inverse scale
return new Vector2(transformed.x / this.scale.x, transformed.y / this.scale.y);
}
// Getters and setters
getPosition() {
return this.position.clone();
}
setPosition(position) {
this.position = position.clone();
}
getRotation() {
return this.rotation;
}
setRotation(rotation) {
this.rotation = rotation;
}
getScale() {
return this.scale.clone();
}
setScale(scale) {
this.scale = scale.clone();
}
update() { }
}
//# sourceMappingURL=Transform.component.js.map