UNPKG

2d-physics-engine

Version:

A lightweight, flexible 2D physics engine with ECS architecture, built with TypeScript

71 lines 2.21 kB
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