From 07f4f0487c1166faef8996545df35586cd3fe485 Mon Sep 17 00:00:00 2001 From: cha0s Date: Sat, 13 Apr 2019 18:13:35 -0500 Subject: [PATCH] refactor: Camera::realOffset --- packages/topdown/camera.js | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/packages/topdown/camera.js b/packages/topdown/camera.js index 526628b..b68d2d0 100644 --- a/packages/topdown/camera.js +++ b/packages/topdown/camera.js @@ -28,12 +28,16 @@ export class Camera extends decorate(class {}) { constructor() { super(); + this._realOffset = [0, 0]; + this.viewOrigin = [0, 0]; this.on('areaSizeChanged', this.onAreaSizeChanged, this); + this.on('realPositionChanged', this.onRealPositionChanged, this); this.on('viewSizeChanged', this.onViewSizeChanged, this); } destroy() { this.off('areaSizeChanged', this.onAreaSizeChanged); + this.off('realPositionChanged', this.onRealPositionChanged, this); this.off('viewSizeChanged', this.onViewSizeChanged); } @@ -41,8 +45,14 @@ export class Camera extends decorate(class {}) { this.position = this.position; } + onRealPositionChanged() { + this._realOffset = Vector.sub(this.realPosition, this.viewOrigin); + } + onViewSizeChanged() { this.position = this.position; + this.viewOrigin = Vector.scale(this.viewSize, 0.5); + this._realOffset = Vector.sub(this.realPosition, this.viewOrigin); } get position() { @@ -56,17 +66,21 @@ export class Camera extends decorate(class {}) { if (0 === Vector.area(this.viewSize)) { return super.position = position; } - const halfViewSize = Vector.scale(this.viewSize, 0.5); + const viewOrigin = this.viewOrigin; super.position = Vector.clamp( position, - halfViewSize, - Vector.sub(this.areaSize, halfViewSize) + viewOrigin, + Vector.sub(this.areaSize, viewOrigin) ); } + get realOffset() { + return this._realOffset; + } + get rectangle() { return Rectangle.compose( - Vector.sub(this.position, Vector.scale(this.viewSize, 0.5)), + Vector.sub(this.position, this.viewOrigin), this.viewSize, ); }